/* ============ QA sweep fixes ============ */
.field{min-width:0}
.catcard .ct .cnt{display:block}
.timeline li.cancelled .tl-dot{background:var(--red);color:#fff}
.buybar-spacer{display:none}
@media(max-width:899px){
  /* header: pin logo left, actions right (grid auto-placement was stranding them mid-row) */
  .hd .logo{grid-column:1;grid-row:1}
  .hd .hact{grid-column:3;grid-row:1;justify-self:end}
  /* 16px inputs stop iOS focus auto-zoom */
  .input,select.input,textarea.input,.search input,.sortwrap select{font-size:16px}
  /* footer must clear the fixed bottom nav */
  .footer-bottom{padding-bottom:calc(5.3rem + env(safe-area-inset-bottom))}
  /* product page: scroll room + float/toast sit above the buy bar */
  .buybar-spacer{display:block;height:4.4rem}
  body.has-buybar .wa-float{bottom:calc(9.7rem + env(safe-area-inset-bottom))}
  body.has-buybar #toast-root{bottom:calc(8.9rem + env(safe-area-inset-bottom))}
}
@media(min-width:641px) and (max-width:899px){
  /* tablet: hero slides are absolutely positioned, so the hero needs a real height */
  .hero{min-height:17.5rem}
  .harrow{top:50%}
}
/* ============ QA sweep round 2 — found by screenshot inspection at 390px + 1440px ============ */
/* Unsized inline SVGs ballooned inside buttons (giant cart glyph on the product
   page, giant WhatsApp glyph on order-success / contact): pin every button icon. */
.btn svg{width:1.05em;height:1.05em;flex:none}
.harrow svg{width:1.25rem;height:1.25rem}
.faq-item summary svg{width:1.05rem;height:1.05rem}
.wa-badge svg{width:2.1rem;height:2.1rem}
/* Money values in summary rows must never wrap mid-figure ("Rs / 8,499"). */
.sum-row>span:last-child{white-space:nowrap;flex:none}
/* Flash-deal sold bars pin to the card bottom so they align across the row. */
.fcard .soldwrap{margin-top:auto;padding-top:.55rem}
/* Order-card action buttons share row width evenly instead of ragged heights. */
.order-card .btn{flex:1 1 9rem}
/* Scrollable strips get a fade edge so off-screen items read as scrollable,
   not clipped; the page body itself never scrolls sideways. */
.catnav-in,.mchips{overscroll-behavior-x:contain}
@media(max-width:1100px){
  .catnav-in{-webkit-mask-image:linear-gradient(90deg,#000 93%,transparent);mask-image:linear-gradient(90deg,#000 93%,transparent)}
}
@media(max-width:899px){
  .mchips{-webkit-mask-image:linear-gradient(90deg,#000 93%,transparent);mask-image:linear-gradient(90deg,#000 93%,transparent);padding-right:4.4rem}
  /* Panel side-nav: wrap into visible rows — links and Log out were stranded
     off-canvas inside a hidden horizontal scroller (unreachable on phones). */
  .side-nav{flex-wrap:wrap;overflow:visible}
  .side-nav a{flex:1 1 42%}
  .side-nav .btn{flex:1 1 100%;margin-top:.4rem}
  /* Shop toolbar: sort control takes its own full-width row instead of
     squeezing the result count and leaving a ragged half-empty row. */
  .toolbar .results{flex:1}
  .sortwrap{flex:1 1 100%;margin-left:0}
  .sortwrap select{flex:1;max-width:none}
}
/* Buy bar buttons never wrap their labels; drop the struck price on tiny screens. */
.buybar .btn{white-space:nowrap}
@media(max-width:380px){.buybar .bb-price s{display:none}}
/* ============ QA polish + hardening round 3 (2026-10-18) ============ */
/* Out-of-stock card button reads as disabled — never invites a dead click. */
.qadd[disabled]{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}
/* Subtle press feedback on image cards. */
.fcard:active,.catcard:active{transform:translateY(-1px)}
/* Designed empty states: soft icon medallion above the copy. */
.empty-state .es-ic{width:4.2rem;height:4.2rem;margin:0 auto 1rem;border-radius:50%;background:var(--brand-soft);color:var(--brand);display:grid;place-items:center}
.empty-state .es-ic svg{width:2rem;height:2rem}
/* Inline form errors: red ring on the field + message under it. */
.field .input.err-input{border-color:var(--bad);box-shadow:0 0 0 3px color-mix(in srgb,var(--danger) 14%,transparent)}
.field-err{font-size:.78rem;color:var(--bad);font-weight:600;margin:.3rem 0 0}
/* Extra-long words can never push a card, cart line or summary row wide. */
.pname,.fcard .fn,.cart-line h4,.sum-row>span:first-child,h1,h2,h3,.page-title,.tb-msg,.toast,.seller-card strong,.catcard .ct b,.addr-card{overflow-wrap:anywhere}
/* ============ QA adversarial round 4 (2026-10-18) ============ */
/* A very long first name must truncate inside the header account chip instead
   of squeezing the search bar / pushing the header actions off-grid. */
.account-chip span:last-child{max-width:8.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* Long unbroken strings typed into address / note / settings fields surface in
   panel paragraphs — they wrap instead of stretching the panel. */
.panel p,.success-hero p,.order-card p{overflow-wrap:anywhere}
/* ============ UX round 5 — filters redesign + discovery layout (2026-10-19) ============ */
/* Round 7: with the sidebar gone the catalog grid is full width, so it uses
   the base .grid steps (2 / 3 / 4 columns) with one extra step on very wide
   screens to keep cards from stretching. */
@media(min-width:1500px){.catalog-main .grid{grid-template-columns:repeat(5,minmax(0,1fr))}}
/* ============ UX round 6 — context-aware filters (2026-10-19) ============ */
/* Locked category context: on a category view the category is the page's
   context, not a filter to re-pick — the Category checkbox group is simply
   not offered (see catalogShell). */
/* ============ Polish round 8 — de-duplication + header cleanup (2026-10-19) ============ */
/* The locked category gets exactly ONE indicator site-wide: a standard
   active-filter pill in the pills row (same .fpill styling as every other
   active filter, removable back to All Products). The old second indicator —
   a pink "BROWSING …" chip inside the toolbar — is gone, and so are its
   styles: .f-context / .fpill.ctx no longer exist. */
