/* Stackd refinements. Loaded after styles.css. */
.search-container,.search{min-width:0}
.search{height:44px;align-items:center;isolation:isolate}
.search .ic{top:50%;transform:translateY(-50%);left:15px}
.search input{display:block;min-width:0;height:42px;line-height:normal;padding-top:0!important;padding-bottom:0!important;text-align:left;vertical-align:middle}
.search input::-webkit-search-cancel-button{margin-left:8px}

.chips{isolation:isolate;align-items:center}
.chips-slider{left:0;will-change:transform,width;pointer-events:none}
.chips button{position:relative;z-index:1;display:inline-flex;align-items:center;justify-content:center;line-height:1;min-height:38px}
.chips-wrapper{scrollbar-width:none;overscroll-behavior-inline:contain}
.chips-wrapper::-webkit-scrollbar{display:none}

.card{position:relative;min-width:0}
.card-media{position:relative;isolation:isolate}
.card-media img{display:block}
.stackd-arches{position:absolute;left:11px;bottom:11px;z-index:2;width:36px;height:34px;display:grid;place-items:center;padding:4px;border:1px solid rgba(255,255,255,.65);border-radius:11px;background:rgba(25,22,19,.78);color:#ffc72c;box-shadow:0 5px 15px rgba(0,0,0,.22);pointer-events:none}
.stackd-arches svg{display:block;width:100%;height:100%}
.stackd-card-actions{display:flex;align-items:center;justify-content:flex-end;gap:7px;min-width:0}
.stackd-card-actions>.btn{min-width:0}
.stackd-card-qty{display:inline-flex;align-items:center;gap:8px;min-height:34px;padding:2px 5px;border:1px solid var(--line);border-radius:999px;background:var(--raised);font-weight:700;font-variant-numeric:tabular-nums}
.stackd-card-qty button{width:28px;height:28px;display:grid;place-items:center;border:0;border-radius:50%;background:var(--bg);color:var(--text);font:700 17px/1 inherit;cursor:pointer}
.stackd-card-qty button:hover{background:var(--line)}
.stackd-card-qty button:disabled{opacity:.35;cursor:not-allowed}
.stock-info{display:block;color:var(--muted);font-size:.78rem;font-weight:600}
.stock-low{color:#bd6a16}
.card.is-out .stackd-arches{opacity:.65}

/* Top-layer notifications: solid surface, max five visible. */
#checkoutBtn[hidden]{display:none!important}
#toasts{position:fixed;inset:auto 0 max(18px,env(safe-area-inset-bottom)) 0;z-index:2147483000;display:grid;justify-items:center;gap:8px;width:100%;max-width:none;max-height:50vh;overflow:visible;padding:0 14px;border:0;background:transparent;color:inherit;pointer-events:none;translate:none}
#toasts[popover]{position:fixed;inset:auto 0 max(18px,env(safe-area-inset-bottom)) 0;margin:0;overflow:visible}
#toasts:popover-open{display:grid}
.stackd-toast{width:max-content;max-width:min(520px,100%);padding:12px 18px;border:1px solid color-mix(in srgb,var(--text) 15%,transparent);border-radius:14px;background:#24211d!important;color:#fff!important;box-shadow:0 12px 34px rgba(0,0,0,.28);font-size:.9rem;font-weight:650;line-height:1.4;text-align:center;pointer-events:auto;opacity:1;transform:translateY(0);animation:stackdToastIn .22s cubic-bezier(.2,.8,.2,1) both;backdrop-filter:none!important;-webkit-backdrop-filter:none!important}
.stackd-toast-out{opacity:0!important;transform:translateY(8px) scale(.98)!important;transition:opacity .2s ease,transform .2s ease}
@keyframes stackdToastIn{from{opacity:0;transform:translateY(10px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}

.stackd-fly-image{position:fixed;z-index:2147482000;object-fit:cover;border-radius:14px;pointer-events:none;opacity:1;transform:translate(0,0) scale(1);transition:transform .62s cubic-bezier(.2,.75,.2,1),opacity .62s ease;box-shadow:0 12px 28px rgba(0,0,0,.25)}
.stackd-fly-mark{position:fixed;z-index:2147482001;display:grid;place-items:center;padding:4px;border:1px solid rgba(255,255,255,.65);border-radius:11px;background:rgba(25,22,19,.88);color:#ffc72c;pointer-events:none;transition:transform .62s cubic-bezier(.2,.75,.2,1),opacity .62s ease;box-shadow:0 5px 15px rgba(0,0,0,.22)}
.stackd-fly-mark svg{width:100%;height:100%}
.cart-btn .badge.pop{animation:pop .38s var(--ease)}

/* Product editor additions */
.stackd-product-fields{display:grid;gap:13px;margin:8px 0 18px;padding:16px;border:1px solid var(--line);border-radius:14px;background:var(--bg)}
.stackd-field{display:grid;gap:5px;min-width:0}
.stackd-field label{margin:0}
.stackd-field input,.stackd-field select{margin:0!important}
.stackd-field small,.stackd-admin-note{display:block;color:var(--muted);font-size:.78rem;line-height:1.45}
.stackd-checks{display:grid;gap:8px}
.stackd-checks label{display:flex;align-items:center;gap:9px;margin:0;font-size:.88rem;font-weight:550}
.stackd-checks input{width:16px;height:16px;accent-color:var(--accent)}
#stackdTranslateAll{margin-left:auto}
#stackdStockHint{margin:7px 0 12px}
.stackd-settings-section{margin-top:24px;padding:18px;border:1px solid var(--line);border-radius:16px;background:var(--bg)}
.stackd-settings-section h3{margin:0 0 14px}
.stackd-settings-section>input{margin-bottom:12px}
.stackd-settings-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.stackd-settings-grid>div{min-width:0}
.stackd-settings-grid input,.stackd-settings-grid select{margin:0!important}

/* Cart guide and swipe checkout */
.stackd-purchase-guide{display:grid;gap:7px;margin:4px 20px 12px;padding:14px 15px;border:1px solid var(--line);border-radius:13px;background:var(--bg);font-size:.82rem;line-height:1.45;color:var(--muted)}
.stackd-purchase-guide strong{color:var(--text);font-size:.92rem}
.stackd-purchase-guide p{margin:0}
.stackd-swipe{display:grid;gap:6px;min-width:0}
.stackd-swipe-track{position:relative;display:flex;align-items:center;height:58px;padding:4px;border:1px solid var(--line);border-radius:999px;background:var(--bg);overflow:hidden;touch-action:pan-y;user-select:none;-webkit-user-select:none}
.stackd-swipe-fill{position:absolute;inset:4px auto 4px 4px;width:0;max-width:calc(100% - 8px);border-radius:999px;background:color-mix(in srgb,var(--accent) 18%,var(--surface));pointer-events:none;transition:width .08s linear}
.stackd-swipe-label{position:absolute;inset:0;display:grid;place-items:center;padding:0 62px;color:var(--muted);font-size:.82rem;font-weight:700;text-align:center;pointer-events:none}
.stackd-swipe-thumb{position:relative;z-index:2;flex:0 0 48px;width:48px;height:48px;display:grid;place-items:center;border:0;border-radius:50%;background:var(--accent);color:var(--accent-ink);cursor:grab;touch-action:pan-y;box-shadow:0 4px 14px color-mix(in srgb,var(--accent) 28%,transparent);will-change:transform}
.stackd-swipe-thumb:active{cursor:grabbing}
.stackd-swipe-thumb span{width:11px;height:11px;border-top:2px solid currentColor;border-right:2px solid currentColor;transform:rotate(45deg);margin-left:-4px}
.stackd-swipe-track.is-dragging .stackd-swipe-thumb{transition:none}
.stackd-swipe-track:not(.is-dragging) .stackd-swipe-thumb{transition:transform .26s cubic-bezier(.2,.75,.2,1)}
.stackd-swipe-hint{min-height:1.2em;color:var(--muted);font-size:.74rem;text-align:center}
.stackd-preparing{display:grid;justify-items:center;gap:9px;padding:16px 12px;border:1px solid var(--line);border-radius:14px;background:var(--bg);text-align:center}
.stackd-preparing[hidden]{display:none}
.stackd-preparing strong{font-size:.96rem}
.stackd-preparing p{max-width:42ch;color:var(--muted);font-size:.82rem;line-height:1.45}
.stackd-spinner{width:24px;height:24px;border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:stackdSpin .8s linear infinite}
@keyframes stackdSpin{to{transform:rotate(360deg)}}

/* Dialog stacking and solid surfaces */
dialog[open]{z-index:1000}
dialog.glass,.modal.glass,.drawer.glass{background:var(--surface);-webkit-backdrop-filter:none;backdrop-filter:none;isolation:isolate}
#drawer>header{position:relative;z-index:1;background:var(--surface)}
#drawer>footer{background:var(--surface)}

@media(max-width:680px){
 .stackd-card-actions{justify-content:space-between;flex-wrap:wrap}
 .stackd-card-actions>.btn{flex:1}
 .stackd-card-qty{align-self:stretch}
 .stackd-purchase-guide{margin-inline:14px;padding:12px}
 .stackd-settings-grid{grid-template-columns:minmax(0,1fr)}
 .stackd-product-fields{padding:13px}
 #stackdTranslateAll{margin-left:0}
 #toasts{bottom:max(14px,env(safe-area-inset-bottom));padding-inline:12px}
 .stackd-toast{max-width:100%;border-radius:13px}
}
@media(prefers-reduced-motion:reduce){
 .stackd-fly-image,.stackd-spinner{animation:none!important;transition:none!important}
 .stackd-toast{animation:none!important}
}


/* Catalog polish: aligned input text, predictable category pill, campaign and profile UI. */
.search{display:flex!important;align-items:center!important;height:44px!important;min-height:44px!important}
.search input,.search input[type="search"]{display:block!important;flex:1 1 auto!important;align-self:stretch!important;height:44px!important;min-height:44px!important;margin:0!important;padding:0 16px 0 44px!important;line-height:normal!important;vertical-align:middle!important;transform:none!important;box-sizing:border-box!important}
.search input::placeholder{line-height:normal!important;opacity:.82}
.search .ic{top:50%!important;transform:translateY(-50%)!important}
.chips{position:relative;isolation:isolate}
.chips-slider{left:0;transform:none!important;transition:left .34s cubic-bezier(.22,.72,.18,1),width .34s cubic-bezier(.22,.72,.18,1)!important;will-change:left,width}
.chips button{position:relative;z-index:1;display:inline-flex;align-items:center;justify-content:center}
.badge-popular{letter-spacing:.045em;font-size:.67rem;font-weight:800}
.stackd-sale-badge{position:absolute;z-index:5;top:11px;left:11px;display:inline-flex;align-items:center;gap:7px;max-width:calc(100% - 22px);padding:7px 10px;border-radius:9px;background:#c62828;color:#fff;box-shadow:0 5px 16px rgba(151,24,24,.26);font-size:.72rem;line-height:1}
.stackd-sale-badge b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.stackd-sale-badge strong{font-size:.8rem}
.stackd-price-stack{display:grid;gap:1px;align-content:center;min-width:0}
.stackd-price-stack del{font-size:.77rem;color:var(--muted);font-weight:500}
.stackd-price-stack strong{font-size:1.03rem;color:#c62828}
[data-theme="dark"] .stackd-price-stack strong{color:#ff7979}
.stackd-arches{width:42px;height:39px;padding:5px;border-radius:12px;color:#ffc72c;background:rgba(22,20,18,.82);border-color:rgba(255,255,255,.4)}
.stackd-arches svg{width:100%;height:100%}
.stackd-arches path{fill:currentColor}
.stackd-section-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}
.stackd-section-head h3{margin:0}
.stackd-section-head span{font-size:.64rem;letter-spacing:.13em;font-weight:800;color:var(--muted)}
.stackd-promo-settings{border-color:rgba(198,40,40,.28)}
.stackd-promo-settings .stackd-section-head span{color:#c62828}
.stackd-promo-settings>select,.stackd-promo-settings>input{margin:0 0 12px!important}
.stackd-promo-settings .stackd-settings-grid{margin:6px 0 10px}
.stackd-promo-check{display:flex;align-items:center;gap:9px;margin:6px 0 13px;font-size:.86rem}
.stackd-promo-check input{width:16px;height:16px;margin:0;accent-color:#c62828}
.stackd-promo-save{background:#c62828;color:#fff}
.stackd-promo-save:hover{background:#aa2020;filter:none}
#stackdPromoStatus{min-height:1.25em;margin-top:9px}
.stackd-news-section{padding-top:24px;margin:0 0 26px}
.stackd-news-section[hidden]{display:none}
.stackd-news-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}
.stackd-news-heading h3{margin:0;font-size:1.05rem;letter-spacing:-.02em}
.stackd-news-heading span{font-size:.64rem;letter-spacing:.13em;font-weight:800;color:var(--muted)}
.stackd-news-viewport{overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;scroll-behavior:smooth;scrollbar-width:none;border-radius:17px;touch-action:pan-x;overscroll-behavior-inline:contain}
.stackd-news-viewport::-webkit-scrollbar{display:none}
.stackd-news-track{display:flex;gap:13px;width:max-content}
.stackd-news-card{position:relative;display:block;flex:0 0 clamp(260px,34vw,400px);aspect-ratio:2.15/1;overflow:hidden;border:1px solid var(--line);border-radius:17px;background:var(--raised);color:#fff;text-decoration:none;scroll-snap-align:start;box-shadow:var(--shadow)}
.stackd-news-card img{display:block;width:100%;height:100%;object-fit:cover;transition:transform .45s var(--ease)}
.stackd-news-card:hover img{transform:scale(1.025)}
.stackd-news-caption{position:absolute;inset:auto 0 0;padding:26px 15px 13px;background:linear-gradient(transparent,rgba(0,0,0,.7));color:#fff;font-size:.88rem;font-weight:700}
.stackd-news-admin-list{display:grid;gap:9px;list-style:none;margin:15px 0 0;padding:0}
.stackd-news-admin-list li{display:flex;align-items:center;gap:10px;min-width:0;padding:9px;border:1px solid var(--line);border-radius:12px;background:var(--surface)}
.stackd-news-admin-list li>img{width:72px;height:50px;object-fit:cover;border-radius:8px;flex:none}
.stackd-news-meta{display:grid;gap:2px;min-width:0;flex:1}
.stackd-news-meta strong{font-size:.82rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.stackd-news-meta small{font-size:.72rem;color:var(--muted)}
.stackd-news-actions{display:flex;gap:4px}
.stackd-news-empty{font-size:.82rem;color:var(--muted)}
.stackd-profile-anchor{position:relative;display:flex;align-items:center}
.stackd-profile-trigger{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-width:76px;padding:2px 6px;border:0;border-radius:12px;color:var(--text);background:transparent;cursor:pointer;font:inherit}
.stackd-profile-trigger:hover,.stackd-profile-trigger[aria-expanded="true"]{background:var(--raised)}
.stackd-profile-trigger img{width:34px;height:34px;border:1px solid var(--line);border-radius:50%;object-fit:cover}
.stackd-profile-trigger strong{font-size:.67rem;line-height:1.05}
.stackd-profile-trigger small{font-size:.59rem;line-height:1.1;color:var(--muted)}
.stackd-profile-menu{position:absolute;top:calc(100% + 10px);right:0;z-index:10000;display:grid;gap:12px;width:min(330px,calc(100vw - 24px));padding:17px;border:1px solid color-mix(in srgb,var(--text) 12%,transparent);border-radius:20px;background:color-mix(in srgb,var(--surface) 94%,transparent);box-shadow:0 18px 54px rgba(25,20,14,.24),inset 0 1px 0 rgba(255,255,255,.28);-webkit-backdrop-filter:blur(24px) saturate(165%);backdrop-filter:blur(24px) saturate(165%);animation:stackdProfileIn .2s var(--ease)}
.stackd-profile-menu[hidden]{display:none!important}
.stackd-profile-head{display:grid;gap:4px;padding-bottom:11px;border-bottom:1px solid var(--line)}
.stackd-profile-head small,.stackd-profile-note{font-size:.78rem;color:var(--muted);overflow-wrap:anywhere}
.stackd-profile-action{width:100%;min-height:42px;padding:10px 12px;text-align:left;border:1px solid var(--line);border-radius:11px;background:var(--surface);color:var(--text);font:inherit;font-size:.88rem;cursor:pointer}
.stackd-profile-action:hover{background:var(--raised)}
.stackd-profile-logout{color:#c62828;border-color:rgba(198,40,40,.22)}
.stackd-profile-theme{display:grid;gap:8px;font-size:.82rem;font-weight:650}
.stackd-profile-theme .seg{width:100%}
.stackd-profile-theme .seg button{min-width:0;flex:1}
@keyframes stackdProfileIn{from{opacity:0;transform:translateY(-5px) scale(.985)}to{opacity:1;transform:none}}
[data-theme="dark"] .stackd-profile-menu{background:color-mix(in srgb,#26231f 94%,transparent);border-color:rgba(255,255,255,.13)}
@media(max-width:680px){
 .search input,.search input[type="search"]{padding-left:44px!important}
 .stackd-news-section{padding-top:18px;margin-bottom:19px}
 .stackd-news-card{flex-basis:calc(100vw - 54px);max-width:440px;aspect-ratio:1.9/1}
 .stackd-news-track{gap:10px}
 .stackd-profile-menu{right:auto;left:0;top:calc(100% + 8px)}
 .stackd-profile-trigger strong{font-size:.7rem}
 .stackd-news-admin-list li{flex-wrap:wrap}
 .stackd-news-actions{margin-left:auto}
 .stackd-settings-grid{grid-template-columns:minmax(0,1fr)}
 .stackd-sale-badge{top:8px;left:8px;padding:6px 7px;font-size:.63rem}
 .stackd-arches{left:8px;bottom:8px;width:36px;height:34px}
}
@media(max-width:380px){.stackd-card-actions{flex-wrap:wrap}.stackd-news-card{flex-basis:calc(100vw - 44px)}}
@media(prefers-reduced-motion:reduce){.stackd-news-viewport{scroll-behavior:auto}.stackd-news-card img{transition:none}}

  function safeWebLink(value) {
    try { const url = new URL(String(value || '').trim()); return ['https:', 'http:'].includes(url.protocol) ? url.href : ''; }
    catch { return ''; }
  }
  function renderNewsRail() {
    const catalog = $('#catalog');
    if (!catalog) return;
    let section = $('#stackdNewsRail');
    if (!section) {
      section = document.createElement('section'); section.id = 'stackdNewsRail'; section.className = 'stackd-news-section';
      section.innerHTML = `<div class="stackd-news-heading"><h3>${esc(t('newsSection'))}</h3><span>STACKD / UPDATES</span></div><div class="stackd-news-viewport" id="stackdNewsViewport"><div class="stackd-news-track" id="stackdNewsTrack"></div></div>`;
      catalog.insertBefore(section, catalog.querySelector('.head') || catalog.firstChild);
    }
    const viewport = $('#stackdNewsViewport'), track = $('#stackdNewsTrack');
    if (newsTimer) { clearInterval(newsTimer); newsTimer = null; }
    const items = newsItems.filter(item => item && item.image_url);
    newsIndex = 0; section.hidden = !items.length;
    if (!items.length) { track.replaceChildren(); viewport.scrollLeft = 0; return; }
    const slides = items.length > 1 ? [...items, items[0]] : items;
    track.innerHTML = slides.map((item, index) => {
      const image = safeImageUrl(item.image_url);
      const caption = item.title ? `<span class="stackd-news-caption">${esc(item.title)}</span>` : '';
      const body = `<img src="${esc(image)}" alt="${esc(item.title || 'Stackd news')}" loading="${index === 0 ? 'eager' : 'lazy'}">${caption}`;
      const href = safeWebLink(item.href);
      return href ? `<a class="stackd-news-card" href="${esc(href)}" target="_blank" rel="noopener noreferrer">${body}</a>` : `<article class="stackd-news-card">${body}</article>`;
    }).join('');
    viewport.scrollLeft = 0;
    if (items.length < 2) return;
    newsTimer = setInterval(() => {
      if (document.hidden) return;
      newsIndex += 1;
