{"title":"Ovia - Bathroom Accessories","description":"\u003ch2\u003eOvia Bathroom Accessories by Bathroom Sales Direct\u003c\/h2\u003e\n\u003cp\u003e\u003cspan style=\"font-weight: 400;\"\u003eElevate your bathroom with the sophisticated Ovia collection, where luxury meets functionality in every piece. Crafted for discerning homeowners, Ovia accessories blend contemporary aesthetics with practical designs, enhancing your bathroom without overwhelming it.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3\u003eUnparalleled Quality \u0026amp; Style\u003c\/h3\u003e\n\u003cp\u003e\u003cspan style=\"font-weight: 400;\"\u003eEach product in the Ovia collection boasts high-quality materials and superior craftsmanship. From sleek towel racks to elegant \u003c\/span\u003e\u003cspan style=\"font-weight: 400;\"\u003esoap dispensers\u003c\/span\u003e\u003cspan style=\"font-weight: 400;\"\u003e, our accessories are designed to withstand the test of time while adding a touch of class. Choose from a variety of finishes that cater to every style, be it modern chic or classic elegance.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3\u003eDesigned for Every Bathroom\u003c\/h3\u003e\n\u003cp\u003e\u003cspan style=\"font-weight: 400;\"\u003eThe Ovia range offers a wide selection of products to ensure your bathroom is both beautiful and functional. Ovia’s versatile \u003c\/span\u003e\u003cspan style=\"font-weight: 400;\"\u003etowel rails\u003c\/span\u003e\u003cspan style=\"font-weight: 400;\"\u003e provide ample space, while their soap dispensers add a hygienic touch of convenience. Perfect for any size of bathroom, the Ovia collection promises easy installation and compatibility with various styles.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3\u003eShop with Confidence\u003c\/h3\u003e\n\u003cp\u003e\u003cspan style=\"font-weight: 400;\"\u003eAt Bathroom Sales Direct, we are committed to providing you with the best value. Enjoy our best price guarantee and benefit from Australia-wide delivery on all orders. Discover the perfect balance of style, quality, and affordability with the Ovia collection.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3\u003eDiscover the Ovia Collection Today\u003c\/h3\u003e\n\u003cp\u003e\u003cspan style=\"font-weight: 400;\"\u003eBrowse our selection of \u003c\/span\u003e\u003cspan style=\"font-weight: 400;\"\u003ebathroom accessories\u003c\/span\u003e\u003cspan style=\"font-weight: 400;\"\u003e and transform your space into a sanctuary of style and comfort. Shop now or give us a call on \u003c\/span\u003e\u003cspan style=\"font-weight: 400;\"\u003e(02) 8488 1564\u003c\/span\u003e\u003cspan style=\"font-weight: 400;\"\u003e to take advantage of our exclusive online offers and elevate your bathroom decor with pieces that are as functional as they are beautiful.\u003c\/span\u003e\u003c\/p\u003e","products":[{"product_id":"ovia-milan-knob-robe-hook-pvd-brushed-gold","title":"Ovia Milan Knob Robe Hook PVD Brushed Gold","description":"\u003cp\u003eIntroducing the Ovia Milan Knob Robe Hook – where functionality meets elegance in your home! Elevate your space with this sophisticated and versatile accessory designed to add a touch of modern luxury to your living environment.\u003c\/p\u003e\n\n\u003cp\u003eCrafted with meticulous attention to detail, the Milan Knob Robe Hook showcases a sleek and contemporary design, seamlessly blending form and function. The polished chrome finish not only adds a timeless aesthetic but also ensures durability, making it a stylish and reliable addition to your home.\u003c\/p\u003e\n\n\u003cp\u003eInstallation is a breeze with the Ovia Milan Knob Robe Hook, thanks to its user-friendly design and included mounting hardware. Whether you're looking to enhance your bathroom, bedroom, or entryway, this robe hook effortlessly accommodates your needs.\u003c\/p\u003e\n\n\u003cp\u003eThe knob shape of the hook not only provides a secure grip for your robes but also adds a subtle decorative element to your space. Its compact size makes it an ideal choice for smaller rooms or areas where space optimization is key.\u003c\/p\u003e\n\n\u003cp\u003eSay goodbye to cluttered spaces and embrace the organized simplicity offered by the Ovia Milan Knob Robe Hook. Perfect for hanging robes, towels, or even clothing items, this versatile accessory complements a variety of interior styles, from minimalist to contemporary.\u003c\/p\u003e\n\n\u003cp\u003eInvest in quality, style, and functionality with the Ovia Milan Knob Robe Hook – because every detail matters when it comes to creating a home that reflects your personal taste and lifestyle. Upgrade your living space today with this exquisite robe hook that effortlessly combines practicality with a touch of modern sophistication.\u003c\/p\u003e","brand":"Ovia","offers":[{"title":"Default Title","offer_id":46219522048149,"sku":"OV2318BG","price":47.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia-Milan-Knob.jpg?v=1752812169"},{"product_id":"ovia-milan-knob-robe-hook-pvd-brushed-nickel","title":"Ovia Milan Knob Robe Hook PVD Brushed Nickel","description":"\u003cp\u003eIntroducing the Ovia Milan Knob Robe Hook – where functionality meets elegance in your home! Elevate your space with this sophisticated and versatile accessory designed to add a touch of modern luxury to your living environment.\u003c\/p\u003e\n\u003cp\u003eCrafted with meticulous attention to detail, the Milan Knob Robe Hook showcases a sleek and contemporary design, seamlessly blending form and function. The polished chrome finish not only adds a timeless aesthetic but also ensures durability, making it a stylish and reliable addition to your home.\u003c\/p\u003e\n\u003cp\u003eInstallation is a breeze with the Ovia Milan Knob Robe Hook, thanks to its user-friendly design and included mounting hardware. Whether you're looking to enhance your bathroom, bedroom, or entryway, this robe hook effortlessly accommodates your needs.\u003c\/p\u003e\n\u003cp\u003eThe knob shape of the hook not only provides a secure grip for your robes but also adds a subtle decorative element to your space. Its compact size makes it an ideal choice for smaller rooms or areas where space optimization is key.\u003c\/p\u003e\n\u003cp\u003eSay goodbye to cluttered spaces and embrace the organized simplicity offered by the Ovia Milan Knob Robe Hook. Perfect for hanging robes, towels, or even clothing items, this versatile accessory complements a variety of interior styles, from minimalist to contemporary.\u003c\/p\u003e\n\u003cp\u003eInvest in quality, style, and functionality with the Ovia Milan Knob Robe Hook – because every detail matters when it comes to creating a home that reflects your personal taste and lifestyle. Upgrade your living space today with this exquisite robe hook that effortlessly combines practicality with a touch of modern sophistication.\u003c\/p\u003e","brand":"Ovia","offers":[{"title":"Default Title","offer_id":46219522080917,"sku":"OV2318BN","price":47.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia-Milan-Knob-Robe-Hook-PVD-Brushed-Nickel.jpg?v=1752812172"},{"product_id":"1-round-black-double-towel-rack-rail-800mm","title":"Ovia Milan 750 Double Towel Rail Matte Black","description":"\u003cdiv class=\"ovia-pd opd--matte\" style=\"--ac:#7E7A75;--ac-deep:#1A1815;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_MatteBlack_Hero_A.png?v=1779884098');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Matte Black\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--mb{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"Electroplated\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003e750 Double Towel Rail\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e towel rail you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedGold_Hero_A.png?v=1779884005\" alt=\"Ovia Milan 750 Double Towel Rail in Matte Black\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779884023\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Champagne_Hero_A.png?v=1779884042\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Chrome_Hero_A.png?v=1779884061\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_GunMetal_Hero_A.png?v=1779884080\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_MatteBlack_Hero_A.png?v=1779884098\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA towel rail is the most-handled fitting in the bathroom — wet towels, steam and a daily tug — so it has to be built for it. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e rail is machined from DZR brass and finished in matte black, multi-layer electroplated to stay hard-wearing and true for the life of the room, fixed dead-level on concealed mounts. The detail that pulls the room together — and the last one you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eMatte Black\u003csmall\u003eElectroplated\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e750 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e131 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary rail metal does in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBuilt up over the brass in multiple plated layers, the matte black resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that take the weight of wet towels without working loose — solid, dead-level and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch is-matte\" style=\"--ac:#2e2b28\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eMatte Black Electroplated\u003c\/b\u003e · layered and sealed over solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePlated to last\u003c\/h4\u003e\n    \u003cp\u003eThe matte black is built up over the solid-brass body in successive electroplated layers, then sealed against tarnish and everyday wear — the same proven process trusted on quality tapware for generations. Hard-wearing and true to tone, and backed, like every Milan finish, for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_MatteBlack_A_7bb37025-1814-4753-9a78-80abc39ccb20.png?v=1779892493\" alt=\"Milan towel rail in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_MatteBlack_B_39411753-aba0-4ca8-9fcc-fae7303f27e2.png?v=1779892493\" alt=\"Milan towel rail mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_MatteBlack_C_99164353-4e37-4d1d-8110-0fbe1323cf68.png?v=1779892493\" alt=\"Milan towel rail matte black\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eMatte black anchors a bright palette.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedGold_A_ec6331ec-5558-4a2f-b4b4-916ab6617c45.png?v=1779892492\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedGold_Hero_A.png?v=1779884005\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedNickelWarm_A_74ed69d1-ac9c-4723-bf75-983933aec476.png?v=1779892490\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779884023\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Champagne_A_d016df3f-06f1-4e1e-acac-0361ee5fb83f.png?v=1779892491\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Champagne_Hero_A.png?v=1779884042\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Chrome_A_3bc88e37-b208-40ff-a4df-2d968d31f1bd.png?v=1779892491\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Chrome_Hero_A.png?v=1779884061\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_GunMetal_A_2b049ef0-1cef-4f1e-a535-89454303aa56.png?v=1779892492\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_GunMetal_Hero_A.png?v=1779884080\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb is-current\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_MatteBlack_A_7bb37025-1814-4753-9a78-80abc39ccb20.png?v=1779892493\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_MatteBlack_Hero_A.png?v=1779884098\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_MatteBlack_Hero_B.png?v=1779884105\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e750 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e131 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan rail carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the matte black is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL2175MB\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same matte black finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":46321031839893,"sku":"BK401-750-B","price":107.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_MatteBlack_A_415b9241-383d-4602-b4f3-d0b65937a148.png?v=1785832669"},{"product_id":"1-round-black-single-towel-rack-rail-300mm","title":"Ovia Round Black Single Towel Rack Rail 300mm","description":"\u003cp\u003e\u003cstrong\u003eFeatures:\u003c\/strong\u003e\u003c\/p\u003e\n \u003cul\u003e\n \u003cli\u003eMaterial: Durable Solid Brass\u003c\/li\u003e\n \u003cli\u003eColor: Matt Black\u003c\/li\u003e\n \u003cli\u003eLength: 300mm\u003cb\u003e(There may be 2-3mm error as manual measurement)\u003c\/b\u003e\n \u003c\/li\u003e\n \u003cli\u003eAdvanced rust proofing，aesthetic and well-designed\u003c\/li\u003e\n \u003cli\u003eStrong base, rugged and durable\u003c\/li\u003e\n \u003cli\u003eConform to Australian Standard\u003c\/li\u003e\n \u003cli\u003eEasy to install\u003c\/li\u003e\n \u003cli\u003e5 years replacement product and parts\u003c\/li\u003e\n \u003cli\u003e\u003cb\u003ePackage Contents:\u003c\/b\u003e\u003c\/li\u003e\n \u003cli\u003e1 x Single Towel Rail\u003c\/li\u003e\n \u003cli\u003eInstallation Accessories\u003c\/li\u003e\n \u003c\/ul\u003e","brand":"Ovia","offers":[{"title":"Default Title","offer_id":46321031905429,"sku":"BK402-250-B","price":59.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/300mm-Black-Towel-Rail_dab240c5-96dd-4bce-a30f-6a49feadb225.webp?v=1755563031"},{"product_id":"1-round-black-solid-brass-double-robe-hook-wall-mounted","title":"Ovia Round Black Solid Brass Double Robe Hook Wall Mounted","description":"\u003cp\u003e\u003cstrong\u003eFeatures:\u003c\/strong\u003e\u003c\/p\u003e\n \u003cul\u003e\n \u003cli\u003eMaterial: Durable Solid Brass\u003c\/li\u003e\n \u003cli\u003eColour: Matt Black\u003c\/li\u003e\n \u003cli\u003eStrong base, rugged and durable\u003c\/li\u003e\n \u003cli\u003eHigh standard of corrosion resistance\u003c\/li\u003e\n \u003cli\u003eEasy to install\u003c\/li\u003e\n \u003cli\u003e5 years replacement products and parts\u003c\/li\u003e\n \u003cli\u003e\n \u003cb\u003ePackage Contents:\u003c\/b\u003e\n \u003cul\u003e\n \u003cli\u003e1 x Robe hook\u003c\/li\u003e\n \u003cli\u003eInstallation accessories\u003c\/li\u003e\n \u003c\/ul\u003e\n \u003c\/li\u003e\n \u003c\/ul\u003e","brand":"Ovia","offers":[{"title":"Default Title","offer_id":46321031938197,"sku":"BK425-B","price":39.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Matte-Black-D-Robe-hook_020683b0-b1ac-4b1a-9c95-4445e963ed89.jpg?v=1755563037"},{"product_id":"1-round-black-toilet-paper-holder-solid-brass-wall-mounted","title":"Ovia Milan Toilet Roll Holder Matte Black","description":"\u003cdiv class=\"ovia-pd opd--matte opd--compact\" style=\"--ac:#7E7A75;--ac-deep:#1A1815;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_MatteBlack_Hero_A.png?v=1779884213');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Matte Black\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--mb{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"Electroplated\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n  \/* compact banner render — wide horizontal accessories (hand-towel \/ toilet-roll\n     holder) overrun the right edge at the default 170%; inert without the class *\/\n  .ovia-pd.opd--compact .opd-prod{width:120%;}\n  .ovia-pd.opd--compact .opd-glint{-webkit-mask-size:120% auto,120% auto,120% auto;mask-size:120% auto,120% auto,120% auto;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003eToilet Roll Holder\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e toilet roll holder you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedGold_Hero_A.png?v=1779884118\" alt=\"Ovia Milan Toilet Roll Holder in Matte Black\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedNickelWarm_Hero_A.png?v=1779884136\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Champagne_Hero_A.png?v=1779884156\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Chrome_Hero_A.png?v=1779884175\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_GunMetal_Hero_A.png?v=1779884194\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_MatteBlack_Hero_A.png?v=1779884213\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eThe most-reached-for fitting in the smallest room. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e toilet roll holder is machined from DZR brass and finished in matte black, multi-layer electroplated to stay hard-wearing and true for the life of the room, fixed dead-level on a concealed mount — solid, quiet, and made to outlast the room.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eMatte Black\u003csmall\u003eElectroplated\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e178 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e72 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary fittings do in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBuilt up over the brass in multiple plated layers, the matte black resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that hold it dead-level and never work loose — solid and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch is-matte\" style=\"--ac:#2e2b28\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eMatte Black Electroplated\u003c\/b\u003e · layered and sealed over solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePlated to last\u003c\/h4\u003e\n    \u003cp\u003eThe matte black is built up over the solid-brass body in successive electroplated layers, then sealed against tarnish and everyday wear — the same proven process trusted on quality tapware for generations. Hard-wearing and true to tone, and backed, like every Milan finish, for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_MatteBlack_A_aba4f578-d8dc-4ca2-a182-8dc5a1c3ed71.png?v=1779892547\" alt=\"Milan accessory in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_MatteBlack_B_4b654b53-3d42-4675-b35e-2c600fb0ca4b.png?v=1779892547\" alt=\"Milan accessory mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_MatteBlack_C_b96c7b94-681b-4beb-959f-5e5224c2e914.png?v=1779892547\" alt=\"Milan accessory matte black\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eMatte black anchors a bright palette.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedGold_A_448d48fd-a4e7-4bf9-b46e-378af7e9a31f.png?v=1779892542\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedGold_Hero_A.png?v=1779884118\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedNickelWarm_A_392c07c9-f71b-47cb-9920-a2b0c18435db.png?v=1779892543\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedNickelWarm_Hero_A.png?v=1779884136\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Champagne_A_98fe59a8-dc0f-424c-928c-694b2397f350.png?v=1779892544\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Champagne_Hero_A.png?v=1779884156\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Chrome_A_61552bb1-ea0a-448e-9407-bc0657b47f41.png?v=1779892545\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Chrome_Hero_A.png?v=1779884175\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_GunMetal_A_28dc991c-0dde-44f2-9a38-6c26bc2d4b2b.png?v=1779892546\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_GunMetal_Hero_A.png?v=1779884194\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb is-current\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_MatteBlack_A_aba4f578-d8dc-4ca2-a182-8dc5a1c3ed71.png?v=1779892547\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_MatteBlack_Hero_A.png?v=1779884213\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_MatteBlack_Hero_B.png?v=1779884219\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e178 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e72 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eRail length\u003c\/span\u003e\u003cspan class=\"v\"\u003e130 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan accessory carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the matte black is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL22MB\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same matte black finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":46321032003733,"sku":"OVTPBLK","price":47.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_MatteBlack_A_3b9a1e68-8852-4bf5-8de6-136fcdadd883.png?v=1785832704"},{"product_id":"1-round-chrome-solid-brass-double-robe-hook-wall-mounted","title":"Ovia Round Chrome Solid Brass Double Robe Hook Wall Mounted","description":"\u003cp\u003e\u003cstrong\u003eFeatures:\u003c\/strong\u003e\u003c\/p\u003e\n \u003cul\u003e\n \u003cli\u003eMaterial: Durable Solid Brass\u003c\/li\u003e\n \u003cli\u003eColour: Polished Chrome\u003c\/li\u003e\n \u003cli\u003eStrong base, rugged and durable\u003c\/li\u003e\n \u003cli\u003eHigh standard of corrosion resistance\u003c\/li\u003e\n \u003cli\u003eEasy to install\u003c\/li\u003e\n \u003cli\u003e5 years replacement product and parts\u003c\/li\u003e\n \u003cli\u003e\n \u003cb\u003ePackage Contents:\u003c\/b\u003e\n \u003cul\u003e\n \u003cli\u003e1 x Robe hook\u003c\/li\u003e\n \u003cli\u003eInstallation accessories\u003c\/li\u003e\n \u003c\/ul\u003e\n \u003c\/li\u003e\n \u003c\/ul\u003e","brand":"Ovia","offers":[{"title":"Default Title","offer_id":46321032298645,"sku":"BK425","price":37.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/425_ed5c1eb7-b5a0-4070-8f1a-d5c69df2a8ae.jpg?v=1755563068"},{"product_id":"ovia-milan-brushed-gold-toilet-paper-roll-holder","title":"Ovia Milan Brushed Gold Toilet Paper Roll Holder","description":"\u003cp\u003eOvia Milan Range of Accessories\u003c\/p\u003e\n\u003cp\u003eComes with 15 years warranty\u003c\/p\u003e\n\u003cp\u003eDesigned with a rounded look this will look great in any bathroom, paired with Ovias Range of Tapware it will be just right\u003c\/p\u003e\n\u003cp\u003eLuxury feeling at the right price\u003c\/p\u003e","brand":"Ovia","offers":[{"title":"Default Title","offer_id":46341177180309,"sku":"OVIATPGD","price":63.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia-Milan-Brushed-Gold-Toilet-Paper-Roll-Holder_0f112c4b-ec62-4f66-be28-a6b11fc78423.png?v=1756173766"},{"product_id":"ovia-milan-brushed-gold-single-towel-rail-800mm","title":"Ovia Milan Brushed Gold Single Towel Rail 800mm","description":"\u003cp\u003eOvia Milan Range of Accessories\u003c\/p\u003e\n\u003cp\u003eComes with 15 years warranty\u003c\/p\u003e\n\u003cp\u003eDesigned with a rounded look this will look great in any bathroom, paired with Ovias Range of Tapware it will be just right\u003c\/p\u003e\n\u003cp\u003eLuxury feeling at the right price\u003c\/p\u003e","brand":"Ovia","offers":[{"title":"Default Title","offer_id":46341177278613,"sku":"OVIATPGD800","price":149.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-single-towel-rail.png?v=1756173772"},{"product_id":"ovia-milan-brushed-gold-single-towel-rail-600mm","title":"Ovia Milan Brushed Gold Single Towel Rail 600mm","description":"\u003cp\u003eOvia Milan Range of Accessories\u003c\/p\u003e\n\u003cp\u003eComes with 15 years warranty\u003c\/p\u003e\n\u003cp\u003eDesigned with a rounded look this will look great in any bathroom, paired with Ovias Range of Tapware it will be just right\u003c\/p\u003e\n\u003cp\u003eLuxury feeling at the right price\u003c\/p\u003e","brand":"Ovia","offers":[{"title":"Default Title","offer_id":46341177344149,"sku":"OVIATPGD600","price":139.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia-Single-Towel-Rail_bd5c8de0-8709-4e63-b9d9-6e020c0b97c1.png?v=1756173780"},{"product_id":"ovia-milan-brushed-gold-robe-hook","title":"Ovia Milan Brushed Gold Robe Hook","description":"\u003cp\u003eOvia Milan Range of Accessories\u003c\/p\u003e\n\u003cp\u003eComes with 15 years warranty\u003c\/p\u003e\n\u003cp\u003eDesigned with a rounded look this will look great in any bathroom, paired with Ovias Range of Tapware it will be just right\u003c\/p\u003e\n\u003cp\u003eLuxury feeling at the right price\u003c\/p\u003e","brand":"Ovia","offers":[{"title":"Default Title","offer_id":46341177409685,"sku":"OVIATPGDRB","price":49.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia-Milan-Brushed-Gold-Robe-Hook_111d4b58-6b11-47f1-8ced-a830c8a716ab.jpg?v=1756173784"},{"product_id":"ovia-chloe-brushed-gold-toilet-roll-paper-holder","title":"Ovia Milan Toilet Roll Holder Brushed Gold","description":"\u003cdiv class=\"ovia-pd opd--compact\" style=\"--ac:#C5A253;--ac-deep:#9A7B46;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedGold_Hero_A.png?v=1779884118');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Brushed Gold\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--bg{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"PVD\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n  \/* compact banner render — wide horizontal accessories (hand-towel \/ toilet-roll\n     holder) overrun the right edge at the default 170%; inert without the class *\/\n  .ovia-pd.opd--compact .opd-prod{width:120%;}\n  .ovia-pd.opd--compact .opd-glint{-webkit-mask-size:120% auto,120% auto,120% auto;mask-size:120% auto,120% auto,120% auto;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003eToilet Roll Holder\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e toilet roll holder you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedGold_Hero_A.png?v=1779884118\" alt=\"Ovia Milan Toilet Roll Holder in Brushed Gold\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedNickelWarm_Hero_A.png?v=1779884136\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Champagne_Hero_A.png?v=1779884156\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Chrome_Hero_A.png?v=1779884175\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_GunMetal_Hero_A.png?v=1779884194\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_MatteBlack_Hero_A.png?v=1779884213\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eThe most-reached-for fitting in the smallest room. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e toilet roll holder is machined from DZR brass and finished in brushed gold sealed to hold its colour for the life of the room, fixed dead-level on a concealed mount — solid, quiet, and made to outlast the room.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eBrushed Gold\u003csmall\u003ePVD\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e178 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e72 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary fittings do in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBonded to the brass by physical vapour deposition, the brushed gold resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that hold it dead-level and never work loose — solid and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eBrushed Gold PVD\u003c\/b\u003e · molecularly bonded to solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePart of the metal\u003c\/h4\u003e\n    \u003cp\u003eThe brushed gold is fused to the brass by Physical Vapour Deposition — a molecular bond, not a coating laid on top. It won’t flake, peel or tarnish at the edges the way ordinary plated finishes eventually do. The colour you see is, quite literally, part of the metal — and it’s covered for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedGold_A_448d48fd-a4e7-4bf9-b46e-378af7e9a31f.png?v=1779892542\" alt=\"Milan accessory in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedGold_B_9b9f551c-a964-488b-83d7-ce94b92f51e6.png?v=1779892542\" alt=\"Milan accessory mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedGold_C_46dc4ac1-3ee6-4aff-ab83-6dc1fdc067b6.png?v=1779892542\" alt=\"Milan accessory brushed gold\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eBrushed gold warms a cool palette.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg is-current\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedGold_A_448d48fd-a4e7-4bf9-b46e-378af7e9a31f.png?v=1779892542\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedGold_Hero_A.png?v=1779884118\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedNickelWarm_A_392c07c9-f71b-47cb-9920-a2b0c18435db.png?v=1779892543\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedNickelWarm_Hero_A.png?v=1779884136\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Champagne_A_98fe59a8-dc0f-424c-928c-694b2397f350.png?v=1779892544\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Champagne_Hero_A.png?v=1779884156\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Chrome_A_61552bb1-ea0a-448e-9407-bc0657b47f41.png?v=1779892545\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Chrome_Hero_A.png?v=1779884175\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_GunMetal_A_28dc991c-0dde-44f2-9a38-6c26bc2d4b2b.png?v=1779892546\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_GunMetal_Hero_A.png?v=1779884194\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_MatteBlack_A_aba4f578-d8dc-4ca2-a182-8dc5a1c3ed71.png?v=1779892547\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_MatteBlack_Hero_A.png?v=1779884213\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedGold_Hero_B.png?v=1779884124\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e178 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e72 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eRail length\u003c\/span\u003e\u003cspan class=\"v\"\u003e130 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan accessory carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the brushed gold is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL22BG\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same brushed gold finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":46341178785941,"sku":"OVIATPGCH","price":57.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedGold_A_a986cae1-5866-4499-a371-4dd2ba5bc49b.png?v=1785830053"},{"product_id":"ovia-chloe-brushed-gold-robe-hook","title":"Ovia Milan Robe Hook Brushed Gold","description":"\u003cdiv class=\"ovia-pd\" style=\"--ac:#C5A253;--ac-deep:#9A7B46;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_BrushedGold_Hero_A.png?v=1779884606');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Brushed Gold\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--bg{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"PVD\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003eRobe Hook\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e robe hook you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_BrushedGold_Hero_A.png?v=1779884606\" alt=\"Ovia Milan Robe Hook in Brushed Gold\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_BrushedNickelWarm_Hero_A.png?v=1779884625\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_Champagne_Hero_A.png?v=1779884644\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_Chrome_Hero_A.png?v=1779884664\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_GunMetal_Hero_A.png?v=1779884683\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_MatteBlack_Hero_A.png?v=1779884702\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA hook carries more than it looks — a loaded robe, a wet towel, day after day. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e hook takes it in DZR brass, finished in brushed gold sealed to hold its colour for the life of the room, on a single concealed fixing that won’t pull from the wall. The last hook you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eBrushed Gold\u003csmall\u003ePVD\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e67 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eType\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eSingle hook\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary fittings do in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBonded to the brass by physical vapour deposition, the brushed gold resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eA single concealed fixing takes the weight of a loaded robe or wet towel without ever pulling away from the wall.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eBrushed Gold PVD\u003c\/b\u003e · molecularly bonded to solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePart of the metal\u003c\/h4\u003e\n    \u003cp\u003eThe brushed gold is fused to the brass by Physical Vapour Deposition — a molecular bond, not a coating laid on top. It won’t flake, peel or tarnish at the edges the way ordinary plated finishes eventually do. The colour you see is, quite literally, part of the metal — and it’s covered for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_BrushedGold_A_b42863be-d10a-4eb2-9d90-b78bbe45fa16.png?v=1779892516\" alt=\"Milan accessory in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_BrushedGold_B_a3e4d310-0828-4f89-9895-cd277dec2dbd.png?v=1779892516\" alt=\"Milan accessory mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_BrushedGold_C_c2bbc10e-5db1-47af-ae7c-954d6d50a05d.png?v=1779892515\" alt=\"Milan accessory brushed gold\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eBrushed gold warms a cool palette.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg is-current\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_BrushedGold_A_b42863be-d10a-4eb2-9d90-b78bbe45fa16.png?v=1779892516\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_BrushedGold_Hero_A.png?v=1779884606\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_BrushedNickelWarm_A_81cbd313-61d2-436e-a3a8-b15771350d35.png?v=1779892516\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_BrushedNickelWarm_Hero_A.png?v=1779884625\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_Champagne_A_2b956dae-630f-45ce-b227-6952c6c02f2e.png?v=1779892517\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_Champagne_Hero_A.png?v=1779884644\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_Chrome_A_b9f26059-b5c6-4b48-b2d5-873d84d49eab.png?v=1779892518\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_Chrome_Hero_A.png?v=1779884664\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_GunMetal_A_1edf6857-76d2-49ba-b806-74cfc6ec63d7.png?v=1779892519\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_GunMetal_Hero_A.png?v=1779884683\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_MatteBlack_A_70b8c8b1-fd4a-40a4-8c06-7b2092ceb873.png?v=1779892520\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_MatteBlack_Hero_A.png?v=1779884702\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_BrushedGold_Hero_B.png?v=1779884612\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e67 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eBody Ø\u003c\/span\u003e\u003cspan class=\"v\"\u003e20 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eHook Ø\u003c\/span\u003e\u003cspan class=\"v\"\u003e8 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan accessory carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the brushed gold is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL25BG\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same brushed gold finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":46341178982549,"sku":"OVIATPRB","price":39.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_BrushedGold_A_bb526692-907f-4ed5-a559-f45b2b5390a2.png?v=1785824189"},{"product_id":"ovia-chloe-brushed-gold-600mm-single-towel-rail","title":"Ovia Milan 600 Single Towel Rail Brushed Gold","description":"\u003cdiv class=\"ovia-pd\" style=\"--ac:#C5A253;--ac-deep:#9A7B46;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedGold_Hero_A.png?v=1779883665');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Brushed Gold\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--bg{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"PVD\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003e600 Single Towel Rail\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e towel rail you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedGold_Hero_A.png?v=1779883665\" alt=\"Ovia Milan 600 Single Towel Rail in Brushed Gold\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883684\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Champagne_Hero_A.png?v=1779883702\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Chrome_Hero_A.png?v=1779883722\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_GunMetal_Hero_A.png?v=1779883740\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_MatteBlack_Hero_A.png?v=1779883759\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA towel rail is the most-handled fitting in the bathroom — wet towels, steam and a daily tug — so it has to be built for it. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e rail is machined from DZR brass and finished in brushed gold sealed to hold its colour for the life of the room, fixed dead-level on concealed mounts. The detail that pulls the room together — and the last one you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eBrushed Gold\u003csmall\u003ePVD\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e607 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e72 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary rail metal does in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBonded to the brass by physical vapour deposition, the brushed gold resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that take the weight of wet towels without working loose — solid, dead-level and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eBrushed Gold PVD\u003c\/b\u003e · molecularly bonded to solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePart of the metal\u003c\/h4\u003e\n    \u003cp\u003eThe brushed gold is fused to the brass by Physical Vapour Deposition — a molecular bond, not a coating laid on top. It won’t flake, peel or tarnish at the edges the way ordinary plated finishes eventually do. The colour you see is, quite literally, part of the metal — and it’s covered for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedGold_A_cbb82b1f-5cbd-418f-9bb9-3a9d5b167056.png?v=1779892529\" alt=\"Milan towel rail in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedGold_B_a022988f-08aa-4c57-929e-c127cd5c5fae.png?v=1779892526\" alt=\"Milan towel rail mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedGold_C_24d454d7-59c6-4291-9785-ebc0e680374e.png?v=1779892526\" alt=\"Milan towel rail brushed gold\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eBrushed gold warms a cool palette.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg is-current\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedGold_A_cbb82b1f-5cbd-418f-9bb9-3a9d5b167056.png?v=1779892529\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedGold_Hero_A.png?v=1779883665\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedNickelWarm_A_d3c24611-34b8-4492-8b6f-4d2a08cf44ea.png?v=1779892527\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883684\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Champagne_A_8d5e05d2-fdad-49a1-bab8-1366620a1a9d.png?v=1779892528\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Champagne_Hero_A.png?v=1779883702\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Chrome_A_413aea1e-77fd-4e1a-a31e-4f987e51bbd8.png?v=1779892529\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Chrome_Hero_A.png?v=1779883722\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_GunMetal_A_b3aa9d36-011d-4bf6-9564-006dc9ba0ccc.png?v=1779892530\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_GunMetal_Hero_A.png?v=1779883740\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_MatteBlack_A_d0559658-9de9-47bb-a275-1170489885fb.png?v=1779892531\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_MatteBlack_Hero_A.png?v=1779883759\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedGold_Hero_B.png?v=1779883671\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e607 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e72 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan rail carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the brushed gold is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL2060BG\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same brushed gold finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":46341179015317,"sku":"OVIATP600","price":104.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedGold_A_1f7511c4-27d8-4fb0-b50b-9bbef5a32413.png?v=1785830037"},{"product_id":"ovia-chloe-brushed-gold-800mm-single-towel-rail","title":"Ovia Milan 750 Single Towel Rail Brushed Gold","description":"\u003cdiv class=\"ovia-pd\" style=\"--ac:#C5A253;--ac-deep:#9A7B46;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedGold_Hero_A.png?v=1779883778');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Brushed Gold\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--bg{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"PVD\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003e750 Single Towel Rail\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e towel rail you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedGold_Hero_A.png?v=1779883778\" alt=\"Ovia Milan 750 Single Towel Rail in Brushed Gold\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779883797\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Champagne_Hero_A.png?v=1779883816\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Chrome_Hero_A.png?v=1779883835\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_GunMetal_Hero_A.png?v=1779883855\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_MatteBlack_Hero_A.png?v=1779883873\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA towel rail is the most-handled fitting in the bathroom — wet towels, steam and a daily tug — so it has to be built for it. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e rail is machined from DZR brass and finished in brushed gold sealed to hold its colour for the life of the room, fixed dead-level on concealed mounts. The detail that pulls the room together — and the last one you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eBrushed Gold\u003csmall\u003ePVD\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e750 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e72 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary rail metal does in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBonded to the brass by physical vapour deposition, the brushed gold resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that take the weight of wet towels without working loose — solid, dead-level and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eBrushed Gold PVD\u003c\/b\u003e · molecularly bonded to solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePart of the metal\u003c\/h4\u003e\n    \u003cp\u003eThe brushed gold is fused to the brass by Physical Vapour Deposition — a molecular bond, not a coating laid on top. It won’t flake, peel or tarnish at the edges the way ordinary plated finishes eventually do. The colour you see is, quite literally, part of the metal — and it’s covered for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedGold_A_4c62e3ae-0ba2-4697-bfc2-06743e84a51b.png?v=1779892531\" alt=\"Milan towel rail in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedGold_B_b379af69-a061-47e0-9f5a-f0c7fa771fcf.png?v=1779892531\" alt=\"Milan towel rail mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedGold_C_a8e00a1a-54c1-4ce5-90c0-17732111dfba.png?v=1779892531\" alt=\"Milan towel rail brushed gold\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eBrushed gold warms a cool palette.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg is-current\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedGold_A_4c62e3ae-0ba2-4697-bfc2-06743e84a51b.png?v=1779892531\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedGold_Hero_A.png?v=1779883778\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedNickelWarm_A_8c7eeb7f-6a08-411b-8502-bfb2f420b0cc.png?v=1779892532\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779883797\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Champagne_A_bc5cbfcd-c5f4-4086-928f-98624cb11b6f.png?v=1779892534\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Champagne_Hero_A.png?v=1779883816\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Chrome_A_057ca513-133d-43d9-804f-b66a8e4a3f72.png?v=1779892534\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Chrome_Hero_A.png?v=1779883835\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_GunMetal_A_47599f28-461a-4855-91b1-03ab16e16b69.png?v=1779892535\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_GunMetal_Hero_A.png?v=1779883855\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_MatteBlack_A_9c08c365-0b39-4f18-b5d0-5656f8ab92ab.png?v=1779892536\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_MatteBlack_Hero_A.png?v=1779883873\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedGold_Hero_B.png?v=1779883783\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e750 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e72 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan rail carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the brushed gold is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL2075BG\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same brushed gold finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":46341179244693,"sku":"OVIATP800","price":114.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedGold_A_c889cb05-1dae-4d25-8e52-1319be76c312.png?v=1785830045"},{"product_id":"ovia-chloe-brushed-nickel-toilet-roll-paper-holder","title":"Ovia Milan Toilet Roll Holder Brushed Nickel","description":"\u003cdiv class=\"ovia-pd opd--compact\" style=\"--ac:#CFC4B0;--ac-deep:#897E6B;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedNickelWarm_Hero_A.png?v=1779884136');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Brushed Nickel\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--bn{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"PVD\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n  \/* compact banner render — wide horizontal accessories (hand-towel \/ toilet-roll\n     holder) overrun the right edge at the default 170%; inert without the class *\/\n  .ovia-pd.opd--compact .opd-prod{width:120%;}\n  .ovia-pd.opd--compact .opd-glint{-webkit-mask-size:120% auto,120% auto,120% auto;mask-size:120% auto,120% auto,120% auto;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003eToilet Roll Holder\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e toilet roll holder you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedGold_Hero_A.png?v=1779884118\" alt=\"Ovia Milan Toilet Roll Holder in Brushed Nickel\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedNickelWarm_Hero_A.png?v=1779884136\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Champagne_Hero_A.png?v=1779884156\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Chrome_Hero_A.png?v=1779884175\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_GunMetal_Hero_A.png?v=1779884194\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_MatteBlack_Hero_A.png?v=1779884213\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eThe most-reached-for fitting in the smallest room. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e toilet roll holder is machined from DZR brass and finished in brushed nickel sealed to hold its colour for the life of the room, fixed dead-level on a concealed mount — solid, quiet, and made to outlast the room.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eBrushed Nickel\u003csmall\u003ePVD\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e178 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e72 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary fittings do in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBonded to the brass by physical vapour deposition, the brushed nickel resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that hold it dead-level and never work loose — solid and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eBrushed Nickel PVD\u003c\/b\u003e · molecularly bonded to solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePart of the metal\u003c\/h4\u003e\n    \u003cp\u003eThe brushed nickel is fused to the brass by Physical Vapour Deposition — a molecular bond, not a coating laid on top. It won’t flake, peel or tarnish at the edges the way ordinary plated finishes eventually do. The colour you see is, quite literally, part of the metal — and it’s covered for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedNickelWarm_A_392c07c9-f71b-47cb-9920-a2b0c18435db.png?v=1779892543\" alt=\"Milan accessory in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedNickelWarm_B_974b8986-f2ca-4adc-9484-6d2634a34822.png?v=1779892543\" alt=\"Milan accessory mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedNickelWarm_C_17765eec-e7d3-480a-a422-ad4bcabfde7a.png?v=1779892543\" alt=\"Milan accessory brushed nickel\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eWarm nickel keeps the palette calm.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedGold_A_448d48fd-a4e7-4bf9-b46e-378af7e9a31f.png?v=1779892542\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedGold_Hero_A.png?v=1779884118\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn is-current\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedNickelWarm_A_392c07c9-f71b-47cb-9920-a2b0c18435db.png?v=1779892543\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedNickelWarm_Hero_A.png?v=1779884136\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Champagne_A_98fe59a8-dc0f-424c-928c-694b2397f350.png?v=1779892544\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Champagne_Hero_A.png?v=1779884156\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Chrome_A_61552bb1-ea0a-448e-9407-bc0657b47f41.png?v=1779892545\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Chrome_Hero_A.png?v=1779884175\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_GunMetal_A_28dc991c-0dde-44f2-9a38-6c26bc2d4b2b.png?v=1779892546\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_GunMetal_Hero_A.png?v=1779884194\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_MatteBlack_A_aba4f578-d8dc-4ca2-a182-8dc5a1c3ed71.png?v=1779892547\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_MatteBlack_Hero_A.png?v=1779884213\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedNickelWarm_Hero_B.png?v=1779884143\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e178 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e72 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eRail length\u003c\/span\u003e\u003cspan class=\"v\"\u003e130 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan accessory carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the brushed nickel is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL22BN\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same brushed nickel finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":46341352521877,"sku":"OVIATPBN","price":57.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedNickelWarm_A_4b88ed12-1612-4546-8b38-75fd69ce4261.png?v=1785832678"},{"product_id":"ovia-chloe-chrome-toilet-roll-paper-holder","title":"Ovia Milan Toilet Roll Holder Chrome","description":"\u003cdiv class=\"ovia-pd opd--compact\" style=\"--ac:#C8D2DA;--ac-deep:#6E7B86;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Chrome_Hero_A.png?v=1779884175');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Chrome\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--cr{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"Electroplated\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n  \/* compact banner render — wide horizontal accessories (hand-towel \/ toilet-roll\n     holder) overrun the right edge at the default 170%; inert without the class *\/\n  .ovia-pd.opd--compact .opd-prod{width:120%;}\n  .ovia-pd.opd--compact .opd-glint{-webkit-mask-size:120% auto,120% auto,120% auto;mask-size:120% auto,120% auto,120% auto;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003eToilet Roll Holder\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e toilet roll holder you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedGold_Hero_A.png?v=1779884118\" alt=\"Ovia Milan Toilet Roll Holder in Chrome\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedNickelWarm_Hero_A.png?v=1779884136\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Champagne_Hero_A.png?v=1779884156\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Chrome_Hero_A.png?v=1779884175\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_GunMetal_Hero_A.png?v=1779884194\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_MatteBlack_Hero_A.png?v=1779884213\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eThe most-reached-for fitting in the smallest room. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e toilet roll holder is machined from DZR brass and finished in chrome, multi-layer electroplated to stay hard-wearing and true for the life of the room, fixed dead-level on a concealed mount — solid, quiet, and made to outlast the room.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eChrome\u003csmall\u003eElectroplated\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e178 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e72 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary fittings do in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBuilt up over the brass in multiple plated layers, the chrome resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that hold it dead-level and never work loose — solid and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch is-polished\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eChrome Electroplated\u003c\/b\u003e · layered and sealed over solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePlated to last\u003c\/h4\u003e\n    \u003cp\u003eThe chrome is built up over the solid-brass body in successive electroplated layers, then sealed against tarnish and everyday wear — the same proven process trusted on quality tapware for generations. Hard-wearing and true to tone, and backed, like every Milan finish, for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Chrome_A_61552bb1-ea0a-448e-9407-bc0657b47f41.png?v=1779892545\" alt=\"Milan accessory in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Chrome_B_60ecb93d-980b-4849-9dc2-38db2d1f5637.png?v=1779892545\" alt=\"Milan accessory mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Chrome_C_0c3d44b8-15ac-4569-8d4d-28a0bae5761e.png?v=1779892546\" alt=\"Milan accessory chrome\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eChrome adds a crisp, cool gleam.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedGold_A_448d48fd-a4e7-4bf9-b46e-378af7e9a31f.png?v=1779892542\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedGold_Hero_A.png?v=1779884118\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedNickelWarm_A_392c07c9-f71b-47cb-9920-a2b0c18435db.png?v=1779892543\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedNickelWarm_Hero_A.png?v=1779884136\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Champagne_A_98fe59a8-dc0f-424c-928c-694b2397f350.png?v=1779892544\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Champagne_Hero_A.png?v=1779884156\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr is-current\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Chrome_A_61552bb1-ea0a-448e-9407-bc0657b47f41.png?v=1779892545\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Chrome_Hero_A.png?v=1779884175\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_GunMetal_A_28dc991c-0dde-44f2-9a38-6c26bc2d4b2b.png?v=1779892546\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_GunMetal_Hero_A.png?v=1779884194\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_MatteBlack_A_aba4f578-d8dc-4ca2-a182-8dc5a1c3ed71.png?v=1779892547\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_MatteBlack_Hero_A.png?v=1779884213\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Chrome_Hero_B.png?v=1779884181\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e178 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e72 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eRail length\u003c\/span\u003e\u003cspan class=\"v\"\u003e130 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan accessory carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the chrome is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL22CH\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same chrome finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":46341353504917,"sku":"OVIATPCR","price":47.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Chrome_A_5103199a-144a-4210-ab65-6c6e46c19bf5.png?v=1785832688"},{"product_id":"ovia-milan-knob-robe-hook-matte-black","title":"Ovia Milan Knob Robe Hook Matte Black","description":"\u003cp\u003eIntroducing the Ovia Milan Knob Robe Hook – where functionality meets elegance in your home! Elevate your space with this sophisticated and versatile accessory designed to add a touch of modern luxury to your living environment.\u003c\/p\u003e\n\u003cp\u003eCrafted with meticulous attention to detail, the Milan Knob Robe Hook showcases a sleek and contemporary design, seamlessly blending form and function. The polished chrome finish not only adds a timeless aesthetic but also ensures durability, making it a stylish and reliable addition to your home.\u003c\/p\u003e\n\u003cp\u003eInstallation is a breeze with the Ovia Milan Knob Robe Hook, thanks to its user-friendly design and included mounting hardware. Whether you're looking to enhance your bathroom, bedroom, or entryway, this robe hook effortlessly accommodates your needs.\u003c\/p\u003e\n\u003cp\u003eThe knob shape of the hook not only provides a secure grip for your robes but also adds a subtle decorative element to your space. Its compact size makes it an ideal choice for smaller rooms or areas where space optimization is key.\u003c\/p\u003e\n\u003cp\u003eSay goodbye to cluttered spaces and embrace the organized simplicity offered by the Ovia Milan Knob Robe Hook. Perfect for hanging robes, towels, or even clothing items, this versatile accessory complements a variety of interior styles, from minimalist to contemporary.\u003c\/p\u003e\n\u003cp\u003eInvest in quality, style, and functionality with the Ovia Milan Knob Robe Hook – because every detail matters when it comes to creating a home that reflects your personal taste and lifestyle. Upgrade your living space today with this exquisite robe hook that effortlessly combines practicality with a touch of modern sophistication.\u003c\/p\u003e","brand":"Ovia","offers":[{"title":"Default Title","offer_id":46341402493077,"sku":"OV2318MB","price":47.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia-Milan-Knob-Black_7fa6ca17-64f6-4c82-b7fc-e69d5f6b72f0.jpg?v=1756185484"},{"product_id":"ovia-chloe-pvd-gunmetal-toilet-roll-paper-holder","title":"Ovia Milan Toilet Roll Holder Gun Metal","description":"\u003cdiv class=\"ovia-pd opd--compact\" style=\"--ac:#9C958C;--ac-deep:#403D39;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_GunMetal_Hero_A.png?v=1779884194');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Gun Metal\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--gm{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"Electroplated\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n  \/* compact banner render — wide horizontal accessories (hand-towel \/ toilet-roll\n     holder) overrun the right edge at the default 170%; inert without the class *\/\n  .ovia-pd.opd--compact .opd-prod{width:120%;}\n  .ovia-pd.opd--compact .opd-glint{-webkit-mask-size:120% auto,120% auto,120% auto;mask-size:120% auto,120% auto,120% auto;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003eToilet Roll Holder\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e toilet roll holder you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedGold_Hero_A.png?v=1779884118\" alt=\"Ovia Milan Toilet Roll Holder in Gun Metal\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedNickelWarm_Hero_A.png?v=1779884136\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Champagne_Hero_A.png?v=1779884156\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Chrome_Hero_A.png?v=1779884175\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_GunMetal_Hero_A.png?v=1779884194\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_MatteBlack_Hero_A.png?v=1779884213\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eThe most-reached-for fitting in the smallest room. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e toilet roll holder is machined from DZR brass and finished in gun metal, multi-layer electroplated to stay hard-wearing and true for the life of the room, fixed dead-level on a concealed mount — solid, quiet, and made to outlast the room.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eGun Metal\u003csmall\u003eElectroplated\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e178 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e72 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary fittings do in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBuilt up over the brass in multiple plated layers, the gun metal resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that hold it dead-level and never work loose — solid and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch\" style=\"--ac:#94908A;--shadow:#0d0e0e\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eGun Metal Electroplated\u003c\/b\u003e · layered and sealed over solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePlated to last\u003c\/h4\u003e\n    \u003cp\u003eThe gun metal is built up over the solid-brass body in successive electroplated layers, then sealed against tarnish and everyday wear — the same proven process trusted on quality tapware for generations. Hard-wearing and true to tone, and backed, like every Milan finish, for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_GunMetal_A_28dc991c-0dde-44f2-9a38-6c26bc2d4b2b.png?v=1779892546\" alt=\"Milan accessory in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_GunMetal_B_50b686c4-c30b-4707-9779-b6750f758222.png?v=1779892546\" alt=\"Milan accessory mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_GunMetal_C_5e8634d5-387b-40b8-b0fe-67ff90c91941.png?v=1779892546\" alt=\"Milan accessory gun metal\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eGun metal grounds a light palette.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedGold_A_448d48fd-a4e7-4bf9-b46e-378af7e9a31f.png?v=1779892542\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedGold_Hero_A.png?v=1779884118\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedNickelWarm_A_392c07c9-f71b-47cb-9920-a2b0c18435db.png?v=1779892543\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_BrushedNickelWarm_Hero_A.png?v=1779884136\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Champagne_A_98fe59a8-dc0f-424c-928c-694b2397f350.png?v=1779892544\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Champagne_Hero_A.png?v=1779884156\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Chrome_A_61552bb1-ea0a-448e-9407-bc0657b47f41.png?v=1779892545\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_Chrome_Hero_A.png?v=1779884175\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm is-current\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_GunMetal_A_28dc991c-0dde-44f2-9a38-6c26bc2d4b2b.png?v=1779892546\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_GunMetal_Hero_A.png?v=1779884194\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_MatteBlack_A_aba4f578-d8dc-4ca2-a182-8dc5a1c3ed71.png?v=1779892547\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_MatteBlack_Hero_A.png?v=1779884213\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_GunMetal_Hero_B.png?v=1779884200\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e178 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e72 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eRail length\u003c\/span\u003e\u003cspan class=\"v\"\u003e130 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan accessory carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the gun metal is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL22GM\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same gun metal finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":46341402591381,"sku":"OVIATPGM","price":57.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_ToiletRollHolder_GunMetal_A_859260d3-5cb0-41e6-8282-69585f4a74e1.png?v=1785832696"},{"product_id":"ovia-chloe-brushed-bronze-robe-hook","title":"Ovia Chloe Brushed Bronze Copper Robe Hook","description":"\u003cp\u003eOvia Milan Range of Accessories\u003c\/p\u003e\n\u003cp\u003eComes with 15 years warranty\u003c\/p\u003e\n\u003cp\u003eDesigned with a rounded look this will look great in any bathroom, paired with Ovias Range of Tapware it will be just right\u003c\/p\u003e\n\u003cp\u003eLuxury feeling at the right price\u003c\/p\u003e","brand":"Ovia","offers":[{"title":"Default Title","offer_id":46346048077973,"sku":"OVIATPRBZ","price":55.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/OVIATPRBZ_01_0f923bf7-08ad-4b00-90ff-c340943d72e6.jpg?v=1756344087"},{"product_id":"ovia-chloe-brushed-bronze-800mm-single-towel-rail","title":"Ovia Chloe Brushed Bronze Copper 800mm Single Towel Rail","description":"\u003cp\u003eOvia Milan Range of Accessories\u003c\/p\u003e\n\u003cp\u003eComes with 15 years warranty\u003c\/p\u003e\n\u003cp\u003eDesigned with a rounded look this will look great in any bathroom, paired with Ovias Range of Tapware it will be just right\u003c\/p\u003e\n\u003cp\u003eLuxury feeling at the right price\u003c\/p\u003e","brand":"Ovia","offers":[{"title":"Default Title","offer_id":46346048110741,"sku":"OVIATP800BZ","price":161.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/OVIATP800BZ_be07428a-6f8a-4064-a49b-9235c3257b5b.jpg?v=1756344093"},{"product_id":"ovia-chloe-brushed-bronze-600mm-single-towel-rail","title":"Ovia Chloe Brushed Bronze Copper 600mm Single Towel Rail","description":"\u003cp\u003eOvia Milan Range of Accessories\u003c\/p\u003e\n\u003cp\u003eComes with 15 years warranty\u003c\/p\u003e\n\u003cp\u003eDesigned with a rounded look this will look great in any bathroom, paired with Ovias Range of Tapware it will be just right\u003c\/p\u003e\n\u003cp\u003eLuxury feeling at the right price\u003c\/p\u003e","brand":"Ovia","offers":[{"title":"Default Title","offer_id":46346048209045,"sku":"OVIATP600BZ","price":149.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/OVIATP600BZ_01_5c1895b3-cce2-4ca6-afb4-b5ddfbd9a2a1.jpg?v=1756344100"},{"product_id":"ovia-chloe-brushed-bronze-toilet-roll-paper-holder","title":"Ovia Chloe Brushed Bronze Copper Toilet Roll Paper Holder","description":"\u003cp\u003eOvia Milan Range of Accessories\u003c\/p\u003e\n\u003cp\u003eComes with 15 years warranty\u003c\/p\u003e\n\u003cp\u003eDesigned with a rounded look this will look great in any bathroom, paired with Ovias Range of Tapware it will be just right\u003c\/p\u003e\n\u003cp\u003eLuxury feeling at the right price\u003c\/p\u003e","brand":"Ovia","offers":[{"title":"Default Title","offer_id":46346048274581,"sku":"OVIATPGBZ","price":67.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/OVIATPGBZ_01_2d831c9a-a16a-4285-ab58-5df34828c62a.jpg?v=1756344106"},{"product_id":"ovia-chloe-brushed-nickel-robe-hook","title":"Ovia Milan Robe Hook Brushed Nickel","description":"\u003cdiv class=\"ovia-pd\" style=\"--ac:#CFC4B0;--ac-deep:#897E6B;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_BrushedNickelWarm_Hero_A.png?v=1779884625');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Brushed Nickel\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--bn{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"PVD\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003eRobe Hook\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e robe hook you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_BrushedGold_Hero_A.png?v=1779884606\" alt=\"Ovia Milan Robe Hook in Brushed Nickel\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_BrushedNickelWarm_Hero_A.png?v=1779884625\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_Champagne_Hero_A.png?v=1779884644\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_Chrome_Hero_A.png?v=1779884664\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_GunMetal_Hero_A.png?v=1779884683\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_MatteBlack_Hero_A.png?v=1779884702\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA hook carries more than it looks — a loaded robe, a wet towel, day after day. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e hook takes it in DZR brass, finished in brushed nickel sealed to hold its colour for the life of the room, on a single concealed fixing that won’t pull from the wall. The last hook you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eBrushed Nickel\u003csmall\u003ePVD\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e67 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eType\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eSingle hook\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary fittings do in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBonded to the brass by physical vapour deposition, the brushed nickel resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eA single concealed fixing takes the weight of a loaded robe or wet towel without ever pulling away from the wall.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eBrushed Nickel PVD\u003c\/b\u003e · molecularly bonded to solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePart of the metal\u003c\/h4\u003e\n    \u003cp\u003eThe brushed nickel is fused to the brass by Physical Vapour Deposition — a molecular bond, not a coating laid on top. It won’t flake, peel or tarnish at the edges the way ordinary plated finishes eventually do. The colour you see is, quite literally, part of the metal — and it’s covered for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_BrushedNickelWarm_A_81cbd313-61d2-436e-a3a8-b15771350d35.png?v=1779892516\" alt=\"Milan accessory in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_BrushedNickelWarm_B_9b3158f1-44d1-4cdc-b5f9-da2b6e12829d.png?v=1779892516\" alt=\"Milan accessory mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_BrushedNickelWarm_C_89e10c42-9d56-4553-a127-8c3d6e9d330e.png?v=1779892516\" alt=\"Milan accessory brushed nickel\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eWarm nickel keeps the palette calm.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_BrushedGold_A_b42863be-d10a-4eb2-9d90-b78bbe45fa16.png?v=1779892516\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_BrushedGold_Hero_A.png?v=1779884606\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn is-current\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_BrushedNickelWarm_A_81cbd313-61d2-436e-a3a8-b15771350d35.png?v=1779892516\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_BrushedNickelWarm_Hero_A.png?v=1779884625\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_Champagne_A_2b956dae-630f-45ce-b227-6952c6c02f2e.png?v=1779892517\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_Champagne_Hero_A.png?v=1779884644\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_Chrome_A_b9f26059-b5c6-4b48-b2d5-873d84d49eab.png?v=1779892518\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_Chrome_Hero_A.png?v=1779884664\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_GunMetal_A_1edf6857-76d2-49ba-b806-74cfc6ec63d7.png?v=1779892519\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_GunMetal_Hero_A.png?v=1779884683\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_MatteBlack_A_70b8c8b1-fd4a-40a4-8c06-7b2092ceb873.png?v=1779892520\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_MatteBlack_Hero_A.png?v=1779884702\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_BrushedNickelWarm_Hero_B.png?v=1779884631\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e67 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eBody Ø\u003c\/span\u003e\u003cspan class=\"v\"\u003e20 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eHook Ø\u003c\/span\u003e\u003cspan class=\"v\"\u003e8 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan accessory carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the brushed nickel is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL25BN\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same brushed nickel finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47304877179029,"sku":"OVIATPRBN","price":39.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_RobeHook_BrushedNickelWarm_A_76b7f5cf-cf85-4b33-924e-940a5e3d30b2.png?v=1785832713"},{"product_id":"ovia-milan-600-double-towel-rail-brushed-gold","title":"Ovia Milan 600 Double Towel Rail Brushed Gold","description":"\u003cdiv class=\"ovia-pd\" style=\"--ac:#C5A253;--ac-deep:#9A7B46;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedGold_Hero_A.png?v=1779883892');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Brushed Gold\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--bg{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"PVD\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003e600 Double Towel Rail\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e towel rail you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedGold_Hero_A.png?v=1779883892\" alt=\"Ovia Milan 600 Double Towel Rail in Brushed Gold\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883911\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Champagne_Hero_A.png?v=1779883929\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Chrome_Hero_A.png?v=1779883947\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_GunMetal_Hero_A.png?v=1779883966\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_MatteBlack_Hero_A.png?v=1779883986\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA towel rail is the most-handled fitting in the bathroom — wet towels, steam and a daily tug — so it has to be built for it. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e rail is machined from DZR brass and finished in brushed gold sealed to hold its colour for the life of the room, fixed dead-level on concealed mounts. The detail that pulls the room together — and the last one you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eBrushed Gold\u003csmall\u003ePVD\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e607 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e131 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary rail metal does in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBonded to the brass by physical vapour deposition, the brushed gold resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that take the weight of wet towels without working loose — solid, dead-level and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eBrushed Gold PVD\u003c\/b\u003e · molecularly bonded to solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePart of the metal\u003c\/h4\u003e\n    \u003cp\u003eThe brushed gold is fused to the brass by Physical Vapour Deposition — a molecular bond, not a coating laid on top. It won’t flake, peel or tarnish at the edges the way ordinary plated finishes eventually do. The colour you see is, quite literally, part of the metal — and it’s covered for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedGold_A_dcff9cc9-f207-4f46-adc2-4b49bc5211cb.png?v=1779892484\" alt=\"Milan towel rail in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedGold_B_1a3ab119-c599-40c3-9b32-39f64246903b.png?v=1779892484\" alt=\"Milan towel rail mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedGold_C_8b301240-e499-405f-bbd7-cc375054b76d.png?v=1779892484\" alt=\"Milan towel rail brushed gold\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eBrushed gold warms a cool palette.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg is-current\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedGold_A_dcff9cc9-f207-4f46-adc2-4b49bc5211cb.png?v=1779892484\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedGold_Hero_A.png?v=1779883892\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedNickelWarm_A_9150e774-09aa-452e-94db-a2b2461447e7.png?v=1779892485\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883911\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Champagne_A_4a6ddc31-b723-4a6d-97e3-76d7900d242a.png?v=1779892485\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Champagne_Hero_A.png?v=1779883929\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Chrome_A_edfedbab-6ecd-47e2-9d6d-e9c597b53e30.png?v=1779892486\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Chrome_Hero_A.png?v=1779883947\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_GunMetal_A_2caf5f2c-e1c3-474d-8a2d-a838b8c67918.png?v=1779892487\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_GunMetal_Hero_A.png?v=1779883966\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_MatteBlack_A_e502aaff-47b0-4b84-84fc-3d07b5d68053.png?v=1779892488\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_MatteBlack_Hero_A.png?v=1779883986\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedGold_Hero_B.png?v=1779883898\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e607 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e131 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan rail carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the brushed gold is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL2160BG\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same brushed gold finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338118414485,"sku":"MIL2160BG","price":147.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedGold_A_dcff9cc9-f207-4f46-adc2-4b49bc5211cb.png?v=1779892484"},{"product_id":"ovia-milan-600-double-towel-rail-brushed-nickel","title":"Ovia Milan 600 Double Towel Rail Brushed Nickel","description":"\u003cdiv class=\"ovia-pd\" style=\"--ac:#CFC4B0;--ac-deep:#897E6B;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883911');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Brushed Nickel\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--bn{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"PVD\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003e600 Double Towel Rail\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e towel rail you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedGold_Hero_A.png?v=1779883892\" alt=\"Ovia Milan 600 Double Towel Rail in Brushed Nickel\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883911\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Champagne_Hero_A.png?v=1779883929\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Chrome_Hero_A.png?v=1779883947\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_GunMetal_Hero_A.png?v=1779883966\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_MatteBlack_Hero_A.png?v=1779883986\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA towel rail is the most-handled fitting in the bathroom — wet towels, steam and a daily tug — so it has to be built for it. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e rail is machined from DZR brass and finished in brushed nickel sealed to hold its colour for the life of the room, fixed dead-level on concealed mounts. The detail that pulls the room together — and the last one you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eBrushed Nickel\u003csmall\u003ePVD\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e607 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e131 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary rail metal does in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBonded to the brass by physical vapour deposition, the brushed nickel resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that take the weight of wet towels without working loose — solid, dead-level and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eBrushed Nickel PVD\u003c\/b\u003e · molecularly bonded to solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePart of the metal\u003c\/h4\u003e\n    \u003cp\u003eThe brushed nickel is fused to the brass by Physical Vapour Deposition — a molecular bond, not a coating laid on top. It won’t flake, peel or tarnish at the edges the way ordinary plated finishes eventually do. The colour you see is, quite literally, part of the metal — and it’s covered for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedNickelWarm_A_9150e774-09aa-452e-94db-a2b2461447e7.png?v=1779892485\" alt=\"Milan towel rail in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedNickelWarm_B_82b35cd6-6149-49fb-a6f0-50c271b62229.png?v=1779892484\" alt=\"Milan towel rail mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedNickelWarm_C_27dd1659-7e3a-4354-ae06-316334cfdf8d.png?v=1779892484\" alt=\"Milan towel rail brushed nickel\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eWarm nickel keeps the palette calm.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedGold_A_dcff9cc9-f207-4f46-adc2-4b49bc5211cb.png?v=1779892484\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedGold_Hero_A.png?v=1779883892\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn is-current\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedNickelWarm_A_9150e774-09aa-452e-94db-a2b2461447e7.png?v=1779892485\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883911\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Champagne_A_4a6ddc31-b723-4a6d-97e3-76d7900d242a.png?v=1779892485\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Champagne_Hero_A.png?v=1779883929\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Chrome_A_edfedbab-6ecd-47e2-9d6d-e9c597b53e30.png?v=1779892486\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Chrome_Hero_A.png?v=1779883947\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_GunMetal_A_2caf5f2c-e1c3-474d-8a2d-a838b8c67918.png?v=1779892487\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_GunMetal_Hero_A.png?v=1779883966\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_MatteBlack_A_e502aaff-47b0-4b84-84fc-3d07b5d68053.png?v=1779892488\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_MatteBlack_Hero_A.png?v=1779883986\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedNickelWarm_Hero_B.png?v=1779883917\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e607 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e131 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan rail carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the brushed nickel is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL2160BN\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same brushed nickel finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338118447253,"sku":"MIL2160BN","price":147.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedNickelWarm_A_9150e774-09aa-452e-94db-a2b2461447e7.png?v=1779892485"},{"product_id":"ovia-milan-600-double-towel-rail-champagne","title":"Ovia Milan 600 Double Towel Rail Champagne","description":"\u003cdiv class=\"ovia-pd\" style=\"--ac:#DDB3AE;--ac-deep:#A1726D;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Champagne_Hero_A.png?v=1779883929');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Champagne\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--cm{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"PVD\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003e600 Double Towel Rail\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e towel rail you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedGold_Hero_A.png?v=1779883892\" alt=\"Ovia Milan 600 Double Towel Rail in Champagne\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883911\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Champagne_Hero_A.png?v=1779883929\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Chrome_Hero_A.png?v=1779883947\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_GunMetal_Hero_A.png?v=1779883966\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_MatteBlack_Hero_A.png?v=1779883986\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA towel rail is the most-handled fitting in the bathroom — wet towels, steam and a daily tug — so it has to be built for it. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e rail is machined from DZR brass and finished in champagne sealed to hold its colour for the life of the room, fixed dead-level on concealed mounts. The detail that pulls the room together — and the last one you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eChampagne\u003csmall\u003ePVD\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e607 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e131 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary rail metal does in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBonded to the brass by physical vapour deposition, the champagne resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that take the weight of wet towels without working loose — solid, dead-level and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eChampagne PVD\u003c\/b\u003e · molecularly bonded to solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePart of the metal\u003c\/h4\u003e\n    \u003cp\u003eThe champagne is fused to the brass by Physical Vapour Deposition — a molecular bond, not a coating laid on top. It won’t flake, peel or tarnish at the edges the way ordinary plated finishes eventually do. The colour you see is, quite literally, part of the metal — and it’s covered for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Champagne_A_4a6ddc31-b723-4a6d-97e3-76d7900d242a.png?v=1779892485\" alt=\"Milan towel rail in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Champagne_B_a69f2c67-fa15-454c-8a47-03d33d19c4e5.png?v=1779892485\" alt=\"Milan towel rail mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Champagne_C_ce3fdb98-a278-4933-9d3e-e4bfeac4932f.png?v=1779892485\" alt=\"Milan towel rail champagne\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eChampagne lends a soft, warm blush.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedGold_A_dcff9cc9-f207-4f46-adc2-4b49bc5211cb.png?v=1779892484\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedGold_Hero_A.png?v=1779883892\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedNickelWarm_A_9150e774-09aa-452e-94db-a2b2461447e7.png?v=1779892485\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883911\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm is-current\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Champagne_A_4a6ddc31-b723-4a6d-97e3-76d7900d242a.png?v=1779892485\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Champagne_Hero_A.png?v=1779883929\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Chrome_A_edfedbab-6ecd-47e2-9d6d-e9c597b53e30.png?v=1779892486\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Chrome_Hero_A.png?v=1779883947\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_GunMetal_A_2caf5f2c-e1c3-474d-8a2d-a838b8c67918.png?v=1779892487\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_GunMetal_Hero_A.png?v=1779883966\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_MatteBlack_A_e502aaff-47b0-4b84-84fc-3d07b5d68053.png?v=1779892488\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_MatteBlack_Hero_A.png?v=1779883986\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Champagne_Hero_B.png?v=1779883935\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e607 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e131 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan rail carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the champagne is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL2160CG\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same champagne finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338118480021,"sku":"MIL2160CG","price":229.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Champagne_A_4a6ddc31-b723-4a6d-97e3-76d7900d242a.png?v=1779892485"},{"product_id":"ovia-milan-600-double-towel-rail-chrome","title":"Ovia Milan 600 Double Towel Rail Chrome","description":"\u003cdiv class=\"ovia-pd\" style=\"--ac:#C8D2DA;--ac-deep:#6E7B86;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Chrome_Hero_A.png?v=1779883947');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Chrome\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--cr{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"Electroplated\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003e600 Double Towel Rail\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e towel rail you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedGold_Hero_A.png?v=1779883892\" alt=\"Ovia Milan 600 Double Towel Rail in Chrome\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883911\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Champagne_Hero_A.png?v=1779883929\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Chrome_Hero_A.png?v=1779883947\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_GunMetal_Hero_A.png?v=1779883966\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_MatteBlack_Hero_A.png?v=1779883986\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA towel rail is the most-handled fitting in the bathroom — wet towels, steam and a daily tug — so it has to be built for it. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e rail is machined from DZR brass and finished in chrome, multi-layer electroplated to stay hard-wearing and true for the life of the room, fixed dead-level on concealed mounts. The detail that pulls the room together — and the last one you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eChrome\u003csmall\u003eElectroplated\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e607 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e131 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary rail metal does in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBuilt up over the brass in multiple plated layers, the chrome resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that take the weight of wet towels without working loose — solid, dead-level and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch is-polished\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eChrome Electroplated\u003c\/b\u003e · layered and sealed over solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePlated to last\u003c\/h4\u003e\n    \u003cp\u003eThe chrome is built up over the solid-brass body in successive electroplated layers, then sealed against tarnish and everyday wear — the same proven process trusted on quality tapware for generations. Hard-wearing and true to tone, and backed, like every Milan finish, for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Chrome_A_edfedbab-6ecd-47e2-9d6d-e9c597b53e30.png?v=1779892486\" alt=\"Milan towel rail in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Chrome_B_06e51a9f-a351-4f0d-807c-12883deeaf2e.png?v=1779892486\" alt=\"Milan towel rail mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Chrome_C_407a639d-5c91-4bdf-93bc-c64ef6e399c8.png?v=1779892486\" alt=\"Milan towel rail chrome\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eChrome adds a crisp, cool gleam.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedGold_A_dcff9cc9-f207-4f46-adc2-4b49bc5211cb.png?v=1779892484\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedGold_Hero_A.png?v=1779883892\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedNickelWarm_A_9150e774-09aa-452e-94db-a2b2461447e7.png?v=1779892485\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883911\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Champagne_A_4a6ddc31-b723-4a6d-97e3-76d7900d242a.png?v=1779892485\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Champagne_Hero_A.png?v=1779883929\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr is-current\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Chrome_A_edfedbab-6ecd-47e2-9d6d-e9c597b53e30.png?v=1779892486\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Chrome_Hero_A.png?v=1779883947\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_GunMetal_A_2caf5f2c-e1c3-474d-8a2d-a838b8c67918.png?v=1779892487\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_GunMetal_Hero_A.png?v=1779883966\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_MatteBlack_A_e502aaff-47b0-4b84-84fc-3d07b5d68053.png?v=1779892488\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_MatteBlack_Hero_A.png?v=1779883986\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Chrome_Hero_B.png?v=1779883954\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e607 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e131 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan rail carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the chrome is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL2160CH\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same chrome finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338118512789,"sku":"MIL2160CH","price":115.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Chrome_A_edfedbab-6ecd-47e2-9d6d-e9c597b53e30.png?v=1779892486"},{"product_id":"ovia-milan-600-double-towel-rail-gun-metal","title":"Ovia Milan 600 Double Towel Rail Gun Metal","description":"\u003cdiv class=\"ovia-pd\" style=\"--ac:#9C958C;--ac-deep:#403D39;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_GunMetal_Hero_A.png?v=1779883966');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Gun Metal\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--gm{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"Electroplated\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003e600 Double Towel Rail\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e towel rail you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedGold_Hero_A.png?v=1779883892\" alt=\"Ovia Milan 600 Double Towel Rail in Gun Metal\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883911\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Champagne_Hero_A.png?v=1779883929\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Chrome_Hero_A.png?v=1779883947\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_GunMetal_Hero_A.png?v=1779883966\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_MatteBlack_Hero_A.png?v=1779883986\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA towel rail is the most-handled fitting in the bathroom — wet towels, steam and a daily tug — so it has to be built for it. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e rail is machined from DZR brass and finished in gun metal, multi-layer electroplated to stay hard-wearing and true for the life of the room, fixed dead-level on concealed mounts. The detail that pulls the room together — and the last one you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eGun Metal\u003csmall\u003eElectroplated\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e607 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e131 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary rail metal does in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBuilt up over the brass in multiple plated layers, the gun metal resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that take the weight of wet towels without working loose — solid, dead-level and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch\" style=\"--ac:#94908A;--shadow:#0d0e0e\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eGun Metal Electroplated\u003c\/b\u003e · layered and sealed over solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePlated to last\u003c\/h4\u003e\n    \u003cp\u003eThe gun metal is built up over the solid-brass body in successive electroplated layers, then sealed against tarnish and everyday wear — the same proven process trusted on quality tapware for generations. Hard-wearing and true to tone, and backed, like every Milan finish, for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_GunMetal_A_2caf5f2c-e1c3-474d-8a2d-a838b8c67918.png?v=1779892487\" alt=\"Milan towel rail in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_GunMetal_B_0f4fe846-d385-4aac-a812-2733ed2f3c1d.png?v=1779892487\" alt=\"Milan towel rail mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_GunMetal_C_ac1e1896-d334-484e-8bd5-87c758f6943a.png?v=1779892487\" alt=\"Milan towel rail gun metal\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eGun metal grounds a light palette.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedGold_A_dcff9cc9-f207-4f46-adc2-4b49bc5211cb.png?v=1779892484\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedGold_Hero_A.png?v=1779883892\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedNickelWarm_A_9150e774-09aa-452e-94db-a2b2461447e7.png?v=1779892485\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883911\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Champagne_A_4a6ddc31-b723-4a6d-97e3-76d7900d242a.png?v=1779892485\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Champagne_Hero_A.png?v=1779883929\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Chrome_A_edfedbab-6ecd-47e2-9d6d-e9c597b53e30.png?v=1779892486\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Chrome_Hero_A.png?v=1779883947\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm is-current\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_GunMetal_A_2caf5f2c-e1c3-474d-8a2d-a838b8c67918.png?v=1779892487\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_GunMetal_Hero_A.png?v=1779883966\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_MatteBlack_A_e502aaff-47b0-4b84-84fc-3d07b5d68053.png?v=1779892488\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_MatteBlack_Hero_A.png?v=1779883986\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_GunMetal_Hero_B.png?v=1779883973\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e607 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e131 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan rail carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the gun metal is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL2160GM\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same gun metal finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338118545557,"sku":"MIL2160GM","price":147.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_GunMetal_A_2caf5f2c-e1c3-474d-8a2d-a838b8c67918.png?v=1779892487"},{"product_id":"ovia-milan-600-double-towel-rail-matte-black","title":"Ovia Milan 600 Double Towel Rail Matte Black","description":"\u003cdiv class=\"ovia-pd opd--matte\" style=\"--ac:#7E7A75;--ac-deep:#1A1815;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_MatteBlack_Hero_A.png?v=1779883986');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Matte Black\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--mb{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"Electroplated\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003e600 Double Towel Rail\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e towel rail you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedGold_Hero_A.png?v=1779883892\" alt=\"Ovia Milan 600 Double Towel Rail in Matte Black\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883911\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Champagne_Hero_A.png?v=1779883929\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Chrome_Hero_A.png?v=1779883947\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_GunMetal_Hero_A.png?v=1779883966\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_MatteBlack_Hero_A.png?v=1779883986\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA towel rail is the most-handled fitting in the bathroom — wet towels, steam and a daily tug — so it has to be built for it. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e rail is machined from DZR brass and finished in matte black, multi-layer electroplated to stay hard-wearing and true for the life of the room, fixed dead-level on concealed mounts. The detail that pulls the room together — and the last one you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eMatte Black\u003csmall\u003eElectroplated\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e607 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e131 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary rail metal does in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBuilt up over the brass in multiple plated layers, the matte black resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that take the weight of wet towels without working loose — solid, dead-level and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch is-matte\" style=\"--ac:#2e2b28\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eMatte Black Electroplated\u003c\/b\u003e · layered and sealed over solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePlated to last\u003c\/h4\u003e\n    \u003cp\u003eThe matte black is built up over the solid-brass body in successive electroplated layers, then sealed against tarnish and everyday wear — the same proven process trusted on quality tapware for generations. Hard-wearing and true to tone, and backed, like every Milan finish, for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_MatteBlack_A_e502aaff-47b0-4b84-84fc-3d07b5d68053.png?v=1779892488\" alt=\"Milan towel rail in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_MatteBlack_B_9dbc7a06-ce3d-4552-9ddd-2f82cafb4b99.png?v=1779892488\" alt=\"Milan towel rail mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_MatteBlack_C_2e7d3857-7f98-4725-a1b4-2bb6cc46668b.png?v=1779892488\" alt=\"Milan towel rail matte black\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eMatte black anchors a bright palette.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedGold_A_dcff9cc9-f207-4f46-adc2-4b49bc5211cb.png?v=1779892484\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedGold_Hero_A.png?v=1779883892\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedNickelWarm_A_9150e774-09aa-452e-94db-a2b2461447e7.png?v=1779892485\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883911\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Champagne_A_4a6ddc31-b723-4a6d-97e3-76d7900d242a.png?v=1779892485\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Champagne_Hero_A.png?v=1779883929\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Chrome_A_edfedbab-6ecd-47e2-9d6d-e9c597b53e30.png?v=1779892486\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_Chrome_Hero_A.png?v=1779883947\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_GunMetal_A_2caf5f2c-e1c3-474d-8a2d-a838b8c67918.png?v=1779892487\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_GunMetal_Hero_A.png?v=1779883966\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb is-current\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_MatteBlack_A_e502aaff-47b0-4b84-84fc-3d07b5d68053.png?v=1779892488\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_MatteBlack_Hero_A.png?v=1779883986\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_MatteBlack_Hero_B.png?v=1779883991\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e607 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e131 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan rail carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the matte black is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL2160MB\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same matte black finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338118578325,"sku":"MIL2160MB","price":125.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail600_MatteBlack_A_e502aaff-47b0-4b84-84fc-3d07b5d68053.png?v=1779892488"},{"product_id":"ovia-milan-600-single-towel-rail-brushed-nickel","title":"Ovia Milan 600 Single Towel Rail Brushed Nickel","description":"\u003cdiv class=\"ovia-pd\" style=\"--ac:#CFC4B0;--ac-deep:#897E6B;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883684');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Brushed Nickel\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--bn{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"PVD\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003e600 Single Towel Rail\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e towel rail you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedGold_Hero_A.png?v=1779883665\" alt=\"Ovia Milan 600 Single Towel Rail in Brushed Nickel\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883684\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Champagne_Hero_A.png?v=1779883702\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Chrome_Hero_A.png?v=1779883722\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_GunMetal_Hero_A.png?v=1779883740\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_MatteBlack_Hero_A.png?v=1779883759\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA towel rail is the most-handled fitting in the bathroom — wet towels, steam and a daily tug — so it has to be built for it. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e rail is machined from DZR brass and finished in brushed nickel sealed to hold its colour for the life of the room, fixed dead-level on concealed mounts. The detail that pulls the room together — and the last one you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eBrushed Nickel\u003csmall\u003ePVD\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e607 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e72 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary rail metal does in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBonded to the brass by physical vapour deposition, the brushed nickel resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that take the weight of wet towels without working loose — solid, dead-level and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eBrushed Nickel PVD\u003c\/b\u003e · molecularly bonded to solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePart of the metal\u003c\/h4\u003e\n    \u003cp\u003eThe brushed nickel is fused to the brass by Physical Vapour Deposition — a molecular bond, not a coating laid on top. It won’t flake, peel or tarnish at the edges the way ordinary plated finishes eventually do. The colour you see is, quite literally, part of the metal — and it’s covered for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedNickelWarm_A_d3c24611-34b8-4492-8b6f-4d2a08cf44ea.png?v=1779892527\" alt=\"Milan towel rail in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedNickelWarm_B_b5c42e25-5ce3-4bf0-8c2e-fd61bff48a8c.png?v=1779892527\" alt=\"Milan towel rail mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedNickelWarm_C_fe363b40-45bd-42cd-8f3a-9f0a30e34b37.png?v=1779892527\" alt=\"Milan towel rail brushed nickel\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eWarm nickel keeps the palette calm.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedGold_A_cbb82b1f-5cbd-418f-9bb9-3a9d5b167056.png?v=1779892529\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedGold_Hero_A.png?v=1779883665\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn is-current\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedNickelWarm_A_d3c24611-34b8-4492-8b6f-4d2a08cf44ea.png?v=1779892527\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883684\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Champagne_A_8d5e05d2-fdad-49a1-bab8-1366620a1a9d.png?v=1779892528\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Champagne_Hero_A.png?v=1779883702\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Chrome_A_413aea1e-77fd-4e1a-a31e-4f987e51bbd8.png?v=1779892529\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Chrome_Hero_A.png?v=1779883722\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_GunMetal_A_b3aa9d36-011d-4bf6-9564-006dc9ba0ccc.png?v=1779892530\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_GunMetal_Hero_A.png?v=1779883740\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_MatteBlack_A_d0559658-9de9-47bb-a275-1170489885fb.png?v=1779892531\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_MatteBlack_Hero_A.png?v=1779883759\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedNickelWarm_Hero_B.png?v=1779883690\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e607 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e72 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan rail carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the brushed nickel is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL2060BN\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same brushed nickel finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338118643861,"sku":"MIL2060BN","price":125.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedNickelWarm_A_d3c24611-34b8-4492-8b6f-4d2a08cf44ea.png?v=1779892527"},{"product_id":"ovia-milan-600-single-towel-rail-champagne","title":"Ovia Milan 600 Single Towel Rail Champagne","description":"\u003cdiv class=\"ovia-pd\" style=\"--ac:#DDB3AE;--ac-deep:#A1726D;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Champagne_Hero_A.png?v=1779883702');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Champagne\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--cm{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"PVD\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003e600 Single Towel Rail\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e towel rail you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedGold_Hero_A.png?v=1779883665\" alt=\"Ovia Milan 600 Single Towel Rail in Champagne\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883684\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Champagne_Hero_A.png?v=1779883702\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Chrome_Hero_A.png?v=1779883722\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_GunMetal_Hero_A.png?v=1779883740\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_MatteBlack_Hero_A.png?v=1779883759\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA towel rail is the most-handled fitting in the bathroom — wet towels, steam and a daily tug — so it has to be built for it. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e rail is machined from DZR brass and finished in champagne sealed to hold its colour for the life of the room, fixed dead-level on concealed mounts. The detail that pulls the room together — and the last one you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eChampagne\u003csmall\u003ePVD\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e607 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e72 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary rail metal does in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBonded to the brass by physical vapour deposition, the champagne resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that take the weight of wet towels without working loose — solid, dead-level and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eChampagne PVD\u003c\/b\u003e · molecularly bonded to solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePart of the metal\u003c\/h4\u003e\n    \u003cp\u003eThe champagne is fused to the brass by Physical Vapour Deposition — a molecular bond, not a coating laid on top. It won’t flake, peel or tarnish at the edges the way ordinary plated finishes eventually do. The colour you see is, quite literally, part of the metal — and it’s covered for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Champagne_A_8d5e05d2-fdad-49a1-bab8-1366620a1a9d.png?v=1779892528\" alt=\"Milan towel rail in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Champagne_B_01c0f95f-fc5e-49a3-a6c9-6c1d1b407b33.png?v=1779892528\" alt=\"Milan towel rail mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Champagne_C_c5f07c9b-7b94-4531-a739-76cc98cd66b9.png?v=1779892528\" alt=\"Milan towel rail champagne\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eChampagne lends a soft, warm blush.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedGold_A_cbb82b1f-5cbd-418f-9bb9-3a9d5b167056.png?v=1779892529\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedGold_Hero_A.png?v=1779883665\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedNickelWarm_A_d3c24611-34b8-4492-8b6f-4d2a08cf44ea.png?v=1779892527\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883684\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm is-current\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Champagne_A_8d5e05d2-fdad-49a1-bab8-1366620a1a9d.png?v=1779892528\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Champagne_Hero_A.png?v=1779883702\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Chrome_A_413aea1e-77fd-4e1a-a31e-4f987e51bbd8.png?v=1779892529\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Chrome_Hero_A.png?v=1779883722\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_GunMetal_A_b3aa9d36-011d-4bf6-9564-006dc9ba0ccc.png?v=1779892530\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_GunMetal_Hero_A.png?v=1779883740\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_MatteBlack_A_d0559658-9de9-47bb-a275-1170489885fb.png?v=1779892531\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_MatteBlack_Hero_A.png?v=1779883759\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Champagne_Hero_B.png?v=1779883709\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e607 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e72 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan rail carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the champagne is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL2060CG\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same champagne finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338118676629,"sku":"MIL2060CG","price":175.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Champagne_A_8d5e05d2-fdad-49a1-bab8-1366620a1a9d.png?v=1779892528"},{"product_id":"ovia-milan-600-single-towel-rail-chrome","title":"Ovia Milan 600 Single Towel Rail Chrome","description":"\u003cdiv class=\"ovia-pd\" style=\"--ac:#C8D2DA;--ac-deep:#6E7B86;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Chrome_Hero_A.png?v=1779883722');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Chrome\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--cr{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"Electroplated\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003e600 Single Towel Rail\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e towel rail you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedGold_Hero_A.png?v=1779883665\" alt=\"Ovia Milan 600 Single Towel Rail in Chrome\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883684\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Champagne_Hero_A.png?v=1779883702\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Chrome_Hero_A.png?v=1779883722\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_GunMetal_Hero_A.png?v=1779883740\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_MatteBlack_Hero_A.png?v=1779883759\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA towel rail is the most-handled fitting in the bathroom — wet towels, steam and a daily tug — so it has to be built for it. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e rail is machined from DZR brass and finished in chrome, multi-layer electroplated to stay hard-wearing and true for the life of the room, fixed dead-level on concealed mounts. The detail that pulls the room together — and the last one you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eChrome\u003csmall\u003eElectroplated\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e607 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e72 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary rail metal does in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBuilt up over the brass in multiple plated layers, the chrome resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that take the weight of wet towels without working loose — solid, dead-level and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch is-polished\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eChrome Electroplated\u003c\/b\u003e · layered and sealed over solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePlated to last\u003c\/h4\u003e\n    \u003cp\u003eThe chrome is built up over the solid-brass body in successive electroplated layers, then sealed against tarnish and everyday wear — the same proven process trusted on quality tapware for generations. Hard-wearing and true to tone, and backed, like every Milan finish, for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Chrome_A_413aea1e-77fd-4e1a-a31e-4f987e51bbd8.png?v=1779892529\" alt=\"Milan towel rail in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Chrome_B_033a0eec-9479-4607-b579-eb39ed248304.png?v=1779892529\" alt=\"Milan towel rail mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Chrome_C_5510d5a3-b978-480f-95e0-923a61d3bc17.png?v=1779892529\" alt=\"Milan towel rail chrome\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eChrome adds a crisp, cool gleam.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedGold_A_cbb82b1f-5cbd-418f-9bb9-3a9d5b167056.png?v=1779892529\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedGold_Hero_A.png?v=1779883665\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedNickelWarm_A_d3c24611-34b8-4492-8b6f-4d2a08cf44ea.png?v=1779892527\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883684\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Champagne_A_8d5e05d2-fdad-49a1-bab8-1366620a1a9d.png?v=1779892528\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Champagne_Hero_A.png?v=1779883702\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr is-current\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Chrome_A_413aea1e-77fd-4e1a-a31e-4f987e51bbd8.png?v=1779892529\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Chrome_Hero_A.png?v=1779883722\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_GunMetal_A_b3aa9d36-011d-4bf6-9564-006dc9ba0ccc.png?v=1779892530\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_GunMetal_Hero_A.png?v=1779883740\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_MatteBlack_A_d0559658-9de9-47bb-a275-1170489885fb.png?v=1779892531\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_MatteBlack_Hero_A.png?v=1779883759\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Chrome_Hero_B.png?v=1779883728\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e607 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e72 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan rail carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the chrome is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL2060CH\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same chrome finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338118709397,"sku":"MIL2060CH","price":110.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Chrome_A_413aea1e-77fd-4e1a-a31e-4f987e51bbd8.png?v=1779892529"},{"product_id":"ovia-milan-600-single-towel-rail-gun-metal","title":"Ovia Milan 600 Single Towel Rail Gun Metal","description":"\u003cdiv class=\"ovia-pd\" style=\"--ac:#9C958C;--ac-deep:#403D39;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_GunMetal_Hero_A.png?v=1779883740');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Gun Metal\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--gm{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"Electroplated\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003e600 Single Towel Rail\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e towel rail you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedGold_Hero_A.png?v=1779883665\" alt=\"Ovia Milan 600 Single Towel Rail in Gun Metal\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883684\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Champagne_Hero_A.png?v=1779883702\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Chrome_Hero_A.png?v=1779883722\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_GunMetal_Hero_A.png?v=1779883740\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_MatteBlack_Hero_A.png?v=1779883759\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA towel rail is the most-handled fitting in the bathroom — wet towels, steam and a daily tug — so it has to be built for it. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e rail is machined from DZR brass and finished in gun metal, multi-layer electroplated to stay hard-wearing and true for the life of the room, fixed dead-level on concealed mounts. The detail that pulls the room together — and the last one you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eGun Metal\u003csmall\u003eElectroplated\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e607 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e72 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary rail metal does in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBuilt up over the brass in multiple plated layers, the gun metal resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that take the weight of wet towels without working loose — solid, dead-level and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch\" style=\"--ac:#94908A;--shadow:#0d0e0e\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eGun Metal Electroplated\u003c\/b\u003e · layered and sealed over solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePlated to last\u003c\/h4\u003e\n    \u003cp\u003eThe gun metal is built up over the solid-brass body in successive electroplated layers, then sealed against tarnish and everyday wear — the same proven process trusted on quality tapware for generations. Hard-wearing and true to tone, and backed, like every Milan finish, for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_GunMetal_A_b3aa9d36-011d-4bf6-9564-006dc9ba0ccc.png?v=1779892530\" alt=\"Milan towel rail in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_GunMetal_B_3a8b403d-43d9-49c2-ada4-1f03c60fa9f4.png?v=1779892530\" alt=\"Milan towel rail mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_GunMetal_C_89ba7653-751c-4331-803f-e0f8003db81a.png?v=1779892530\" alt=\"Milan towel rail gun metal\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eGun metal grounds a light palette.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedGold_A_cbb82b1f-5cbd-418f-9bb9-3a9d5b167056.png?v=1779892529\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedGold_Hero_A.png?v=1779883665\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedNickelWarm_A_d3c24611-34b8-4492-8b6f-4d2a08cf44ea.png?v=1779892527\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883684\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Champagne_A_8d5e05d2-fdad-49a1-bab8-1366620a1a9d.png?v=1779892528\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Champagne_Hero_A.png?v=1779883702\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Chrome_A_413aea1e-77fd-4e1a-a31e-4f987e51bbd8.png?v=1779892529\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Chrome_Hero_A.png?v=1779883722\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm is-current\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_GunMetal_A_b3aa9d36-011d-4bf6-9564-006dc9ba0ccc.png?v=1779892530\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_GunMetal_Hero_A.png?v=1779883740\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_MatteBlack_A_d0559658-9de9-47bb-a275-1170489885fb.png?v=1779892531\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_MatteBlack_Hero_A.png?v=1779883759\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_GunMetal_Hero_B.png?v=1779883747\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e607 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e72 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan rail carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the gun metal is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL2060GM\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same gun metal finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338118742165,"sku":"MIL2060GM","price":125.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_GunMetal_A_b3aa9d36-011d-4bf6-9564-006dc9ba0ccc.png?v=1779892530"},{"product_id":"ovia-milan-600-single-towel-rail-matte-black","title":"Ovia Milan 600 Single Towel Rail Matte Black","description":"\u003cdiv class=\"ovia-pd opd--matte\" style=\"--ac:#7E7A75;--ac-deep:#1A1815;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_MatteBlack_Hero_A.png?v=1779883759');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Matte Black\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--mb{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"Electroplated\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003e600 Single Towel Rail\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e towel rail you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedGold_Hero_A.png?v=1779883665\" alt=\"Ovia Milan 600 Single Towel Rail in Matte Black\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883684\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Champagne_Hero_A.png?v=1779883702\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Chrome_Hero_A.png?v=1779883722\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_GunMetal_Hero_A.png?v=1779883740\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_MatteBlack_Hero_A.png?v=1779883759\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA towel rail is the most-handled fitting in the bathroom — wet towels, steam and a daily tug — so it has to be built for it. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e rail is machined from DZR brass and finished in matte black, multi-layer electroplated to stay hard-wearing and true for the life of the room, fixed dead-level on concealed mounts. The detail that pulls the room together — and the last one you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eMatte Black\u003csmall\u003eElectroplated\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e607 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e72 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary rail metal does in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBuilt up over the brass in multiple plated layers, the matte black resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that take the weight of wet towels without working loose — solid, dead-level and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch is-matte\" style=\"--ac:#2e2b28\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eMatte Black Electroplated\u003c\/b\u003e · layered and sealed over solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePlated to last\u003c\/h4\u003e\n    \u003cp\u003eThe matte black is built up over the solid-brass body in successive electroplated layers, then sealed against tarnish and everyday wear — the same proven process trusted on quality tapware for generations. Hard-wearing and true to tone, and backed, like every Milan finish, for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_MatteBlack_A_d0559658-9de9-47bb-a275-1170489885fb.png?v=1779892531\" alt=\"Milan towel rail in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_MatteBlack_B_ea665f06-0b39-4fca-92d5-5178e33cfd4c.png?v=1779892531\" alt=\"Milan towel rail mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_MatteBlack_C_fd2505e9-0687-4923-818e-3236b551d2c9.png?v=1779892531\" alt=\"Milan towel rail matte black\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eMatte black anchors a bright palette.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedGold_A_cbb82b1f-5cbd-418f-9bb9-3a9d5b167056.png?v=1779892529\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedGold_Hero_A.png?v=1779883665\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedNickelWarm_A_d3c24611-34b8-4492-8b6f-4d2a08cf44ea.png?v=1779892527\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_BrushedNickelWarm_Hero_A.png?v=1779883684\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Champagne_A_8d5e05d2-fdad-49a1-bab8-1366620a1a9d.png?v=1779892528\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Champagne_Hero_A.png?v=1779883702\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Chrome_A_413aea1e-77fd-4e1a-a31e-4f987e51bbd8.png?v=1779892529\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_Chrome_Hero_A.png?v=1779883722\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_GunMetal_A_b3aa9d36-011d-4bf6-9564-006dc9ba0ccc.png?v=1779892530\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_GunMetal_Hero_A.png?v=1779883740\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb is-current\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_MatteBlack_A_d0559658-9de9-47bb-a275-1170489885fb.png?v=1779892531\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_MatteBlack_Hero_A.png?v=1779883759\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_MatteBlack_Hero_B.png?v=1779883765\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e607 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e72 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan rail carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the matte black is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL2060MB\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same matte black finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338118774933,"sku":"MIL2060MB","price":115.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail600_MatteBlack_A_d0559658-9de9-47bb-a275-1170489885fb.png?v=1779892531"},{"product_id":"ovia-milan-750-double-towel-rail-brushed-gold","title":"Ovia Milan 750 Double Towel Rail Brushed Gold","description":"\u003cdiv class=\"ovia-pd\" style=\"--ac:#C5A253;--ac-deep:#9A7B46;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedGold_Hero_A.png?v=1779884005');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Brushed Gold\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--bg{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"PVD\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003e750 Double Towel Rail\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e towel rail you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedGold_Hero_A.png?v=1779884005\" alt=\"Ovia Milan 750 Double Towel Rail in Brushed Gold\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779884023\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Champagne_Hero_A.png?v=1779884042\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Chrome_Hero_A.png?v=1779884061\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_GunMetal_Hero_A.png?v=1779884080\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_MatteBlack_Hero_A.png?v=1779884098\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA towel rail is the most-handled fitting in the bathroom — wet towels, steam and a daily tug — so it has to be built for it. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e rail is machined from DZR brass and finished in brushed gold sealed to hold its colour for the life of the room, fixed dead-level on concealed mounts. The detail that pulls the room together — and the last one you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eBrushed Gold\u003csmall\u003ePVD\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e750 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e131 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary rail metal does in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBonded to the brass by physical vapour deposition, the brushed gold resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that take the weight of wet towels without working loose — solid, dead-level and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eBrushed Gold PVD\u003c\/b\u003e · molecularly bonded to solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePart of the metal\u003c\/h4\u003e\n    \u003cp\u003eThe brushed gold is fused to the brass by Physical Vapour Deposition — a molecular bond, not a coating laid on top. It won’t flake, peel or tarnish at the edges the way ordinary plated finishes eventually do. The colour you see is, quite literally, part of the metal — and it’s covered for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedGold_A_ec6331ec-5558-4a2f-b4b4-916ab6617c45.png?v=1779892492\" alt=\"Milan towel rail in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedGold_B_11d2823c-6f96-4876-8e54-6cf30d6ccf58.png?v=1779892489\" alt=\"Milan towel rail mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedGold_C_1b00c327-4a4c-457d-b16f-dbb647b74ae9.png?v=1779892489\" alt=\"Milan towel rail brushed gold\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eBrushed gold warms a cool palette.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg is-current\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedGold_A_ec6331ec-5558-4a2f-b4b4-916ab6617c45.png?v=1779892492\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedGold_Hero_A.png?v=1779884005\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedNickelWarm_A_74ed69d1-ac9c-4723-bf75-983933aec476.png?v=1779892490\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779884023\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Champagne_A_d016df3f-06f1-4e1e-acac-0361ee5fb83f.png?v=1779892491\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Champagne_Hero_A.png?v=1779884042\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Chrome_A_3bc88e37-b208-40ff-a4df-2d968d31f1bd.png?v=1779892491\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Chrome_Hero_A.png?v=1779884061\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_GunMetal_A_2b049ef0-1cef-4f1e-a535-89454303aa56.png?v=1779892492\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_GunMetal_Hero_A.png?v=1779884080\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_MatteBlack_A_7bb37025-1814-4753-9a78-80abc39ccb20.png?v=1779892493\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_MatteBlack_Hero_A.png?v=1779884098\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedGold_Hero_B.png?v=1779884011\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e750 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e131 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan rail carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the brushed gold is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL2175BG\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same brushed gold finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338118807701,"sku":"MIL2175BG","price":155.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedGold_A_ec6331ec-5558-4a2f-b4b4-916ab6617c45.png?v=1779892492"},{"product_id":"ovia-milan-750-double-towel-rail-brushed-nickel","title":"Ovia Milan 750 Double Towel Rail Brushed Nickel","description":"\u003cdiv class=\"ovia-pd\" style=\"--ac:#CFC4B0;--ac-deep:#897E6B;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779884023');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Brushed Nickel\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--bn{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"PVD\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003e750 Double Towel Rail\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e towel rail you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedGold_Hero_A.png?v=1779884005\" alt=\"Ovia Milan 750 Double Towel Rail in Brushed Nickel\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779884023\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Champagne_Hero_A.png?v=1779884042\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Chrome_Hero_A.png?v=1779884061\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_GunMetal_Hero_A.png?v=1779884080\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_MatteBlack_Hero_A.png?v=1779884098\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA towel rail is the most-handled fitting in the bathroom — wet towels, steam and a daily tug — so it has to be built for it. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e rail is machined from DZR brass and finished in brushed nickel sealed to hold its colour for the life of the room, fixed dead-level on concealed mounts. The detail that pulls the room together — and the last one you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eBrushed Nickel\u003csmall\u003ePVD\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e750 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e131 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary rail metal does in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBonded to the brass by physical vapour deposition, the brushed nickel resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that take the weight of wet towels without working loose — solid, dead-level and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eBrushed Nickel PVD\u003c\/b\u003e · molecularly bonded to solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePart of the metal\u003c\/h4\u003e\n    \u003cp\u003eThe brushed nickel is fused to the brass by Physical Vapour Deposition — a molecular bond, not a coating laid on top. It won’t flake, peel or tarnish at the edges the way ordinary plated finishes eventually do. The colour you see is, quite literally, part of the metal — and it’s covered for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedNickelWarm_A_74ed69d1-ac9c-4723-bf75-983933aec476.png?v=1779892490\" alt=\"Milan towel rail in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedNickelWarm_B_1bcc5b71-a91b-421c-b85c-11c21875421a.png?v=1779892490\" alt=\"Milan towel rail mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedNickelWarm_C_93d69672-9535-4c4f-92dc-55d42764fee5.png?v=1779892490\" alt=\"Milan towel rail brushed nickel\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eWarm nickel keeps the palette calm.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedGold_A_ec6331ec-5558-4a2f-b4b4-916ab6617c45.png?v=1779892492\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedGold_Hero_A.png?v=1779884005\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn is-current\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedNickelWarm_A_74ed69d1-ac9c-4723-bf75-983933aec476.png?v=1779892490\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779884023\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Champagne_A_d016df3f-06f1-4e1e-acac-0361ee5fb83f.png?v=1779892491\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Champagne_Hero_A.png?v=1779884042\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Chrome_A_3bc88e37-b208-40ff-a4df-2d968d31f1bd.png?v=1779892491\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Chrome_Hero_A.png?v=1779884061\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_GunMetal_A_2b049ef0-1cef-4f1e-a535-89454303aa56.png?v=1779892492\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_GunMetal_Hero_A.png?v=1779884080\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_MatteBlack_A_7bb37025-1814-4753-9a78-80abc39ccb20.png?v=1779892493\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_MatteBlack_Hero_A.png?v=1779884098\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedNickelWarm_Hero_B.png?v=1779884029\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e750 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e131 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan rail carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the brushed nickel is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL2175BN\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same brushed nickel finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338118840469,"sku":"MIL2175BN","price":155.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedNickelWarm_A_74ed69d1-ac9c-4723-bf75-983933aec476.png?v=1779892490"},{"product_id":"ovia-milan-750-double-towel-rail-champagne","title":"Ovia Milan 750 Double Towel Rail Champagne","description":"\u003cdiv class=\"ovia-pd\" style=\"--ac:#DDB3AE;--ac-deep:#A1726D;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Champagne_Hero_A.png?v=1779884042');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Champagne\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--cm{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"PVD\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003e750 Double Towel Rail\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e towel rail you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedGold_Hero_A.png?v=1779884005\" alt=\"Ovia Milan 750 Double Towel Rail in Champagne\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779884023\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Champagne_Hero_A.png?v=1779884042\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Chrome_Hero_A.png?v=1779884061\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_GunMetal_Hero_A.png?v=1779884080\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_MatteBlack_Hero_A.png?v=1779884098\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA towel rail is the most-handled fitting in the bathroom — wet towels, steam and a daily tug — so it has to be built for it. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e rail is machined from DZR brass and finished in champagne sealed to hold its colour for the life of the room, fixed dead-level on concealed mounts. The detail that pulls the room together — and the last one you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eChampagne\u003csmall\u003ePVD\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e750 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e131 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary rail metal does in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBonded to the brass by physical vapour deposition, the champagne resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that take the weight of wet towels without working loose — solid, dead-level and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eChampagne PVD\u003c\/b\u003e · molecularly bonded to solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePart of the metal\u003c\/h4\u003e\n    \u003cp\u003eThe champagne is fused to the brass by Physical Vapour Deposition — a molecular bond, not a coating laid on top. It won’t flake, peel or tarnish at the edges the way ordinary plated finishes eventually do. The colour you see is, quite literally, part of the metal — and it’s covered for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Champagne_A_d016df3f-06f1-4e1e-acac-0361ee5fb83f.png?v=1779892491\" alt=\"Milan towel rail in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Champagne_B_26708b1c-297a-4160-9c81-4bb3802a5980.png?v=1779892491\" alt=\"Milan towel rail mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Champagne_C_a201a0d3-f44b-40b1-952c-df33079f9c91.png?v=1779892491\" alt=\"Milan towel rail champagne\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eChampagne lends a soft, warm blush.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedGold_A_ec6331ec-5558-4a2f-b4b4-916ab6617c45.png?v=1779892492\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedGold_Hero_A.png?v=1779884005\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedNickelWarm_A_74ed69d1-ac9c-4723-bf75-983933aec476.png?v=1779892490\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779884023\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm is-current\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Champagne_A_d016df3f-06f1-4e1e-acac-0361ee5fb83f.png?v=1779892491\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Champagne_Hero_A.png?v=1779884042\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Chrome_A_3bc88e37-b208-40ff-a4df-2d968d31f1bd.png?v=1779892491\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Chrome_Hero_A.png?v=1779884061\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_GunMetal_A_2b049ef0-1cef-4f1e-a535-89454303aa56.png?v=1779892492\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_GunMetal_Hero_A.png?v=1779884080\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_MatteBlack_A_7bb37025-1814-4753-9a78-80abc39ccb20.png?v=1779892493\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_MatteBlack_Hero_A.png?v=1779884098\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Champagne_Hero_B.png?v=1779884048\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e750 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e131 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan rail carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the champagne is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL2175CG\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same champagne finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338118873237,"sku":"MIL2175CG","price":259.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Champagne_A_d016df3f-06f1-4e1e-acac-0361ee5fb83f.png?v=1779892491"},{"product_id":"ovia-milan-750-double-towel-rail-chrome","title":"Ovia Milan 750 Double Towel Rail Chrome","description":"\u003cdiv class=\"ovia-pd\" style=\"--ac:#C8D2DA;--ac-deep:#6E7B86;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Chrome_Hero_A.png?v=1779884061');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Chrome\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--cr{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"Electroplated\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003e750 Double Towel Rail\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e towel rail you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedGold_Hero_A.png?v=1779884005\" alt=\"Ovia Milan 750 Double Towel Rail in Chrome\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779884023\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Champagne_Hero_A.png?v=1779884042\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Chrome_Hero_A.png?v=1779884061\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_GunMetal_Hero_A.png?v=1779884080\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_MatteBlack_Hero_A.png?v=1779884098\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA towel rail is the most-handled fitting in the bathroom — wet towels, steam and a daily tug — so it has to be built for it. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e rail is machined from DZR brass and finished in chrome, multi-layer electroplated to stay hard-wearing and true for the life of the room, fixed dead-level on concealed mounts. The detail that pulls the room together — and the last one you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eChrome\u003csmall\u003eElectroplated\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e750 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e131 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary rail metal does in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBuilt up over the brass in multiple plated layers, the chrome resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that take the weight of wet towels without working loose — solid, dead-level and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch is-polished\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eChrome Electroplated\u003c\/b\u003e · layered and sealed over solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePlated to last\u003c\/h4\u003e\n    \u003cp\u003eThe chrome is built up over the solid-brass body in successive electroplated layers, then sealed against tarnish and everyday wear — the same proven process trusted on quality tapware for generations. Hard-wearing and true to tone, and backed, like every Milan finish, for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Chrome_A_3bc88e37-b208-40ff-a4df-2d968d31f1bd.png?v=1779892491\" alt=\"Milan towel rail in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Chrome_B_44045788-990a-4984-b8ba-086cd5d473f4.png?v=1779892491\" alt=\"Milan towel rail mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Chrome_C_3f212ee5-dfe0-4b9d-93d5-447d21d1ed4e.png?v=1779892491\" alt=\"Milan towel rail chrome\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eChrome adds a crisp, cool gleam.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedGold_A_ec6331ec-5558-4a2f-b4b4-916ab6617c45.png?v=1779892492\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedGold_Hero_A.png?v=1779884005\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedNickelWarm_A_74ed69d1-ac9c-4723-bf75-983933aec476.png?v=1779892490\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779884023\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Champagne_A_d016df3f-06f1-4e1e-acac-0361ee5fb83f.png?v=1779892491\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Champagne_Hero_A.png?v=1779884042\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr is-current\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Chrome_A_3bc88e37-b208-40ff-a4df-2d968d31f1bd.png?v=1779892491\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Chrome_Hero_A.png?v=1779884061\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_GunMetal_A_2b049ef0-1cef-4f1e-a535-89454303aa56.png?v=1779892492\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_GunMetal_Hero_A.png?v=1779884080\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_MatteBlack_A_7bb37025-1814-4753-9a78-80abc39ccb20.png?v=1779892493\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_MatteBlack_Hero_A.png?v=1779884098\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Chrome_Hero_B.png?v=1779884067\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e750 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e131 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan rail carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the chrome is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL2175CH\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same chrome finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338118906005,"sku":"MIL2175CH","price":120.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Chrome_A_3bc88e37-b208-40ff-a4df-2d968d31f1bd.png?v=1779892491"},{"product_id":"ovia-milan-750-double-towel-rail-gun-metal","title":"Ovia Milan 750 Double Towel Rail Gun Metal","description":"\u003cdiv class=\"ovia-pd\" style=\"--ac:#9C958C;--ac-deep:#403D39;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_GunMetal_Hero_A.png?v=1779884080');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Gun Metal\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--gm{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"Electroplated\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003e750 Double Towel Rail\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e towel rail you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedGold_Hero_A.png?v=1779884005\" alt=\"Ovia Milan 750 Double Towel Rail in Gun Metal\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779884023\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Champagne_Hero_A.png?v=1779884042\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Chrome_Hero_A.png?v=1779884061\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_GunMetal_Hero_A.png?v=1779884080\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_MatteBlack_Hero_A.png?v=1779884098\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA towel rail is the most-handled fitting in the bathroom — wet towels, steam and a daily tug — so it has to be built for it. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e rail is machined from DZR brass and finished in gun metal, multi-layer electroplated to stay hard-wearing and true for the life of the room, fixed dead-level on concealed mounts. The detail that pulls the room together — and the last one you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eGun Metal\u003csmall\u003eElectroplated\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e750 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e131 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary rail metal does in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBuilt up over the brass in multiple plated layers, the gun metal resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that take the weight of wet towels without working loose — solid, dead-level and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch\" style=\"--ac:#94908A;--shadow:#0d0e0e\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eGun Metal Electroplated\u003c\/b\u003e · layered and sealed over solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePlated to last\u003c\/h4\u003e\n    \u003cp\u003eThe gun metal is built up over the solid-brass body in successive electroplated layers, then sealed against tarnish and everyday wear — the same proven process trusted on quality tapware for generations. Hard-wearing and true to tone, and backed, like every Milan finish, for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_GunMetal_A_2b049ef0-1cef-4f1e-a535-89454303aa56.png?v=1779892492\" alt=\"Milan towel rail in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_GunMetal_B_35963cd1-b86a-4441-ad26-610582c85f59.png?v=1779892492\" alt=\"Milan towel rail mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_GunMetal_C_149651f7-f218-4f0a-9c23-87e8cff72bfd.png?v=1779892492\" alt=\"Milan towel rail gun metal\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eGun metal grounds a light palette.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedGold_A_ec6331ec-5558-4a2f-b4b4-916ab6617c45.png?v=1779892492\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedGold_Hero_A.png?v=1779884005\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedNickelWarm_A_74ed69d1-ac9c-4723-bf75-983933aec476.png?v=1779892490\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779884023\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Champagne_A_d016df3f-06f1-4e1e-acac-0361ee5fb83f.png?v=1779892491\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Champagne_Hero_A.png?v=1779884042\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Chrome_A_3bc88e37-b208-40ff-a4df-2d968d31f1bd.png?v=1779892491\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_Chrome_Hero_A.png?v=1779884061\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm is-current\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_GunMetal_A_2b049ef0-1cef-4f1e-a535-89454303aa56.png?v=1779892492\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_GunMetal_Hero_A.png?v=1779884080\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_MatteBlack_A_7bb37025-1814-4753-9a78-80abc39ccb20.png?v=1779892493\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_MatteBlack_Hero_A.png?v=1779884098\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_GunMetal_Hero_B.png?v=1779884086\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e750 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e131 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan rail carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the gun metal is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL2175GM\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same gun metal finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338118938773,"sku":"MIL2175GM","price":155.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_DoubleTowelRail750_GunMetal_A_2b049ef0-1cef-4f1e-a535-89454303aa56.png?v=1779892492"},{"product_id":"ovia-milan-750-single-towel-rail-brushed-nickel","title":"Ovia Milan 750 Single Towel Rail Brushed Nickel","description":"\u003cdiv class=\"ovia-pd\" style=\"--ac:#CFC4B0;--ac-deep:#897E6B;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779883797');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Brushed Nickel\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--bn{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"PVD\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003e750 Single Towel Rail\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e towel rail you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedGold_Hero_A.png?v=1779883778\" alt=\"Ovia Milan 750 Single Towel Rail in Brushed Nickel\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779883797\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Champagne_Hero_A.png?v=1779883816\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Chrome_Hero_A.png?v=1779883835\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_GunMetal_Hero_A.png?v=1779883855\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_MatteBlack_Hero_A.png?v=1779883873\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA towel rail is the most-handled fitting in the bathroom — wet towels, steam and a daily tug — so it has to be built for it. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e rail is machined from DZR brass and finished in brushed nickel sealed to hold its colour for the life of the room, fixed dead-level on concealed mounts. The detail that pulls the room together — and the last one you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eBrushed Nickel\u003csmall\u003ePVD\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e750 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e72 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary rail metal does in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBonded to the brass by physical vapour deposition, the brushed nickel resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that take the weight of wet towels without working loose — solid, dead-level and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eBrushed Nickel PVD\u003c\/b\u003e · molecularly bonded to solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePart of the metal\u003c\/h4\u003e\n    \u003cp\u003eThe brushed nickel is fused to the brass by Physical Vapour Deposition — a molecular bond, not a coating laid on top. It won’t flake, peel or tarnish at the edges the way ordinary plated finishes eventually do. The colour you see is, quite literally, part of the metal — and it’s covered for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedNickelWarm_A_8c7eeb7f-6a08-411b-8502-bfb2f420b0cc.png?v=1779892532\" alt=\"Milan towel rail in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedNickelWarm_B_c4b66887-381f-4ec2-8047-41121cd81a94.png?v=1779892532\" alt=\"Milan towel rail mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedNickelWarm_C_ae33074c-67b8-438f-b7ea-88703f6f997a.png?v=1779892532\" alt=\"Milan towel rail brushed nickel\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eWarm nickel keeps the palette calm.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedGold_A_4c62e3ae-0ba2-4697-bfc2-06743e84a51b.png?v=1779892531\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedGold_Hero_A.png?v=1779883778\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn is-current\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedNickelWarm_A_8c7eeb7f-6a08-411b-8502-bfb2f420b0cc.png?v=1779892532\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779883797\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Champagne_A_bc5cbfcd-c5f4-4086-928f-98624cb11b6f.png?v=1779892534\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Champagne_Hero_A.png?v=1779883816\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Chrome_A_057ca513-133d-43d9-804f-b66a8e4a3f72.png?v=1779892534\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Chrome_Hero_A.png?v=1779883835\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_GunMetal_A_47599f28-461a-4855-91b1-03ab16e16b69.png?v=1779892535\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_GunMetal_Hero_A.png?v=1779883855\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_MatteBlack_A_9c08c365-0b39-4f18-b5d0-5656f8ab92ab.png?v=1779892536\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_MatteBlack_Hero_A.png?v=1779883873\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedNickelWarm_Hero_B.png?v=1779883802\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e750 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e72 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan rail carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the brushed nickel is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL2075BN\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same brushed nickel finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338119037077,"sku":"MIL2075BN","price":125.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedNickelWarm_A_8c7eeb7f-6a08-411b-8502-bfb2f420b0cc.png?v=1779892532"},{"product_id":"ovia-milan-750-single-towel-rail-champagne","title":"Ovia Milan 750 Single Towel Rail Champagne","description":"\u003cdiv class=\"ovia-pd\" style=\"--ac:#DDB3AE;--ac-deep:#A1726D;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Champagne_Hero_A.png?v=1779883816');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Champagne\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--cm{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"PVD\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003e750 Single Towel Rail\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e towel rail you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedGold_Hero_A.png?v=1779883778\" alt=\"Ovia Milan 750 Single Towel Rail in Champagne\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779883797\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Champagne_Hero_A.png?v=1779883816\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Chrome_Hero_A.png?v=1779883835\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_GunMetal_Hero_A.png?v=1779883855\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_MatteBlack_Hero_A.png?v=1779883873\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA towel rail is the most-handled fitting in the bathroom — wet towels, steam and a daily tug — so it has to be built for it. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e rail is machined from DZR brass and finished in champagne sealed to hold its colour for the life of the room, fixed dead-level on concealed mounts. The detail that pulls the room together — and the last one you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eChampagne\u003csmall\u003ePVD\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e750 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e72 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary rail metal does in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBonded to the brass by physical vapour deposition, the champagne resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that take the weight of wet towels without working loose — solid, dead-level and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eChampagne PVD\u003c\/b\u003e · molecularly bonded to solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePart of the metal\u003c\/h4\u003e\n    \u003cp\u003eThe champagne is fused to the brass by Physical Vapour Deposition — a molecular bond, not a coating laid on top. It won’t flake, peel or tarnish at the edges the way ordinary plated finishes eventually do. The colour you see is, quite literally, part of the metal — and it’s covered for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Champagne_A_bc5cbfcd-c5f4-4086-928f-98624cb11b6f.png?v=1779892534\" alt=\"Milan towel rail in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Champagne_B_b2244333-8dcd-49e8-ac20-575e3f29339e.png?v=1779892533\" alt=\"Milan towel rail mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Champagne_C_144ec055-8004-4ad8-8878-3cdea50f289b.png?v=1779892533\" alt=\"Milan towel rail champagne\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eChampagne lends a soft, warm blush.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedGold_A_4c62e3ae-0ba2-4697-bfc2-06743e84a51b.png?v=1779892531\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedGold_Hero_A.png?v=1779883778\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedNickelWarm_A_8c7eeb7f-6a08-411b-8502-bfb2f420b0cc.png?v=1779892532\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779883797\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm is-current\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Champagne_A_bc5cbfcd-c5f4-4086-928f-98624cb11b6f.png?v=1779892534\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Champagne_Hero_A.png?v=1779883816\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Chrome_A_057ca513-133d-43d9-804f-b66a8e4a3f72.png?v=1779892534\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Chrome_Hero_A.png?v=1779883835\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_GunMetal_A_47599f28-461a-4855-91b1-03ab16e16b69.png?v=1779892535\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_GunMetal_Hero_A.png?v=1779883855\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_MatteBlack_A_9c08c365-0b39-4f18-b5d0-5656f8ab92ab.png?v=1779892536\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_MatteBlack_Hero_A.png?v=1779883873\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Champagne_Hero_B.png?v=1779883822\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e750 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e72 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan rail carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the champagne is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL2075CG\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same champagne finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338119069845,"sku":"MIL2075CG","price":197.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Champagne_A_bc5cbfcd-c5f4-4086-928f-98624cb11b6f.png?v=1779892534"},{"product_id":"ovia-milan-750-single-towel-rail-chrome","title":"Ovia Milan 750 Single Towel Rail Chrome","description":"\u003cdiv class=\"ovia-pd\" style=\"--ac:#C8D2DA;--ac-deep:#6E7B86;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Chrome_Hero_A.png?v=1779883835');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Chrome\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--cr{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"Electroplated\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003e750 Single Towel Rail\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e towel rail you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedGold_Hero_A.png?v=1779883778\" alt=\"Ovia Milan 750 Single Towel Rail in Chrome\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779883797\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Champagne_Hero_A.png?v=1779883816\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Chrome_Hero_A.png?v=1779883835\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_GunMetal_Hero_A.png?v=1779883855\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_MatteBlack_Hero_A.png?v=1779883873\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA towel rail is the most-handled fitting in the bathroom — wet towels, steam and a daily tug — so it has to be built for it. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e rail is machined from DZR brass and finished in chrome, multi-layer electroplated to stay hard-wearing and true for the life of the room, fixed dead-level on concealed mounts. The detail that pulls the room together — and the last one you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eChrome\u003csmall\u003eElectroplated\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e750 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e72 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary rail metal does in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBuilt up over the brass in multiple plated layers, the chrome resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that take the weight of wet towels without working loose — solid, dead-level and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch is-polished\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eChrome Electroplated\u003c\/b\u003e · layered and sealed over solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePlated to last\u003c\/h4\u003e\n    \u003cp\u003eThe chrome is built up over the solid-brass body in successive electroplated layers, then sealed against tarnish and everyday wear — the same proven process trusted on quality tapware for generations. Hard-wearing and true to tone, and backed, like every Milan finish, for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Chrome_A_057ca513-133d-43d9-804f-b66a8e4a3f72.png?v=1779892534\" alt=\"Milan towel rail in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Chrome_B_36e92a05-47f2-4554-a2b4-0962410199e2.png?v=1779892534\" alt=\"Milan towel rail mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Chrome_C_9faec0a8-415d-47a2-bb33-8076db5d2cd4.png?v=1779892534\" alt=\"Milan towel rail chrome\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eChrome adds a crisp, cool gleam.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedGold_A_4c62e3ae-0ba2-4697-bfc2-06743e84a51b.png?v=1779892531\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedGold_Hero_A.png?v=1779883778\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedNickelWarm_A_8c7eeb7f-6a08-411b-8502-bfb2f420b0cc.png?v=1779892532\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779883797\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Champagne_A_bc5cbfcd-c5f4-4086-928f-98624cb11b6f.png?v=1779892534\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Champagne_Hero_A.png?v=1779883816\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr is-current\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Chrome_A_057ca513-133d-43d9-804f-b66a8e4a3f72.png?v=1779892534\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Chrome_Hero_A.png?v=1779883835\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_GunMetal_A_47599f28-461a-4855-91b1-03ab16e16b69.png?v=1779892535\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_GunMetal_Hero_A.png?v=1779883855\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_MatteBlack_A_9c08c365-0b39-4f18-b5d0-5656f8ab92ab.png?v=1779892536\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_MatteBlack_Hero_A.png?v=1779883873\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Chrome_Hero_B.png?v=1779883842\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e750 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e72 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan rail carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the chrome is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL2075CH\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same chrome finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338119102613,"sku":"MIL2075CH","price":115.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Chrome_A_057ca513-133d-43d9-804f-b66a8e4a3f72.png?v=1779892534"},{"product_id":"ovia-milan-750-single-towel-rail-gun-metal","title":"Ovia Milan 750 Single Towel Rail Gun Metal","description":"\u003cdiv class=\"ovia-pd\" style=\"--ac:#9C958C;--ac-deep:#403D39;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_GunMetal_Hero_A.png?v=1779883855');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Gun Metal\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--gm{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"Electroplated\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003e750 Single Towel Rail\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e towel rail you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedGold_Hero_A.png?v=1779883778\" alt=\"Ovia Milan 750 Single Towel Rail in Gun Metal\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779883797\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Champagne_Hero_A.png?v=1779883816\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Chrome_Hero_A.png?v=1779883835\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_GunMetal_Hero_A.png?v=1779883855\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_MatteBlack_Hero_A.png?v=1779883873\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA towel rail is the most-handled fitting in the bathroom — wet towels, steam and a daily tug — so it has to be built for it. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e rail is machined from DZR brass and finished in gun metal, multi-layer electroplated to stay hard-wearing and true for the life of the room, fixed dead-level on concealed mounts. The detail that pulls the room together — and the last one you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eGun Metal\u003csmall\u003eElectroplated\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e750 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e72 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary rail metal does in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBuilt up over the brass in multiple plated layers, the gun metal resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that take the weight of wet towels without working loose — solid, dead-level and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch\" style=\"--ac:#94908A;--shadow:#0d0e0e\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eGun Metal Electroplated\u003c\/b\u003e · layered and sealed over solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePlated to last\u003c\/h4\u003e\n    \u003cp\u003eThe gun metal is built up over the solid-brass body in successive electroplated layers, then sealed against tarnish and everyday wear — the same proven process trusted on quality tapware for generations. Hard-wearing and true to tone, and backed, like every Milan finish, for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_GunMetal_A_47599f28-461a-4855-91b1-03ab16e16b69.png?v=1779892535\" alt=\"Milan towel rail in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_GunMetal_B_58c1b9a4-dc23-4d83-a032-e482c8bf171e.png?v=1779892535\" alt=\"Milan towel rail mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_GunMetal_C_86b975fe-2225-45fe-9d40-c9ffc267447c.png?v=1779892535\" alt=\"Milan towel rail gun metal\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eGun metal grounds a light palette.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedGold_A_4c62e3ae-0ba2-4697-bfc2-06743e84a51b.png?v=1779892531\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedGold_Hero_A.png?v=1779883778\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedNickelWarm_A_8c7eeb7f-6a08-411b-8502-bfb2f420b0cc.png?v=1779892532\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779883797\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Champagne_A_bc5cbfcd-c5f4-4086-928f-98624cb11b6f.png?v=1779892534\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Champagne_Hero_A.png?v=1779883816\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Chrome_A_057ca513-133d-43d9-804f-b66a8e4a3f72.png?v=1779892534\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Chrome_Hero_A.png?v=1779883835\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm is-current\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_GunMetal_A_47599f28-461a-4855-91b1-03ab16e16b69.png?v=1779892535\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_GunMetal_Hero_A.png?v=1779883855\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_MatteBlack_A_9c08c365-0b39-4f18-b5d0-5656f8ab92ab.png?v=1779892536\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_MatteBlack_Hero_A.png?v=1779883873\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_GunMetal_Hero_B.png?v=1779883860\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e750 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e72 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan rail carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the gun metal is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL2075GM\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same gun metal finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338119135381,"sku":"MIL2075GM","price":125.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_GunMetal_A_47599f28-461a-4855-91b1-03ab16e16b69.png?v=1779892535"},{"product_id":"ovia-milan-750-single-towel-rail-matte-black","title":"Ovia Milan 750 Single Towel Rail Matte Black","description":"\u003cdiv class=\"ovia-pd opd--matte\" style=\"--ac:#7E7A75;--ac-deep:#1A1815;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_MatteBlack_Hero_A.png?v=1779883873');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Matte Black\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--mb{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"Electroplated\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003e750 Single Towel Rail\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e towel rail you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedGold_Hero_A.png?v=1779883778\" alt=\"Ovia Milan 750 Single Towel Rail in Matte Black\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779883797\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Champagne_Hero_A.png?v=1779883816\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Chrome_Hero_A.png?v=1779883835\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_GunMetal_Hero_A.png?v=1779883855\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_MatteBlack_Hero_A.png?v=1779883873\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA towel rail is the most-handled fitting in the bathroom — wet towels, steam and a daily tug — so it has to be built for it. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e rail is machined from DZR brass and finished in matte black, multi-layer electroplated to stay hard-wearing and true for the life of the room, fixed dead-level on concealed mounts. The detail that pulls the room together — and the last one you’ll ever fit.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eMatte Black\u003csmall\u003eElectroplated\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e750 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e72 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary rail metal does in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBuilt up over the brass in multiple plated layers, the matte black resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that take the weight of wet towels without working loose — solid, dead-level and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch is-matte\" style=\"--ac:#2e2b28\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eMatte Black Electroplated\u003c\/b\u003e · layered and sealed over solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePlated to last\u003c\/h4\u003e\n    \u003cp\u003eThe matte black is built up over the solid-brass body in successive electroplated layers, then sealed against tarnish and everyday wear — the same proven process trusted on quality tapware for generations. Hard-wearing and true to tone, and backed, like every Milan finish, for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_MatteBlack_A_9c08c365-0b39-4f18-b5d0-5656f8ab92ab.png?v=1779892536\" alt=\"Milan towel rail in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_MatteBlack_B_586a0b2a-f9b7-4cb9-a3d9-5c58bf312693.png?v=1779892536\" alt=\"Milan towel rail mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_MatteBlack_C_361cceb1-f9eb-4ac3-b39f-3b2ed83ad0b6.png?v=1779892536\" alt=\"Milan towel rail matte black\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eMatte black anchors a bright palette.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedGold_A_4c62e3ae-0ba2-4697-bfc2-06743e84a51b.png?v=1779892531\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedGold_Hero_A.png?v=1779883778\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedNickelWarm_A_8c7eeb7f-6a08-411b-8502-bfb2f420b0cc.png?v=1779892532\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_BrushedNickelWarm_Hero_A.png?v=1779883797\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Champagne_A_bc5cbfcd-c5f4-4086-928f-98624cb11b6f.png?v=1779892534\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Champagne_Hero_A.png?v=1779883816\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Chrome_A_057ca513-133d-43d9-804f-b66a8e4a3f72.png?v=1779892534\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_Chrome_Hero_A.png?v=1779883835\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_GunMetal_A_47599f28-461a-4855-91b1-03ab16e16b69.png?v=1779892535\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_GunMetal_Hero_A.png?v=1779883855\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb is-current\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_MatteBlack_A_9c08c365-0b39-4f18-b5d0-5656f8ab92ab.png?v=1779892536\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_MatteBlack_Hero_A.png?v=1779883873\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_MatteBlack_Hero_B.png?v=1779883879\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e750 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e72 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan rail carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the matte black is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL2075MB\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same matte black finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338119168149,"sku":"MIL2075MB","price":120.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_SingleTowelRail750_MatteBlack_A_9c08c365-0b39-4f18-b5d0-5656f8ab92ab.png?v=1779892536"},{"product_id":"ovia-milan-hand-towel-holder-brushed-gold","title":"Ovia Milan Hand Towel Holder Brushed Gold","description":"\u003cdiv class=\"ovia-pd opd--compact\" style=\"--ac:#C5A253;--ac-deep:#9A7B46;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedGold_Hero_A.png?v=1779884232');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Brushed Gold\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--bg{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"PVD\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n  \/* compact banner render — wide horizontal accessories (hand-towel \/ toilet-roll\n     holder) overrun the right edge at the default 170%; inert without the class *\/\n  .ovia-pd.opd--compact .opd-prod{width:120%;}\n  .ovia-pd.opd--compact .opd-glint{-webkit-mask-size:120% auto,120% auto,120% auto;mask-size:120% auto,120% auto,120% auto;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003eHand Towel Holder\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e hand towel holder you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedGold_Hero_A.png?v=1779884232\" alt=\"Ovia Milan Hand Towel Holder in Brushed Gold\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedNickelWarm_Hero_A.png?v=1779888997\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Champagne_Hero_A.png?v=1779884531\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Chrome_Hero_A.png?v=1779884549\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_GunMetal_Hero_A.png?v=1779884568\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_MatteBlack_Hero_A.png?v=1779884587\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA hand towel by the basin earns its keep — reached for a dozen times a day. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e holder keeps it close, machined from DZR brass and finished in brushed gold sealed to hold its colour for the life of the room, fixed dead-level on a concealed mount. Small, solid, and made to outlast the room.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eBrushed Gold\u003csmall\u003ePVD\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e270 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e72 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary fittings do in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBonded to the brass by physical vapour deposition, the brushed gold resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that hold it dead-level and never work loose — solid and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eBrushed Gold PVD\u003c\/b\u003e · molecularly bonded to solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePart of the metal\u003c\/h4\u003e\n    \u003cp\u003eThe brushed gold is fused to the brass by Physical Vapour Deposition — a molecular bond, not a coating laid on top. It won’t flake, peel or tarnish at the edges the way ordinary plated finishes eventually do. The colour you see is, quite literally, part of the metal — and it’s covered for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedGold_A_66886b60-06c8-45fa-81fc-381005af3c93.png?v=1779892494\" alt=\"Milan accessory in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedGold_B_d3501de9-ff85-447b-806a-0157c984636f.png?v=1779892494\" alt=\"Milan accessory mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedGold_C_8af0b3bd-4dde-45c6-9e08-a120cd3011b9.png?v=1779892494\" alt=\"Milan accessory brushed gold\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eBrushed gold warms a cool palette.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg is-current\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedGold_A_66886b60-06c8-45fa-81fc-381005af3c93.png?v=1779892494\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedGold_Hero_A.png?v=1779884232\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedNickelWarm_A_c8e2ae7b-e1da-4fbb-8889-c5a9a1a96291.png?v=1779892495\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedNickelWarm_Hero_A.png?v=1779888997\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Champagne_A_491654c5-ed33-4346-a23d-e5e0bda1c5a7.png?v=1779892496\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Champagne_Hero_A.png?v=1779884531\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Chrome_A_f1fc9fab-2ab7-4c91-852b-2b46f05bde6b.png?v=1779892497\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Chrome_Hero_A.png?v=1779884549\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_GunMetal_A_b1a29026-233d-4934-9b8e-7ad76b961aae.png?v=1779892498\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_GunMetal_Hero_A.png?v=1779884568\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_MatteBlack_A_3337be9c-c02a-41f8-9c32-b8e79afc317f.png?v=1779892498\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_MatteBlack_Hero_A.png?v=1779884587\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedGold_Hero_B.png?v=1779884238\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e270 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e72 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eRail length\u003c\/span\u003e\u003cspan class=\"v\"\u003e236 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan accessory carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the brushed gold is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL24BG\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same brushed gold finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338119987349,"sku":"MIL24BG","price":85.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedGold_A_66886b60-06c8-45fa-81fc-381005af3c93.png?v=1779892494"},{"product_id":"ovia-milan-hand-towel-holder-brushed-nickel","title":"Ovia Milan Hand Towel Holder Brushed Nickel","description":"\u003cdiv class=\"ovia-pd opd--compact\" style=\"--ac:#CFC4B0;--ac-deep:#897E6B;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedNickelWarm_Hero_A.png?v=1779888997');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Brushed Nickel\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--bn{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"PVD\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n  \/* compact banner render — wide horizontal accessories (hand-towel \/ toilet-roll\n     holder) overrun the right edge at the default 170%; inert without the class *\/\n  .ovia-pd.opd--compact .opd-prod{width:120%;}\n  .ovia-pd.opd--compact .opd-glint{-webkit-mask-size:120% auto,120% auto,120% auto;mask-size:120% auto,120% auto,120% auto;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003eHand Towel Holder\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e hand towel holder you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedGold_Hero_A.png?v=1779884232\" alt=\"Ovia Milan Hand Towel Holder in Brushed Nickel\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedNickelWarm_Hero_A.png?v=1779888997\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Champagne_Hero_A.png?v=1779884531\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Chrome_Hero_A.png?v=1779884549\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_GunMetal_Hero_A.png?v=1779884568\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_MatteBlack_Hero_A.png?v=1779884587\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA hand towel by the basin earns its keep — reached for a dozen times a day. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e holder keeps it close, machined from DZR brass and finished in brushed nickel sealed to hold its colour for the life of the room, fixed dead-level on a concealed mount. Small, solid, and made to outlast the room.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eBrushed Nickel\u003csmall\u003ePVD\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e270 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e72 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary fittings do in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBonded to the brass by physical vapour deposition, the brushed nickel resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that hold it dead-level and never work loose — solid and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eBrushed Nickel PVD\u003c\/b\u003e · molecularly bonded to solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePart of the metal\u003c\/h4\u003e\n    \u003cp\u003eThe brushed nickel is fused to the brass by Physical Vapour Deposition — a molecular bond, not a coating laid on top. It won’t flake, peel or tarnish at the edges the way ordinary plated finishes eventually do. The colour you see is, quite literally, part of the metal — and it’s covered for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedNickelWarm_A_c8e2ae7b-e1da-4fbb-8889-c5a9a1a96291.png?v=1779892495\" alt=\"Milan accessory in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedNickelWarm_B_e5a3fb3d-b826-4160-a851-5b64a1c8936c.png?v=1779892495\" alt=\"Milan accessory mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedNickelWarm_C_65bda60c-4eac-493e-be4f-ec990ee0e58f.png?v=1779892495\" alt=\"Milan accessory brushed nickel\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eWarm nickel keeps the palette calm.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedGold_A_66886b60-06c8-45fa-81fc-381005af3c93.png?v=1779892494\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedGold_Hero_A.png?v=1779884232\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn is-current\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedNickelWarm_A_c8e2ae7b-e1da-4fbb-8889-c5a9a1a96291.png?v=1779892495\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedNickelWarm_Hero_A.png?v=1779888997\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Champagne_A_491654c5-ed33-4346-a23d-e5e0bda1c5a7.png?v=1779892496\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Champagne_Hero_A.png?v=1779884531\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Chrome_A_f1fc9fab-2ab7-4c91-852b-2b46f05bde6b.png?v=1779892497\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Chrome_Hero_A.png?v=1779884549\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_GunMetal_A_b1a29026-233d-4934-9b8e-7ad76b961aae.png?v=1779892498\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_GunMetal_Hero_A.png?v=1779884568\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_MatteBlack_A_3337be9c-c02a-41f8-9c32-b8e79afc317f.png?v=1779892498\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_MatteBlack_Hero_A.png?v=1779884587\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedNickelWarm_Hero_B.png?v=1779884518\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e270 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e72 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eRail length\u003c\/span\u003e\u003cspan class=\"v\"\u003e236 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan accessory carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the brushed nickel is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL24BN\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same brushed nickel finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338120020117,"sku":"MIL24BN","price":85.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedNickelWarm_A_c8e2ae7b-e1da-4fbb-8889-c5a9a1a96291.png?v=1779892495"},{"product_id":"ovia-milan-hand-towel-holder-champagne","title":"Ovia Milan Hand Towel Holder Champagne","description":"\u003cdiv class=\"ovia-pd opd--compact\" style=\"--ac:#DDB3AE;--ac-deep:#A1726D;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Champagne_Hero_A.png?v=1779884531');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Champagne\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--cm{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"PVD\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n  \/* compact banner render — wide horizontal accessories (hand-towel \/ toilet-roll\n     holder) overrun the right edge at the default 170%; inert without the class *\/\n  .ovia-pd.opd--compact .opd-prod{width:120%;}\n  .ovia-pd.opd--compact .opd-glint{-webkit-mask-size:120% auto,120% auto,120% auto;mask-size:120% auto,120% auto,120% auto;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003eHand Towel Holder\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e hand towel holder you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedGold_Hero_A.png?v=1779884232\" alt=\"Ovia Milan Hand Towel Holder in Champagne\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedNickelWarm_Hero_A.png?v=1779888997\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Champagne_Hero_A.png?v=1779884531\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Chrome_Hero_A.png?v=1779884549\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_GunMetal_Hero_A.png?v=1779884568\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_MatteBlack_Hero_A.png?v=1779884587\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA hand towel by the basin earns its keep — reached for a dozen times a day. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e holder keeps it close, machined from DZR brass and finished in champagne sealed to hold its colour for the life of the room, fixed dead-level on a concealed mount. Small, solid, and made to outlast the room.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eChampagne\u003csmall\u003ePVD\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e270 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e72 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary fittings do in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBonded to the brass by physical vapour deposition, the champagne resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that hold it dead-level and never work loose — solid and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eChampagne PVD\u003c\/b\u003e · molecularly bonded to solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePart of the metal\u003c\/h4\u003e\n    \u003cp\u003eThe champagne is fused to the brass by Physical Vapour Deposition — a molecular bond, not a coating laid on top. It won’t flake, peel or tarnish at the edges the way ordinary plated finishes eventually do. The colour you see is, quite literally, part of the metal — and it’s covered for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Champagne_A_491654c5-ed33-4346-a23d-e5e0bda1c5a7.png?v=1779892496\" alt=\"Milan accessory in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Champagne_B_2f3e86e6-e410-4b5f-8109-0bf0dcae9995.png?v=1779892495\" alt=\"Milan accessory mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Champagne_C_7f026054-c8e8-4178-9a5a-c2daf2e3d62b.png?v=1779892496\" alt=\"Milan accessory champagne\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eChampagne lends a soft, warm blush.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedGold_A_66886b60-06c8-45fa-81fc-381005af3c93.png?v=1779892494\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedGold_Hero_A.png?v=1779884232\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedNickelWarm_A_c8e2ae7b-e1da-4fbb-8889-c5a9a1a96291.png?v=1779892495\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedNickelWarm_Hero_A.png?v=1779888997\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm is-current\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Champagne_A_491654c5-ed33-4346-a23d-e5e0bda1c5a7.png?v=1779892496\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Champagne_Hero_A.png?v=1779884531\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Chrome_A_f1fc9fab-2ab7-4c91-852b-2b46f05bde6b.png?v=1779892497\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Chrome_Hero_A.png?v=1779884549\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_GunMetal_A_b1a29026-233d-4934-9b8e-7ad76b961aae.png?v=1779892498\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_GunMetal_Hero_A.png?v=1779884568\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_MatteBlack_A_3337be9c-c02a-41f8-9c32-b8e79afc317f.png?v=1779892498\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_MatteBlack_Hero_A.png?v=1779884587\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Champagne_Hero_B.png?v=1779884537\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e270 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e72 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eRail length\u003c\/span\u003e\u003cspan class=\"v\"\u003e236 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan accessory carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the champagne is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL24CG\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same champagne finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338120052885,"sku":"MIL24CG","price":105.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Champagne_A_491654c5-ed33-4346-a23d-e5e0bda1c5a7.png?v=1779892496"},{"product_id":"ovia-milan-hand-towel-holder-chrome","title":"Ovia Milan Hand Towel Holder Chrome","description":"\u003cdiv class=\"ovia-pd opd--compact\" style=\"--ac:#C8D2DA;--ac-deep:#6E7B86;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Chrome_Hero_A.png?v=1779884549');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Chrome\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--cr{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"Electroplated\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n  \/* compact banner render — wide horizontal accessories (hand-towel \/ toilet-roll\n     holder) overrun the right edge at the default 170%; inert without the class *\/\n  .ovia-pd.opd--compact .opd-prod{width:120%;}\n  .ovia-pd.opd--compact .opd-glint{-webkit-mask-size:120% auto,120% auto,120% auto;mask-size:120% auto,120% auto,120% auto;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003eHand Towel Holder\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e hand towel holder you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedGold_Hero_A.png?v=1779884232\" alt=\"Ovia Milan Hand Towel Holder in Chrome\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedNickelWarm_Hero_A.png?v=1779888997\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Champagne_Hero_A.png?v=1779884531\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Chrome_Hero_A.png?v=1779884549\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_GunMetal_Hero_A.png?v=1779884568\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_MatteBlack_Hero_A.png?v=1779884587\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA hand towel by the basin earns its keep — reached for a dozen times a day. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e holder keeps it close, machined from DZR brass and finished in chrome, multi-layer electroplated to stay hard-wearing and true for the life of the room, fixed dead-level on a concealed mount. Small, solid, and made to outlast the room.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eChrome\u003csmall\u003eElectroplated\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e270 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e72 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary fittings do in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBuilt up over the brass in multiple plated layers, the chrome resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that hold it dead-level and never work loose — solid and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch is-polished\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eChrome Electroplated\u003c\/b\u003e · layered and sealed over solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePlated to last\u003c\/h4\u003e\n    \u003cp\u003eThe chrome is built up over the solid-brass body in successive electroplated layers, then sealed against tarnish and everyday wear — the same proven process trusted on quality tapware for generations. Hard-wearing and true to tone, and backed, like every Milan finish, for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Chrome_A_f1fc9fab-2ab7-4c91-852b-2b46f05bde6b.png?v=1779892497\" alt=\"Milan accessory in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Chrome_B_fd7ddb3d-4eef-490d-9c58-ca0632420c6d.png?v=1779892496\" alt=\"Milan accessory mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Chrome_C_52ff697a-6664-45bd-8085-f99dd9fa2e81.png?v=1779892497\" alt=\"Milan accessory chrome\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eChrome adds a crisp, cool gleam.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedGold_A_66886b60-06c8-45fa-81fc-381005af3c93.png?v=1779892494\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedGold_Hero_A.png?v=1779884232\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedNickelWarm_A_c8e2ae7b-e1da-4fbb-8889-c5a9a1a96291.png?v=1779892495\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedNickelWarm_Hero_A.png?v=1779888997\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Champagne_A_491654c5-ed33-4346-a23d-e5e0bda1c5a7.png?v=1779892496\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Champagne_Hero_A.png?v=1779884531\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr is-current\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Chrome_A_f1fc9fab-2ab7-4c91-852b-2b46f05bde6b.png?v=1779892497\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Chrome_Hero_A.png?v=1779884549\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_GunMetal_A_b1a29026-233d-4934-9b8e-7ad76b961aae.png?v=1779892498\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_GunMetal_Hero_A.png?v=1779884568\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_MatteBlack_A_3337be9c-c02a-41f8-9c32-b8e79afc317f.png?v=1779892498\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_MatteBlack_Hero_A.png?v=1779884587\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Chrome_Hero_B.png?v=1779884556\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e270 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e72 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eRail length\u003c\/span\u003e\u003cspan class=\"v\"\u003e236 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan accessory carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the chrome is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL24CH\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same chrome finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338120085653,"sku":"MIL24CH","price":67.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Chrome_A_f1fc9fab-2ab7-4c91-852b-2b46f05bde6b.png?v=1779892497"},{"product_id":"ovia-milan-hand-towel-holder-gun-metal","title":"Ovia Milan Hand Towel Holder Gun Metal","description":"\u003cdiv class=\"ovia-pd opd--compact\" style=\"--ac:#9C958C;--ac-deep:#403D39;--hero:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_GunMetal_Hero_A.png?v=1779884568');\"\u003e\n\u003cstyle\u003e\n  .accordion-body:has(\u003e .ovia-pd) \u003e h2{display:none;}\n\n  .ovia-pd{font-family:inherit;color:#26241f;line-height:1.6;\n    \/* soft container tint, derived from the finish's DEEP accent — the colour\n       family tuned for the LIGHT body (ink, rules, drop-cap), NOT the --ac glow\n       that's tuned to sit on the dark banner. Was hard-coded cream (#fcfaf6 \/\n       #fffdf8), which is golden and so only ever suited Brushed Gold. ~4% of\n       --ac-deep into white reproduces that cream on gold and shifts per finish;\n       on the light body the dark finishes resolve to a clean, soft cool-grey\n       (matte black's near-black deep -\u003e pale charcoal, not a dingy mid-grey).\n       Fixed per product finish like the ink — not hover-reactive. *\/\n    --cream:color-mix(in srgb,var(--ac-deep) 4%,#fff);\n    --cream-soft:color-mix(in srgb,var(--ac-deep) 2.5%,#fff);\n    \/* finish-tracking NEUTRALS — a fixed-lightness grey nudged toward the finish's\n       deep accent, so the old warm\/cream greys read warm on gold but cool on\n       chrome\/gun metal and neutral on matte, WITHOUT shifting text hierarchy\n       (the base grey holds the lightness; --ac-deep only swings the hue). *\/\n    --label:color-mix(in srgb,var(--ac-deep) 20%,#898780); \/* uppercase labels \/ section heads *\/\n    --body:color-mix(in srgb,var(--ac-deep) 16%,#505050);  \/* body copy *\/\n    --faint:color-mix(in srgb,var(--ac-deep) 16%,#a7a299); \/* fine print \/ hints *\/\n    --line:color-mix(in srgb,var(--ac-deep) 9%,#efece6);   \/* hairlines \/ borders *\/\n    --line-2:color-mix(in srgb,var(--ac-deep) 7%,#f4f1eb); \/* lighter grid lines \/ dividers *\/\n    \/* the finish grid shows ALL six finishes at once, so its tiles stay NEUTRAL *\/\n    --tile:#f2f1ef;\n    --tile-line:#e9e7e3;\n    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}\n  .ovia-pd *{box-sizing:border-box;}\n  .ovia-pd img{max-width:100%;}\n\n  \/* ============ 1. BANNER ============ *\/\n  .ovia-pd .opd-banner{position:relative;overflow:hidden;border-radius:16px;isolation:isolate;\n    background:radial-gradient(120% 140% at 88% 18%, #2a241a 0%, #1a160f 42%, #0e0b08 100%);\n    padding:22px 30px;display:flex;align-items:stretch;gap:24px;min-height:220px;\n    transition:background .5s ease;}\n  .ovia-pd .opd-banner::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(62% 84% at 80% 44%, color-mix(in srgb,var(--ac) 50%,transparent) 0%, transparent 66%);\n    animation:opdBloom 1.4s ease-out both;transition:background .5s ease;}\n  .ovia-pd .opd-bL{position:relative;z-index:3;flex:1 1 46%;max-width:46%;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-logo{display:block;width:68px;height:23px;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') left center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.92;margin-bottom:12px;animation:opdRise .7s .05s ease-out both;}\n  .ovia-pd .opd-kicker{font-size:.594rem;letter-spacing:.34em;text-transform:uppercase;\n    color:color-mix(in srgb,var(--ac) 76%,#fff);margin-bottom:9px;font-weight:500;animation:opdRise .7s .14s ease-out both;}\n  .ovia-pd .opd-name{font-size:1.5rem;line-height:1.07;font-weight:300;color:#f6f1e9;\n    margin:0 0 5px;letter-spacing:-.012em;animation:opdRise .7s .22s ease-out both;}\n  .ovia-pd .opd-finish{font-size:.781rem;color:#b9af9c;font-weight:300;letter-spacing:.03em;animation:opdRise .7s .3s ease-out both;}\n  \/* finish name driven by :has() so it tracks the hovered swatch *\/\n  .ovia-pd .opd-finish__nm::before{content:\"Gun Metal\";}\n  .ovia-pd .opd-manifesto{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.10);\n    font-size:.844rem;font-weight:300;color:#e7ddcc;font-style:italic;line-height:1.45;animation:opdRise .7s .4s ease-out both;}\n  .ovia-pd .opd-manifesto em{color:var(--ac);font-style:italic;font-weight:400;}\n\n  .ovia-pd .opd-bR{position:static;flex:0 0 0;}\n  .ovia-pd .opd-figure{position:absolute;z-index:1;top:0;right:0;bottom:0;width:58%;margin:0;overflow:hidden;\n    \/* soft left-edge fade — some renders (e.g. the twin shower) crop on the left;\n       fading the leftmost sliver blends that hard cut into the banner ground *\/\n    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 12%);mask-image:linear-gradient(to right,transparent 0,#000 12%);\n    animation:opdFloatIn 1.1s .3s cubic-bezier(.2,.7,.2,1) both;}\n  \/* stacked finish renders — crossfade on swatch hover (FEATURE 1) *\/\n  .ovia-pd .opd-prod{position:absolute;left:0;bottom:0;width:170%;max-width:none !important;height:auto;\n    opacity:0;transition:opacity .5s ease;-webkit-user-drag:none;user-select:none;pointer-events:none;}\n  .ovia-pd .ph--gm{opacity:1;}\n  \/* accent + banner finish label follow the hovered finish *\/\n  \/* finish PROCESS word (PVD vs Electroplated) — honest per finish, tracks hover too.\n     Default (non-hover) label is set per-finish by the rollout. *\/\n  .ovia-pd .opd-finish__pr::before{content:\"Electroplated\";}\n\n  .ovia-pd .opd-glint{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;\n    background:linear-gradient(108deg,transparent 40%,rgba(255,252,242,.84) 50%,transparent 60%);\n    background-size:260% 100%;background-repeat:no-repeat;\n    \/* mask to the fixture silhouette, stacked x3 with intersect so the alpha\n       MULTIPLIES — the opaque metal stays lit but the semi-transparent baked\n       shadow (low alpha) drops out, so the shine never bleeds onto the shadow *\/\n    -webkit-mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    mask:var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat,var(--hero) left bottom\/170% auto no-repeat;\n    -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect;\n    animation:opdGlint 9s 2.5s ease-in-out infinite;}\n  \/* compact banner render — wide horizontal accessories (hand-towel \/ toilet-roll\n     holder) overrun the right edge at the default 170%; inert without the class *\/\n  .ovia-pd.opd--compact .opd-prod{width:120%;}\n  .ovia-pd.opd--compact .opd-glint{-webkit-mask-size:120% auto,120% auto,120% auto;mask-size:120% auto,120% auto,120% auto;}\n\n  \/* ============ 2. OPENING ============ *\/\n  .ovia-pd .opd-lead{margin:38px 4px 6px;font-size:1.2rem;line-height:1.62;font-weight:300;color:#34302a;letter-spacing:.002em;}\n  .ovia-pd .opd-lead .drop{color:var(--ac-deep);font-weight:500;}\n\n  \/* ============ 3. SPEC STRIP ============ *\/\n  .ovia-pd .opd-specs{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);\n    border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:30px 0;}\n  .ovia-pd .opd-spec{background:#fff;padding:16px 12px;text-align:center;position:relative;transition:background .3s ease;}\n  .ovia-pd .opd-spec::after{content:\"\";position:absolute;left:50%;bottom:0;height:2px;width:0;background:var(--ac-deep);transform:translateX(-50%);transition:width .35s ease;}\n  .ovia-pd .opd-spec:hover{background:var(--cream-soft);}\n  .ovia-pd .opd-spec:hover::after{width:42%;}\n  .ovia-pd .opd-spec .l{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:7px;}\n  .ovia-pd .opd-spec .v{font-size:.86rem;font-weight:500;color:#2a2722;line-height:1.3;}\n  .ovia-pd .opd-spec .v small{display:block;font-weight:400;font-size:.74rem;color:var(--label);margin-top:2px;}\n\n  \/* ============ section heading ============ *\/\n  .ovia-pd .opd-h{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--label);font-weight:600;\n    margin:46px 4px 22px;display:flex;align-items:center;gap:16px;}\n  .ovia-pd .opd-h::after{content:\"\";flex:1;height:1px;background:linear-gradient(90deg,var(--ac-deep),var(--line) 70%);transform-origin:left;}\n  .ovia-pd .opd-h .opd-hint{flex:0 0 auto;font-size:.58rem;letter-spacing:.14em;color:var(--faint);font-weight:500;text-transform:none;font-style:italic;}\n\n  \/* ============ 4. CRAFT ============ *\/\n  .ovia-pd .opd-craft{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin:0 0 8px;}\n  .ovia-pd .opd-c .n{font-size:.96rem;font-weight:600;color:var(--ac-deep);margin-bottom:12px;font-variant-numeric:tabular-nums;position:relative;padding-bottom:10px;}\n  .ovia-pd .opd-c .n::after{content:\"\";position:absolute;left:0;bottom:0;width:22px;height:2px;background:var(--ac-deep);}\n  .ovia-pd .opd-c .t{font-size:1.05rem;font-weight:500;color:#2a2722;margin:0 0 8px;line-height:1.25;}\n  .ovia-pd .opd-c p{margin:0;font-size:.9rem;color:var(--body);line-height:1.58;}\n\n  \/* ============ NEW: MACRO-DETAIL STRIP (FEATURE 2) ============ *\/\n  .ovia-pd .opd-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}\n  .ovia-pd .opd-macro figure{margin:0;}\n  \/* square tiles — the gallery scenes are 2000x2000, so 1:1 shows them uncropped *\/\n  .ovia-pd .opd-macro .frame{display:block;aspect-ratio:1\/1;overflow:hidden;border-radius:12px;background:var(--cream);position:relative;}\n  .ovia-pd .opd-macro .frame img{width:100% !important;height:100% !important;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.7,.2,1);}\n  .ovia-pd .opd-macro figure:hover .frame img{transform:scale(1.08);}\n  .ovia-pd .opd-macro figcaption{margin-top:10px;font-size:.82rem;color:var(--body);}\n  .ovia-pd .opd-macro figcaption b{display:block;color:#2a2722;font-weight:500;font-size:.9rem;margin-bottom:1px;}\n\n  \/* ============ 5. FINISH FAMILY — interactive (FEATURE 1) ============ *\/\n  .ovia-pd .opd-finishes{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 18px;\n    max-width:506px;margin:12px auto 8px;}\n  .ovia-pd .opd-fin{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:pointer;\n    width:150px;font:inherit;color:var(--body);display:flex;flex-direction:column;gap:9px;text-align:center;}\n  .ovia-pd .opd-fin__img{display:block;aspect-ratio:4\/3;overflow:hidden;border-radius:11px;\n    background:var(--tile);border:1px solid var(--tile-line);\n    transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .25s ease,box-shadow .25s ease;}\n  .ovia-pd .opd-fin__img img{width:100% !important;height:100% !important;object-fit:cover;object-position:6% bottom;display:block;pointer-events:none;-webkit-user-drag:none;-webkit-touch-callout:none;}\n  .ovia-pd .opd-fin__name{font-size:.78rem;letter-spacing:.01em;line-height:1.2;transition:color .2s ease;}\n  .ovia-pd .opd-fin:hover .opd-fin__img{transform:translateY(-4px);\n    border-color:color-mix(in srgb,var(--c) 55%,#d8d2c5);box-shadow:0 12px 26px rgba(80,66,40,.14);}\n  .ovia-pd .opd-fin:hover .opd-fin__name{color:#2a2722;}\n  .ovia-pd .opd-fin.is-current .opd-fin__img{border-color:var(--c);box-shadow:0 0 0 1px var(--c);}\n  .ovia-pd .opd-fin.is-current .opd-fin__name{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-fin.is-current .opd-fin__name::before{content:\"\";display:inline-block;width:6px;height:6px;\n    border-radius:50%;background:var(--c);margin-right:7px;vertical-align:middle;\n    box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 40%,#fff);}\n\n  \/* ---- finish PREVIEW OVERLAY: each card owns a pane directly ABOVE IT.\n       hover (desktop) \/ press-hold (:active, mobile) pops that finish's\n       Gallery-A render in a metallic pane, pointer centred under it pointing\n       at that card. Per-finish --ac is set inline on each card (matte black =\n       true #1a1a1a — bright render bg). Pure CSS, no :has(). ---- *\/\n  .ovia-pd .opd-fin{position:relative;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}\n  .ovia-pd .opv{position:absolute;left:calc(50% - var(--co,0px));bottom:calc(100% + 12px);z-index:30;width:min(400px,88vw);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .24s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1);}\n  .ovia-pd .opd-fin:active .opv{opacity:1;transform:translate(-50%,0);}\n  @media (hover:hover){.ovia-pd .opd-fin:hover .opv{opacity:1;transform:translate(-50%,0);}}\n  .ovia-pd .opv__frame{display:block;position:relative;border-radius:14px;padding:1.5px;width:100%;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 90%,#fff) 0%,var(--ac) 26%,color-mix(in srgb,var(--ac) 48%,#241a10) 50%,color-mix(in srgb,var(--ac) 95%,#fff) 72%,var(--ac) 100%);box-shadow:0 6px 16px -4px rgba(34,24,10,.42),0 2px 5px -1px rgba(34,24,10,.34);}\n  .ovia-pd .opv__inner{display:block;position:relative;border-radius:12.5px;overflow:hidden;aspect-ratio:1\/1;background:#f3ede2;z-index:2;}\n  .ovia-pd .opv__img{display:block;width:100% !important;height:100% !important;object-fit:cover;object-position:center;pointer-events:none;}\n  .ovia-pd .opv__cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.55rem .75rem .5rem;background:linear-gradient(to top,rgba(8,6,5,.82),transparent);display:flex;align-items:center;gap:.45em;}\n  .ovia-pd .opv__dot{width:9px;height:9px;border-radius:50%;background:var(--ac);box-shadow:0 0 8px color-mix(in srgb,var(--ac) 60%,transparent);flex-shrink:0;}\n  .ovia-pd .opv__nm{font-size:.78rem;font-weight:400;letter-spacing:.03em;color:#f3ece0;}\n  .ovia-pd .opv__tip{position:absolute;left:calc(50% + var(--co,0px));bottom:-5px;width:14px;height:14px;z-index:1;transform:translateX(-50%) rotate(45deg);border-radius:0 0 4px 0;background:linear-gradient(135deg,color-mix(in srgb,var(--ac) 80%,#fff),var(--ac) 55%,color-mix(in srgb,var(--ac) 58%,#241a10));box-shadow:2px 2px 5px -2px rgba(34,24,10,.34);}\n  \/* pane re-centres on the grid; pointer slides to sit under the HELD card.\n     --co = held card's centre offset from the grid centre. 3 columns on desktop,\n     2 on phones (card 150px + 18px gap =\u003e 168px step). *\/\n  .ovia-pd .opd-fin--bg{--co:-168px;} .ovia-pd .opd-fin--bn{--co:0px;} .ovia-pd .opd-fin--cm{--co:168px;}\n  .ovia-pd .opd-fin--cr{--co:-168px;} .ovia-pd .opd-fin--gm{--co:0px;} .ovia-pd .opd-fin--mb{--co:168px;}\n  @media (max-width:600px){\n    .ovia-pd .opd-fin--bg{--co:-84px;} .ovia-pd .opd-fin--bn{--co:84px;} .ovia-pd .opd-fin--cm{--co:-84px;}\n    .ovia-pd .opd-fin--cr{--co:84px;} .ovia-pd .opd-fin--gm{--co:-84px;} .ovia-pd .opd-fin--mb{--co:84px;}\n  }\n  .ovia-pd .opd-hint .hint-hold{display:none;}\n  @media (hover:none){.ovia-pd .opd-hint .hint-hover{display:none;}.ovia-pd .opd-hint .hint-hold{display:inline;}}\n\n\n  \/* ============ NEW: DIMENSIONS — render + spec table (FEATURE 5) ============ *\/\n  .ovia-pd .opd-dims{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--cream);}\n  .ovia-pd .opd-dims__draw{flex:1 1 58%;position:relative;min-height:300px;overflow:hidden;\n    background-image:linear-gradient(var(--line-2) 1px,transparent 1px),linear-gradient(90deg,var(--line-2) 1px,transparent 1px);\n    background-size:26px 26px;}\n  .ovia-pd .opd-dims__img{position:absolute;left:4%;bottom:0;height:90% !important;width:auto;max-width:none !important;\n    \/* tight top-edge fade — tall renders (twin shower, rail shower) crop at the top\n       of this Hero_B; fading the very top blends that hard cut into the grid *\/\n    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 5%);mask-image:linear-gradient(to bottom,transparent 0,#000 5%);}\n  .ovia-pd .opd-dims__table{flex:0 0 248px;padding:22px 26px;border-left:1px solid var(--line-2);background:#fff;\n    display:flex;flex-direction:column;justify-content:center;}\n  .ovia-pd .opd-dims__row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;\n    padding:11px 0;border-bottom:1px solid var(--line-2);font-size:.84rem;}\n  .ovia-pd .opd-dims__row:last-child{border-bottom:none;}\n  .ovia-pd .opd-dims__row .k{color:var(--label);}\n  .ovia-pd .opd-dims__row .v{color:#2a2722;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}\n  .ovia-pd .opd-dims__row .v.tbc{color:var(--faint);}\n  .ovia-pd .opd-dims__note{margin:10px 4px 0;font-size:.74rem;color:var(--faint);}\n  .ovia-pd .opd-dims__note b{color:var(--ac-deep);}\n\n  \/* ============ 6. ASSURANCE — original lifetime-warranty badge ============ *\/\n  .ovia-pd .opd-warranty{display:flex;align-items:stretch;border:1px solid var(--ac-deep);border-radius:12px;\n    overflow:hidden;margin:30px 0 10px;background:var(--cream-soft);position:relative;}\n  .ovia-pd .opd-warranty .badge{flex:0 0 152px;position:relative;overflow:hidden;\n    background:linear-gradient(160deg,#2a241a,#14110b);color:#f3ead8;\n    display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 14px;gap:6px;}\n  .ovia-pd .opd-warranty .badge::before{content:\"\";position:absolute;inset:0;\n    background:linear-gradient(115deg,transparent 40%,rgba(255,250,235,.14) 50%,transparent 60%);\n    background-size:250% 100%;animation:opdGlint 6s 1s ease-in-out infinite;}\n  .ovia-pd .opd-warranty .badge .big{font-size:2rem;font-weight:300;color:var(--ac);line-height:1;position:relative;}\n  .ovia-pd .opd-warranty .badge .sm{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#b6ab97;position:relative;}\n  .ovia-pd .opd-warranty .body{padding:18px 22px;font-size:.92rem;color:#3a352d;line-height:1.58;}\n  .ovia-pd .opd-warranty .body b{color:#2a2722;}\n  .ovia-pd .opd-reg{font-size:.74rem;letter-spacing:.08em;color:var(--faint);margin:12px 4px 0;}\n\n  \/* ============ 7. COLLECTION — dark \"bookend\" panel (echoes the hero banner) ============ *\/\n  .ovia-pd .opd-coll{position:relative;overflow:hidden;isolation:isolate;margin:46px 0 6px;padding:44px 36px 40px;\n    border-radius:16px;text-align:center;\n    background:radial-gradient(120% 130% at 50% 0%, #2a241a 0%, #1a160f 46%, #0e0b08 100%);}\n  .ovia-pd .opd-coll::before{content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(52% 64% at 50% 2%, color-mix(in srgb,var(--ac) 22%,transparent), transparent 72%);}\n  .ovia-pd .opd-coll__logo{display:block;width:78px;height:26px;margin:0 auto 18px;position:relative;z-index:1;\n    background:url('https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/ovia-logo-black.png?v=1779186226') center\/contain no-repeat;\n    filter:brightness(0) invert(1);opacity:.9;}\n  .ovia-pd .opd-coll .t{position:relative;z-index:1;font-size:1.5rem;font-weight:300;color:#f4ecdd;margin:0 0 12px;letter-spacing:-.01em;}\n  .ovia-pd .opd-coll .t b{font-weight:600;color:var(--ac);}\n  .ovia-pd .opd-coll p{position:relative;z-index:1;margin:0 auto;max-width:52ch;font-size:.92rem;color:#bcb29e;line-height:1.65;}\n  .ovia-pd .opd-coll__rule{position:relative;z-index:1;width:56px;height:1px;margin:20px auto 0;\n    background:linear-gradient(90deg,transparent,var(--ac),transparent);}\n\n  \/* ============ FEATURE 3: SCROLL-REVEAL (CSS scroll-driven, JS-free) ============ *\/\n  @keyframes opdReveal{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}\n  @keyframes opdDrawLine{from{transform:scaleX(0);}to{transform:scaleX(1);}}\n  @supports (animation-timeline: view()){\n    .ovia-pd .reveal{animation:opdReveal both linear;animation-timeline:view();animation-range:entry 2% entry 46%;}\n    .ovia-pd .opd-h::after{animation:opdDrawLine both linear;animation-timeline:view();animation-range:entry 0% entry 40%;}\n  }\n\n  \/* ============ keyframes ============ *\/\n  @keyframes opdRise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}\n  @keyframes opdBloom{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:none;}}\n  @keyframes opdFloatIn{from{opacity:0;transform:translateY(26px) scale(.97);}to{opacity:1;transform:none;}}\n  @keyframes opdGlint{0%{background-position:160% 0;}26%{background-position:-60% 0;}100%{background-position:-60% 0;}}\n  @keyframes opdSpin{to{transform:rotate(360deg);}}\n\n  @media (prefers-reduced-motion:reduce){.ovia-pd *{animation:none !important;}}\n\n  \/* ============ responsive ============ *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-banner{flex-direction:column;text-align:center;padding:26px 22px 0;min-height:0;}\n    .ovia-pd .opd-bL{max-width:100%;flex-basis:auto;align-items:center;}\n    .ovia-pd .opd-bR{position:relative;flex:0 0 auto;width:100%;height:230px;}\n    \/* MUST stay a containing block on mobile — if this goes position:static the\n       absolutely-positioned render escapes to .opd-banner (auto height), its\n       height:100% collapses and the render vanishes while the inset-pinned glint\n       still shows. Keep position:relative so height:100% resolves to the 230px slot. *\/\n    .ovia-pd .opd-figure{position:absolute;inset:0;width:100%;height:100%;}\n    \/* match the render to the glint mask exactly (left bottom \/ 170% width) so the\n       physical product sits under its own shine — don't size by height (overblows). *\/\n    .ovia-pd .opd-prod{width:170%;height:auto;left:0;bottom:0;transform:none;}\n    .ovia-pd .opd-manifesto{border-top:none;padding-top:6px;}\n    \/* 5 specs on a 6-col grid: top row 3 cells span 2 each, bottom row 2 cells\n       span 3 each — both rows fill the full width, no trailing empty gap. *\/\n    .ovia-pd .opd-specs{grid-template-columns:repeat(6,1fr);}\n    .ovia-pd .opd-spec:nth-child(-n+3){grid-column:span 2;}\n    .ovia-pd .opd-spec:nth-child(n+4){grid-column:span 3;}\n    .ovia-pd .opd-craft{grid-template-columns:1fr;gap:20px;}\n    \/* 3 scene shots: 2 per row, the lone last one centres (not left-anchored)\n       and sits a touch wider so the row isn't cramped. Flex-wrap + justify-center;\n       :last-child:nth-child(odd) only fires when an item is genuinely orphaned. *\/\n    .ovia-pd .opd-macro{display:flex;flex-wrap:wrap;justify-content:center;}\n    .ovia-pd .opd-macro figure{flex:0 1 calc(50% - 7px);}\n    .ovia-pd .opd-macro figure:last-child:nth-child(odd){flex-basis:62%;}\n    .ovia-pd .opd-warranty{flex-direction:column;text-align:center;}\n    \/* stack the dimensions block on mobile — the fixed 248px table otherwise\n       eats ~70% of the row and squeezes the render\/grid to a sliver. Drawing on\n       top at full width with a real height, spec table full-width beneath it. *\/\n    .ovia-pd .opd-dims{flex-direction:column;}\n    .ovia-pd .opd-dims__draw{flex:none;width:100%;min-height:280px;}\n    .ovia-pd .opd-dims__table{flex:none;width:100%;border-left:none;border-top:1px solid var(--line-2);}\n  }\n\n  \/* ============ MATTE BLACK modifier (gated to the mb description only) ============ *\/\n  .ovia-pd.opd--matte .opd-banner{background:radial-gradient(120% 140% at 80% 30%, #1a1918 0%, #0b0a0a 52%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-banner::before{background:radial-gradient(56% 78% at 80% 44%, rgba(150,147,142,.16) 0%, transparent 60%);}\n  .ovia-pd.opd--matte .opd-coll{background:radial-gradient(120% 130% at 50% 0%, #1a1918 0%, #0b0a0a 50%, #030303 100%);}\n  .ovia-pd.opd--matte .opd-warranty .badge{background:linear-gradient(160deg,#1d1c1b,#070706);}\n  .ovia-pd.opd--matte .opd-glint{display:none;}\n  .ovia-pd.opd--matte .opd-name{color:#eeedeb;}\n  .ovia-pd.opd--matte .opd-finish{color:#9c9a96;}\n  .ovia-pd.opd--matte .opd-manifesto{color:#d6d4d0;}\n\n  \/* ====================================================================== *\/\n  \/* ============  PREMIUM ADDITIONS (creative pass)  ====================== *\/\n  \/* ====================================================================== *\/\n\n  \/* --- BENEATH THE SURFACE: finished-surface feature (visual beside the text) --- *\/\n  .ovia-pd .opd-bond{display:grid;grid-template-columns:minmax(0,44%) 1fr;gap:30px;align-items:center;\n    border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:26px 28px;}\n  .ovia-pd .opd-eng__s{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ac-deep);font-weight:600;margin-bottom:7px;}\n  .ovia-pd .opd-bond__t{font-size:1.2rem;font-weight:500;color:#2a2722;margin:0 0 11px;letter-spacing:-.01em;}\n  .ovia-pd .opd-bond p{font-size:.9rem;color:var(--body);line-height:1.6;margin:0;}\n\n  \/* finish swatch — believable brushed metal, themed by --ac (fully repeatable) *\/\n  .ovia-pd .opd-swatch{display:block;position:relative;height:172px;border-radius:9px;overflow:hidden;isolation:isolate;\n    box-shadow:0 6px 16px rgba(70,48,12,.28),inset 0 0 0 1px rgba(255,255,255,.12);\n    background:linear-gradient(90deg,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 0%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 16%,\n      var(--ac) 32%,\n      color-mix(in srgb,var(--ac) 52%,#fff) 50%,\n      var(--ac) 68%,\n      color-mix(in srgb,var(--ac) 62%,var(--shadow,#241803)) 84%,\n      color-mix(in srgb,var(--ac) 38%,var(--shadow,#241803)) 100%);}\n  .ovia-pd .opd-swatch::before{content:\"\";position:absolute;inset:0;z-index:1;mix-blend-mode:soft-light;opacity:.9;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='280' height='280'\u003e\u003cfilter id='b'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.82 0.012' numOctaves='3' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='280' height='280' filter='url(%23b)'\/\u003e\u003c\/svg\u003e\") 0 0\/280px 280px;}\n  .ovia-pd .opd-swatch::after{content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:soft-light;opacity:.42;\n    background:url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='360' height='360'\u003e\u003cfilter id='p'\u003e\u003cfeTurbulence type='fractalNoise' baseFrequency='0.13 0.012' numOctaves='2' stitchTiles='stitch'\/\u003e\u003cfeColorMatrix type='saturate' values='0'\/\u003e\u003c\/filter\u003e\u003crect width='360' height='360' filter='url(%23p)'\/\u003e\u003c\/svg\u003e\") 0 0\/360px 360px;}\n  \/* POLISHED (chrome) — mirror reflection, no brush grain *\/\n  .ovia-pd .opd-swatch.is-polished{background:linear-gradient(90deg,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 0%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 20%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 41%,\n    #fbfdff 50%,\n    color-mix(in srgb,var(--ac) 88%,#fff) 59%,\n    color-mix(in srgb,var(--ac) 64%,#0b0f13) 80%,\n    color-mix(in srgb,var(--ac) 34%,#0b0f13) 100%);}\n  .ovia-pd .opd-swatch.is-polished::before{display:none;}\n  .ovia-pd .opd-swatch.is-polished::after{opacity:.1;}\n  \/* MATTE (matte black) — flat, soft diffuse shading, no grain, no specular *\/\n  .ovia-pd .opd-swatch.is-matte{background:radial-gradient(135% 115% at 50% 24%,\n    color-mix(in srgb,var(--ac) 78%,#fff) 0%,\n    var(--ac) 44%,\n    color-mix(in srgb,var(--ac) 72%,#000) 100%);}\n  .ovia-pd .opd-swatch.is-matte::before{display:none;}\n  .ovia-pd .opd-swatch.is-matte::after{opacity:.14;}\n  .ovia-pd .opd-macroshot__cap{font-size:.68rem;letter-spacing:.04em;color:var(--label);margin-top:11px;}\n  .ovia-pd .opd-macroshot__cap b{color:#2a2722;font-weight:600;}\n\n  \/* --- COMPLIANCE marks + care --- *\/\n  .ovia-pd .opd-cert{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 30px;margin:34px 0 0;padding:20px 0;\n    border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .ovia-pd .opd-cert__i{display:flex;align-items:center;gap:10px;font-size:.78rem;color:var(--body);letter-spacing:.01em;}\n  .ovia-pd .opd-cert__i b{color:#2a2722;font-weight:600;}\n  .ovia-pd .opd-cert__i i{flex:0 0 auto;width:22px;height:22px;position:relative;}\n  .ovia-pd .opd-cert__i .ic-wm{border:1.5px solid var(--ac-deep);border-radius:6px;}\n  .ovia-pd .opd-cert__i .ic-wm::after{content:\"\";position:absolute;left:7px;top:4px;width:5px;height:9px;border:solid var(--ac-deep);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);}\n  .ovia-pd .opd-cert__i .ic-wels::after{content:\"★\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:19px;color:var(--ac-deep);}\n  .ovia-pd .opd-cert__i .ic-as{border:1.5px solid var(--ac-deep);border-radius:4px;}\n  .ovia-pd .opd-cert__i .ic-as::after{content:\"\";position:absolute;left:5px;right:5px;top:6px;height:1.5px;background:var(--ac-deep);box-shadow:0 4px 0 var(--ac-deep),0 8px 0 var(--ac-deep);}\n  \/* --- CARE card --- *\/\n  .ovia-pd .opd-care2{display:flex;gap:20px;align-items:center;border:1px solid var(--line);border-radius:14px;background:var(--cream);padding:22px 26px;}\n  .ovia-pd .opd-care2__icon{flex:0 0 46px;height:46px;border-radius:50%;position:relative;\n    background:color-mix(in srgb,var(--ac) 16%,#fff);border:1px solid color-mix(in srgb,var(--ac) 40%,var(--line));}\n  .ovia-pd .opd-care2__icon::before{content:\"\\2726\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n    font-size:19px;color:var(--ac-deep);line-height:1;}\n  .ovia-pd .opd-care2__lead{font-size:.98rem;font-weight:500;color:#2a2722;margin:0 0 11px;}\n  .ovia-pd .opd-care2__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}\n  .ovia-pd .opd-care2__list li{position:relative;padding-left:23px;font-size:.86rem;color:var(--body);line-height:1.4;}\n  .ovia-pd .opd-care2__list li::before{position:absolute;left:0;top:0;font-weight:700;font-size:.84rem;}\n  .ovia-pd .opd-care2__list .ok::before{content:\"\\2713\";color:var(--ac-deep);}\n  .ovia-pd .opd-care2__list .no::before{content:\"\\2715\";color:#c4b9a3;}\n\n  \/* responsive — premium additions *\/\n  @media (max-width:680px){\n    .ovia-pd .opd-bond{grid-template-columns:1fr;}\n    .ovia-pd .opd-cert{gap:12px 20px;}\n  }\n\u003c\/style\u003e\n\n\u003c!-- 1. BANNER --\u003e\n\u003cdiv class=\"opd-banner\"\u003e\n  \u003cdiv class=\"opd-bL\"\u003e\n    \u003cspan class=\"opd-logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n    \u003cdiv class=\"opd-kicker\"\u003eMilan Collection\u003c\/div\u003e\n    \u003ch2 class=\"opd-name\"\u003eHand Towel Holder\u003c\/h2\u003e\n    \u003cdiv class=\"opd-finish\"\u003e\n\u003cspan class=\"opd-finish__nm\"\u003e\u003c\/span\u003e · \u003cspan class=\"opd-finish__pr\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-manifesto\"\u003e“The \u003cem\u003elast\u003c\/em\u003e hand towel holder you’ll buy.”\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bR\"\u003e\n    \u003cdiv class=\"opd-figure\"\u003e\n      \u003cimg class=\"opd-prod ph--bg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedGold_Hero_A.png?v=1779884232\" alt=\"Ovia Milan Hand Towel Holder in Gun Metal\"\u003e\n      \u003cimg class=\"opd-prod ph--bn\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedNickelWarm_Hero_A.png?v=1779888997\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Champagne_Hero_A.png?v=1779884531\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--cr\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Chrome_Hero_A.png?v=1779884549\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--gm\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_GunMetal_Hero_A.png?v=1779884568\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cimg class=\"opd-prod ph--mb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_MatteBlack_Hero_A.png?v=1779884587\" alt=\"\" aria-hidden=\"true\"\u003e\n      \u003cspan class=\"opd-glint\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 2. OPENING --\u003e\n\u003cp class=\"opd-lead reveal\"\u003eA hand towel by the basin earns its keep — reached for a dozen times a day. The \u003cspan class=\"drop\"\u003eMilan\u003c\/span\u003e holder keeps it close, machined from DZR brass and finished in gun metal, multi-layer electroplated to stay hard-wearing and true for the life of the room, fixed dead-level on a concealed mount. Small, solid, and made to outlast the room.\u003c\/p\u003e\n\n\u003c!-- 3. SPEC STRIP --\u003e\n\u003cdiv class=\"opd-specs reveal\"\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eMaterial\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eDZR Brass\u003csmall\u003edezinc-resistant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eGun Metal\u003csmall\u003eElectroplated\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eLength\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e270 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eProjection\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e72 mm\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-spec\"\u003e\n\u003cdiv class=\"l\"\u003eWarranty\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003eLifetime\u003csmall\u003efinish incl.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 4. CRAFT --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eWhy it lasts\u003c\/div\u003e\n\u003cdiv class=\"opd-craft reveal\"\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eDZR brass, made to resist\u003c\/div\u003e\n\u003cp\u003eMachined from DZR (dezincification-resistant) brass — it won’t corrode, pit or weep at the wall the way ordinary fittings do in a wet, steamy bathroom.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eA finish guaranteed for life\u003c\/div\u003e\n\u003cp\u003eBuilt up over the brass in multiple plated layers, the gun metal resists tarnish, scratching and fade — and it’s backed, in full, by a lifetime finish warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"opd-c\"\u003e\n\u003cdiv class=\"n\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"t\"\u003eFixed firm to the wall\u003c\/div\u003e\n\u003cp\u003eMounted on concealed fixings that hold it dead-level and never work loose — solid and quiet against the wall for years.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: BENEATH THE SURFACE — the finish (two variants; rollout keeps the one matching the finish's process) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eBeneath the surface\u003c\/div\u003e\n\n\n\u003cdiv class=\"opd-bond reveal\"\u003e\n  \u003cdiv class=\"opd-bond__vis\"\u003e\n    \u003cdiv class=\"opd-swatch\" style=\"--ac:#94908A;--shadow:#0d0e0e\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"opd-macroshot__cap\"\u003e\n\u003cb\u003eGun Metal Electroplated\u003c\/b\u003e · layered and sealed over solid brass\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-bond__txt\"\u003e\n    \u003cdiv class=\"opd-eng__s\"\u003eThe finish\u003c\/div\u003e\n    \u003ch4 class=\"opd-bond__t\"\u003ePlated to last\u003c\/h4\u003e\n    \u003cp\u003eThe gun metal is built up over the solid-brass body in successive electroplated layers, then sealed against tarnish and everyday wear — the same proven process trusted on quality tapware for generations. Hard-wearing and true to tone, and backed, like every Milan finish, for a full 15 years.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\u003c!-- NEW: STYLED CONTEXT STRIP (FEATURE 2 — repurposed: gallery renders are styled scenes) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eIn the setting\u003c\/div\u003e\n\u003cdiv class=\"opd-macro reveal\"\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_GunMetal_A_b1a29026-233d-4934-9b8e-7ad76b961aae.png?v=1779892498\" alt=\"Milan accessory in DZR brass\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eWet-room ready\u003c\/b\u003eDZR brass that won’t weep at the wall.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_GunMetal_B_bd36156b-83e2-4f86-8ec8-432d424be75a.png?v=1779892498\" alt=\"Milan accessory mounting\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eFixed firm\u003c\/b\u003eConcealed mounts, dead level.\u003c\/figcaption\u003e\u003c\/figure\u003e\n  \u003cfigure\u003e\u003cspan class=\"frame\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_GunMetal_C_9af882b2-18fd-4e2f-9a26-84aa44439837.png?v=1779892498\" alt=\"Milan accessory gun metal\"\u003e\u003c\/span\u003e\u003cfigcaption\u003e\u003cb\u003eIn the setting\u003c\/b\u003eGun metal grounds a light palette.\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 5. FINISH FAMILY — interactive (FEATURE 1) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eOne silhouette, six finishes \u003cspan class=\"opd-hint\"\u003e\u003cspan class=\"hint-hover\"\u003ehover to preview\u003c\/span\u003e\u003cspan class=\"hint-hold\"\u003ehold to preview\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"opd-finishes\"\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bg\" style=\"--c:#C5A253;--ac:#C5A253\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedGold_A_66886b60-06c8-45fa-81fc-381005af3c93.png?v=1779892494\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedGold_Hero_A.png?v=1779884232\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Gold\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--bn\" style=\"--c:#CFC4B0;--ac:#CFC4B0\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedNickelWarm_A_c8e2ae7b-e1da-4fbb-8889-c5a9a1a96291.png?v=1779892495\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_BrushedNickelWarm_Hero_A.png?v=1779888997\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eBrushed Nickel\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cm\" style=\"--c:#DDB3AE;--ac:#DDB3AE\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Champagne_A_491654c5-ed33-4346-a23d-e5e0bda1c5a7.png?v=1779892496\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChampagne\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Champagne_Hero_A.png?v=1779884531\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChampagne\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--cr\" style=\"--c:#C8D2DA;--ac:#C8D2DA\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Chrome_A_f1fc9fab-2ab7-4c91-852b-2b46f05bde6b.png?v=1779892497\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eChrome\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_Chrome_Hero_A.png?v=1779884549\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eChrome\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--gm is-current\" style=\"--c:#9C958C;--ac:#9C958C\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_GunMetal_A_b1a29026-233d-4934-9b8e-7ad76b961aae.png?v=1779892498\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eGun Metal\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_GunMetal_Hero_A.png?v=1779884568\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eGun Metal\u003c\/span\u003e\u003c\/button\u003e\n  \u003cbutton type=\"button\" class=\"opd-fin opd-fin--mb\" style=\"--c:#1a1a1a;--ac:#1a1a1a\"\u003e\u003cspan class=\"opv\" aria-hidden=\"true\"\u003e\u003cspan class=\"opv__frame\"\u003e\u003cspan class=\"opv__inner\"\u003e\u003cimg class=\"opv__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_MatteBlack_A_3337be9c-c02a-41f8-9c32-b8e79afc317f.png?v=1779892498\u0026amp;width=800\" alt=\"\"\u003e\u003cspan class=\"opv__cap\"\u003e\u003cspan class=\"opv__dot\"\u003e\u003c\/span\u003e\u003cspan class=\"opv__nm\"\u003eMatte Black\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opv__tip\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_MatteBlack_Hero_A.png?v=1779884587\u0026amp;width=600\" alt=\"\"\u003e\u003c\/span\u003e\u003cspan class=\"opd-fin__name\"\u003eMatte Black\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003c!-- NEW: DIMENSIONS — render + spec table (FEATURE 5) --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eDimensions \u0026amp; specification\u003c\/div\u003e\n\u003cdiv class=\"opd-dims reveal\"\u003e\n  \u003cdiv class=\"opd-dims__draw\"\u003e\n    \u003cimg class=\"opd-dims__img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_GunMetal_Hero_B.png?v=1779884575\u0026amp;width=1400\" alt=\"\" aria-hidden=\"true\"\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"opd-dims__table\"\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eLength\u003c\/span\u003e\u003cspan class=\"v\"\u003e270 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eProjection\u003c\/span\u003e\u003cspan class=\"v\"\u003e72 mm\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"opd-dims__row\"\u003e\n\u003cspan class=\"k\"\u003eRail length\u003c\/span\u003e\u003cspan class=\"v\"\u003e236 mm\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- 6. ASSURANCE — original lifetime-warranty badge --\u003e\n\u003cdiv class=\"opd-warranty reveal\"\u003e\n  \u003cdiv class=\"badge\"\u003e\n\u003cspan class=\"big\"\u003e∞\u003c\/span\u003e\u003cspan class=\"sm\"\u003eLifetime\u003cbr\u003eWarranty\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"body\"\u003e\n\u003cb\u003eBuilt to be the last one you buy.\u003c\/b\u003e Every Milan accessory carries a 1-year parts \u0026amp; labour warranty, backed by a \u003cb\u003elifetime replacement warranty that includes the finish itself\u003c\/b\u003e — the gun metal is guaranteed not to wear away.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CARE — sits directly under the warranty --\u003e\n\u003cdiv class=\"opd-h reveal\"\u003eCaring for it\u003c\/div\u003e\n\u003cdiv class=\"opd-care2 reveal\"\u003e\n  \u003cspan class=\"opd-care2__icon\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"opd-care2__body\"\u003e\n    \u003cp class=\"opd-care2__lead\"\u003eBuilt to last, it asks almost nothing of you.\u003c\/p\u003e\n    \u003cul class=\"opd-care2__list\"\u003e\n      \u003cli class=\"ok\"\u003eA soft, damp cloth is all it needs\u003c\/li\u003e\n      \u003cli class=\"no\"\u003eNo abrasive pads, acidic or solvent cleaners\u003c\/li\u003e\n      \u003cli class=\"ok\"\u003eNo polishes or coatings — the finish does the work\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"opd-reg reveal\"\u003eDZR brass · lifetime finish warranty  |  SKU MIL24GM\u003c\/div\u003e\n\n\u003c!-- 7. COLLECTION — dark bookend --\u003e\n\u003cdiv class=\"opd-coll reveal\"\u003e\n  \u003cspan class=\"opd-coll__logo\" role=\"img\" aria-label=\"Ovia\"\u003e\u003c\/span\u003e\n  \u003cdiv class=\"t\"\u003ePart of the \u003cb\u003eMilan\u003c\/b\u003e collection\u003c\/div\u003e\n  \u003cp\u003eThe Milan range runs the full bathroom — basin and wall mixers, a 2-in-1 shower, kitchen mixers, towel rails and accessories — every piece in the same gun metal finish, so nothing in the room is left to chance.\u003c\/p\u003e\n  \u003cdiv class=\"opd-coll__rule\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n","brand":"Ovia","offers":[{"title":"Default Title","offer_id":47338120118421,"sku":"MIL24GM","price":85.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0701\/6261\/2373\/files\/Ovia_GuestTowelRail_GunMetal_A_b1a29026-233d-4934-9b8e-7ad76b961aae.png?v=1779892498"}],"url":"https:\/\/www.bathroomsalesdirect.com.au\/collections\/ovia-bathroom-accessories.oembed?page=4","provider":"Bathroom Sales Direct","version":"1.0","type":"link"}