/* =====================================================================
 * EXIM Marketplace — Responsive / Mobile & Tablet optimizations
 * ---------------------------------------------------------------------
 * ===================================================================== */
.woocommerce ul.products,
.woocommerce-page ul.products,
ul.products {
    min-width: 0;
}
.woocommerce ul.products li.product,
.woocommerce-page ul.products li.product,
ul.products li.product {
    min-width: 0 !important;      /* allow grid tracks to shrink evenly */
}
.woocommerce ul.products li.product .woocommerce-loop-product__title,
.woocommerce ul.products li.product h2,
ul.products li.product .woocommerce-loop-product__title,
.products .product h2,
.product-short-description {
    overflow-wrap: anywhere;
    word-break: break-word;
}

/* Respect the theme's chosen column count but with shrinkable tracks so
   desktop columns are even too. */
ul.products.columns-2 { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
ul.products.columns-3 { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
ul.products.columns-4 { grid-template-columns: repeat(4, minmax(0, 1fr)) !important; }
ul.products.columns-5 { grid-template-columns: repeat(5, minmax(0, 1fr)) !important; }
ul.products.columns-6 { grid-template-columns: repeat(6, minmax(0, 1fr)) !important; }

/* Tablet: 3 clean columns (source-ordered AFTER the columns-N rules so it
   wins at equal specificity). */

@media (max-width: 767px) {
    ul.products:not(.slick-slider) {
        display: grid !important;
        grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
        gap: 15px !important;
    }
    .woocommerce-products-header .page-title{
        font-size: 30px;
    }
    ul.products .product .woocommerce-loop-product__title{
        font-size: 16px !important;
    }
    
}
.woocommerce nav.woocommerce-pagination ul{
    display: flex !important;
    gap: 5px 0;
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
}

/* =====================================================================
 * 2. SHOP / CATEGORY FILTER — full-screen LEFT drawer on tablet & phones
 * ---------------------------------------------------------------------
 * Desktop keeps the filter as a .col-md-3 sidebar beside the products.
 * On tablet AND phone (<=991px) it becomes a FULL-SCREEN slide-in drawer
 * from the LEFT: a "Filters" button (injected by js/responsive.js) opens
 * it; products use the full width underneath. Close by the X or Esc.
 *
 * The sidebar is `display:none` on load and only shown once JS arms the
 * drawer (adds body.exim-filter-ready) — this avoids a flash of the tall
 * filter rendering in normal flow before the script hides it. The filter
 * needs JS to function (AJAX), so hiding it when JS is absent is fine.
 * ===================================================================== */
@media (max-width: 991px) {
    .products-sidebar .mpd-filter-container{
        border: none;
    }
    /* Products span the full row (the sidebar is taken out of flow). */
    .products-section .products-main,
    .products-main.col-md-9 {
        flex: 0 0 100%;
        max-width: 100%;
        width: 100%;
    }
    /* Hidden on load — no in-flow flash before the drawer is armed. */
    .products-section .products-sidebar,
    .products-sidebar.col-md-3 {
        display: none;
    }

    /* --- The full-screen drawer (only once JS arms it) --- */
    body.exim-filter-ready .products-section .products-sidebar,
    body.exim-filter-ready .products-sidebar.col-md-3 {
        display: block;
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        width: 100%;
        max-width: 100%;
        margin: 0 !important;
        padding: 0;
        z-index: 100000;
        background: #fff;
        transform: translateX(-100%);
        transition: transform .28s ease;
        overflow-y: auto;
        -webkit-overflow-scrolling: touch;
        overscroll-behavior: contain;
    }
    body.exim-filter-ready.exim-filter-open .products-sidebar {
        transform: translateX(0);
    }
    body.exim-filter-ready .mpd-filter-container {
        margin: 0 !important;
        width: 100% !important;
        max-width: 100% !important;   /* theme caps this at 300px — fill the drawer */
    }
    body.exim-filter-ready .mpd-filter-body {
        width: 100% !important;
        max-width: 100% !important;
    }
    /* Drawer title bar sticks to the top while the body scrolls. */
    body.exim-filter-ready .products-sidebar .mpd-filter-header {
        position: sticky;
        top: 0;
        z-index: 2;
    }

    /* --- Trigger button (injected into .products-main) --- */
    .exim-filter-trigger {
        display: inline-flex;
        align-items: center;
        gap: 8px;
        margin: 0 0 16px;
        padding: 10px 18px;
        min-height: 44px;
        border: 0;
        border-radius: 8px;
        background: #005daa;
        color: #fff;
        font-size: 15px;
        font-weight: 600;
        line-height: 1;
        cursor: pointer;
    }
    .exim-filter-trigger svg { width: 18px; height: 18px; fill: currentColor; }
    .exim-filter-trigger .exim-filter-count {
        background: #78D648;
        color: #063;
        border-radius: 20px;
        padding: 1px 8px;
        font-size: 12px;
    }

    /* --- Close (X) button injected into the drawer header --- */
    .exim-filter-close {
        position: absolute;
        top: 50%;
        right: 12px;
        transform: translateY(-50%);
        width: 34px;
        height: 34px;
        display: inline-flex;
        align-items: center;
        justify-content: center;
        border: 0;
        border-radius: 50%;
        background: rgba(255, 255, 255, .18);
        color: inherit;
        font-size: 22px;
        line-height: 1;
        cursor: pointer;
        color: #fff;
    }

    /* --- Backdrop --- */
    .exim-filter-backdrop {
        position: fixed;
        inset: 0;
        z-index: 99999;
        background: rgba(0, 0, 0, .5);
        opacity: 0;
        visibility: hidden;
        transition: opacity .28s ease, visibility .28s ease;
    }
    body.exim-filter-open .exim-filter-backdrop {
        opacity: 1;
        visibility: visible;
    }
    /* Lock the page behind the open drawer. */
    body.exim-filter-open {
        overflow: hidden;
    }
}

/* Desktop: hide the mobile-only trigger/close/backdrop if they linger. */
@media (min-width: 992px) {
    .exim-filter-trigger,
    .exim-filter-close,
    .exim-filter-backdrop {
        display: none !important;
    }
}


/* =====================================================================
 * 3. CART — totals rows & item name
 * ---------------------------------------------------------------------
 * The Cart Totals table (.cart_totals table.shop_table.shop_table_responsive)
 * collapses on mobile so the <th> label and <td> value touch with no
 * gap — rendering "SubtotalUS$43.50" / "GSTUS$3.92" / "TotalUS$47.42".
 * Lay each row out as a flex row: label left, value right.
 * Totals fix runs to <=991 (tablet hit the same run-together bug); the
 * item-card rebuild below is phone-only (<=767) — the tablet cart row has
 * room to stay a horizontal line.
 * ===================================================================== */
@media (max-width: 991px) {
    /* Force the de-table layout with !important — the theme's cart CSS sets
       tr{display:flex}, which would otherwise turn each td into a shrinking
       flex item instead of a full-width row. */
    .cart_totals table.shop_table,
    .cart_totals table.shop_table tbody {
        display: block !important;
        width: 100% !important;
    }
    .cart_totals table.shop_table tr {
        display: block !important;
        width: 100% !important;
        padding: 10px 0;
        border-bottom: 1px solid #eef0f3;
    }
    .cart_totals table.shop_table tr:last-child {
        border-bottom: 0;
    }
    /* WooCommerce's .shop_table_responsive hides <th> and prints the label
       from td[data-title] via ::before — so the label AND value both live in
       the <td>. Flex the td: label (::before) left, value right. */
    .cart_totals table.shop_table th {
        display: none !important;
    }
    .cart_totals table.shop_table td {
        display: flex !important;
        justify-content: space-between;
        align-items: baseline;
        gap: 12px;
        width: 100% !important;
        padding: 0 !important;
        border: 0 !important;
        text-align: right;
    }
    .cart_totals table.shop_table td::before {
        content: attr(data-title);
        font-weight: 600;
        text-align: left;
        white-space: nowrap;
        color: #333;
    }
    /* The shipping row can hold a whole calculator form — stack it instead
       of squashing the form into a flex value. */
    .cart_totals table.shop_table tr.shipping td {
        display: block;
        text-align: left;
    }
    .cart_totals table.shop_table tr.shipping td::before {
        display: block;
        margin-bottom: 6px;
    }
    .cart_totals .shipping-calculator-form .form-row {
        width: 100%;
    }

    .e-shop-table.e-cart-section,
    .e-cart-totals.e-cart-section {
        padding: 0 !important;
    }
}

/* ===== Cart item card — phones only (<=767) ===== */
@media (max-width: 767px) {
    /* ---------------------------------------------------------------
     * Cart item card. The theme forces `tr.cart_item{display:flex}`, so
     * all 6 table columns cram into ~375px and the part-number name cell
     * collapses to ~31px — rendering one letter per line (U/S/B/-/B...).
     * Rebuild each row as a compact 2-column grid card instead:
     *
     *     [ img ]  Product name              (×)
     *     [ img ]  S$1.1136 / unit
     *     [ qty ]                    SUBTOTAL
     *                                S$55.68
     * ------------------------------------------------------------- */
    .woocommerce-cart-form table.cart tr.cart_item {
        display: grid !important;
        grid-template-columns: 76px 1fr;
        grid-template-areas:
            "thumb name"
            "thumb price"
            "qty   subtotal";
        column-gap: 14px;
        row-gap: 6px;
        align-items: center;
        position: relative;
        padding: 16px 4px;
        border-bottom: 1px solid #eef0f3;
    }
    .woocommerce-cart-form table.cart tr.cart_item:last-of-type {
        border-bottom: 0;
    }
    .woocommerce-cart-form table.cart tr.cart_item > td {
        display: block;
        width: auto !important;
        max-width: none !important;
        padding: 0 !important;
        margin: 0 !important;
        border: 0 !important;
        text-align: left !important;
    }
    /* Drop the shop_table_responsive "data-title" pseudo-labels (except the
       subtotal cell, which we restyle into a label just below). */
    .woocommerce-cart-form table.cart tr.cart_item > td:not(.product-subtotal)::before {
        display: none !important;
    }
    .cart_item .product-thumbnail {
        grid-area: thumb;
        align-self: start;
    }
    .cart_item .product-thumbnail img {
        width: 76px !important;
        height: 76px !important;
        max-width: none;
        object-fit: contain;
        border: 1px solid #eef0f3;
        border-radius: 8px;
    }
    .cart_item .product-name {
        grid-area: name;
        align-self: end;
    }
    .cart_item .product-name a {
        font-weight: 600;
        font-size: 15px;
        line-height: 1.3;
        color: #101828;
        overflow-wrap: anywhere;
    }
    .cart_item .product-price {
        grid-area: price;
        align-self: start;
        color: #667085;
        font-size: 14px;
    }
    .cart_item .product-price::after {
        content: " / unit";
        color: #98a2b3;
        font-size: 12px;
    }
    .cart_item .product-quantity {
        grid-area: qty;
    }
    .cart_item .product-quantity input.qty {
        width: 76px !important;
        min-height: 44px;
    }
    .cart_item .product-subtotal {
        grid-area: subtotal;
        justify-self: end;
        text-align: right !important;
        font-weight: 700;
        font-size: 16px;
        color: #101828;
    }
    .woocommerce-cart-form table.cart tr.cart_item td.product-subtotal::before {
        content: "Subtotal";
        display: block !important;
        font-weight: 400;
        font-size: 10px;
        letter-spacing: .05em;
        text-transform: uppercase;
        color: #98a2b3;
    }
    .cart_item .product-remove {
        position: absolute;
        top: 10px;
        right: 2px;
        width: auto !important;
    }
    .cart_item .product-remove .remove {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        width: 26px;
        height: 26px;
        font-size: 20px;
        line-height: 1;
        color: #b42318 !important;
        border-radius: 50%;
    }
}


/* =====================================================================
 * 4. TAP TARGETS & iOS ZOOM — forms, quantity, buttons
 * ---------------------------------------------------------------------
 * Cart qty inputs were 28px tall and 8 checkout fields under 40px — below
 * the ~44px comfortable touch target. Sub-16px font also makes iOS Safari
 * auto-zoom on focus. Bump both on phones.
 * ===================================================================== */
@media (max-width: 767px) {
    .woocommerce form .form-row input.input-text,
    .woocommerce form .form-row textarea,
    .woocommerce-checkout input[type="text"],
    .woocommerce-checkout input[type="email"],
    .woocommerce-checkout input[type="tel"],
    .woocommerce-checkout input[type="password"],
    .woocommerce-checkout input[type="number"],
    .woocommerce-checkout textarea,
    .woocommerce-checkout select,
    .woocommerce-account input.input-text,
    .select2-container .select2-selection--single {
        font-size: 16px !important;      /* prevents iOS zoom-on-focus */
        min-height: 44px !important;
        line-height: 1.3;
    }
    .select2-container .select2-selection--single .select2-selection__rendered {
        line-height: 42px !important;
    }
    .select2-container .select2-selection--single .select2-selection__arrow {
        height: 42px !important;
    }
    /* Quantity steppers on cart / product */
    .woocommerce .quantity input.qty,
    .woocommerce div.product form.cart .quantity input.qty {
        font-size: 16px !important;
        min-height: 44px !important;
        width: 72px !important;
    }
    
}


/* =====================================================================
 * 5. CHECKOUT — kill phantom horizontal overflow
 * ---------------------------------------------------------------------
 * 56px of horizontal scroll came from two INVISIBLE helper elements, not
 * from visible content:
 *   a) select2's hidden <select class="select2-hidden-accessible"> was
 *      355px wide (theme lost the standard width:1px clamp).
 *   b) Stripe.js injects hidden fraud/metrics iframes ~431px wide.
 * Clamp both to 1px. These render nothing, so clamping is safe.
 * ===================================================================== */
/* High specificity so it beats WooCommerce's `.form-row select{width:100%}`
   (the original <select> keeps its full width, clipped invisible, and drags
   the page ~56px wider on phones). */
.select2-hidden-accessible,
select.select2-hidden-accessible,
.woocommerce form .form-row select.select2-hidden-accessible,
.woocommerce-checkout select.select2-hidden-accessible,
.woocommerce-page form .form-row select.select2-hidden-accessible {
    position: absolute !important;
    width: 1px !important;
    height: 1px !important;
    min-width: 0 !important;
    max-width: 1px !important;
    margin: -1px !important;
    padding: 0 !important;
    border: 0 !important;
    overflow: hidden !important;
    clip: rect(0 0 0 0) !important;
    clip-path: inset(50%) !important;
    white-space: nowrap !important;
}
iframe[name^="__privateStripeMetrics"],
iframe[src*="js.stripe.com/v3/m-outer"],
iframe[src*="js.stripe.com/v3/controller"] {
    width: 1px !important;
    min-width: 1px !important;
    max-width: 1px !important;
    height: 1px !important;
    min-height: 1px !important;
}

/* ---------------------------------------------------------------------
 * 5b. CHECKOUT — trim nested block padding to reclaim display space
 * ---------------------------------------------------------------------
 * Elementor + WooCommerce nest padding several levels deep. On a 375px
 * phone the billing fields started ~76px in from the left:
 *   container 10 + #customer_details 16 + .col-1 card 30 + billing-fields 20.
 * Collapse the redundant wrapper paddings so the fields get the width
 * back; the visible .col card keeps a slim 14px gutter for looks. Only
 * REDUCES padding (never adds). <=991 so tablet gains room too; desktop
 * keeps the roomier spacing.
 * ------------------------------------------------------------------- */
@media (max-width: 991px) {
    /* NOTE: css/cart-checkout.css sets `.col2-set / billing-fields{padding:16-20px
       !important}` and loads AFTER this file, so at equal specificity it would
       win. The `body.woocommerce-checkout` + `#customer_details` (ID) prefixes
       raise specificity above those class-only rules so these win regardless. */

    /* TRANSPARENT WRAPPER layers (no bg/border) — drop side padding so the
       card inside aligns flush with the billing card. NOTE the structure is
       asymmetric: .col-1 IS the billing card, but .col-2 is only a wrapper
       whose CHILD (.woocommerce-additional-fields, the order-notes block) is
       the actual card — so .col-2 is zeroed here, its card gutters below. */
    body.woocommerce-checkout #customer_details.col2-set,
    body.woocommerce-checkout #customer_details .col-2,
    body.woocommerce-checkout #customer_details .woocommerce-billing-fields,
    body.woocommerce-checkout #customer_details .woocommerce-account-fields,
    body.woocommerce-checkout .e-checkout__order_review {
        padding-left: 0 !important;
        padding-right: 0 !important;
    }
    /* ...and the billing wrapper's doubled-up top padding. */
    body.woocommerce-checkout #customer_details .woocommerce-billing-fields {
        padding-top: 0 !important;
    }
    /* Visible CARDS (white bg + border) keep a slim 14px side gutter — the
       billing card, the order-notes card, and the order review. */
    body.woocommerce-checkout #customer_details .col-1,
    body.woocommerce-checkout #customer_details .woocommerce-additional-fields,
    body.woocommerce-checkout #order_review,
    body.woocommerce-checkout .woocommerce-checkout-review-order {
        padding-left: 14px !important;
        padding-right: 14px !important;
    }
    /* The order-notes card had lop-sided vertical padding (0 top / 24 bottom)
       — even it out so the label/textarea sit properly inside the card. */
    body.woocommerce-checkout #customer_details .woocommerce-additional-fields {
        padding-top: 16px !important;
        padding-bottom: 16px !important;
    }
}

/* ---------------------------------------------------------------------
 * 5c. CHECKOUT step 2/3 (shipping / payment) — stop content overflow
 * ---------------------------------------------------------------------
 * On step 3 the payment method's card-brand logos are fixed-width images
 * (166/186/200px), giving the payment block a min-content ~408px. The
 * Elementor checkout grid track is content-sized, so it GREW to 408 and the
 * whole left column overflowed the 375 viewport (clipped by the §7 safety
 * net, but content got cut off). Pin the track to the container width with
 * minmax(0,1fr) so it can't grow past the viewport, and let the payment
 * content shrink + images scale/wrap.
 * ------------------------------------------------------------------- */
/* Elementor collapses the checkout to a SINGLE column at <=1024px (its rule:
   .e-checkout__container{grid-template-columns:repeat(1,1fr)}). Across that whole
   stacked range — tablet AND phone — put the "Your Order" review column
   (.e-checkout__column-end) FIRST so every step's action button lands at the very
   BOTTOM: step-1 Continue, step-2 Continue to Payment, and the step-3 Place Order
   (a form submit that must stay in the form, so it can't be relocated). Scoped to
   EXACTLY the single-column range: at >=1025 the container is a real 2-column grid
   (56% content | auto review) where this reorder would wrongly swap the columns
   left<->right. Summary-on-top, action-at-bottom is the standard mobile/tablet
   checkout pattern. One rule handles all three steps. */
@media (max-width: 1024px) {
    body.woocommerce-checkout .e-checkout__container > .e-checkout__column-end {
        order: -1;
    }
}

@media (max-width: 767px) {
    body.woocommerce-checkout .e-checkout__container {
        grid-template-columns: minmax(0, 1fr) !important;
    }
    body.woocommerce-checkout .exim-step2-content,
    body.woocommerce-checkout .exim-step3-content,
    body.woocommerce-checkout .exim-payment-tabs,
    body.woocommerce-checkout .exim-payment-target,
    body.woocommerce-checkout .woocommerce-checkout-payment,
    body.woocommerce-checkout .wc_payment_methods,
    body.woocommerce-checkout .wc_payment_method {
        min-width: 0 !important;
        max-width: 100% !important;
    }
    /* Trim the payment-target's 24px inner gutter to the card gutter. */
    body.woocommerce-checkout .exim-payment-target {
        padding-left: 14px !important;
        padding-right: 14px !important;
    }
    /* Card-brand logos / payment images scale to fit; their row wraps. */
    body.woocommerce-checkout .exim-step3-content img {
        max-width: 100% !important;
        height: auto !important;
    }
    body.woocommerce-checkout .wc_payment_method label {
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        gap: 4px 8px;
    }
    body.woocommerce-checkout .wc_payment_method label img {
        max-height: 28px;
        width: auto !important;
    }
}


/* =====================================================================
 * 6. MY ACCOUNT — responsive tables + login page
 * ---------------------------------------------------------------------
 * The logged-in account area (Orders, Downloads, Addresses) uses standard
 * WooCommerce .shop_table_responsive tables that overflow on phones. Give
 * them the canonical data-title stacking. Scoped to the account content so
 * it never touches the custom cart/checkout tables handled above.
 * ===================================================================== */
@media (max-width: 767px) {
    .woocommerce-MyAccount-content table.shop_table_responsive thead {
        display: none;
    }
    .woocommerce-MyAccount-content table.shop_table_responsive tr {
        display: block;
        border: 1px solid #e6e9ee;
        border-radius: 8px;
        margin-bottom: 12px;
        padding: 4px 12px;
    }
    .woocommerce-MyAccount-content table.shop_table_responsive td {
        display: flex;
        justify-content: space-between;
        gap: 12px;
        text-align: right;
        padding: 8px 0 !important;
        border: 0 !important;
        border-bottom: 1px solid #f1f3f6 !important;
    }
    .woocommerce-MyAccount-content table.shop_table_responsive tr td:last-child {
        border-bottom: 0 !important;
    }
    .woocommerce-MyAccount-content table.shop_table_responsive td::before {
        content: attr(data-title);
        font-weight: 600;
        text-align: left;
        color: #6b7280;
    }
    /* Account nav + content stack full width */
    .woocommerce-account .woocommerce-MyAccount-navigation,
    .woocommerce-account .woocommerce-MyAccount-content {
        float: none !important;
        width: 100% !important;
    }
    .woocommerce-account .woocommerce-MyAccount-navigation {
        margin-bottom: 18px;
    }
    .woocommerce-account .woocommerce-MyAccount-navigation ul li {
        border-bottom: 1px solid #eef0f3;
    }
    .woocommerce-account .woocommerce-MyAccount-navigation ul li a {
        display: block;
        padding: 12px 4px;
    }
    .woocommerce-address-fields.exim-addr-edit__body{
        padding: 0;
    }
    .exim-addr-edit .exim-addr-edit__actions{
        justify-content: center;
    }
}


/* =====================================================================
 * 7. GLOBAL SAFETY NET — no phantom horizontal scroll on small screens
 * ---------------------------------------------------------------------
 * Catches any remaining off-screen/invisible element (e.g. a Bootstrap
 * .row's negative gutters without a padded container, third-party fixed
 * iframes). Scoped to <=991px only, so desktop is never affected. Safe
 * here because the audit found ZERO position:sticky elements — the usual
 * reason to avoid overflow-x:hidden on the root.
 * ===================================================================== */
@media (max-width: 991px) {
    html,
    body {
        overflow-x: hidden;
        max-width: 100%;
    }
    /* Media and embeds never exceed their container. */
    img,
    video,
    iframe:not([name^="__privateStripe"]):not([src*="stripe.com"]),
    table {
        max-width: 100%;
    }
}


/* =====================================================================
 * 8. MINI CART (Elementor Menu-Cart widget) — item layout fix
 * ---------------------------------------------------------------------
 * Each item (.elementor-menu-cart__product) is display:grid and its
 * children already carry grid-area:thumb / name / price (plus the right
 * align-self: name=end, price=start) — but THIS Elementor build never
 * defines the matching grid-template-areas on the container (it computes
 * to `none`). With the named areas unresolved the children fall back to
 * undefined auto-placement: on phones that collapsed into 4 implicit
 * columns with ~98px of dead space on the left and the price stacked
 * ABOVE the image; on desktop it happened to land as 2 columns. Re-supply
 * the missing area map so every item is a clean card — thumbnail on the
 * left, product name over the unit price on the right.
 *
 * NOT media-scoped: the cart drawer is a fixed ~300–375px panel on every
 * device (full-width only on phones), so one clean layout serves both.
 * The remove "x" is intentionally display:none here (the widget is set
 * with the remove button OFF — items are removed from the full cart), so
 * it needs no space reserved; a small right gutter is kept in case that
 * setting is ever turned on.
 * ===================================================================== */
.elementor-menu-cart__product.woocommerce-cart-form__cart-item {
    grid-template-columns: 56px 1fr !important;
    grid-template-areas:
        "thumb name"
        "thumb price" !important;
    column-gap: 12px !important;
    row-gap: 2px !important;
    align-items: center !important;
    padding: 12px 18px 12px 0 !important;
}
.elementor-menu-cart__product .elementor-menu-cart__product-image {
    grid-area: thumb !important;
    align-self: center !important;
}
/* Uniform, tidy thumbnail — contain keeps odd aspect ratios from cropping. */
.elementor-menu-cart__product .elementor-menu-cart__product-image img {
    width: 56px !important;
    height: 56px !important;
    object-fit: contain !important;
    border: 1px solid #e6e9ee;
    border-radius: 6px;
    background: #fff;
}
.elementor-menu-cart__product .elementor-menu-cart__product-name {
    grid-area: name !important;
    align-self: end !important;
    margin: 0 !important;
}
/* Long unbreakable part-number titles (e.g. UUX1J101MNLANAGS) must wrap,
   never overflow the narrow drawer. */
.elementor-menu-cart__product .elementor-menu-cart__product-name a {
    overflow-wrap: anywhere;
    word-break: break-word;
    line-height: 1.35;
    font-weight: 600;
}
.elementor-menu-cart__product .elementor-menu-cart__product-price {
    grid-area: price !important;
    align-self: start !important;
}
/* The remove "x" wrapper is empty here (button off) but Elementor still
   paints its left/right 1px borders — a stray vertical hairline at the
   row's right edge. Drop the borders only (keep the wrapper) so nothing
   shows now, yet a re-enabled remove button would still render fine. */
.elementor-menu-cart__product .elementor-menu-cart__product-remove {
    border: 0 !important;
}
