{"title":"The SOEB Collection","description":"\u003c!-- ============================================================\n     SOEB COLLECTION PAGE — FULL UPDATED CODE (v3)\n     Paste this entire block via the \u003c\/\u003e Custom HTML editor.\n\n     BEFORE PUBLISHING — fill in your variant IDs:\n     Go to Shopify Admin → Products → [Product] → click a variant\n     → the URL ends in \/variants\/XXXXXXXXXX — that's the ID.\n     Replace each VARIANT_ID_XXXX placeholder below in the \u003cscript\u003e.\n     ============================================================ --\u003e\n\n\u003cscript\u003e\n  (function(){\n    var l=document.createElement('link');\n    l.rel='stylesheet';\n    l.href='https:\/\/fonts.googleapis.com\/css2?family=Archivo+Black\u0026display=swap';\n    document.head.appendChild(l);\n  })();\n\u003c\/script\u003e\n\n\u003cstyle\u003e\n  \/* ── SOEB Collection Page ── *\/\n  .soeb-col {\n    font-family: Georgia, 'Times New Roman', serif;\n    color: #3b2e26;\n    background: #fff9eb;\n    max-width: 860px;\n    margin: 0 auto;\n    padding: 0 20px 60px;\n  }\n\n  \/* Intro banner *\/\n  .soeb-col__banner {\n    background: #edc3ae;\n    border: 2px solid #3b2e26;\n    padding: 28px 24px;\n    text-align: center;\n    margin-bottom: 32px;\n  }\n  .soeb-col__banner-text {\n    font-family: 'Archivo Black', sans-serif;\n    font-size: clamp(20px, 4vw, 28px);\n    font-weight: 400;\n    text-transform: uppercase;\n    letter-spacing: 0.04em;\n    color: #3b2e26;\n    margin: 0 0 8px;\n    line-height: 1.15;\n  }\n  .soeb-col__banner-sub {\n    font-size: 14px;\n    line-height: 1.6;\n    color: #3b2e26;\n    opacity: 0.75;\n    margin: 0;\n  }\n\n  .soeb-col__intro {\n    font-size: 15px;\n    line-height: 1.7;\n    color: #5c4a40;\n    max-width: 600px;\n    margin: 0 auto;\n  }\n\n  \/* Product cards *\/\n  .soeb-col__cards {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n    gap: 20px;\n    margin-bottom: 52px;\n  }\n\n  \/* ── CLICKABLE CARD STYLES ── *\/\n  .soeb-col__card {\n    border: 1px solid #3b2e26;\n    background: #fff9eb;\n    padding: 24px;\n    position: relative;\n    cursor: pointer;\n    transition: background 0.18s ease, transform 0.15s ease, box-shadow 0.15s ease;\n    -webkit-tap-highlight-color: transparent;\n    text-decoration: none;\n    display: block;\n  }\n  .soeb-col__card:hover,\n  .soeb-col__card:focus-visible {\n    background: #fdf2dc;\n    transform: translateY(-3px);\n    box-shadow: 0 6px 20px rgba(59,46,38,0.12);\n    outline: none;\n  }\n  .soeb-col__card:active {\n    transform: translateY(0);\n    box-shadow: none;\n  }\n  .soeb-col__card--featured {\n    border-color: #3b2e26;\n    background: #3b2e26;\n    color: #fff9eb;\n  }\n  .soeb-col__card--featured:hover,\n  .soeb-col__card--featured:focus-visible {\n    background: #4a3a31;\n  }\n\n  \/* \"Tap to add\" hint that appears on hover *\/\n  .soeb-col__card-hint {\n    position: absolute;\n    bottom: 14px;\n    right: 16px;\n    font-family: 'Courier New', Courier, monospace;\n    font-size: 9px;\n    letter-spacing: 0.12em;\n    text-transform: uppercase;\n    color: #a07060;\n    opacity: 0;\n    transition: opacity 0.2s ease;\n    pointer-events: none;\n  }\n  .soeb-col__card--featured .soeb-col__card-hint { color: #edc3ae; }\n  .soeb-col__card:hover .soeb-col__card-hint { opacity: 1; }\n\n  .soeb-col__card-badge {\n    font-family: 'Courier New', Courier, monospace;\n    font-size: 10px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    background: #edc3ae;\n    color: #3b2e26;\n    padding: 3px 8px;\n    display: inline-block;\n    margin-bottom: 12px;\n  }\n  .soeb-col__card--featured .soeb-col__card-badge {\n    background: #edc3ae;\n    color: #3b2e26;\n  }\n  .soeb-col__card-name {\n    font-family: 'Archivo Black', sans-serif;\n    font-size: 20px;\n    font-weight: 400;\n    text-transform: uppercase;\n    letter-spacing: 0.04em;\n    margin: 0 0 4px;\n    line-height: 1.1;\n  }\n  .soeb-col__edu h2,\n  .soeb-col__faq h2 {\n    font-family: 'Archivo Black', sans-serif;\n    font-weight: 400;\n    text-transform: uppercase;\n    letter-spacing: 0.04em;\n  }\n  .soeb-col__card-origin {\n    font-family: 'Courier New', Courier, monospace;\n    font-size: 11px;\n    letter-spacing: 0.1em;\n    color: #a07060;\n    margin: 0 0 14px;\n  }\n  .soeb-col__card--featured .soeb-col__card-origin { color: #edc3ae; }\n  .soeb-col__card-desc {\n    font-size: 14px;\n    line-height: 1.65;\n    color: #5c4a40;\n    margin: 0 0 18px;\n  }\n  .soeb-col__card--featured .soeb-col__card-desc { color: #dfd2d7; }\n\n  \/* Flavour bars *\/\n  .soeb-col__bars { margin-bottom: 16px; }\n  .soeb-col__bar-row {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    margin-bottom: 7px;\n  }\n  .soeb-col__bar-label {\n    font-family: 'Courier New', Courier, monospace;\n    font-size: 10px;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    width: 68px;\n    flex-shrink: 0;\n    color: #3b2e26;\n  }\n  .soeb-col__card--featured .soeb-col__bar-label { color: #fff9eb; }\n  .soeb-col__bar-track {\n    flex: 1;\n    height: 4px;\n    background: #edc3ae;\n    border-radius: 2px;\n    overflow: hidden;\n  }\n  .soeb-col__card--featured .soeb-col__bar-track { background: #5c4a40; }\n  .soeb-col__bar-fill {\n    height: 100%;\n    background: #3b2e26;\n    border-radius: 2px;\n  }\n  .soeb-col__card--featured .soeb-col__bar-fill { background: #edc3ae; }\n\n  \/* Tags *\/\n  .soeb-col__tags { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 16px; }\n  .soeb-col__tag {\n    font-family: 'Courier New', Courier, monospace;\n    font-size: 10px;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    border: 1px solid #3b2e26;\n    padding: 3px 8px;\n    color: #3b2e26;\n  }\n  .soeb-col__card--featured .soeb-col__tag {\n    border-color: #edc3ae;\n    color: #edc3ae;\n  }\n  .soeb-col__card-price {\n    font-size: 15px;\n    font-weight: bold;\n    color: #3b2e26;\n    margin-bottom: 6px;\n  }\n  .soeb-col__card--featured .soeb-col__card-price { color: #fff9eb; }\n  .soeb-col__card-sca {\n    font-family: 'Courier New', Courier, monospace;\n    font-size: 10px;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    color: #a07060;\n  }\n  .soeb-col__card--featured .soeb-col__card-sca { color: #edc3ae; }\n\n  \/* Education sections *\/\n  .soeb-col__edu { margin-bottom: 44px; }\n  .soeb-col__edu-heading {\n    font-size: 11px;\n    font-family: 'Courier New', Courier, monospace;\n    letter-spacing: 0.16em;\n    text-transform: uppercase;\n    color: #a07060;\n    margin: 0 0 6px;\n  }\n  .soeb-col__edu h2 {\n    font-size: clamp(20px, 3vw, 26px);\n    font-weight: normal;\n    margin: 0 0 16px;\n    line-height: 1.25;\n    border-bottom: 1px solid #edc3ae;\n    padding-bottom: 12px;\n  }\n  .soeb-col__edu p {\n    font-size: 15px;\n    line-height: 1.75;\n    color: #5c4a40;\n    margin: 0 0 12px;\n  }\n\n  \/* Two-col comparison *\/\n  .soeb-col__compare {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 1px;\n    background: #3b2e26;\n    border: 1px solid #3b2e26;\n    margin: 24px 0 12px;\n  }\n  .soeb-col__compare-col {\n    background: #fff9eb;\n    padding: 20px;\n  }\n  .soeb-col__compare-col h3 {\n    font-size: 14px;\n    font-weight: bold;\n    margin: 0 0 10px;\n    border-bottom: 1px solid #edc3ae;\n    padding-bottom: 8px;\n  }\n  .soeb-col__compare-col ul {\n    margin: 0;\n    padding: 0 0 0 16px;\n  }\n  .soeb-col__compare-col li {\n    font-size: 13px;\n    line-height: 1.65;\n    color: #5c4a40;\n    margin-bottom: 4px;\n  }\n\n  \/* FAQ accordion *\/\n  .soeb-col__faq { margin-bottom: 44px; }\n  .soeb-col__faq-heading {\n    font-size: 11px;\n    font-family: 'Courier New', Courier, monospace;\n    letter-spacing: 0.16em;\n    text-transform: uppercase;\n    color: #a07060;\n    margin: 0 0 6px;\n  }\n  .soeb-col__faq h2 {\n    font-size: clamp(20px, 3vw, 26px);\n    font-weight: normal;\n    margin: 0 0 20px;\n    border-bottom: 1px solid #edc3ae;\n    padding-bottom: 12px;\n  }\n  .soeb-col__faq details {\n    border-bottom: 1px solid #edc3ae;\n  }\n  .soeb-col__faq summary {\n    font-size: 14px;\n    font-weight: bold;\n    padding: 14px 0;\n    cursor: pointer;\n    list-style: none;\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    color: #3b2e26;\n  }\n  .soeb-col__faq summary::-webkit-details-marker { display: none; }\n  .soeb-col__faq summary::after {\n    content: '+';\n    font-size: 18px;\n    font-weight: normal;\n    color: #a07060;\n    flex-shrink: 0;\n    margin-left: 12px;\n  }\n  .soeb-col__faq details[open] summary::after { content: '−'; }\n  .soeb-col__faq-body {\n    font-size: 14px;\n    line-height: 1.75;\n    color: #5c4a40;\n    padding: 0 0 16px;\n  }\n\n  \/* Footer CTA strip *\/\n  .soeb-col__cta {\n    background: #3b2e26;\n    color: #fff9eb;\n    padding: 32px 28px;\n    text-align: center;\n  }\n  .soeb-col__cta p {\n    font-size: 15px;\n    line-height: 1.65;\n    color: #dfd2d7;\n    margin: 0 auto 18px;\n    max-width: 520px;\n  }\n  .soeb-col__cta-link {\n    display: inline-block;\n    border: 1px solid #edc3ae;\n    color: #edc3ae;\n    font-family: 'Courier New', Courier, monospace;\n    font-size: 11px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    padding: 10px 22px;\n    text-decoration: none;\n  }\n\n  \/* ══════════════════════════════════════════\n     MODAL STYLES\n  ══════════════════════════════════════════ *\/\n\n  .soeb-modal-overlay {\n    position: fixed;\n    inset: 0;\n    background: rgba(59, 46, 38, 0);\n    z-index: 99999;\n    display: flex;\n    align-items: flex-end;\n    pointer-events: none;\n    transition: background 0.3s ease;\n  }\n  @media (min-width: 640px) {\n    .soeb-modal-overlay { align-items: center; justify-content: center; }\n  }\n  .soeb-modal-overlay.is-open {\n    background: rgba(59, 46, 38, 0.6);\n    pointer-events: all;\n  }\n\n  .soeb-modal {\n    background: #fff9eb;\n    width: 100%;\n    max-width: 520px;\n    max-height: 92vh;\n    overflow-y: auto;\n    border-top: 3px solid #3b2e26;\n    transform: translateY(110%);\n    transition: transform 0.38s cubic-bezier(0.32, 0.72, 0, 1);\n    position: relative;\n    -webkit-overflow-scrolling: touch;\n  }\n  @media (min-width: 640px) {\n    .soeb-modal {\n      border: 2px solid #3b2e26;\n      border-top: 2px solid #3b2e26;\n      transform: translateY(16px) scale(0.98);\n      opacity: 0;\n      transition: transform 0.3s cubic-bezier(0.32, 0.72, 0, 1), opacity 0.25s ease;\n    }\n  }\n  .soeb-modal-overlay.is-open .soeb-modal {\n    transform: translateY(0) scale(1);\n    opacity: 1;\n  }\n\n  .soeb-modal__close {\n    position: absolute;\n    top: 14px;\n    right: 14px;\n    width: 30px;\n    height: 30px;\n    background: transparent;\n    border: 1px solid #fff9eb;\n    cursor: pointer;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-size: 14px;\n    color: #fff9eb;\n    z-index: 2;\n    transition: background 0.15s;\n    line-height: 1;\n    font-family: sans-serif;\n  }\n  .soeb-modal__close:hover { background: rgba(255,249,235,0.15); }\n\n  .soeb-modal__header {\n    background: #3b2e26;\n    color: #fff9eb;\n    padding: 24px 20px 18px;\n  }\n  .soeb-modal__eyebrow {\n    font-family: 'Courier New', Courier, monospace;\n    font-size: 9px;\n    letter-spacing: 0.18em;\n    text-transform: uppercase;\n    color: #edc3ae;\n    margin: 0 0 8px;\n  }\n  .soeb-modal__title {\n    font-size: clamp(22px, 5vw, 28px);\n    font-weight: normal;\n    color: #fff9eb;\n    margin: 0 0 4px;\n    line-height: 1.1;\n    padding-right: 36px;\n  }\n  .soeb-modal__origin {\n    font-family: 'Courier New', Courier, monospace;\n    font-size: 10px;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    color: #edc3ae;\n    opacity: 0.8;\n    margin: 0;\n  }\n\n  .soeb-modal__meta {\n    display: flex;\n    border-bottom: 1px solid #3b2e26;\n  }\n  .soeb-modal__meta-item {\n    flex: 1;\n    padding: 14px 16px;\n    border-right: 1px solid #3b2e26;\n    text-align: center;\n  }\n  .soeb-modal__meta-item:last-child { border-right: none; }\n  .soeb-modal__meta-val {\n    display: block;\n    font-size: 20px;\n    font-weight: bold;\n    color: #3b2e26;\n    line-height: 1;\n    margin-bottom: 3px;\n  }\n  .soeb-modal__meta-lbl {\n    font-family: 'Courier New', Courier, monospace;\n    font-size: 9px;\n    letter-spacing: 0.12em;\n    text-transform: uppercase;\n    color: #a07060;\n  }\n\n  .soeb-modal__body {\n    padding: 18px 20px;\n    border-bottom: 1px solid #edc3ae;\n  }\n  .soeb-modal__desc {\n    font-size: 14px;\n    line-height: 1.7;\n    color: #5c4a40;\n    margin: 0 0 16px;\n  }\n\n  \/* Modal flavour bars *\/\n  .soeb-modal__bars { margin: 0; }\n  .soeb-modal__bar-row {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    margin-bottom: 8px;\n  }\n  .soeb-modal__bar-row:last-child { margin-bottom: 0; }\n  .soeb-modal__bar-lbl {\n    font-family: 'Courier New', Courier, monospace;\n    font-size: 9px;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    color: #a07060;\n    width: 68px;\n    flex-shrink: 0;\n  }\n  .soeb-modal__bar-track {\n    flex: 1;\n    height: 4px;\n    background: #edc3ae;\n    border-radius: 2px;\n    overflow: hidden;\n  }\n  .soeb-modal__bar-fill {\n    height: 100%;\n    background: #3b2e26;\n    border-radius: 2px;\n    width: 0;\n    transition: width 0.55s cubic-bezier(0.22, 1, 0.36, 1);\n  }\n\n  .soeb-modal__tags {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 6px;\n    padding: 14px 20px;\n    border-bottom: 1px solid #edc3ae;\n  }\n  .soeb-modal__tag {\n    font-family: 'Courier New', Courier, monospace;\n    font-size: 9px;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    border: 1px solid #3b2e26;\n    padding: 3px 8px;\n    color: #3b2e26;\n  }\n\n  .soeb-modal__grind {\n    padding: 14px 20px;\n    border-bottom: 1px solid #edc3ae;\n  }\n  .soeb-modal__grind-lbl {\n    font-family: 'Courier New', Courier, monospace;\n    font-size: 9px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #a07060;\n    margin: 0 0 10px;\n  }\n  .soeb-modal__grind-opts {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 8px;\n  }\n  .soeb-modal__grind-btn {\n    font-family: 'Courier New', Courier, monospace;\n    font-size: 10px;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    padding: 7px 12px;\n    border: 1px solid #3b2e26;\n    background: #fff9eb;\n    color: #3b2e26;\n    cursor: pointer;\n    transition: background 0.15s, color 0.15s;\n  }\n  .soeb-modal__grind-btn.is-sel,\n  .soeb-modal__grind-btn:hover {\n    background: #3b2e26;\n    color: #fff9eb;\n  }\n\n  .soeb-modal__footer {\n    padding: 16px 20px;\n    display: flex;\n    align-items: center;\n    gap: 14px;\n    flex-wrap: wrap;\n  }\n  .soeb-modal__price {\n    flex: 1;\n  }\n  .soeb-modal__price-main {\n    display: block;\n    font-size: 20px;\n    font-weight: bold;\n    color: #3b2e26;\n    line-height: 1;\n  }\n  .soeb-modal__price-sub {\n    font-family: 'Courier New', Courier, monospace;\n    font-size: 9px;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    color: #a07060;\n    display: block;\n    margin-top: 3px;\n  }\n  .soeb-modal__add-btn {\n    background: #3b2e26;\n    color: #fff9eb;\n    border: 2px solid #3b2e26;\n    padding: 13px 22px;\n    font-family: 'Courier New', Courier, monospace;\n    font-size: 11px;\n    letter-spacing: 0.12em;\n    text-transform: uppercase;\n    cursor: pointer;\n    flex: 2;\n    min-width: 160px;\n    transition: background 0.2s, color 0.2s, border-color 0.2s;\n  }\n  .soeb-modal__add-btn:hover:not(.is-loading):not(.is-success) {\n    background: #edc3ae;\n    color: #3b2e26;\n    border-color: #edc3ae;\n  }\n  .soeb-modal__add-btn.is-loading { opacity: 0.6; cursor: wait; }\n  .soeb-modal__add-btn.is-success { background: #4a7c59; border-color: #4a7c59; cursor: default; }\n\n  .soeb-modal__view-cart {\n    display: none;\n    width: 100%;\n    text-align: center;\n    font-family: 'Courier New', Courier, monospace;\n    font-size: 10px;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    color: #a07060;\n    text-decoration: none;\n    padding-top: 2px;\n  }\n  .soeb-modal__view-cart:hover { color: #3b2e26; }\n  .soeb-modal__view-cart.is-vis { display: block; }\n\n  @media (max-width: 520px) {\n    .soeb-col__compare { grid-template-columns: 1fr; }\n    .soeb-col__cards { grid-template-columns: 1fr; }\n  }\n\u003c\/style\u003e\n\n\n\u003c!-- ══════════════════════════════════════════\n     MODAL (single instance, content filled by JS)\n══════════════════════════════════════════ --\u003e\n\u003cdiv class=\"soeb-modal-overlay\" id=\"soebOverlay\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"soebModalTitle\"\u003e\n  \u003cdiv class=\"soeb-modal\" id=\"soebModal\"\u003e\n\n    \u003cbutton class=\"soeb-modal__close\" id=\"soebClose\" aria-label=\"Close\"\u003e✕\u003c\/button\u003e\n\n    \u003cdiv class=\"soeb-modal__header\"\u003e\n      \u003cp class=\"soeb-modal__eyebrow\" id=\"soebEyebrow\"\u003e\u003c\/p\u003e\n      \u003ch2 class=\"soeb-modal__title\" id=\"soebModalTitle\"\u003e\u003c\/h2\u003e\n      \u003cp class=\"soeb-modal__origin\" id=\"soebOrigin\"\u003e\u003c\/p\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"soeb-modal__meta\"\u003e\n      \u003cdiv class=\"soeb-modal__meta-item\"\u003e\n        \u003cspan class=\"soeb-modal__meta-val\" id=\"soebScore\"\u003e\u003c\/span\u003e\n        \u003cspan class=\"soeb-modal__meta-lbl\"\u003eSCA Score\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"soeb-modal__meta-item\"\u003e\n        \u003cspan class=\"soeb-modal__meta-val\" id=\"soebRoast\"\u003e\u003c\/span\u003e\n        \u003cspan class=\"soeb-modal__meta-lbl\"\u003eRoast\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"soeb-modal__meta-item\"\u003e\n        \u003cspan class=\"soeb-modal__meta-val\"\u003e250g\u003c\/span\u003e\n        \u003cspan class=\"soeb-modal__meta-lbl\"\u003eBag size\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"soeb-modal__body\"\u003e\n      \u003cp class=\"soeb-modal__desc\" id=\"soebDesc\"\u003e\u003c\/p\u003e\n      \u003cdiv class=\"soeb-modal__bars\" id=\"soebBars\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"soeb-modal__tags\" id=\"soebTags\"\u003e\u003c\/div\u003e\n\n    \u003cdiv class=\"soeb-modal__grind\" id=\"soebGrindSection\"\u003e\n      \u003cp class=\"soeb-modal__grind-lbl\"\u003eRoast \u0026amp; grind\u003c\/p\u003e\n      \u003cdiv class=\"soeb-modal__grind-opts\" id=\"soebGrindOpts\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"soeb-modal__footer\"\u003e\n      \u003cdiv class=\"soeb-modal__price\"\u003e\n        \u003cspan class=\"soeb-modal__price-main\" id=\"soebPrice\"\u003e\u003c\/span\u003e\n        \u003cspan class=\"soeb-modal__price-sub\" id=\"soebPriceSub\"\u003e250g bag\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cbutton class=\"soeb-modal__add-btn\" id=\"soebAddBtn\"\u003eAdd to Basket\u003c\/button\u003e\n      \u003ca class=\"soeb-modal__view-cart\" id=\"soebViewCart\" href=\"\/cart\"\u003eView basket →\u003c\/a\u003e\n    \u003c\/div\u003e\n\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\u003c!-- ══════════════════════════════════════════\n     PAGE CONTENT\n══════════════════════════════════════════ --\u003e\n\u003cdiv class=\"soeb-col\" itemscope itemtype=\"https:\/\/schema.org\/ItemList\"\u003e\n\n  \u003c!-- ── Intro banner ── --\u003e\n  \u003cdiv class=\"soeb-col__banner\"\u003e\n    \u003cp class=\"soeb-col__banner-text\"\u003eNot sure where to start?\u003c\/p\u003e\n    \u003cp class=\"soeb-col__banner-sub\"\u003eBrowse the range below — tap any coffee to explore and add to your basket.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ── Product cards ── --\u003e\n  \u003cdiv class=\"soeb-col__cards\" role=\"list\"\u003e\n\n    \u003c!-- Arabica --\u003e\n    \u003cdiv class=\"soeb-col__card\" role=\"button\" tabindex=\"0\" data-product=\"arabica\" aria-label=\"Explore Arabica and add to basket\" itemprop=\"itemListElement\" itemscope itemtype=\"https:\/\/schema.org\/Product\"\u003e\n      \u003cspan class=\"soeb-col__card-badge\"\u003eSingle Origin\u003c\/span\u003e\n      \u003ch2 class=\"soeb-col__card-name\" itemprop=\"name\"\u003eArabica\u003c\/h2\u003e\n      \u003cp class=\"soeb-col__card-origin\"\u003eMount Elgon, Uganda · Medium Roast\u003c\/p\u003e\n      \u003cp class=\"soeb-col__card-desc\" itemprop=\"description\"\u003eBright and smooth, with notes of stone fruit and a clean, lingering finish. The high-altitude growing conditions of Mount Elgon give this Arabica its characteristic clarity.\u003c\/p\u003e\n      \u003cdiv class=\"soeb-col__bars\" aria-label=\"Flavour profile\"\u003e\n        \u003cdiv class=\"soeb-col__bar-row\"\u003e\n          \u003cspan class=\"soeb-col__bar-label\"\u003eBrightness\u003c\/span\u003e\n          \u003cdiv class=\"soeb-col__bar-track\"\u003e\u003cdiv class=\"soeb-col__bar-fill\" style=\"width:80%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"soeb-col__bar-row\"\u003e\n          \u003cspan class=\"soeb-col__bar-label\"\u003eBody\u003c\/span\u003e\n          \u003cdiv class=\"soeb-col__bar-track\"\u003e\u003cdiv class=\"soeb-col__bar-fill\" style=\"width:50%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"soeb-col__bar-row\"\u003e\n          \u003cspan class=\"soeb-col__bar-label\"\u003eSweetness\u003c\/span\u003e\n          \u003cdiv class=\"soeb-col__bar-track\"\u003e\u003cdiv class=\"soeb-col__bar-fill\" style=\"width:70%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"soeb-col__tags\"\u003e\n        \u003cspan class=\"soeb-col__tag\"\u003eStone Fruit\u003c\/span\u003e\n        \u003cspan class=\"soeb-col__tag\"\u003eFloral\u003c\/span\u003e\n        \u003cspan class=\"soeb-col__tag\"\u003eClean Finish\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cp class=\"soeb-col__card-price\" itemprop=\"offers\" itemscope itemtype=\"https:\/\/schema.org\/Offer\"\u003e\n        \u003cspan itemprop=\"price\"\u003e£13.99\u003c\/span\u003e \/ 250g\n      \u003c\/p\u003e\n      \u003cp class=\"soeb-col__card-sca\"\u003eSCA Score: 87\u003c\/p\u003e\n      \u003cspan class=\"soeb-col__card-hint\"\u003eTap to add →\u003c\/span\u003e\n    \u003c\/div\u003e\n\n    \u003c!-- Robusta --\u003e\n    \u003cdiv class=\"soeb-col__card\" role=\"button\" tabindex=\"0\" data-product=\"robusta\" aria-label=\"Explore Robusta and add to basket\" itemprop=\"itemListElement\" itemscope itemtype=\"https:\/\/schema.org\/Product\"\u003e\n      \u003cspan class=\"soeb-col__card-badge\"\u003eSingle Origin\u003c\/span\u003e\n      \u003ch2 class=\"soeb-col__card-name\" itemprop=\"name\"\u003eRobusta\u003c\/h2\u003e\n      \u003cp class=\"soeb-col__card-origin\"\u003eMasaka, Uganda · Dark Roast\u003c\/p\u003e\n      \u003cp class=\"soeb-col__card-desc\" itemprop=\"description\"\u003eBold and full-bodied with a rich, earthy depth and natural sweetness. Masaka Robusta surprises — this is not the harsh, bitter Robusta of commodity coffee. It's complex, grounded and satisfying.\u003c\/p\u003e\n      \u003cdiv class=\"soeb-col__bars\" aria-label=\"Flavour profile\"\u003e\n        \u003cdiv class=\"soeb-col__bar-row\"\u003e\n          \u003cspan class=\"soeb-col__bar-label\"\u003eBrightness\u003c\/span\u003e\n          \u003cdiv class=\"soeb-col__bar-track\"\u003e\u003cdiv class=\"soeb-col__bar-fill\" style=\"width:30%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"soeb-col__bar-row\"\u003e\n          \u003cspan class=\"soeb-col__bar-label\"\u003eBody\u003c\/span\u003e\n          \u003cdiv class=\"soeb-col__bar-track\"\u003e\u003cdiv class=\"soeb-col__bar-fill\" style=\"width:90%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"soeb-col__bar-row\"\u003e\n          \u003cspan class=\"soeb-col__bar-label\"\u003eSweetness\u003c\/span\u003e\n          \u003cdiv class=\"soeb-col__bar-track\"\u003e\u003cdiv class=\"soeb-col__bar-fill\" style=\"width:55%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"soeb-col__tags\"\u003e\n        \u003cspan class=\"soeb-col__tag\"\u003eEarthy\u003c\/span\u003e\n        \u003cspan class=\"soeb-col__tag\"\u003eDark Chocolate\u003c\/span\u003e\n        \u003cspan class=\"soeb-col__tag\"\u003eFull Body\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cp class=\"soeb-col__card-price\" itemprop=\"offers\" itemscope itemtype=\"https:\/\/schema.org\/Offer\"\u003e\n        \u003cspan itemprop=\"price\"\u003e£13.99\u003c\/span\u003e \/ 250g\n      \u003c\/p\u003e\n      \u003cp class=\"soeb-col__card-sca\"\u003eSCA Score: 84\u003c\/p\u003e\n      \u003cspan class=\"soeb-col__card-hint\"\u003eTap to add →\u003c\/span\u003e\n    \u003c\/div\u003e\n\n    \u003c!-- Signature Blend --\u003e\n    \u003cdiv class=\"soeb-col__card\" role=\"button\" tabindex=\"0\" data-product=\"blend\" aria-label=\"Explore Signature Blend and add to basket\" itemprop=\"itemListElement\" itemscope itemtype=\"https:\/\/schema.org\/Product\"\u003e\n      \u003cspan class=\"soeb-col__card-badge\"\u003eOur Blend\u003c\/span\u003e\n      \u003ch2 class=\"soeb-col__card-name\" itemprop=\"name\"\u003eSignature Blend\u003c\/h2\u003e\n      \u003cp class=\"soeb-col__card-origin\"\u003eUganda · Medium–Dark Roast\u003c\/p\u003e\n      \u003cp class=\"soeb-col__card-desc\" itemprop=\"description\"\u003eThe best of both — balanced, approachable, and built for daily drinking. Arabica lifts the cup with brightness and sweetness; Robusta grounds it with body and depth. A blend that just works.\u003c\/p\u003e\n      \u003cdiv class=\"soeb-col__bars\" aria-label=\"Flavour profile\"\u003e\n        \u003cdiv class=\"soeb-col__bar-row\"\u003e\n          \u003cspan class=\"soeb-col__bar-label\"\u003eBrightness\u003c\/span\u003e\n          \u003cdiv class=\"soeb-col__bar-track\"\u003e\u003cdiv class=\"soeb-col__bar-fill\" style=\"width:60%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"soeb-col__bar-row\"\u003e\n          \u003cspan class=\"soeb-col__bar-label\"\u003eBody\u003c\/span\u003e\n          \u003cdiv class=\"soeb-col__bar-track\"\u003e\u003cdiv class=\"soeb-col__bar-fill\" style=\"width:70%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"soeb-col__bar-row\"\u003e\n          \u003cspan class=\"soeb-col__bar-label\"\u003eSweetness\u003c\/span\u003e\n          \u003cdiv class=\"soeb-col__bar-track\"\u003e\u003cdiv class=\"soeb-col__bar-fill\" style=\"width:65%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"soeb-col__tags\"\u003e\n        \u003cspan class=\"soeb-col__tag\"\u003eBalanced\u003c\/span\u003e\n        \u003cspan class=\"soeb-col__tag\"\u003eCaramel\u003c\/span\u003e\n        \u003cspan class=\"soeb-col__tag\"\u003eSmooth\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cp class=\"soeb-col__card-price\" itemprop=\"offers\" itemscope itemtype=\"https:\/\/schema.org\/Offer\"\u003e\n        \u003cspan itemprop=\"price\"\u003e£13.99\u003c\/span\u003e \/ 250g\n      \u003c\/p\u003e\n      \u003cp class=\"soeb-col__card-sca\"\u003eArabica 87 · Robusta 84\u003c\/p\u003e\n      \u003cspan class=\"soeb-col__card-hint\"\u003eTap to add →\u003c\/span\u003e\n    \u003c\/div\u003e\n\n    \u003c!-- Discovery Set --\u003e\n    \u003cdiv class=\"soeb-col__card\" role=\"button\" tabindex=\"0\" data-product=\"discovery\" aria-label=\"Explore Discovery Set and add to basket\" itemprop=\"itemListElement\" itemscope itemtype=\"https:\/\/schema.org\/Product\"\u003e\n      \u003cspan class=\"soeb-col__card-badge\"\u003eBest Value\u003c\/span\u003e\n      \u003ch2 class=\"soeb-col__card-name\" itemprop=\"name\"\u003eDiscovery Set\u003c\/h2\u003e\n      \u003cp class=\"soeb-col__card-origin\"\u003eAll three coffees · One box\u003c\/p\u003e\n      \u003cp class=\"soeb-col__card-desc\" itemprop=\"description\"\u003eAll three SOEB coffees in one box. Taste them side by side, find your favourite, or give as a gift.\u003c\/p\u003e\n      \u003cdiv class=\"soeb-col__bars\" aria-label=\"Value profile\"\u003e\n        \u003cdiv class=\"soeb-col__bar-row\"\u003e\n          \u003cspan class=\"soeb-col__bar-label\"\u003eValue\u003c\/span\u003e\n          \u003cdiv class=\"soeb-col__bar-track\"\u003e\u003cdiv class=\"soeb-col__bar-fill\" style=\"width:100%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"soeb-col__bar-row\"\u003e\n          \u003cspan class=\"soeb-col__bar-label\"\u003eVariety\u003c\/span\u003e\n          \u003cdiv class=\"soeb-col__bar-track\"\u003e\u003cdiv class=\"soeb-col__bar-fill\" style=\"width:100%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"soeb-col__bar-row\"\u003e\n          \u003cspan class=\"soeb-col__bar-label\"\u003eGiftable\u003c\/span\u003e\n          \u003cdiv class=\"soeb-col__bar-track\"\u003e\u003cdiv class=\"soeb-col__bar-fill\" style=\"width:90%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"soeb-col__tags\"\u003e\n        \u003cspan class=\"soeb-col__tag\"\u003eAll Three\u003c\/span\u003e\n        \u003cspan class=\"soeb-col__tag\"\u003eGift Ready\u003c\/span\u003e\n        \u003cspan class=\"soeb-col__tag\"\u003eBest Way to Start\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cp class=\"soeb-col__card-price\" itemprop=\"offers\" itemscope itemtype=\"https:\/\/schema.org\/Offer\"\u003e\n        Three bags · one price\n      \u003c\/p\u003e\n      \u003cp class=\"soeb-col__card-sca\"\u003eArabica · Robusta · Signature Blend\u003c\/p\u003e\n      \u003cspan class=\"soeb-col__card-hint\"\u003eTap to add →\u003c\/span\u003e\n    \u003c\/div\u003e\n\n  \u003c\/div\u003e\n\u003c!-- \/.soeb-col__cards --\u003e\n\n\n  \u003c!-- ── Education: Why freshness matters ── --\u003e\n  \u003cdiv class=\"soeb-col__edu\"\u003e\n    \u003cp class=\"soeb-col__edu-heading\"\u003eThe SOEB difference\u003c\/p\u003e\n    \u003ch2\u003eWhy freshness changes everything\u003c\/h2\u003e\n    \u003cp\u003eMost supermarket coffee was roasted weeks or months before it reaches you. We roast every batch to order and dispatch within five days of roasting — because freshly roasted coffee isn't just a preference, it's a measurable difference in flavour.\u003c\/p\u003e\n    \u003cp\u003eCO₂ released from freshly roasted beans during brewing (known as the \"bloom\") is the sign of a live, active coffee. It creates body, sweetness and complexity. Stale coffee has already off-gassed — the result is a flat, one-dimensional cup. Small-batch roasting means every bag you receive is at its peak.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ── Education: Arabica vs Robusta ── --\u003e\n  \u003cdiv class=\"soeb-col__edu\"\u003e\n    \u003cp class=\"soeb-col__edu-heading\"\u003eKnow your beans\u003c\/p\u003e\n    \u003ch2\u003eArabica vs Robusta — what's the difference?\u003c\/h2\u003e\n    \u003cp\u003eThe coffee world has long treated Arabica as superior and Robusta as cheap filler. The truth is more interesting. When sourced carefully and roasted well, both species have genuine, distinct character. Understanding the difference helps you choose — and appreciate — what's in your cup.\u003c\/p\u003e\n    \u003cdiv class=\"soeb-col__compare\" role=\"region\" aria-label=\"Arabica vs Robusta comparison\"\u003e\n      \u003cdiv class=\"soeb-col__compare-col\"\u003e\n        \u003ch3\u003eArabica\u003c\/h3\u003e\n        \u003cul\u003e\n          \u003cli\u003eGrown at higher altitudes (1,200m+)\u003c\/li\u003e\n          \u003cli\u003eSlower maturation = more complex sugars\u003c\/li\u003e\n          \u003cli\u003eBrighter acidity, floral and fruit notes\u003c\/li\u003e\n          \u003cli\u003eLower caffeine content (~1.5%)\u003c\/li\u003e\n          \u003cli\u003eMore delicate — responds well to lighter roasts\u003c\/li\u003e\n        \u003c\/ul\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"soeb-col__compare-col\"\u003e\n        \u003ch3\u003eRobusta\u003c\/h3\u003e\n        \u003cul\u003e\n          \u003cli\u003eGrows at lower altitudes, higher yields\u003c\/li\u003e\n          \u003cli\u003eDenser bean = heavier body and mouthfeel\u003c\/li\u003e\n          \u003cli\u003eEarthy, chocolatey, natural sweetness\u003c\/li\u003e\n          \u003cli\u003eHigher caffeine content (~2.7%)\u003c\/li\u003e\n          \u003cli\u003eThrives in darker roasts and espresso\u003c\/li\u003e\n        \u003c\/ul\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cp\u003eOur Signature Blend combines both: Arabica provides brightness and sweetness, Robusta anchors the cup with body and intensity. The result is something neither bean achieves alone.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ── Education: SCA scores ── --\u003e\n  \u003cdiv class=\"soeb-col__edu\"\u003e\n    \u003cp class=\"soeb-col__edu-heading\"\u003eQuality you can measure\u003c\/p\u003e\n    \u003ch2\u003eWhat does an SCA cupping score actually mean?\u003c\/h2\u003e\n    \u003cp\u003eThe Specialty Coffee Association (SCA) uses a 100-point scoring system to evaluate coffee quality. Coffees scoring 80 or above are classified as \"specialty grade\" — the top tier of the global coffee trade. Our Arabica scores 87, our Robusta 84. Both sit comfortably in specialty territory.\u003c\/p\u003e\n    \u003cp\u003eScores are assessed across ten criteria including fragrance, flavour, aftertaste, acidity, body, balance and uniformity. A trained Q-grader evaluates each sample under controlled conditions. An 87 isn't just a marketing number — it's a professional assessment by a certified taster.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ── FAQ ── --\u003e\n  \u003cdiv class=\"soeb-col__faq\" itemscope itemtype=\"https:\/\/schema.org\/FAQPage\"\u003e\n    \u003cp class=\"soeb-col__faq-heading\"\u003eCommon questions\u003c\/p\u003e\n    \u003ch2\u003eFrequently asked questions\u003c\/h2\u003e\n\n    \u003cdetails itemscope itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\"\u003e\n      \u003csummary itemprop=\"name\"\u003eHow long after roasting is my coffee dispatched?\u003c\/summary\u003e\n      \u003cdiv class=\"soeb-col__faq-body\" itemscope itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\"\u003e\n        \u003cp itemprop=\"text\"\u003eWe roast in small batches and dispatch within five days of roasting. You'll receive your coffee at its freshest — not sitting in a warehouse for weeks. Each bag is sealed with a one-way valve to preserve freshness during delivery.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/details\u003e\n\n    \u003cdetails itemscope itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\"\u003e\n      \u003csummary itemprop=\"name\"\u003eWhich coffee should I choose if I'm new to specialty coffee?\u003c\/summary\u003e\n      \u003cdiv class=\"soeb-col__faq-body\" itemscope itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\"\u003e\n        \u003cp itemprop=\"text\"\u003eThe Discovery Set is the best starting point — it includes all three coffees so you can taste the differences between Arabica, Robusta and the Signature Blend side by side. If you'd rather choose one, the Signature Blend is the most approachable: balanced, smooth and well-suited to all brew methods.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/details\u003e\n\n    \u003cdetails itemscope itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\"\u003e\n      \u003csummary itemprop=\"name\"\u003eWhat grind options are available?\u003c\/summary\u003e\n      \u003cdiv class=\"soeb-col__faq-body\" itemscope itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\"\u003e\n        \u003cp itemprop=\"text\"\u003eWe offer whole bean and a range of grind sizes to suit your brew method — espresso, filter, cafetière and Aeropress. Select your grind preference when adding to your bag. If you have a grinder at home, whole bean is always recommended for maximum freshness.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/details\u003e\n\n    \u003cdetails itemscope itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\"\u003e\n      \u003csummary itemprop=\"name\"\u003eIs your Robusta actually good quality?\u003c\/summary\u003e\n      \u003cdiv class=\"soeb-col__faq-body\" itemscope itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\"\u003e\n        \u003cp itemprop=\"text\"\u003eYes — and we understand the scepticism. Most Robusta in the UK is commodity-grade filler used to cut costs. Ours is sourced from Masaka, Uganda, scores 84 on the SCA scale, and is roasted as a standalone specialty coffee in its own right. The flavour is bold and earthy with genuine natural sweetness — nothing like what you'd find in a supermarket blend.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/details\u003e\n\n    \u003cdetails itemscope itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\"\u003e\n      \u003csummary itemprop=\"name\"\u003eWhere is SOEB coffee grown?\u003c\/summary\u003e\n      \u003cdiv class=\"soeb-col__faq-body\" itemscope itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\"\u003e\n        \u003cp itemprop=\"text\"\u003eAll of our current range is sourced from Uganda. Our Arabica comes from Mount Elgon — a volcanic highland region producing some of East Africa's most distinctive coffee. Our Robusta comes from Masaka in central Uganda. Both origins are selected for traceability and cup quality.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/details\u003e\n\n    \u003cdetails itemscope itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\"\u003e\n      \u003csummary itemprop=\"name\"\u003eWhat does \"small-batch roasting\" mean in practice?\u003c\/summary\u003e\n      \u003cdiv class=\"soeb-col__faq-body\" itemscope itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\"\u003e\n        \u003cp itemprop=\"text\"\u003eIt means we roast to order in limited quantities rather than in bulk ahead of demand. Each roast can be carefully monitored and adjusted — resulting in greater consistency cup to cup, and coffee that reaches you days after roasting rather than months. It also means we never hold large stock; what we sell, we roast fresh.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/details\u003e\n\n  \u003c\/div\u003e\n\u003c!-- \/.soeb-col__faq --\u003e\n\n  \u003c!-- ── Footer CTA ── --\u003e\n  \u003cdiv class=\"soeb-col__cta\"\u003e\n    \u003cp\u003eNot sure where to start? The Discovery Set includes all three coffees — it's the easiest way to find your favourite and understand what makes each one different.\u003c\/p\u003e\n    \u003ca class=\"soeb-col__cta-link\" href=\"https:\/\/www.soeb.co\/products\/soeb-trio-uganda\"\u003eShop the Discovery Set\u003c\/a\u003e\n  \u003c\/div\u003e\n\n\u003c\/div\u003e\u003c!-- \/.soeb-col --\u003e\n\n\n\u003cscript\u003e\ndocument.addEventListener('DOMContentLoaded', function() {\n\nvar SOEB = {\n\n  arabica: {\n    eyebrow:  'Single Origin · Mount Elgon, Uganda',\n    name:     'Arabica',\n    origin:   'Mount Elgon, Uganda · 1,200–2,300m',\n    score:    '87',\n    roast:    'Medium',\n    price:    '£13.99',\n    priceSub: '250g bag',\n    desc:     'Bright and smooth, with notes of stone fruit and a clean, lingering finish. Grown at high altitude on the volcanic slopes of Mount Elgon, this Arabica carries the characteristic clarity of well-grown East African coffee. Scored 87 by a certified Q-grader.',\n    bars:     [{ l:'Brightness', w:'80%' }, { l:'Body', w:'50%' }, { l:'Sweetness', w:'70%' }],\n    tags:     ['Stone Fruit', 'Floral', 'Clean Finish'],\n    grinds: [\n      { label: 'Medium \/ Whole Bean', id: '56675068739961' },\n      { label: 'Medium \/ Ground',     id: '56504087445881' },\n      { label: 'Dark \/ Whole Bean',   id: '56675068772729' },\n      { label: 'Dark \/ Ground',       id: '56504087478649' },\n    ]\n  },\n\n  robusta: {\n    eyebrow:  'Single Origin · Masaka, Uganda',\n    name:     'Robusta',\n    origin:   'Masaka, Uganda · Dark Roast',\n    score:    '84',\n    roast:    'Dark',\n    price:    '£13.99',\n    priceSub: '250g bag',\n    desc:     'Bold and full-bodied with a rich, earthy depth and natural sweetness. This is not the harsh, bitter Robusta of commodity coffee — it\\'s specialty grade, sourced from Masaka and scored 84 SCA. Complex, grounded and satisfying.',\n    bars:     [{ l:'Brightness', w:'30%' }, { l:'Body', w:'90%' }, { l:'Sweetness', w:'55%' }],\n    tags:     ['Earthy', 'Dark Chocolate', 'Full Body'],\n    grinds: [\n      { label: 'Medium \/ Whole Bean', id: '56504111169913' },\n      { label: 'Medium \/ Ground',     id: '56675227238777' },\n      { label: 'Dark \/ Whole Bean',   id: '56504111137145' },\n      { label: 'Dark \/ Ground',       id: '56675227206009' },\n    ]\n  },\n\n  blend: {\n    eyebrow:  'Signature Blend · Uganda',\n    name:     'Signature Blend',\n    origin:   'Uganda · Medium–Dark Roast',\n    score:    '86',\n    roast:    'Med–Dark',\n    price:    '£13.99',\n    priceSub: '250g bag',\n    desc:     'The best of both origins in one balanced cup. Arabica lifts it with brightness and sweetness; Robusta anchors it with body and depth. Built for daily drinking and versatile across all brew methods.',\n    bars:     [{ l:'Brightness', w:'60%' }, { l:'Body', w:'70%' }, { l:'Sweetness', w:'65%' }],\n    tags:     ['Balanced', 'Caramel', 'Smooth'],\n    grinds: [\n      { label: 'Medium \/ Whole Bean', id: '56504114643321' },\n      { label: 'Medium \/ Ground',     id: '56675208069497' },\n      { label: 'Dark \/ Whole Bean',   id: '56504114610553' },\n      { label: 'Dark \/ Ground',       id: '56675208036729' },\n    ]\n  },\n\n  discovery: {\n    eyebrow:  'Best Value · 3 × 250g bags',\n    name:     'Discovery Set',\n    origin:   'All three SOEB coffees · One box',\n    score:    '3',\n    roast:    'Varied',\n    price:    '£42.00',\n    priceSub: '3 × 250g bags',\n    desc:     'Taste the full range and find your favourite. Includes all three coffees — Arabica, Robusta and Signature Blend — in one box. The ideal introduction to SOEB, or a gift for someone who takes their coffee seriously.',\n    bars:     [{ l:'Value', w:'100%' }, { l:'Variety', w:'100%' }, { l:'Giftable', w:'90%' }],\n    tags:     ['All Three', 'Gift Ready', 'Best Way to Start'],\n    grinds: [\n      { label: 'Medium \/ Whole Bean (all 3)', id: '56504148853113' },\n      { label: 'Medium \/ Ground (all 3)',     id: '56675268395385' },\n      { label: 'Dark \/ Whole Bean (all 3)',   id: '56504148820345' },\n      { label: 'Dark \/ Ground (all 3)',       id: '56675268362617' },\n    ]\n  }\n\n};\n\n\/\/ ── DOM refs ──\nvar overlay  = document.getElementById('soebOverlay');\nvar modal    = document.getElementById('soebModal');\nvar closeBtn = document.getElementById('soebClose');\nvar addBtn   = document.getElementById('soebAddBtn');\nvar viewCart = document.getElementById('soebViewCart');\nvar selectedVariantId = null;\nvar currentProduct    = null;\n\n\/\/ ── Open modal ──\nfunction soebOpen(key) {\n  var p = SOEB[key];\n  if (!p) return;\n  currentProduct = key;\n\n  document.getElementById('soebEyebrow').textContent    = p.eyebrow;\n  document.getElementById('soebModalTitle').textContent = p.name;\n  document.getElementById('soebOrigin').textContent     = p.origin;\n  document.getElementById('soebScore').textContent      = p.score;\n  document.getElementById('soebRoast').textContent      = p.roast;\n  document.getElementById('soebDesc').textContent       = p.desc;\n  document.getElementById('soebPrice').textContent      = p.price;\n  document.getElementById('soebPriceSub').textContent   = p.priceSub;\n\n  \/\/ Flavour bars\n  var barsEl = document.getElementById('soebBars');\n  barsEl.innerHTML = p.bars.map(function(b) {\n    return '\u003cdiv class=\"soeb-modal__bar-row\"\u003e'\n      + '\u003cspan class=\"soeb-modal__bar-lbl\"\u003e' + b.l + '\u003c\/span\u003e'\n      + '\u003cdiv class=\"soeb-modal__bar-track\"\u003e'\n      + '\u003cdiv class=\"soeb-modal__bar-fill\" data-w=\"' + b.w + '\" style=\"width:0\"\u003e\u003c\/div\u003e'\n      + '\u003c\/div\u003e\u003c\/div\u003e';\n  }).join('');\n\n  \/\/ Tags\n  document.getElementById('soebTags').innerHTML = p.tags.map(function(t) {\n    return '\u003cspan class=\"soeb-modal__tag\"\u003e' + t + '\u003c\/span\u003e';\n  }).join('');\n\n  \/\/ Grind selector\n  var grindEl = document.getElementById('soebGrindOpts');\n  grindEl.innerHTML = '';\n  selectedVariantId = null;\n  p.grinds.forEach(function(g, i) {\n    var btn = document.createElement('button');\n    btn.className = 'soeb-modal__grind-btn' + (i === 0 ? ' is-sel' : '');\n    btn.textContent = g.label;\n    btn.dataset.id = g.id;\n    if (i === 0) selectedVariantId = g.id;\n    btn.addEventListener('click', function() {\n      grindEl.querySelectorAll('.soeb-modal__grind-btn').forEach(function(b) { b.classList.remove('is-sel'); });\n      btn.classList.add('is-sel');\n      selectedVariantId = g.id;\n    });\n    grindEl.appendChild(btn);\n  });\n\n  \/\/ Reset button\n  addBtn.textContent = 'Add to Basket';\n  addBtn.classList.remove('is-loading', 'is-success');\n  viewCart.classList.remove('is-vis');\n\n  \/\/ Show\n  overlay.classList.add('is-open');\n  modal.scrollTop = 0;\n  document.body.style.overflow = 'hidden';\n\n  \/\/ Animate bars after paint\n  requestAnimationFrame(function() {\n    requestAnimationFrame(function() {\n      barsEl.querySelectorAll('.soeb-modal__bar-fill').forEach(function(el) {\n        el.style.width = el.dataset.w;\n      });\n    });\n  });\n}\n\n\/\/ ── Close modal ──\nfunction soebClose() {\n  overlay.classList.remove('is-open');\n  document.body.style.overflow = '';\n}\n\n\/\/ ── Add to basket ──\naddBtn.addEventListener('click', function() {\n  if (addBtn.classList.contains('is-loading') || addBtn.classList.contains('is-success')) return;\n\n  \/\/ If variant IDs not yet filled in, fall back to product page\n  if (!selectedVariantId || selectedVariantId.indexOf('VARIANT_ID') === 0) {\n    var fallbacks = {\n      arabica:   '\/products\/arabica',\n      robusta:   '\/products\/robusta',\n      blend:     '\/products\/signature-blend',\n      discovery: '\/products\/soeb-trio-uganda?variant=56504148820345'\n    };\n    window.location.href = fallbacks[currentProduct] || '\/collections\/the-soeb-collection';\n    return;\n  }\n\n  addBtn.textContent = 'Adding…';\n  addBtn.classList.add('is-loading');\n\n  fetch('\/cart\/add.js', {\n    method:  'POST',\n    headers: { 'Content-Type': 'application\/json' },\n    body:    JSON.stringify({ id: parseInt(selectedVariantId, 10), quantity: 1 })\n  })\n  .then(function(r) { return r.json(); })\n  .then(function() {\n    addBtn.textContent = '✓ Added to basket';\n    addBtn.classList.remove('is-loading');\n    addBtn.classList.add('is-success');\n    viewCart.classList.add('is-vis');\n\n    \/\/ Refresh cart count in header (works with most Shopify themes)\n    fetch('\/cart.js')\n      .then(function(r) { return r.json(); })\n      .then(function(cart) {\n        var countEls = document.querySelectorAll('[data-cart-count], .cart-count, .header__cart-count, .cart-item-count');\n        countEls.forEach(function(el) { el.textContent = cart.item_count; });\n      });\n  })\n  .catch(function() {\n    addBtn.textContent = 'Error — please try again';\n    addBtn.classList.remove('is-loading');\n  });\n});\n\n\/\/ ── Wire up cards ──\ndocument.querySelectorAll('.soeb-col__card').forEach(function(card) {\n  card.addEventListener('click', function() {\n    soebOpen(card.dataset.product);\n  });\n  card.addEventListener('keydown', function(e) {\n    if (e.key === 'Enter' || e.key === ' ') {\n      e.preventDefault();\n      soebOpen(card.dataset.product);\n    }\n  });\n});\n\n\/\/ ── Close triggers ──\ncloseBtn.addEventListener('click', soebClose);\noverlay.addEventListener('click', function(e) { if (e.target === overlay) soebClose(); });\ndocument.addEventListener('keydown', function(e) { if (e.key === 'Escape') soebClose(); });\n\n}); \/\/ end DOMContentLoaded\n\u003c\/script\u003e","products":[{"product_id":"soeb-arabica-uganda","title":"Arabica","description":"\u003cstyle\u003e\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Archivo+Black\u0026display=swap');\n\n  .soeb-ar {\n    --espresso: #3b2e26;\n    --espresso-mid: #6b4c3b;\n    --espresso-light: #9a7060;\n    --cream: #fff9eb;\n    --blush: #edc3ae;\n    --blush-light: rgba(237,195,174,0.18);\n    --border: rgba(59,46,38,0.1);\n    --text-muted: rgba(59,46,38,0.62);\n    font-family: inherit;\n    color: var(--espresso);\n    max-width: 680px;\n  }\n\n  .soeb-ar * { box-sizing: border-box; margin: 0; padding: 0; }\n\n  \/* ── Intro ── *\/\n  .soeb-ar-intro {\n    font-size: 15px;\n    line-height: 1.75;\n    color: var(--text-muted);\n    padding: 1.25rem 0 1.5rem;\n    border-bottom: 0.5px solid var(--border);\n  }\n\n  \/* ── At a glance ── *\/\n  .soeb-ar-glance {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 10px;\n    padding: 1.25rem 0;\n    border-bottom: 0.5px solid var(--border);\n  }\n\n  .soeb-ar-glance-item {\n    display: flex;\n    align-items: flex-start;\n    gap: 9px;\n    font-size: 13.5px;\n    line-height: 1.45;\n    color: var(--espresso);\n  }\n\n  .soeb-ar-glance-dot {\n    width: 6px;\n    height: 6px;\n    border-radius: 50%;\n    background: var(--blush);\n    flex-shrink: 0;\n    margin-top: 5px;\n  }\n\n  \/* ── Flavour bars ── *\/\n  .soeb-ar-flavour {\n    padding: 1.5rem 0;\n    border-bottom: 0.5px solid var(--border);\n  }\n\n  .soeb-ar-section-label {\n    font-size: 10px;\n    text-transform: uppercase;\n    letter-spacing: 0.1em;\n    color: var(--espresso-light);\n    margin-bottom: 1rem;\n  }\n\n  .soeb-ar-bar-row {\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    margin-bottom: 11px;\n  }\n\n  .soeb-ar-bar-name {\n    font-size: 12.5px;\n    color: var(--espresso);\n    width: 72px;\n    flex-shrink: 0;\n  }\n\n  .soeb-ar-bar-track {\n    flex: 1;\n    height: 4px;\n    background: var(--border);\n    border-radius: 2px;\n    overflow: hidden;\n  }\n\n  .soeb-ar-bar-fill {\n    height: 100%;\n    border-radius: 2px;\n    background: var(--espresso);\n  }\n\n  .soeb-ar-bar-fill--accent { background: var(--blush); }\n\n  .soeb-ar-bar-val {\n    font-size: 11px;\n    color: var(--espresso-light);\n    width: 52px;\n    text-align: right;\n    flex-shrink: 0;\n  }\n\n  .soeb-ar-tags {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 6px;\n    margin-top: 1rem;\n  }\n\n  .soeb-ar-tag {\n    padding: 4px 11px;\n    background: var(--blush-light);\n    border: 0.5px solid rgba(237,195,174,0.45);\n    border-radius: 20px;\n    font-size: 12px;\n    color: var(--espresso);\n  }\n\n  \/* ── Farmer card ── *\/\n  .soeb-ar-farmer {\n    display: flex;\n    align-items: flex-start;\n    gap: 13px;\n    background: rgba(59,46,38,0.03);\n    border: 0.5px solid var(--border);\n    border-radius: 10px;\n    padding: 14px 15px;\n    margin-bottom: 1rem;\n  }\n\n  .soeb-ar-farmer-avatar {\n    width: 40px;\n    height: 40px;\n    border-radius: 50%;\n    background: var(--blush-light);\n    border: 0.5px solid rgba(237,195,174,0.5);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-shrink: 0;\n    font-size: 13px;\n    font-weight: 500;\n    color: var(--espresso-mid);\n    letter-spacing: 0.03em;\n  }\n\n  .soeb-ar-farmer-name {\n    font-size: 13.5px;\n    font-weight: 500;\n    color: var(--espresso);\n    margin-bottom: 3px;\n  }\n\n  .soeb-ar-farmer-detail {\n    font-size: 12.5px;\n    color: var(--text-muted);\n    line-height: 1.55;\n  }\n\n  \/* ── Origin detail card ── *\/\n  .soeb-ar-origin-card {\n    background: rgba(59,46,38,0.03);\n    border: 0.5px solid var(--border);\n    border-radius: 8px;\n    padding: 13px 14px;\n  }\n\n  .soeb-ar-origin-head {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    margin-bottom: 5px;\n  }\n\n  .soeb-ar-origin-title {\n    font-size: 12px;\n    font-weight: 500;\n    text-transform: uppercase;\n    letter-spacing: 0.07em;\n    color: var(--espresso-mid);\n  }\n\n  .soeb-ar-score-pill {\n    font-size: 11px;\n    padding: 2px 8px;\n    background: var(--espresso);\n    color: var(--cream);\n    border-radius: 20px;\n  }\n\n  .soeb-ar-origin-detail {\n    font-size: 12.5px;\n    color: var(--text-muted);\n    line-height: 1.55;\n  }\n\n  \/* ── Process callout ── *\/\n  .soeb-ar-process-note {\n    background: rgba(59,46,38,0.03);\n    border: 0.5px solid var(--border);\n    border-left: 3px solid var(--blush);\n    border-radius: 0 8px 8px 0;\n    padding: 11px 13px;\n    font-size: 13px;\n    color: var(--espresso);\n    line-height: 1.6;\n    margin-top: 0.85rem;\n  }\n\n  \/* ── Accordion ── *\/\n  .soeb-ar-accordion {\n    border-bottom: 0.5px solid var(--border);\n  }\n\n  .soeb-ar-acc-btn {\n    width: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    padding: 1rem 0;\n    background: transparent;\n    border: none;\n    font-family: 'Archivo Black', sans-serif;\n    font-size: 13px;\n    font-weight: 400;\n    text-transform: uppercase;\n    letter-spacing: 0.08em;\n    color: var(--espresso);\n    cursor: pointer;\n    text-align: left;\n  }\n\n  .soeb-ar-acc-btn:hover { color: var(--espresso-mid); }\n\n  .soeb-ar-acc-icon {\n    width: 18px;\n    height: 18px;\n    flex-shrink: 0;\n    transition: transform 0.25s ease;\n    color: var(--espresso-light);\n  }\n\n  .soeb-ar-acc-icon.is-open { transform: rotate(180deg); }\n\n  .soeb-ar-acc-body {\n    overflow: hidden;\n    max-height: 0;\n    transition: max-height 0.35s ease;\n  }\n\n  .soeb-ar-acc-body.is-open { max-height: 700px; }\n\n  .soeb-ar-acc-inner {\n    padding-bottom: 1.25rem;\n    font-size: 13.5px;\n    line-height: 1.7;\n    color: var(--text-muted);\n  }\n\n  \/* ── Brew grid ── *\/\n  .soeb-ar-brew-grid {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 8px;\n    margin-bottom: 1rem;\n  }\n\n  .soeb-ar-brew-card {\n    background: rgba(59,46,38,0.03);\n    border: 0.5px solid var(--border);\n    border-radius: 8px;\n    padding: 10px 13px;\n  }\n\n  .soeb-ar-brew-label {\n    font-size: 10px;\n    text-transform: uppercase;\n    letter-spacing: 0.07em;\n    color: var(--espresso-light);\n    margin-bottom: 4px;\n  }\n\n  .soeb-ar-brew-val {\n    font-size: 13.5px;\n    font-weight: 500;\n    color: var(--espresso);\n  }\n\n  .soeb-ar-methods {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 7px;\n  }\n\n  .soeb-ar-method {\n    padding: 5px 11px;\n    border: 0.5px solid rgba(59,46,38,0.18);\n    border-radius: 6px;\n    font-size: 12px;\n    color: var(--espresso);\n  }\n\n  \/* ── Fit list ── *\/\n  .soeb-ar-fit-list {\n    list-style: none;\n    padding: 0;\n  }\n\n  .soeb-ar-fit-list li {\n    display: flex;\n    align-items: flex-start;\n    gap: 9px;\n    font-size: 13.5px;\n    line-height: 1.5;\n    color: var(--text-muted);\n    margin-bottom: 9px;\n  }\n\n  .soeb-ar-fit-list li::before {\n    content: '';\n    width: 5px;\n    height: 5px;\n    border-radius: 50%;\n    background: var(--blush);\n    flex-shrink: 0;\n    margin-top: 6px;\n  }\n\n  \/* ── Freshness note ── *\/\n  .soeb-ar-freshness-note {\n    background: var(--blush-light);\n    border: 0.5px solid rgba(237,195,174,0.4);\n    border-radius: 8px;\n    padding: 12px 14px;\n    font-size: 13px;\n    color: var(--espresso);\n    line-height: 1.6;\n    margin-top: 0.5rem;\n  }\n\n  \/* ── FAQ ── *\/\n  .soeb-ar-faq-item {\n    padding-bottom: 1rem;\n    margin-bottom: 1rem;\n    border-bottom: 0.5px solid rgba(59,46,38,0.07);\n  }\n\n  .soeb-ar-faq-item:last-child { border-bottom: none; margin-bottom: 0; padding-bottom: 0; }\n\n  .soeb-ar-faq-q {\n    font-size: 13.5px;\n    font-weight: 500;\n    color: var(--espresso);\n    margin-bottom: 5px;\n  }\n\n  .soeb-ar-faq-a {\n    font-size: 13px;\n    color: var(--text-muted);\n    line-height: 1.65;\n  }\n\n  \/* ── Responsive ── *\/\n  @media (max-width: 480px) {\n    .soeb-ar-glance { grid-template-columns: 1fr; }\n    .soeb-ar-brew-grid { grid-template-columns: 1fr; }\n  }\n\u003c\/style\u003e\n\n\u003cdiv class=\"soeb-ar\"\u003e\n\n  \u003c!-- Intro --\u003e\n  \u003cp class=\"soeb-ar-intro\"\u003e\n    Smooth, calm and quietly expressive. A refined single-origin Arabica that captures the brighter, more elegant side of Ugandan coffee. Grown high on Mount Elgon and roasted at origin for balance, SOEB Arabica is for those who appreciate clarity over intensity and craft over noise.\n  \u003c\/p\u003e\n\n  \u003c!-- At a Glance --\u003e\n  \u003cdiv class=\"soeb-ar-glance\" aria-label=\"Product highlights\"\u003e\n    \u003cdiv class=\"soeb-ar-glance-item\"\u003e\n\u003cspan class=\"soeb-ar-glance-dot\"\u003e\u003c\/span\u003e100% single-origin Ugandan Arabica\u003c\/div\u003e\n    \u003cdiv class=\"soeb-ar-glance-item\"\u003e\n\u003cspan class=\"soeb-ar-glance-dot\"\u003e\u003c\/span\u003eGrown by Olive Kishero, Elgon region\u003c\/div\u003e\n    \u003cdiv class=\"soeb-ar-glance-item\"\u003e\n\u003cspan class=\"soeb-ar-glance-dot\"\u003e\u003c\/span\u003eBulambuli \u0026amp; Buginyanya · 2,100m\u003c\/div\u003e\n    \u003cdiv class=\"soeb-ar-glance-item\"\u003e\n\u003cspan class=\"soeb-ar-glance-dot\"\u003e\u003c\/span\u003eWashed process · AA grade · 87 SCA\u003c\/div\u003e\n    \u003cdiv class=\"soeb-ar-glance-item\"\u003e\n\u003cspan class=\"soeb-ar-glance-dot\"\u003e\u003c\/span\u003eRoasted at origin for freshness and clarity\u003c\/div\u003e\n    \u003cdiv class=\"soeb-ar-glance-item\"\u003e\n\u003cspan class=\"soeb-ar-glance-dot\"\u003e\u003c\/span\u003eDrinks beautifully black or with milk\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- Flavour Profile --\u003e\n  \u003cdiv class=\"soeb-ar-flavour\"\u003e\n    \u003cdiv class=\"soeb-ar-section-label\"\u003eFlavour profile\u003c\/div\u003e\n\n    \u003cdiv class=\"soeb-ar-bar-row\"\u003e\n      \u003cspan class=\"soeb-ar-bar-name\"\u003eBody\u003c\/span\u003e\n      \u003cdiv class=\"soeb-ar-bar-track\"\u003e\u003cdiv class=\"soeb-ar-bar-fill\" style=\"width:52%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n      \u003cspan class=\"soeb-ar-bar-val\"\u003eMedium\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"soeb-ar-bar-row\"\u003e\n      \u003cspan class=\"soeb-ar-bar-name\"\u003eAcidity\u003c\/span\u003e\n      \u003cdiv class=\"soeb-ar-bar-track\"\u003e\u003cdiv class=\"soeb-ar-bar-fill\" style=\"width:55%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n      \u003cspan class=\"soeb-ar-bar-val\"\u003eBalanced\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"soeb-ar-bar-row\"\u003e\n      \u003cspan class=\"soeb-ar-bar-name\"\u003eSweetness\u003c\/span\u003e\n      \u003cdiv class=\"soeb-ar-bar-track\"\u003e\u003cdiv class=\"soeb-ar-bar-fill soeb-ar-bar-fill--accent\" style=\"width:70%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n      \u003cspan class=\"soeb-ar-bar-val\"\u003eHigh\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"soeb-ar-bar-row\"\u003e\n      \u003cspan class=\"soeb-ar-bar-name\"\u003eClarity\u003c\/span\u003e\n      \u003cdiv class=\"soeb-ar-bar-track\"\u003e\u003cdiv class=\"soeb-ar-bar-fill\" style=\"width:90%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n      \u003cspan class=\"soeb-ar-bar-val\"\u003eVery high\u003c\/span\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"soeb-ar-tags\" aria-label=\"Tasting notes\"\u003e\n      \u003cspan class=\"soeb-ar-tag\"\u003eOrange\u003c\/span\u003e\n      \u003cspan class=\"soeb-ar-tag\"\u003eGrape\u003c\/span\u003e\n      \u003cspan class=\"soeb-ar-tag\"\u003eOrange blossom\u003c\/span\u003e\n      \u003cspan class=\"soeb-ar-tag\"\u003eCocoa\u003c\/span\u003e\n      \u003cspan class=\"soeb-ar-tag\"\u003eHoney\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ACCORDION 1 — Origin \u0026 Craft --\u003e\n  \u003cdiv class=\"soeb-ar-accordion\"\u003e\n    \u003cbutton class=\"soeb-ar-acc-btn\" aria-expanded=\"false\" onclick=\"soebArToggle(this)\"\u003e\n      Origin \u0026amp; craft\n      \u003csvg class=\"soeb-ar-acc-icon\" viewbox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"\u003e\u003cpath d=\"M4.5 6.75l4.5 4.5 4.5-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003c\/button\u003e\n    \u003cdiv class=\"soeb-ar-acc-body\" role=\"region\"\u003e\n      \u003cdiv class=\"soeb-ar-acc-inner\"\u003e\n\n        \u003cdiv class=\"soeb-ar-farmer\"\u003e\n          \u003cdiv class=\"soeb-ar-farmer-avatar\"\u003eOK\u003c\/div\u003e\n          \u003cdiv\u003e\n            \u003cdiv class=\"soeb-ar-farmer-name\"\u003eOlive Kishero\u003c\/div\u003e\n            \u003cdiv class=\"soeb-ar-farmer-detail\"\u003eCoffee producer · Bulambuli \u0026amp; Buginyanya, Elgon region · Uganda\u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"soeb-ar-origin-card\"\u003e\n          \u003cdiv class=\"soeb-ar-origin-head\"\u003e\n            \u003cspan class=\"soeb-ar-origin-title\"\u003eArabica — Elgon Highlands\u003c\/span\u003e\n            \u003cspan class=\"soeb-ar-score-pill\"\u003e87 SCA\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"soeb-ar-origin-detail\"\u003e2,100m altitude · Washed process · AA grade · Single origin, single farm\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"soeb-ar-process-note\"\u003e\n          Washed processing removes the fruit before drying, producing the clean, bright and clearly defined flavours that make this coffee so expressive. Every batch is cupped and approved with Ugandan Q-graders before release.\n        \u003c\/div\u003e\n\n        \u003cp style=\"margin-top:0.85rem;font-size:13px;line-height:1.7;\"\u003eEvery step — from harvest to roast — happens in Uganda. We work directly with Olive and leading local Q-graders to refine roast profiles that express origin truthfully, not convenience.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ACCORDION 2 — How to Brew --\u003e\n  \u003cdiv class=\"soeb-ar-accordion\"\u003e\n    \u003cbutton class=\"soeb-ar-acc-btn\" aria-expanded=\"false\" onclick=\"soebArToggle(this)\"\u003e\n      How to brew\n      \u003csvg class=\"soeb-ar-acc-icon\" viewbox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"\u003e\u003cpath d=\"M4.5 6.75l4.5 4.5 4.5-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003c\/button\u003e\n    \u003cdiv class=\"soeb-ar-acc-body\" role=\"region\"\u003e\n      \u003cdiv class=\"soeb-ar-acc-inner\"\u003e\n        \u003cdiv class=\"soeb-ar-brew-grid\"\u003e\n          \u003cdiv class=\"soeb-ar-brew-card\"\u003e\n            \u003cdiv class=\"soeb-ar-brew-label\"\u003eWater temperature\u003c\/div\u003e\n            \u003cdiv class=\"soeb-ar-brew-val\"\u003e92–96°C\u003c\/div\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"soeb-ar-brew-card\"\u003e\n            \u003cdiv class=\"soeb-ar-brew-label\"\u003eRatio\u003c\/div\u003e\n            \u003cdiv class=\"soeb-ar-brew-val\"\u003e15–17g \/ 250ml\u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"soeb-ar-methods\" aria-label=\"Brew methods\"\u003e\n          \u003cspan class=\"soeb-ar-method\"\u003ePour-over · medium grind\u003c\/span\u003e\n          \u003cspan class=\"soeb-ar-method\"\u003eFrench press · medium-coarse\u003c\/span\u003e\n          \u003cspan class=\"soeb-ar-method\"\u003eAeroPress · medium-fine\u003c\/span\u003e\n          \u003cspan class=\"soeb-ar-method\"\u003eMoka pot · fine\u003c\/span\u003e\n        \u003c\/div\u003e\n        \u003cp style=\"font-size:12.5px;color:var(--espresso-light);line-height:1.6;margin-top:0.75rem;\"\u003eThe clean washed profile shines brightest in pour-over or filter — though it brews well across all methods. Taste it black first to appreciate its full clarity.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ACCORDION 3 — Is this right for me? --\u003e\n  \u003cdiv class=\"soeb-ar-accordion\"\u003e\n    \u003cbutton class=\"soeb-ar-acc-btn\" aria-expanded=\"false\" onclick=\"soebArToggle(this)\"\u003e\n      Is this right for me?\n      \u003csvg class=\"soeb-ar-acc-icon\" viewbox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"\u003e\u003cpath d=\"M4.5 6.75l4.5 4.5 4.5-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003c\/button\u003e\n    \u003cdiv class=\"soeb-ar-acc-body\" role=\"region\"\u003e\n      \u003cdiv class=\"soeb-ar-acc-inner\"\u003e\n        \u003cul class=\"soeb-ar-fit-list\"\u003e\n          \u003cli\u003eYou prefer smooth, balanced coffee with gentle fruit notes\u003c\/li\u003e\n          \u003cli\u003eYou appreciate clarity, structure and restraint in the cup\u003c\/li\u003e\n          \u003cli\u003eYou usually drink black, or with just a touch of milk\u003c\/li\u003e\n          \u003cli\u003eYou care where your coffee comes from and who grew it\u003c\/li\u003e\n          \u003cli\u003eYou want to taste what high-altitude Ugandan Arabica can really be\u003c\/li\u003e\n        \u003c\/ul\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ACCORDION 4 — Freshness \u0026 Storage --\u003e\n  \u003cdiv class=\"soeb-ar-accordion\"\u003e\n    \u003cbutton class=\"soeb-ar-acc-btn\" aria-expanded=\"false\" onclick=\"soebArToggle(this)\"\u003e\n      Freshness \u0026amp; storage\n      \u003csvg class=\"soeb-ar-acc-icon\" viewbox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"\u003e\u003cpath d=\"M4.5 6.75l4.5 4.5 4.5-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003c\/button\u003e\n    \u003cdiv class=\"soeb-ar-acc-body\" role=\"region\"\u003e\n      \u003cdiv class=\"soeb-ar-acc-inner\"\u003e\n        \u003cp\u003eYour 250g bag is roasted at origin and carries a roast date — so you always know exactly what you're drinking.\u003c\/p\u003e\n        \u003cdiv class=\"soeb-ar-freshness-note\"\u003e\n          Store sealed in a cool, dry place away from sunlight and strong odours. Once opened, best enjoyed within 4–6 weeks.\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ACCORDION 5 — FAQs --\u003e\n  \u003cdiv class=\"soeb-ar-accordion\"\u003e\n    \u003cbutton class=\"soeb-ar-acc-btn\" aria-expanded=\"false\" onclick=\"soebArToggle(this)\"\u003e\n      Questions \u0026amp; answers\n      \u003csvg class=\"soeb-ar-acc-icon\" viewbox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"\u003e\u003cpath d=\"M4.5 6.75l4.5 4.5 4.5-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003c\/button\u003e\n    \u003cdiv class=\"soeb-ar-acc-body\" role=\"region\"\u003e\n      \u003cdiv class=\"soeb-ar-acc-inner\"\u003e\n\n        \u003cdiv class=\"soeb-ar-faq-item\"\u003e\n          \u003cdiv class=\"soeb-ar-faq-q\"\u003eWhat makes this Ugandan Arabica distinctive?\u003c\/div\u003e\n          \u003cdiv class=\"soeb-ar-faq-a\"\u003eIt's high-altitude, single-origin Arabica grown by a named farmer — Olive Kishero — and washed processed for clarity. Roasted at source and selected for balance, it offers a refined expression of Ugandan Arabica rather than a generic profile.\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"soeb-ar-faq-item\"\u003e\n          \u003cdiv class=\"soeb-ar-faq-q\"\u003eWhat does washed process mean?\u003c\/div\u003e\n          \u003cdiv class=\"soeb-ar-faq-a\"\u003eWashed (or wet) processing removes the fruit from the coffee bean before drying. This produces a cleaner, brighter cup with well-defined flavours — which is why this coffee has such clear orange, grape and floral notes rather than the heavier sweetness of a natural-process coffee.\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"soeb-ar-faq-item\"\u003e\n          \u003cdiv class=\"soeb-ar-faq-q\"\u003eWhat is an AA grade coffee?\u003c\/div\u003e\n          \u003cdiv class=\"soeb-ar-faq-a\"\u003eAA is the highest screen size grading for East African Arabica, indicating large, uniformly sized beans. Larger beans tend to roast more evenly, contributing to a cleaner and more consistent flavour in the cup.\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"soeb-ar-faq-item\"\u003e\n          \u003cdiv class=\"soeb-ar-faq-q\"\u003eIs this suitable for everyday drinking?\u003c\/div\u003e\n          \u003cdiv class=\"soeb-ar-faq-a\"\u003eYes. It's designed to be enjoyed daily — approachable, balanced and easy to brew without specialist equipment. The kind of coffee that rewards attention but doesn't demand it.\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"soeb-ar-faq-item\"\u003e\n          \u003cdiv class=\"soeb-ar-faq-q\"\u003eDoes it work with milk?\u003c\/div\u003e\n          \u003cdiv class=\"soeb-ar-faq-a\"\u003eYes, though it's best appreciated black. The clarity and fruit notes are most expressive without milk, but it holds its character well with a small amount.\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"soeb-ar-faq-item\"\u003e\n          \u003cdiv class=\"soeb-ar-faq-q\"\u003eHow fresh is the coffee when it arrives?\u003c\/div\u003e\n          \u003cdiv class=\"soeb-ar-faq-a\"\u003eWe dispatch within 72 hours of roasting. Every bag is roast-dated so you can track freshness from the day it was roasted, not the day it was shipped.\u003c\/div\u003e\n        \u003c\/div\u003e\n\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  function soebArToggle(btn) {\n    var body = btn.nextElementSibling;\n    var icon = btn.querySelector('.soeb-ar-acc-icon');\n    var isOpen = body.classList.contains('is-open');\n    body.classList.toggle('is-open', !isOpen);\n    icon.classList.toggle('is-open', !isOpen);\n    btn.setAttribute('aria-expanded', String(!isOpen));\n  }\n\u003c\/script\u003e","brand":"SOEB \u0026 Co.","offers":[{"title":"Medium \/ Ground","offer_id":56504087445881,"sku":"SCO06051","price":13.99,"currency_code":"GBP","in_stock":true},{"title":"Medium \/ Whole bean","offer_id":56675068739961,"sku":"SCO06052","price":13.99,"currency_code":"GBP","in_stock":true},{"title":"Dark \/ Ground","offer_id":56504087478649,"sku":"SCO06053","price":13.99,"currency_code":"GBP","in_stock":true},{"title":"Dark \/ Whole bean","offer_id":56675068772729,"sku":"SCO06054","price":13.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0959\/1042\/9049\/files\/SOEB_Arabica_5993baae-3a8f-4606-afb3-858da4b40527.jpg?v=1778522297"},{"product_id":"soeb-robusta-uganda","title":"Robusta","description":"\u003cstyle\u003e\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Archivo+Black\u0026display=swap');\n\n  .soeb-rb {\n    --espresso: #3b2e26;\n    --espresso-mid: #6b4c3b;\n    --espresso-light: #9a7060;\n    --cream: #fff9eb;\n    --blush: #edc3ae;\n    --blush-light: rgba(237,195,174,0.18);\n    --border: rgba(59,46,38,0.1);\n    --text-muted: rgba(59,46,38,0.62);\n    font-family: inherit;\n    color: var(--espresso);\n    max-width: 680px;\n  }\n\n  .soeb-rb * { box-sizing: border-box; margin: 0; padding: 0; }\n\n  \/* ── Intro ── *\/\n  .soeb-rb-intro {\n    font-size: 15px;\n    line-height: 1.75;\n    color: var(--text-muted);\n    padding: 1.25rem 0 1.5rem;\n    border-bottom: 0.5px solid var(--border);\n  }\n\n  \/* ── At a glance ── *\/\n  .soeb-rb-glance {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 10px;\n    padding: 1.25rem 0;\n    border-bottom: 0.5px solid var(--border);\n  }\n\n  .soeb-rb-glance-item {\n    display: flex;\n    align-items: flex-start;\n    gap: 9px;\n    font-size: 13.5px;\n    line-height: 1.45;\n    color: var(--espresso);\n  }\n\n  .soeb-rb-glance-dot {\n    width: 6px;\n    height: 6px;\n    border-radius: 50%;\n    background: var(--espresso-mid);\n    flex-shrink: 0;\n    margin-top: 5px;\n  }\n\n  \/* ── Flavour bars ── *\/\n  .soeb-rb-flavour {\n    padding: 1.5rem 0;\n    border-bottom: 0.5px solid var(--border);\n  }\n\n  .soeb-rb-section-label {\n    font-size: 10px;\n    text-transform: uppercase;\n    letter-spacing: 0.1em;\n    color: var(--espresso-light);\n    margin-bottom: 1rem;\n  }\n\n  .soeb-rb-bar-row {\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    margin-bottom: 11px;\n  }\n\n  .soeb-rb-bar-name {\n    font-size: 12.5px;\n    color: var(--espresso);\n    width: 72px;\n    flex-shrink: 0;\n  }\n\n  .soeb-rb-bar-track {\n    flex: 1;\n    height: 4px;\n    background: var(--border);\n    border-radius: 2px;\n    overflow: hidden;\n  }\n\n  .soeb-rb-bar-fill {\n    height: 100%;\n    border-radius: 2px;\n    background: var(--espresso);\n  }\n\n  .soeb-rb-bar-fill--accent { background: var(--blush); }\n\n  .soeb-rb-bar-val {\n    font-size: 11px;\n    color: var(--espresso-light);\n    width: 52px;\n    text-align: right;\n    flex-shrink: 0;\n  }\n\n  .soeb-rb-tags {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 6px;\n    margin-top: 1rem;\n  }\n\n  .soeb-rb-tag {\n    padding: 4px 11px;\n    background: var(--blush-light);\n    border: 0.5px solid rgba(237,195,174,0.45);\n    border-radius: 20px;\n    font-size: 12px;\n    color: var(--espresso);\n  }\n\n  \/* ── Brew uses ── *\/\n  .soeb-rb-uses {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 7px;\n    margin-top: 0.75rem;\n  }\n\n  .soeb-rb-use-tag {\n    padding: 5px 11px;\n    border: 0.5px solid rgba(59,46,38,0.18);\n    border-radius: 6px;\n    font-size: 12px;\n    color: var(--espresso);\n  }\n\n  \/* ── Accordion ── *\/\n  .soeb-rb-accordion {\n    border-bottom: 0.5px solid var(--border);\n  }\n\n  .soeb-rb-acc-btn {\n    width: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    padding: 1rem 0;\n    background: transparent;\n    border: none;\n    font-family: 'Archivo Black', sans-serif;\n    font-size: 13px;\n    font-weight: 400;\n    text-transform: uppercase;\n    letter-spacing: 0.08em;\n    color: var(--espresso);\n    cursor: pointer;\n    text-align: left;\n  }\n\n  .soeb-rb-acc-btn:hover { color: var(--espresso-mid); }\n\n  .soeb-rb-acc-icon {\n    width: 18px;\n    height: 18px;\n    flex-shrink: 0;\n    transition: transform 0.25s ease;\n    color: var(--espresso-light);\n  }\n\n  .soeb-rb-acc-icon.is-open { transform: rotate(180deg); }\n\n  .soeb-rb-acc-body {\n    overflow: hidden;\n    max-height: 0;\n    transition: max-height 0.35s ease;\n  }\n\n  .soeb-rb-acc-body.is-open { max-height: 700px; }\n\n  .soeb-rb-acc-inner {\n    padding-bottom: 1.25rem;\n    font-size: 13.5px;\n    line-height: 1.7;\n    color: var(--text-muted);\n  }\n\n  \/* ── Origin card ── *\/\n  .soeb-rb-origin-card {\n    background: rgba(59,46,38,0.03);\n    border: 0.5px solid var(--border);\n    border-radius: 8px;\n    padding: 13px 14px;\n  }\n\n  .soeb-rb-origin-head {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    margin-bottom: 5px;\n  }\n\n  .soeb-rb-origin-title {\n    font-size: 12px;\n    font-weight: 500;\n    text-transform: uppercase;\n    letter-spacing: 0.07em;\n    color: var(--espresso-mid);\n  }\n\n  .soeb-rb-score-pill {\n    font-size: 11px;\n    padding: 2px 8px;\n    background: var(--espresso);\n    color: var(--cream);\n    border-radius: 20px;\n  }\n\n  .soeb-rb-origin-detail {\n    font-size: 12.5px;\n    color: var(--text-muted);\n    line-height: 1.55;\n  }\n\n  \/* ── Brew grid ── *\/\n  .soeb-rb-brew-grid {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 8px;\n    margin-bottom: 1rem;\n  }\n\n  .soeb-rb-brew-card {\n    background: rgba(59,46,38,0.03);\n    border: 0.5px solid var(--border);\n    border-radius: 8px;\n    padding: 10px 13px;\n  }\n\n  .soeb-rb-brew-label {\n    font-size: 10px;\n    text-transform: uppercase;\n    letter-spacing: 0.07em;\n    color: var(--espresso-light);\n    margin-bottom: 4px;\n  }\n\n  .soeb-rb-brew-val {\n    font-size: 13.5px;\n    font-weight: 500;\n    color: var(--espresso);\n  }\n\n  .soeb-rb-brew-list {\n    list-style: none;\n    padding: 0;\n  }\n\n  .soeb-rb-brew-list li {\n    display: flex;\n    align-items: flex-start;\n    gap: 9px;\n    font-size: 13.5px;\n    color: var(--text-muted);\n    line-height: 1.5;\n    margin-bottom: 8px;\n  }\n\n  .soeb-rb-brew-list li::before {\n    content: '';\n    width: 5px;\n    height: 5px;\n    border-radius: 50%;\n    background: var(--espresso-light);\n    flex-shrink: 0;\n    margin-top: 6px;\n  }\n\n  \/* ── Caffeine callout ── *\/\n  .soeb-rb-caffeine-note {\n    background: rgba(59,46,38,0.04);\n    border: 0.5px solid var(--border);\n    border-left: 3px solid var(--espresso-mid);\n    border-radius: 0 8px 8px 0;\n    padding: 11px 13px;\n    font-size: 13px;\n    color: var(--espresso);\n    line-height: 1.6;\n    margin-top: 0.75rem;\n  }\n\n  \/* ── Fit list ── *\/\n  .soeb-rb-fit-list {\n    list-style: none;\n    padding: 0;\n  }\n\n  .soeb-rb-fit-list li {\n    display: flex;\n    align-items: flex-start;\n    gap: 9px;\n    font-size: 13.5px;\n    line-height: 1.5;\n    color: var(--text-muted);\n    margin-bottom: 9px;\n  }\n\n  .soeb-rb-fit-list li::before {\n    content: '';\n    width: 5px;\n    height: 5px;\n    border-radius: 50%;\n    background: var(--blush);\n    flex-shrink: 0;\n    margin-top: 6px;\n  }\n\n  \/* ── Freshness note ── *\/\n  .soeb-rb-freshness-note {\n    background: var(--blush-light);\n    border: 0.5px solid rgba(237,195,174,0.4);\n    border-radius: 8px;\n    padding: 12px 14px;\n    font-size: 13px;\n    color: var(--espresso);\n    line-height: 1.6;\n    margin-top: 0.5rem;\n  }\n\n  \/* ── FAQ ── *\/\n  .soeb-rb-faq-item {\n    padding-bottom: 1rem;\n    margin-bottom: 1rem;\n    border-bottom: 0.5px solid rgba(59,46,38,0.07);\n  }\n\n  .soeb-rb-faq-item:last-child { border-bottom: none; margin-bottom: 0; padding-bottom: 0; }\n\n  .soeb-rb-faq-q {\n    font-size: 13.5px;\n    font-weight: 500;\n    color: var(--espresso);\n    margin-bottom: 5px;\n  }\n\n  .soeb-rb-faq-a {\n    font-size: 13px;\n    color: var(--text-muted);\n    line-height: 1.65;\n  }\n\n  \/* ── Responsive ── *\/\n  @media (max-width: 480px) {\n    .soeb-rb-glance { grid-template-columns: 1fr; }\n    .soeb-rb-brew-grid { grid-template-columns: 1fr; }\n  }\n\u003c\/style\u003e\n\n\u003cdiv class=\"soeb-rb\"\u003e\n\n  \u003c!-- Intro --\u003e\n  \u003cp class=\"soeb-rb-intro\"\u003e\n    SOEB Robusta is a single-origin, naturally processed Ugandan Robusta from the Masaka region. Bold, grounding and full-bodied, it is crafted for those who enjoy a rich, satisfying cup with real depth and presence. Profiled to highlight sweetness, structure and balance rather than bitterness — this is Robusta, refined.\n  \u003c\/p\u003e\n\n  \u003c!-- At a Glance --\u003e\n  \u003cdiv class=\"soeb-rb-glance\" aria-label=\"Product highlights\"\u003e\n    \u003cdiv class=\"soeb-rb-glance-item\"\u003e\n\u003cspan class=\"soeb-rb-glance-dot\"\u003e\u003c\/span\u003e100% single-origin Ugandan Robusta\u003c\/div\u003e\n    \u003cdiv class=\"soeb-rb-glance-item\"\u003e\n\u003cspan class=\"soeb-rb-glance-dot\"\u003e\u003c\/span\u003eMasaka region · 1,200m altitude\u003c\/div\u003e\n    \u003cdiv class=\"soeb-rb-glance-item\"\u003e\n\u003cspan class=\"soeb-rb-glance-dot\"\u003e\u003c\/span\u003eGrown by Kiganda \/ Mark · natural process\u003c\/div\u003e\n    \u003cdiv class=\"soeb-rb-glance-item\"\u003e\n\u003cspan class=\"soeb-rb-glance-dot\"\u003e\u003c\/span\u003e84 SCA cupping score\u003c\/div\u003e\n    \u003cdiv class=\"soeb-rb-glance-item\"\u003e\n\u003cspan class=\"soeb-rb-glance-dot\"\u003e\u003c\/span\u003eRoasted at origin for body and clarity\u003c\/div\u003e\n    \u003cdiv class=\"soeb-rb-glance-item\"\u003e\n\u003cspan class=\"soeb-rb-glance-dot\"\u003e\u003c\/span\u003eExcellent with milk and bold brew styles\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- Flavour Profile --\u003e\n  \u003cdiv class=\"soeb-rb-flavour\"\u003e\n    \u003cdiv class=\"soeb-rb-section-label\"\u003eFlavour profile\u003c\/div\u003e\n\n    \u003cdiv class=\"soeb-rb-bar-row\"\u003e\n      \u003cspan class=\"soeb-rb-bar-name\"\u003eBody\u003c\/span\u003e\n      \u003cdiv class=\"soeb-rb-bar-track\"\u003e\u003cdiv class=\"soeb-rb-bar-fill\" style=\"width:92%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n      \u003cspan class=\"soeb-rb-bar-val\"\u003eFull\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"soeb-rb-bar-row\"\u003e\n      \u003cspan class=\"soeb-rb-bar-name\"\u003eAcidity\u003c\/span\u003e\n      \u003cdiv class=\"soeb-rb-bar-track\"\u003e\u003cdiv class=\"soeb-rb-bar-fill\" style=\"width:22%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n      \u003cspan class=\"soeb-rb-bar-val\"\u003eLow\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"soeb-rb-bar-row\"\u003e\n      \u003cspan class=\"soeb-rb-bar-name\"\u003eSweetness\u003c\/span\u003e\n      \u003cdiv class=\"soeb-rb-bar-track\"\u003e\u003cdiv class=\"soeb-rb-bar-fill soeb-rb-bar-fill--accent\" style=\"width:65%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n      \u003cspan class=\"soeb-rb-bar-val\"\u003eMed–High\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"soeb-rb-bar-row\"\u003e\n      \u003cspan class=\"soeb-rb-bar-name\"\u003eFinish\u003c\/span\u003e\n      \u003cdiv class=\"soeb-rb-bar-track\"\u003e\u003cdiv class=\"soeb-rb-bar-fill\" style=\"width:88%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n      \u003cspan class=\"soeb-rb-bar-val\"\u003eLong\u003c\/span\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"soeb-rb-tags\" aria-label=\"Tasting notes\"\u003e\n      \u003cspan class=\"soeb-rb-tag\"\u003eDark chocolate\u003c\/span\u003e\n      \u003cspan class=\"soeb-rb-tag\"\u003eBrown sugar\u003c\/span\u003e\n      \u003cspan class=\"soeb-rb-tag\"\u003eFloral\u003c\/span\u003e\n      \u003cspan class=\"soeb-rb-tag\"\u003eCreamy\u003c\/span\u003e\n      \u003cspan class=\"soeb-rb-tag\"\u003eSoft fruit\u003c\/span\u003e\n      \u003cspan class=\"soeb-rb-tag\"\u003eBrown spice\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ACCORDION 1 — Origin \u0026 Craft --\u003e\n  \u003cdiv class=\"soeb-rb-accordion\"\u003e\n    \u003cbutton class=\"soeb-rb-acc-btn\" aria-expanded=\"false\" onclick=\"soebRbToggle(this)\"\u003e\n      Origin \u0026amp; craft\n      \u003csvg class=\"soeb-rb-acc-icon\" viewbox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"\u003e\u003cpath d=\"M4.5 6.75l4.5 4.5 4.5-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003c\/button\u003e\n    \u003cdiv class=\"soeb-rb-acc-body\" role=\"region\"\u003e\n      \u003cdiv class=\"soeb-rb-acc-inner\"\u003e\n        \u003cdiv class=\"soeb-rb-origin-card\"\u003e\n          \u003cdiv class=\"soeb-rb-origin-head\"\u003e\n            \u003cspan class=\"soeb-rb-origin-title\"\u003eRobusta — Masaka Region, Uganda\u003c\/span\u003e\n            \u003cspan class=\"soeb-rb-score-pill\"\u003e84 SCA\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"soeb-rb-origin-detail\"\u003eGrown by Kiganda \/ Mark · 1,200m altitude · Natural process · Developed with Ugandan Q-graders and processing specialists\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cp style=\"margin-top:0.85rem;font-size:13px;line-height:1.7;\"\u003eEvery batch is developed in collaboration with Uganda's leading Q-graders to highlight balance over bitterness and sweetness over strength. By roasting at origin, clarity and freshness are preserved — offering a profile rarely seen in Robusta today.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ACCORDION 2 — How to Brew --\u003e\n  \u003cdiv class=\"soeb-rb-accordion\"\u003e\n    \u003cbutton class=\"soeb-rb-acc-btn\" aria-expanded=\"false\" onclick=\"soebRbToggle(this)\"\u003e\n      How to brew\n      \u003csvg class=\"soeb-rb-acc-icon\" viewbox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"\u003e\u003cpath d=\"M4.5 6.75l4.5 4.5 4.5-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003c\/button\u003e\n    \u003cdiv class=\"soeb-rb-acc-body\" role=\"region\"\u003e\n      \u003cdiv class=\"soeb-rb-acc-inner\"\u003e\n        \u003cdiv class=\"soeb-rb-brew-grid\"\u003e\n          \u003cdiv class=\"soeb-rb-brew-card\"\u003e\n            \u003cdiv class=\"soeb-rb-brew-label\"\u003eWater temperature\u003c\/div\u003e\n            \u003cdiv class=\"soeb-rb-brew-val\"\u003e92–96°C\u003c\/div\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"soeb-rb-brew-card\"\u003e\n            \u003cdiv class=\"soeb-rb-brew-label\"\u003eRatio\u003c\/div\u003e\n            \u003cdiv class=\"soeb-rb-brew-val\"\u003e16–18g \/ 250ml\u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cul class=\"soeb-rb-brew-list\"\u003e\n          \u003cli\u003eFilter or French press · medium grind\u003c\/li\u003e\n          \u003cli\u003eMoka pot or espresso · fine grind\u003c\/li\u003e\n        \u003c\/ul\u003e\n        \u003cp style=\"font-size:12.5px;color:var(--espresso-light);margin-top:0.5rem 0 0.75rem;\"\u003eWorks particularly well as:\u003c\/p\u003e\n        \u003cdiv class=\"soeb-rb-uses\" aria-label=\"Best served as\"\u003e\n          \u003cspan class=\"soeb-rb-use-tag\"\u003eFlat white\u003c\/span\u003e\n          \u003cspan class=\"soeb-rb-use-tag\"\u003eLatte\u003c\/span\u003e\n          \u003cspan class=\"soeb-rb-use-tag\"\u003eCappuccino\u003c\/span\u003e\n          \u003cspan class=\"soeb-rb-use-tag\"\u003eIced latte\u003c\/span\u003e\n          \u003cspan class=\"soeb-rb-use-tag\"\u003eShort, strong cup\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ACCORDION 3 — Is this right for me? --\u003e\n  \u003cdiv class=\"soeb-rb-accordion\"\u003e\n    \u003cbutton class=\"soeb-rb-acc-btn\" aria-expanded=\"false\" onclick=\"soebRbToggle(this)\"\u003e\n      Is this right for me?\n      \u003csvg class=\"soeb-rb-acc-icon\" viewbox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"\u003e\u003cpath d=\"M4.5 6.75l4.5 4.5 4.5-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003c\/button\u003e\n    \u003cdiv class=\"soeb-rb-acc-body\" role=\"region\"\u003e\n      \u003cdiv class=\"soeb-rb-acc-inner\"\u003e\n        \u003cul class=\"soeb-rb-fit-list\"\u003e\n          \u003cli\u003eYou enjoy bold, full-bodied coffee with real presence\u003c\/li\u003e\n          \u003cli\u003eYou want a strong caffeine boost without harsh bitterness\u003c\/li\u003e\n          \u003cli\u003eYou regularly drink with milk and want flavour that carries through\u003c\/li\u003e\n          \u003cli\u003eYou prefer lower acidity and richer, creamier textures\u003c\/li\u003e\n          \u003cli\u003eYou want to explore what Ugandan Robusta can really be, beyond supermarket blends\u003c\/li\u003e\n        \u003c\/ul\u003e\n        \u003cdiv class=\"soeb-rb-caffeine-note\"\u003e\n          Robusta naturally contains more caffeine than Arabica — making this a dependable choice for an early morning or a strong afternoon cup.\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ACCORDION 4 — Freshness \u0026 Storage --\u003e\n  \u003cdiv class=\"soeb-rb-accordion\"\u003e\n    \u003cbutton class=\"soeb-rb-acc-btn\" aria-expanded=\"false\" onclick=\"soebRbToggle(this)\"\u003e\n      Freshness \u0026amp; storage\n      \u003csvg class=\"soeb-rb-acc-icon\" viewbox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"\u003e\u003cpath d=\"M4.5 6.75l4.5 4.5 4.5-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003c\/button\u003e\n    \u003cdiv class=\"soeb-rb-acc-body\" role=\"region\"\u003e\n      \u003cdiv class=\"soeb-rb-acc-inner\"\u003e\n        \u003cp\u003eYour 250g bag is roasted at origin and carries a roast date — so you always know exactly what you're drinking.\u003c\/p\u003e\n        \u003cdiv class=\"soeb-rb-freshness-note\"\u003e\n          Store sealed in a cool, dry place away from heat and strong odours. Once opened, best enjoyed within 4–6 weeks.\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ACCORDION 5 — FAQs --\u003e\n  \u003cdiv class=\"soeb-rb-accordion\"\u003e\n    \u003cbutton class=\"soeb-rb-acc-btn\" aria-expanded=\"false\" onclick=\"soebRbToggle(this)\"\u003e\n      Questions \u0026amp; answers\n      \u003csvg class=\"soeb-rb-acc-icon\" viewbox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"\u003e\u003cpath d=\"M4.5 6.75l4.5 4.5 4.5-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003c\/button\u003e\n    \u003cdiv class=\"soeb-rb-acc-body\" role=\"region\"\u003e\n      \u003cdiv class=\"soeb-rb-acc-inner\"\u003e\n\n        \u003cdiv class=\"soeb-rb-faq-item\"\u003e\n          \u003cdiv class=\"soeb-rb-faq-q\"\u003eWhat makes this Ugandan Robusta distinctive?\u003c\/div\u003e\n          \u003cdiv class=\"soeb-rb-faq-a\"\u003eIt's a natural-process, single-origin Robusta grown at 1,200m in Masaka by a named producer. Selected for sweetness and creamy depth, it represents the refined side of Ugandan Robusta — not the bitter stereotype.\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"soeb-rb-faq-item\"\u003e\n          \u003cdiv class=\"soeb-rb-faq-q\"\u003eIs Robusta stronger than Arabica?\u003c\/div\u003e\n          \u003cdiv class=\"soeb-rb-faq-a\"\u003eRobusta naturally contains more caffeine and produces a fuller body. This one is carefully roasted to stay balanced and drinkable — bold without being harsh.\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"soeb-rb-faq-item\"\u003e\n          \u003cdiv class=\"soeb-rb-faq-q\"\u003eDoes it work well with milk?\u003c\/div\u003e\n          \u003cdiv class=\"soeb-rb-faq-a\"\u003eYes — this is one of its strengths. The full body and natural sweetness hold up beautifully in flat whites, lattes and cappuccinos. It also drinks smoothly black for those who prefer it.\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"soeb-rb-faq-item\"\u003e\n          \u003cdiv class=\"soeb-rb-faq-q\"\u003eIs this suitable for everyday drinking?\u003c\/div\u003e\n          \u003cdiv class=\"soeb-rb-faq-a\"\u003eAbsolutely. The profile was developed to be dependable and comforting — strong enough to anchor your morning, smooth enough to enjoy any time of day.\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"soeb-rb-faq-item\"\u003e\n          \u003cdiv class=\"soeb-rb-faq-q\"\u003eWhat is a natural process coffee?\u003c\/div\u003e\n          \u003cdiv class=\"soeb-rb-faq-a\"\u003eNatural processing means the coffee fruit dries around the bean before it's removed. This adds fruit-forward sweetness and body to the final cup — contributing to the brown sugar and soft fruit notes in this profile.\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"soeb-rb-faq-item\"\u003e\n          \u003cdiv class=\"soeb-rb-faq-q\"\u003eHow fresh is the coffee when it arrives?\u003c\/div\u003e\n          \u003cdiv class=\"soeb-rb-faq-a\"\u003eWe dispatch within 72 hours of roasting. Every bag is roast-dated so you can track freshness from the day it was roasted, not the day it was shipped.\u003c\/div\u003e\n        \u003c\/div\u003e\n\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  function soebRbToggle(btn) {\n    var body = btn.nextElementSibling;\n    var icon = btn.querySelector('.soeb-rb-acc-icon');\n    var isOpen = body.classList.contains('is-open');\n    body.classList.toggle('is-open', !isOpen);\n    icon.classList.toggle('is-open', !isOpen);\n    btn.setAttribute('aria-expanded', String(!isOpen));\n  }\n\u003c\/script\u003e","brand":"SOEB \u0026 Co.","offers":[{"title":"Dark \/ Whole bean","offer_id":56504111137145,"sku":"SCO060512","price":13.99,"currency_code":"GBP","in_stock":true},{"title":"Dark \/ Ground","offer_id":56675227206009,"sku":"SCO060513","price":13.99,"currency_code":"GBP","in_stock":true},{"title":"Medium \/ Whole bean","offer_id":56504111169913,"sku":"SCO060514","price":13.99,"currency_code":"GBP","in_stock":true},{"title":"Medium \/ Ground","offer_id":56675227238777,"sku":"SCO060515","price":13.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0959\/1042\/9049\/files\/SOEB_Robusta_fbad1ed4-5208-49a9-adb2-8e1f77969497.jpg?v=1778522266"},{"product_id":"soeb-signature-blend-uganda","title":"Signature Blend","description":"\u003cstyle\u003e\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Archivo+Black\u0026display=swap');\n\n  .soeb-pd {\n    --espresso: #3b2e26;\n    --espresso-mid: #6b4c3b;\n    --espresso-light: #9a7060;\n    --cream: #fff9eb;\n    --blush: #edc3ae;\n    --blush-light: rgba(237,195,174,0.18);\n    --border: rgba(59,46,38,0.1);\n    --text-muted: rgba(59,46,38,0.62);\n    font-family: inherit;\n    color: var(--espresso);\n    max-width: 680px;\n  }\n\n  .soeb-pd * { box-sizing: border-box; margin: 0; padding: 0; }\n\n  \/* ── Intro blurb ── *\/\n  .soeb-intro {\n    font-size: 15px;\n    line-height: 1.75;\n    color: var(--text-muted);\n    padding: 1.25rem 0 1.5rem;\n    border-bottom: 0.5px solid var(--border);\n  }\n\n  \/* ── At a glance strip ── *\/\n  .soeb-glance {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 10px;\n    padding: 1.25rem 0;\n    border-bottom: 0.5px solid var(--border);\n  }\n\n  .soeb-glance-item {\n    display: flex;\n    align-items: flex-start;\n    gap: 9px;\n    font-size: 13.5px;\n    line-height: 1.45;\n    color: var(--espresso);\n  }\n\n  .soeb-glance-dot {\n    width: 6px;\n    height: 6px;\n    border-radius: 50%;\n    background: var(--blush);\n    flex-shrink: 0;\n    margin-top: 5px;\n  }\n\n  \/* ── Flavour bars ── *\/\n  .soeb-flavour {\n    padding: 1.5rem 0;\n    border-bottom: 0.5px solid var(--border);\n  }\n\n  .soeb-section-label {\n    font-size: 10px;\n    text-transform: uppercase;\n    letter-spacing: 0.1em;\n    color: var(--espresso-light);\n    margin-bottom: 1rem;\n  }\n\n  .soeb-bar-row {\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    margin-bottom: 11px;\n  }\n\n  .soeb-bar-name {\n    font-size: 12.5px;\n    color: var(--espresso);\n    width: 72px;\n    flex-shrink: 0;\n  }\n\n  .soeb-bar-track {\n    flex: 1;\n    height: 4px;\n    background: var(--border);\n    border-radius: 2px;\n    overflow: hidden;\n  }\n\n  .soeb-bar-fill {\n    height: 100%;\n    border-radius: 2px;\n    background: var(--espresso);\n  }\n\n  .soeb-bar-fill--accent { background: var(--blush); }\n\n  .soeb-bar-val {\n    font-size: 11px;\n    color: var(--espresso-light);\n    width: 52px;\n    text-align: right;\n    flex-shrink: 0;\n  }\n\n  .soeb-tags {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 6px;\n    margin-top: 1rem;\n  }\n\n  .soeb-tag {\n    padding: 4px 11px;\n    background: var(--blush-light);\n    border: 0.5px solid rgba(237,195,174,0.45);\n    border-radius: 20px;\n    font-size: 12px;\n    color: var(--espresso);\n  }\n\n  \/* ── Accordion ── *\/\n  .soeb-accordion {\n    border-bottom: 0.5px solid var(--border);\n  }\n\n  .soeb-acc-btn {\n    width: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    padding: 1rem 0;\n    background: transparent;\n    border: none;\n    font-family: 'Archivo Black', sans-serif;\n    font-size: 13px;\n    font-weight: 400;\n    text-transform: uppercase;\n    letter-spacing: 0.08em;\n    color: var(--espresso);\n    cursor: pointer;\n    text-align: left;\n  }\n\n  .soeb-acc-btn:hover { color: var(--espresso-mid); }\n\n  .soeb-acc-icon {\n    width: 18px;\n    height: 18px;\n    flex-shrink: 0;\n    transition: transform 0.25s ease;\n    color: var(--espresso-light);\n  }\n\n  .soeb-acc-icon.is-open { transform: rotate(180deg); }\n\n  .soeb-acc-body {\n    overflow: hidden;\n    max-height: 0;\n    transition: max-height 0.35s ease;\n  }\n\n  .soeb-acc-body.is-open { max-height: 600px; }\n\n  .soeb-acc-inner {\n    padding-bottom: 1.25rem;\n    font-size: 13.5px;\n    line-height: 1.7;\n    color: var(--text-muted);\n  }\n\n  \/* ── Origin cards ── *\/\n  .soeb-origin-card {\n    background: rgba(59,46,38,0.03);\n    border: 0.5px solid var(--border);\n    border-radius: 8px;\n    padding: 13px 14px;\n    margin-bottom: 10px;\n  }\n\n  .soeb-origin-card:last-of-type { margin-bottom: 0; }\n\n  .soeb-origin-head {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    margin-bottom: 5px;\n  }\n\n  .soeb-origin-title {\n    font-size: 12px;\n    font-weight: 500;\n    text-transform: uppercase;\n    letter-spacing: 0.07em;\n    color: var(--espresso-mid);\n  }\n\n  .soeb-score-pill {\n    font-size: 11px;\n    padding: 2px 8px;\n    background: var(--espresso);\n    color: var(--cream);\n    border-radius: 20px;\n  }\n\n  .soeb-origin-detail {\n    font-size: 12.5px;\n    color: var(--text-muted);\n    line-height: 1.55;\n  }\n\n  \/* ── Brew grid ── *\/\n  .soeb-brew-grid {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 8px;\n    margin-bottom: 1rem;\n  }\n\n  .soeb-brew-card {\n    background: rgba(59,46,38,0.03);\n    border: 0.5px solid var(--border);\n    border-radius: 8px;\n    padding: 10px 13px;\n  }\n\n  .soeb-brew-label {\n    font-size: 10px;\n    text-transform: uppercase;\n    letter-spacing: 0.07em;\n    color: var(--espresso-light);\n    margin-bottom: 4px;\n  }\n\n  .soeb-brew-val {\n    font-size: 13.5px;\n    font-weight: 500;\n    color: var(--espresso);\n  }\n\n  .soeb-methods {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 7px;\n  }\n\n  .soeb-method {\n    padding: 5px 11px;\n    border: 0.5px solid rgba(59,46,38,0.18);\n    border-radius: 6px;\n    font-size: 12px;\n    color: var(--espresso);\n  }\n\n  \/* ── Freshness note ── *\/\n  .soeb-freshness-note {\n    background: var(--blush-light);\n    border: 0.5px solid rgba(237,195,174,0.4);\n    border-radius: 8px;\n    padding: 12px 14px;\n    font-size: 13px;\n    color: var(--espresso);\n    line-height: 1.6;\n    margin-top: 0.5rem;\n  }\n\n  \/* ── FAQ ── *\/\n  .soeb-faq-item {\n    padding-bottom: 1rem;\n    margin-bottom: 1rem;\n    border-bottom: 0.5px solid rgba(59,46,38,0.07);\n  }\n\n  .soeb-faq-item:last-child { border-bottom: none; margin-bottom: 0; padding-bottom: 0; }\n\n  .soeb-faq-q {\n    font-size: 13.5px;\n    font-weight: 500;\n    color: var(--espresso);\n    margin-bottom: 5px;\n  }\n\n  .soeb-faq-a {\n    font-size: 13px;\n    color: var(--text-muted);\n    line-height: 1.65;\n  }\n\n  \/* ── \"Is this right for me\" list ── *\/\n  .soeb-fit-list {\n    list-style: none;\n    padding: 0;\n  }\n\n  .soeb-fit-list li {\n    display: flex;\n    align-items: flex-start;\n    gap: 9px;\n    font-size: 13.5px;\n    line-height: 1.5;\n    color: var(--text-muted);\n    margin-bottom: 9px;\n  }\n\n  .soeb-fit-list li::before {\n    content: '';\n    width: 5px;\n    height: 5px;\n    border-radius: 50%;\n    background: var(--blush);\n    flex-shrink: 0;\n    margin-top: 6px;\n  }\n\n  \/* ── Responsive ── *\/\n  @media (max-width: 480px) {\n    .soeb-glance { grid-template-columns: 1fr; }\n    .soeb-brew-grid { grid-template-columns: 1fr; }\n  }\n\u003c\/style\u003e\n\n\u003cdiv class=\"soeb-pd\"\u003e\n\n  \u003c!-- Intro --\u003e\n  \u003cp class=\"soeb-intro\"\u003e\n    Grounded, balanced, and quietly complex. SOEB Signature Blend unites bright, high-altitude Arabica from Elgon with naturally processed Robusta from Masaka — two Ugandan profiles refined separately and blended with care. The result is a cup that feels calm yet full; dependable and deeply enjoyable across every brew method.\n  \u003c\/p\u003e\n\n  \u003c!-- At a Glance --\u003e\n  \u003cdiv class=\"soeb-glance\" aria-label=\"Product highlights\"\u003e\n    \u003cdiv class=\"soeb-glance-item\"\u003e\n\u003cspan class=\"soeb-glance-dot\"\u003e\u003c\/span\u003eArabica \u0026amp; Robusta — Elgon \u0026amp; Masaka, Uganda\u003c\/div\u003e\n    \u003cdiv class=\"soeb-glance-item\"\u003e\n\u003cspan class=\"soeb-glance-dot\"\u003e\u003c\/span\u003eDeveloped with Ugandan Q-graders\u003c\/div\u003e\n    \u003cdiv class=\"soeb-glance-item\"\u003e\n\u003cspan class=\"soeb-glance-dot\"\u003e\u003c\/span\u003eRoasted at origin for sweetness and clarity\u003c\/div\u003e\n    \u003cdiv class=\"soeb-glance-item\"\u003e\n\u003cspan class=\"soeb-glance-dot\"\u003e\u003c\/span\u003eWorks across filter, French press, moka \u0026amp; espresso\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- Flavour Profile --\u003e\n  \u003cdiv class=\"soeb-flavour\"\u003e\n    \u003cdiv class=\"soeb-section-label\"\u003eFlavour profile\u003c\/div\u003e\n\n    \u003cdiv class=\"soeb-bar-row\"\u003e\n      \u003cspan class=\"soeb-bar-name\"\u003eBody\u003c\/span\u003e\n      \u003cdiv class=\"soeb-bar-track\"\u003e\u003cdiv class=\"soeb-bar-fill\" style=\"width:78%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n      \u003cspan class=\"soeb-bar-val\"\u003eMed–Full\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"soeb-bar-row\"\u003e\n      \u003cspan class=\"soeb-bar-name\"\u003eAcidity\u003c\/span\u003e\n      \u003cdiv class=\"soeb-bar-track\"\u003e\u003cdiv class=\"soeb-bar-fill\" style=\"width:38%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n      \u003cspan class=\"soeb-bar-val\"\u003eLow–Med\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"soeb-bar-row\"\u003e\n      \u003cspan class=\"soeb-bar-name\"\u003eSweetness\u003c\/span\u003e\n      \u003cdiv class=\"soeb-bar-track\"\u003e\u003cdiv class=\"soeb-bar-fill soeb-bar-fill--accent\" style=\"width:74%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n      \u003cspan class=\"soeb-bar-val\"\u003eHigh\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"soeb-bar-row\"\u003e\n      \u003cspan class=\"soeb-bar-name\"\u003eFinish\u003c\/span\u003e\n      \u003cdiv class=\"soeb-bar-track\"\u003e\u003cdiv class=\"soeb-bar-fill\" style=\"width:82%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n      \u003cspan class=\"soeb-bar-val\"\u003eLasting\u003c\/span\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"soeb-tags\" aria-label=\"Tasting notes\"\u003e\n      \u003cspan class=\"soeb-tag\"\u003eDark chocolate\u003c\/span\u003e\n      \u003cspan class=\"soeb-tag\"\u003eOrange\u003c\/span\u003e\n      \u003cspan class=\"soeb-tag\"\u003eButtery\u003c\/span\u003e\n      \u003cspan class=\"soeb-tag\"\u003eStone fruit\u003c\/span\u003e\n      \u003cspan class=\"soeb-tag\"\u003eNatural sweetness\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ACCORDION 1 — Origin \u0026 Craft --\u003e\n  \u003cdiv class=\"soeb-accordion\"\u003e\n    \u003cbutton class=\"soeb-acc-btn\" aria-expanded=\"false\" onclick=\"soebToggle(this)\"\u003e\n      Origin \u0026amp; craft\n      \u003csvg class=\"soeb-acc-icon\" viewbox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"\u003e\u003cpath d=\"M4.5 6.75l4.5 4.5 4.5-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003c\/button\u003e\n    \u003cdiv class=\"soeb-acc-body\" role=\"region\"\u003e\n      \u003cdiv class=\"soeb-acc-inner\"\u003e\n        \u003cdiv class=\"soeb-origin-card\"\u003e\n          \u003cdiv class=\"soeb-origin-head\"\u003e\n            \u003cspan class=\"soeb-origin-title\"\u003eArabica — Elgon Highlands\u003c\/span\u003e\n            \u003cspan class=\"soeb-score-pill\"\u003e87 SCA\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"soeb-origin-detail\"\u003eBulambuli \u0026amp; Buginyanya · Grown by Olive Kishero · 2,100m altitude · Washed process · AA-grade\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"soeb-origin-card\"\u003e\n          \u003cdiv class=\"soeb-origin-head\"\u003e\n            \u003cspan class=\"soeb-origin-title\"\u003eRobusta — Masaka Region\u003c\/span\u003e\n            \u003cspan class=\"soeb-score-pill\"\u003e84 SCA\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"soeb-origin-detail\"\u003eKiganda \/ Mark · 1,200m altitude · Natural process · Refined with Ugandan Q-graders and processing specialists\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cp style=\"margin-top:0.85rem;font-size:13px;line-height:1.7;\"\u003eEach component is cupped separately and developed to honour its own character. The blend is assembled with precision — not for volume or convenience, but to let both origins shine.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ACCORDION 2 — How to Brew --\u003e\n  \u003cdiv class=\"soeb-accordion\"\u003e\n    \u003cbutton class=\"soeb-acc-btn\" aria-expanded=\"false\" onclick=\"soebToggle(this)\"\u003e\n      How to brew\n      \u003csvg class=\"soeb-acc-icon\" viewbox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"\u003e\u003cpath d=\"M4.5 6.75l4.5 4.5 4.5-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003c\/button\u003e\n    \u003cdiv class=\"soeb-acc-body\" role=\"region\"\u003e\n      \u003cdiv class=\"soeb-acc-inner\"\u003e\n        \u003cdiv class=\"soeb-brew-grid\"\u003e\n          \u003cdiv class=\"soeb-brew-card\"\u003e\n            \u003cdiv class=\"soeb-brew-label\"\u003eWater temperature\u003c\/div\u003e\n            \u003cdiv class=\"soeb-brew-val\"\u003e92–96°C\u003c\/div\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"soeb-brew-card\"\u003e\n            \u003cdiv class=\"soeb-brew-label\"\u003eRatio\u003c\/div\u003e\n            \u003cdiv class=\"soeb-brew-val\"\u003e16–17g \/ 250ml\u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"soeb-methods\" aria-label=\"Brew methods\"\u003e\n          \u003cspan class=\"soeb-method\"\u003eFilter · medium grind\u003c\/span\u003e\n          \u003cspan class=\"soeb-method\"\u003eFrench press · medium-coarse\u003c\/span\u003e\n          \u003cspan class=\"soeb-method\"\u003eMoka pot · fine\u003c\/span\u003e\n          \u003cspan class=\"soeb-method\"\u003eEspresso · fine\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ACCORDION 3 — Is this right for me? --\u003e\n  \u003cdiv class=\"soeb-accordion\"\u003e\n    \u003cbutton class=\"soeb-acc-btn\" aria-expanded=\"false\" onclick=\"soebToggle(this)\"\u003e\n      Is this right for me?\n      \u003csvg class=\"soeb-acc-icon\" viewbox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"\u003e\u003cpath d=\"M4.5 6.75l4.5 4.5 4.5-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003c\/button\u003e\n    \u003cdiv class=\"soeb-acc-body\" role=\"region\"\u003e\n      \u003cdiv class=\"soeb-acc-inner\"\u003e\n        \u003cul class=\"soeb-fit-list\"\u003e\n          \u003cli\u003eYou enjoy a balanced cup that rewards attention without demanding it\u003c\/li\u003e\n          \u003cli\u003eYou want one coffee that works across all your brew kit\u003c\/li\u003e\n          \u003cli\u003eYou prefer comfort and consistency without sharp or lingering acidity\u003c\/li\u003e\n          \u003cli\u003eYou drink it black, or with milk — it works beautifully both ways\u003c\/li\u003e\n        \u003c\/ul\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ACCORDION 4 — Freshness \u0026 Storage --\u003e\n  \u003cdiv class=\"soeb-accordion\"\u003e\n    \u003cbutton class=\"soeb-acc-btn\" aria-expanded=\"false\" onclick=\"soebToggle(this)\"\u003e\n      Freshness \u0026amp; storage\n      \u003csvg class=\"soeb-acc-icon\" viewbox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"\u003e\u003cpath d=\"M4.5 6.75l4.5 4.5 4.5-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003c\/button\u003e\n    \u003cdiv class=\"soeb-acc-body\" role=\"region\"\u003e\n      \u003cdiv class=\"soeb-acc-inner\"\u003e\n        \u003cp\u003eYour 250g bag is roasted at origin and carries a roast date — so you always know exactly what you're drinking.\u003c\/p\u003e\n        \u003cdiv class=\"soeb-freshness-note\"\u003e\n          Store sealed in a cool, dry place away from heat and strong odours. Once opened, best enjoyed within 4–6 weeks.\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ACCORDION 5 — FAQs --\u003e\n  \u003cdiv class=\"soeb-accordion\"\u003e\n    \u003cbutton class=\"soeb-acc-btn\" aria-expanded=\"false\" onclick=\"soebToggle(this)\"\u003e\n      Questions \u0026amp; answers\n      \u003csvg class=\"soeb-acc-icon\" viewbox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"\u003e\u003cpath d=\"M4.5 6.75l4.5 4.5 4.5-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003c\/button\u003e\n    \u003cdiv class=\"soeb-acc-body\" role=\"region\"\u003e\n      \u003cdiv class=\"soeb-acc-inner\"\u003e\n\n        \u003cdiv class=\"soeb-faq-item\"\u003e\n          \u003cdiv class=\"soeb-faq-q\"\u003eWhat makes SOEB Signature Blend distinctive?\u003c\/div\u003e\n          \u003cdiv class=\"soeb-faq-a\"\u003eIt combines two carefully sourced Ugandan profiles — refined and cupped separately, then blended with precision. A house blend built on origin knowledge, not volume or convenience.\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"soeb-faq-item\"\u003e\n          \u003cdiv class=\"soeb-faq-q\"\u003eWhat is the difference between the Medium and Dark roast?\u003c\/div\u003e\n          \u003cdiv class=\"soeb-faq-a\"\u003eBoth prioritise sweetness, balance and depth rather than roast intensity. The Medium roast highlights the Arabica's brightness and fruit notes. The Dark roast brings more body and a deeper chocolate character from the Robusta.\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"soeb-faq-item\"\u003e\n          \u003cdiv class=\"soeb-faq-q\"\u003eDoes it work well with milk?\u003c\/div\u003e\n          \u003cdiv class=\"soeb-faq-a\"\u003eYes. The natural sweetness and medium-full body mean it holds up well in both black and milk-based drinks — flat white, latte or straight from a French press.\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"soeb-faq-item\"\u003e\n          \u003cdiv class=\"soeb-faq-q\"\u003eWhat does SCA score mean?\u003c\/div\u003e\n          \u003cdiv class=\"soeb-faq-a\"\u003eSCA (Specialty Coffee Association) scores rate coffee on a 100-point scale across aroma, flavour, aftertaste, acidity, body, balance and more. A score of 80+ qualifies as specialty grade. Our Arabica scores 87 and our Robusta scores 84 — both well within specialty range.\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"soeb-faq-item\"\u003e\n          \u003cdiv class=\"soeb-faq-q\"\u003eHow fresh is the coffee when it arrives?\u003c\/div\u003e\n          \u003cdiv class=\"soeb-faq-a\"\u003eWe dispatch within 72 hours of roasting. Each bag is roast-dated so you can track freshness from the day it was roasted, not the day it was shipped.\u003c\/div\u003e\n        \u003c\/div\u003e\n\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  function soebToggle(btn) {\n    var body = btn.nextElementSibling;\n    var icon = btn.querySelector('.soeb-acc-icon');\n    var isOpen = body.classList.contains('is-open');\n    body.classList.toggle('is-open', !isOpen);\n    icon.classList.toggle('is-open', !isOpen);\n    btn.setAttribute('aria-expanded', String(!isOpen));\n  }\n\u003c\/script\u003e","brand":"SOEB \u0026 Co.","offers":[{"title":"Dark \/ Whole bean","offer_id":56504114610553,"sku":"SCO06058","price":13.99,"currency_code":"GBP","in_stock":true},{"title":"Dark \/ Ground","offer_id":56675208036729,"sku":"SCO06059","price":13.99,"currency_code":"GBP","in_stock":true},{"title":"Medium \/ Whole bean","offer_id":56504114643321,"sku":"SCO060510","price":13.99,"currency_code":"GBP","in_stock":true},{"title":"Medium \/ Ground","offer_id":56675208069497,"sku":"SCO060511","price":13.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0959\/1042\/9049\/files\/SOEB_Signature_Blend_4da2bd69-a772-4a96-a1aa-198cd6bc5eb8.jpg?v=1778522398"},{"product_id":"soeb-trio-uganda","title":"Discovery Set","description":"\u003cstyle\u003e\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Archivo+Black\u0026display=swap');\n\n  .soeb-ds {\n    --espresso: #3b2e26;\n    --espresso-mid: #6b4c3b;\n    --espresso-light: #9a7060;\n    --cream: #fff9eb;\n    --blush: #edc3ae;\n    --blush-light: rgba(237,195,174,0.18);\n    --border: rgba(59,46,38,0.1);\n    --text-muted: rgba(59,46,38,0.62);\n    font-family: inherit;\n    color: var(--espresso);\n    max-width: 680px;\n  }\n\n  .soeb-ds * { box-sizing: border-box; margin: 0; padding: 0; }\n\n  .soeb-ds-intro {\n    font-size: 15px;\n    line-height: 1.75;\n    color: var(--text-muted);\n    padding: 1.25rem 0 1.5rem;\n    border-bottom: 0.5px solid var(--border);\n  }\n\n  \/* ── What's inside cards ── *\/\n  .soeb-ds-set {\n    padding: 1.5rem 0;\n    border-bottom: 0.5px solid var(--border);\n  }\n\n  .soeb-ds-section-label {\n    font-size: 10px;\n    text-transform: uppercase;\n    letter-spacing: 0.1em;\n    color: var(--espresso-light);\n    margin-bottom: 1rem;\n  }\n\n  .soeb-ds-coffee-card {\n    border: 0.5px solid var(--border);\n    border-radius: 10px;\n    padding: 14px 15px;\n    margin-bottom: 10px;\n    position: relative;\n    overflow: hidden;\n  }\n\n  .soeb-ds-coffee-card:last-of-type { margin-bottom: 0; }\n\n  .soeb-ds-card-accent {\n    position: absolute;\n    top: 0; left: 0;\n    width: 3px;\n    height: 100%;\n    border-radius: 10px 0 0 10px;\n  }\n\n  .soeb-ds-card-accent--arabica  { background: var(--blush); }\n  .soeb-ds-card-accent--robusta  { background: var(--espresso-mid); }\n  .soeb-ds-card-accent--blend    { background: var(--espresso-light); }\n\n  .soeb-ds-card-head {\n    display: flex;\n    align-items: flex-start;\n    justify-content: space-between;\n    gap: 8px;\n    margin-bottom: 5px;\n    padding-left: 10px;\n  }\n\n  .soeb-ds-card-title {\n    font-size: 13.5px;\n    font-weight: 500;\n    color: var(--espresso);\n    line-height: 1.3;\n  }\n\n  .soeb-ds-card-sub {\n    font-size: 11px;\n    color: var(--espresso-light);\n    margin-top: 1px;\n  }\n\n  .soeb-ds-score-pill {\n    font-size: 11px;\n    padding: 2px 8px;\n    background: var(--espresso);\n    color: var(--cream);\n    border-radius: 20px;\n    flex-shrink: 0;\n    white-space: nowrap;\n  }\n\n  .soeb-ds-card-notes {\n    font-size: 12.5px;\n    color: var(--text-muted);\n    line-height: 1.55;\n    padding-left: 10px;\n    margin-top: 4px;\n  }\n\n  .soeb-ds-card-tags {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 5px;\n    padding-left: 10px;\n    margin-top: 8px;\n  }\n\n  .soeb-ds-tag {\n    padding: 3px 9px;\n    background: var(--blush-light);\n    border: 0.5px solid rgba(237,195,174,0.4);\n    border-radius: 20px;\n    font-size: 11.5px;\n    color: var(--espresso);\n  }\n\n  .soeb-ds-roast-note {\n    margin-top: 1rem;\n    padding: 11px 13px;\n    background: var(--blush-light);\n    border: 0.5px solid rgba(237,195,174,0.4);\n    border-radius: 8px;\n    font-size: 13px;\n    color: var(--espresso);\n    line-height: 1.6;\n  }\n\n  \/* ── Accordion ── *\/\n  .soeb-ds-accordion {\n    border-bottom: 0.5px solid var(--border);\n  }\n\n  .soeb-ds-acc-btn {\n    width: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    padding: 1rem 0;\n    background: transparent;\n    border: none;\n    font-family: 'Archivo Black', sans-serif;\n    font-size: 13px;\n    font-weight: 400;\n    text-transform: uppercase;\n    letter-spacing: 0.08em;\n    color: var(--espresso);\n    cursor: pointer;\n    text-align: left;\n  }\n\n  .soeb-ds-acc-btn:hover { color: var(--espresso-mid); }\n\n  .soeb-ds-acc-icon {\n    width: 18px;\n    height: 18px;\n    flex-shrink: 0;\n    transition: transform 0.25s ease;\n    color: var(--espresso-light);\n  }\n\n  .soeb-ds-acc-icon.is-open { transform: rotate(180deg); }\n\n  .soeb-ds-acc-body {\n    overflow: hidden;\n    max-height: 0;\n    transition: max-height 0.35s ease;\n  }\n\n  .soeb-ds-acc-body.is-open { max-height: 700px; }\n\n  .soeb-ds-acc-inner {\n    padding-bottom: 1.25rem;\n    font-size: 13.5px;\n    line-height: 1.7;\n    color: var(--text-muted);\n  }\n\n  \/* ── Brew list ── *\/\n  .soeb-ds-brew-list {\n    list-style: none;\n    padding: 0;\n  }\n\n  .soeb-ds-brew-list li {\n    display: flex;\n    align-items: flex-start;\n    gap: 9px;\n    font-size: 13.5px;\n    color: var(--text-muted);\n    line-height: 1.5;\n    margin-bottom: 9px;\n  }\n\n  .soeb-ds-brew-list li::before {\n    content: '';\n    width: 5px;\n    height: 5px;\n    border-radius: 50%;\n    background: var(--espresso-light);\n    flex-shrink: 0;\n    margin-top: 6px;\n  }\n\n  .soeb-ds-brew-tip {\n    margin-top: 0.75rem;\n    font-size: 12.5px;\n    color: var(--espresso-light);\n    font-style: italic;\n  }\n\n  \/* ── Fit list ── *\/\n  .soeb-ds-fit-list {\n    list-style: none;\n    padding: 0;\n  }\n\n  .soeb-ds-fit-list li {\n    display: flex;\n    align-items: flex-start;\n    gap: 9px;\n    font-size: 13.5px;\n    line-height: 1.5;\n    color: var(--text-muted);\n    margin-bottom: 9px;\n  }\n\n  .soeb-ds-fit-list li::before {\n    content: '';\n    width: 5px;\n    height: 5px;\n    border-radius: 50%;\n    background: var(--blush);\n    flex-shrink: 0;\n    margin-top: 6px;\n  }\n\n  \/* ── Freshness note ── *\/\n  .soeb-ds-freshness-note {\n    background: var(--blush-light);\n    border: 0.5px solid rgba(237,195,174,0.4);\n    border-radius: 8px;\n    padding: 12px 14px;\n    font-size: 13px;\n    color: var(--espresso);\n    line-height: 1.6;\n    margin-top: 0.5rem;\n  }\n\n  \/* ── Roast comparison ── *\/\n  .soeb-ds-roast-grid {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 8px;\n    margin-top: 0.5rem;\n  }\n\n  .soeb-ds-roast-card {\n    border: 0.5px solid var(--border);\n    border-radius: 8px;\n    padding: 11px 13px;\n  }\n\n  .soeb-ds-roast-label {\n    font-size: 11px;\n    font-weight: 500;\n    text-transform: uppercase;\n    letter-spacing: 0.07em;\n    color: var(--espresso-mid);\n    margin-bottom: 5px;\n  }\n\n  .soeb-ds-roast-desc {\n    font-size: 12.5px;\n    color: var(--text-muted);\n    line-height: 1.5;\n  }\n\n  \/* ── FAQ ── *\/\n  .soeb-ds-faq-item {\n    padding-bottom: 1rem;\n    margin-bottom: 1rem;\n    border-bottom: 0.5px solid rgba(59,46,38,0.07);\n  }\n\n  .soeb-ds-faq-item:last-child { border-bottom: none; margin-bottom: 0; padding-bottom: 0; }\n\n  .soeb-ds-faq-q {\n    font-size: 13.5px;\n    font-weight: 500;\n    color: var(--espresso);\n    margin-bottom: 5px;\n  }\n\n  .soeb-ds-faq-a {\n    font-size: 13px;\n    color: var(--text-muted);\n    line-height: 1.65;\n  }\n\n  \/* ── Responsive ── *\/\n  @media (max-width: 480px) {\n    .soeb-ds-roast-grid { grid-template-columns: 1fr; }\n  }\n\u003c\/style\u003e\n\n\u003cdiv class=\"soeb-ds\"\u003e\n\n  \u003c!-- Intro --\u003e\n  \u003cp class=\"soeb-ds-intro\"\u003e\n    The SOEB Discovery Set brings together all three of our core coffees — Arabica, Robusta and Signature Blend — in one considered collection. Crafted entirely in Uganda and roasted at origin, it's an invitation to explore the full range and character of Ugandan coffee: from the clarity of high-altitude Arabica to the depth of Robusta and the balance of the Signature Blend.\n  \u003c\/p\u003e\n\n  \u003c!-- What's Inside --\u003e\n  \u003cdiv class=\"soeb-ds-set\"\u003e\n    \u003cdiv class=\"soeb-ds-section-label\"\u003eWhat's inside — 3 × 250g bags\u003c\/div\u003e\n\n    \u003cdiv class=\"soeb-ds-coffee-card\"\u003e\n      \u003cdiv class=\"soeb-ds-card-accent soeb-ds-card-accent--arabica\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"soeb-ds-card-head\"\u003e\n        \u003cdiv\u003e\n          \u003cdiv class=\"soeb-ds-card-title\"\u003eSOEB Arabica\u003c\/div\u003e\n          \u003cdiv class=\"soeb-ds-card-sub\"\u003eElgon region · 2,100m · Washed AA-grade\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cspan class=\"soeb-ds-score-pill\"\u003e87 SCA\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"soeb-ds-card-notes\"\u003eSmooth, elegant and gently bright.\u003c\/div\u003e\n      \u003cdiv class=\"soeb-ds-card-tags\"\u003e\n        \u003cspan class=\"soeb-ds-tag\"\u003eOrange\u003c\/span\u003e\n        \u003cspan class=\"soeb-ds-tag\"\u003eGrape\u003c\/span\u003e\n        \u003cspan class=\"soeb-ds-tag\"\u003eCocoa\u003c\/span\u003e\n        \u003cspan class=\"soeb-ds-tag\"\u003eHoney\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"soeb-ds-coffee-card\"\u003e\n      \u003cdiv class=\"soeb-ds-card-accent soeb-ds-card-accent--robusta\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"soeb-ds-card-head\"\u003e\n        \u003cdiv\u003e\n          \u003cdiv class=\"soeb-ds-card-title\"\u003eSOEB Robusta\u003c\/div\u003e\n          \u003cdiv class=\"soeb-ds-card-sub\"\u003eMasaka region · 1,200m · Natural process\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cspan class=\"soeb-ds-score-pill\"\u003e84 SCA\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"soeb-ds-card-notes\"\u003eBold, chocolatey and creamy, with floral lift.\u003c\/div\u003e\n      \u003cdiv class=\"soeb-ds-card-tags\"\u003e\n        \u003cspan class=\"soeb-ds-tag\"\u003eDark chocolate\u003c\/span\u003e\n        \u003cspan class=\"soeb-ds-tag\"\u003eBrown sugar\u003c\/span\u003e\n        \u003cspan class=\"soeb-ds-tag\"\u003eFloral\u003c\/span\u003e\n        \u003cspan class=\"soeb-ds-tag\"\u003eCream\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"soeb-ds-coffee-card\"\u003e\n      \u003cdiv class=\"soeb-ds-card-accent soeb-ds-card-accent--blend\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"soeb-ds-card-head\"\u003e\n        \u003cdiv\u003e\n          \u003cdiv class=\"soeb-ds-card-title\"\u003eSOEB Signature Blend\u003c\/div\u003e\n          \u003cdiv class=\"soeb-ds-card-sub\"\u003eArabica \u0026amp; Robusta · Elgon \u0026amp; Masaka\u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"soeb-ds-card-notes\"\u003eRounded, warm and balanced — versatile with or without milk.\u003c\/div\u003e\n      \u003cdiv class=\"soeb-ds-card-tags\"\u003e\n        \u003cspan class=\"soeb-ds-tag\"\u003eDark chocolate\u003c\/span\u003e\n        \u003cspan class=\"soeb-ds-tag\"\u003eOrange\u003c\/span\u003e\n        \u003cspan class=\"soeb-ds-tag\"\u003eButtery\u003c\/span\u003e\n        \u003cspan class=\"soeb-ds-tag\"\u003eNatural sweetness\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"soeb-ds-roast-note\"\u003e\n      All three bags are available in \u003cstrong\u003eMedium\u003c\/strong\u003e or \u003cstrong\u003eDark Roast\u003c\/strong\u003e — each profiled for sweetness, structure and clarity rather than roast intensity.\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ACCORDION 1 — Why it exists --\u003e\n  \u003cdiv class=\"soeb-ds-accordion\"\u003e\n    \u003cbutton class=\"soeb-ds-acc-btn\" aria-expanded=\"false\" onclick=\"soebDsToggle(this)\"\u003e\n      Why this set exists\n      \u003csvg class=\"soeb-ds-acc-icon\" viewbox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"\u003e\u003cpath d=\"M4.5 6.75l4.5 4.5 4.5-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003c\/button\u003e\n    \u003cdiv class=\"soeb-ds-acc-body\" role=\"region\"\u003e\n      \u003cdiv class=\"soeb-ds-acc-inner\"\u003e\n        \u003cp\u003eUganda produces a wide range of expressive coffees, yet its diversity is rarely experienced together. The SOEB Discovery Set offers a clear, grounded way to understand how different regions, processes and profiles show up in the cup.\u003c\/p\u003e\n        \u003cp style=\"margin-top:0.75rem;\"\u003eRather than telling you what to like, this trio gives you the space to discover, compare and decide for yourself.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ACCORDION 2 — How to brew --\u003e\n  \u003cdiv class=\"soeb-ds-accordion\"\u003e\n    \u003cbutton class=\"soeb-ds-acc-btn\" aria-expanded=\"false\" onclick=\"soebDsToggle(this)\"\u003e\n      How to brew\n      \u003csvg class=\"soeb-ds-acc-icon\" viewbox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"\u003e\u003cpath d=\"M4.5 6.75l4.5 4.5 4.5-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003c\/button\u003e\n    \u003cdiv class=\"soeb-ds-acc-body\" role=\"region\"\u003e\n      \u003cdiv class=\"soeb-ds-acc-inner\"\u003e\n        \u003cp style=\"margin-bottom:0.75rem;\"\u003eBrew each coffee in whatever method suits your routine. For best results:\u003c\/p\u003e\n        \u003cul class=\"soeb-ds-brew-list\"\u003e\n          \u003cli\u003eFreshly drawn, filtered water at 92–96°C\u003c\/li\u003e\n          \u003cli\u003eAdjust grind size to match your brew method\u003c\/li\u003e\n          \u003cli\u003eStart with 15–17g coffee per 250ml water and adjust to taste\u003c\/li\u003e\n          \u003cli\u003eTaste black first, then with milk if you use it\u003c\/li\u003e\n        \u003c\/ul\u003e\n        \u003cp class=\"soeb-ds-brew-tip\"\u003eWorks across French press, pour-over, moka pot, AeroPress and filter machines.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ACCORDION 3 — Is this right for me? --\u003e\n  \u003cdiv class=\"soeb-ds-accordion\"\u003e\n    \u003cbutton class=\"soeb-ds-acc-btn\" aria-expanded=\"false\" onclick=\"soebDsToggle(this)\"\u003e\n      Is this right for me?\n      \u003csvg class=\"soeb-ds-acc-icon\" viewbox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"\u003e\u003cpath d=\"M4.5 6.75l4.5 4.5 4.5-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003c\/button\u003e\n    \u003cdiv class=\"soeb-ds-acc-body\" role=\"region\"\u003e\n      \u003cdiv class=\"soeb-ds-acc-inner\"\u003e\n        \u003cul class=\"soeb-ds-fit-list\"\u003e\n          \u003cli\u003eYou want to experience the full SOEB range before committing to one coffee\u003c\/li\u003e\n          \u003cli\u003eYou enjoy comparing flavour and structure across different profiles\u003c\/li\u003e\n          \u003cli\u003eYou appreciate intentional, everyday rituals\u003c\/li\u003e\n          \u003cli\u003eYou care about how coffee is made, not just how it tastes\u003c\/li\u003e\n          \u003cli\u003eYou're looking for a considered gift for a coffee lover\u003c\/li\u003e\n        \u003c\/ul\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ACCORDION 4 — Freshness \u0026 Storage --\u003e\n  \u003cdiv class=\"soeb-ds-accordion\"\u003e\n    \u003cbutton class=\"soeb-ds-acc-btn\" aria-expanded=\"false\" onclick=\"soebDsToggle(this)\"\u003e\n      Freshness \u0026amp; storage\n      \u003csvg class=\"soeb-ds-acc-icon\" viewbox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"\u003e\u003cpath d=\"M4.5 6.75l4.5 4.5 4.5-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003c\/button\u003e\n    \u003cdiv class=\"soeb-ds-acc-body\" role=\"region\"\u003e\n      \u003cdiv class=\"soeb-ds-acc-inner\"\u003e\n        \u003cp\u003eEach 250g bag is roasted at origin and carries a roast date — so you always know exactly what you're drinking.\u003c\/p\u003e\n        \u003cdiv class=\"soeb-ds-freshness-note\"\u003e\n          Store sealed in a cool, dry place away from heat and strong odours. Once opened, best enjoyed within 4–6 weeks.\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ACCORDION 5 — FAQs --\u003e\n  \u003cdiv class=\"soeb-ds-accordion\"\u003e\n    \u003cbutton class=\"soeb-ds-acc-btn\" aria-expanded=\"false\" onclick=\"soebDsToggle(this)\"\u003e\n      Questions \u0026amp; answers\n      \u003csvg class=\"soeb-ds-acc-icon\" viewbox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"\u003e\u003cpath d=\"M4.5 6.75l4.5 4.5 4.5-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003c\/button\u003e\n    \u003cdiv class=\"soeb-ds-acc-body\" role=\"region\"\u003e\n      \u003cdiv class=\"soeb-ds-acc-inner\"\u003e\n\n        \u003cdiv class=\"soeb-ds-faq-item\"\u003e\n          \u003cdiv class=\"soeb-ds-faq-q\"\u003eIs this a subscription?\u003c\/div\u003e\n          \u003cdiv class=\"soeb-ds-faq-a\"\u003eNo. The Discovery Set is a one-time purchase designed to let you explore the full SOEB range at your own pace.\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"soeb-ds-faq-item\"\u003e\n          \u003cdiv class=\"soeb-ds-faq-q\"\u003eWhich roast should I choose?\u003c\/div\u003e\n          \u003cdiv class=\"soeb-ds-faq-a\"\u003eBoth roasts are developed for balance and sweetness rather than intensity. Your chosen roast applies to all three bags in the set.\u003c\/div\u003e\n          \u003cdiv class=\"soeb-ds-roast-grid\" style=\"margin-top:0.6rem;\"\u003e\n            \u003cdiv class=\"soeb-ds-roast-card\"\u003e\n              \u003cdiv class=\"soeb-ds-roast-label\"\u003eMedium roast\u003c\/div\u003e\n              \u003cdiv class=\"soeb-ds-roast-desc\"\u003eHighlights clarity, sweetness and the distinction between each coffee.\u003c\/div\u003e\n            \u003c\/div\u003e\n            \u003cdiv class=\"soeb-ds-roast-card\"\u003e\n              \u003cdiv class=\"soeb-ds-roast-label\"\u003eDark roast\u003c\/div\u003e\n              \u003cdiv class=\"soeb-ds-roast-desc\"\u003eRicher and deeper — well suited to milk-based drinks.\u003c\/div\u003e\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"soeb-ds-faq-item\"\u003e\n          \u003cdiv class=\"soeb-ds-faq-q\"\u003eDo I need special equipment?\u003c\/div\u003e\n          \u003cdiv class=\"soeb-ds-faq-a\"\u003eNo. All three coffees work well across common home brew methods — French press, pour-over, moka pot, AeroPress and filter machines.\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"soeb-ds-faq-item\"\u003e\n          \u003cdiv class=\"soeb-ds-faq-q\"\u003eIs this suitable for beginners?\u003c\/div\u003e\n          \u003cdiv class=\"soeb-ds-faq-a\"\u003eYes. The Discovery Set is designed to be approachable and informative — you don't need specialist knowledge to enjoy it. It's a great way to start learning what you like.\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"soeb-ds-faq-item\"\u003e\n          \u003cdiv class=\"soeb-ds-faq-q\"\u003eHow fresh is the coffee when it arrives?\u003c\/div\u003e\n          \u003cdiv class=\"soeb-ds-faq-a\"\u003eWe dispatch within 72 hours of roasting. Every bag in the set is roast-dated so you can track freshness from the day it was roasted.\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"soeb-ds-faq-item\"\u003e\n          \u003cdiv class=\"soeb-ds-faq-q\"\u003eDoes the set make a good gift?\u003c\/div\u003e\n          \u003cdiv class=\"soeb-ds-faq-a\"\u003eIt does. Three distinct coffees, all roasted at origin, with a clear story behind each one — it's a considered gift for anyone who takes their coffee seriously.\u003c\/div\u003e\n        \u003c\/div\u003e\n\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  function soebDsToggle(btn) {\n    var body = btn.nextElementSibling;\n    var icon = btn.querySelector('.soeb-ds-acc-icon');\n    var isOpen = body.classList.contains('is-open');\n    body.classList.toggle('is-open', !isOpen);\n    icon.classList.toggle('is-open', !isOpen);\n    btn.setAttribute('aria-expanded', String(!isOpen));\n  }\n\u003c\/script\u003e","brand":"SOEB \u0026 Co.","offers":[{"title":"Dark \/ Whole bean","offer_id":56504148820345,"sku":"SCO06055","price":42.0,"currency_code":"GBP","in_stock":true},{"title":"Dark \/ Ground","offer_id":56675268362617,"sku":"SCO06056","price":42.0,"currency_code":"GBP","in_stock":true},{"title":"Medium \/ Whole bean","offer_id":56504148853113,"sku":"SCO06057","price":42.0,"currency_code":"GBP","in_stock":true},{"title":"Medium \/ Ground","offer_id":56675268395385,"sku":"SCO06058","price":42.0,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0959\/1042\/9049\/files\/SOEB_Discovery_Trio_65b77b06-b4cf-47c5-86f5-241af661e8dd.jpg?v=1778522221"}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0959\/1042\/9049\/collections\/ChatGPT_Image_Feb_4_2026_09_18_24_AM.png?v=1777553990","url":"https:\/\/www.soeb.co\/collections\/the-soeb-collection.oembed","provider":"SOEB Coffee | The Finest Ugandan Coffee","version":"1.0","type":"link"}