{"id":396,"date":"2025-09-30T19:56:24","date_gmt":"2025-09-30T19:56:24","guid":{"rendered":"https:\/\/ruru.foodya.es\/?page_id=396"},"modified":"2026-08-25T11:47:55","modified_gmt":"2026-08-25T09:47:55","slug":"checkout","status":"publish","type":"page","link":"https:\/\/ruru.foodya.es\/index.php\/checkout\/","title":{"rendered":""},"content":{"rendered":"\n<h1 style=\"\n  text-align: center;\n  color: #f97316;\n  font-size: 32px;\n  font-weight: 800;\n  margin: 25px 0;\n  letter-spacing: -0.5px;\n\">\n  Checkout\n<\/h1>\n\n\n    <div id=\"foodya-checkout-wrapper\">\n\n      \n      <!-- PASO 1: M\u00c9TODO DE PAGO -->\n      <div class=\"foodya-checkout-card\">\n        <div class=\"foodya-checkout-header\">\n          <div class=\"foodya-checkout-step\">Paso 1<\/div>\n          <h2>Elige c\u00f3mo quieres pagar<\/h2>\n          <p class=\"foodya-checkout-subtitle\">Selecciona el m\u00e9todo que prefieras en el local.<\/p>\n        <\/div>\n\n        <div class=\"foodya-metodos-pago\">\n          <label class=\"foodya-radio-card\">\n            <input type=\"radio\" name=\"foodya_pago\" value=\"efectivo\" checked=\"checked\">\n            <div class=\"foodya-radio-inner\">\n              <div class=\"foodya-radio-title\">Pagar en efectivo<\/div>\n              <div class=\"foodya-radio-text\">\n                Podr\u00e1s pagar en efectivo en la mesa.\n              <\/div>\n            <\/div>\n          <\/label>\n\n          <label class=\"foodya-radio-card\">\n            <input type=\"radio\" name=\"foodya_pago\" value=\"tarjeta\">\n            <div class=\"foodya-radio-inner\">\n              <div class=\"foodya-radio-title\">Pagar con tarjeta en el local<\/div>\n              <div class=\"foodya-radio-text\">\n                Paga c\u00f3modamente con tarjeta en el TPV del restaurante.\n              <\/div>\n            <\/div>\n          <\/label>\n\n          <label class=\"foodya-radio-card foodya-radio-disabled\">\n            <input type=\"radio\" name=\"foodya_pago\" value=\"online\" disabled=\"disabled\">\n            <div class=\"foodya-radio-inner\">\n              <div class=\"foodya-radio-title\">Pago online<\/div>\n              <div class=\"foodya-radio-text\">\n                \u00a1Podr\u00e1 pagar si moverse de la mesa a trav\u00e9s de su tel\u00e9fono!\n              <\/div>\n              <div class=\"foodya-radio-badge\">No disponible<\/div>\n            <\/div>\n          <\/label>\n        <\/div>\n\n        <!-- \ud83d\udcf1 M\u00d3VIL DE LA PERSONA QUE PAGA (BIZUM) -->\n        <div class=\"foodya-phone-block\">\n          <label for=\"foodya-phone\" class=\"foodya-phone-label\">\n            M\u00f3vil de la persona que paga (Bizum)\n          <\/label>\n          <input\n            type=\"tel\"\n            id=\"foodya-phone\"\n            class=\"foodya-phone-input\"\n            placeholder=\"Ej: 600 123 456\"\n            inputmode=\"tel\"\n            autocomplete=\"tel\"\n          >\n          <p class=\"foodya-phone-help\">\n            Este n\u00famero aparecer\u00e1 en el ticket para que los dem\u00e1s puedan hacer Bizum.\n          <\/p>\n        <\/div>\n\n        <!-- TEXTOS EXPLICATIVOS DE CADA M\u00c9TODO -->\n        <div class=\"foodya-metodo-contenido\" id=\"foodya-pago-efectivo\">\n          <h3>Pagar en efectivo<\/h3>\n          <p>Podr\u00e1s pagar en efectivo en la mesa.<\/p>\n        <\/div>\n\n        <div class=\"foodya-metodo-contenido\" id=\"foodya-pago-tarjeta\" style=\"display:none;\">\n          <h3>Pagar con tarjeta en el local<\/h3>\n          <p>Podr\u00e1s pagar con tarjeta en el TPV del local.<\/p>\n        <\/div>\n\n        <div class=\"foodya-metodo-contenido\" id=\"foodya-pago-online\" style=\"display:none;\">\n          <h3>Pago online<\/h3>\n          <p>\u00a1Podr\u00e1 pagar si moverse de la mesa a trav\u00e9s de su tel\u00e9fono!.<\/p>\n        <\/div>\n\n        <div class=\"foodya-checkout-total-preview\">\n          <span id=\"foodya-metodo-preview\">\n            <!-- Rellenado por JS -->\n          <\/span>\n        <\/div>\n      <\/div>\n\n      <!-- PASO 2: RESUMEN DE PEDIDO -->\n      <div class=\"foodya-checkout-card\">\n        <div class=\"foodya-checkout-header\">\n          <div class=\"foodya-checkout-step\">Paso 2<\/div>\n          <h2>Revisa tu pedido<\/h2>\n          <p class=\"foodya-checkout-subtitle\">Puedes editar cada plato igual que en el preview.<\/p>\n        <\/div>\n\n        <div id=\"foodya-checkout-resumen\" class=\"foodya-checkout-resumen\">\n          <p>Cargando tu pedido...<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- BARRA FLOTANTE CHECKOUT -->\n      <div id=\"foodya-checkout-bottom\">\n        <div class=\"foodya-bottom-left\">\n          <div class=\"foodya-bottom-text\" id=\"foodya-bottom-text\"><\/div>\n        <\/div>\n        <div class=\"foodya-bottom-right\">\n          <button type=\"button\" id=\"foodya-btn-back\" class=\"foodya-bottom-btn ghost\">\n            \u2190 Volver al men\u00fa\n          <\/button>\n          <button type=\"button\" id=\"foodya-btn-finish\" class=\"foodya-bottom-btn primary\">\n            Confirmar pedido\n          <\/button>\n        <\/div>\n      <\/div>\n\n      <div id=\"foodya-confirm-modal\" class=\"fy-confirm-backdrop\" hidden>\n        <div class=\"fy-confirm-box\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"fy-confirm-title\">\n          <div class=\"fy-confirm-icon\">\ud83c\udf7d\ufe0f<\/div>\n          <h3 id=\"fy-confirm-title\">\u00bfTodo listo?<\/h3>\n          <p>Revisa tu pedido antes de enviarlo. Una vez entre en cocina, ya no se podr\u00e1 anular.<\/p>\n          <div class=\"fy-confirm-actions\">\n            <button type=\"button\" id=\"fy-confirm-review\">Seguir revisando<\/button>\n            <button type=\"button\" id=\"fy-confirm-send\">Enviar pedido<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <style>\n      .fy-confirm-backdrop{position:fixed;inset:0;z-index:999999;background:rgba(17,17,17,.48);display:flex;align-items:center;justify-content:center;padding:20px;box-sizing:border-box}.fy-confirm-backdrop[hidden]{display:none!important}.fy-confirm-box{width:min(440px,100%);background:#fff;border-radius:26px;padding:26px 22px;box-shadow:0 24px 80px rgba(0,0,0,.25);text-align:center;font-family:inherit}.fy-confirm-icon{font-size:42px}.fy-confirm-box h3{font-size:28px;margin:8px 0;color:#111;font-weight:900}.fy-confirm-box p{font-size:17px;line-height:1.4;color:#4b5563;font-weight:700;margin:0 0 22px}.fy-confirm-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px}.fy-confirm-actions button{border:0;border-radius:16px;padding:14px 12px;font-size:16px!important;font-weight:900;cursor:pointer}.fy-confirm-actions #fy-confirm-review{background:#f3f4f6;color:#111}.fy-confirm-actions #fy-confirm-send{background:#f97316;color:#fff}@media(max-width:520px){.fy-confirm-actions{grid-template-columns:1fr}.fy-confirm-actions #fy-confirm-send{order:-1}}\n      :root{\n        --fy-accent:#ff5722;\n        --fy-muted:#6b7280;\n        --fy-border:#e5e7eb;\n        --fy-soft:#f9fafb;\n        --fy-radius:16px;\n      }\n\n      body.foodya-checkout-page .fy-bottom{\n        display:none !important;\n      }\n\n      #foodya-checkout-wrapper{\n        max-width:900px;\n        margin:24px auto 80px;\n        padding:0 16px 24px;\n        font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;\n        background:#fff;\n      }\n\n      \/* \u2705 Evitar zoom en inputs en la p\u00e1gina de checkout (iOS) *\/\n      body.foodya-checkout-page input,\n      body.foodya-checkout-page select,\n      body.foodya-checkout-page textarea{\n        font-size:16px !important; \/* iOS no hace zoom con 16px o m\u00e1s *\/\n      }\n\n      \/* \ud83d\udd25 Banner de mesa (sin pill) *\/\n      .foodya-mesa-banner{\n        display:flex;\n        align-items:center;\n        gap:10px;\n        margin:0 0 16px;\n        padding:12px 14px;\n        border-radius:12px;\n        background:rgba(255,87,34,0.06);\n        border:1px solid rgba(255,87,34,0.28);\n      }\n      .foodya-mesa-text{\n        font-size:14px;\n      }\n\n      .foodya-checkout-card{\n        background:#ffffff;\n        border-radius:var(--fy-radius);\n        border:1px solid var(--fy-border);\n        box-shadow:0 10px 30px rgba(15,23,42,0.06);\n        padding:18px 18px 20px;\n        margin-bottom:18px;\n      }\n\n      .foodya-checkout-header{\n        display:flex;\n        flex-direction:column;\n        gap:4px;\n        margin-bottom:14px;\n      }\n\n      .foodya-checkout-step{\n        display:inline-flex;\n        align-self:flex-start;\n        padding:3px 10px;\n        border-radius:999px;\n        font-size:11px;\n        font-weight:700;\n        letter-spacing:.04em;\n        text-transform:uppercase;\n        background:rgba(255,87,34,0.08);\n        color:var(--fy-accent);\n      }\n\n      .foodya-checkout-header h2{\n        margin:0;\n        font-size:20px;\n        font-weight:800;\n      }\n\n      .foodya-checkout-subtitle{\n        margin:0;\n        font-size:13px;\n        color:var(--fy-muted);\n      }\n\n      .foodya-checkout-resumen{\n        border-radius:12px;\n        background:var(--fy-soft);\n        padding:10px;\n        overflow:hidden;\n      }\n\n      .foodya-resumen-tabla{\n        width:100%;\n        border-collapse:collapse;\n        background:#fff;\n        border-radius:10px;\n        overflow:hidden;\n      }\n      .foodya-resumen-tabla thead th{\n        background:#f3f4f6;\n        font-weight:700;\n        font-size:13px;\n        padding:8px 10px;\n        border-bottom:1px solid #e5e7eb;\n      }\n      .foodya-resumen-tabla td{\n        padding:8px 10px;\n        border-bottom:1px solid #f1f5f9;\n        font-size:13px;\n        vertical-align:top;\n      }\n      .foodya-resumen-tabla tfoot th{\n        background:#f9fafb;\n        font-size:14px;\n        padding:10px;\n        text-transform:uppercase;\n        letter-spacing:.04em;\n      }\n\n      .foodya-item-nombre{\n        font-weight:700;\n        font-size:14px;\n        display:inline-flex;\n        align-items:center;\n        gap:4px;\n        cursor:pointer;\n      }\n\n      .foodya-item-detalle{\n        margin-top:4px;\n        font-size:12px;\n        color:var(--fy-muted);\n        line-height:1.3;\n      }\n      .foodya-item-detalle span+span::before{\n        content:\" \u2022 \";\n      }\n      .foodya-item-compartido{\n        margin-top:3px;\n        font-size:12px;\n        color:#4b5563;\n      }\n\n      .foodya-item-edit-icon{\n        width:14px;\n        height:14px;\n        display:inline-block;\n        vertical-align:-2px;\n      }\n\n      .foodya-checkout-total-preview{\n        margin-top:10px;\n        display:flex;\n        justify-content:flex-end;\n        font-size:13px;\n        color:#111827;\n      }\n\n      .foodya-checkout-total-preview span{\n        padding:4px 10px;\n        border-radius:999px;\n        background:#f3f4f6;\n        font-weight:600;\n      }\n\n      .foodya-metodos-pago{\n        display:flex;\n        flex-direction:column;\n        gap:10px;\n        margin:6px 0 14px;\n      }\n\n      .foodya-radio-card{\n        display:block;\n        border-radius:12px;\n        border:1px solid var(--fy-border);\n        background:#fff;\n        padding:8px 10px;\n        cursor:pointer;\n        transition:all .15s ease-in-out;\n        position:relative;\n      }\n\n      .foodya-radio-card:hover{\n        border-color:var(--fy-accent);\n        box-shadow:0 6px 20px rgba(15,23,42,0.05);\n      }\n\n      .foodya-radio-card input[type=\"radio\"]{\n        position:absolute;\n        opacity:0;\n        pointer-events:none;\n      }\n\n      .foodya-radio-inner{\n        display:flex;\n        flex-direction:column;\n        gap:3px;\n        padding-left:28px;\n        position:relative;\n      }\n\n      .foodya-radio-inner::before{\n        content:\"\";\n        position:absolute;\n        left:2px;\n        top:4px;\n        width:16px;\n        height:16px;\n        border-radius:999px;\n        border:2px solid #d1d5db;\n        background:#fff;\n        box-sizing:border-box;\n      }\n\n      .foodya-radio-inner::after{\n        content:\"\";\n        position:absolute;\n        left:6px;\n        top:8px;\n        width:8px;\n        height:8px;\n        border-radius:999px;\n        background:var(--fy-accent);\n        transform:scale(0);\n        opacity:0;\n        transition:transform .12s ease-out, opacity .12s ease-out;\n      }\n\n      .foodya-radio-card input[type=\"radio\"]:checked + .foodya-radio-inner{\n        color:#111827;\n      }\n\n      .foodya-radio-card input[type=\"radio\"]:checked + .foodya-radio-inner::before{\n        border-color:var(--fy-accent);\n      }\n\n      .foodya-radio-card input[type=\"radio\"]:checked + .foodya-radio-inner::after{\n        transform:scale(1);\n        opacity:1;\n      }\n\n      .foodya-radio-title{\n        font-weight:700;\n        font-size:14px;\n      }\n\n      .foodya-radio-text{\n        font-size:12px;\n        color:var(--fy-muted);\n      }\n\n      .foodya-radio-badge{\n        margin-top:4px;\n        align-self:flex-start;\n        font-size:11px;\n        padding:2px 8px;\n        border-radius:999px;\n        background:#f3f4f6;\n        color:#6b7280;\n        text-transform:uppercase;\n        letter-spacing:.05em;\n        font-weight:600;\n      }\n\n      .foodya-radio-disabled{\n        opacity:.6;\n        cursor:not-allowed;\n      }\n\n      .foodya-metodo-contenido{\n        padding:12px;\n        border-radius:12px;\n        background:#f9fafb;\n        border:1px dashed #d1d5db;\n        font-size:13px;\n        margin-bottom:8px;\n      }\n      .foodya-metodo-contenido h3{\n        margin:0 0 4px;\n        font-size:14px;\n        font-weight:700;\n      }\n\n      \/* \ud83d\udcf1 Estilos m\u00f3vil Bizum *\/\n      .foodya-phone-block{\n        margin:12px 0 8px;\n        display:flex;\n        flex-direction:column;\n        gap:4px;\n      }\n      .foodya-phone-label{\n        font-size:13px;\n        font-weight:600;\n      }\n      .foodya-phone-input{\n        border-radius:10px;\n        border:1px solid var(--fy-border);\n        padding:8px 10px;\n        font-size:16px; \/* subido a 16px para evitar zoom *\/\n        max-width:260px;\n      }\n      .foodya-phone-input:focus{\n        outline:none;\n        border-color:var(--fy-accent);\n        box-shadow:0 0 0 1px rgba(255,87,34,0.25);\n      }\n      .foodya-phone-help{\n        font-size:11px;\n        color:var(--fy-muted);\n      }\n\n      #foodya-checkout-bottom{\n        position:fixed;\n        left:0;\n        right:0;\n        bottom:0;\n        z-index:99980;\n        background:#ffffff;\n        border-top:1px solid var(--fy-border);\n        color:#111;\n        padding:10px 12px;\n        display:flex;\n        justify-content:space-between;\n        align-items:center;\n        gap:10px;\n      }\n\n      .foodya-bottom-left{\n        flex:1;\n        min-width:0;\n      }\n\n      .foodya-bottom-text{\n        font-weight:800;\n        font-size:14px;\n        white-space:nowrap;\n        overflow:hidden;\n        text-overflow:ellipsis;\n      }\n\n      .foodya-bottom-right{\n        display:flex;\n        gap:8px;\n      }\n\n      .foodya-bottom-btn{\n        border-radius:12px;\n        padding:10px 14px;\n        font-size:14px;\n        font-weight:800;\n        border:0;\n        cursor:pointer;\n      }\n\n      .foodya-bottom-btn.ghost{\n        background:#f3f4f6;\n        color:#111827;\n      }\n\n      .foodya-bottom-btn.primary{\n        background:var(--fy-accent);\n        color:#ffffff;\n      }\n\n      @media(max-width:600px){\n        #foodya-checkout-wrapper{\n          padding:0 10px 80px;\n        }\n        .foodya-checkout-card{\n          padding:14px 12px 16px;\n        }\n        .foodya-resumen-tabla thead th,\n        .foodya-resumen-tabla td{\n          font-size:12px;\n        }\n        .foodya-bottom-text{\n          font-size:13px;\n        }\n        .foodya-bottom-btn{\n          padding:8px 10px;\n          font-size:13px;\n        }\n      }\n    <\/style>\n\n    <script>\n    document.addEventListener('DOMContentLoaded', function(){\n      document.body.classList.add('foodya-checkout-page');\n\n      \/\/ Ocultar barra inferior del men\u00fa si existe\n      var fyBottom = document.querySelector('.fy-bottom');\n      if (fyBottom) {\n        fyBottom.style.display = 'none';\n      }\n\n      var root      = document.getElementById('foodya-checkout-resumen');\n      var preview   = document.getElementById('foodya-metodo-preview');\n      var bloqueEf  = document.getElementById('foodya-pago-efectivo');\n      var bloqueTa  = document.getElementById('foodya-pago-tarjeta');\n      var bloqueOn  = document.getElementById('foodya-pago-online');\n      var radios    = document.querySelectorAll('input[name=\"foodya_pago\"]');\n      var bottomTxt = document.getElementById('foodya-bottom-text');\n      var phoneInput = document.getElementById('foodya-phone');\n\n      if (!root) {\n        return;\n      }\n\n      \/\/ \ud83d\udd39 Valores pasados desde PHP al JS\n      var mesaParam       = \"\";\n      var successUrl      = \"https:\\\/\\\/ruru.foodya.es\\\/index.php\\\/ticket\\\/\";\n      var fallbackMenuUrl = \"https:\\\/\\\/ruru.foodya.es\\\/index.php\\\/menuceqfveq5498\\\/\";\n      var apiUrl          = \"https:\\\/\\\/ruru.foodya.es\\\/index.php\\\/wp-json\\\/foodya\\\/v1\\\/ticket\";\n      var apiNonce        = \"5eccd530d8\";\n\n      function loadCart(){\n        try{\n          var raw = localStorage.getItem('foodya:cart');\n          return raw ? JSON.parse(raw) : [];\n        }catch(e){\n          return [];\n        }\n      }\n\n      function escHtml(s){\n        return String(s == null ? '' : s).replace(\/[&<>\"']\/g,function(c){\n          return {'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#039;'}[c];\n        });\n      }\n\n      function money(n){\n        try{\n          return new Intl.NumberFormat(\n            'es-ES',\n            {style:'currency',currency:'EUR'}\n          ).format(n || 0);\n        }catch(e){\n          n = n || 0;\n          return n.toFixed(2) + ' \u20ac';\n        }\n      }\n\n      function renderResumen(){\n        var items = loadCart();\n        if (!items.length){\n          root.innerHTML = '<p>Tu pedido est\u00e1 vac\u00edo.<\/p>';\n          if (bottomTxt) {\n            var txtEmpty = 'Tu pedido est\u00e1 vac\u00edo';\n            if (mesaParam) {\n              txtEmpty = 'Mesa ' + mesaParam + ' \u2014 ' + txtEmpty;\n            }\n            bottomTxt.textContent = txtEmpty;\n          }\n          return;\n        }\n\n        var total = 0;\n        var count = 0;\n        var html  = '<table class=\"foodya-resumen-tabla\">';\n        html     += '<thead><tr><th>Producto<\/th><th style=\"text-align:center\">Cant.<\/th><th style=\"text-align:right\">Total<\/th><\/tr><\/thead><tbody>';\n\n        items.forEach(function(it){\n          var qty   = parseInt(it.qty || 1, 10) || 1;\n          var line  = (it.price || 0) * qty;\n          total    += line;\n          count    += qty;\n\n          var detallePartes = [];\n\n          if (it.size){\n            var txtSize = 'Tama\u00f1o: ' + it.size;\n            if (it.sizePrice){\n              txtSize += ' (' + money(it.sizePrice) + ')';\n            }\n            detallePartes.push('<span>' + txtSize + '<\/span>');\n          }\n\n          if (Array.isArray(it.ingredients)){\n            var removed = it.ingredients\n              .filter(function(ing){ return ing && ing.included === false; })\n              .map(function(ing){ return ing.name; });\n            if (removed.length){\n              detallePartes.push('<span>Sin: ' + removed.join(', ') + '<\/span>');\n            }\n          }\n\n          if (Array.isArray(it.extras) && it.extras.length){\n            var extrasTxt = it.extras.map(function(ex){\n              var label = ex.name || '';\n              if (ex.price){\n                label += ' (' + money(ex.price) + ')';\n              }\n              return label;\n            }).join(', ');\n            detallePartes.push('<span>Extras: ' + extrasTxt + '<\/span>');\n          }\n\n          if (Array.isArray(it.guarniciones) && it.guarniciones.length){\n            var guaTxt = it.guarniciones.map(function(g){\n              var label = g.name || '';\n              if (g.price){\n                label += ' (' + money(g.price) + ')';\n              }\n              return label;\n            }).join(', ');\n            detallePartes.push('<span>Guarniciones: ' + guaTxt + '<\/span>');\n          }\n\n          var compartidoHtml = '';\n          if (Array.isArray(it.guests) && it.guests.length > 1){\n            compartidoHtml = '<div class=\"foodya-item-compartido\">\ud83e\udd1d Compartido con: '\n              + it.guests.join(', ')\n              + '<\/div>';\n          }\n\n          var pencilSVG = '<svg class=\"foodya-item-edit-icon\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path fill=\"#ff9800\" d=\"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25z\"\/><path fill=\"#ff9800\" d=\"M20.71 7.04a1 1 0 0 0 0-1.41L18.37 3.29a1 1 0 0 0-1.41 0L15.13 5.12l3.75 3.75 1.83-1.83z\"\/><\/svg>';\n\n          html += '<tr class=\"foodya-resumen-item\" data-id=\"' + (it.id || '') + '\">';\n          html +=   '<td>';\n          html +=     '<div class=\"foodya-item-nombre foodya-resumen-edit\" title=\"Editar producto\">'\n                     + (it.name || '') + pencilSVG + '<\/div>';\n\n          if (detallePartes.length){\n            html += '<div class=\"foodya-item-detalle\">' + detallePartes.join('') + '<\/div>';\n          }\n          if (compartidoHtml){\n            html += compartidoHtml;\n          }\n          if (it.note && String(it.note).trim()){\n            html += '<div class=\"foodya-item-nota\" style=\"margin-top:6px;font-size:13px;line-height:1.35;color:#6b7280;\">\ud83d\udcdd Nota: ' + escHtml(String(it.note).trim()) + '<\/div>';\n          }\n\n          html +=   '<\/td>';\n          html +=   '<td style=\"text-align:center;\">' + qty + '<\/td>';\n          html +=   '<td style=\"text-align:right;\">' + money(line) + '<\/td>';\n          html += '<\/tr>';\n        });\n\n        \/\/ Paso 2: Solo mostramos l\u00edneas de productos.\n        \/\/ El desglose fiscal (base\/IVA\/total) se muestra en el Paso 3 y en el ticket.\n        html += '<\/tbody>';\n        html += '<\/table>';\n\n        root.innerHTML = html;\n\n        if (bottomTxt){\n          var txt = count + ' art\u00edculo' + (count !== 1 ? 's' : '') + ' \u2014 ' + money(total) + ' (IVA incl.)';\n          if (mesaParam) {\n            txt = 'Mesa ' + mesaParam + ' \u2014 ' + txt;\n          }\n          bottomTxt.textContent = txt;\n        }\n      }\n\n      renderResumen();\n\n      window.addEventListener('storage', function(e){\n        if (!e || !e.key || e.key === 'foodya:cart') {\n          renderResumen();\n        }\n      });\n\n      document.addEventListener('click', function(e){\n        var target = e.target.closest('.foodya-resumen-edit');\n        if (!target) {\n          return;\n        }\n\n        var tr = target.closest('.foodya-resumen-item');\n        if (!tr) {\n          return;\n        }\n\n        var id = tr.getAttribute('data-id');\n\n        var backdrop = document.getElementById('fy-backdrop');\n        var cart     = document.getElementById('fy-cart');\n        if (backdrop) {\n          backdrop.style.display = 'block';\n        }\n        if (cart) {\n          cart.classList.add('open');\n        }\n\n        if (id && typeof window.editCartItem === 'function'){\n          window.editCartItem(id);\n        }\n      });\n\n      function actualizarMetodo(){\n        var sel    = document.querySelector('input[name=\"foodya_pago\"]:checked');\n        var metodo = sel ? sel.value : 'efectivo';\n\n        if (bloqueEf) {\n          bloqueEf.style.display = (metodo === 'efectivo') ? 'block' : 'none';\n        }\n        if (bloqueTa) {\n          bloqueTa.style.display = (metodo === 'tarjeta') ? 'block' : 'none';\n        }\n        if (bloqueOn) {\n          bloqueOn.style.display = (metodo === 'online') ? 'block' : 'none';\n        }\n\n        if (preview){\n          if (metodo === 'efectivo'){\n            preview.textContent = 'M\u00e9todo de pago: Efectivo';\n          } else if (metodo === 'tarjeta'){\n            preview.textContent = 'M\u00e9todo de pago: Tarjeta en el local';\n          } else if (metodo === 'online'){\n            preview.textContent = 'M\u00e9todo de pago: Online';\n          }\n        }\n\n        return metodo;\n      }\n\n      radios.forEach(function(r){\n        r.addEventListener('change', actualizarMetodo);\n      });\n      actualizarMetodo();\n\n      var backBtn   = document.getElementById('foodya-btn-back');\n      var finishBtn = document.getElementById('foodya-btn-finish');\n\n      if (backBtn){\n        backBtn.addEventListener('click', function(){\n          if (document.referrer){\n            history.back();\n          } else {\n            window.location.href = fallbackMenuUrl;\n          }\n        });\n      }\n\n      if (finishBtn){\n        window.FY_CHECKOUT_CONFIRM_NATIVE=1;\n        var sending=false;\n        var submitStatus=document.createElement('p');\n        submitStatus.id='foodya-submit-status';submitStatus.setAttribute('role','status');submitStatus.setAttribute('aria-live','polite');\n        finishBtn.insertAdjacentElement('afterend',submitStatus);\n        function sendingState(active,message){sending=active;finishBtn.disabled=active;if(confirmSend)confirmSend.disabled=active;finishBtn.setAttribute('aria-busy',String(active));submitStatus.textContent=message;}\n        var confirmModal=document.getElementById('foodya-confirm-modal');\n        var confirmReview=document.getElementById('fy-confirm-review');\n        var confirmSend=document.getElementById('fy-confirm-send');\n        function closeConfirm(){ if(confirmModal){confirmModal.hidden=true; document.body.style.overflow='';} }\n        if(confirmReview) confirmReview.addEventListener('click',closeConfirm);\n        if(confirmModal) confirmModal.addEventListener('click',function(e){ if(e.target===confirmModal) closeConfirm(); });\n        if(confirmSend) confirmSend.addEventListener('click',function(){if(sending)return;closeConfirm();finishBtn.dataset.fyConfirmed='1';finishBtn.click();});\n        finishBtn.addEventListener('click', function(){\n          if(sending)return;\n          if(finishBtn.dataset.fyConfirmed!=='1'){\n            if(confirmModal){confirmModal.hidden=false;document.body.style.overflow='hidden';}\n            return;\n          }\n          delete finishBtn.dataset.fyConfirmed;\n          var metodo = actualizarMetodo();\n          var items  = loadCart();\n\n          if (!items.length){\n            alert('Tu pedido est\u00e1 vac\u00edo.');\n            return;\n          }\n\n          var phone = phoneInput ? (phoneInput.value || '').trim() : '';\n          if (phone && phone.length < 6) {\n            alert('El m\u00f3vil para Bizum parece demasiado corto.');\n            return;\n          }\n\n          var ticket = {\n            items: items,\n            metodo: metodo,\n            \/\/ Para el pago online, distinguimos legalmente entre:\n            \/\/ - \"single\": un solo pedido (una persona paga todo)\n            \/\/ - \"split\": pedidos individuales por comensal\n            paymode: (function(){\n              try{ return localStorage.getItem('foodya:paymode') || null; }catch(e){ return null; }\n            })(),\n            mesa: mesaParam || null,\n            telefono: phone || null, \/\/ m\u00f3vil de quien paga (Bizum)\n            ts: Date.now()\n          };\n          if(window.FY_ZONECAT){if(window.FY_ZONECAT.context){ticket.zona=window.FY_ZONECAT.context(mesaParam).zona||'';}}\n          var fingerprint=JSON.stringify(Object.assign({},ticket,{ts:0}));\n          var attempt=null;\n          try{attempt=JSON.parse(sessionStorage.getItem('foodya:checkout-attempt')||'null');}catch(e){}\n          if(!attempt||attempt.fingerprint!==fingerprint){\n            var id=crypto.randomUUID?crypto.randomUUID():Array.from(crypto.getRandomValues(new Uint8Array(20)),function(x){return x.toString(16).padStart(2,'0');}).join('');\n            attempt={id:id,fingerprint:fingerprint};\n          }\n          ticket.client_request_id=attempt.id;\n          try{sessionStorage.setItem('foodya:checkout-attempt',JSON.stringify(attempt));}catch(e){}\n          sendingState(true,'Enviando pedido\u2026');\n          var controller=new AbortController();\n          var sendTimeout=setTimeout(function(){controller.abort();},20000);\n\n          try{\n            localStorage.setItem('foodya:lastTicket', JSON.stringify(ticket));\n          }catch(e){}\n\n          fetch(apiUrl, {\n            method: 'POST',\n            signal:controller.signal,\n            headers: {\n              'Content-Type': 'application\/json',\n              'X-WP-Nonce': apiNonce\n            },\n            body: JSON.stringify(ticket)\n          })\n          .then(function(r){\n            if (!r.ok){\n              console.error('Error HTTP al crear ticket', r.status);\n              return r.json().catch(function(){return {};}).then(function(error){throw new Error(error.message||('HTTP '+r.status));});\n            }\n            return r.json();\n          })\n          .then(function(data){\n            console.log('Respuesta ticket API', data);\n            if (!data || !data.url){\n              throw new Error('Falta el enlace del ticket. Reintenta para recuperar el mismo pedido.');\n            }\n            clearTimeout(sendTimeout);\n            sendingState(true,'Pedido confirmado. Abriendo tu ticket\u2026');\n            try{sessionStorage.removeItem('foodya:checkout-attempt');}catch(e){}\n            \/\/ Opcional: vaciar carrito:\n            \/\/ localStorage.removeItem('foodya:cart');\n            window.location.href = data.url; \/\/ URL con ?k=TOKEN\n          })\n          .catch(function(err){\n            clearTimeout(sendTimeout);\n            console.error('Error creando ticket', err);\n            sendingState(false,err.name==='AbortError'?'La confirmaci\u00f3n est\u00e1 tardando. Puedes reintentar: recuperaremos el mismo pedido sin duplicarlo.':(err.message||'No se pudo confirmar. Reintenta para recuperar el mismo pedido.'));\n            \/\/ Fallback opcional:\n            \/\/ window.location.href = successUrl;\n          });\n        });\n      }\n    });\n    <\/script>\n    \n","protected":false},"excerpt":{"rendered":"<p>Checkout<\/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-396","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/ruru.foodya.es\/index.php\/wp-json\/wp\/v2\/pages\/396","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ruru.foodya.es\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ruru.foodya.es\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ruru.foodya.es\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ruru.foodya.es\/index.php\/wp-json\/wp\/v2\/comments?post=396"}],"version-history":[{"count":13,"href":"https:\/\/ruru.foodya.es\/index.php\/wp-json\/wp\/v2\/pages\/396\/revisions"}],"predecessor-version":[{"id":1805,"href":"https:\/\/ruru.foodya.es\/index.php\/wp-json\/wp\/v2\/pages\/396\/revisions\/1805"}],"wp:attachment":[{"href":"https:\/\/ruru.foodya.es\/index.php\/wp-json\/wp\/v2\/media?parent=396"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}