# Store Cart

> A mini cart drawer and a full cart page with quantity limits, undo, save for later, promo code, shipping estimate, savings and live announcements.

Source: https://docs.nasaqui.com/components/store-cart

## Install

```bash
npx shadcn@latest add https://docs.nasaqui.com/r/store-cart.json
```

The shopping cart for a storefront. A drawer opens when something is added; the cart page lets people change quantities (never above
what is in stock), remove a line and undo it, park a line for later, enter a promo code, estimate delivery by city, and see the total
with what they saved. Every change is announced to screen readers. Money is integer minor units.

## When to use

- Physical goods with stock, variants and delivery.

## When not to use

- A point-of-sale ticket: use `pos`. Digital or subscription checkout: use `checkout-steps`.

## Import

```tsx
import { StoreCartPage, StoreMiniCart, StoreCartButton, useStoreCart } from "@fadymondy/nasaq/web";
```

## Quick start

```tsx
const cart = useStoreCart({ initialLines, feedback: "both" });

<StoreMiniCart
  open={cart.drawerOpen}
  onOpenChange={cart.setDrawerOpen}
  lines={cart.lines}
  currency="USD"
  freeShippingThreshold={150000}
  onQuantityChange={cart.setQuantity}
  onRemove={cart.remove}
  removed={cart.removed}
  onUndo={cart.undo}
  onCheckout={() => router.push("/checkout")}
  trigger={<StoreCartButton count={cart.count} />}
/>
<StoreCartPage lines={cart.lines} currency="USD" message={cart.message} onQuantityChange={cart.setQuantity} onRemove={cart.remove} onCheckout={go} />
```

## Anatomy

```
StoreMiniCart          data-slot="store-mini-cart"         drawer: lines, free-shipping bar, subtotal, Checkout
StoreCartPage          data-slot="store-cart-page"         lines, saved for later, promo, estimator, summary, cross-sell slot
StoreCartLineItem      data-slot="store-cart-line"         image, name, variant, stepper, stock warning, actions and context menu
StoreQuantityStepper   data-slot="store-quantity-stepper"  spinbutton clamped to max
StoreFreeShippingBar   data-slot="store-free-shipping"     progress toward the free-shipping threshold
StoreShippingEstimator data-slot="store-shipping-estimator" city to zone to methods
StoreCartSummary       data-slot="store-cart-summary"      commerceTotals with savings
StoreCrossSell         data-slot="store-cross-sell"        carousel of product cards with quick add
StoreCartEmpty         data-slot="store-cart-empty"        empty state
StoreCartAnnouncer     data-slot="store-cart-announcer"    polite live region
StoreCartButton        data-slot="store-cart-button"       cart icon with a count
```

## API

Read the exported prop types in `store-cart.tsx`. In short:

- `useStoreCart({ initialLines, feedback, labels, onChange })` returns `lines`, `active`, `saved`, `count`, `add`, `setQuantity`, `remove`, `undo`, `removed`, `saveForLater`, `moveToCart`, `fixStock`, `drawerOpen`, `setDrawerOpen`, `message`. `feedback` is `"drawer"`, `"toast"`, `"both"` or `"none"`; the toast needs a mounted `<Toaster />`.
- `StoreCartPage`: `lines`, `currency`, the line callbacks, `freeShippingThreshold`, `zones` (delivery zones by city), `promo` (a `PromoCodeField` fed with `promos` or `onApply`), `taxBps`, `crossSell` slot, `loading`, `error`, `labels`.
- `StoreMiniCart`: `open`, `onOpenChange`, `lines`, `currency`, `freeShippingThreshold`, `trigger`, `removed`, `onUndo`.
- Pure helpers in `cart-logic`: `cartAdd`, `cartSetQuantity`, `cartRemove`, `cartRestore`, `cartSaveForLater`, `cartMoveToCart`, `cartStockIssue`, `cartBlockers`, `cartFixOverStock`, `cartItemFromProduct`, `matchShippingZone`, `cartShippingOptions`. They never mutate and are safe to run on a server.

## Examples

### Arabic

```tsx
<NasaqProvider locale="ar"><StoreCartPage lines={lines} currency="USD" /></NasaqProvider>
```

## Accessibility

| Key | Action |
| --- | --- |
| ArrowUp / ArrowDown | Change the quantity by one. |
| Home / End | Smallest and largest quantity. |
| Escape | Close the drawer; focus returns to the cart button. |
| Shift+F10 or Menu | Open the actions of a line. |

- The drawer is a dialog. Cart changes are read out through a polite live region ("Added Linen shirt, quantity 2").
- Stock warnings are text with an icon, never colour alone. Removing a line offers Undo.

## RTL & i18n

Built-in English and Arabic (with Arabic plurals) and a `labels` prop. Prices, quantities and SKUs stay left to right.

## Styling & tokens

Card, surface, border and status tokens; logical classes only. Target the `data-slot` values above.

## Do / Don't

- Do re-check stock and prices on your server at checkout.
- Do keep the cart in `onChange` storage so it survives a reload.
- Don't send prices in major units; use minor units.

## Related

- `store-checkout`, `loyalty-promo`, `price`, `product-card`

## Lab

Storybook: Components / Commerce / Store Cart, and Pages / Store / Cart.

## Code

### React

```tsx
const cart = useStoreCart({ initialLines, feedback: "both" });

<StoreMiniCart
  open={cart.drawerOpen}
  onOpenChange={cart.setDrawerOpen}
  lines={cart.lines}
  currency="USD"
  freeShippingThreshold={150000}
  onQuantityChange={cart.setQuantity}
  onRemove={cart.remove}
  removed={cart.removed}
  onUndo={cart.undo}
  onCheckout={() => router.push("/checkout")}
  trigger={<StoreCartButton count={cart.count} />}
/>
<StoreCartPage lines={cart.lines} currency="USD" message={cart.message} onQuantityChange={cart.setQuantity} onRemove={cart.remove} onCheckout={go} />
```

### shadcn

```tsx
const cart = useStoreCart({ initialLines, feedback: "both" });

<StoreMiniCart
  open={cart.drawerOpen}
  onOpenChange={cart.setDrawerOpen}
  lines={cart.lines}
  currency="USD"
  freeShippingThreshold={150000}
  onQuantityChange={cart.setQuantity}
  onRemove={cart.remove}
  removed={cart.removed}
  onUndo={cart.undo}
  onCheckout={() => router.push("/checkout")}
  trigger={<StoreCartButton count={cart.count} />}
/>
<StoreCartPage lines={cart.lines} currency="USD" message={cart.message} onQuantityChange={cart.setQuantity} onRemove={cart.remove} onCheckout={go} />
```

### Vue

```vue
<script setup lang="ts">
import { NqStoreCartButton, NqStoreCartPage, NqStoreMiniCart, useStoreCart, type CommerceCartLine } from "@fadymondy/nasaq/vue";

// The README Quick start: one cart controller feeds the mini-cart drawer and the cart page. Prices are minor units (cents).
const initialLines: CommerceCartLine[] = [
  { id: "tee-black-m", productId: "tee", variantId: "black-m", name: "Everyday cotton tee", variantLabel: "Black / M", unitPrice: 2900, compareAt: 3900, quantity: 2, maxQuantity: 3 },
  { id: "bottle", productId: "bottle", variantId: "bottle-1", name: "Steel water bottle", variantLabel: "750 ml", unitPrice: 2400, quantity: 1, maxQuantity: 12 },
];
const cart = useStoreCart({ initialLines, feedback: "both" });

function checkout() {
  console.log("go to checkout", cart.lines);
}
</script>

<template>
  <div class="flex flex-col gap-6">
    <NqStoreMiniCart
      :open="cart.drawerOpen"
      :lines="cart.lines"
      currency="USD"
      :free-shipping-threshold="15000"
      :removed="cart.removed"
      :on-quantity-change="cart.setQuantity"
      :on-remove="cart.remove"
      :on-undo="cart.undo"
      :on-dismiss-removed="cart.dismissRemoved"
      :on-checkout="checkout"
      @update:open="cart.setDrawerOpen"
    >
      <template #trigger><NqStoreCartButton :count="cart.count" /></template>
    </NqStoreMiniCart>
    <NqStoreCartPage
      :lines="cart.lines"
      currency="USD"
      :message="cart.message"
      :removed="cart.removed"
      :free-shipping-threshold="15000"
      :on-quantity-change="cart.setQuantity"
      :on-remove="cart.remove"
      :on-save-for-later="cart.saveForLater"
      :on-move-to-cart="cart.moveToCart"
      :on-undo="cart.undo"
      :on-dismiss-removed="cart.dismissRemoved"
      :on-fix-stock="cart.fixStock"
      :on-checkout="checkout"
    />
  </div>
</template>
```

### Blade

```blade
@php
    // The README Quick start: a mini cart (the drawer, opened by the cart button) and the cart page share one cart. Prices are minor units (cents).
    $lines = [
        ['id' => 'tee-black-m', 'productId' => 'tee', 'variantId' => 'black-m', 'name' => 'Everyday cotton tee', 'variantLabel' => 'Black / M', 'unitPrice' => 2900, 'compareAt' => 3900, 'quantity' => 2, 'maxQuantity' => 3],
        ['id' => 'bottle', 'productId' => 'bottle', 'variantId' => 'bottle-1', 'name' => 'Steel water bottle', 'variantLabel' => '750 ml', 'unitPrice' => 2400, 'quantity' => 1, 'maxQuantity' => 12],
    ];
    $zones = [
        ['id' => 'cairo', 'label' => 'Greater Cairo', 'cities' => ['Cairo', 'Giza'], 'methods' => [
            ['id' => 'standard', 'label' => 'Standard', 'price' => 500, 'freeOver' => 15000, 'etaDays' => [2, 4]],
            ['id' => 'express', 'label' => 'Express', 'price' => 1200, 'etaDays' => [0, 1]],
        ]],
    ];
    $products = [
        ['id' => 'cap', 'name' => 'Canvas cap', 'category' => 'Accessories', 'images' => [['src' => 'https://picsum.photos/seed/cap/640/480', 'alt' => 'Canvas cap']], 'options' => [],
            'variants' => [['id' => 'cap-1', 'options' => [], 'price' => 1900, 'stock' => 10]]],
        ['id' => 'socks', 'name' => 'Wool socks', 'category' => 'Accessories', 'images' => [['src' => 'https://picsum.photos/seed/socks/640/480']], 'options' => [],
            'variants' => [['id' => 'socks-1', 'options' => [], 'price' => 1200, 'stock' => 0]]],
    ];
@endphp
<div class="flex flex-col gap-6" x-on:store-cart-checkout="console.log('go to checkout', $event.detail.lines)">
    <x-nq::store-cart.mini-cart :lines="$lines" currency="USD" :free-shipping-threshold="15000">
        <x-slot:trigger><x-nq::store-cart.button :count="3" /></x-slot:trigger>
    </x-nq::store-cart.mini-cart>
    <x-nq::store-cart :lines="$lines" currency="USD" :free-shipping-threshold="15000" :zones="$zones">
        <x-slot:cross-sell><x-nq::store-cart.cross-sell :products="$products" currency="USD" /></x-slot:cross-sell>
    </x-nq::store-cart>
</div>
```

### HTML + Alpine

```html
<div class="flex flex-col gap-6" x-on:store-cart-checkout="console.log('go to checkout', $event.detail.lines)">
    <div data-slot="store-mini-cart-root" x-data="nqStoreCart(JSON.parse('{\u0022lines\u0022:[{\u0022id\u0022:\u0022tee-black-m\u0022,\u0022productId\u0022:\u0022tee\u0022,\u0022variantId\u0022:\u0022black-m\u0022,\u0022name\u0022:\u0022Everyday cotton tee\u0022,\u0022variantLabel\u0022:\u0022Black \\\/ M\u0022,\u0022unitPrice\u0022:2900,\u0022compareAt\u0022:3900,\u0022quantity\u0022:2,\u0022maxQuantity\u0022:3},{\u0022id\u0022:\u0022bottle\u0022,\u0022productId\u0022:\u0022bottle\u0022,\u0022variantId\u0022:\u0022bottle-1\u0022,\u0022name\u0022:\u0022Steel water bottle\u0022,\u0022variantLabel\u0022:\u0022750 ml\u0022,\u0022unitPrice\u0022:2400,\u0022quantity\u0022:1,\u0022maxQuantity\u0022:12}],\u0022currency\u0022:\u0022USD\u0022,\u0022exponent\u0022:2,\u0022freeShippingThreshold\u0022:15000,\u0022key\u0022:\u0022default\u0022,\u0022feedback\u0022:\u0022drawer\u0022,\u0022undoMs\u0022:8000,\u0022open\u0022:false}'))" x-on:store-cart-add.window="onAdd($event)" class="contents">
    <div data-slot="sheet" x-data="nqDialog(false)" x-modelable="open" x-id="['nq-dialog']" x-model="drawerOpen" class="contents">
    <span class="contents" x-on:click="show()"><button data-slot="button"
     type="button"                         aria-label="Cart, 3 items" x-bind:aria-label="cartLabel" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 text-foreground hover:bg-nq-hover size-control p-0 relative">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="8" cy="21" r="1"/>
  <circle cx="19" cy="21" r="1"/>
  <path d="M2.05 2.05h2l2.66 12.42a2 2 0 0 0 2 1.58h9.78a2 2 0 0 0 1.95-1.57l1.65-7.43H5.12"/>
</svg>    <span data-slot="store-cart-count" aria-hidden="true"  x-show="hasCount" x-text="countBadge"
        class="absolute -end-1 -top-1 inline-flex min-w-4 items-center justify-center rounded-full bg-primary px-1 text-[0.6875rem] font-medium leading-4 text-primary-foreground">3</span></button></span>
                <template x-teleport="body">
    <div data-slot="sheet-portal">
        <div data-slot="sheet-backdrop" x-nq-presence="open" x-on:click="close()" class="fixed inset-0 z-50 bg-nq-fg/10 transition-opacity duration-200 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0 dark:bg-nq-bg/60"></div>
        <div data-slot="store-mini-cart" data-side="end" x-bind="popup" x-nq-presence="open" x-trap.noscroll="open"
            class="fixed z-50 flex flex-col bg-popover text-popover-foreground outline-none shadow-floating transition-[translate,opacity] duration-200 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0 inset-y-0 end-0 h-dvh w-[min(24rem,100vw)] border-s border-border data-starting-style:translate-x-8 data-ending-style:translate-x-8 rtl:data-starting-style:-translate-x-8 rtl:data-ending-style:-translate-x-8">
            <div data-slot="store-cart-announcer" role="status" aria-live="polite" aria-atomic="true" x-text="announcement"
    class="sr-only"></div>
            <div data-slot="sheet-header" class="flex flex-col gap-1 border-b border-border px-4 py-3.5 pe-12"><h2 data-slot="sheet-title" :id="$id('nq-dialog', 'title')" class="text-label text-foreground">Your cart
                    <span x-show="hasActive" style="display: none" class="ms-2 text-body-sm font-normal text-muted-foreground" x-text="countText"></span></h2>
                <p data-slot="sheet-description" :id="$id('nq-dialog', 'description')" class="text-caption text-muted-foreground">Review what you are buying before checkout.</p></div>
            <div data-slot="sheet-body" class="min-h-0 flex-1 overflow-y-auto overscroll-contain flex flex-col gap-3"><div x-show="removed" style="display: none" data-slot="store-cart-removed" class="flex items-center justify-between gap-3 rounded-control border border-border bg-secondary px-3 py-2 text-body-sm text-foreground">
                    <span class="min-w-0 [overflow-wrap:anywhere]" x-text="removedText"></span>
                    <button data-slot="button"
     type="button"                         x-on:click="undo()" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 text-foreground underline decoration-nq-line underline-offset-4 hover:decoration-current h-auto px-0">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M9 14 4 9l5-5"/>
  <path d="M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11"/>
</svg>                        Undo</button>
                </div>
                <div data-slot="store-cart-empty" style="display: none;" x-show="!hasActive" class="flex flex-col items-center justify-center gap-3 border-dashed border-border py-12 text-center rounded-card border-0 px-0">
            <span data-slot="state-icon" class="inline-flex size-10 items-center justify-center rounded-control border border-border bg-card [&amp;_svg]:size-5 text-muted-foreground">
            <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M16 10a4 4 0 0 1-8 0"/>
  <path d="M3.103 6.034h17.794"/>
  <path d="M3.4 5.467a2 2 0 0 0-.4 1.2V20a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6.667a2 2 0 0 0-.4-1.2l-2-2.667A2 2 0 0 0 17 2H7a2 2 0 0 0-1.6.8z"/>
</svg>        </span>
        <div class="flex max-w-sm flex-col gap-1">
        <p class="text-label text-foreground">Your cart is empty</p>
                    <p class="text-body-sm text-muted-foreground">Add something you like and it will wait for you here.</p>
            </div>
            <div class="mt-1 flex flex-wrap items-center justify-center gap-2"><button data-slot="button"
     type="button"                         x-on:click="continueShopping()" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary text-primary-foreground hover:bg-[color-mix(in_oklab,var(--nq-action)_88%,var(--nq-fg))] h-control px-[var(--nq-control-pad)]">
        Start shopping</button></div>
    </div>
                <div x-show="hasActive" style="display: none" class="flex flex-col gap-3">
                                            <div data-slot="store-free-shipping" x-bind:data-unlocked="freeUnlocked ? '' : null"  class="flex flex-col gap-2">
    <p class="flex items-center gap-2 text-body-sm text-foreground">
        <svg aria-hidden="true" x-bind:class="freeUnlocked ? 'text-nq-success-text' : 'text-muted-foreground'" class="size-4 shrink-0 text-muted-foreground" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M14 18V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v11a1 1 0 0 0 1 1h2"/>
  <path d="M15 18H9"/>
  <path d="M19 18h2a1 1 0 0 0 1-1v-3.65a1 1 0 0 0-.22-.624l-3.48-4.35A1 1 0 0 0 17.52 8H14"/>
  <circle cx="17" cy="18" r="2"/>
  <circle cx="7" cy="18" r="2"/>
</svg>        <span x-text="freeText"></span>
    </p>
    <div role="progressbar" aria-label="Progress to free shipping" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"
        x-bind:aria-valuenow="freePercent" data-slot="progress" class="flex w-full flex-col gap-1.5">
        <div data-slot="progress-track" class="relative block h-1 w-full overflow-hidden rounded-full bg-nq-surface-soft">
            <div data-slot="progress-indicator" style="inset-inline-start: 0; width: 0%" x-bind:style="{ width: freePercent + '%' }" x-bind:class="freeUnlocked ? 'bg-nq-success' : 'bg-primary'"
                class="block h-full rounded-full bg-primary transition-[width] duration-300 ease-nq motion-reduce:transition-none"></div>
        </div>
    </div>
</div>
                                        <ul role="list" class="flex flex-col divide-y divide-border">
                        <template x-for="line in active" :key="line.id"><div data-slot="context-menu" x-data="nqContextMenu(false)" x-modelable="open" class="contents"><div data-slot="store-cart-line" x-bind="trigger" x-ref="trigger" class="flex gap-3 py-4 sm:gap-4" role="listitem" x-bind:data-stock="stockKind(line, false)"><span data-slot="store-image" data-state="placeholder" x-data="{ failed: false }"
    x-effect="void (line.image); failed = false" x-bind:data-state="!!(line.image) &amp;&amp; !failed ? 'image' : 'placeholder'"
     style="width: 64px; height: 64px"     x-bind:class="outClass(line)" class="relative inline-flex shrink-0 items-center justify-center overflow-hidden rounded-control border border-border bg-secondary text-muted-foreground">
    <img  style="display: none"  width="64" height="64" loading="lazy" decoding="async"
        x-show="!!(line.image) &amp;&amp; !failed" x-bind:src="line.image" x-bind:alt="line.name" x-on:error="failed = true" class="size-full object-cover">
    <span   x-show="!(line.image) || failed"
         x-bind:role="line.name ? 'img' : null" x-bind:aria-label="line.name || null"  class="inline-flex items-center justify-center">
        <svg aria-hidden="true" class="size-1/3 min-h-4 min-w-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <line x1="2" x2="22" y1="2" y2="22"/>
  <path d="M10.41 10.41a2 2 0 1 1-2.83-2.83"/>
  <line x1="13.5" x2="6" y1="13.5" y2="21"/>
  <line x1="18" x2="21" y1="12" y2="15"/>
  <path d="M3.59 3.59A1.99 1.99 0 0 0 3 5v14a2 2 0 0 0 2 2h14c.55 0 1.052-.22 1.41-.59"/>
  <path d="M21 15V5a2 2 0 0 0-2-2H9"/>
</svg>    </span>
</span>
                <div class="flex min-w-0 flex-1 flex-col gap-2">
            <div class="flex items-start justify-between gap-3">
                <div class="flex min-w-0 flex-col gap-0.5">
                    <p class="text-body font-medium text-foreground [overflow-wrap:anywhere]" x-text="line.name"></p>
                    <p x-show="line.variantLabel"  style="display: none"  class="text-caption text-muted-foreground" x-text="line.variantLabel"></p>
                                    </div>
                <div class="flex shrink-0 flex-col items-end gap-0.5 text-end">
                    <span data-slot="price" class="inline-flex flex-wrap items-baseline gap-x-1.5 text-foreground text-body-sm">
    <span><bdi class="tabular-nums font-medium" x-text="price(line.unitPrice * line.quantity)"></bdi></span>
            <s x-show="hasCompare(line)"  style="display: none"  class="text-caption text-muted-foreground decoration-muted-foreground/60">
            <span class="sr-only">was </span>
            <bdi class="tabular-nums" x-text="money(line.compareAt * line.quantity)"></bdi>
        </s>
    </span>
                    <span x-show="multi(line)"  style="display: none"  class="text-caption text-muted-foreground"><span class="text-muted-foreground" x-text="money(line.unitPrice)"></span> each</span>
                </div>
            </div>
            <p data-slot="store-cart-stock" role="status" x-show="stockKind(line, false)"  style="display: none"  x-bind:class="stockClass(line, false)"
                class="flex items-center gap-1.5 text-caption text-muted-foreground">
                <svg aria-hidden="true" class="size-3.5 shrink-0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"/>
  <path d="M12 9v4"/>
  <path d="M12 17h.01"/>
</svg>                <span x-text="stockText(line, false)"></span>
            </p>
            <div class="flex flex-wrap items-start gap-x-3 gap-y-2">
                                                            <div data-slot="store-quantity-stepper" x-data="nqStoreQuantity(1, null, 1, '', false)" x-id="['store-qty-hint']"
     x-effect="sync(line)" x-on:store-quantity-change="setQuantity(line.id, $event.detail.quantity)"     class="flex flex-col gap-1">
    <div role="group" x-bind:aria-label="groupLabel" aria-label="Quantity of " class="inline-flex w-fit items-center rounded-control border border-input bg-card">
        <button data-slot="button"
     type="button"                  disabled      data-disabled     aria-label="Decrease quantity of" x-bind:aria-label="decreaseLabel" x-bind:disabled="disabled || atMin" x-on:click="set(value - 1)" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 text-foreground hover:bg-nq-hover size-control-sm p-0">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M5 12h14"/>
</svg></button>
        <input role="spinbutton" type="text" inputmode="numeric" dir="ltr" aria-label="Quantity" aria-valuemin="1" aria-valuenow="1"
              value="1"
            x-bind:aria-valuemin="min" x-bind:aria-valuenow="value" x-bind:aria-valuemax="top" x-bind:aria-describedby="atMax ? $id('store-qty-hint') : null"
            x-bind:disabled="disabled" x-bind:value="display"
            x-on:input="onInput($event)" x-on:focus="$event.target.select()" x-on:blur="commit()" x-on:keydown="onKey($event)"
            class="h-control-sm w-10 border-0 bg-transparent text-center text-body tabular-nums text-foreground outline-none focus-visible:outline-2 focus-visible:outline-nq-focus pointer-coarse:text-[16px]">
        <button data-slot="button"
     type="button"                         aria-label="Increase quantity of" x-bind:aria-label="increaseLabel" x-bind:disabled="disabled || atMax" x-on:click="set(value + 1)" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 text-foreground hover:bg-nq-hover size-control-sm p-0">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M5 12h14"/>
  <path d="M12 5v14"/>
</svg></button>
    </div>
    <span x-show="atMax" style="display: none" x-bind:id="$id('store-qty-hint')" class="text-caption text-muted-foreground" x-text="hintText"></span>
</div>
                                                    <div class="ms-auto flex flex-wrap items-center gap-1">
                                                                                            <button data-slot="button"
     type="button"                         x-bind:aria-label="removeLabel(line)" x-on:click="remove(line.id)" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 text-foreground hover:bg-nq-hover size-control-sm p-0">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M10 11v6"/>
  <path d="M14 11v6"/>
  <path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6"/>
  <path d="M3 6h18"/>
  <path d="M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"/>
</svg></button>
                                                            </div>
            </div>
        </div></div>
            <template x-teleport="body">
    <div data-slot="context-menu-content" x-bind="popup" x-init="popupEl = $el" x-nq-presence="open"
        class="fixed z-50 overflow-hidden rounded-floating border border-border bg-popover p-1.5 text-popover-foreground shadow-floating outline-none max-h-[var(--available-height)] overflow-y-auto transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0 min-w-44"><div data-slot="context-menu-item" role="menuitem" data-variant="danger" x-bind="item"
        x-on:click="remove(line.id)" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] cursor-default select-none items-center gap-2.5 rounded-control px-2.5 text-body-sm outline-none data-highlighted:bg-nq-selected data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0 text-nq-danger-text [&_svg]:text-current"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M10 11v6"/>
  <path d="M14 11v6"/>
  <path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6"/>
  <path d="M3 6h18"/>
  <path d="M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"/>
</svg>                    Remove</div></div>
</template></div>
</template>
                    </ul>
                </div></div>
            <div data-slot="sheet-footer" x-show="hasActive" style="display: none" class="flex border-t border-border px-4 py-3 flex-col items-stretch gap-3"><div class="flex items-baseline justify-between gap-3">
                    <span class="text-label text-foreground">Subtotal</span>
                    <span data-slot="price" class="inline-flex flex-wrap items-baseline gap-x-1.5 text-foreground text-body">
    <span><bdi class="tabular-nums font-medium" x-text="price(totals.subtotal)"></bdi></span>
    </span>
                </div>
                <p class="text-caption text-muted-foreground">Shipping and taxes are worked out at checkout.</p>
                <button data-slot="button"
     type="button"                         x-bind:disabled="blocked" x-on:click="checkout()" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary text-primary-foreground hover:bg-[color-mix(in_oklab,var(--nq-action)_88%,var(--nq-fg))] h-[calc(var(--nq-control)+8px)] px-5 text-body">
        Checkout</button>
                <button data-slot="button"
     type="button"                         x-on:click="viewCart()" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border-border bg-card text-foreground hover:bg-nq-hover h-control px-[var(--nq-control-pad)]">
        View cart</button></div>
                            <button type="button" data-slot="sheet-close" x-on:click="close()" aria-label="Close cart"
                    class="absolute end-3 top-3 inline-flex size-8 items-center justify-center rounded-control text-muted-foreground transition-colors duration-150 hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:outline-nq-focus [&_svg]:size-4"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M18 6 6 18"/>
  <path d="m6 6 12 12"/>
</svg></button>
                    </div>
    </div>
</template>
</div>
</div>
    <div data-slot="store-cart-page" x-data="nqStoreCart(JSON.parse('{\u0022lines\u0022:[{\u0022id\u0022:\u0022tee-black-m\u0022,\u0022productId\u0022:\u0022tee\u0022,\u0022variantId\u0022:\u0022black-m\u0022,\u0022name\u0022:\u0022Everyday cotton tee\u0022,\u0022variantLabel\u0022:\u0022Black \\\/ M\u0022,\u0022unitPrice\u0022:2900,\u0022compareAt\u0022:3900,\u0022quantity\u0022:2,\u0022maxQuantity\u0022:3},{\u0022id\u0022:\u0022bottle\u0022,\u0022productId\u0022:\u0022bottle\u0022,\u0022variantId\u0022:\u0022bottle-1\u0022,\u0022name\u0022:\u0022Steel water bottle\u0022,\u0022variantLabel\u0022:\u0022750 ml\u0022,\u0022unitPrice\u0022:2400,\u0022quantity\u0022:1,\u0022maxQuantity\u0022:12}],\u0022currency\u0022:\u0022USD\u0022,\u0022exponent\u0022:2,\u0022freeShippingThreshold\u0022:15000,\u0022zones\u0022:[{\u0022id\u0022:\u0022cairo\u0022,\u0022label\u0022:\u0022Greater Cairo\u0022,\u0022cities\u0022:[\u0022Cairo\u0022,\u0022Giza\u0022],\u0022methods\u0022:[{\u0022id\u0022:\u0022standard\u0022,\u0022label\u0022:\u0022Standard\u0022,\u0022price\u0022:500,\u0022freeOver\u0022:15000,\u0022etaDays\u0022:[2,4]},{\u0022id\u0022:\u0022express\u0022,\u0022label\u0022:\u0022Express\u0022,\u0022price\u0022:1200,\u0022etaDays\u0022:[0,1]}]}],\u0022taxBps\u0022:null,\u0022taxInclusive\u0022:null,\u0022promo\u0022:null,\u0022key\u0022:\u0022default\u0022,\u0022feedback\u0022:\u0022drawer\u0022,\u0022undoMs\u0022:8000,\u0022loading\u0022:false,\u0022error\u0022:false}'))"
    x-on:store-cart-add.window="onAdd($event)" x-on:nq-promo-apply.capture="wrapPromo($event)" x-on:nq-promo-applied="promoApplied($event)" x-on:nq-promo-remove="promoRemoved()"
    class="mx-auto flex w-full max-w-6xl flex-col gap-6 px-4 py-6 sm:px-6">
    <div data-slot="store-cart-announcer" role="status" aria-live="polite" aria-atomic="true" x-text="announcement"
    class="sr-only"></div>
    <div class="flex flex-wrap items-baseline justify-between gap-2">
        <h1 class="text-h1 font-semibold tracking-tight text-foreground">
            Cart
            <span x-show="hasActive"  class="ms-2 text-body font-normal text-muted-foreground" x-text="countText">3 items</span>
        </h1>
                    <button data-slot="button"
     type="button"                         x-show="hasActive" x-on:click="continueShopping()" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 text-foreground underline decoration-nq-line underline-offset-4 hover:decoration-current h-auto px-0">
        Continue shopping</button>
            </div>
    <div x-show="showError"  style="display: none" >
        <div data-slot="error-state" role="alert" class="flex flex-col items-center justify-center gap-3 border border-dashed border-border px-6 py-12 text-center rounded-card">
            <span data-slot="state-icon" class="inline-flex size-10 items-center justify-center rounded-control border border-border bg-card [&amp;_svg]:size-5 text-nq-danger-text">
            <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="10"/>
  <line x1="12" x2="12" y1="8" y2="12"/>
  <line x1="12" x2="12.01" y1="16" y2="16"/>
</svg>        </span>
        <div class="flex max-w-sm flex-col gap-1">
        <p class="text-label text-foreground">We could not load your cart</p>
                    <p class="text-body-sm text-muted-foreground">Check your connection and try again.</p>
            </div>
    <div class="mt-1 flex flex-wrap items-center justify-center gap-2">
                    <button data-slot="button"
     type="button"                         x-on:click="retry()" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary text-primary-foreground hover:bg-[color-mix(in_oklab,var(--nq-action)_88%,var(--nq-fg))] h-control px-[var(--nq-control-pad)]">
        Try again</button>
                </div>
    </div>
    </div>
    <div x-show="showLoading"  style="display: none"  role="status" aria-busy="true" aria-label="Loading your cart" class="flex flex-col gap-4">
                    <div class="flex gap-4 py-2">
                <div data-slot="skeleton" aria-hidden="true" class="rounded-[4px] bg-secondary motion-safe:animate-pulse size-22 shrink-0"></div>
                <div class="flex flex-1 flex-col gap-2">
                    <div data-slot="skeleton" aria-hidden="true" class="rounded-[4px] bg-secondary motion-safe:animate-pulse h-4 w-2/3"></div>
                    <div data-slot="skeleton" aria-hidden="true" class="rounded-[4px] bg-secondary motion-safe:animate-pulse h-3 w-1/3"></div>
                    <div data-slot="skeleton" aria-hidden="true" class="rounded-[4px] bg-secondary motion-safe:animate-pulse mt-2 h-8 w-28"></div>
                </div>
            </div>
                    <div class="flex gap-4 py-2">
                <div data-slot="skeleton" aria-hidden="true" class="rounded-[4px] bg-secondary motion-safe:animate-pulse size-22 shrink-0"></div>
                <div class="flex flex-1 flex-col gap-2">
                    <div data-slot="skeleton" aria-hidden="true" class="rounded-[4px] bg-secondary motion-safe:animate-pulse h-4 w-2/3"></div>
                    <div data-slot="skeleton" aria-hidden="true" class="rounded-[4px] bg-secondary motion-safe:animate-pulse h-3 w-1/3"></div>
                    <div data-slot="skeleton" aria-hidden="true" class="rounded-[4px] bg-secondary motion-safe:animate-pulse mt-2 h-8 w-28"></div>
                </div>
            </div>
                    <div class="flex gap-4 py-2">
                <div data-slot="skeleton" aria-hidden="true" class="rounded-[4px] bg-secondary motion-safe:animate-pulse size-22 shrink-0"></div>
                <div class="flex flex-1 flex-col gap-2">
                    <div data-slot="skeleton" aria-hidden="true" class="rounded-[4px] bg-secondary motion-safe:animate-pulse h-4 w-2/3"></div>
                    <div data-slot="skeleton" aria-hidden="true" class="rounded-[4px] bg-secondary motion-safe:animate-pulse h-3 w-1/3"></div>
                    <div data-slot="skeleton" aria-hidden="true" class="rounded-[4px] bg-secondary motion-safe:animate-pulse mt-2 h-8 w-28"></div>
                </div>
            </div>
            </div>
    <div data-slot="store-cart-empty" style="display: none;" x-show="showEmpty" class="flex flex-col items-center justify-center gap-3 border border-dashed border-border px-6 py-12 text-center rounded-card">
            <span data-slot="state-icon" class="inline-flex size-10 items-center justify-center rounded-control border border-border bg-card [&amp;_svg]:size-5 text-muted-foreground">
            <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M16 10a4 4 0 0 1-8 0"/>
  <path d="M3.103 6.034h17.794"/>
  <path d="M3.4 5.467a2 2 0 0 0-.4 1.2V20a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6.667a2 2 0 0 0-.4-1.2l-2-2.667A2 2 0 0 0 17 2H7a2 2 0 0 0-1.6.8z"/>
</svg>        </span>
        <div class="flex max-w-sm flex-col gap-1">
        <p class="text-label text-foreground">Your cart is empty</p>
                    <p class="text-body-sm text-muted-foreground">Add something you like and it will wait for you here.</p>
            </div>
            <div class="mt-1 flex flex-wrap items-center justify-center gap-2"><button data-slot="button"
     type="button"                         x-on:click="continueShopping()" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary text-primary-foreground hover:bg-[color-mix(in_oklab,var(--nq-action)_88%,var(--nq-fg))] h-control px-[var(--nq-control-pad)]">
        Start shopping</button></div>
    </div>
    <div x-show="showContent"  class="grid gap-8 lg:grid-cols-[minmax(0,1fr)_22rem] lg:items-start">
        <div class="flex min-w-0 flex-col gap-6">
            <div x-show="blocked"  style="display: none" >
                <div data-slot="alert" data-tone="warning" role="alert"
        class="relative grid grid-cols-[auto_1fr_auto] items-start gap-x-3 rounded-card border p-3 text-start border-nq-warning/30 bg-nq-warning-soft">
    <svg aria-hidden="true" data-slot="alert-icon" class="mt-0.5 size-4 text-nq-warning-text" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="10"/>
  <line x1="12" x2="12" y1="8" y2="12"/>
  <line x1="12" x2="12.01" y1="16" y2="16"/>
</svg>    <div data-slot="alert-body" class="flex min-w-0 flex-col gap-0.5">
                    <div data-slot="alert-title" class="text-label text-foreground">Some items need attention</div>
                            <div data-slot="alert-description" class="text-body-sm text-muted-foreground">Adjust or remove them to continue to checkout.</div>
            </div>
            <div data-slot="alert-actions" class="ms-3 flex items-center gap-1">
            <button data-slot="button"
     type="button"                         x-show="canFix" style="display: none" x-on:click="fixStock()" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border-border bg-card text-foreground hover:bg-nq-hover h-control-sm px-2.5">
        Adjust quantities</button>
                    </div>
    </div>
            </div>
                            <div data-slot="store-free-shipping" x-bind:data-unlocked="freeUnlocked ? '' : null"  x-show="hasActive" class="flex flex-col gap-2 rounded-card border border-border bg-card p-4">
    <p class="flex items-center gap-2 text-body-sm text-foreground">
        <svg aria-hidden="true" x-bind:class="freeUnlocked ? 'text-nq-success-text' : 'text-muted-foreground'" class="size-4 shrink-0 text-muted-foreground" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M14 18V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v11a1 1 0 0 0 1 1h2"/>
  <path d="M15 18H9"/>
  <path d="M19 18h2a1 1 0 0 0 1-1v-3.65a1 1 0 0 0-.22-.624l-3.48-4.35A1 1 0 0 0 17.52 8H14"/>
  <circle cx="17" cy="18" r="2"/>
  <circle cx="7" cy="18" r="2"/>
</svg>        <span x-text="freeText">You are $68 away from free shipping</span>
    </p>
    <div role="progressbar" aria-label="Progress to free shipping" aria-valuemin="0" aria-valuemax="100" aria-valuenow="55"
        x-bind:aria-valuenow="freePercent" data-slot="progress" class="flex w-full flex-col gap-1.5">
        <div data-slot="progress-track" class="relative block h-1 w-full overflow-hidden rounded-full bg-nq-surface-soft">
            <div data-slot="progress-indicator" style="inset-inline-start: 0; width: 55%" x-bind:style="{ width: freePercent + '%' }" x-bind:class="freeUnlocked ? 'bg-nq-success' : 'bg-primary'"
                class="block h-full rounded-full bg-primary transition-[width] duration-300 ease-nq motion-reduce:transition-none"></div>
        </div>
    </div>
</div>
                        <div x-show="removed" style="display: none" data-slot="store-cart-removed" class="flex items-center justify-between gap-3 rounded-control border border-border bg-secondary px-3 py-2 text-body-sm text-foreground">
                <span class="min-w-0 [overflow-wrap:anywhere]" x-text="removedText"></span>
                <button data-slot="button"
     type="button"                         x-on:click="undo()" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 text-foreground underline decoration-nq-line underline-offset-4 hover:decoration-current h-auto px-0">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M9 14 4 9l5-5"/>
  <path d="M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11"/>
</svg>                    Undo</button>
            </div>
            <ul role="list" aria-label="Cart" x-show="hasActive"  class="flex flex-col divide-y divide-border border-y border-border">
                                    <div data-slot="context-menu" x-data="nqContextMenu(false)" x-modelable="open" data-ssr="" x-ignore="" class="contents"><div data-slot="store-cart-line" x-bind="trigger" x-ref="trigger" class="flex gap-3 py-4 sm:gap-4" role="listitem" data-stock="low" x-bind:data-stock="stockKind(line, false)"><span data-slot="store-image" data-state="placeholder" x-data="{ failed: false }"
    x-effect="void (null); failed = false" x-bind:data-state="!!(null) &amp;&amp; !failed ? 'image' : 'placeholder'"
     style="width: 88px; height: 88px"     class="relative inline-flex shrink-0 items-center justify-center overflow-hidden rounded-control border border-border bg-secondary text-muted-foreground">
    <img  style="display: none"  width="88" height="88" loading="lazy" decoding="async"
        x-show="!!(null) &amp;&amp; !failed" x-bind:src="null" x-bind:alt="&#039;Everyday cotton tee&#039;" x-on:error="failed = true" class="size-full object-cover">
    <span   role="img" aria-label="Everyday cotton tee"  x-show="!(null) || failed"
         class="inline-flex items-center justify-center">
        <svg aria-hidden="true" class="size-1/3 min-h-4 min-w-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <line x1="2" x2="22" y1="2" y2="22"/>
  <path d="M10.41 10.41a2 2 0 1 1-2.83-2.83"/>
  <line x1="13.5" x2="6" y1="13.5" y2="21"/>
  <line x1="18" x2="21" y1="12" y2="15"/>
  <path d="M3.59 3.59A1.99 1.99 0 0 0 3 5v14a2 2 0 0 0 2 2h14c.55 0 1.052-.22 1.41-.59"/>
  <path d="M21 15V5a2 2 0 0 0-2-2H9"/>
</svg>    </span>
</span>
                <div class="flex min-w-0 flex-1 flex-col gap-2">
            <div class="flex items-start justify-between gap-3">
                <div class="flex min-w-0 flex-col gap-0.5">
                    <p class="text-body font-medium text-foreground [overflow-wrap:anywhere]" x-text="line.name">Everyday cotton tee</p>
                    <p x-show="line.variantLabel"  class="text-caption text-muted-foreground" x-text="line.variantLabel">Black / M</p>
                                    </div>
                <div class="flex shrink-0 flex-col items-end gap-0.5 text-end">
                    <span data-slot="price" class="inline-flex flex-wrap items-baseline gap-x-1.5 text-foreground text-body-sm">
    <span><bdi class="tabular-nums font-medium" x-text="price(line.unitPrice * line.quantity)">$58</bdi></span>
            <s x-show="hasCompare(line)"  class="text-caption text-muted-foreground decoration-muted-foreground/60">
            <span class="sr-only">was </span>
            <bdi class="tabular-nums" x-text="money(line.compareAt * line.quantity)">$78</bdi>
        </s>
    </span>
                    <span x-show="multi(line)"  class="text-caption text-muted-foreground"><span class="text-muted-foreground" x-text="money(line.unitPrice)">$29</span> each</span>
                </div>
            </div>
            <p data-slot="store-cart-stock" role="status" x-show="stockKind(line, false)"  x-bind:class="stockClass(line, false)"
                class="flex items-center gap-1.5 text-caption text-muted-foreground">
                <svg aria-hidden="true" class="size-3.5 shrink-0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"/>
  <path d="M12 9v4"/>
  <path d="M12 17h.01"/>
</svg>                <span x-text="stockText(line, false)">Only 3 left</span>
            </p>
            <div class="flex flex-wrap items-start gap-x-3 gap-y-2">
                                                            <div data-slot="store-quantity-stepper" x-data="nqStoreQuantity(2, 3, 1, 'Everyday cotton tee', false)" x-id="['store-qty-hint']"
     x-effect="sync(line)" x-on:store-quantity-change="setQuantity(line.id, $event.detail.quantity)"     class="flex flex-col gap-1">
    <div role="group" x-bind:aria-label="groupLabel" aria-label="Quantity of Everyday cotton tee" class="inline-flex w-fit items-center rounded-control border border-input bg-card">
        <button data-slot="button"
     type="button"                         aria-label="Decrease quantity of Everyday cotton tee" x-bind:aria-label="decreaseLabel" x-bind:disabled="disabled || atMin" x-on:click="set(value - 1)" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 text-foreground hover:bg-nq-hover size-control-sm p-0">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M5 12h14"/>
</svg></button>
        <input role="spinbutton" type="text" inputmode="numeric" dir="ltr" aria-label="Quantity" aria-valuemin="1" aria-valuenow="2"
             aria-valuemax="3"   value="2"
            x-bind:aria-valuemin="min" x-bind:aria-valuenow="value" x-bind:aria-valuemax="top" x-bind:aria-describedby="atMax ? $id('store-qty-hint') : null"
            x-bind:disabled="disabled" x-bind:value="display"
            x-on:input="onInput($event)" x-on:focus="$event.target.select()" x-on:blur="commit()" x-on:keydown="onKey($event)"
            class="h-control-sm w-10 border-0 bg-transparent text-center text-body tabular-nums text-foreground outline-none focus-visible:outline-2 focus-visible:outline-nq-focus pointer-coarse:text-[16px]">
        <button data-slot="button"
     type="button"                         aria-label="Increase quantity of Everyday cotton tee" x-bind:aria-label="increaseLabel" x-bind:disabled="disabled || atMax" x-on:click="set(value + 1)" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 text-foreground hover:bg-nq-hover size-control-sm p-0">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M5 12h14"/>
  <path d="M12 5v14"/>
</svg></button>
    </div>
    <span x-show="atMax" style="display: none" x-bind:id="$id('store-qty-hint')" class="text-caption text-muted-foreground" x-text="hintText"></span>
</div>
                                                    <div class="ms-auto flex flex-wrap items-center gap-1">
                                            <button data-slot="button"
     type="button"                         x-on:click="saveForLater(line.id)" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 text-foreground hover:bg-nq-hover h-control-sm px-2.5">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z"/>
</svg>                            Save for later</button>
                                                                                            <button data-slot="button"
     type="button"                         aria-label="Remove Everyday cotton tee" x-bind:aria-label="removeLabel(line)" x-on:click="remove(line.id)" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 text-foreground hover:bg-nq-hover h-control-sm px-2.5">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M10 11v6"/>
  <path d="M14 11v6"/>
  <path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6"/>
  <path d="M3 6h18"/>
  <path d="M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"/>
</svg>                                Remove</button>
                                                            </div>
            </div>
        </div></div>
            <template x-teleport="body">
    <div data-slot="context-menu-content" x-bind="popup" x-init="popupEl = $el" x-nq-presence="open"
        class="fixed z-50 overflow-hidden rounded-floating border border-border bg-popover p-1.5 text-popover-foreground shadow-floating outline-none max-h-[var(--available-height)] overflow-y-auto transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0 min-w-44"><div data-slot="context-menu-item" role="menuitem" data-variant="default" x-bind="item"
        x-on:click="openProduct(line)" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] cursor-default select-none items-center gap-2.5 rounded-control px-2.5 text-body-sm text-foreground outline-none data-highlighted:bg-nq-selected data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:text-muted-foreground"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"/>
  <circle cx="12" cy="12" r="3"/>
</svg>                        View product</div>
                                                                            <div data-slot="context-menu-item" role="menuitem" data-variant="default" x-bind="item"
        x-on:click="saveForLater(line.id)" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] cursor-default select-none items-center gap-2.5 rounded-control px-2.5 text-body-sm text-foreground outline-none data-highlighted:bg-nq-selected data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:text-muted-foreground"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z"/>
</svg>                            Save for later</div>
                                                                        <div data-slot="context-menu-separator" role="separator" aria-orientation="horizontal" class="-mx-1.5 my-1.5 h-px bg-border"></div>
                                                        <div data-slot="context-menu-item" role="menuitem" data-variant="danger" x-bind="item"
        x-on:click="remove(line.id)" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] cursor-default select-none items-center gap-2.5 rounded-control px-2.5 text-body-sm outline-none data-highlighted:bg-nq-selected data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0 text-nq-danger-text [&_svg]:text-current"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M10 11v6"/>
  <path d="M14 11v6"/>
  <path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6"/>
  <path d="M3 6h18"/>
  <path d="M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"/>
</svg>                    Remove</div></div>
</template></div>
                                    <div data-slot="context-menu" x-data="nqContextMenu(false)" x-modelable="open" data-ssr="" x-ignore="" class="contents"><div data-slot="store-cart-line" x-bind="trigger" x-ref="trigger" class="flex gap-3 py-4 sm:gap-4" role="listitem" x-bind:data-stock="stockKind(line, false)"><span data-slot="store-image" data-state="placeholder" x-data="{ failed: false }"
    x-effect="void (null); failed = false" x-bind:data-state="!!(null) &amp;&amp; !failed ? 'image' : 'placeholder'"
     style="width: 88px; height: 88px"     class="relative inline-flex shrink-0 items-center justify-center overflow-hidden rounded-control border border-border bg-secondary text-muted-foreground">
    <img  style="display: none"  width="88" height="88" loading="lazy" decoding="async"
        x-show="!!(null) &amp;&amp; !failed" x-bind:src="null" x-bind:alt="&#039;Steel water bottle&#039;" x-on:error="failed = true" class="size-full object-cover">
    <span   role="img" aria-label="Steel water bottle"  x-show="!(null) || failed"
         class="inline-flex items-center justify-center">
        <svg aria-hidden="true" class="size-1/3 min-h-4 min-w-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <line x1="2" x2="22" y1="2" y2="22"/>
  <path d="M10.41 10.41a2 2 0 1 1-2.83-2.83"/>
  <line x1="13.5" x2="6" y1="13.5" y2="21"/>
  <line x1="18" x2="21" y1="12" y2="15"/>
  <path d="M3.59 3.59A1.99 1.99 0 0 0 3 5v14a2 2 0 0 0 2 2h14c.55 0 1.052-.22 1.41-.59"/>
  <path d="M21 15V5a2 2 0 0 0-2-2H9"/>
</svg>    </span>
</span>
                <div class="flex min-w-0 flex-1 flex-col gap-2">
            <div class="flex items-start justify-between gap-3">
                <div class="flex min-w-0 flex-col gap-0.5">
                    <p class="text-body font-medium text-foreground [overflow-wrap:anywhere]" x-text="line.name">Steel water bottle</p>
                    <p x-show="line.variantLabel"  class="text-caption text-muted-foreground" x-text="line.variantLabel">750 ml</p>
                                    </div>
                <div class="flex shrink-0 flex-col items-end gap-0.5 text-end">
                    <span data-slot="price" class="inline-flex flex-wrap items-baseline gap-x-1.5 text-foreground text-body-sm">
    <span><bdi class="tabular-nums font-medium" x-text="price(line.unitPrice * line.quantity)">$24</bdi></span>
            <s x-show="hasCompare(line)"  style="display: none"  class="text-caption text-muted-foreground decoration-muted-foreground/60">
            <span class="sr-only">was </span>
            <bdi class="tabular-nums" x-text="money(line.compareAt * line.quantity)"></bdi>
        </s>
    </span>
                    <span x-show="multi(line)"  style="display: none"  class="text-caption text-muted-foreground"><span class="text-muted-foreground" x-text="money(line.unitPrice)">$24</span> each</span>
                </div>
            </div>
            <p data-slot="store-cart-stock" role="status" x-show="stockKind(line, false)"  style="display: none"  x-bind:class="stockClass(line, false)"
                class="flex items-center gap-1.5 text-caption text-muted-foreground">
                <svg aria-hidden="true" class="size-3.5 shrink-0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"/>
  <path d="M12 9v4"/>
  <path d="M12 17h.01"/>
</svg>                <span x-text="stockText(line, false)"></span>
            </p>
            <div class="flex flex-wrap items-start gap-x-3 gap-y-2">
                                                            <div data-slot="store-quantity-stepper" x-data="nqStoreQuantity(1, 12, 1, 'Steel water bottle', false)" x-id="['store-qty-hint']"
     x-effect="sync(line)" x-on:store-quantity-change="setQuantity(line.id, $event.detail.quantity)"     class="flex flex-col gap-1">
    <div role="group" x-bind:aria-label="groupLabel" aria-label="Quantity of Steel water bottle" class="inline-flex w-fit items-center rounded-control border border-input bg-card">
        <button data-slot="button"
     type="button"                  disabled      data-disabled     aria-label="Decrease quantity of Steel water bottle" x-bind:aria-label="decreaseLabel" x-bind:disabled="disabled || atMin" x-on:click="set(value - 1)" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 text-foreground hover:bg-nq-hover size-control-sm p-0">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M5 12h14"/>
</svg></button>
        <input role="spinbutton" type="text" inputmode="numeric" dir="ltr" aria-label="Quantity" aria-valuemin="1" aria-valuenow="1"
             aria-valuemax="12"   value="1"
            x-bind:aria-valuemin="min" x-bind:aria-valuenow="value" x-bind:aria-valuemax="top" x-bind:aria-describedby="atMax ? $id('store-qty-hint') : null"
            x-bind:disabled="disabled" x-bind:value="display"
            x-on:input="onInput($event)" x-on:focus="$event.target.select()" x-on:blur="commit()" x-on:keydown="onKey($event)"
            class="h-control-sm w-10 border-0 bg-transparent text-center text-body tabular-nums text-foreground outline-none focus-visible:outline-2 focus-visible:outline-nq-focus pointer-coarse:text-[16px]">
        <button data-slot="button"
     type="button"                         aria-label="Increase quantity of Steel water bottle" x-bind:aria-label="increaseLabel" x-bind:disabled="disabled || atMax" x-on:click="set(value + 1)" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 text-foreground hover:bg-nq-hover size-control-sm p-0">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M5 12h14"/>
  <path d="M12 5v14"/>
</svg></button>
    </div>
    <span x-show="atMax" style="display: none" x-bind:id="$id('store-qty-hint')" class="text-caption text-muted-foreground" x-text="hintText"></span>
</div>
                                                    <div class="ms-auto flex flex-wrap items-center gap-1">
                                            <button data-slot="button"
     type="button"                         x-on:click="saveForLater(line.id)" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 text-foreground hover:bg-nq-hover h-control-sm px-2.5">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z"/>
</svg>                            Save for later</button>
                                                                                            <button data-slot="button"
     type="button"                         aria-label="Remove Steel water bottle" x-bind:aria-label="removeLabel(line)" x-on:click="remove(line.id)" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 text-foreground hover:bg-nq-hover h-control-sm px-2.5">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M10 11v6"/>
  <path d="M14 11v6"/>
  <path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6"/>
  <path d="M3 6h18"/>
  <path d="M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"/>
</svg>                                Remove</button>
                                                            </div>
            </div>
        </div></div>
            <template x-teleport="body">
    <div data-slot="context-menu-content" x-bind="popup" x-init="popupEl = $el" x-nq-presence="open"
        class="fixed z-50 overflow-hidden rounded-floating border border-border bg-popover p-1.5 text-popover-foreground shadow-floating outline-none max-h-[var(--available-height)] overflow-y-auto transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0 min-w-44"><div data-slot="context-menu-item" role="menuitem" data-variant="default" x-bind="item"
        x-on:click="openProduct(line)" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] cursor-default select-none items-center gap-2.5 rounded-control px-2.5 text-body-sm text-foreground outline-none data-highlighted:bg-nq-selected data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:text-muted-foreground"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"/>
  <circle cx="12" cy="12" r="3"/>
</svg>                        View product</div>
                                                                            <div data-slot="context-menu-item" role="menuitem" data-variant="default" x-bind="item"
        x-on:click="saveForLater(line.id)" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] cursor-default select-none items-center gap-2.5 rounded-control px-2.5 text-body-sm text-foreground outline-none data-highlighted:bg-nq-selected data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:text-muted-foreground"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z"/>
</svg>                            Save for later</div>
                                                                        <div data-slot="context-menu-separator" role="separator" aria-orientation="horizontal" class="-mx-1.5 my-1.5 h-px bg-border"></div>
                                                        <div data-slot="context-menu-item" role="menuitem" data-variant="danger" x-bind="item"
        x-on:click="remove(line.id)" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] cursor-default select-none items-center gap-2.5 rounded-control px-2.5 text-body-sm outline-none data-highlighted:bg-nq-selected data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0 text-nq-danger-text [&_svg]:text-current"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M10 11v6"/>
  <path d="M14 11v6"/>
  <path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6"/>
  <path d="M3 6h18"/>
  <path d="M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"/>
</svg>                    Remove</div></div>
</template></div>
                                <template x-for="line in active" :key="line.id"><div data-slot="context-menu" x-data="nqContextMenu(false)" x-modelable="open" class="contents"><div data-slot="store-cart-line" x-bind="trigger" x-ref="trigger" class="flex gap-3 py-4 sm:gap-4" role="listitem" x-bind:data-stock="stockKind(line, false)"><span data-slot="store-image" data-state="placeholder" x-data="{ failed: false }"
    x-effect="void (line.image); failed = false" x-bind:data-state="!!(line.image) &amp;&amp; !failed ? 'image' : 'placeholder'"
     style="width: 88px; height: 88px"     x-bind:class="outClass(line)" class="relative inline-flex shrink-0 items-center justify-center overflow-hidden rounded-control border border-border bg-secondary text-muted-foreground">
    <img  style="display: none"  width="88" height="88" loading="lazy" decoding="async"
        x-show="!!(line.image) &amp;&amp; !failed" x-bind:src="line.image" x-bind:alt="line.name" x-on:error="failed = true" class="size-full object-cover">
    <span   x-show="!(line.image) || failed"
         x-bind:role="line.name ? 'img' : null" x-bind:aria-label="line.name || null"  class="inline-flex items-center justify-center">
        <svg aria-hidden="true" class="size-1/3 min-h-4 min-w-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <line x1="2" x2="22" y1="2" y2="22"/>
  <path d="M10.41 10.41a2 2 0 1 1-2.83-2.83"/>
  <line x1="13.5" x2="6" y1="13.5" y2="21"/>
  <line x1="18" x2="21" y1="12" y2="15"/>
  <path d="M3.59 3.59A1.99 1.99 0 0 0 3 5v14a2 2 0 0 0 2 2h14c.55 0 1.052-.22 1.41-.59"/>
  <path d="M21 15V5a2 2 0 0 0-2-2H9"/>
</svg>    </span>
</span>
                <div class="flex min-w-0 flex-1 flex-col gap-2">
            <div class="flex items-start justify-between gap-3">
                <div class="flex min-w-0 flex-col gap-0.5">
                    <p class="text-body font-medium text-foreground [overflow-wrap:anywhere]" x-text="line.name"></p>
                    <p x-show="line.variantLabel"  style="display: none"  class="text-caption text-muted-foreground" x-text="line.variantLabel"></p>
                                    </div>
                <div class="flex shrink-0 flex-col items-end gap-0.5 text-end">
                    <span data-slot="price" class="inline-flex flex-wrap items-baseline gap-x-1.5 text-foreground text-body-sm">
    <span><bdi class="tabular-nums font-medium" x-text="price(line.unitPrice * line.quantity)"></bdi></span>
            <s x-show="hasCompare(line)"  style="display: none"  class="text-caption text-muted-foreground decoration-muted-foreground/60">
            <span class="sr-only">was </span>
            <bdi class="tabular-nums" x-text="money(line.compareAt * line.quantity)"></bdi>
        </s>
    </span>
                    <span x-show="multi(line)"  style="display: none"  class="text-caption text-muted-foreground"><span class="text-muted-foreground" x-text="money(line.unitPrice)"></span> each</span>
                </div>
            </div>
            <p data-slot="store-cart-stock" role="status" x-show="stockKind(line, false)"  style="display: none"  x-bind:class="stockClass(line, false)"
                class="flex items-center gap-1.5 text-caption text-muted-foreground">
                <svg aria-hidden="true" class="size-3.5 shrink-0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"/>
  <path d="M12 9v4"/>
  <path d="M12 17h.01"/>
</svg>                <span x-text="stockText(line, false)"></span>
            </p>
            <div class="flex flex-wrap items-start gap-x-3 gap-y-2">
                                                            <div data-slot="store-quantity-stepper" x-data="nqStoreQuantity(1, null, 1, '', false)" x-id="['store-qty-hint']"
     x-effect="sync(line)" x-on:store-quantity-change="setQuantity(line.id, $event.detail.quantity)"     class="flex flex-col gap-1">
    <div role="group" x-bind:aria-label="groupLabel" aria-label="Quantity of " class="inline-flex w-fit items-center rounded-control border border-input bg-card">
        <button data-slot="button"
     type="button"                  disabled      data-disabled     aria-label="Decrease quantity of" x-bind:aria-label="decreaseLabel" x-bind:disabled="disabled || atMin" x-on:click="set(value - 1)" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 text-foreground hover:bg-nq-hover size-control-sm p-0">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M5 12h14"/>
</svg></button>
        <input role="spinbutton" type="text" inputmode="numeric" dir="ltr" aria-label="Quantity" aria-valuemin="1" aria-valuenow="1"
              value="1"
            x-bind:aria-valuemin="min" x-bind:aria-valuenow="value" x-bind:aria-valuemax="top" x-bind:aria-describedby="atMax ? $id('store-qty-hint') : null"
            x-bind:disabled="disabled" x-bind:value="display"
            x-on:input="onInput($event)" x-on:focus="$event.target.select()" x-on:blur="commit()" x-on:keydown="onKey($event)"
            class="h-control-sm w-10 border-0 bg-transparent text-center text-body tabular-nums text-foreground outline-none focus-visible:outline-2 focus-visible:outline-nq-focus pointer-coarse:text-[16px]">
        <button data-slot="button"
     type="button"                         aria-label="Increase quantity of" x-bind:aria-label="increaseLabel" x-bind:disabled="disabled || atMax" x-on:click="set(value + 1)" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 text-foreground hover:bg-nq-hover size-control-sm p-0">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M5 12h14"/>
  <path d="M12 5v14"/>
</svg></button>
    </div>
    <span x-show="atMax" style="display: none" x-bind:id="$id('store-qty-hint')" class="text-caption text-muted-foreground" x-text="hintText"></span>
</div>
                                                    <div class="ms-auto flex flex-wrap items-center gap-1">
                                            <button data-slot="button"
     type="button"                         x-on:click="saveForLater(line.id)" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 text-foreground hover:bg-nq-hover h-control-sm px-2.5">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z"/>
</svg>                            Save for later</button>
                                                                                            <button data-slot="button"
     type="button"                         x-bind:aria-label="removeLabel(line)" x-on:click="remove(line.id)" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 text-foreground hover:bg-nq-hover h-control-sm px-2.5">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M10 11v6"/>
  <path d="M14 11v6"/>
  <path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6"/>
  <path d="M3 6h18"/>
  <path d="M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"/>
</svg>                                Remove</button>
                                                            </div>
            </div>
        </div></div>
            <template x-teleport="body">
    <div data-slot="context-menu-content" x-bind="popup" x-init="popupEl = $el" x-nq-presence="open"
        class="fixed z-50 overflow-hidden rounded-floating border border-border bg-popover p-1.5 text-popover-foreground shadow-floating outline-none max-h-[var(--available-height)] overflow-y-auto transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0 min-w-44"><div data-slot="context-menu-item" role="menuitem" data-variant="default" x-bind="item"
        x-on:click="openProduct(line)" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] cursor-default select-none items-center gap-2.5 rounded-control px-2.5 text-body-sm text-foreground outline-none data-highlighted:bg-nq-selected data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:text-muted-foreground"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"/>
  <circle cx="12" cy="12" r="3"/>
</svg>                        View product</div>
                                                                            <div data-slot="context-menu-item" role="menuitem" data-variant="default" x-bind="item"
        x-on:click="saveForLater(line.id)" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] cursor-default select-none items-center gap-2.5 rounded-control px-2.5 text-body-sm text-foreground outline-none data-highlighted:bg-nq-selected data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:text-muted-foreground"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z"/>
</svg>                            Save for later</div>
                                                                        <div data-slot="context-menu-separator" role="separator" aria-orientation="horizontal" class="-mx-1.5 my-1.5 h-px bg-border"></div>
                                                        <div data-slot="context-menu-item" role="menuitem" data-variant="danger" x-bind="item"
        x-on:click="remove(line.id)" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] cursor-default select-none items-center gap-2.5 rounded-control px-2.5 text-body-sm outline-none data-highlighted:bg-nq-selected data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0 text-nq-danger-text [&_svg]:text-current"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M10 11v6"/>
  <path d="M14 11v6"/>
  <path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6"/>
  <path d="M3 6h18"/>
  <path d="M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"/>
</svg>                    Remove</div></div>
</template></div>
</template>
            </ul>
            <div data-slot="store-cart-empty" style="display: none;" x-show="showEmptyActive" class="flex flex-col items-center justify-center gap-3 border border-dashed border-border px-6 py-12 text-center rounded-card">
            <span data-slot="state-icon" class="inline-flex size-10 items-center justify-center rounded-control border border-border bg-card [&amp;_svg]:size-5 text-muted-foreground">
            <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M16 10a4 4 0 0 1-8 0"/>
  <path d="M3.103 6.034h17.794"/>
  <path d="M3.4 5.467a2 2 0 0 0-.4 1.2V20a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6.667a2 2 0 0 0-.4-1.2l-2-2.667A2 2 0 0 0 17 2H7a2 2 0 0 0-1.6.8z"/>
</svg>        </span>
        <div class="flex max-w-sm flex-col gap-1">
        <p class="text-label text-foreground">Your cart is empty</p>
                    <p class="text-body-sm text-muted-foreground">Add something you like and it will wait for you here.</p>
            </div>
            <div class="mt-1 flex flex-wrap items-center justify-center gap-2"><button data-slot="button"
     type="button"                         x-on:click="continueShopping()" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary text-primary-foreground hover:bg-[color-mix(in_oklab,var(--nq-action)_88%,var(--nq-fg))] h-control px-[var(--nq-control-pad)]">
        Start shopping</button></div>
    </div>
            <section x-show="hasSaved"  style="display: none"  class="flex flex-col gap-2" x-id="['store-saved']" x-bind:aria-labelledby="$id('store-saved')">
                <div class="flex flex-col gap-0.5">
                    <h2 x-bind:id="$id('store-saved')" class="text-h3 font-semibold text-foreground" x-text="savedTitle">Saved for later (0)</h2>
                    <p class="text-caption text-muted-foreground">These are not part of your order until you move them back.</p>
                </div>
                <ul role="list" class="flex flex-col divide-y divide-border border-y border-border">
                                        <template x-for="line in saved" :key="line.id"><div data-slot="context-menu" x-data="nqContextMenu(false)" x-modelable="open" class="contents"><div data-slot="store-cart-line" x-bind="trigger" x-ref="trigger" class="flex gap-3 py-4 sm:gap-4" role="listitem" data-saved="" x-bind:data-stock="stockKind(line, true)"><span data-slot="store-image" data-state="placeholder" x-data="{ failed: false }"
    x-effect="void (line.image); failed = false" x-bind:data-state="!!(line.image) &amp;&amp; !failed ? 'image' : 'placeholder'"
     style="width: 88px; height: 88px"     x-bind:class="outClass(line)" class="relative inline-flex shrink-0 items-center justify-center overflow-hidden rounded-control border border-border bg-secondary text-muted-foreground">
    <img  style="display: none"  width="88" height="88" loading="lazy" decoding="async"
        x-show="!!(line.image) &amp;&amp; !failed" x-bind:src="line.image" x-bind:alt="line.name" x-on:error="failed = true" class="size-full object-cover">
    <span   x-show="!(line.image) || failed"
         x-bind:role="line.name ? 'img' : null" x-bind:aria-label="line.name || null"  class="inline-flex items-center justify-center">
        <svg aria-hidden="true" class="size-1/3 min-h-4 min-w-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <line x1="2" x2="22" y1="2" y2="22"/>
  <path d="M10.41 10.41a2 2 0 1 1-2.83-2.83"/>
  <line x1="13.5" x2="6" y1="13.5" y2="21"/>
  <line x1="18" x2="21" y1="12" y2="15"/>
  <path d="M3.59 3.59A1.99 1.99 0 0 0 3 5v14a2 2 0 0 0 2 2h14c.55 0 1.052-.22 1.41-.59"/>
  <path d="M21 15V5a2 2 0 0 0-2-2H9"/>
</svg>    </span>
</span>
                <div class="flex min-w-0 flex-1 flex-col gap-2">
            <div class="flex items-start justify-between gap-3">
                <div class="flex min-w-0 flex-col gap-0.5">
                    <p class="text-body font-medium text-foreground [overflow-wrap:anywhere]" x-text="line.name"></p>
                    <p x-show="line.variantLabel"  style="display: none"  class="text-caption text-muted-foreground" x-text="line.variantLabel"></p>
                                    </div>
                <div class="flex shrink-0 flex-col items-end gap-0.5 text-end">
                    <span data-slot="price" class="inline-flex flex-wrap items-baseline gap-x-1.5 text-foreground text-body-sm">
    <span><bdi class="tabular-nums font-medium" x-text="price(line.unitPrice * line.quantity)"></bdi></span>
            <s x-show="hasCompare(line)"  style="display: none"  class="text-caption text-muted-foreground decoration-muted-foreground/60">
            <span class="sr-only">was </span>
            <bdi class="tabular-nums" x-text="money(line.compareAt * line.quantity)"></bdi>
        </s>
    </span>
                    <span x-show="multi(line)"  style="display: none"  class="text-caption text-muted-foreground"><span class="text-muted-foreground" x-text="money(line.unitPrice)"></span> each</span>
                </div>
            </div>
            <p data-slot="store-cart-stock" role="status" x-show="stockKind(line, true)"  style="display: none"  x-bind:class="stockClass(line, true)"
                class="flex items-center gap-1.5 text-caption text-muted-foreground">
                <svg aria-hidden="true" class="size-3.5 shrink-0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"/>
  <path d="M12 9v4"/>
  <path d="M12 17h.01"/>
</svg>                <span x-text="stockText(line, true)"></span>
            </p>
            <div class="flex flex-wrap items-start gap-x-3 gap-y-2">
                                <div class="ms-auto flex flex-wrap items-center gap-1">
                                            <button data-slot="button"
     type="button"                         x-bind:disabled="isOut(line)" x-on:click="moveToCart(line.id)" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border-border bg-card text-foreground hover:bg-nq-hover h-control-sm px-2.5">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M16 10a4 4 0 0 1-8 0"/>
  <path d="M3.103 6.034h17.794"/>
  <path d="M3.4 5.467a2 2 0 0 0-.4 1.2V20a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6.667a2 2 0 0 0-.4-1.2l-2-2.667A2 2 0 0 0 17 2H7a2 2 0 0 0-1.6.8z"/>
</svg>                            Move to cart</button>
                                                                                            <button data-slot="button"
     type="button"                         x-bind:aria-label="removeLabel(line)" x-on:click="remove(line.id)" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 text-foreground hover:bg-nq-hover h-control-sm px-2.5">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M10 11v6"/>
  <path d="M14 11v6"/>
  <path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6"/>
  <path d="M3 6h18"/>
  <path d="M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"/>
</svg>                                Remove</button>
                                                            </div>
            </div>
        </div></div>
            <template x-teleport="body">
    <div data-slot="context-menu-content" x-bind="popup" x-init="popupEl = $el" x-nq-presence="open"
        class="fixed z-50 overflow-hidden rounded-floating border border-border bg-popover p-1.5 text-popover-foreground shadow-floating outline-none max-h-[var(--available-height)] overflow-y-auto transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0 min-w-44"><div data-slot="context-menu-item" role="menuitem" data-variant="default" x-bind="item"
        x-on:click="openProduct(line)" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] cursor-default select-none items-center gap-2.5 rounded-control px-2.5 text-body-sm text-foreground outline-none data-highlighted:bg-nq-selected data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:text-muted-foreground"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"/>
  <circle cx="12" cy="12" r="3"/>
</svg>                        View product</div>
                                                                            <div data-slot="context-menu-item" role="menuitem" data-variant="default" x-bind="item"
        x-bind:aria-disabled="isOut(line)" x-on:click="isOut(line) ? null : moveToCart(line.id)" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] cursor-default select-none items-center gap-2.5 rounded-control px-2.5 text-body-sm text-foreground outline-none data-highlighted:bg-nq-selected data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:text-muted-foreground"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M16 10a4 4 0 0 1-8 0"/>
  <path d="M3.103 6.034h17.794"/>
  <path d="M3.4 5.467a2 2 0 0 0-.4 1.2V20a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6.667a2 2 0 0 0-.4-1.2l-2-2.667A2 2 0 0 0 17 2H7a2 2 0 0 0-1.6.8z"/>
</svg>                            Move to cart</div>
                                                                        <div data-slot="context-menu-separator" role="separator" aria-orientation="horizontal" class="-mx-1.5 my-1.5 h-px bg-border"></div>
                                                        <div data-slot="context-menu-item" role="menuitem" data-variant="danger" x-bind="item"
        x-on:click="remove(line.id)" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] cursor-default select-none items-center gap-2.5 rounded-control px-2.5 text-body-sm outline-none data-highlighted:bg-nq-selected data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0 text-nq-danger-text [&_svg]:text-current"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M10 11v6"/>
  <path d="M14 11v6"/>
  <path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6"/>
  <path d="M3 6h18"/>
  <path d="M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"/>
</svg>                    Remove</div></div>
</template></div>
</template>
                </ul>
            </section>
            <section data-slot="store-cross-sell" x-data="nqStoreCrossSell(JSON.parse('[{\u0022id\u0022:\u0022cap\u0022,\u0022name\u0022:\u0022Canvas cap\u0022,\u0022item\u0022:{\u0022productId\u0022:\u0022cap\u0022,\u0022variantId\u0022:\u0022cap-1\u0022,\u0022name\u0022:\u0022Canvas cap\u0022,\u0022unitPrice\u0022:1900,\u0022image\u0022:\u0022https:\\\/\\\/picsum.photos\\\/seed\\\/cap\\\/640\\\/480\u0022,\u0022maxQuantity\u0022:10}},{\u0022id\u0022:\u0022socks\u0022,\u0022name\u0022:\u0022Wool socks\u0022,\u0022item\u0022:null}]'))" x-id="['store-cross-sell']" x-bind:aria-labelledby="$id('store-cross-sell')"
        class="flex flex-col gap-3">
        <h2 x-bind:id="$id('store-cross-sell')" class="text-h3 font-semibold text-foreground">You might also like</h2>
        <div role="region" aria-roledescription="carousel" aria-label="You might also like" dir="ltr" lang="en" tabindex="0"
    data-slot="carousel" x-data="nqCarousel(JSON.parse('{\u0022loop\u0022:false,\u0022align\u0022:\u0022start\u0022,\u0022autoplay\u0022:0,\u0022rtl\u0022:false,\u0022labels\u0022:{\u0022previous\u0022:\u0022Previous slide\u0022,\u0022next\u0022:\u0022Next slide\u0022,\u0022slides\u0022:\u0022Choose slide\u0022,\u0022goTo\u0022:\u0022Go to slide {n}\u0022,\u0022slide\u0022:\u0022Slide {n} of {total}\u0022,\u0022pause\u0022:\u0022Pause autoplay\u0022,\u0022play\u0022:\u0022Start autoplay\u0022}}'))" x-bind="root"
    class="relative rounded-card outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus px-0">
    <div data-slot="carousel-viewport" class="overflow-x-auto overflow-y-hidden rounded-[inherit] snap-x snap-mandatory [scrollbar-width:none] [&::-webkit-scrollbar]:hidden">
    <div data-slot="carousel-content" class="flex touch-pan-y -ms-4">
        <div role="group" aria-roledescription="slide" data-slot="carousel-item" class="min-w-0 shrink-0 grow-0 snap-start -scroll-ms-4 basis-3/4 ps-4 sm:basis-1/2 lg:basis-1/3"><div data-slot="context-menu" x-data="nqContextMenu(false)" x-modelable="open" class="contents"><div data-slot="context-menu-trigger" x-bind="trigger" x-ref="trigger" class="@container"><article data-slot="product-card" data-layout="tile" class="group/product flex min-w-0 flex-col gap-3 w-full">
    <div data-slot="product-card-artwork" class="relative shrink-0 [&amp;&gt;*]:size-full aspect-[16/10] w-full">
        <span data-slot="store-image" data-state="image" x-data="{ failed: false }"
    x-effect="void (&#039;https:\/\/picsum.photos\/seed\/cap\/640\/480&#039;); failed = false" x-bind:data-state="!!(&#039;https:\/\/picsum.photos\/seed\/cap\/640\/480&#039;) &amp;&amp; !failed ? 'image' : 'placeholder'"
        class="size-full relative inline-flex shrink-0 items-center justify-center overflow-hidden border border-border bg-secondary text-muted-foreground aspect-[4/3] rounded-card">
    <img  src="https://picsum.photos/seed/cap/640/480" alt="Canvas cap"  width="320" height="320" loading="lazy" decoding="async"
        x-show="!!(&#039;https:\/\/picsum.photos\/seed\/cap\/640\/480&#039;) &amp;&amp; !failed" x-bind:src="&#039;https:\/\/picsum.photos\/seed\/cap\/640\/480&#039;" x-bind:alt="&#039;Canvas cap&#039;" x-on:error="failed = true" class="size-full object-cover">
    <span  style="display: none"   role="img" aria-label="Canvas cap"  x-show="!(&#039;https:\/\/picsum.photos\/seed\/cap\/640\/480&#039;) || failed"
         class="inline-flex items-center justify-center">
        <svg aria-hidden="true" class="size-1/3 min-h-4 min-w-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <line x1="2" x2="22" y1="2" y2="22"/>
  <path d="M10.41 10.41a2 2 0 1 1-2.83-2.83"/>
  <line x1="13.5" x2="6" y1="13.5" y2="21"/>
  <line x1="18" x2="21" y1="12" y2="15"/>
  <path d="M3.59 3.59A1.99 1.99 0 0 0 3 5v14a2 2 0 0 0 2 2h14c.55 0 1.052-.22 1.41-.59"/>
  <path d="M21 15V5a2 2 0 0 0-2-2H9"/>
</svg>    </span>
</span>
            </div>
    <div class="flex min-w-0 flex-1 flex-col gap-3">
        <div class="flex items-start gap-3">
            <div class="flex min-w-0 flex-1 flex-col gap-0.5">
                <div class="flex min-w-0 items-center gap-2">
                    <h3 class="truncate text-body font-medium text-foreground">Canvas cap</h3>
                                    </div>
                                    <p class="truncate text-caption text-muted-foreground">Accessories</p>
                            </div>
                            <div class="shrink-0"><button data-slot="button"
     type="button"                         aria-label="Add Canvas cap to cart" x-on:click="add(0)" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border-border bg-card text-foreground hover:bg-nq-hover h-control-sm px-2.5">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M5 12h14"/>
  <path d="M12 5v14"/>
</svg>                                                Add</button></div>
                    </div>
                            <div class="mt-auto flex min-w-0 items-center justify-between gap-2">
                <div class="min-w-0"></div>
                <span data-slot="price" class="inline-flex flex-wrap items-baseline gap-x-1.5 text-foreground text-body-sm">
        <span>
            <bdi class="tabular-nums font-medium">$19</bdi>
                    </span>
            </span>
            </div>
            </div>
</article></div>
                            <template x-teleport="body">
    <div data-slot="context-menu-content" x-bind="popup" x-init="popupEl = $el" x-nq-presence="open"
        class="fixed z-50 overflow-hidden rounded-floating border border-border bg-popover p-1.5 text-popover-foreground shadow-floating outline-none max-h-[var(--available-height)] overflow-y-auto transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0 min-w-44"><div data-slot="context-menu-item" role="menuitem" data-variant="default" x-bind="item"
        x-on:click="openProduct(0)" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] cursor-default select-none items-center gap-2.5 rounded-control px-2.5 text-body-sm text-foreground outline-none data-highlighted:bg-nq-selected data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:text-muted-foreground"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"/>
  <circle cx="12" cy="12" r="3"/>
</svg>                                    View product</div>
                                                                    <div data-slot="context-menu-item" role="menuitem" data-variant="default" x-bind="item"
        x-on:click="add(0)" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] cursor-default select-none items-center gap-2.5 rounded-control px-2.5 text-body-sm text-foreground outline-none data-highlighted:bg-nq-selected data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:text-muted-foreground"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M16 10a4 4 0 0 1-8 0"/>
  <path d="M3.103 6.034h17.794"/>
  <path d="M3.4 5.467a2 2 0 0 0-.4 1.2V20a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6.667a2 2 0 0 0-.4-1.2l-2-2.667A2 2 0 0 0 17 2H7a2 2 0 0 0-1.6.8z"/>
</svg>                                        Add Canvas cap to cart</div></div>
</template></div></div>
                                                        <div role="group" aria-roledescription="slide" data-slot="carousel-item" class="min-w-0 shrink-0 grow-0 snap-start -scroll-ms-4 basis-3/4 ps-4 sm:basis-1/2 lg:basis-1/3"><div data-slot="context-menu" x-data="nqContextMenu(false)" x-modelable="open" class="contents"><div data-slot="context-menu-trigger" x-bind="trigger" x-ref="trigger" class="@container"><article data-slot="product-card" data-layout="tile" class="group/product flex min-w-0 flex-col gap-3 w-full">
    <div data-slot="product-card-artwork" class="relative shrink-0 [&amp;&gt;*]:size-full aspect-[16/10] w-full">
        <span data-slot="store-image" data-state="image" x-data="{ failed: false }"
    x-effect="void (&#039;https:\/\/picsum.photos\/seed\/socks\/640\/480&#039;); failed = false" x-bind:data-state="!!(&#039;https:\/\/picsum.photos\/seed\/socks\/640\/480&#039;) &amp;&amp; !failed ? 'image' : 'placeholder'"
        class="size-full relative inline-flex shrink-0 items-center justify-center overflow-hidden border border-border bg-secondary text-muted-foreground aspect-[4/3] rounded-card">
    <img  src="https://picsum.photos/seed/socks/640/480" alt="Wool socks"  width="320" height="320" loading="lazy" decoding="async"
        x-show="!!(&#039;https:\/\/picsum.photos\/seed\/socks\/640\/480&#039;) &amp;&amp; !failed" x-bind:src="&#039;https:\/\/picsum.photos\/seed\/socks\/640\/480&#039;" x-bind:alt="&#039;Wool socks&#039;" x-on:error="failed = true" class="size-full object-cover">
    <span  style="display: none"   role="img" aria-label="Wool socks"  x-show="!(&#039;https:\/\/picsum.photos\/seed\/socks\/640\/480&#039;) || failed"
         class="inline-flex items-center justify-center">
        <svg aria-hidden="true" class="size-1/3 min-h-4 min-w-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <line x1="2" x2="22" y1="2" y2="22"/>
  <path d="M10.41 10.41a2 2 0 1 1-2.83-2.83"/>
  <line x1="13.5" x2="6" y1="13.5" y2="21"/>
  <line x1="18" x2="21" y1="12" y2="15"/>
  <path d="M3.59 3.59A1.99 1.99 0 0 0 3 5v14a2 2 0 0 0 2 2h14c.55 0 1.052-.22 1.41-.59"/>
  <path d="M21 15V5a2 2 0 0 0-2-2H9"/>
</svg>    </span>
</span>
            </div>
    <div class="flex min-w-0 flex-1 flex-col gap-3">
        <div class="flex items-start gap-3">
            <div class="flex min-w-0 flex-1 flex-col gap-0.5">
                <div class="flex min-w-0 items-center gap-2">
                    <h3 class="truncate text-body font-medium text-foreground">Wool socks</h3>
                                    </div>
                                    <p class="truncate text-caption text-muted-foreground">Accessories</p>
                            </div>
                    </div>
                            <div class="mt-auto flex min-w-0 items-center justify-between gap-2">
                <div class="min-w-0"></div>
                <span data-slot="price" class="inline-flex flex-wrap items-baseline gap-x-1.5 text-foreground text-body-sm">
        <span>
            <bdi class="tabular-nums font-medium">$12</bdi>
                    </span>
            </span>
            </div>
            </div>
</article></div>
                            <template x-teleport="body">
    <div data-slot="context-menu-content" x-bind="popup" x-init="popupEl = $el" x-nq-presence="open"
        class="fixed z-50 overflow-hidden rounded-floating border border-border bg-popover p-1.5 text-popover-foreground shadow-floating outline-none max-h-[var(--available-height)] overflow-y-auto transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0 min-w-44"><div data-slot="context-menu-item" role="menuitem" data-variant="default" x-bind="item"
        x-on:click="openProduct(1)" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] cursor-default select-none items-center gap-2.5 rounded-control px-2.5 text-body-sm text-foreground outline-none data-highlighted:bg-nq-selected data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:text-muted-foreground"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"/>
  <circle cx="12" cy="12" r="3"/>
</svg>                                    View product</div></div>
</template></div></div>
    </div>
</div>
            <button data-slot="carousel-previous"
     type="button"                  disabled      data-disabled     x-bind="previous" aria-label="Previous slide" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap border font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border-border text-foreground hover:bg-nq-hover size-control p-0 absolute top-1/2 z-10 -translate-y-1/2 rounded-full bg-card/90 shadow-floating backdrop-blur-sm data-disabled:opacity-0 start-3">
        <svg data-slot="icon" aria-hidden="true" class="rtl:-scale-x-100" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="m15 18-6-6 6-6"/>
</svg></button>
            <button data-slot="carousel-next"
     type="button"                         x-bind="next" aria-label="Next slide" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap border font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border-border text-foreground hover:bg-nq-hover size-control p-0 absolute top-1/2 z-10 -translate-y-1/2 rounded-full bg-card/90 shadow-floating backdrop-blur-sm data-disabled:opacity-0 end-3">
        <svg data-slot="icon" aria-hidden="true" class="rtl:-scale-x-100" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="m9 18 6-6-6-6"/>
</svg></button>
    <div class="sr-only" aria-atomic="true" x-bind="live"></div>
</div>
    </section>
        </div>
        <aside aria-label="Order summary" x-show="hasActive"  class="flex min-w-0 flex-col gap-4 lg:sticky lg:top-4">
            <section data-slot="store-cart-summary" x-id="['store-cart-summary']" x-bind:aria-labelledby="$id('store-cart-summary')"
    class="flex flex-col gap-4 rounded-card border border-border bg-card p-4">
    <h2 x-bind:id="$id('store-cart-summary')" class="text-h3 font-semibold text-foreground">Order summary</h2>
    <dl class="flex flex-col gap-2">
        <div class="flex items-baseline justify-between gap-3 text-body-sm">
            <dt class="text-muted-foreground" x-text="countText">3 items</dt>
            <dd class="text-foreground" x-text="money(totals.subtotal)">$82</dd>
        </div>
        <div x-show="hasDiscount"  style="display: none"  class="flex items-baseline justify-between gap-3 text-body-sm">
            <dt class="text-muted-foreground">Promo discount</dt>
            <dd class="text-foreground">
                <span class="text-nq-success-text"><bdi dir="ltr">&minus;</bdi><span x-text="money(totals.discount)">$0</span></span>
            </dd>
        </div>
        <div class="flex items-baseline justify-between gap-3 text-body-sm">
            <dt class="text-muted-foreground">Shipping</dt>
            <dd class="text-foreground">
                <span x-show="shippingFree" style="display: none" class="text-nq-success-text">Free</span>
                <span x-show="shippingPaid" style="display: none" x-text="money(totals.shipping)"></span>
                <span x-show="noShipping" class="text-muted-foreground">Calculated at checkout</span>
            </dd>
        </div>
        <div x-show="hasTax"  style="display: none"  class="flex items-baseline justify-between gap-3 text-body-sm">
            <dt class="text-muted-foreground">Tax</dt>
            <dd class="text-foreground" x-text="money(totals.tax)">$0</dd>
        </div>
    </dl>
    <div class="flex items-baseline justify-between gap-3 border-t border-border pt-3">
        <span class="text-label text-foreground">Total</span>
        <span data-slot="price" class="inline-flex flex-wrap items-baseline gap-x-1.5 text-foreground text-body-sm">
    <span><bdi class="tabular-nums text-h2 font-semibold tracking-tight" x-text="price(totals.total)">$82</bdi></span>
    </span>
    </div>
    <div x-show="hasSavings"  class="w-fit"><span data-slot="badge"     class="inline-flex h-5 shrink-0 items-center gap-1 whitespace-nowrap rounded-[4px] border px-1.5 text-caption font-medium [&_svg]:size-3 border-nq-success/40 bg-nq-success-soft text-nq-success-text"><span x-text="savingText">You are saving $20</span></span>
</div>
            <button data-slot="button"
     type="button"                         x-bind:disabled="checkoutDisabled" x-on:click="checkout()" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary text-primary-foreground hover:bg-[color-mix(in_oklab,var(--nq-action)_88%,var(--nq-fg))] h-[calc(var(--nq-control)+8px)] px-5 text-body">
        Checkout</button>
</section>
                                        <section data-slot="store-shipping-estimator" x-id="['store-estimator']" x-bind:aria-labelledby="$id('store-estimator')"
    class="flex flex-col gap-3 rounded-card border border-border bg-card p-4">
    <h2 x-bind:id="$id('store-estimator')" class="text-h3 font-semibold text-foreground">Estimate shipping</h2>
    <form class="flex items-end gap-2" x-on:submit.prevent="estimate()">
        <div data-slot="field" x-data="nqField(false)" x-modelable="invalid" x-id="['nq-field']"
         data-valid     class="flex flex-col gap-1.5 min-w-0 flex-1">
    <label data-slot="field-label"  class="text-label text-foreground data-disabled:opacity-50">City</label>
            <input data-slot="input" type="text"
                    x-model="city" list="store-cities" placeholder="Type your city" autocomplete="address-level2" class="w-full min-w-0 rounded-control border border-input bg-card px-3 text-body text-foreground min-h-[var(--nq-touch-min,0px)] transition-colors duration-150 ease-nq outline-none placeholder:text-muted-foreground focus-visible:border-nq-focus focus-visible:outline-1 focus-visible:outline-nq-focus data-invalid:border-nq-danger aria-invalid:border-nq-danger disabled:cursor-not-allowed disabled:opacity-50 pointer-coarse:text-[16px] h-control">
</div>
        <datalist id="store-cities">
                                                <option value="Cairo"></option>
                                    <option value="Giza"></option>
                                    </datalist>
        <button data-slot="button"
     type="submit"                         class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border-border bg-card text-foreground hover:bg-nq-hover h-control px-[var(--nq-control-pad)]">
        Estimate</button>
    </form>
    <div aria-live="polite" class="flex flex-col gap-3">
        <p x-show="noZone" style="display: none" class="flex items-center gap-2 text-body-sm text-nq-warning-text">
            <svg aria-hidden="true" class="size-4 shrink-0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="10"/>
  <line x1="12" x2="12" y1="8" y2="12"/>
  <line x1="12" x2="12.01" y1="16" y2="16"/>
</svg>            <span x-text="noZoneText"></span>
        </p>
        <p x-show="zoneFound" style="display: none" class="text-caption text-muted-foreground" x-text="zoneText"></p>
                    <div role="radiogroup" data-slot="radio-group" aria-orientation="vertical" x-data="nqRadioGroup(null)" x-modelable="value" x-bind="root"
                x-show="isZone(0)" style="display: none" x-model="pickedKey" aria-label="Shipping estimate" class="flex flex-col gap-2">
    <button type="button" data-slot="radio-card" x-bind="radio('0:0')" aria-checked="false" tabindex="-1" data-unchecked
                        class="group/card relative flex w-full cursor-pointer items-start gap-3 rounded-card border border-border bg-card p-4 text-start outline-none transition-colors duration-150 ease-nq hover:border-nq-line-strong data-checked:border-primary data-checked:bg-nq-selected focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus data-disabled:cursor-not-allowed data-disabled:opacity-50">
                        <span data-slot="radio-card-mark" aria-hidden="true" class="mt-0.5 inline-flex size-4 shrink-0 items-center justify-center rounded-full border border-nq-line-strong bg-card group-data-checked/card:border-primary group-data-checked/card:bg-primary">
                            <span class="block size-1.5 rounded-full bg-primary-foreground" x-show="isChecked('0:0')" style="display: none"></span>
                        </span>
                        <span class="flex min-w-0 flex-1 flex-col gap-0.5">
                            <span data-slot="radio-card-title" class="text-label text-foreground">Standard</span>
                            <span data-slot="radio-card-description" class="text-caption text-muted-foreground">
                                <span class="flex flex-col gap-0.5">
                                    <span x-show="optionEta(0, 0)" style="display: none" x-text="optionEta(0, 0)"></span>
                                    <span x-show="optionNote(0, 0)" style="display: none" x-text="optionNote(0, 0)"></span>
                                </span>
                            </span>
                        </span>
                        <span data-slot="radio-card-meta" class="shrink-0 text-label text-foreground">
                            <span x-show="optionFree(0, 0)" style="display: none" class="text-label text-nq-success-text">Free</span>
                            <span x-show="!optionFree(0, 0)" class="text-label" x-text="optionCost(0, 0)"></span>
                        </span>
                    </button>
                                    <button type="button" data-slot="radio-card" x-bind="radio('0:1')" aria-checked="false" tabindex="-1" data-unchecked
                        class="group/card relative flex w-full cursor-pointer items-start gap-3 rounded-card border border-border bg-card p-4 text-start outline-none transition-colors duration-150 ease-nq hover:border-nq-line-strong data-checked:border-primary data-checked:bg-nq-selected focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus data-disabled:cursor-not-allowed data-disabled:opacity-50">
                        <span data-slot="radio-card-mark" aria-hidden="true" class="mt-0.5 inline-flex size-4 shrink-0 items-center justify-center rounded-full border border-nq-line-strong bg-card group-data-checked/card:border-primary group-data-checked/card:bg-primary">
                            <span class="block size-1.5 rounded-full bg-primary-foreground" x-show="isChecked('0:1')" style="display: none"></span>
                        </span>
                        <span class="flex min-w-0 flex-1 flex-col gap-0.5">
                            <span data-slot="radio-card-title" class="text-label text-foreground">Express</span>
                            <span data-slot="radio-card-description" class="text-caption text-muted-foreground">
                                <span class="flex flex-col gap-0.5">
                                    <span x-show="optionEta(0, 1)" style="display: none" x-text="optionEta(0, 1)"></span>
                                    <span x-show="optionNote(0, 1)" style="display: none" x-text="optionNote(0, 1)"></span>
                                </span>
                            </span>
                        </span>
                        <span data-slot="radio-card-meta" class="shrink-0 text-label text-foreground">
                            <span x-show="optionFree(0, 1)" style="display: none" class="text-label text-nq-success-text">Free</span>
                            <span x-show="!optionFree(0, 1)" class="text-label" x-text="optionCost(0, 1)"></span>
                        </span>
                    </button>
    </div>
            </div>
</section>
                    </aside>
    </div>
</div>
</div>
```
