:root{--ds-bg:var(--c-paper,#faf8f4);--ds-card:var(--c-surface,#fff);--ds-text:var(--c-ink,#241b35);--ds-muted:var(--c-ink-soft,#5c5470);--ds-primary:var(--c-primary,#4c2a9e);--ds-primary-dark:var(--c-primary-dark,#38206f);--ds-accent:var(--c-accent,#c9932c);--ds-accent-dark:var(--c-accent-dark,#a97a1f);--ds-border:var(--c-border,#e7e2d8);--ds-danger:#a51d3b;--ds-success:#1f7a4d;--ds-radius:var(--radius,1rem);--ds-radius-sm:var(--radius-sm,.6rem);--ds-shadow:var(--shadow-card,0 1px 2px rgba(36,27,53,.05),0 8px 24px -12px rgba(36,27,53,.18));--ds-shadow-hover:var(--shadow-card-hover,0 2px 4px rgba(36,27,53,.06),0 16px 36px -12px rgba(36,27,53,.26));--ds-ff-display:var(--ff-display,'Playfair Display','Noto Serif',serif);--ds-ff-body:var(--ff-body,'Manrope',system-ui,-apple-system,sans-serif)}
.bludit-shop-page *{box-sizing:border-box}
.bludit-shop-page{margin:0;background:var(--ds-bg);color:var(--ds-text);font:1.0625rem/1.7 var(--ds-ff-body)}
/* Repeated on .ds-theme-content (always present on shop pages) rather than
   relying on .bludit-shop-page alone: that class is only added to <body>
   by the plugin's own fallback layout and is absent when the site's theme
   supplies its own header.php/footer.php via ThemeBridge. Without this, a
   theme's dark-mode palette can hand --ds-text a light color for contrast
   against the plugin's own (unrendered) dark --ds-bg while the *actual*
   background stays whatever the theme's content area used, silently
   producing near-invisible light-on-light text. */
.ds-theme-content{background:var(--ds-bg);color:var(--ds-text);font:1.0625rem/1.7 var(--ds-ff-body)}
.ds-theme-content a{color:var(--ds-primary)}
.ds-theme-content :focus-visible,.ds-header :focus-visible,.ds-footer :focus-visible{outline:2px solid var(--ds-accent-dark);outline-offset:2px;border-radius:4px}
.ds-wrap{width:min(1120px,calc(100% - 32px));margin:auto}
/* .ds-header is doubled to raise its specificity above generic theme rules
   (e.g. "header{background:#fff}" resets) that load alongside shop.css and
   would otherwise leave white brand text on a light background. */
.ds-header.ds-header{background:var(--ds-primary-dark);color:#fff}
.ds-header .ds-wrap{display:flex;justify-content:space-between;align-items:center;gap:16px;min-height:64px;flex-wrap:wrap;padding:8px 0}
/* Compound selector (not bare .ds-brand) so a theme's own anchor-color
   rules (e.g. ".entry-content a") can't win the cascade and make the
   site title invisible against the dark header background. */
.ds-header .ds-brand{color:#fff;text-decoration:none;font-weight:700;font-family:var(--ds-ff-display);font-size:1.15rem}
.ds-main{padding:24px 0 60px}
.ds-hero{padding:24px 0}
.ds-hero h1,.ds-hero h2{font-family:var(--ds-ff-display);font-weight:700;color:var(--ds-text);line-height:1.25;font-size:clamp(2rem,5vw,3.5rem);margin:.2em 0}

/* Intro hero: a self-contained card above the catalog so a first-time
   visitor understands the offer before seeing any products. Kept compact
   (see the max-width:400px override below) so the catalog's top edge is
   still visible on the first mobile screen without scrolling. The title is
   the page's h1 when the hero is shown; the catalog heading below then
   drops to h2 (shop.php sets its tag dynamically) so there's still exactly
   one h1 when the hero is disabled. */
.ds-intro-hero{background:var(--ds-card);border:1px solid var(--ds-border);border-radius:var(--ds-radius);box-shadow:var(--ds-shadow);padding:28px 32px 26px;margin:20px 0 8px;text-align:center}
.ds-intro-hero-title{font-family:var(--ds-ff-display);font-weight:700;color:var(--ds-text);line-height:1.2;font-size:clamp(1.6rem,4.5vw,2.75rem);margin:0 0 .35em;text-wrap:balance;overflow-wrap:break-word}
.ds-intro-hero-subtitle{color:var(--ds-text);font-size:1.05rem;line-height:1.5;margin:0 auto .7em;max-width:640px}
.ds-intro-hero-trust{color:var(--ds-muted);font-weight:700;font-size:.9rem;letter-spacing:.01em;margin:0 0 18px}
.ds-intro-hero-cta{min-width:220px}

/* Optional hero image: rendered as a sibling column/box next to the text
   (never as a CSS background under it), so text contrast is unaffected.
   Desktop is a 60/40 text/image grid; below 500px the image moves above
   the text via `order` and is capped at 200px tall so the hero still fits
   comfortably above the fold and the catalog stays partly visible. */
.ds-intro-hero.ds-intro-hero--with-image{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);grid-template-areas:"content media";gap:28px;align-items:center;text-align:left}
.ds-intro-hero.ds-intro-hero--with-image .ds-intro-hero-content{grid-area:content;text-align:center}
.ds-intro-hero-media{grid-area:media;min-width:0}
.ds-intro-hero-media img{display:block;width:100%;height:100%;object-fit:cover;border-radius:var(--ds-radius-sm)}
/* Selectors below are doubled (.ds-intro-hero.ds-intro-hero--with-image) to
   outrank the pre-existing max-width:400px compact block further down this
   file regardless of source order, since both blocks target .ds-intro-hero
   at the same breakpoint. Kept noticeably tighter than the text-only hero
   so a hero with an image still leaves the catalog heading visible on short
   360-400px-wide phones (iPhone SE / small Android). */
@media(max-width:500px){
    .ds-intro-hero.ds-intro-hero--with-image{display:flex;flex-direction:column;align-items:stretch;text-align:center;gap:12px;padding:16px 16px 14px}
    .ds-intro-hero.ds-intro-hero--with-image .ds-intro-hero-media{order:-1;width:100%;height:160px;max-height:200px}
    .ds-intro-hero.ds-intro-hero--with-image .ds-intro-hero-title{margin-bottom:.2em}
    .ds-intro-hero.ds-intro-hero--with-image .ds-intro-hero-subtitle{margin-bottom:.4em;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}
    .ds-intro-hero.ds-intro-hero--with-image .ds-intro-hero-trust{margin-bottom:10px}
    .ds-intro-hero.ds-intro-hero--hide-image-mobile .ds-intro-hero-media{display:none}
}

/* Shop navigation: Home / categories / Blog. Lives inside the plugin's
   <main> region (not the header) for the same reason as .ds-shop-toolbar
   below — it then renders identically whether the page uses the host
   theme's header or the plugin's fallback layout. Horizontal scroll (not a
   burger toggle) keeps mobile support to plain CSS: every item stays in the
   DOM and reachable, nothing to break at 360-400px widths. */
.ds-shop-nav{margin:0 0 18px}
.ds-shop-nav-list{display:flex;gap:8px;list-style:none;margin:0;padding:2px 0 10px;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:thin}
.ds-shop-nav-item{flex:none}
.ds-shop-nav-link{display:inline-flex;align-items:center;white-space:nowrap;min-height:44px;padding:0 18px;border-radius:999px;background:var(--ds-card);border:1px solid var(--ds-border);color:var(--ds-text);text-decoration:none;font-weight:700;font-size:.9rem;transition:all .2s ease}
.ds-shop-nav-link:hover{border-color:var(--ds-primary-dark);color:var(--ds-primary-dark)}
.ds-shop-nav-link[aria-current="page"]{background:var(--ds-primary-dark);border-color:var(--ds-primary-dark);color:#fff}

/* "Featured this month" section: same product cards as the catalog grid
   (.ds-grid), just wrapped in a distinct panel + badge so it reads as a
   curated pick rather than another catalog page. Products are chosen
   per-product (Product::featured/featured_until, set on the product edit
   form) and drop out automatically once featured_until passes — see
   PublicController::featuredProducts(). Background is a soft accent/yellow
   tint (color-mix with a flat fallback for browsers without it) rather than
   the site's primary purple, so the block reads as "limited-time" at a
   glance. */
.ds-featured{margin:8px 0 32px;padding:24px 24px 26px;background:#fbf1d9;background:color-mix(in srgb, var(--ds-accent) 16%, var(--ds-card));border:1px solid var(--ds-border);border-radius:var(--ds-radius)}
.ds-featured-title{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-family:var(--ds-ff-display);font-weight:700;color:var(--ds-text);font-size:clamp(1.3rem,3vw,1.8rem);margin:0 0 18px}
.ds-featured-badge{display:inline-flex;align-items:center;background:var(--ds-accent);color:#241b35;font-size:.7rem;font-weight:800;letter-spacing:.03em;text-transform:uppercase;padding:5px 12px;border-radius:999px}
.ds-featured-grid{margin:0}
.ds-featured-label-badge{display:inline-flex;align-self:flex-start;align-items:center;background:var(--ds-accent-dark);color:#fff;font-size:.7rem;font-weight:800;letter-spacing:.02em;padding:4px 10px;border-radius:999px;margin:0 0 8px}
.ds-countdown{margin:8px 0 0;font-size:.85rem;font-weight:700;color:var(--ds-accent-dark)}

/* "С чем вы пришли?" problem-navigation grid (Feature 2): one icon card per
   active category, linking into the existing ?category= catalog filter. */
.ds-problem-nav{margin:20px 0 8px}
.ds-problem-nav-title{font-family:var(--ds-ff-display);font-weight:700;color:var(--ds-text);font-size:clamp(1.3rem,3vw,1.8rem);margin:0 0 16px;text-align:center}
.ds-problem-nav-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:14px}
.ds-problem-card{display:flex;flex-direction:column;align-items:center;text-align:center;gap:8px;padding:20px 12px;background:var(--ds-card);border:1px solid var(--ds-border);border-radius:var(--ds-radius);color:var(--ds-text);text-decoration:none;transition:all .2s ease}
.ds-problem-card:hover{border-color:var(--ds-primary-dark);box-shadow:var(--ds-shadow-hover);transform:translateY(-2px)}
.ds-problem-icon{font-size:1.8rem;line-height:1;color:var(--ds-primary-dark)}
.ds-problem-name{font-weight:700;font-size:.95rem}
.ds-problem-count{color:var(--ds-muted);font-size:.8rem}

/* Service ladders (Feature 3): products sharing a ladder_group render as one
   "Step 1 -> Step 2 -> Step 3" row above the regular grid within a category
   section. See Support\Ladders and views/public/_ladder_row.php. */
.ds-category-section{margin-bottom:8px}
.ds-category-section-title{font-family:var(--ds-ff-display);font-weight:700;color:var(--ds-text);font-size:1.4rem;margin:28px 0 16px}
.ds-ladder{margin:0 0 24px}
.ds-ladder-steps{display:flex;align-items:stretch;gap:12px;flex-wrap:wrap}
.ds-ladder-step{flex:1 1 220px;min-width:200px;background:var(--ds-card);border:1px solid var(--ds-border);border-radius:var(--ds-radius);box-shadow:var(--ds-shadow);padding:18px;display:flex;flex-direction:column;gap:8px}
.ds-ladder-step--highlight{border:2px solid var(--ds-primary-dark);box-shadow:var(--ds-shadow-hover)}
.ds-ladder-step-badge{align-self:flex-start;background:var(--ds-bg);border:1px solid var(--ds-border);color:var(--ds-muted);font-size:.75rem;font-weight:800;letter-spacing:.02em;padding:3px 10px;border-radius:999px}
.ds-ladder-step h3{font-family:var(--ds-ff-display);font-size:1.05rem;color:var(--ds-text);margin:0}
.ds-ladder-arrow{display:flex;align-items:center;justify-content:center;flex:0 0 auto;color:var(--ds-muted);font-size:1.3rem;font-weight:700}

/* "Next step" block on a ladder product's own page. */
.ds-next-step-name{font-weight:700;font-size:1.1rem;margin:0 0 6px}
.ds-next-step-name a{color:inherit}
.ds-next-step .ds-price{display:block;margin:0 0 12px}

/* Shop toolbar: cart link + currency switcher. Lives inside the plugin's
   <main> region (not the header) so it renders identically whether the
   page uses the host theme's header or the plugin's fallback layout. */
.ds-shop-toolbar{display:flex;justify-content:flex-end;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:18px}
.ds-cart-link.ds-cart-link{display:inline-flex;align-items:center;gap:8px;color:var(--ds-text);text-decoration:none;font-weight:700;background:var(--ds-card);border:1px solid var(--ds-border);border-radius:999px;padding:8px 16px;min-height:44px}
.ds-cart-link.ds-cart-link:hover{border-color:var(--ds-primary-dark);color:var(--ds-primary-dark)}
.ds-cart-icon{font-size:1.1rem;line-height:1}
.ds-cart-badge{display:inline-flex;align-items:center;justify-content:center;min-width:22px;height:22px;padding:0 6px;border-radius:999px;background:var(--ds-accent);color:#241b35;font-size:.8rem;font-weight:800;line-height:1}
.ds-cart-amount{font-size:.9rem;font-weight:700;color:var(--ds-text)}

/* Currency switcher */
.ds-currency-switcher{display:inline-flex;align-items:center;gap:2px;background:var(--ds-card);border:1px solid var(--ds-border);border-radius:999px;padding:4px}
.ds-currency-switcher.ds-currency-switcher a{display:inline-flex;align-items:center;justify-content:center;border:0;background:transparent;color:var(--ds-muted);text-decoration:none;padding:6px 14px;border-radius:999px;font-size:.85rem;font-weight:700;min-height:32px}
.ds-currency-switcher.ds-currency-switcher a[aria-current="true"]{background:var(--ds-primary-dark);color:#fff}
.ds-currency-switcher.ds-currency-switcher a:hover{color:var(--ds-text)}
.ds-currency-switcher.ds-currency-switcher a[aria-current="true"]:hover{color:#fff}

/* Flash / toast feedback */
.ds-flash{display:flex;align-items:center;flex-wrap:wrap;gap:10px;background:#e8f5ee;border:1px solid #b6e2c8;color:#0f4d2e;border-radius:var(--ds-radius-sm);padding:12px 18px;margin-bottom:20px;font-weight:600}
.ds-flash a{color:#0f4d2e;text-decoration:underline;font-weight:700}
.ds-flash::before{content:"✓";display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:var(--ds-success);color:#fff;font-size:.8rem;flex:none}

/* Checkout progress steps */
.ds-steps{display:flex;align-items:center;gap:8px;list-style:none;margin:0 0 28px;padding:0;flex-wrap:wrap}
.ds-steps li{display:flex;align-items:center;gap:8px;font-size:.9rem;font-weight:700;color:var(--ds-muted)}
.ds-steps li .ds-step-num{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:50%;background:var(--ds-border);color:var(--ds-text);font-size:.85rem}
.ds-steps li.is-active{color:var(--ds-text)}
.ds-steps li.is-active .ds-step-num,.ds-steps li.is-done .ds-step-num{background:var(--ds-primary-dark);color:#fff}
.ds-steps li:not(:last-child)::after{content:"";width:24px;height:2px;background:var(--ds-border);display:inline-block}

.ds-filters,.ds-checkout{display:grid;gap:16px}
.ds-filters{grid-template-columns:2fr 1fr auto;align-items:end;margin-bottom:28px}
.ds-filters label,.ds-checkout label{display:grid;gap:6px}
.ds-checkout legend{font-family:var(--ds-ff-display);font-weight:700;color:var(--ds-text)}
.ds-filters input,.ds-filters select,.ds-checkout input,.ds-checkout textarea,.ds-checkout select{width:100%;padding:12px;border:1px solid var(--ds-border);border-radius:var(--ds-radius-sm);font:inherit;font-size:1rem;background:var(--ds-card);color:var(--ds-text);min-height:44px}
.ds-checkout textarea{min-height:120px}
.ds-theme-content ::placeholder{color:var(--ds-muted);opacity:1}
.ds-grid,.bludit-shop-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:20px}
.ds-product,.bludit-shop-card,.ds-panel{background:var(--ds-card);border:1px solid var(--ds-border);border-radius:var(--ds-radius);overflow:hidden;box-shadow:var(--ds-shadow);transition:box-shadow .25s ease,transform .25s ease}
.ds-product:hover{box-shadow:var(--ds-shadow-hover);transform:translateY(-3px)}
@media (prefers-reduced-motion:reduce){.ds-product,.ds-product:hover{transition:none;transform:none}}
.ds-product-media{position:relative}
.ds-product img,.bludit-shop-card img{width:100%;aspect-ratio:4/3;object-fit:cover;display:block}
.ds-badge{position:absolute;top:10px;left:10px;background:var(--ds-danger);color:#fff;font-size:.8125rem;font-weight:800;padding:4px 10px;border-radius:999px;box-shadow:0 2px 6px rgba(0,0,0,.25)}
.ds-badge-overlay{position:absolute;left:0;right:0;bottom:0;padding:20px 14px 10px;background:linear-gradient(to top,rgba(0,0,0,.65),rgba(0,0,0,0));color:#fff;font-weight:700;font-size:.9rem}
.ds-product-body,.bludit-shop-card>div{padding:18px}
.ds-product form{display:flex;gap:8px;margin-top:14px;align-items:center}
.ds-product input[type=number]{width:68px;flex:none;min-height:44px}
.ds-product h2{font-family:var(--ds-ff-display);font-size:1.2rem;color:var(--ds-text);margin:0}
.ds-product summary{cursor:pointer;color:var(--ds-muted);font-weight:600;font-size:.95rem}
.ds-product-summary{color:var(--ds-muted);margin:6px 0 0}
.ds-product-media-link,.ds-product-title-link{color:inherit;text-decoration:none}
.ds-product-title-link:hover{text-decoration:underline}
.ds-learn-more{display:inline-block;margin-top:6px;color:var(--ds-muted);font-size:.875rem;font-weight:600;text-decoration:underline}
.ds-learn-more:hover{color:var(--ds-text)}

/* Price block */
.ds-price-row{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin:10px 0 4px}
.ds-price{font-size:1.5rem;font-weight:800;color:var(--ds-text);font-family:var(--ds-ff-display)}
.ds-price-old{font-size:1rem;color:var(--ds-muted);text-decoration:line-through}
.ds-price-save{font-size:.8125rem;font-weight:800;color:#fff;background:var(--ds-danger);padding:2px 8px;border-radius:999px}

/* Free-price amount input (product page) */
.ds-free-price{display:grid;gap:10px;margin:4px 0 14px}
.ds-free-price-label{font-weight:700;color:var(--ds-text);font-size:.95rem}
.ds-quick-amounts{display:flex;flex-wrap:wrap;gap:8px}
.ds-quick-amount{display:inline-flex;align-items:center;justify-content:center;min-height:44px;min-width:44px;padding:8px 16px;border:1px solid var(--ds-border);border-radius:999px;background:var(--ds-card);color:var(--ds-text);font-weight:700;font-size:.9rem;cursor:pointer;transition:all .2s ease}
.ds-quick-amount:hover{border-color:var(--ds-primary-dark);color:var(--ds-primary-dark)}
.ds-amount-field{position:relative;display:inline-flex;align-items:center;max-width:280px;width:100%}
.ds-amount-field input[type=number]{width:100%;padding:12px 14px;border:1px solid var(--ds-border);border-radius:var(--ds-radius-sm);font:inherit;font-size:1.1rem;font-weight:700;background:var(--ds-card);color:var(--ds-text);min-height:48px}
.ds-amount-field input[aria-invalid="true"]{border-color:var(--ds-danger)}
.ds-amount-symbol{position:absolute;pointer-events:none;color:var(--ds-muted);font-weight:700}
.ds-amount-field.ds-amount-symbol-before input{padding-left:34px}
.ds-amount-field.ds-amount-symbol-before .ds-amount-symbol{left:14px}
.ds-amount-field.ds-amount-symbol-after input{padding-right:40px}
.ds-amount-field.ds-amount-symbol-after .ds-amount-symbol{right:14px}
.ds-amount-hint{margin:0;color:var(--ds-muted);font-size:.875rem}
.ds-amount-error{margin:0;color:var(--ds-danger);font-size:.875rem;font-weight:700}
.ds-amount-error[hidden]{display:none}
.ds-cart-page-free-badge{display:inline-block;margin-left:6px;padding:2px 8px;border-radius:999px;background:var(--c-primary-soft,#efe9fb);color:var(--ds-primary-dark);font-size:.75rem;font-weight:700;vertical-align:middle}
.ds-cart-page-qty-fixed{color:var(--ds-muted);font-weight:700}

.ds-panel{margin-top:30px;padding:24px}
.ds-panel h1,.ds-panel h2{font-family:var(--ds-ff-display);color:var(--ds-text)}

/* Cart page (/cart) */
.ds-cart-page-table{display:flex;flex-direction:column;margin-bottom:20px}
.ds-cart-page-row{display:grid;grid-template-columns:2fr 1fr 90px 1fr 44px;gap:12px;align-items:center;padding:12px 0;border-bottom:1px solid var(--ds-border)}
.ds-cart-page-head{font-size:.8125rem;text-transform:uppercase;letter-spacing:.04em;color:var(--ds-muted);font-weight:700;padding-bottom:8px}
.ds-cart-page-name{font-weight:700;color:var(--ds-text)}
.ds-cart-page-qty input[type=number]{min-height:44px;width:100%}
.ds-cart-remove{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:50%;border:1px solid var(--ds-border);background:var(--ds-card);color:var(--ds-danger);font-size:1.1rem;line-height:1;cursor:pointer}
.ds-cart-remove:hover{background:var(--ds-danger);border-color:var(--ds-danger);color:#fff}
.ds-cart-continue{margin-top:8px}

/* Buttons — scoped to explicit classes only so the shop never restyles the
   host theme's own buttons (shop.css loads on every page via siteHead()).
   Classes are doubled (".ds-btn.ds-btn") purely to raise specificity above
   a theme's own anchor-color rules (e.g. ".entry-content a"), which would
   otherwise win the cascade on <a class="ds-btn"> links like the checkout
   CTA and leave the theme's text color on the plugin's dark background. */
.ds-btn.ds-btn,.ds-button.ds-button{display:inline-flex;justify-content:center;align-items:center;gap:8px;border:1px solid var(--ds-primary-dark);border-radius:50rem;background:var(--ds-primary-dark);color:#fff;text-decoration:none;padding:11px 22px;font-weight:700;font-size:.95rem;line-height:1.2;cursor:pointer;min-height:44px;transition:all .2s ease}
.ds-btn.ds-btn:hover,.ds-button.ds-button:hover{background:var(--ds-primary);border-color:var(--ds-primary);color:#fff}
.ds-btn:disabled{cursor:wait;opacity:.65}
/* Text uses --ds-text (paired with --ds-card by the theme's own ink/surface
   contract) rather than --ds-primary-dark: that variable's lightness is
   tuned for text sitting on a *dark* button, so a theme's dark-mode swap
   (lighter primary-dark, darker surface) can drop it below 4.5:1 here. */
.ds-btn-secondary.ds-btn-secondary{background:var(--ds-card);color:var(--ds-text);border-color:var(--ds-border)}
.ds-btn-secondary.ds-btn-secondary:hover{background:var(--ds-bg);color:var(--ds-text);border-color:var(--ds-primary-dark)}
.ds-cta{min-height:48px;padding:13px 26px;font-size:1rem;box-shadow:0 6px 18px -6px rgba(56,32,111,.55)}
.ds-cta-block{display:flex;width:100%}
.ds-actions{display:flex;gap:12px;flex-wrap:wrap}
.ds-total{text-align:right;font-size:1.2rem;color:var(--ds-text)}
.ds-total strong{font-size:1.4rem}
.ds-errors{background:#fbeef1;color:var(--ds-danger);border:1px solid #eec4cf;border-radius:var(--ds-radius-sm);padding:8px 18px}
.ds-checkbox,.ds-radio{grid-template-columns:auto 1fr!important;align-items:start}
.ds-checkbox input,.ds-radio input{width:auto;min-height:20px}
.ds-payment-icon{width:24px;height:24px;object-fit:contain;vertical-align:middle;margin-right:6px;border-radius:4px}
.ds-checkout fieldset{border:1px solid var(--ds-border);border-radius:var(--ds-radius-sm);padding:16px;display:grid;gap:12px}
.ds-checkout-details{display:grid;gap:16px}
.ds-stripe-payment{display:grid;gap:16px;padding:20px;border:1px solid var(--ds-border);border-radius:var(--ds-radius);background:var(--ds-card)}
.ds-stripe-payment[hidden],.ds-checkout-details[hidden]{display:none}
.ds-stripe-payment h2{margin:0}
.ds-muted{color:var(--ds-muted)}
.ds-instructions{white-space:normal;background:var(--c-primary-soft,#efe9fb);border-radius:var(--ds-radius-sm);padding:16px;color:var(--ds-text)}
.ds-checkout-note{margin-top:12px;padding:12px 16px;background:var(--c-primary-soft,#efe9fb);border-radius:var(--ds-radius-sm);color:var(--ds-text);font-size:.9rem}

/* Product page (/shop/product/{id}) */
.ds-breadcrumb{margin-bottom:16px}
.ds-breadcrumb a{color:var(--ds-muted);text-decoration:none;font-weight:600;font-size:.9rem}
.ds-breadcrumb a:hover{color:var(--ds-text);text-decoration:underline}
.ds-product-page{display:flex;flex-direction:column;gap:32px}
.ds-product-page-head{display:grid;grid-template-columns:minmax(0,420px) 1fr;gap:28px;align-items:start}
.ds-product-page-media{position:relative;border-radius:var(--ds-radius);overflow:hidden;box-shadow:var(--ds-shadow)}
.ds-product-page-media img{width:100%;aspect-ratio:4/3;object-fit:cover;display:block}
.ds-product-page-body h1{font-family:var(--ds-ff-display);color:var(--ds-text);font-size:clamp(1.6rem,3.5vw,2.4rem);margin:0 0 .4em}
.ds-product-page-lead{color:var(--ds-text);font-size:1.05rem}
.ds-block{background:var(--ds-card);border:1px solid var(--ds-border);border-radius:var(--ds-radius);box-shadow:var(--ds-shadow);padding:24px;margin-top:20px}
.ds-block h2,.ds-block h4{font-family:var(--ds-ff-display);color:var(--ds-text);margin:0 0 16px;font-size:1.3rem}
.ds-howto ol{margin:0;padding-left:1.4em;display:grid;gap:10px}
.ds-howto li{color:var(--ds-text)}
.ds-faq details{border-top:1px solid var(--ds-border);padding:12px 0}
.ds-faq details:first-of-type{border-top:none;padding-top:0}
.ds-faq summary{cursor:pointer;font-weight:700;color:var(--ds-text)}
.ds-faq p{margin:10px 0 0;color:var(--ds-muted)}
.ds-testimonial-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px}
.ds-testimonial{margin:0;background:var(--ds-bg);border:1px solid var(--ds-border);border-radius:var(--ds-radius-sm);padding:16px}
.ds-testimonial blockquote{margin:0;color:var(--ds-text)}
.ds-testimonial figcaption{margin-top:10px;color:var(--ds-muted);font-size:.875rem;font-weight:700}
.ds-about-specialist p,.ds-guarantee p{margin:0;color:var(--ds-text)}

/* Trust indicators near checkout */
.ds-trust{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin:0 0 24px;padding:0;list-style:none}
.ds-trust li{display:flex;gap:10px;align-items:flex-start;background:var(--ds-card);border:1px solid var(--ds-border);border-radius:var(--ds-radius-sm);padding:14px;font-size:.875rem;color:var(--ds-text)}
.ds-trust li .ds-trust-icon{flex:none;font-size:1.1rem;line-height:1}
.ds-trust li strong{display:block;font-size:.9rem}
.ds-trust li a{color:var(--ds-primary)}

/* Stock availability */
.ds-stock-badge{margin:0 0 8px;color:var(--ds-muted);font-size:.875rem;font-weight:700}
.ds-out-of-stock{margin:0 0 8px;color:var(--ds-danger);font-weight:700}

/* Personal code ("Личный код") */
.ds-discount{margin:0 0 20px}
.ds-discount-form{display:flex;flex-direction:column;gap:8px}
.ds-discount-label{display:grid;gap:6px;font-weight:700;color:var(--ds-text)}
.ds-discount-input-row{display:flex;gap:8px;flex-wrap:wrap}
.ds-discount-input-row input{flex:1 1 200px;padding:12px;border:1px solid var(--ds-border);border-radius:var(--ds-radius-sm);font:inherit;font-size:1rem;background:var(--ds-card);color:var(--ds-text);min-height:44px}
.ds-discount-applied{margin:0;color:var(--ds-success);font-weight:700}
.ds-discount-error{margin:0;color:var(--ds-danger);font-weight:700}
.ds-discount-remove{align-self:flex-start}
.ds-subtotal{text-align:right;color:var(--ds-muted);margin:0}
.ds-discount-line{text-align:right;color:var(--ds-success);margin:0 0 4px}

.ds-footer{padding:24px 0;background:var(--ds-primary-dark);color:rgba(255,255,255,.8)}

/* Embedded product/category card currency switcher (ShortcodeRenderer).
   Namespaced under ds-embed- (distinct from the shop header's
   .ds-currency-switcher) since it must meet a larger, 44px touch target
   here and is designed to survive being dropped into a host blog theme
   that may define its own ".button"/"button" resets. Doubled selectors
   raise specificity above such theme rules without resorting to
   !important. */
.ds-embed-currency-switcher.ds-embed-currency-switcher{display:inline-flex;align-items:center;gap:2px;background:var(--ds-bg);border:1px solid var(--ds-border);border-radius:999px;padding:3px;margin:0 0 8px}
.ds-embed-currency-switcher.ds-embed-currency-switcher .ds-embed-currency-btn{display:inline-flex;align-items:center;justify-content:center;border:0;background:transparent;color:var(--ds-muted);font:inherit;font-size:.8rem;font-weight:700;line-height:1;padding:0 14px;min-height:44px;min-width:44px;border-radius:999px;cursor:pointer}
.ds-embed-currency-switcher.ds-embed-currency-switcher .ds-embed-currency-btn[aria-pressed="true"]{background:var(--ds-primary-dark);color:#fff}
.ds-embed-currency-switcher.ds-embed-currency-switcher .ds-embed-currency-btn:hover{color:var(--ds-text)}
.ds-embed-currency-switcher.ds-embed-currency-switcher .ds-embed-currency-btn[aria-pressed="true"]:hover{color:#fff}
.bludit-shop-grid>.ds-embed-currency-switcher{margin:0 0 14px}

/* Currency-conflict banner shown on the product page when an embedded
   card's add-to-cart would otherwise mix currencies in one order (see
   PublicController::resolveEmbedCurrencyLock()). */
.ds-currency-conflict.ds-currency-conflict{background:var(--ds-card);border:1px solid var(--ds-border);border-radius:var(--ds-radius-sm);padding:14px 16px;margin:0 0 16px}
.ds-currency-conflict.ds-currency-conflict p{margin:0 0 10px;color:var(--ds-text)}
.ds-currency-conflict-actions{display:flex;gap:10px;flex-wrap:wrap}
.ds-currency-conflict-actions form{margin:0}
.ds-currency-lock-note{color:var(--ds-muted);font-size:.9rem;margin:0 0 12px}

@media(max-width:400px){.ds-embed-currency-switcher.ds-embed-currency-switcher .ds-embed-currency-btn{padding:0 12px}.ds-currency-conflict-actions{flex-direction:column}.ds-currency-conflict-actions form{width:100%}.ds-currency-conflict-actions .ds-btn,.ds-currency-conflict-actions .ds-btn-secondary{width:100%}}

@media(max-width:700px){.ds-filters{grid-template-columns:1fr}.ds-panel{padding:18px}.ds-stripe-payment{padding:14px}.ds-trust{grid-template-columns:1fr}.ds-product-page-head{grid-template-columns:1fr}.ds-block{padding:18px}
.ds-cart-page-head{display:none}
.ds-cart-page-row{grid-template-columns:1fr auto;grid-template-areas:"name remove" "price price" "qty qty" "total total";row-gap:6px;padding:16px 0}
.ds-cart-page-name{grid-area:name}
.ds-cart-remove{grid-area:remove}
.ds-cart-page-price{grid-area:price}
.ds-cart-page-qty{grid-area:qty}
.ds-cart-page-line{grid-area:total}
.ds-cart-page-price::before,.ds-cart-page-line::before,.ds-cart-page-qty::before{content:attr(data-label) ": ";font-weight:700;color:var(--ds-muted)}
}
@media(max-width:400px){.ds-wrap{width:calc(100% - 24px)}.ds-header .ds-wrap{min-height:auto;padding:10px 0}.ds-brand{font-size:1rem}.ds-hero h1,.ds-hero h2{font-size:1.7rem}.ds-panel{padding:14px}.ds-product-body,.bludit-shop-card>div{padding:14px}.ds-price{font-size:1.3rem}.ds-cta{width:100%}.ds-product form{flex-wrap:wrap}.ds-btn,.ds-button{padding:11px 16px}.ds-steps li{font-size:.8rem}.ds-steps li:not(:last-child)::after{width:14px}.ds-shop-toolbar{justify-content:space-between}.ds-cart-link-label{display:none}.ds-intro-hero{padding:18px 16px 16px;margin:12px 0 6px}.ds-intro-hero-title{font-size:1.4rem;margin-bottom:.3em}.ds-intro-hero-subtitle{font-size:.92rem;margin-bottom:.55em}.ds-intro-hero-trust{font-size:.82rem;margin-bottom:14px}.ds-intro-hero-cta{width:100%;min-width:0}.ds-amount-field{max-width:none}.ds-quick-amount{padding:8px 12px;font-size:.85rem}.ds-discount-input-row{flex-direction:column}.ds-discount-input-row button{width:100%}.ds-featured{padding:16px 14px 18px;margin:10px 0 20px}.ds-featured-title{font-size:1.2rem;margin-bottom:12px}.ds-shop-nav-link{padding:0 14px;font-size:.85rem}.ds-problem-nav-grid{grid-template-columns:repeat(2,1fr);gap:10px}.ds-problem-card{padding:14px 8px}.ds-problem-icon{font-size:1.5rem}.ds-ladder-steps{flex-direction:column}.ds-ladder-step{flex-basis:auto;min-width:0}.ds-ladder-arrow{transform:rotate(90deg);padding:2px 0}}
