/* ═══════════════════════════════════════════════════════════════════════
   EDGE STORE — NEW CATALOGUE / PRODUCT UX  (feature-flagged)
   This stylesheet is enqueued ONLY when the "Enable new catalogue & product
   UX" theme option is on (Appearance → Customize → Edge Catalogue UX), and
   not for institution accounts unless explicitly opted in. When the flag is
   off none of these rules load, so the store renders exactly as before.
   Extracted from style.css on 2026-07-13.
   ═══════════════════════════════════════════════════════════════════════ */

/* ─── Bundle promotion (catalogue banner + product-page banner) ─── */
.edge-bundle-banner {
    display: block;
    margin: 14px 0;
    padding: 12px 16px;
    border: 1px solid #F8971D;
    border-left: 4px solid #F8971D;
    background: rgba(248, 151, 29, 0.06);
    color: inherit;
    font-size: 14px;
    line-height: 1.4;
}
.edge-bundle-banner:hover {
    background: rgba(248, 151, 29, 0.12);
    color: inherit;
}

/* ═══ Store polish rollout (Jul 2026) — listing cards, grouped options,
   bundle pages. New rules use --edge-orange; existing literals unchanged. ═══ */
:root {
    --edge-orange: #F8971D;
    --edge-orange-hover: #E0860F;
    --edge-navy: #003770;
    --edge-navy-hover: #00294F;
}

/* — Summary grid: add the promo slot (bundle banners) between price & cart — */
.summary.entry-summary {
    grid-template-areas:
        "title"
        "desc"
        "price"
        "promo"
        "cart"
        "meta";
}
.summary.entry-summary .edge-bundle-banners { grid-area: promo; }

/* — Bundle pages: contents box directly under the price, copy after — */
.edge-bundle-page .summary.entry-summary {
    grid-template-areas:
        "title"
        "price"
        "includes"
        "desc"
        "promo"
        "cart"
        "meta";
}
.summary.entry-summary .edge-bundle-includes { grid-area: includes; }

.edge-bundle-includes {
    border: 1px solid #E5E0D8;
    border-radius: 6px;
    overflow: hidden;
    margin: 0 0 20px;
}
.edge-bundle-includes__head {
    background: #F5F2EC;
    font-size: 12px;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
    padding: 9px 16px;
}
.edge-bundle-includes ul {
    list-style: none;
    margin: 0;
    padding: 0;
}
.edge-bundle-includes li {
    display: flex;
    justify-content: space-between;
    gap: 14px;
    align-items: baseline;
    padding: 9px 16px;
    border-top: 1px solid #EDE9E1;
    font-size: 15px;
}
.edge-bundle-includes__sku {
    font-size: 11px;
    color: #999;
    white-space: nowrap;
}

/* — Logged-out state: notice box instead of the all-caps slab — */
.edge-login-required {
    border: 1px solid #E5E0D8;
    border-left: 3px solid var(--edge-orange);
    border-radius: 0 6px 6px 0;
    background: #FAF8F4;
    padding: 16px 18px;
    margin-top: 16px;
}
.edge-login-required p {
    margin: 0 0 12px;
    font-size: 14.5px;
}
.edge-login-required__btn.button {
    display: inline-block;
    width: auto !important;
    padding: 12px 26px !important;
    text-transform: none !important;
    font-size: 14px !important;
}
.edge-login-required__why {
    font-size: 12.5px;
    margin-left: 14px;
    text-decoration: underline;
    color: #777;
}

/* — Listing cards: framed card, panel image zone, persistent bottom CTA —
   The theme hides add-to-cart inside .product-header and reveals it on
   hover; we hide that copy and render our own button at the card foot
   (woo-product-listing.php re-hooks woocommerce_template_loop_add_to_cart). */
.woocommerce ul.products li.product {
    background: #fff;
    border: 1px solid #E3E8EF;
    border-radius: 12px;
    /* NB: NOT overflow:hidden on the card — the theme's equal-height JS sets an
       inline height measured before this padding, and clipping ate the space
       under the CTA. Corners are clipped on .product-header instead. */
    padding-bottom: 26px;
    box-shadow: 0 1px 2px rgba(16, 42, 67, .04), 0 8px 22px rgba(16, 42, 67, .05);
    transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease;
    display: flex;
    flex-direction: column;
}
.woocommerce ul.products li.product:hover {
    transform: translateY(-4px);
    border-color: #BFCCDC;
    box-shadow: 0 4px 10px rgba(16, 42, 67, .07), 0 16px 36px rgba(16, 42, 67, .12);
}
.woocommerce ul.products li.product .product-header {
    background: linear-gradient(172deg, #F7F9FB 0%, #ECF0F5 100%);
    margin-bottom: 16px;
    border-radius: 12px 12px 0 0;
    overflow: hidden;
}
/* hide the theme's hover-reveal add-to-cart inside the image zone */
.woocommerce ul.products li.product .product-header .buttons {
    display: none;
}
.woocommerce ul.products li.product .woocommerce-loop-product__title {
    font-size: 16.5px !important;
    font-weight: 650;
    line-height: 1.35;
    color: #14202E;
    padding: 0 24px;
    margin: 2px 0 0;
}
.products li.product .edge-card-meta {
    font-size: 12.5px;
    color: #77808C;
    line-height: 1.55;
    margin: 8px 0 0;
    text-align: center;
    padding: 0 24px;
}
.woocommerce ul.products li.product .price-wrapper {
    margin-top: 6px;
}
.woocommerce ul.products li.product .price {
    color: var(--edge-navy) !important;
    font-size: 16px;
    font-weight: 600;
}
.woocommerce ul.products li.product .price del .amount {
    color: #98A1AC;
    font-size: 13px;
    font-weight: 400;
}
.woocommerce ul.products li.product .price ins {
    text-decoration: none;
}
/* the relocated card-foot CTA */
.woocommerce ul.products li.product > a.button {
    position: static;
    display: flex;
    align-items: center;
    justify-content: center;
    opacity: 1;
    transform: none;
    width: auto;
    margin: 18px 24px 0;
    margin-top: auto;
    padding: 12px 10px;
    background: var(--edge-navy);
    color: #fff;
    border-radius: 8px;
    font-size: 12px;
    font-weight: 600;
    letter-spacing: .08em;
    text-transform: uppercase;
    transition: background .15s ease;
}
.woocommerce ul.products li.product > a.button:hover {
    background: var(--edge-navy-hover);
    color: #fff;
}
/* the theme's loop button is icon + screen-reader text; at the card foot we
   want the words, not the basket glyph */
.woocommerce ul.products li.product > a.button svg {
    display: none;
}
.woocommerce ul.products li.product > a.button .screen-reader-text {
    position: static !important;
    width: auto;
    height: auto;
    margin: 0;
    overflow: visible;
    clip: auto;
    -webkit-clip-path: none;
    clip-path: none;
}
.woocommerce ul.products li.product > a.button.loading:after {
    position: static;
    margin-left: 8px;
}
.woocommerce-badges .newness.ribbon {
    background: #fff !important;
    color: var(--edge-orange) !important;
    border: 1px solid var(--edge-orange);
    border-radius: 20px !important;
    font-size: 10px !important;
    letter-spacing: .06em;
    padding: 4px 10px !important;
    text-transform: uppercase;
}
.products li.product .edge-bundle-ribbon {
    position: absolute;
    top: 12px;
    right: 12px;
    z-index: 3;
    background: var(--edge-orange);
    color: #fff;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .05em;
    text-transform: uppercase;
    padding: 5px 10px;
    border-radius: 20px;
    box-shadow: 0 2px 8px rgba(217, 126, 6, .35);
}

/* — Cart line-item includes: muted single-line note — */
.item_includes {
    font-size: 12.5px;
    color: #8a8177;
    margin-top: 4px;
    line-height: 1.5;
}

/* — Grouped option "View More" popup: the SKU page in a modal — */
body.edge-gvm-open { overflow: hidden; }

.edge-gvm { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 100000; }
.edge-gvm[hidden] { display: none; }
.edge-gvm__backdrop {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    background: rgba(15, 23, 32, .55);
    animation: edge-gvm-fade .18s ease;
}
.edge-gvm__panel {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 760px;
    max-width: 94vw;
    max-height: 86vh;
    background: #fff;
    border-radius: 14px;
    /* the 100vmax halo dims the page even if the backdrop loses a
       stacking-context fight with the theme's page-transition wrapper */
    box-shadow: 0 0 0 100vmax rgba(15, 23, 32, .55), 0 24px 70px rgba(15, 23, 32, .3);
    display: flex;
    flex-direction: column;
    overflow: hidden;
    animation: edge-gvm-pop .2s cubic-bezier(.2, .7, .3, 1);
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
}
@keyframes edge-gvm-fade { from { opacity: 0; } }
@keyframes edge-gvm-pop { from { transform: translate(-50%, -48%); opacity: .4; } }
@media (prefers-reduced-motion: reduce) {
    .edge-gvm__backdrop, .edge-gvm__panel { animation: none; }
}
.edge-gvm button.edge-gvm__x {
    position: absolute;
    top: 12px;
    right: 14px;
    z-index: 2;
    background: #fff !important;
    border: none !important;
    border-radius: 50% !important;
    width: 34px !important;
    height: 34px !important;
    min-width: 0 !important;
    padding: 0 !important;
    margin: 0;
    font-size: 22px !important;
    line-height: 34px !important;
    text-align: center;
    color: #6B7683 !important;
    cursor: pointer;
    box-shadow: 0 2px 8px rgba(15, 23, 32, .14);
}
.edge-gvm button.edge-gvm__x:hover { color: #1B2733 !important; background: #F2F5F8 !important; }
.edge-gvm__scroll { overflow-y: auto; }
.edge-gvm__grid {
    display: grid;
    grid-template-columns: 250px 1fr;
    gap: 26px;
    padding: 26px;
}
.edge-gvm__media {
    background: linear-gradient(172deg, #F7F9FB 0%, #ECF0F5 100%);
    border-radius: 10px;
    padding: 18px;
    align-self: start;
}
.edge-gvm__media img { width: 100%; height: auto; display: block; }
.edge-gvm__title {
    font-size: 20px;
    font-weight: 700;
    color: var(--edge-navy);
    margin: 0 0 6px;
    line-height: 1.3;
    padding-right: 30px;
}
.edge-gvm__price {
    font-size: 17px;
    font-weight: 700;
    color: var(--edge-navy);
    margin: 0 0 14px;
}
.edge-gvm__price small { font-size: 11px; font-weight: 400; color: #98A1AC; }
.edge-gvm .edg_grouped_list_desc .item {
    display: grid;
    grid-template-columns: 86px 1fr;
    gap: 3px 14px;
    font-size: 13.5px;
    padding: 2px 0;
}
.edge-gvm .edg_grouped_list_desc .item:empty { display: none; }
.edge-gvm .edg_grouped_list_desc .item label { font-weight: 650; color: #6B7683; }
.edge-gvm__desc {
    margin-top: 16px;
    padding-top: 14px;
    border-top: 1px solid #E4E8ED;
    font-size: 14px;
    line-height: 1.65;
    color: #3A4552;
}
.edge-gvm__desc:empty { display: none; }
.edge-gvm__full {
    display: inline-block;
    margin-top: 14px;
    font-size: 13px;
    text-decoration: underline;
    color: #6B7683;
}
.edge-gvm__full:hover { color: var(--edge-navy); }
@media (max-width: 640px) {
    .edge-gvm__grid { grid-template-columns: 1fr; gap: 18px; padding: 20px; }
    .edge-gvm__media { max-width: 220px; margin: 0 auto; }
}

/* — Catalogue search bar (above the subject chips) — */
.edge-cat-search {
    position: relative;
    max-width: none;
    margin: 0 0 26px;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
}
.edge-cat-search__form {
    display: flex;
    align-items: center;
    gap: 0;
    background: #fff;
    border: 1px solid #DCE1E7;
    border-radius: 10px;
    transition: border-color .15s ease, box-shadow .15s ease;
}
.edge-cat-search__form:focus-within {
    border-color: var(--edge-navy);
    box-shadow: 0 0 0 3px rgba(0, 55, 112, .12);
}
.edge-cat-search__icon {
    flex: none;
    padding: 0 4px 0 16px;
    color: #98A1AC;
    font-size: 15px;
}
.edge-cat-search__input {
    flex: 1 1 auto;
    min-width: 0;
    border: none !important;
    background: transparent !important;
    box-shadow: none !important;
    outline: none;
    padding: 13px 12px !important;
    font-size: 15px;
    color: #1B2733;
}
.edge-cat-search__btn {
    flex: none;
    margin: 5px;
    padding: 9px 22px;
    background: var(--edge-navy);
    color: #fff;
    border: none;
    border-radius: 7px;
    font-size: 13px;
    font-weight: 600;
    letter-spacing: .05em;
    text-transform: uppercase;
    cursor: pointer;
    transition: background .15s ease;
}
.edge-cat-search__btn:hover { background: var(--edge-navy-hover); }
.edge-cat-search__results {
    position: absolute;
    top: calc(100% + 8px);
    left: 0;
    right: 0;
    z-index: 9000;
    background: #fff;
    border: 1px solid #E4E8ED;
    border-radius: 12px;
    box-shadow: 0 18px 50px rgba(15, 23, 32, .18);
    padding: 8px;
    max-height: 460px;
    overflow-y: auto;
}
.edge-cat-search__results[hidden] { display: none; }
.edge-cat-search__all {
    display: block;
    text-align: center;
    padding: 11px 14px 9px;
    margin-top: 4px;
    border-top: 1px solid #EFF2F5;
    font-size: 13px;
    font-weight: 600;
    color: var(--edge-navy);
    text-decoration: none;
}
.edge-cat-search__all:hover { text-decoration: underline; }

/* ═══ Catalogue iteration 2 (Dane feedback 12 Jul) ═══ */

/* — Slim save-with-bundles banner above the grid (filters, doesn't host) — */
.edge-bundle-banner--catalogue {
    display: flex;
    align-items: baseline;
    gap: 6px;
    flex-wrap: wrap;
    margin: 0 0 24px;
    border-radius: 0 8px 8px 0;
    font-size: 14.5px;
    text-decoration: none;
}
.edge-bundle-banner__cta {
    margin-left: auto;
    font-weight: 700;
    color: #A65E00;
    white-space: nowrap;
}

/* — The theme's shop toolbar (view switchers + Filter) adds nothing here — */
.woocommerce .shop-toolbar { display: none !important; }

/* — Quick-view eye clears the savings badge on bundle cards — */
.woocommerce ul.products li.product:has(.edge-bundle-ribbon) .buttons-icon {
    top: 48px !important;
    right: 10px !important;
}

/* — Mobile: one card per row — */
@media (max-width: 767px) {
    .woocommerce ul.products[class*="columns-"] li.product,
    .woocommerce-page ul.products[class*="columns-"] li.product {
        width: 100% !important;
        float: none !important;
        margin-right: 0 !important;
    }
}

/* ═══ Bundle product page (direction picked: A's green value story with
   B's numbered syllabus structure; always on) ═══ */
.edge-bundle-page div.product p.price {
    background: #E9F3ED;
    border-radius: 12px;
    padding: 16px 20px !important;
    display: flex;
    direction: ltr !important;        /* Sober sets direction:rtl on .sale .price, which mirrored the whole box */
    flex-direction: row !important;
    justify-content: flex-start;
    align-items: baseline;
    gap: 14px;
    flex-wrap: wrap;
    margin: 4px 0 20px !important;
}
.edge-bundle-page div.product p.price del,
.edge-bundle-page div.product p.price ins,
.edge-bundle-page div.product p.price .amount,
.edge-bundle-page div.product p.price .edge-bundle-price__label,
.edge-bundle-page div.product p.price .edge-bundle-price__excl { float: none !important; }
.edge-bundle-page div.product p.price .edge-bundle-price__label { order: 2; font-size: 13px; color: #5B667A; font-weight: 600; text-transform: uppercase; letter-spacing: .04em; margin-left: -6px; }
.edge-bundle-page div.product p.price .edge-bundle-price__excl { order: 4; flex-basis: 100%; display: flex; gap: 6px; align-items: baseline; font-size: 14px; color: #5B667A; margin-top: 2px; }
.edge-bundle-page div.product p.price .edge-bundle-price__excl .amount { color: #5B667A !important; font-size: 14px !important; font-weight: 600; }
.edge-bundle-page div.product p.price .edge-bundle-price__excl .edge-vat-label { font-size: 12px; text-transform: uppercase; letter-spacing: .04em; }
.edge-bundle-page div.product p.price .edge-bundle-price__excl-was { font-size: 12px; color: #8A93A0; }
.edge-bundle-page div.product p.price .edge-bundle-price__excl-was .amount { color: #8A93A0 !important; font-size: 12px !important; font-weight: 500; }
.edge-bundle-page div.product p.price del { order: 0; }
.edge-bundle-page div.product p.price del .amount { color: #8A93A0 !important; font-size: 16px; }
.edge-bundle-page div.product p.price ins { order: 1; text-decoration: none; }
.edge-bundle-page div.product p.price ins .amount { color: #2E7D4F !important; font-size: 30px !important; font-weight: 700; }
/* Was / now / saving, left to right, as on prod (Dane, 14 Oct) */
.edge-bundle-page div.product p.price .edge-bundle-saving {
    order: 3;
    align-self: center;
    display: inline-flex;
    align-items: baseline;
    gap: 5px;
    background: #C62828;
    color: #fff;
    font-size: 13px;
    font-weight: 600;
    line-height: 1.3;
    padding: 4px 10px;
    border-radius: 999px;
    white-space: nowrap;
}
/* Percentage first, rand amount after — explicit so theme price rules can't flip it */
.edge-bundle-page div.product p.price .edge-bundle-saving__pct { order: 1; }
.edge-bundle-page div.product p.price .edge-bundle-saving__amount { order: 2; }
.edge-bundle-page div.product p.price .edge-bundle-saving .amount,
.edge-bundle-page div.product p.price .edge-bundle-saving bdi { color: #fff !important; font-size: 13px !important; font-weight: 600; float: none !important; }

.edge-bundle-page .edge-bundle-includes { border: 1px solid #D8E1EC; border-radius: 12px; }
.edge-bundle-page .edge-bundle-includes__head { background: #003770; color: #fff; letter-spacing: .08em; }
.edge-bundle-page .edge-bundle-includes ul { counter-reset: syl; }
.edge-bundle-page .edge-bundle-includes li {
    position: relative;
    padding-left: 48px;
}
.edge-bundle-page .edge-bundle-includes li::before {
    counter-increment: syl;
    content: counter(syl);
    position: absolute;
    left: 15px;
    top: 50%;
    transform: translateY(-50%);
    width: 20px;
    height: 20px;
    line-height: 20px;
    text-align: center;
    background: #003770;
    color: #fff;
    border-radius: 50%;
    font-size: 11px;
    font-weight: 700;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}
.edge-bundle-includes li.edge-gvm-link { cursor: pointer; transition: background .13s ease; }
.edge-bundle-includes li.edge-gvm-link:hover,
.edge-bundle-includes li.edge-gvm-link:focus-visible { background: #F2F6FB; }
.edge-bundle-includes__title { flex: 1 1 auto; }
.edge-bundle-includes__right { display: inline-flex; gap: 10px; align-items: baseline; white-space: nowrap; }
.edge-bundle-includes__view {
    font-size: 11px;
    font-weight: 700;
    color: #2C5A8C;
    text-decoration: underline;
    opacity: .7;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}
.edge-bundle-includes li.edge-gvm-link:hover .edge-bundle-includes__view { opacity: 1; }

/* — Centered cart panel, gentler steppers — */
.edge-bundle-page div.product form.cart {
    background: #F6F8FA;
    border: 1px solid #E4E8ED;
    border-radius: 12px;
    padding: 22px;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 14px;
}
.edge-bundle-page div.product form.cart .quantity { margin: 0 !important; float: none !important; }
.edge-bundle-page div.product form.cart .single_add_to_cart_button {
    width: 100%;
    max-width: 420px;
    margin: 0 !important;
    border-radius: 8px !important;
}
.edge-bundle-page div.product form.cart .quantity .decrease,
.edge-bundle-page div.product form.cart .quantity .increase,
.edge-options-box .quantity .decrease,
.edge-options-box .quantity .increase {
    width: 34px !important;
    height: 34px !important;
    padding: 0 !important;
    line-height: 32px !important;
    border-radius: 7px !important;
}
.edge-bundle-page div.product form.cart .quantity .decrease,
.edge-bundle-page div.product form.cart .quantity .increase,
.edge-options-box .quantity .decrease,
.edge-options-box .quantity .increase {
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
}
.edge-bundle-page div.product form.cart .quantity .decrease svg,
.edge-bundle-page div.product form.cart .quantity .increase svg,
.edge-options-box .quantity .decrease svg,
.edge-options-box .quantity .increase svg {
    width: 14px !important;
    height: 14px !important;
    display: block;
}
.edge-bundle-page div.product form.cart .quantity .qty,
.edge-options-box .quantity .qty {
    height: 34px !important;
    width: 48px !important;
    font-size: 14px !important;
}

/* — Product meta (Includes / SKU / Tag / T&Cs): one consistent size — */
.single-product .product_meta,
.single-product .product_meta > span,
.single-product .product_meta .tagged_as,
.single-product .product_meta a {
    font-size: 14px !important;
}
.single-product .product_meta > span { display: block; margin-bottom: 6px; }

/* — Gallery container: consistent radius, badges inside the frame — */
.single-product div.product .woocommerce-product-gallery { position: relative; border-radius: 14px; overflow: hidden; }
.single-product div.product .ribbons { position: absolute; top: 14px; left: 14px; z-index: 5; }

/* ═══ Grouped options — compact comparable table (bundle-box treatment) ═══ */
.edge-options-box {
    border: 1px solid #E5E0D8;
    border-radius: 10px;
    overflow: hidden;
    margin: 0 0 20px;
    background: #fff;
}
.edge-options-box__head {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: 16px;
    background: #003770;
    color: #fff;
    font-size: 12px;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
    padding: 10px 16px;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}
.edge-options-box__compare {
    color: #fff !important;
    font-size: 11px;
    text-decoration: underline;
    white-space: nowrap;
    letter-spacing: .04em;
}
.edge-options-box__compare:hover { color: #F8971D !important; }
.edge-options-box { border-color: #D8E1EC; }
.edge-options-box table.group_table { margin: 0 !important; border: 0 !important; }
.edge-options-box tr.woocommerce-grouped-product-list-item {
    display: grid !important;
    grid-template-columns: minmax(0, 1fr) auto;
    grid-template-areas:
        "head qty"
        "info qty";
    gap: 3px 20px;
    align-items: center;
    padding: 14px 16px !important;
    margin: 0 !important;
    border: 0 !important;
    border-top: 1px solid #EDE9E1 !important;
    border-radius: 0 !important;
}
.edge-options-box tr.woocommerce-grouped-product-list-item:first-child { border-top: 0 !important; }
.edge-options-box tr.woocommerce-grouped-product-list-item:hover { background: #FBFAF7; }
.edge-options-box td { padding: 0 !important; border: 0 !important; background: none !important; }
.edge-options-box td.option_label {
    grid-area: head;
    display: flex !important;
    justify-content: space-between;
    align-items: baseline;
    gap: 16px;
    width: auto !important;
}
.edge-options-box td.woocommerce-grouped-product-list-item__label { grid-area: info; }
.edge-options-box td.woocommerce-grouped-product-list-item__quantity { grid-area: qty; }
.edge-options-box .edg_price { font-size: 15.5px !important; font-weight: 650 !important; color: #1B2733 !important; }
.edge-options-box .edg_option_price { font-size: 15.5px; font-weight: 700; color: #003770; white-space: nowrap; }
.edge-options-box .edg_option_price small { font-size: 10.5px; font-weight: 400; color: #98A1AC; }

/* compact single-line info: Includes · SKU · ISBN · Format · View More */
.edge-options-box .edg_grouped_list_desc { margin: 0 !important; }
.edge-options-box .edg_grouped_list_desc .item {
    display: inline !important;
    font-size: 12.5px !important;
    color: #6B7683 !important;
    padding: 0 !important;
    margin: 0 !important;
}
.edge-options-box .edg_grouped_list_desc .item:empty { display: none !important; }
.edge-options-box .edg_grouped_list_desc .item + .item:not(:empty)::before {
    content: "\00B7";
    margin: 0 7px 0 6px;
    color: #C7BFB2;
}
.edge-options-box .edg_grouped_list_desc .item label {
    font-weight: 650;
    color: #4A5560;
    min-width: 0 !important;
    margin: 0 3px 0 0 !important;
    display: inline !important;
}
.edge-options-box .edg_grouped_list_desc .item br { content: ""; }
.edge-options-box .edg_grouped_list_desc .item br::after { content: ", "; }
.edge-options-box .edg_grouped_list_desc { line-height: 1.8 !important; }
.edge-options-box .edge_group_product_link {
    font-size: 12.5px !important;
    margin-left: 10px;
    white-space: nowrap;
}

@media (max-width: 640px) {
    .edge-options-box tr.woocommerce-grouped-product-list-item {
        grid-template-columns: 1fr;
        grid-template-areas:
            "head"
            "info"
            "qty";
    }
    .edge-options-box td.woocommerce-grouped-product-list-item__quantity { margin-top: 8px !important; }
}

/* ═══ Iteration 3 (Dane, 12 Jul evening) ═══ */

/* card meta context label */
.edge-card-meta__label {
    font-weight: 650;
    color: #4A5560;
}

/* the bundles banner now leads the whole catalogue block (above the chips) */
.edge-bundle-banner--catalogue { margin-bottom: 20px; }

/* — Compare options: full specs under the add-to-cart form — */
.edge-options-compare {
    border: 1px solid #E5E0D8;
    border-radius: 10px;
    overflow: hidden;
    margin: 26px 0 0;
    background: #fff;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}
.edge-options-compare__head {
    background: #F5F2EC;
    font-size: 12px;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
    padding: 10px 16px;
}
.edge-options-compare__scroll { overflow-x: auto; }
.edge-options-compare table {
    border-collapse: collapse;
    width: 100%;
    margin: 0;
    font-size: 13px;
}
.edge-options-compare th,
.edge-options-compare td {
    text-align: left;
    vertical-align: top;
    padding: 10px 14px;
    border-top: 1px solid #EDE9E1;
    min-width: 130px;
}
.edge-options-compare thead th {
    border-top: 0;
    font-size: 12.5px;
    font-weight: 650;
    color: #1B2733;
    white-space: nowrap;
}
.edge-options-compare tbody th {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .05em;
    text-transform: uppercase;
    color: #8A93A0;
    white-space: nowrap;
    min-width: 70px;
}
.edge-options-compare td { color: #3A4552; line-height: 1.5; }
.edge-options-compare td .amount { font-weight: 700; color: #003770; }
.edge-options-compare td small { color: #98A1AC; }

/* options rows: with the info line gone, tighten the row grid */
.edge-options-box tr.woocommerce-grouped-product-list-item {
    grid-template-areas:
        "head qty"
        "info qty";
    align-items: center;
}
.edge-options-box .woocommerce-grouped-product-list-item__label label { margin: 0; }

/* minimal rows no longer stretch the form — force full width */
.woocommerce div.product form.cart.grouped_form { width: 100% !important; display: block; }
.edge-options-box { width: 100%; }
.edge-options-box table.group_table { width: 100% !important; }

/* compare table: hairlines only, no theme table chrome */
.edge-options-compare table { border: 0 !important; }

.edge-options-compare th,
.edge-options-compare td {
    border: 0 !important;
    border-top: 1px solid #EDE9E1 !important;
}
.edge-options-compare thead th { border-top: 0 !important; }
.edge-options-compare tbody td + td,
.edge-options-compare tbody th + td,
.edge-options-compare thead th + th {
    border-left: 1px solid #F4F0E8 !important;
}

/* ═══ Iteration 4 (12 Jul night) ═══ */

/* — Catalogue grid: CSS grid instead of theme floats + equal-height JS.
   The JS measured heights BEFORE our padding grew the cards, clipping the
   CTA and badges flush against the card edge. Scoped to archive/search so
   related-product carousels keep their own layout. — */
.post-type-archive-product .woocommerce ul.products,
.post-type-archive-product ul.products,
.tax-product_cat ul.products,
.search ul.products {
    display: grid !important;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 28px;
    width: 100%;
    margin: 0 0 40px !important;
}
.post-type-archive-product ul.products.columns-3,
.tax-product_cat ul.products.columns-3,
.search ul.products.columns-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.post-type-archive-product ul.products.columns-5,
.tax-product_cat ul.products.columns-5,
.search ul.products.columns-5 { grid-template-columns: repeat(5, minmax(0, 1fr)); }

.post-type-archive-product ul.products li.product,
.tax-product_cat ul.products li.product,
.search ul.products li.product {
    width: 100% !important;
    height: auto !important;   /* beats the theme's inline equal-height */
    float: none !important;
    margin: 0 !important;
}
@media (max-width: 1100px) {
    .post-type-archive-product .woocommerce ul.products,
    .post-type-archive-product ul.products,
    .tax-product_cat ul.products,
    .search ul.products { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
}
@media (max-width: 900px) {
    .post-type-archive-product .woocommerce ul.products,
    .post-type-archive-product ul.products,
    .tax-product_cat ul.products,
    .search ul.products { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
}
@media (max-width: 640px) {
    .post-type-archive-product .woocommerce ul.products,
    .post-type-archive-product ul.products,
    .tax-product_cat ul.products,
    .search ul.products { grid-template-columns: 1fr !important; }
}

/* balanced vertical rhythm inside the card */
.woocommerce ul.products li.product .product-header { margin-bottom: 18px; }
.products li.product .edge-card-meta { margin: 9px 0 0; }
.woocommerce ul.products li.product .price-wrapper { margin: 10px 0 0; }
.woocommerce ul.products li.product > a.button { margin-top: auto; }
/* guaranteed air between the last content line and the CTA */
.woocommerce ul.products li.product > *:nth-last-child(2) { margin-bottom: 18px; }
.woocommerce ul.products li.product .ribbons { top: 12px; left: 12px; }

/* — Option rows: bundle-box format (numbered circle · name+format · price ·
   qty + add) — */
.edge-options-box tbody { counter-reset: opt; }
.edge-options-box tr.woocommerce-grouped-product-list-item {
    counter-increment: opt;
    position: relative;
    padding: 16px 16px 16px 54px !important;
}
.edge-options-box tr.woocommerce-grouped-product-list-item::before {
    content: counter(opt);
    position: absolute;
    left: 16px;
    top: 20px;
    width: 20px;
    height: 20px;
    line-height: 20px;
    text-align: center;
    background: #003770;
    color: #fff;
    border-radius: 50%;
    font-size: 11px;
    font-weight: 700;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}
.edge-option-name { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.edge-option-format {
    font-size: 12px;
    color: #77808C;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}
.edge-options-box .edg_price { font-size: 15px !important; }

/* compact qty + inline add button */
.edge-options-box td.woocommerce-grouped-product-list-item__quantity {
    display: flex !important;
    align-items: center;
    gap: 10px;
}
.edge-options-box .quantity { display: inline-flex; align-items: center; margin: 0 !important; }
.edge-options-box .quantity .decrease,
.edge-options-box .quantity .increase {
    width: 26px !important;
    height: 26px !important;
    border-radius: 6px !important;
}
.edge-options-box .quantity .decrease svg,
.edge-options-box .quantity .increase svg { width: 11px !important; height: 11px !important; }
.edge-options-box .quantity .qty {
    height: 26px !important;
    width: 38px !important;
    font-size: 13px !important;
}
.edge-options-box a.edge-row-add,
.edge-options-compare a.edge-row-add {
    display: inline-block;
    background: #003770 !important;
    color: #fff !important;
    border-radius: 7px !important;
    padding: 9px 16px !important;
    font-size: 11.5px !important;
    font-weight: 650;
    letter-spacing: .06em;
    text-transform: uppercase;
    line-height: 1 !important;
    height: auto !important;
    width: auto !important;
    white-space: nowrap;
}
.edge-options-box a.edge-row-add:hover,
.edge-options-compare a.edge-row-add:hover { background: var(--edge-navy-hover) !important; }
/* Woo appends a "View cart" link after ajax adds — the popup covers that */
.edge-options-box .added_to_cart,
.edge-options-compare .added_to_cart { display: none !important; }

/* compare table: navy head to match, add-to-cart row */
.edge-options-compare { border-color: #D8E1EC; }
.edge-options-compare__head {
    background: #003770;
    color: #fff;
}
.edge-options-compare__addrow td { border-top: 1px solid #EDE9E1 !important; }
.edge-options-compare { scroll-margin-top: 130px; }

@media (max-width: 640px) {
    .edge-options-box td.woocommerce-grouped-product-list-item__quantity {
        margin-top: 10px !important;
        flex-wrap: wrap;
    }
}

/* ═══ Iteration 5 (12 Jul late) — authoritative options-box + compare layout.
   Overrides the stacked-iteration grid rules above (last-wins). The narrow
   summary column can't fit name|price|qty|add on one line, so each option is
   a small stacked card: headline · meta · actions. ═══ */

.edge-options-box tr.woocommerce-grouped-product-list-item {
    display: grid !important;
    grid-template-columns: 1fr !important;
    grid-template-areas: "head" "info" "act" !important;
    align-items: stretch !important;
    gap: 5px 0 !important;
    padding: 16px 16px 16px 52px !important;
}
.edge-options-box tr.woocommerce-grouped-product-list-item::before { top: 18px; }

/* headline: name left, price right */
.edge-options-box td.option_label {
    grid-area: head !important;
    display: flex !important;
    justify-content: space-between;
    align-items: baseline;
    gap: 14px;
    flex-wrap: wrap;
}
.edge-options-box .edg_price {
    font-size: 15.5px !important;
    font-weight: 650 !important;
    color: #14202E !important;
}
.edge-options-box .edg_option_price { font-size: 15px; font-weight: 700; color: #003770; white-space: nowrap; }
.edge-options-box .edg_option_price small { font-size: 10.5px; font-weight: 400; color: #98A1AC; }

/* meta line + view-details */
.edge-options-box td.woocommerce-grouped-product-list-item__label { grid-area: info !important; }
/* only the OUTER wrapper label is block — NOT the nested Format:/SKU: labels */
.edge-options-box td.woocommerce-grouped-product-list-item__label > label { display: block; margin: 0; font-weight: 400; }
.edge-options-box .edge-option-meta {
    display: block;
    font-size: 12.5px;
    line-height: 1.7;
    color: #6B7683;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}
.edge-options-box .edge-option-meta span { display: inline; }
.edge-options-box .edge-option-meta label {
    display: inline !important;
    font-weight: 650;
    color: #4A5560;
    margin: 0 3px 0 0 !important;
    min-width: 0 !important;
}
.edge-options-box .edge-option-meta i { font-style: normal; color: #C7BFB2; margin: 0 5px; }
.edge-options-box a.edge_group_product_link {
    display: inline-block;
    margin: 5px 0 0 !important;
    font-size: 12.5px !important;
    font-weight: 600;
    color: #003770 !important;
    text-decoration: underline;
    white-space: nowrap;
}
.edge-options-box a.edge_group_product_link:hover { color: #F8971D !important; }

/* actions row: compact stepper + add button */
.edge-options-box td.woocommerce-grouped-product-list-item__quantity {
    grid-area: act !important;
    display: flex !important;
    align-items: center;
    gap: 12px;
    margin: 8px 0 0 !important;
    justify-content: flex-start;
    flex-wrap: wrap;
}

/* add-to-cart button + loading/added states (fixes the misaligned spinner) */
.edge-options-box a.edge-row-add,
.edge-options-compare a.edge-row-add {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: #003770 !important;
    color: #fff !important;
    border-radius: 7px !important;
    padding: 10px 18px !important;
    font-size: 11.5px !important;
    font-weight: 650;
    letter-spacing: .06em;
    text-transform: uppercase;
    line-height: 1 !important;
    height: auto !important;
    width: auto !important;
    min-height: 0 !important;
    white-space: nowrap;
}
.edge-options-box a.edge-row-add:hover,
.edge-options-compare a.edge-row-add:hover { background: var(--edge-navy-hover) !important; color: #fff !important; }
.edge-row-add.loading { pointer-events: none; opacity: .85; }
.edge-row-add.loading .edge-row-add__label { visibility: hidden; }
.edge-row-add.loading::after {
    content: "";
    position: absolute;
    top: 50%; left: 50%;
    width: 14px; height: 14px;
    margin: -7px 0 0 -7px;
    border: 2px solid rgba(255, 255, 255, .4);
    border-top-color: #fff;
    border-radius: 50%;
    animation: edge-row-spin .6s linear infinite;
}
.edge-row-add.added .edge-row-add__label::after { content: " \2713"; }
@keyframes edge-row-spin { to { transform: rotate(360deg); } }

/* full-width compare table (now hooked below the summary) */
.edge-options-compare {
    clear: both;
    margin: 44px 0 8px !important;
    scroll-margin-top: 130px;
}
.edge-options-compare table { min-width: 620px; }
.edge-options-compare thead th:first-child,
.edge-options-compare tbody th { background: #FAFBFC; }
.edge-options-compare .edge-options-compare__addrow td { padding-top: 14px; padding-bottom: 16px; }

@media (max-width: 640px) {
    .edge-options-box td.woocommerce-grouped-product-list-item__quantity { flex-wrap: wrap; }
}

/* ═══ Iteration 6 (13 Jul) — format in title, SKU/ISBN own lines, card formats ═══ */

/* format suffix inside the option title */
.edge-options-box .edg_price .edge-option-fmt {
    font-weight: 500;
    color: #6B7683;
    font-size: 13px;
}
.edge-options-box .edg_price .edge-option-fmt::before { content: "· "; color: #C7BFB2; }

/* SKU / ISBN each on its own line */
.edge-options-box .edge-option-meta__line {
    display: block !important;
    font-size: 12.5px;
    line-height: 1.65;
    color: #6B7683;
}
.edge-options-box .edge-option-meta__line label {
    display: inline !important;
    font-weight: 650;
    color: #4A5560;
    margin: 0 4px 0 0 !important;
    min-width: 0 !important;
}

/* catalogue card: Digital / Print availability badges */
.edge-card-formats {
    display: flex;
    justify-content: center;
    gap: 6px;
    margin: 8px 0 0 !important;
    padding: 0 24px;
    flex-wrap: wrap;
}
.edge-format-badge {
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
    padding: 3px 9px;
    border-radius: 20px;
    line-height: 1.4;
}
.edge-format-badge--digital { background: #EAF0F6; color: #003770; }
.edge-format-badge--print { background: #FDF1E3; color: #A65E00; }

/* — Compact quantity control (dropdown / input) replaces the big stepper — */
.edge-options-box .edge-qty {
    height: 40px;
    border: 1px solid #CBD3DC;
    border-radius: 8px;
    padding: 0 12px;
    font-size: 14px;
    color: #1B2733;
    background: #fff;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
    line-height: 1;
}
.edge-options-box .edge-qty:focus {
    outline: none;
    border-color: #003770;
    box-shadow: 0 0 0 3px rgba(0, 55, 112, .12);
}
.edge-options-box .edge-qty--select {
    min-width: 62px;
    padding-right: 28px;
    cursor: pointer;
    -webkit-appearance: none;
    -moz-appearance: none;
    appearance: none;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath fill='%23667' d='M0 0l5 6 5-6z'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 11px center;
}
.edge-options-box .edge-qty--input { width: 74px; text-align: center; }

/* ═══ Iteration 6b — flush-card ROOT CAUSE (diagnosed) + mobile ═══ */

/* WooCommerce injects an <a class="added_to_cart">View cart</a> AFTER the
   card button once a simple/bundle product is added via ajax. It was only
   hidden inside option boxes, so on catalogue cards it became a trailing
   element that broke the card foot (the button read as flush). We use the
   slide-in popup instead, so this link is redundant everywhere — hide it. */
.woocommerce ul.products li.product a.added_to_cart,
.woocommerce ul.products li.product .added_to_cart {
    display: none !important;
}
/* belt-and-braces: the relocated CTA is always the meaningful last child */
.woocommerce ul.products li.product > a.button.add_to_cart_button,
.woocommerce ul.products li.product > a.button {
    margin-top: auto;
    margin-bottom: 0;
}

/* ── Mobile: option rows + compare table ── */
@media (max-width: 600px) {
    /* options box actions wrap cleanly: qty then full-width add button */
    .edge-options-box td.woocommerce-grouped-product-list-item__quantity {
        gap: 10px;
    }
    .edge-options-box a.edge-row-add { flex: 1 1 auto; text-align: center; }
    .edge-options-box .edge-qty--select,
    .edge-options-box .edge-qty--input { flex: 0 0 auto; }

    /* compare table: keep the first (label) column visible while scrolling */
    .edge-options-compare__scroll { -webkit-overflow-scrolling: touch; }
    .edge-options-compare thead th:first-child,
    .edge-options-compare tbody th {
        position: sticky;
        left: 0;
        z-index: 1;
        background: #FAFBFC;
    }
    .edge-options-compare table { min-width: 480px; }
}

/* ═══ Iteration 7 (13 Jul) — DEFINITIVE fixes (CDP-measured) ═══ */

/* FLUSH BUTTON: CDP showed the card's padding-bottom computed to 0 (WooCommerce
   core resets it), so the CTA sat 1px from the card edge. Force the bottom
   space with !important — applies to the catalogue AND the single-product
   Related Products cards (both are .woocommerce ul.products li.product). */
.woocommerce ul.products li.product {
    padding-bottom: 24px !important;
}
.woocommerce ul.products li.product > a.button {
    margin-top: auto;
    margin-bottom: 0 !important;
}

/* Related Products cards: same framed treatment + a little breathing room
   around the grid so they don't butt against the section edges. */
.woocommerce .related.products ul.products,
.woocommerce .up-sells ul.products {
    padding-top: 6px;
}
.woocommerce .related.products ul.products li.product,
.woocommerce .up-sells ul.products li.product {
    margin-bottom: 8px;
}

/* LOADING STATE: keep the button navy and centre the spinner (the theme's
   WooCommerce .button.loading::after positions a spinner at the right edge — 
   override it so ours sits dead-centre). */
.edge-options-box a.edge-row-add.loading,
.edge-options-compare a.edge-row-add.loading {
    background: #003770 !important;
    color: transparent !important;
    opacity: 1 !important;
}
.edge-options-box a.edge-row-add.loading::after,
.edge-options-compare a.edge-row-add.loading::after {
    content: "" !important;
    position: absolute !important;
    top: 50% !important;
    left: 50% !important;
    right: auto !important;
    width: 15px !important;
    height: 15px !important;
    margin: -7.5px 0 0 -7.5px !important;
    padding: 0 !important;
    border: 2px solid rgba(255, 255, 255, .45) !important;
    border-top-color: #fff !important;
    border-radius: 50% !important;
    background: none !important;
    animation: edge-row-spin .6s linear infinite !important;
}

/* ═══ Iteration 8 (13 Jul) — card chip gap, view-details underline, tick ═══ */

/* Gap between the format chips and the CTA. The button uses margin-top:auto to
   bottom-align across a row, which collapses its own top margin in short cards,
   so the gap has to come from the content above it. */
.products li.product .edge-card-meta { margin-bottom: 6px; }
.products li.product .edge-card-formats { margin-bottom: 18px !important; }

/* "View details ›" was double-underlined (text-decoration + a theme border).
   Keep a single clean underline. */
.edge-options-box a.edge_group_product_link,
.edge-bundle-includes__view {
    text-decoration: underline !important;
    border-bottom: 0 !important;
    box-shadow: none !important;
}

/* Two ticks appeared on the added button — WooCommerce's .button.added::after
   plus our label tick. Drop WooCommerce's, keep the one on the label. */
.edge-options-box a.edge-row-add.added::after,
.edge-options-compare a.edge-row-add.added::after {
    display: none !important;
    content: none !important;
}

/* ═══ Compare table: equal option columns ═══ */
/* table-layout:fixed divides the container evenly across every option, so a
   title with 12 formats crushed each column until the headers overlapped and
   were unreadable. Content-driven sizing + a real min-width per option makes
   the __scroll wrapper scroll instead (the ≤900px block below already did
   this; desktop needs it just as much once the option count climbs). */
.edge-options-compare table {
    table-layout: auto;
    width: max-content;
    min-width: 100%;
}
.edge-options-compare th:not(:first-child),
.edge-options-compare td:not(:first-child) { min-width: 150px; }
.edge-options-compare th:first-child,
.edge-options-compare td:first-child { width: auto; min-width: 118px; }
/* option names wrap rather than colliding with the next column */
.edge-options-compare thead th { white-space: normal; max-width: 240px; }
/* row labels stay visible while the options scroll under them */
.edge-options-compare tbody th {
    position: sticky;
    left: 0;
    z-index: 1;
}
.edge-options-compare th,
.edge-options-compare td { overflow-wrap: break-word; word-break: break-word; }

/* ═══ Iteration 9 (22 Jul) — Terje feedback batch ═══ */

/* Compare table below 900px: content-driven sizing is now the base behaviour
   (see above), so this block only widens the per-option minimum on narrow
   screens where a cramped column is harder to read. */
@media (max-width: 900px) {
    .edge-options-compare table {
        table-layout: auto !important;
        width: max-content;
        min-width: 100%;
    }
    .edge-options-compare th:not(:first-child),
    .edge-options-compare td:not(:first-child) { min-width: 170px; }
    .edge-options-compare th:first-child,
    .edge-options-compare td:first-child { width: auto; min-width: 110px; }
}

/* Product meta: the parent theme leaves 60px under the price — pull the meta
   block (Includes/SKU/ISBN) up into that dead space. */
.single-product.woocommerce div.product p.price { margin-bottom: 16px !important; }
.single-product .product_meta .item { margin: 0 0 4px; }

/* Includes row sits directly above the SKU — give it a touch of emphasis. */
.single-product .product_meta .item--includes label { color: #003770; }
.single-product .product_meta .item--includes .includes { font-weight: 500; }

/* ═══ Related-products slot → bundle upsell (Oct 2026) ═══
   hooks/woo-related-upsell.php drops WC's related grid and renders these
   cards in its place: "Also available as a bundle" on a title's page,
   "Other bundles" on a bundle's. Card look follows the listing cards. */
.edge-related-bundles {
    clear: both;
    margin: 48px 0 32px;
}
.edge-related-bundles__title {
    font-size: 22px;
    font-weight: 700;
    color: var(--edge-navy);
    margin: 0 0 20px;
    padding-bottom: 12px;
    border-bottom: 2px solid #E3E8EF;
}
.edge-related-bundles__grid {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
    gap: 24px;
}
.edge-related-bundle {
    position: relative;
    display: flex;
    flex-direction: column;
    margin: 0;
    background: #fff;
    border: 1px solid #E3E8EF;
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(16, 42, 67, .04), 0 8px 22px rgba(16, 42, 67, .05);
    transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease;
}
.edge-related-bundle:hover {
    transform: translateY(-4px);
    border-color: #BFCCDC;
    box-shadow: 0 4px 10px rgba(16, 42, 67, .07), 0 16px 36px rgba(16, 42, 67, .12);
}
.edge-related-bundle__media {
    display: block;
    background: linear-gradient(172deg, #F7F9FB 0%, #ECF0F5 100%);
    border-radius: 12px 12px 0 0;
    overflow: hidden;
    padding: 20px 20px 0;
}
.edge-related-bundle__media img {
    display: block;
    width: 100%;
    height: 200px;
    object-fit: contain;
    object-position: bottom center;
    margin: 0;
}
/* Saving pill: same classes as the bundle price box, floated like the
   catalogue card ribbon. */
.edge-related-bundle .edge-bundle-saving {
    position: absolute;
    top: 12px;
    right: 12px;
    z-index: 3;
    display: inline-flex;
    background: #C62828;
    color: #fff;
    font-size: 12px;
    font-weight: 600;
    line-height: 1.3;
    padding: 4px 10px;
    border-radius: 999px;
    white-space: nowrap;
}
.edge-related-bundle__body {
    display: flex;
    flex-direction: column;
    flex: 1 1 auto;
    padding: 16px 20px 22px;
    text-align: center;
}
.edge-related-bundle__name {
    font-size: 16.5px;
    font-weight: 650;
    line-height: 1.35;
    margin: 0 0 8px;
}
.edge-related-bundle__name a {
    color: #14202E;
    text-decoration: none;
}
.edge-related-bundle__name a:hover { color: var(--edge-navy); }
.edge-related-bundle__price {
    color: var(--edge-navy);
    font-size: 16px;
    font-weight: 600;
    margin: 0 0 16px;
}
.edge-related-bundle__price del .amount {
    color: #98A1AC;
    font-size: 13px;
    font-weight: 400;
}
.edge-related-bundle__price ins { text-decoration: none; }
.edge-related-bundle__btn {
    display: flex;
    align-items: center;
    justify-content: center;
    margin-top: auto;
    padding: 12px 10px;
    background: var(--edge-navy);
    color: #fff;
    border-radius: 8px;
    font-size: 12px;
    font-weight: 600;
    letter-spacing: .08em;
    text-transform: uppercase;
    text-decoration: none;
    transition: background .15s ease;
}
.edge-related-bundle__btn:hover {
    background: var(--edge-navy-hover);
    color: #fff;
}
@media (max-width: 767px) {
    .edge-related-bundles { margin: 36px 0 24px; }
    .edge-related-bundles__grid {
        grid-template-columns: 1fr;
        gap: 16px;
    }
    .edge-related-bundle__media img { height: 160px; }
}
