{"id":10,"date":"2025-02-23T02:23:05","date_gmt":"2025-02-23T02:23:05","guid":{"rendered":"https:\/\/maldives.com.ar\/minorista\/cart\/"},"modified":"2026-05-19T13:50:54","modified_gmt":"2026-05-19T16:50:54","slug":"cart","status":"publish","type":"page","link":"https:\/\/maldives.com.ar\/minorista\/cart\/","title":{"rendered":"Carrito"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"10\" class=\"elementor elementor-10\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-3113d6e3 elementor-section-full_width elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile elementor-section-height-default elementor-section-height-default\" data-id=\"3113d6e3\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;ekit_has_onepagescroll_dot&quot;:&quot;yes&quot;}\">\n\t\t\t\t\t\t\t<div class=\"elementor-background-overlay\"><\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-53825700\" data-id=\"53825700\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-354a93c4 elementor-widget elementor-widget-woocommerce-breadcrumb\" data-id=\"354a93c4\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"woocommerce-breadcrumb.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<nav class=\"woocommerce-breadcrumb\" aria-label=\"Breadcrumb\">Inicio<\/nav>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-75a8546 elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile e-flex e-con-boxed e-con e-parent\" data-id=\"75a8546\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;ekit_has_onepagescroll_dot&quot;:&quot;yes&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b9b6fb8 elementor-widget elementor-widget-html\" data-id=\"b9b6fb8\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"woocommerce-message\" style=\"border-left: 4px solid #f39c12; background: #fff8e5; padding: 10px; margin-bottom: 20px;\">\r\n            \ud83d\udce6 Para ver las opciones de env\u00edo a domicilio, ingres\u00e1 tu c\u00f3digo postal.\r\n        <\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d08366d e-con-full e-flex e-con e-parent\" data-id=\"d08366d\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;ekit_has_onepagescroll_dot&quot;:&quot;yes&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-cf69d7d elementor-widget elementor-widget-html\" data-id=\"cf69d7d\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!--\n  MALDIVES MAYORISTA \u00b7 CARRITO (\/cart\/)\n  Renderizado 100% client-side v\u00eda WooCommerce Store API.\n  Update \/ remove \/ coupons \/ WhatsApp checkout sin recargar la p\u00e1gina.\n\n  Instalaci\u00f3n:\n  - Theme Builder \u2192 Single page template asignada a \"Page: Carrito\" (\/cart\/)\n  - O pegarlo directamente en la p\u00e1gina \/cart\/ editada con Elementor\n  - Widget HTML \u00fanico en un Container Full\n\n  Funcionalidades:\n  - Lista de items con thumbnail, nombre, variantes, qty controls, precio, subtotal\n  - Bot\u00f3n remover por item\n  - Aplicar \/ quitar cupones\n  - Resumen sticky con subtotal, env\u00edo (a coordinar), total +IVA\n  - Bot\u00f3n WhatsApp con mensaje pre-armado\n  - Empty state con CTA a tienda\n  - Toast notifications\n-->\n\n<style>\n  .mld-cart, .mld-cart *, .mld-cart *::before, .mld-cart *::after { box-sizing: border-box; }\n  .mld-cart {\n    --mld-ink: #212121;\n    --mld-text: #3E3E3E;\n    --mld-muted: #767676;\n    --mld-line: #E5E5E5;\n    --mld-paper: #ffffff;\n    --mld-paper-2: #F2F2F2;\n    --mld-accent: #BAD19B;\n    --mld-accent-deep: #8FAA70;\n    --mld-danger: #c0392b;\n    --mld-pad-x: clamp(16px, 4vw, 48px);\n    --mld-font-head: \"Bebas Neue\", \"Oswald\", sans-serif;\n    --mld-font-body: \"Lato\", \"Helvetica Neue\", sans-serif;\n    font-family: var(--mld-font-body);\n    color: var(--mld-text);\n    background: var(--mld-paper);\n  }\n  .mld-cart a { color: inherit; }\n  .mld-cart img { display: block; max-width: 100%; height: auto; }\n\n  \/* ============================================\n     HERO\n     ============================================ *\/\n  .mld-cart__hero {\n    padding: clamp(48px, 6vw, 80px) var(--mld-pad-x) clamp(28px, 3vw, 40px);\n    border-bottom: 1px solid var(--mld-line);\n    position: relative; overflow: hidden;\n    background:\n      radial-gradient(900px 280px at 100% 50%, rgba(186,209,155,.18), transparent 70%),\n      linear-gradient(180deg, var(--mld-paper-2) 0%, var(--mld-paper) 100%);\n  }\n  .mld-cart__hero-inner {\n    max-width: 1440px; margin: 0 auto; position: relative; z-index: 1;\n  }\n  .mld-cart__crumbs {\n    display: flex; align-items: center; gap: 8px;\n    font-size: 11px; letter-spacing: .14em; color: var(--mld-muted);\n    text-transform: uppercase; margin-bottom: 24px;\n  }\n  .mld-cart__crumbs a { color: var(--mld-muted); text-decoration: none; }\n  .mld-cart__crumbs a:hover { color: var(--mld-ink); }\n  .mld-cart__crumbs strong { color: var(--mld-ink); font-weight: 700; }\n\n  .mld-cart__head {\n    display: grid; grid-template-columns: 1.4fr 1fr;\n    gap: clamp(24px, 4vw, 64px);\n    align-items: end;\n  }\n  .mld-cart__title {\n    font-family: var(--mld-font-head);\n    font-size: clamp(56px, 9vw, 130px);\n    line-height: .85; letter-spacing: .005em;\n    color: var(--mld-ink); font-weight: 400;\n    margin: 0;\n  }\n  .mld-cart__title sub {\n    display: inline-block; vertical-align: baseline; bottom: 0;\n    font-family: var(--mld-font-body);\n    font-size: clamp(11px, 1.1vw, 14px);\n    letter-spacing: .32em; font-weight: 700;\n    color: var(--mld-accent-deep);\n    text-transform: uppercase; margin-left: 14px;\n  }\n  .mld-cart__head-right {\n    padding-bottom: 12px;\n  }\n  .mld-cart__head-stats {\n    display: flex; flex-wrap: wrap; gap: 8px;\n    margin-bottom: 16px;\n  }\n  .mld-cart__head-stat {\n    display: inline-flex; align-items: center; gap: 8px;\n    padding: 9px 16px;\n    background: var(--mld-paper);\n    border: 1.5px solid var(--mld-ink);\n    border-radius: 999px;\n    font-family: var(--mld-font-head);\n    font-size: 13px; letter-spacing: .14em; color: var(--mld-ink);\n  }\n  .mld-cart__head-stat strong {\n    background: var(--mld-ink); color: var(--mld-paper);\n    padding: 3px 10px; border-radius: 999px;\n    font-size: 14px;\n  }\n  .mld-cart__head-tags {\n    display: flex; flex-wrap: wrap; gap: 8px;\n  }\n  .mld-cart__head-tag {\n    font-family: var(--mld-font-head);\n    font-size: 11px; letter-spacing: .16em;\n    color: var(--mld-text);\n    padding: 6px 12px;\n    border: 1px solid var(--mld-line);\n    border-radius: 999px;\n    background: var(--mld-paper);\n  }\n\n  \/* ============================================\n     BODY \u00b7 grid de 2 columnas\n     ============================================ *\/\n  .mld-cart__body {\n    padding: clamp(32px, 4vw, 56px) var(--mld-pad-x) clamp(48px, 6vw, 80px);\n    max-width: 1440px; margin: 0 auto;\n    display: grid; grid-template-columns: 1.6fr 1fr;\n    gap: 32px; align-items: start;\n  }\n\n  \/* ============================================\n     LISTA DE ITEMS\n     ============================================ *\/\n  .mld-cart__items {\n    display: flex; flex-direction: column; gap: 12px;\n  }\n  .mld-cart__item {\n    display: grid;\n    grid-template-columns: 110px 1fr auto;\n    gap: 20px;\n    padding: 18px;\n    background: var(--mld-paper);\n    border: 1px solid var(--mld-line);\n    border-radius: 16px;\n    align-items: center;\n    transition: border-color .2s ease;\n  }\n  .mld-cart__item:hover { border-color: var(--mld-ink); }\n  .mld-cart__item.is-removing { opacity: .4; transform: translateX(-12px); transition: all .25s ease; }\n  .mld-cart__item-img {\n    width: 110px; height: 110px;\n    background: var(--mld-paper-2);\n    border-radius: 12px;\n    overflow: hidden;\n    position: relative;\n  }\n  .mld-cart__item-img img {\n    width: 100%; height: 100%; object-fit: contain;\n    padding: 10px;\n  }\n  .mld-cart__item-img a { display: block; height: 100%; }\n  .mld-cart__item-body {\n    display: flex; flex-direction: column; gap: 4px;\n    min-width: 0;\n  }\n  .mld-cart__item-cat {\n    font-family: var(--mld-font-head);\n    font-size: 10px; letter-spacing: .2em;\n    color: var(--mld-accent-deep);\n    text-transform: uppercase;\n  }\n  .mld-cart__item-name {\n    font-family: var(--mld-font-head);\n    font-size: clamp(17px, 1.6vw, 22px);\n    letter-spacing: .02em; color: var(--mld-ink);\n    line-height: 1.2; margin: 0;\n    text-decoration: none;\n  }\n  .mld-cart__item-name:hover { color: var(--mld-accent-deep); }\n  .mld-cart__item-variant {\n    font-size: 12px; color: var(--mld-muted);\n    display: flex; flex-wrap: wrap; gap: 4px 12px;\n    margin-top: 2px;\n  }\n  .mld-cart__item-variant span { white-space: nowrap; }\n  .mld-cart__item-variant span strong { color: var(--mld-ink); font-weight: 700; }\n  .mld-cart__item-price-unit {\n    font-size: 12px; color: var(--mld-muted);\n    margin-top: 4px;\n  }\n  .mld-cart__item-price-unit strong {\n    color: var(--mld-ink); font-family: var(--mld-font-head);\n    font-size: 14px; letter-spacing: .04em;\n  }\n\n  .mld-cart__item-controls {\n    display: flex; flex-direction: column; align-items: flex-end;\n    gap: 12px;\n    text-align: right;\n  }\n  .mld-cart__qty {\n    display: inline-flex; align-items: center;\n    border: 1.5px solid var(--mld-ink);\n    border-radius: 999px;\n    overflow: hidden;\n    background: var(--mld-paper);\n  }\n  .mld-cart__qty button {\n    width: 38px; height: 44px;\n    background: transparent; border: 0; cursor: pointer;\n    color: var(--mld-ink); font-size: 16px;\n    display: flex; align-items: center; justify-content: center;\n    transition: background .2s ease;\n    font-family: var(--mld-font-head);\n  }\n  .mld-cart__qty button:hover { background: var(--mld-paper-2); }\n  .mld-cart__qty button:disabled { opacity: .3; cursor: not-allowed; }\n  \/* !important defiende contra Hello Elementor que pone padding: 18px 20px a inputs globalmente\n     (eso recortaba \"16\" \/ \"11\" dejando solo \"1\" visible) *\/\n  .mld-cart__qty input {\n    width: 58px !important; height: 44px !important;\n    border: 0 !important; outline: 0 !important;\n    background: transparent !important;\n    text-align: center !important;\n    padding: 0 4px !important;\n    margin: 0 !important;\n    font-family: var(--mld-font-head) !important;\n    font-size: 18px !important;\n    color: var(--mld-ink) !important;\n    letter-spacing: .04em !important;\n    -moz-appearance: textfield;\n    box-shadow: none !important;\n    min-width: 0 !important;\n    border-radius: 0 !important;\n  }\n  .mld-cart__qty input::-webkit-outer-spin-button,\n  .mld-cart__qty input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }\n  .mld-cart__qty input:focus { background: transparent !important; }\n  .mld-cart__qty.is-updating { opacity: .6; pointer-events: none; }\n\n  .mld-cart__item-subtotal {\n    font-family: var(--mld-font-head);\n    font-size: clamp(20px, 2vw, 26px);\n    letter-spacing: .02em; color: var(--mld-ink);\n    line-height: 1;\n  }\n  .mld-cart__item-subtotal::after {\n    content: \"\"; font-family: var(--mld-font-body);\n    font-size: 10px; color: var(--mld-muted);\n    letter-spacing: .04em; font-weight: 700;\n    margin-left: 4px;\n  }\n  .mld-cart__item-remove {\n    background: transparent; border: 0; cursor: pointer;\n    color: var(--mld-muted);\n    font-size: 12px; letter-spacing: .12em;\n    font-family: var(--mld-font-head);\n    display: inline-flex; align-items: center; gap: 6px;\n    padding: 4px 8px;\n    transition: color .2s ease;\n  }\n  .mld-cart__item-remove:hover { color: var(--mld-danger); }\n\n  \/* Item error (min\/max qty messages) *\/\n  .mld-cart__item-error {\n    grid-column: 1 \/ -1;\n    background: #fef2f0; color: var(--mld-danger);\n    border-left: 3px solid var(--mld-danger);\n    padding: 10px 14px; border-radius: 0 8px 8px 0;\n    font-size: 13px;\n  }\n\n  \/* ============================================\n     COUPON\n     ============================================ *\/\n  .mld-cart__coupon {\n    margin-top: 24px;\n    padding: 20px;\n    background: var(--mld-paper-2);\n    border-radius: 16px;\n  }\n  .mld-cart__coupon-head {\n    display: flex; align-items: center; justify-content: space-between;\n    margin-bottom: 12px;\n    cursor: pointer;\n  }\n  .mld-cart__coupon-head span {\n    font-family: var(--mld-font-head);\n    font-size: 13px; letter-spacing: .2em; color: var(--mld-ink);\n  }\n  .mld-cart__coupon-head svg { transition: transform .25s ease; }\n  .mld-cart__coupon.is-open .mld-cart__coupon-head svg { transform: rotate(180deg); }\n  .mld-cart__coupon-form {\n    display: none;\n    gap: 8px; margin-top: 4px;\n  }\n  .mld-cart__coupon.is-open .mld-cart__coupon-form { display: flex; }\n  .mld-cart__coupon-form input {\n    flex: 1; height: 44px;\n    border: 1.5px solid var(--mld-line);\n    border-radius: 999px;\n    padding: 0 18px;\n    background: var(--mld-paper);\n    font-family: var(--mld-font-body); font-size: 14px;\n    color: var(--mld-ink); outline: 0;\n    text-transform: uppercase; letter-spacing: .08em;\n  }\n  .mld-cart__coupon-form input:focus { border-color: var(--mld-ink); }\n  .mld-cart__coupon-form button {\n    height: 44px; padding: 0 22px;\n    background: var(--mld-ink); color: var(--mld-paper);\n    border: 0; border-radius: 999px; cursor: pointer;\n    font-family: var(--mld-font-head); font-size: 13px;\n    letter-spacing: .16em;\n    transition: background .2s ease;\n  }\n  .mld-cart__coupon-form button:hover { background: var(--mld-accent-deep); }\n\n  .mld-cart__coupon-applied {\n    display: inline-flex; align-items: center; gap: 8px;\n    padding: 8px 14px; border-radius: 999px;\n    background: var(--mld-accent); color: var(--mld-ink);\n    font-family: var(--mld-font-head); font-size: 13px;\n    letter-spacing: .14em;\n    margin-top: 8px;\n  }\n  .mld-cart__coupon-applied button {\n    background: transparent; border: 0; color: var(--mld-ink);\n    cursor: pointer; padding: 0; margin-left: 4px;\n    line-height: 0;\n  }\n\n  \/* ============================================\n     SUMMARY (col derecha, sticky)\n     ============================================ *\/\n  .mld-cart__summary {\n    position: sticky; top: 24px;\n    background: var(--mld-paper);\n    border: 1.5px solid var(--mld-ink);\n    border-radius: 20px;\n    padding: 24px;\n    box-shadow: 0 24px 48px -32px rgba(0,0,0,.18);\n  }\n  .mld-cart__summary h2 {\n    font-family: var(--mld-font-head);\n    font-size: 22px; letter-spacing: .04em;\n    color: var(--mld-ink); font-weight: 400;\n    margin: 0 0 18px;\n    padding-bottom: 14px;\n    border-bottom: 2px solid var(--mld-ink);\n  }\n  .mld-cart__summary h2 small {\n    display: block; font-family: var(--mld-font-body);\n    font-size: 11px; letter-spacing: .3em; font-weight: 700;\n    color: var(--mld-accent-deep); margin-bottom: 6px;\n    text-transform: uppercase;\n  }\n  \/* Lista detallada de productos del resumen *\/\n  .mld-cart__summary-items {\n    list-style: none; padding: 0; margin: 0 0 8px;\n    display: flex; flex-direction: column;\n  }\n  .mld-cart__summary-item {\n    display: flex; align-items: flex-start; justify-content: space-between;\n    gap: 12px; padding: 10px 0;\n    border-bottom: 1px dashed var(--mld-line);\n    font-size: 13px;\n  }\n  .mld-cart__summary-item:last-child { border-bottom: 0; }\n  .mld-cart__summary-item-info {\n    display: flex; flex-direction: column; gap: 2px;\n    min-width: 0; flex: 1;\n  }\n  .mld-cart__summary-item-name {\n    font-family: var(--mld-font-head);\n    font-size: 14px; letter-spacing: .02em;\n    color: var(--mld-ink); line-height: 1.2;\n    word-wrap: break-word;\n  }\n  .mld-cart__summary-item-qty {\n    font-size: 11px; color: var(--mld-muted);\n    letter-spacing: .04em;\n  }\n  .mld-cart__summary-item-total {\n    font-family: var(--mld-font-head);\n    font-size: 15px; color: var(--mld-ink);\n    letter-spacing: .02em; white-space: nowrap;\n    flex-shrink: 0;\n  }\n\n  .mld-cart__summary-row {\n    display: flex; justify-content: space-between; align-items: baseline;\n    padding: 12px 0;\n    font-size: 14px; color: var(--mld-text);\n    border-bottom: 1px dashed var(--mld-line);\n  }\n  .mld-cart__summary-row:last-of-type { border-bottom: 0; }\n  .mld-cart__summary-row .label { color: var(--mld-text); }\n  .mld-cart__summary-row .value {\n    font-family: var(--mld-font-head); font-size: 17px;\n    color: var(--mld-ink); letter-spacing: .02em;\n  }\n  .mld-cart__summary-row .value small {\n    font-family: var(--mld-font-body); font-size: 11px;\n    color: var(--mld-muted); letter-spacing: .04em;\n    font-weight: 700; margin-left: 4px;\n  }\n  .mld-cart__summary-row.is-discount .value { color: var(--mld-accent-deep); }\n\n  .mld-cart__shipping {\n    margin: 12px 0;\n    padding: 14px 0;\n    border-top: 1px dashed var(--mld-line);\n    border-bottom: 1px dashed var(--mld-line);\n  }\n  .mld-cart__shipping-title {\n    font-family: var(--mld-font-head); font-size: 12px;\n    letter-spacing: .2em; color: var(--mld-muted);\n    margin-bottom: 10px;\n  }\n  .mld-cart__shipping label {\n    display: flex; align-items: center; gap: 10px;\n    padding: 10px 0;\n    cursor: pointer;\n    font-size: 14px; color: var(--mld-text);\n  }\n  .mld-cart__shipping input[type=\"radio\"] {\n    width: 18px; height: 18px;\n    accent-color: var(--mld-accent-deep);\n  }\n  .mld-cart__shipping label strong { color: var(--mld-ink); font-weight: 700; }\n  .mld-cart__shipping label small { color: var(--mld-muted); }\n  .mld-cart__shipping label .rate-price {\n    margin-left: auto; font-family: var(--mld-font-head); color: var(--mld-ink);\n    letter-spacing: .04em; font-size: 14px;\n  }\n\n  \/* Form CP *\/\n  .mld-cart__cp-form {\n    display: flex; gap: 8px; margin-top: 6px;\n  }\n  .mld-cart__cp-form input[type=\"text\"] {\n    flex: 1; min-width: 0;\n    border: 1px solid var(--mld-line);\n    border-radius: 10px;\n    padding: 10px 12px;\n    font-family: var(--mld-font-body);\n    font-size: 14px; color: var(--mld-ink);\n    background: var(--mld-paper);\n    outline: none; transition: border-color .15s ease;\n  }\n  .mld-cart__cp-form input[type=\"text\"]:focus {\n    border-color: var(--mld-accent-deep);\n  }\n  .mld-cart__cp-form button {\n    border: 0; cursor: pointer;\n    background: var(--mld-ink); color: #fff;\n    font-family: var(--mld-font-head); font-size: 12px;\n    letter-spacing: .14em; padding: 0 16px;\n    border-radius: 10px; white-space: nowrap;\n    transition: background .15s ease;\n  }\n  .mld-cart__cp-form button:hover { background: #000; }\n  .mld-cart__cp-form button:disabled { opacity: .55; cursor: progress; }\n  .mld-cart__cp-current {\n    font-size: 12px; color: var(--mld-muted); margin-top: 8px;\n    display: flex; align-items: center; gap: 8px;\n  }\n  .mld-cart__cp-current button {\n    background: none; border: 0; cursor: pointer; padding: 0;\n    color: var(--mld-accent-deep); font-weight: 700;\n    text-decoration: underline; text-underline-offset: 2px;\n    font-size: 12px;\n  }\n  .mld-cart__cp-error {\n    color: #9b1c1c; font-size: 12px; margin-top: 6px;\n  }\n  .mld-cart__cp-hint {\n    font-size: 12px; color: var(--mld-muted); margin-top: 4px;\n  }\n\n  \/* L\u00ednea de env\u00edo dentro del total *\/\n  .mld-cart__summary-row.is-shipping .label { color: var(--mld-text); }\n  .mld-cart__summary-row.is-shipping .value { color: var(--mld-ink); font-weight: 700; }\n\n  .mld-cart__total {\n    display: flex; justify-content: space-between; align-items: baseline;\n    padding: 18px 0 8px;\n    margin-top: 8px;\n    border-top: 2px solid var(--mld-ink);\n  }\n  .mld-cart__total .label {\n    font-family: var(--mld-font-head); font-size: 18px;\n    letter-spacing: .12em; color: var(--mld-ink);\n  }\n  .mld-cart__total .value {\n    font-family: var(--mld-font-head); font-size: clamp(28px, 3vw, 36px);\n    color: var(--mld-ink); letter-spacing: .01em; line-height: 1;\n  }\n  .mld-cart__total .value small {\n    display: block; font-family: var(--mld-font-body);\n    font-size: 10px; color: var(--mld-muted);\n    letter-spacing: .08em; font-weight: 700;\n    text-align: right; margin-top: 4px;\n  }\n\n  \/* Buttons *\/\n  .mld-cart__cta-wa {\n    display: flex; align-items: center; justify-content: center; gap: 10px;\n    width: 100%;\n    padding: 18px 22px; margin-bottom: 10px;\n    background: var(--mld-ink); color: var(--mld-paper);\n    border: 0; border-radius: 999px; cursor: pointer;\n    font-family: var(--mld-font-head); font-size: 15px;\n    letter-spacing: .18em;\n    transition: background .25s ease, transform .25s ease;\n    text-decoration: none;\n  }\n  .mld-cart__cta-wa:hover { background: var(--mld-accent-deep); transform: translateY(-2px); }\n  .mld-cart__cta-checkout {\n    display: flex; align-items: center; justify-content: center; gap: 8px;\n    width: 100%;\n    padding: 12px 18px;\n    background: transparent; color: var(--mld-ink);\n    border: 1.5px solid var(--mld-ink); border-radius: 999px;\n    cursor: pointer; text-decoration: none;\n    font-family: var(--mld-font-head); font-size: 13px;\n    letter-spacing: .14em;\n    transition: all .2s ease;\n  }\n  .mld-cart__cta-checkout:hover {\n    background: var(--mld-ink); color: var(--mld-paper);\n  }\n  .mld-cart__continue {\n    display: block; text-align: center;\n    margin-top: 14px;\n    font-family: var(--mld-font-body); font-size: 13px;\n    color: var(--mld-muted); text-decoration: underline;\n    text-decoration-color: var(--mld-line);\n  }\n  .mld-cart__continue:hover { color: var(--mld-ink); }\n\n  \/* ============================================\n     EMPTY STATE\n     ============================================ *\/\n  .mld-cart__empty {\n    max-width: 600px; margin: 80px auto;\n    padding: clamp(40px, 5vw, 64px);\n    text-align: center;\n    background: var(--mld-paper-2);\n    border: 1px dashed var(--mld-line);\n    border-radius: 20px;\n  }\n  .mld-cart__empty-icon {\n    width: 80px; height: 80px; margin: 0 auto 20px;\n    background: var(--mld-paper);\n    border-radius: 999px;\n    display: flex; align-items: center; justify-content: center;\n    color: var(--mld-muted);\n  }\n  .mld-cart__empty h2 {\n    font-family: var(--mld-font-head);\n    font-size: clamp(32px, 4vw, 52px);\n    color: var(--mld-ink); font-weight: 400;\n    margin: 0 0 12px; letter-spacing: .01em;\n  }\n  .mld-cart__empty p {\n    color: var(--mld-text); margin: 0 0 28px;\n    font-size: 15px; line-height: 1.5;\n  }\n  .mld-cart__empty .mld-cart__cta-wa {\n    display: inline-flex; width: auto;\n    padding: 14px 28px;\n  }\n\n  \/* ============================================\n     SKELETON\n     ============================================ *\/\n  .mld-cart__skel {\n    background: linear-gradient(90deg, var(--mld-paper-2) 0%, #e8e8e8 50%, var(--mld-paper-2) 100%);\n    background-size: 200% 100%;\n    animation: mld-cart-shimmer 1.4s infinite linear;\n    border-radius: 8px;\n  }\n  @keyframes mld-cart-shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }\n\n  \/* ============================================\n     TOAST\n     ============================================ *\/\n  .mld-cart__toast {\n    position: fixed; bottom: 32px; left: 50%;\n    transform: translateX(-50%) translateY(140%);\n    padding: 14px 22px; border-radius: 999px;\n    background: var(--mld-ink); color: var(--mld-paper);\n    font-family: var(--mld-font-head); font-size: 13px;\n    letter-spacing: .14em;\n    box-shadow: 0 12px 32px rgba(0,0,0,.25);\n    z-index: 9999;\n    transition: transform .3s ease;\n    display: inline-flex; align-items: center; gap: 10px;\n    max-width: 90vw;\n  }\n  .mld-cart__toast.is-show { transform: translateX(-50%) translateY(0); }\n  .mld-cart__toast.is-error { background: var(--mld-danger); }\n\n  \/* ============================================\n     Mobile\n     ============================================ *\/\n  @media (max-width: 992px) {\n    .mld-cart__head { grid-template-columns: 1fr; gap: 20px; align-items: start; }\n    .mld-cart__head-right { padding-bottom: 0; }\n    .mld-cart__body { grid-template-columns: 1fr; }\n    .mld-cart__summary { position: relative; top: 0; }\n  }\n  @media (max-width: 560px) {\n    .mld-cart__item {\n      grid-template-columns: 80px 1fr;\n      gap: 14px; padding: 14px;\n    }\n    .mld-cart__item-img { width: 80px; height: 80px; }\n    .mld-cart__item-controls {\n      grid-column: 1 \/ -1;\n      flex-direction: row; align-items: center; justify-content: space-between;\n      margin-top: 4px;\n      padding-top: 14px; border-top: 1px dashed var(--mld-line);\n    }\n    .mld-cart__title { font-size: clamp(48px, 13vw, 80px); }\n  }\n<\/style>\n\n<div class=\"mld-cart\" id=\"mld-cart-root\">\n\n  <!-- HERO -->\n  <section class=\"mld-cart__hero\">\n    <div class=\"mld-cart__hero-inner\">\n      <nav class=\"mld-cart__crumbs\" aria-label=\"Breadcrumb\">\n        <a href=\"\/minorista\/\">Inicio<\/a>\n        <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"m9 6 6 6-6 6\"\/><\/svg>\n        <a href=\"\/minorista\/tienda\/\">Tienda<\/a>\n        <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"m9 6 6 6-6 6\"\/><\/svg>\n        <strong>Tu pedido<\/strong>\n      <\/nav>\n      <div class=\"mld-cart__head\">\n        <h1 class=\"mld-cart__title\">\n          <span data-mld-cart-title>TU PEDIDO<\/span>\n          <sub data-mld-cart-subtitle>Tu carrito<\/sub>\n        <\/h1>\n        <div class=\"mld-cart__head-right\">\n          <div class=\"mld-cart__head-stats\">\n            <div class=\"mld-cart__head-stat\"><strong data-mld-cart-items-count>0<\/strong> PRODUCTOS<\/div>\n            <div class=\"mld-cart__head-stat\"><strong data-mld-cart-units-count>0<\/strong> UNIDADES<\/div>\n          <\/div>\n          <div class=\"mld-cart__head-tags\">\n            <span class=\"mld-cart__head-tag\">PAGO ONLINE SEGURO<\/span>\n            <span class=\"mld-cart__head-tag\">ENV\u00cdOS A TODO EL PA\u00cdS<\/span>\n            <span class=\"mld-cart__head-tag\">PERSONALIZABLE<\/span>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <!-- BODY -->\n  <div id=\"mld-cart-body\">\n    <!-- Skeleton inicial -->\n    <section class=\"mld-cart__body\">\n      <div class=\"mld-cart__items\">\n        <div class=\"mld-cart__skel\" style=\"height:144px;\"><\/div>\n        <div class=\"mld-cart__skel\" style=\"height:144px;\"><\/div>\n        <div class=\"mld-cart__skel\" style=\"height:144px;\"><\/div>\n      <\/div>\n      <div class=\"mld-cart__skel\" style=\"height:380px;\"><\/div>\n    <\/section>\n  <\/div>\n\n  <div class=\"mld-cart__toast\" id=\"mld-cart-toast\">\n    <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M5 13l4 4L19 7\"\/><\/svg>\n    <span>Carrito actualizado<\/span>\n  <\/div>\n<\/div>\n\n<script>\n(function() {\n  const STORE = '\/minorista\/wp-json\/wc\/store\/v1';\n  const WA_PHONE = '5491136733707';\n\n  const $ = (s, c) => (c || document).querySelector(s);\n  const $$ = (s, c) => [...(c || document).querySelectorAll(s)];\n\n  let cartState = null;\n  let storeNonce = '';\n  let pendingTimers = {}; \/\/ for debounced qty updates\n  let shippingPostcode = sessionStorage.getItem('mld-cart-postcode') || '';\n  let shippingError = '';\n\n  \/\/ ===== Helpers =====\n  function decodeEntities(s) {\n    if (!s) return '';\n    const t = document.createElement('textarea');\n    t.innerHTML = s; return t.value;\n  }\n  function safeText(s) {\n    return decodeEntities(s).replace(\/[&<>\"']\/g, c => ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[c]));\n  }\n  function fmtPrice(priceStr, minor, symbol) {\n    const num = parseFloat(priceStr || 0) \/ Math.pow(10, minor || 2);\n    return (symbol || '$') + ' ' + num.toLocaleString('es-AR', {\n      minimumFractionDigits: num % 1 === 0 ? 0 : 2,\n      maximumFractionDigits: 2\n    });\n  }\n  function priceNum(priceStr, minor) {\n    return parseFloat(priceStr || 0) \/ Math.pow(10, minor || 2);\n  }\n  function showToast(msg, isError) {\n    const t = $('#mld-cart-toast');\n    if (!t) return;\n    t.querySelector('span').textContent = msg;\n    t.classList.toggle('is-error', !!isError);\n    t.classList.add('is-show');\n    setTimeout(() => t.classList.remove('is-show'), 2800);\n  }\n\n  \/\/ ===== Fetch helpers =====\n  async function fetchCart() {\n    const r = await fetch(STORE + '\/cart', { credentials: 'same-origin' });\n    if (!r.ok) throw new Error('cart fetch ' + r.status);\n    storeNonce = r.headers.get('Nonce') || r.headers.get('X-WC-Store-API-Nonce') || storeNonce;\n    return r.json();\n  }\n  async function apiCall(path, method, body) {\n    const headers = { 'Content-Type': 'application\/json' };\n    if (storeNonce) {\n      headers['Nonce'] = storeNonce;\n      headers['X-WC-Store-API-Nonce'] = storeNonce;\n    }\n    const r = await fetch(STORE + path, {\n      method, credentials: 'same-origin', headers,\n      body: body ? JSON.stringify(body) : undefined\n    });\n    if (!r.ok) {\n      let msg = 'API error';\n      try { const j = await r.json(); msg = j.message || msg; } catch(e){}\n      throw new Error(msg);\n    }\n    storeNonce = r.headers.get('Nonce') || r.headers.get('X-WC-Store-API-Nonce') || storeNonce;\n    return r.json();\n  }\n\n  \/\/ ===== Update \/ Remove \/ Coupon =====\n  \/\/ IMPORTANTE: usar los endpoints action-based (POST \/cart\/update-item, \/cart\/remove-item)\n  \/\/ porque devuelven el CARRITO COMPLETO. Los RESTful (PUT \/cart\/items\/{key}) devuelven\n  \/\/ solo el \u00edtem actualizado y rompen el render.\n  async function updateQty(itemKey, qty) {\n    try {\n      cartState = await apiCall('\/cart\/update-item', 'POST', { key: itemKey, quantity: qty });\n      renderAll();\n    } catch(e) {\n      showToast(e.message || 'Error al actualizar', true);\n      \/\/ Refrescar el carrito real para reset visual\n      try { cartState = await fetchCart(); renderAll(); } catch(_){}\n    }\n  }\n  async function removeItem(itemKey) {\n    try {\n      cartState = await apiCall('\/cart\/remove-item', 'POST', { key: itemKey });\n      showToast('Producto eliminado');\n      renderAll();\n    } catch(e) {\n      showToast(e.message || 'Error al eliminar', true);\n      try { cartState = await fetchCart(); renderAll(); } catch(_){}\n    }\n  }\n  async function applyCoupon(code) {\n    try {\n      cartState = await apiCall('\/cart\/apply-coupon', 'POST', { code });\n      showToast('Cup\u00f3n aplicado: ' + code.toUpperCase());\n      renderAll();\n    } catch(e) {\n      showToast(e.message || 'Cup\u00f3n inv\u00e1lido', true);\n    }\n  }\n  async function removeCoupon(code) {\n    try {\n      cartState = await apiCall('\/cart\/remove-coupon', 'POST', { code });\n      renderAll();\n    } catch(e) {\n      showToast(e.message || 'Error', true);\n    }\n  }\n\n  \/\/ ===== Shipping (Woo Store API) =====\n  async function updateShipping(postcode) {\n    shippingError = '';\n    try {\n      cartState = await apiCall('\/cart\/update-customer', 'POST', {\n        shipping_address: { country: 'AR', postcode: String(postcode || '').trim() }\n      });\n      shippingPostcode = String(postcode || '').trim();\n      sessionStorage.setItem('mld-cart-postcode', shippingPostcode);\n      renderAll();\n    } catch(e) {\n      shippingError = e.message || 'No pudimos cotizar el env\u00edo para ese CP.';\n      renderAll();\n    }\n  }\n\n  async function selectShippingRate(packageId, rateId) {\n    try {\n      cartState = await apiCall('\/cart\/select-shipping-rate', 'POST', {\n        package_id: packageId,\n        rate_id: rateId\n      });\n      renderAll();\n    } catch(e) {\n      showToast(e.message || 'Error al seleccionar env\u00edo', true);\n      try { cartState = await fetchCart(); renderAll(); } catch(_){}\n    }\n  }\n\n  function clearShipping() {\n    shippingPostcode = '';\n    shippingError = '';\n    sessionStorage.removeItem('mld-cart-postcode');\n    renderAll();\n  }\n\n  \/\/ ===== Build WhatsApp message =====\n  function buildWhatsAppLink(cart) {\n    const symbol = cart.totals.currency_symbol || '$';\n    const minor = cart.totals.currency_minor_unit || 2;\n    let msg = '*Hola, quisiera coordinar este pedido:*\\n\\n';\n    cart.items.forEach(it => {\n      const name = decodeEntities(it.name);\n      const linePrice = fmtPrice(it.totals.line_total, minor, symbol);\n      msg += `\u2022 ${name} \u00d7 ${it.quantity}u  \u2014  ${linePrice}\\n`;\n      \/\/ Variation info\n      if (it.variation && it.variation.length) {\n        const v = it.variation.map(a => `${decodeEntities(a.attribute)}: ${decodeEntities(a.value)}`).join(', ');\n        msg += `  (${v})\\n`;\n      }\n    });\n    msg += '\\n';\n    msg += `*Subtotal:* ${fmtPrice(cart.totals.total_items, minor, symbol)}\\n`;\n    const discount = priceNum(cart.totals.total_discount, minor);\n    if (discount > 0) {\n      msg += `*Descuento:* -${fmtPrice(cart.totals.total_discount, minor, symbol)}\\n`;\n    }\n    msg += `*Total:* ${fmtPrice(cart.totals.total_price, minor, symbol)}\\n`;\n    msg += `\\n_Maldives \u00b7 tienda online_`;\n    return `https:\/\/wa.me\/${WA_PHONE}?text=${encodeURIComponent(msg)}`;\n  }\n\n  \/\/ ===== Render =====\n  function renderItem(item, cart) {\n    const symbol = cart.totals.currency_symbol || '$';\n    const minor = cart.totals.currency_minor_unit || 2;\n    const img = (item.images && item.images[0]) ? item.images[0].src : '';\n    const name = safeText(item.name);\n    const minQty = (item.quantity_limits && item.quantity_limits.minimum) ? item.quantity_limits.minimum : 1;\n    const maxQty = (item.quantity_limits && item.quantity_limits.maximum) ? item.quantity_limits.maximum : 9999;\n    const step = (item.quantity_limits && item.quantity_limits.multiple_of) ? item.quantity_limits.multiple_of : 1;\n    const cat = (item.categories && item.categories[0]) ? safeText(decodeEntities(item.categories[0].name)) : '';\n    const variantHTML = (item.variation && item.variation.length)\n      ? '<div class=\"mld-cart__item-variant\">' + item.variation.map(v => `<span><strong>${safeText(decodeEntities(v.attribute))}:<\/strong> ${safeText(decodeEntities(v.value))}<\/span>`).join('') + '<\/div>'\n      : '';\n    const unitPrice = fmtPrice(item.prices.price, minor, symbol);\n    const lineTotal = fmtPrice(item.totals.line_total, minor, symbol);\n\n    return `\n      <div class=\"mld-cart__item\" data-key=\"${item.key}\">\n        <div class=\"mld-cart__item-img\">\n          <a href=\"${item.permalink}\">\n            ${img ? `<img decoding=\"async\" src=\"${img}\" alt=\"${name}\" loading=\"lazy\">` : ''}\n          <\/a>\n        <\/div>\n        <div class=\"mld-cart__item-body\">\n          ${cat ? `<span class=\"mld-cart__item-cat\">${cat}<\/span>` : ''}\n          <a class=\"mld-cart__item-name\" href=\"${item.permalink}\">${name}<\/a>\n          ${variantHTML}\n          <div class=\"mld-cart__item-price-unit\">Precio unitario: <strong>${unitPrice}<\/strong><\/div>\n        <\/div>\n        <div class=\"mld-cart__item-controls\">\n          <div class=\"mld-cart__qty\" data-key=\"${item.key}\">\n            <button type=\"button\" data-action=\"dec\" aria-label=\"Disminuir\">\u2212<\/button>\n            <input type=\"number\" value=\"${item.quantity}\" min=\"${minQty}\" max=\"${maxQty}\" step=\"${step}\" inputmode=\"numeric\" aria-label=\"Cantidad\">\n            <button type=\"button\" data-action=\"inc\" aria-label=\"Aumentar\">+<\/button>\n          <\/div>\n          <div class=\"mld-cart__item-subtotal\">${lineTotal}<\/div>\n          <button type=\"button\" class=\"mld-cart__item-remove\" data-action=\"remove\" data-key=\"${item.key}\">\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\"><path d=\"M6 6 18 18M18 6 6 18\"\/><\/svg>\n            QUITAR\n          <\/button>\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  function renderShipping(cart) {\n    \/\/ Si no hay CP cargado todav\u00eda \u2192 pedirlo\n    if (!shippingPostcode) {\n      return `\n        <div class=\"mld-cart__shipping\">\n          <div class=\"mld-cart__shipping-title\">ENV\u00cdO<\/div>\n          <form class=\"mld-cart__cp-form\" id=\"mld-cart-cp-form\">\n            <input type=\"text\" name=\"postcode\" inputmode=\"numeric\" pattern=\"[0-9A-Za-z]{4,8}\"\n                   maxlength=\"8\" placeholder=\"Tu c\u00f3digo postal\" autocomplete=\"postal-code\" required>\n            <button type=\"submit\">CALCULAR<\/button>\n          <\/form>\n          <div class=\"mld-cart__cp-hint\">Ingres\u00e1 tu CP para ver opciones de env\u00edo y costo.<\/div>\n          ${shippingError ? `<div class=\"mld-cart__cp-error\">${safeText(shippingError)}<\/div>` : ''}\n        <\/div>\n      `;\n    }\n\n    const symbol = cart.totals.currency_symbol || '$';\n    const minor = cart.totals.currency_minor_unit || 2;\n    const pkgs = cart.shipping_rates || [];\n    const allRates = pkgs.flatMap(pkg => (pkg.shipping_rates || []).map(r => ({ ...r, package_id: pkg.package_id })));\n\n    let ratesHTML;\n    if (allRates.length === 0) {\n      ratesHTML = `<div class=\"mld-cart__cp-error\">\n        No encontramos m\u00e9todos de env\u00edo para el CP <strong>${safeText(shippingPostcode)}<\/strong>.\n        Prob\u00e1 con otro o coordin\u00e1 por WhatsApp.\n      <\/div>`;\n    } else {\n      ratesHTML = allRates.map(r => {\n        const priceNumber = parseFloat(r.price || '0') \/ Math.pow(10, minor);\n        const priceLabel = priceNumber > 0\n          ? fmtPrice(r.price, minor, symbol)\n          : 'GRATIS';\n        const desc = r.delivery_time || r.method_id || '';\n        return `\n          <label>\n            <input type=\"radio\" name=\"mld-shipping\"\n                   data-package=\"${safeText(String(r.package_id))}\"\n                   data-rate=\"${safeText(r.rate_id)}\"\n                   ${r.selected ? 'checked' : ''}>\n            <span>\n              <strong>${safeText(decodeEntities(r.name))}<\/strong>\n              ${desc ? `\u00b7 <small>${safeText(decodeEntities(desc))}<\/small>` : ''}\n            <\/span>\n            <span class=\"rate-price\">${priceLabel}<\/span>\n          <\/label>\n        `;\n      }).join('');\n    }\n\n    return `\n      <div class=\"mld-cart__shipping\">\n        <div class=\"mld-cart__shipping-title\">ENV\u00cdO<\/div>\n        ${ratesHTML}\n        <div class=\"mld-cart__cp-current\">\n          Enviar a CP <strong style=\"color:var(--mld-ink);\">${safeText(shippingPostcode)}<\/strong>\n          <button type=\"button\" id=\"mld-cart-cp-change\">Cambiar<\/button>\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  function renderSummary(cart) {\n    const symbol = cart.totals.currency_symbol || '$';\n    const minor = cart.totals.currency_minor_unit || 2;\n    const subtotal = fmtPrice(cart.totals.total_items, minor, symbol);\n    const total = fmtPrice(cart.totals.total_price, minor, symbol);\n    const discount = priceNum(cart.totals.total_discount, minor);\n    const shippingTotal = priceNum(cart.totals.total_shipping, minor);\n\n    const appliedCoupons = (cart.coupons || []).map(c => `\n      <div class=\"mld-cart__coupon-applied\">\n        <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M9 12l2 2 4-4\"\/><circle cx=\"12\" cy=\"12\" r=\"10\"\/><\/svg>\n        ${safeText(decodeEntities(c.code).toUpperCase())}\n        <button type=\"button\" data-action=\"remove-coupon\" data-code=\"${safeText(c.code)}\" aria-label=\"Quitar cup\u00f3n\">\n          <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\"><path d=\"M6 6 18 18M18 6 6 18\"\/><\/svg>\n        <\/button>\n      <\/div>\n    `).join('');\n\n    \/\/ Lista detallada de productos\n    const itemsBreakdown = (cart.items || []).map(it => {\n      const itName = safeText(it.name);\n      const itQty = it.quantity;\n      const itLine = fmtPrice(it.totals.line_total, minor, symbol);\n      return `\n        <li class=\"mld-cart__summary-item\">\n          <div class=\"mld-cart__summary-item-info\">\n            <span class=\"mld-cart__summary-item-name\">${itName}<\/span>\n            <span class=\"mld-cart__summary-item-qty\">${itQty} unid \u00b7 ${fmtPrice(it.prices.price, minor, symbol)} c\/u<\/span>\n          <\/div>\n          <span class=\"mld-cart__summary-item-total\">${itLine}<\/span>\n        <\/li>\n      `;\n    }).join('');\n\n    return `\n      <div class=\"mld-cart__summary\">\n        <h2><small>RESUMEN<\/small>Tu pedido.<\/h2>\n\n        <ul class=\"mld-cart__summary-items\">${itemsBreakdown}<\/ul>\n\n        <div class=\"mld-cart__summary-row\" style=\"border-top: 2px solid var(--mld-ink); margin-top: 4px; padding-top: 14px;\">\n          <span class=\"label\"><strong>Subtotal<\/strong> (${cart.items_count || 0} ${cart.items_count === 1 ? 'unidad' : 'unidades'})<\/span>\n          <span class=\"value\">${subtotal}<\/span>\n        <\/div>\n\n        ${discount > 0 ? `\n          <div class=\"mld-cart__summary-row is-discount\">\n            <span class=\"label\">Descuento cup\u00f3n<\/span>\n            <span class=\"value\">-${fmtPrice(cart.totals.total_discount, minor, symbol)}<\/span>\n          <\/div>\n        ` : ''}\n\n        ${renderShipping(cart)}\n\n        ${shippingTotal > 0 ? `\n          <div class=\"mld-cart__summary-row is-shipping\">\n            <span class=\"label\">Env\u00edo<\/span>\n            <span class=\"value\">${fmtPrice(cart.totals.total_shipping, minor, symbol)}<\/span>\n          <\/div>\n        ` : ''}\n\n        <div class=\"mld-cart__total\">\n          <span class=\"label\">TOTAL<\/span>\n          <span class=\"value\">${total}<\/span>\n        <\/div>\n\n        <a class=\"mld-cart__cta-wa\" id=\"mld-cart-checkout-primary\" href=\"\/minorista\/checkout\/\" style=\"text-decoration:none;margin-top:18px;\">\n          <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M5 12h14M13 5l7 7-7 7\"\/><\/svg>\n          FINALIZAR COMPRA\n        <\/a>\n        <a class=\"mld-cart__cta-checkout\" id=\"mld-cart-wa\" href=\"#\" target=\"_blank\" rel=\"noopener\">\n          <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M17.5 14.4c-.3-.1-1.6-.8-1.9-.9-.3-.1-.4-.1-.6.1-.2.3-.7.9-.8 1-.2.2-.3.2-.6.1-.3-.1-1.2-.5-2.3-1.4-.9-.8-1.4-1.8-1.6-2.1-.2-.3 0-.5.1-.6.1-.1.3-.3.4-.5.1-.2.2-.3.3-.5.1-.2 0-.4 0-.5-.1-.1-.6-1.4-.8-1.9-.2-.5-.4-.4-.6-.4h-.5c-.2 0-.5.1-.7.4-.2.3-.9.9-.9 2.2 0 1.3.9 2.5 1.1 2.7.1.2 1.8 2.7 4.3 3.8 1.5.6 2.1.7 2.9.5.4-.1 1.6-.6 1.8-1.3.2-.6.2-1.2.2-1.3-.1-.2-.3-.2-.6-.3zM12 2C6.5 2 2 6.5 2 12c0 1.8.5 3.5 1.3 4.9L2 22l5.2-1.4c1.4.7 3 1.2 4.8 1.2 5.5 0 10-4.5 10-10S17.5 2 12 2z\"\/><\/svg>\n          O CONSULTAR POR WHATSAPP\n        <\/a>\n\n        <a class=\"mld-cart__continue\" href=\"\/minorista\/tienda\/\">\u2190 Seguir comprando<\/a>\n\n        <div class=\"mld-cart__coupon\" id=\"mld-cart-coupon\">\n          <div class=\"mld-cart__coupon-head\" id=\"mld-cart-coupon-toggle\">\n            <span>\u00bfTEN\u00c9S UN CUP\u00d3N?<\/span>\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"m6 9 6 6 6-6\"\/><\/svg>\n          <\/div>\n          ${appliedCoupons}\n          <form class=\"mld-cart__coupon-form\" id=\"mld-cart-coupon-form\">\n            <input type=\"text\" name=\"code\" placeholder=\"C\u00f3digo del cup\u00f3n\" autocomplete=\"off\">\n            <button type=\"submit\">APLICAR<\/button>\n          <\/form>\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  function renderEmpty() {\n    return `\n      <div class=\"mld-cart__empty\">\n        <div class=\"mld-cart__empty-icon\">\n          <svg width=\"36\" height=\"36\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\"><path d=\"M3 4h2l2.4 12.2a2 2 0 0 0 2 1.6h8.7a2 2 0 0 0 2-1.6L22 8H6\"\/><circle cx=\"9\" cy=\"21\" r=\"1\"\/><circle cx=\"18\" cy=\"21\" r=\"1\"\/><\/svg>\n        <\/div>\n        <h2>Tu pedido est\u00e1 vac\u00edo.<\/h2>\n        <p>Todav\u00eda no agregaste productos. Recorr\u00e9 nuestras categor\u00edas o la l\u00ednea Dise\u00f1os Personalizados y encontr\u00e1 tu regalo.<\/p>\n        <a class=\"mld-cart__cta-wa\" href=\"\/minorista\/tienda\/\">\n          IR A LA TIENDA\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M5 12h14M13 5l7 7-7 7\"\/><\/svg>\n        <\/a>\n      <\/div>\n    `;\n  }\n\n  function renderAll() {\n    const body = $('#mld-cart-body');\n    if (!cartState || !cartState.items || cartState.items.length === 0) {\n      \/\/ Update hero counts to 0\n      $('[data-mld-cart-items-count]').textContent = '0';\n      $('[data-mld-cart-units-count]').textContent = '0';\n      $('[data-mld-cart-title]').textContent = 'TU PEDIDO';\n      $('[data-mld-cart-subtitle]').textContent = 'Vac\u00edo';\n      body.innerHTML = renderEmpty();\n      return;\n    }\n    \/\/ Hero counts\n    const totalUnits = cartState.items.reduce((s, it) => s + (it.quantity || 0), 0);\n    $('[data-mld-cart-items-count]').textContent = cartState.items.length;\n    $('[data-mld-cart-units-count]').textContent = totalUnits;\n    $('[data-mld-cart-title]').textContent = 'TU PEDIDO';\n    $('[data-mld-cart-subtitle]').textContent = 'Tu carrito';\n\n    body.innerHTML = `\n      <section class=\"mld-cart__body\">\n        <div>\n          <div class=\"mld-cart__items\">\n            ${cartState.items.map(it => renderItem(it, cartState)).join('')}\n          <\/div>\n        <\/div>\n        <div>\n          ${renderSummary(cartState)}\n        <\/div>\n      <\/section>\n    `;\n\n    \/\/ Update WhatsApp link\n    const wa = $('#mld-cart-wa');\n    if (wa) wa.setAttribute('href', buildWhatsAppLink(cartState));\n\n    bindEvents();\n  }\n\n  \/\/ ===== Event bindings =====\n  function bindEvents() {\n    \/\/ Qty buttons + inputs\n    $$('.mld-cart__qty').forEach(qtyEl => {\n      const key = qtyEl.getAttribute('data-key');\n      const input = qtyEl.querySelector('input');\n      const dec = qtyEl.querySelector('[data-action=\"dec\"]');\n      const inc = qtyEl.querySelector('[data-action=\"inc\"]');\n      const min = parseInt(input.min, 10) || 1;\n      const max = parseInt(input.max, 10) || 9999;\n      const step = parseInt(input.step, 10) || 1;\n\n      function pushUpdate(newQty) {\n        clearTimeout(pendingTimers[key]);\n        qtyEl.classList.add('is-updating');\n        pendingTimers[key] = setTimeout(() => {\n          updateQty(key, newQty).finally(() => qtyEl.classList.remove('is-updating'));\n        }, 400); \/\/ debounce\n      }\n      dec.addEventListener('click', () => {\n        let v = parseInt(input.value, 10) || min;\n        v = Math.max(min, v - step);\n        input.value = v;\n        pushUpdate(v);\n      });\n      inc.addEventListener('click', () => {\n        let v = parseInt(input.value, 10) || min;\n        v = Math.min(max, v + step);\n        input.value = v;\n        pushUpdate(v);\n      });\n      input.addEventListener('change', () => {\n        let v = parseInt(input.value, 10) || min;\n        if (v < min) v = min;\n        if (v > max) v = max;\n        input.value = v;\n        pushUpdate(v);\n      });\n    });\n\n    \/\/ Remove buttons\n    $$('[data-action=\"remove\"]').forEach(btn => {\n      btn.addEventListener('click', async () => {\n        const key = btn.getAttribute('data-key');\n        const itemEl = btn.closest('.mld-cart__item');\n        if (itemEl) itemEl.classList.add('is-removing');\n        await removeItem(key);\n      });\n    });\n\n    \/\/ Coupon toggle\n    const couponWrap = $('#mld-cart-coupon');\n    const couponToggle = $('#mld-cart-coupon-toggle');\n    if (couponToggle && couponWrap) {\n      couponToggle.addEventListener('click', () => couponWrap.classList.toggle('is-open'));\n    }\n    \/\/ Apply coupon\n    const couponForm = $('#mld-cart-coupon-form');\n    if (couponForm) {\n      couponForm.addEventListener('submit', (e) => {\n        e.preventDefault();\n        const code = couponForm.querySelector('input[name=\"code\"]').value.trim();\n        if (code) applyCoupon(code);\n      });\n    }\n    \/\/ Remove coupon\n    $$('[data-action=\"remove-coupon\"]').forEach(btn => {\n      btn.addEventListener('click', () => removeCoupon(btn.getAttribute('data-code')));\n    });\n\n    \/\/ ===== Env\u00edo: form CP =====\n    const cpForm = $('#mld-cart-cp-form');\n    if (cpForm) {\n      cpForm.addEventListener('submit', (e) => {\n        e.preventDefault();\n        const input = cpForm.querySelector('input[name=\"postcode\"]');\n        const cp = (input.value || '').trim();\n        if (!cp) return;\n        const btn = cpForm.querySelector('button');\n        btn.disabled = true; btn.textContent = '...';\n        updateShipping(cp);\n      });\n    }\n    \/\/ Cambiar CP\n    const cpChange = $('#mld-cart-cp-change');\n    if (cpChange) {\n      cpChange.addEventListener('click', () => clearShipping());\n    }\n    \/\/ Selecci\u00f3n de m\u00e9todo de env\u00edo\n    $$('input[name=\"mld-shipping\"]').forEach(radio => {\n      radio.addEventListener('change', () => {\n        if (!radio.checked) return;\n        const pkg = radio.getAttribute('data-package');\n        const rate = radio.getAttribute('data-rate');\n        if (pkg !== null && rate) selectShippingRate(pkg, rate);\n      });\n    });\n\n  }\n\n  \/\/ ===== Init =====\n  async function init() {\n    try {\n      cartState = await fetchCart();\n      \/\/ Si el cliente ya ingres\u00f3 CP en una visita previa, lo aplicamos para traer las shipping_rates reales\n      if (shippingPostcode) {\n        try {\n          cartState = await apiCall('\/cart\/update-customer', 'POST', {\n            shipping_address: { country: 'AR', postcode: shippingPostcode }\n          });\n        } catch(_) {\n          \/\/ Si falla, limpiamos para que el form vuelva a pedir CP\n          shippingPostcode = '';\n          sessionStorage.removeItem('mld-cart-postcode');\n        }\n      }\n      renderAll();\n    } catch(e) {\n      console.error('[mld-cart]', e);\n      $('#mld-cart-body').innerHTML = `\n        <div class=\"mld-cart__empty\">\n          <h2>No pudimos cargar tu pedido.<\/h2>\n          <p>Recarg\u00e1 la p\u00e1gina o contactanos por WhatsApp si el problema persiste.<\/p>\n          <a class=\"mld-cart__cta-wa\" href=\"https:\/\/wa.me\/5491136733707\" target=\"_blank\" rel=\"noopener\">\n            <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M17.5 14.4c-.3-.1-1.6-.8-1.9-.9-.3-.1-.4-.1-.6.1-.2.3-.7.9-.8 1-.2.2-.3.2-.6.1-.3-.1-1.2-.5-2.3-1.4-.9-.8-1.4-1.8-1.6-2.1-.2-.3 0-.5.1-.6.1-.1.3-.3.4-.5.1-.2.2-.3.3-.5.1-.2 0-.4 0-.5-.1-.1-.6-1.4-.8-1.9-.2-.5-.4-.4-.6-.4h-.5c-.2 0-.5.1-.7.4-.2.3-.9.9-.9 2.2 0 1.3.9 2.5 1.1 2.7.1.2 1.8 2.7 4.3 3.8 1.5.6 2.1.7 2.9.5.4-.1 1.6-.6 1.8-1.3.2-.6.2-1.2.2-1.3-.1-.2-.3-.2-.6-.3zM12 2C6.5 2 2 6.5 2 12c0 1.8.5 3.5 1.3 4.9L2 22l5.2-1.4c1.4.7 3 1.2 4.8 1.2 5.5 0 10-4.5 10-10S17.5 2 12 2z\"\/><\/svg>\n            WHATSAPP\n          <\/a>\n        <\/div>\n      `;\n    }\n  }\n\n  init();\n})();\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>&#x1f4e6; Para ver las opciones de env\u00edo a domicilio, ingres\u00e1 tu c\u00f3digo postal. Zona de coincidencia con el cliente \u00abEn todas partes\u00bb Eliminar art\u00edculo Imagen en miniatura Producto Precio Cantidad Subtotal &times; Azucarera Yerbera TRIP &#36;&nbsp;9.520,00 Azucarera Yerbera TRIP cantidad &#36;&nbsp;9.520,00 &times; Kit caf\u00e9 &#36;&nbsp;28.700,00 Kit caf\u00e9 cantidad &#36;&nbsp;28.700,00 Actualizar Aplicar Cupon Total Subtotal &#36;&nbsp;38.220,00 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-10","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/maldives.com.ar\/minorista\/wp-json\/wp\/v2\/pages\/10","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maldives.com.ar\/minorista\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/maldives.com.ar\/minorista\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/maldives.com.ar\/minorista\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/maldives.com.ar\/minorista\/wp-json\/wp\/v2\/comments?post=10"}],"version-history":[{"count":32,"href":"https:\/\/maldives.com.ar\/minorista\/wp-json\/wp\/v2\/pages\/10\/revisions"}],"predecessor-version":[{"id":1209,"href":"https:\/\/maldives.com.ar\/minorista\/wp-json\/wp\/v2\/pages\/10\/revisions\/1209"}],"wp:attachment":[{"href":"https:\/\/maldives.com.ar\/minorista\/wp-json\/wp\/v2\/media?parent=10"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}