{"product_id":"zoe-tall-coffee-machine","title":"Zoe Tall Coffee Machine","description":"\u003c!-- Zoe Tall Coffee Machine — UCC Coffee Direct --\u003e\n\u003cdiv class=\"prod\"\u003e\n  \u003cp class=\"prod__lede\" style=\"margin:0;\"\u003eBuilt tall. Built to perform.\u003c\/p\u003e\n  \u003cp style=\"margin:0;\"\u003e\n    The Sanremo Zoe Tall delivers dependable espresso performance with the\n    flexibility to serve taller cups and mugs. Built for consistency,\n    reliability and everyday ease, it helps keep service smooth and coffee\n    quality high. A practical, hardworking machine designed for busy\n    operators.\n  \u003c\/p\u003e\n  \u003cp style=\"margin:0;\"\u003e\n    Sanremo grinders are also available to complement the machine range.\n  \u003c\/p\u003e\n\n  \u003cdiv class=\"acc\" data-acc\u003e\n\n    \u003c!-- ---------------------------------------------------------------- --\u003e\n    \u003cdiv class=\"acc__item\" data-acc-item\u003e\n      \u003ch2 class=\"acc__heading\"\u003e\n        \u003cbutton type=\"button\" class=\"acc__trigger\" data-acc-trigger id=\"acc-t-zoe-tall-features\" aria-controls=\"acc-p-zoe-tall-features\" aria-expanded=\"false\"\u003e\n          \u003cspan class=\"acc__label\"\u003eKey Features\u003c\/span\u003e\n          \u003csvg class=\"acc__icon\" viewbox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"\u003e\n            \u003cpath d=\"M4 8 L12 16 L20 8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003c\/path\u003e\n          \u003c\/svg\u003e\n        \u003c\/button\u003e\n      \u003c\/h2\u003e\n      \u003cdiv class=\"acc__panel\" data-acc-panel id=\"acc-p-zoe-tall-features\" aria-labelledby=\"acc-t-zoe-tall-features\"\u003e\n        \u003cdiv class=\"acc__inner\"\u003e\n          \u003cul class=\"prod__list\"\u003e\n            \u003cli\u003eUp to 200 cups per day\u003c\/li\u003e\n            \u003cli\u003eDurable \u0026amp; modular design\u003c\/li\u003e\n            \u003cli\u003eCopper boiler system\u003c\/li\u003e\n            \u003cli\u003eShot timer\u003c\/li\u003e\n            \u003cli\u003ePre-infusion\u003c\/li\u003e\n            \u003cli\u003eLED spotlights\u003c\/li\u003e\n          \u003c\/ul\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003c!-- ---------------------------------------------------------------- --\u003e\n    \u003cdiv class=\"acc__item\" data-acc-item\u003e\n      \u003ch2 class=\"acc__heading\"\u003e\n        \u003cbutton type=\"button\" class=\"acc__trigger\" data-acc-trigger id=\"acc-t-zoe-tall-specs\" aria-controls=\"acc-p-zoe-tall-specs\" aria-expanded=\"false\"\u003e\n          \u003cspan class=\"acc__label\"\u003eSpecifications\u003c\/span\u003e\n          \u003csvg class=\"acc__icon\" viewbox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"\u003e\n            \u003cpath d=\"M4 8 L12 16 L20 8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003c\/path\u003e\n          \u003c\/svg\u003e\n        \u003c\/button\u003e\n      \u003c\/h2\u003e\n      \u003cdiv class=\"acc__panel\" data-acc-panel id=\"acc-p-zoe-tall-specs\" aria-labelledby=\"acc-t-zoe-tall-specs\"\u003e\n        \u003cdiv class=\"acc__inner\" style=\"padding-left:0;padding-right:0;\"\u003e\n          \u003cdl class=\"prod__specs\"\u003e\n            \u003cdiv class=\"prod__spec\"\u003e\n              \u003cdt\u003eCapacity\u003c\/dt\u003e\n              \u003cdd\u003eUp to 200 cups per day\u003c\/dd\u003e\n            \u003c\/div\u003e\n            \u003cdiv class=\"prod__spec\"\u003e\n              \u003cdt\u003eDimensions\u003c\/dt\u003e\n              \u003cdd\u003eApprox. 720mm (W) x 524mm (D) x 570mm (H)\u003c\/dd\u003e\n            \u003c\/div\u003e\n            \u003cdiv class=\"prod__spec\"\u003e\n              \u003cdt\u003eWater Supply\u003c\/dt\u003e\n              \u003cdd\u003eMains feed water connection (cold-water)\u003c\/dd\u003e\n            \u003c\/div\u003e\n            \u003cdiv class=\"prod__spec\"\u003e\n              \u003cdt\u003eBoiler Capacity\u003c\/dt\u003e\n              \u003cdd\u003e7 Litre\u003c\/dd\u003e\n            \u003c\/div\u003e\n            \u003cdiv class=\"prod__spec\"\u003e\n              \u003cdt\u003eWeight\u003c\/dt\u003e\n              \u003cdd\u003e61kg\u003c\/dd\u003e\n            \u003c\/div\u003e\n            \u003cdiv class=\"prod__spec\"\u003e\n              \u003cdt\u003ePower\u003c\/dt\u003e\n              \u003cdd\u003e13A power supply\u003c\/dd\u003e\n            \u003c\/div\u003e\n            \u003cdiv class=\"prod__spec\"\u003e\n              \u003cdt\u003eHopper Capacity\u003c\/dt\u003e\n              \u003cdd\u003eN\/A (external grinder required)\u003c\/dd\u003e\n            \u003c\/div\u003e\n          \u003c\/dl\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003c!-- ---------------------------------------------------------------- --\u003e\n    \u003cdiv class=\"acc__item\" data-acc-item\u003e\n      \u003ch2 class=\"acc__heading\"\u003e\n        \u003cbutton type=\"button\" class=\"acc__trigger\" data-acc-trigger id=\"acc-t-zoe-tall-faqs\" aria-controls=\"acc-p-zoe-tall-faqs\" aria-expanded=\"false\"\u003e\n          \u003cspan class=\"acc__label\"\u003eFrequently Asked Questions\u003c\/span\u003e\n          \u003csvg class=\"acc__icon\" viewbox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"\u003e\n            \u003cpath d=\"M4 8 L12 16 L20 8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003c\/path\u003e\n          \u003c\/svg\u003e\n        \u003c\/button\u003e\n      \u003c\/h2\u003e\n      \u003cdiv class=\"acc__panel\" data-acc-panel id=\"acc-p-zoe-tall-faqs\" aria-labelledby=\"acc-t-zoe-tall-faqs\"\u003e\n        \u003cdiv class=\"acc__inner\" style=\"padding-left:0;padding-right:0;\"\u003e\n\n          \u003c!-- Nested group. Its items are wired independently of the outer one. --\u003e\n          \u003cdiv class=\"acc acc--nested\" data-acc\u003e\n\n            \u003cdiv class=\"acc__item\" data-acc-item\u003e\n              \u003ch3 class=\"acc__heading\"\u003e\n                \u003cbutton type=\"button\" class=\"acc__trigger\" data-acc-trigger aria-expanded=\"false\"\u003e\n                  \u003cspan class=\"acc__label\"\u003eHow many coffees per day can the ZOE comfortably make per day?\u003c\/span\u003e\n                  \u003csvg class=\"acc__icon\" viewbox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"\u003e\n                    \u003cpath d=\"M4 8 L12 16 L20 8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003c\/path\u003e\n                  \u003c\/svg\u003e\n                \u003c\/button\u003e\n              \u003c\/h3\u003e\n              \u003cdiv class=\"acc__panel\" data-acc-panel\u003e\n                \u003cdiv class=\"acc__inner\"\u003e\n                  \u003cp\u003e\n                    Between 100 - 300 depending on 2 or 3 group spec and grinder\n                    setup\n                  \u003c\/p\u003e\n                \u003c\/div\u003e\n              \u003c\/div\u003e\n            \u003c\/div\u003e\n\n            \u003cdiv class=\"acc__item\" data-acc-item\u003e\n              \u003ch3 class=\"acc__heading\"\u003e\n                \u003cbutton type=\"button\" class=\"acc__trigger\" data-acc-trigger aria-expanded=\"false\"\u003e\n                  \u003cspan class=\"acc__label\"\u003eWhat size electrical connection is required to power the ZOE?\u003c\/span\u003e\n                  \u003csvg class=\"acc__icon\" viewbox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"\u003e\n                    \u003cpath d=\"M4 8 L12 16 L20 8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003c\/path\u003e\n                  \u003c\/svg\u003e\n                \u003c\/button\u003e\n              \u003c\/h3\u003e\n              \u003cdiv class=\"acc__panel\" data-acc-panel\u003e\n                \u003cdiv class=\"acc__inner\"\u003e\n                  \u003cp\u003e\n                    All of our ZOE models are specially configured for a standard\n                    13amp socket\n                  \u003c\/p\u003e\n                \u003c\/div\u003e\n              \u003c\/div\u003e\n            \u003c\/div\u003e\n\n            \u003cdiv class=\"acc__item\" data-acc-item\u003e\n              \u003ch3 class=\"acc__heading\"\u003e\n                \u003cbutton type=\"button\" class=\"acc__trigger\" data-acc-trigger aria-expanded=\"false\"\u003e\n                  \u003cspan class=\"acc__label\"\u003eCan the ZOE have the Sanremo autosteam system fitted?\u003c\/span\u003e\n                  \u003csvg class=\"acc__icon\" viewbox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"\u003e\n                    \u003cpath d=\"M4 8 L12 16 L20 8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003c\/path\u003e\n                  \u003c\/svg\u003e\n                \u003c\/button\u003e\n              \u003c\/h3\u003e\n              \u003cdiv class=\"acc__panel\" data-acc-panel\u003e\n                \u003cdiv class=\"acc__inner\"\u003e\n                  \u003cp\u003e\n                    Yes, there is an autosteam model available\n                  \u003c\/p\u003e\n                \u003c\/div\u003e\n              \u003c\/div\u003e\n            \u003c\/div\u003e\n\n            \u003cdiv class=\"acc__item\" data-acc-item\u003e\n              \u003ch3 class=\"acc__heading\"\u003e\n                \u003cbutton type=\"button\" class=\"acc__trigger\" data-acc-trigger aria-expanded=\"false\"\u003e\n                  \u003cspan class=\"acc__label\"\u003eCan I lease the machine?\u003c\/span\u003e\n                  \u003csvg class=\"acc__icon\" viewbox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"\u003e\n                    \u003cpath d=\"M4 8 L12 16 L20 8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003c\/path\u003e\n                  \u003c\/svg\u003e\n                \u003c\/button\u003e\n              \u003c\/h3\u003e\n              \u003cdiv class=\"acc__panel\" data-acc-panel\u003e\n                \u003cdiv class=\"acc__inner\"\u003e\n                  \u003cp\u003e\n                    Yes, contact us for more information on finance options\n                  \u003c\/p\u003e\n                \u003c\/div\u003e\n              \u003c\/div\u003e\n            \u003c\/div\u003e\n\n            \u003cdiv class=\"acc__item\" data-acc-item\u003e\n              \u003ch3 class=\"acc__heading\"\u003e\n                \u003cbutton type=\"button\" class=\"acc__trigger\" data-acc-trigger aria-expanded=\"false\"\u003e\n                  \u003cspan class=\"acc__label\"\u003eIs the machine available in different colours?\u003c\/span\u003e\n                  \u003csvg class=\"acc__icon\" viewbox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"\u003e\n                    \u003cpath d=\"M4 8 L12 16 L20 8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003c\/path\u003e\n                  \u003c\/svg\u003e\n                \u003c\/button\u003e\n              \u003c\/h3\u003e\n              \u003cdiv class=\"acc__panel\" data-acc-panel\u003e\n                \u003cdiv class=\"acc__inner\"\u003e\n                  \u003cp\u003e\n                    Yes, however, some colour options have an extended lead time,\n                    contact us for more information\n                  \u003c\/p\u003e\n                \u003c\/div\u003e\n              \u003c\/div\u003e\n            \u003c\/div\u003e\n\n            \u003cdiv class=\"acc__item\" data-acc-item\u003e\n              \u003ch3 class=\"acc__heading\"\u003e\n                \u003cbutton type=\"button\" class=\"acc__trigger\" data-acc-trigger aria-expanded=\"false\"\u003e\n                  \u003cspan class=\"acc__label\"\u003eDoes the machine have a warranty?\u003c\/span\u003e\n                  \u003csvg class=\"acc__icon\" viewbox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"\u003e\n                    \u003cpath d=\"M4 8 L12 16 L20 8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003c\/path\u003e\n                  \u003c\/svg\u003e\n                \u003c\/button\u003e\n              \u003c\/h3\u003e\n              \u003cdiv class=\"acc__panel\" data-acc-panel\u003e\n                \u003cdiv class=\"acc__inner\"\u003e\n                  \u003cp\u003e\n                    Yes, all machines are supplied with a fully inclusive 12 month\n                    warranty\n                  \u003c\/p\u003e\n                \u003c\/div\u003e\n              \u003c\/div\u003e\n            \u003c\/div\u003e\n\n            \u003cdiv class=\"acc__item\" data-acc-item\u003e\n              \u003ch3 class=\"acc__heading\"\u003e\n                \u003cbutton type=\"button\" class=\"acc__trigger\" data-acc-trigger aria-expanded=\"false\"\u003e\n                  \u003cspan class=\"acc__label\"\u003eDo I need a water filter with my machine?\u003c\/span\u003e\n                  \u003csvg class=\"acc__icon\" viewbox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"\u003e\n                    \u003cpath d=\"M4 8 L12 16 L20 8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003c\/path\u003e\n                  \u003c\/svg\u003e\n                \u003c\/button\u003e\n              \u003c\/h3\u003e\n              \u003cdiv class=\"acc__panel\" data-acc-panel\u003e\n                \u003cdiv class=\"acc__inner\"\u003e\n                  \u003cp\u003e\n                    Yes, we recommend all machines are supplied with BRITA water\n                    filtration an the warranty is dependent on this.\n                  \u003c\/p\u003e\n                \u003c\/div\u003e\n              \u003c\/div\u003e\n            \u003c\/div\u003e\n\n          \u003c\/div\u003e\n\u003c!-- \/.acc--nested --\u003e\n\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n  \u003c\/div\u003e\n\u003c!-- \/.acc --\u003e\n\u003c\/div\u003e\u003c!-- \/.prod --\u003e\n\u003cstyle\u003e\n  .prod {\n    --prod-accent: #BA2F1E;\n    --prod-accent-dark: #952616;\n    --prod-ink: #1F2A30;\n    --prod-muted: #6B6F81;\n    --prod-line: #E3E5EA;\n    --prod-panel: #F7F8FA;\n    --prod-radius: 3px;\n    --acc-speed: 0.28s;\n\n    max-width: 820px;\n    margin: 0 auto;\n    color: var(--prod-ink);\n    line-height: 1.6;\n  }\n\n  .prod p { margin: 0 0 1em; }\n\n  .prod__lede {\n    font-size: 1.25em;\n    font-weight: 700;\n    letter-spacing: 0.01em;\n    color: var(--prod-accent);\n  }\n\n  \/* ==========================================================================\n     ACCORDION\n     ========================================================================== *\/\n  \/* Base is deliberately unstyled. Borders and fills belong to the level\n     rules further down, because the two levels look nothing like each other. *\/\n  .acc { margin: 0.75em 0 0; }\n\n  \/* The heading carries no visual weight of its own — it exists so the\n     structure survives being read as a document outline. *\/\n  .acc__heading {\n    margin: 0;\n    padding: 0;\n    font: inherit;\n  }\n\n  .acc__trigger {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 1em;\n    width: 100%;\n    margin: 0;\n    padding: 0.95em 0.25em;\n    font: inherit;\n    font-weight: 700;\n    text-align: left;\n    color: inherit;\n    background: none;\n    border: 0;\n    border-radius: var(--prod-radius);\n    cursor: pointer;\n    transition: color 0.15s ease;\n  }\n  .acc__trigger:hover { color: var(--prod-accent); }\n  .acc__trigger:focus-visible {\n    outline: 2px solid var(--prod-accent);\n    outline-offset: 2px;\n  }\n\n  .acc__icon {\n    flex: 0 0 auto;\n    width: 1.1em;\n    height: 1.1em;\n    color: var(--prod-accent);\n    transition: transform var(--acc-speed) ease;\n  }\n  .acc__item.is-open \u003e .acc__heading \u003e .acc__trigger \u003e .acc__icon {\n    transform: rotate(180deg);\n  }\n\n  \/* ==========================================================================\n     PANEL\n     0fr -\u003e 1fr animates to the content's natural height without measuring it\n     in JS, and keeps working when one accordion is nested inside another.\n     ========================================================================== *\/\n  .acc__inner { min-height: 0; margin:0 10px 0 20px; }\n  \/* Bottom breathing room has to come from a margin INSIDE the animated box.\n     Padding on .acc__inner would survive the row collapsing to 0fr and leave\n     a stripe of dead space under every closed panel. *\/\n  .acc__inner \u003e :last-child { margin-bottom: 1.1em; }\n\n  \/* Everything below is gated on the script having run — it sets\n     data-acc-ready on each group it wires up. With JS off the panels are\n     plain open blocks, fully readable and fully indexable. *\/\n  [data-acc-ready] .acc__panel {\n    display: grid;\n    grid-template-rows: 0fr;\n    transition: grid-template-rows var(--acc-speed) ease;\n  }\n  [data-acc-ready] .acc__inner {\n    overflow: hidden;\n    \/* Keeps collapsed content out of the tab order and the a11y tree without\n       display:none, which would kill the height transition. *\/\n    visibility: hidden;\n    transition: visibility 0s linear var(--acc-speed);\n  }\n  [data-acc-ready] .acc__item.is-open \u003e .acc__panel {\n    grid-template-rows: 1fr;\n  }\n  [data-acc-ready] .acc__item.is-open \u003e .acc__panel \u003e .acc__inner {\n    visibility: visible;\n    transition-delay: 0s;\n  }\n\n  @media (prefers-reduced-motion: reduce) {\n    .prod { --acc-speed: 0s; }\n    .acc__icon { transition: none; }\n  }\n\n  \/* ==========================================================================\n     LEVEL 1 — PRIMARY BARS\n     Solid accent fill, white text. One accordion nested inside another needs\n     the two levels to be obviously different, not a subtle shade apart, or a\n     reader loses track of which panel a click will collapse.\n\n     Everything is matched on the DIRECT child chain from a group that isn't\n     .acc--nested, so these rules can never leak down into the FAQ list —\n     .acc__trigger on its own would hit both levels.\n     ========================================================================== *\/\n  .acc:not(.acc--nested) \u003e .acc__item { margin-bottom: 0.4em; }\n  .acc:not(.acc--nested) \u003e .acc__item:last-child { margin-bottom: 0; }\n\n  .acc:not(.acc--nested) \u003e .acc__item \u003e .acc__heading \u003e .acc__trigger {\n    padding: 0.9em 1.1em;\n    color: #fff;\n    background: var(--prod-accent);\n    border-radius: var(--prod-radius);\n    transition: background 0.15s ease;\n  }\n  .acc:not(.acc--nested) \u003e .acc__item \u003e .acc__heading \u003e .acc__trigger:hover {\n    color: #fff;\n    background: var(--prod-accent-dark);\n  }\n  .acc:not(.acc--nested) \u003e .acc__item \u003e .acc__heading \u003e .acc__trigger .acc__icon {\n    color: #fff;\n  }\n  \/* Square off the bottom corners so an open bar reads as joined to its panel. *\/\n  .acc:not(.acc--nested) \u003e .acc__item.is-open \u003e .acc__heading \u003e .acc__trigger {\n    background: var(--prod-accent-dark);\n    border-radius: var(--prod-radius) var(--prod-radius) 0 0;\n  }\n  \/* A red outline is invisible on a red fill. *\/\n  .acc:not(.acc--nested) \u003e .acc__item \u003e .acc__heading \u003e .acc__trigger:focus-visible {\n    outline: 2px solid #fff;\n    outline-offset: -5px;\n  }\n\n  \/* Background is safe to set on a collapsed panel — it has no height, so\n     nothing shows. Vertical spacing is NOT: see the margin note above. *\/\n  .acc:not(.acc--nested) \u003e .acc__item \u003e .acc__panel {\n    background: var(--prod-panel);\n    border-radius: 0 0 var(--prod-radius) var(--prod-radius);\n  }\n  .acc:not(.acc--nested) \u003e .acc__item \u003e .acc__panel \u003e .acc__inner {\n    padding-inline: 1.1em;\n  }\n  .acc:not(.acc--nested) \u003e .acc__item \u003e .acc__panel \u003e .acc__inner \u003e :first-child {\n    margin-top: 1.1em;\n  }\n\n  \/* ==========================================================================\n     LEVEL 2 — NESTED FAQ LIST\n     Sits inside a panel that already provides the gutter, so these run flush\n     to its edges and stay on the page background.\n     ========================================================================== *\/\n  .acc--nested { margin: 0; }\n  .acc--nested \u003e .acc__item { border-bottom: 1px solid var(--prod-line); }\n  .acc--nested \u003e .acc__item:last-child { border-bottom: 0; }\n  .acc--nested \u003e .acc__item \u003e .acc__heading \u003e .acc__trigger {\n    padding: 0.75em 0;\n    font-size: 0.95em;\n    font-weight: 600;\n  }\n\n  \/* ==========================================================================\n     CONTENT\n     ========================================================================== *\/\n  .prod__list {\n    margin: 0;\n    padding: 0;\n    list-style: none;\n  }\n  .prod__list li {\n    position: relative;\n    padding-left: 1.25em!important;\n    margin-bottom: 0.35em;\n  }\n  .prod__list li::before {\n    content: \"\";\n    position: absolute;\n    top: 0.62em;\n    left: 0.15em;\n    width: 0.45em;\n    height: 0.45em;\n    background: var(--prod-accent);\n    transform: rotate(45deg);\n  }\n\n  .prod__specs { margin: 0; }\n  .prod__spec {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 0 1em;\n    padding: 0.55em 0;\n    border-bottom: 1px dotted var(--prod-line);\n  }\n  .prod__spec:last-child { border-bottom: 0; }\n  .prod__spec dt {\n    flex: 0 0 14em;\n    max-width: 100%;\n    font-weight: 600;\n    color: var(--prod-muted);\n  }\n  .prod__spec dd { margin: 0; }\n\n  @media (max-width: 480px) {\n    .prod__spec dt { flex-basis: 100%; }\n  }\n\u003c\/style\u003e\n\n\u003cscript\u003e\n  (function () {\n    'use strict';\n\n    var GROUP = '[data-acc]';\n    var ITEM = '[data-acc-item]';\n    var uid = 0;\n\n    \/* A nested group's items also match a querySelectorAll from the outer\n       group. Ownership is decided by walking back up: an element belongs to\n       the nearest group above it, and nothing else. *\/\n    function ownedBy(scope, selector, marker) {\n      return Array.prototype.filter.call(\n        scope.querySelectorAll(selector),\n        function (el) { return el.closest(marker) === scope; }\n      );\n    }\n\n    function firstOwned(item, selector) {\n      var matches = item.querySelectorAll(selector);\n      for (var i = 0; i \u003c matches.length; i++) {\n        if (matches[i].closest(ITEM) === item) return matches[i];\n      }\n      return null;\n    }\n\n    function setOpen(item, open) {\n      var trigger = firstOwned(item, '[data-acc-trigger]');\n      if (!trigger) return;\n      item.classList.toggle('is-open', open);\n      trigger.setAttribute('aria-expanded', open ? 'true' : 'false');\n\n      \/* Closing a panel closes whatever is open inside it. An open nested item\n         sets visibility:visible on itself, which overrides the hidden it\n         inherits from the collapsed ancestor — so it would stay in the tab\n         order and the a11y tree while clipped to zero height and invisible. *\/\n      if (!open) {\n        Array.prototype.forEach.call(\n          item.querySelectorAll(ITEM + '.is-open'),\n          function (nested) { setOpen(nested, false); }\n        );\n      }\n    }\n\n    function initGroup(group) {\n      if (group.dataset.accReady === 'true') return;\n      group.dataset.accReady = 'true';\n\n      var single = group.hasAttribute('data-acc-single');\n      var items = ownedBy(group, ITEM, GROUP);\n      var triggers = [];\n\n      items.forEach(function (item) {\n        var trigger = firstOwned(item, '[data-acc-trigger]');\n        var panel = firstOwned(item, '[data-acc-panel]');\n        if (!trigger || !panel) return;\n\n        \/\/ Wire up aria-controls \/ aria-labelledby for any pair authored\n        \/\/ without ids, so the component drops into new markup as-is.\n        uid++;\n        if (!panel.id) panel.id = 'acc-panel-' + uid;\n        if (!trigger.id) trigger.id = 'acc-trigger-' + uid;\n        trigger.setAttribute('aria-controls', panel.id);\n        if (!panel.hasAttribute('aria-labelledby')) {\n          panel.setAttribute('aria-labelledby', trigger.id);\n        }\n\n        setOpen(item, item.hasAttribute('data-acc-open'));\n        triggers.push(trigger);\n\n        trigger.addEventListener('click', function () {\n          var willOpen = !item.classList.contains('is-open');\n          if (willOpen \u0026\u0026 single) {\n            items.forEach(function (other) {\n              if (other !== item) setOpen(other, false);\n            });\n          }\n          setOpen(item, willOpen);\n        });\n      });\n\n      \/* Arrow keys move between headers in this group only — Enter and Space\n         are already handled for us by using real \u003cbutton\u003e elements. *\/\n      group.addEventListener('keydown', function (e) {\n        var index = triggers.indexOf(e.target);\n        if (index === -1) return;\n\n        var next;\n        if (e.key === 'ArrowDown') next = (index + 1) % triggers.length;\n        else if (e.key === 'ArrowUp') next = (index - 1 + triggers.length) % triggers.length;\n        else if (e.key === 'Home') next = 0;\n        else if (e.key === 'End') next = triggers.length - 1;\n        else return;\n\n        e.preventDefault();\n        triggers[next].focus();\n      });\n    }\n\n    function init(scope) {\n      Array.prototype.forEach.call((scope || document).querySelectorAll(GROUP), initGroup);\n    }\n\n    if (document.readyState === 'loading') {\n      document.addEventListener('DOMContentLoaded', function () { init(); });\n    } else {\n      init();\n    }\n\n    \/\/ Shopify theme editor: re-run after a section is re-rendered.\n    document.addEventListener('shopify:section:load', function (e) {\n      init(e.target);\n    });\n  })();\n\u003c\/script\u003e\n\u003cbr\u003e\u003cbr\u003e","brand":"UCC Coffee Direct","offers":[{"title":"Default Title","offer_id":56930191704450,"sku":null,"price":2999.99,"currency_code":"GBP","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0610\/5304\/2933\/files\/ZOE-2GR-Black-e1765551198648.png?v=1790067060","url":"https:\/\/www.ucc-coffee-direct.co.uk\/products\/zoe-tall-coffee-machine","provider":"UCC Coffee Direct","version":"1.0","type":"link"}