.cc-manage{appearance:none;-webkit-appearance:none;display:inline;margin:0;padding:0;border:0;background:none;box-shadow:none;font:inherit;color:var(--cc-accent,var(--bs-link-color,currentColor));text-decoration:none;cursor:pointer}.cc-manage:hover{color:var(--cc-accent-hover,var(--bs-link-hover-color,currentColor));text-decoration:underline}.cc-manage:focus-visible{outline:2px solid var(--cc-accent,var(--bs-link-color,currentColor));outline-offset:2px;text-decoration:underline}.cc-manage-sep{margin:0 .4em;opacity:.65}.cc-manage-slot--fallback{box-sizing:border-box;width:100%;margin-top:1.5rem;padding:.75rem 1rem;border-top:1px solid var(--cc-border,rgb(128 128 128 / .25));text-align:center}.cc-consent{--cc-bg:#ffffff;--cc-fg:#1f2933;--cc-muted:#52606d;--cc-border:#e4e7eb;--cc-shadow:0 -2px 24px rgba(15, 23, 42, 0.18);--cc-accent:#2563eb;--cc-accent-fg:#ffffff;--cc-accent-hover:#1d4ed8;--cc-neutral:#e4e7eb;--cc-neutral-fg:#1f2933;--cc-neutral-hover:#d2d6dc;--cc-badge-bg:#e6f0ff;--cc-badge-fg:#1d4ed8;--cc-radius:0.75rem;--cc-btn-radius:0.5rem;--cc-z:2147483000;color:var(--cc-fg);font-size:.95rem;line-height:1.5}.cc-banner{position:fixed;z-index:var(--cc-z);background:var(--cc-bg);color:var(--cc-fg);box-shadow:var(--cc-shadow);border:1px solid var(--cc-border)}.cc-banner--bottom,.cc-banner--top{left:0;right:0;border-left:0;border-right:0}.cc-banner--bottom{bottom:0;border-bottom:0}.cc-banner--top{top:0;border-top:0}.cc-banner--bottom_left,.cc-banner--bottom_right{bottom:1.25rem;width:min(440px, calc(100vw - 2.5rem));border-radius:var(--cc-radius)}.cc-banner--bottom_left{left:1.25rem}.cc-banner--bottom_right{right:1.25rem}.cc-banner__inner{max-width:1180px;margin:0 auto;padding:1.25rem 1.5rem;display:flex;flex-wrap:wrap;align-items:center;gap:1rem 1.75rem}.cc-banner--bottom_left .cc-banner__inner,.cc-banner--bottom_right .cc-banner__inner{flex-direction:column;align-items:stretch;padding:1.25rem}.cc-banner__text{flex:1 1 320px;min-width:0}.cc-banner__title{margin:0 0 .35rem;font-size:1.05rem;font-weight:700}.cc-banner__intro{margin:0;color:var(--cc-muted);font-size:.9rem}.cc-banner__chips{list-style:none;display:flex;flex-wrap:wrap;gap:.4rem;margin:.6rem 0 0;padding:0}.cc-banner__chip{font-size:.75rem;padding:.15rem .6rem;border-radius:999px;background:var(--cc-neutral);color:var(--cc-neutral-fg)}.cc-banner__chip--essential{background:var(--cc-badge-bg);color:var(--cc-badge-fg)}.cc-banner__actions{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem;flex:0 0 auto}.cc-banner--bottom_left .cc-banner__actions,.cc-banner--bottom_right .cc-banner__actions{justify-content:stretch}.cc-btn{appearance:none;border:1px solid #fff0;border-radius:var(--cc-btn-radius);padding:.55rem 1.1rem;font-size:.9rem;font-weight:600;line-height:1.2;cursor:pointer;transition:background-color 0.15s ease,border-color 0.15s ease,color 0.15s ease;background:var(--cc-neutral);color:var(--cc-neutral-fg)}.cc-btn:hover{background:var(--cc-neutral-hover)}.cc-btn:focus-visible{outline:2px solid var(--cc-accent);outline-offset:2px}.cc-btn--decision{min-width:9.5rem;text-align:center}.cc-btn--accept,.cc-btn--save{background:var(--cc-accent);color:var(--cc-accent-fg);border-color:var(--cc-accent)}.cc-btn--accept:hover,.cc-btn--save:hover{background:var(--cc-accent-hover);border-color:var(--cc-accent-hover)}.cc-btn--reject{background:var(--cc-neutral);color:var(--cc-neutral-fg);border-color:var(--cc-border)}.cc-btn--reject:hover{background:var(--cc-neutral-hover)}.cc-btn--settings{background:#fff0;color:var(--cc-accent);border-color:#fff0;text-decoration:underline;padding-left:.6rem;padding-right:.6rem}.cc-btn--settings:hover{background:#fff0;color:var(--cc-accent-hover)}.cc-banner__ccpa{flex:1 1 100%;margin-top:.25rem}.cc-settings__ccpa{padding:0 1.4rem .25rem}.cc-btn--do-not-sell{display:inline-block;width:100%;background:#fff0;color:var(--cc-accent);border-color:var(--cc-accent);text-decoration:underline;text-align:center}.cc-btn--do-not-sell:hover{background:var(--cc-badge-bg);color:var(--cc-accent-hover);border-color:var(--cc-accent-hover)}.cc-notice{position:fixed;left:0;right:0;bottom:0;z-index:calc(var(--cc-z) + 2);background:var(--cc-bg);color:var(--cc-fg);border-top:3px solid var(--cc-accent);box-shadow:var(--cc-shadow)}.cc-notice__inner{max-width:1180px;margin:0 auto;padding:.75rem 1.5rem;display:flex;align-items:center;justify-content:space-between;gap:1rem}.cc-notice__text{font-size:.88rem;line-height:1.45}.cc-notice__close{appearance:none;flex:0 0 auto;border:0;background:#fff0;color:var(--cc-muted);font-size:1.4rem;line-height:1;cursor:pointer;padding:0 .25rem}.cc-notice__close:hover{color:var(--cc-fg)}.cc-notice__close:focus-visible{outline:2px solid var(--cc-accent);outline-offset:2px}.cc-settings{position:fixed;inset:0;z-index:calc(var(--cc-z) + 1);display:flex;align-items:center;justify-content:center;padding:1rem}.cc-settings[hidden]{display:none}.cc-settings__overlay{position:absolute;inset:0;background:rgb(15 23 42 / .55)}.cc-settings__dialog{position:relative;background:var(--cc-bg);color:var(--cc-fg);border:1px solid var(--cc-border);border-radius:var(--cc-radius);box-shadow:0 12px 48px rgb(15 23 42 / .35);width:min(560px, 100%);max-height:min(85vh, 720px);display:flex;flex-direction:column;overflow:hidden}.cc-settings__header{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1.1rem 1.4rem;border-bottom:1px solid var(--cc-border)}.cc-settings__title{margin:0;font-size:1.1rem;font-weight:700}.cc-settings__close{appearance:none;border:0;background:#fff0;color:var(--cc-muted);font-size:1.6rem;line-height:1;cursor:pointer;padding:0 .25rem}.cc-settings__close:hover{color:var(--cc-fg)}.cc-settings__body{padding:1.1rem 1.4rem;overflow-y:auto}.cc-settings__intro{margin:0 0 1rem;color:var(--cc-muted);font-size:.88rem}.cc-settings__list{list-style:none;margin:0;padding:0}.cc-settings__item{padding:.9rem 0;border-bottom:1px solid var(--cc-border)}.cc-settings__item:last-child{border-bottom:0;padding-bottom:0}.cc-settings__row{display:flex;align-items:center;justify-content:space-between;gap:1rem}.cc-settings__label{display:flex;align-items:center;gap:.5rem;font-weight:600;margin:0}.cc-settings__badge{font-size:.7rem;font-weight:600;padding:.1rem .5rem;border-radius:999px;background:var(--cc-badge-bg);color:var(--cc-badge-fg);text-transform:uppercase;letter-spacing:.02em}.cc-settings__switch{margin:0;min-height:auto;padding-left:2.5em}.cc-settings__switch .form-check-input{cursor:pointer;width:2.4em;height:1.3em}.cc-settings__switch .form-check-input:disabled{cursor:not-allowed;opacity:.7}.cc-settings__desc{margin:.45rem 0 0;color:var(--cc-muted);font-size:.84rem}.cc-settings__footer{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.6rem;padding:1rem 1.4rem;border-top:1px solid var(--cc-border)}@media (max-width:575.98px){.cc-banner__inner{flex-direction:column;align-items:stretch}.cc-banner__actions{flex-direction:column;align-items:stretch}.cc-btn--decision{min-width:0;width:100%}.cc-settings__footer .cc-btn{flex:1 1 auto;text-align:center}}@media (prefers-color-scheme:dark){.cc-consent{--cc-bg:#1b1f24;--cc-fg:#e7ebef;--cc-muted:#9aa5b1;--cc-border:#2d343c;--cc-shadow:0 -2px 24px rgba(0, 0, 0, 0.55);--cc-accent:#3b82f6;--cc-accent-fg:#ffffff;--cc-accent-hover:#60a5fa;--cc-neutral:#2d343c;--cc-neutral-fg:#e7ebef;--cc-neutral-hover:#3a424c;--cc-badge-bg:#1e3a5f;--cc-badge-fg:#93c5fd}}[data-bs-theme="light"] .cc-consent{--cc-bg:#ffffff;--cc-fg:#1f2933;--cc-muted:#52606d;--cc-border:#e4e7eb;--cc-shadow:0 -2px 24px rgba(15, 23, 42, 0.18);--cc-accent:#2563eb;--cc-accent-fg:#ffffff;--cc-accent-hover:#1d4ed8;--cc-neutral:#e4e7eb;--cc-neutral-fg:#1f2933;--cc-neutral-hover:#d2d6dc;--cc-badge-bg:#e6f0ff;--cc-badge-fg:#1d4ed8}[data-bs-theme="dark"] .cc-consent{--cc-bg:#1b1f24;--cc-fg:#e7ebef;--cc-muted:#9aa5b1;--cc-border:#2d343c;--cc-shadow:0 -2px 24px rgba(0, 0, 0, 0.55);--cc-accent:#3b82f6;--cc-accent-fg:#ffffff;--cc-accent-hover:#60a5fa;--cc-neutral:#2d343c;--cc-neutral-fg:#e7ebef;--cc-neutral-hover:#3a424c;--cc-badge-bg:#1e3a5f;--cc-badge-fg:#93c5fd}
/*!
 * Shop Storefront — product-detail image lightbox / zoom (#2383)
 * =============================================================
 *
 * Glob-bundled by the Core #2228 frontend asset pipeline alongside
 * shop-tokens.css:
 *   src/assets/frontend/css/*.css  →  public/assets/frontend/css/plugin.css
 *
 * The overlay DOM is built in JS — src/assets/storefront/js/detail-gallery-lightbox.js,
 * shipped via the plugin's own shop.asset.storefront_js route (#2729) — and
 * mounted INSIDE the `.shop-storefront` wrapper, so it inherits the --shop-*
 * tokens and the wrapper's data-bs-theme (light/dark). All colours are driven by
 * tokens with sane fallbacks — no hard-coded theme colours. The only raw value
 * is the backdrop scrim (a near-neutral rgba), itself exposed as an overridable
 * token (--shop-lightbox-backdrop) per the token contract.
 */
 .shop-storefront{--shop-lightbox-backdrop:rgba(13, 17, 23, 0.92);--shop-lightbox-z:1080}.shop-storefront .shop-zoom-opener{cursor:zoom-in}.shop-storefront .shop-zoom-opener:focus-visible{outline:2px solid var(--shop-primary,#1a6fb5);outline-offset:2px}html.shop-lightbox-open,body.shop-lightbox-open{overflow:hidden}.shop-storefront .shop-lightbox{position:fixed;inset:0;z-index:var(--shop-lightbox-z,1080);display:flex;align-items:center;justify-content:center;padding:1rem;background-color:var(--shop-lightbox-backdrop,rgb(13 17 23 / .92))}.shop-storefront .shop-lightbox[hidden]{display:none}.shop-storefront .shop-lightbox__stage{display:flex;align-items:center;justify-content:center;max-width:100%;max-height:100%}.shop-storefront .shop-lightbox__image{display:block;max-width:min(92vw, 1600px);max-height:88vh;width:auto;height:auto;object-fit:contain;border-radius:var(--shop-radius,.375rem);background-color:var(--shop-surface,#ffffff)}.shop-storefront .shop-lightbox__btn{position:absolute;display:inline-flex;align-items:center;justify-content:center;min-width:2.75rem;min-height:2.75rem;padding:0;border:1px solid var(--shop-border,#dee2e6);border-radius:50%;background-color:var(--shop-surface,#ffffff);color:var(--shop-text,#212529);font-size:1.75rem;line-height:1;cursor:pointer;opacity:.92;transition:opacity 0.15s ease-in-out,transform 0.15s ease-in-out}.shop-storefront .shop-lightbox__btn:hover{opacity:1}.shop-storefront .shop-lightbox__btn:focus-visible{outline:2px solid var(--shop-primary,#1a6fb5);outline-offset:2px;opacity:1}.shop-storefront .shop-lightbox__btn[hidden]{display:none}.shop-storefront .shop-lightbox__close{top:1rem;right:1rem}.shop-storefront .shop-lightbox__nav{top:50%;transform:translateY(-50%);font-size:2.25rem}.shop-storefront .shop-lightbox__nav:hover{transform:translateY(-50%) scale(1.05)}.shop-storefront .shop-lightbox__prev{left:1rem}.shop-storefront .shop-lightbox__next{right:1rem}.shop-storefront .shop-lightbox__counter{position:absolute;bottom:1rem;left:50%;transform:translateX(-50%);padding:.25rem .75rem;border-radius:999px;background-color:var(--shop-surface,#ffffff);color:var(--shop-text,#212529);border:1px solid var(--shop-border,#dee2e6);font-size:.875rem;opacity:.92}@media (max-width:575.98px){.shop-storefront .shop-lightbox{padding:.5rem}.shop-storefront .shop-lightbox__image{max-width:96vw;max-height:80vh}.shop-storefront .shop-lightbox__close{top:.5rem;right:.5rem}.shop-storefront .shop-lightbox__prev{left:.5rem}.shop-storefront .shop-lightbox__next{right:.5rem}}@media (prefers-reduced-motion:reduce){.shop-storefront .shop-lightbox__btn{transition:none}.shop-storefront .shop-lightbox__nav:hover{transform:translateY(-50%)}}
/*!
 * Shop Storefront — design tokens, Bootstrap bridge, components (#2248)
 * =====================================================================
 *
 * Merged by the Core #2228 frontend asset pipeline:
 *   src/assets/frontend/css/*.css  →  public/assets/frontend/css/plugin.css
 * (built via `ps:plugin:assets:rebuild --frontend --css`, Stage only).
 *
 * The bundle loads AFTER the theme/default CSS and the inline
 * `theme_css_variables` block loads AFTER the bundle (Templates/Frontend/
 * layout/styles.html.twig) — so a channel/theme can override any --shop-*
 * token without specificity tricks. Token contract:
 *   Plugins/Shop/docs/planning/storefront-tokens.md
 *
 * Everything is scoped to the `.shop-storefront` wrapper (set on the
 * storefront <body> content in base.html.twig). ContentBuilder frontend
 * pages use the same Bootstrap classes plus their own --cb-* tokens at
 * :root — scoping here keeps the Shop bridge from re-colouring them.
 *
 * Three layers:
 *   1. Token defaults (light)         — reproduce the current look, no regression
 *   2. Bootstrap bridge (scoped)      — map Bootstrap component vars onto tokens
 *   3. Shop component classes         — what Bootstrap does not cover
 * plus a dark block gated on [data-bs-theme=dark] (forward-compatible).
 */
 .shop-storefront{--shop-primary:#1a6fb5;--shop-primary-rgb:26, 111, 181;--shop-accent:#1b9e3e;--shop-success:#198754;--shop-warning:#ffc107;--shop-danger:#dc3545;--shop-info:#0dcaf0;--shop-surface:#ffffff;--shop-bg:#ffffff;--shop-text:#212529;--shop-text-muted:#6c757d;--shop-border:#dee2e6;--shop-price:#212529;--shop-price-sale:#dc3545;--shop-rating:#ffc107;--shop-radius:0.375rem;--shop-header-bg:#ffffff;--shop-header-fg:#212529;--shop-sticky-offset:1rem;--shop-brand-logo-height:2rem}.shop-storefront{--bs-primary:var(--shop-primary);--bs-primary-rgb:var(--shop-primary-rgb);--bs-link-color-rgb:var(--shop-primary-rgb);--bs-link-hover-color-rgb:var(--shop-primary-rgb);--bs-border-radius:var(--shop-radius)}.shop-storefront .btn-primary{--bs-btn-bg:var(--shop-primary);--bs-btn-border-color:var(--shop-primary);--bs-btn-hover-bg:color-mix(in srgb, var(--shop-primary) 85%, black);--bs-btn-hover-border-color:color-mix(in srgb, var(--shop-primary) 80%, black);--bs-btn-active-bg:color-mix(in srgb, var(--shop-primary) 80%, black);--bs-btn-active-border-color:color-mix(in srgb, var(--shop-primary) 75%, black);--bs-btn-disabled-bg:var(--shop-primary);--bs-btn-disabled-border-color:var(--shop-primary);--bs-btn-focus-shadow-rgb:var(--shop-primary-rgb)}.shop-storefront .btn-outline-primary{--bs-btn-color:var(--shop-primary);--bs-btn-border-color:var(--shop-primary);--bs-btn-hover-bg:var(--shop-primary);--bs-btn-hover-border-color:var(--shop-primary);--bs-btn-active-bg:var(--shop-primary);--bs-btn-active-border-color:var(--shop-primary);--bs-btn-disabled-color:var(--shop-primary);--bs-btn-disabled-border-color:var(--shop-primary);--bs-btn-focus-shadow-rgb:var(--shop-primary-rgb)}.shop-storefront .text-primary{color:var(--shop-primary)!important}.shop-storefront a:not(.btn):not(.nav-link):not(.dropdown-item):not(.page-link){--bs-link-color-rgb:var(--shop-primary-rgb);--bs-link-hover-color-rgb:var(--shop-primary-rgb)}.shop-storefront .text-bg-primary{background-color:RGBA(var(--shop-primary-rgb),var(--bs-bg-opacity,1))!important}.shop-storefront .text-bg-success,.shop-storefront .badge.text-bg-success{background-color:var(--shop-success)!important}.shop-storefront .text-bg-warning,.shop-storefront .badge.text-bg-warning{background-color:var(--shop-warning)!important}.shop-storefront .text-bg-danger,.shop-storefront .badge.text-bg-danger{background-color:var(--shop-danger)!important}.shop-storefront .text-bg-info,.shop-storefront .badge.text-bg-info{background-color:var(--shop-info)!important}.shop-storefront .text-success{color:var(--shop-success)!important}.shop-storefront .text-danger{color:var(--shop-danger)!important}.shop-storefront .text-warning{color:var(--shop-warning)!important}.shop-storefront .border-primary{--bs-border-color:var(--shop-primary);border-color:var(--shop-primary)!important}.shop-storefront .shop-price{color:var(--shop-price)}.shop-storefront .shop-price--sale{color:var(--shop-price-sale)}.shop-storefront .shop-price--old{color:var(--shop-text-muted);text-decoration:line-through}.shop-storefront .shop-rating{color:var(--shop-rating)}.shop-storefront .shop-product-card{--bs-card-bg:var(--shop-surface);--bs-card-border-color:var(--shop-border);--bs-card-border-radius:var(--shop-radius)}.shop-storefront .shop-sticky-offset{top:var(--shop-sticky-offset)}.shop-storefront .shop-brand-logo{height:var(--shop-brand-logo-height,2rem);width:auto;max-width:12rem;object-fit:contain}.shop-storefront .storefront-category-bar .navbar-nav{--bs-nav-link-padding-x:0.75rem;--bs-nav-link-padding-y:0.5rem;column-gap:.25rem}.shop-storefront .storefront-category-bar .nav-link{font-size:.95rem}.shop-storefront .shop-suggest-menu{top:100%;left:0;margin-top:.25rem;max-height:60vh;overflow-y:auto}.shop-storefront .shop-suggest-menu:not([hidden]){display:block}.shop-storefront .shop-suggest-menu .dropdown-header{text-transform:uppercase;letter-spacing:.03em;font-size:.7rem;color:var(--shop-text-muted)}.shop-storefront .shop-suggest-menu .dropdown-item.active,.shop-storefront .shop-suggest-menu .dropdown-item:hover,.shop-storefront .shop-suggest-menu .dropdown-item:focus{background-color:var(--shop-primary);color:#fff}.shop-storefront .shop-suggest-thumb{width:32px;height:32px;object-fit:cover;border-radius:var(--shop-radius)}[data-bs-theme=dark] .shop-storefront,.shop-storefront[data-bs-theme=dark]{--shop-surface:#161b22;--shop-bg:#0d1117;--shop-text:#e6edf3;--shop-text-muted:#9da7b3;--shop-border:#30363d;--shop-price:#e6edf3;--shop-header-bg:#161b22;--shop-header-fg:#e6edf3}