{"id":1717,"date":"2026-06-08T07:59:28","date_gmt":"2026-06-08T07:59:28","guid":{"rendered":"https:\/\/sabotiga.es\/?page_id=1717"},"modified":"2026-06-08T07:59:30","modified_gmt":"2026-06-08T07:59:30","slug":"navigator","status":"publish","type":"page","link":"https:\/\/sabotiga.es\/en\/navigator\/","title":{"rendered":"navigator"},"content":{"rendered":"<p><!DOCTYPE html><br \/>\n<html lang=\"es\"><br \/>\n<head><br \/>\n<meta charset=\"UTF-8\"><br \/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><br \/>\n<title>\u2693 Sabotiga Navigator<\/title><br \/>\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/xlsx\/0.18.5\/xlsx.full.min.js\"><\/script>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Press+Start+2P&#038;family=VT323&#038;display=swap\" rel=\"stylesheet\">\n<style>\n*{box-sizing:border-box;margin:0;padding:0;}\n:root{\n  --ocean:#0a1628;--navy:#1a3a5c;--plank:#2c1a0e;--wood:#5c3a1e;\n  --rope:#c8a050;--teal:#00b4d8;--gold:#ffd166;--red:#ef476f;--green:#06d6a0;\n  --chalk:#f8f4e8;--dim:#4a6a8a;--floor:#c8a46e;--wall:#2a4a6a;--desk:#9a6535;--chair:#c8a050;\n}\nhtml,body{height:100%;background:var(--ocean);color:var(--chalk);font-family:'Press Start 2P',monospace;image-rendering:pixelated;}\nbody{display:flex;flex-direction:column;overflow:hidden;}\n#titlebar{height:44px;background:var(--plank);border-bottom:3px solid var(--rope);display:flex;align-items:center;gap:10px;padding:0 14px;flex-shrink:0;box-shadow:0 3px 0 #1a0e05;}\n.wheel{font-size:16px;animation:spin 18s linear infinite;}\n@keyframes spin{to{transform:rotate(360deg)}}\n#title-text{font-size:6px;color:var(--gold);letter-spacing:2px;flex:1;text-align:center;}\n#clock{font-size:5px;color:var(--dim);font-family:'VT323',monospace;}\n#main{flex:1;display:flex;overflow:hidden;min-height:0;}\n.side{width:300px;background:var(--plank);flex-shrink:0;overflow-y:auto;display:flex;flex-direction:column;}\n.side::before{display:none;}\n#side-l{border-right:3px solid var(--rope);}\n#side-r{width:280px;border-left:3px solid var(--rope);}\n.psec{padding:12px 14px;border-bottom:2px solid rgba(200,160,80,.18);}\n.plbl{font-size:6px;color:var(--rope);letter-spacing:2px;margin-bottom:10px;}\n#scene{flex:1;min-width:200px;max-width:320px;position:relative;overflow:hidden;background:var(--floor);background-image:repeating-linear-gradient(90deg,rgba(0,0,0,.06) 0,rgba(0,0,0,.06) 1px,transparent 1px,transparent 24px),repeating-linear-gradient(180deg,rgba(0,0,0,.06) 0,rgba(0,0,0,.06) 1px,transparent 1px,transparent 24px);}\n#wall{position:absolute;top:0;left:0;right:0;height:52px;background:var(--wall);border-bottom:4px solid #1e3a54;z-index:1;}\n.porthole{position:absolute;top:8px;width:34px;height:34px;border-radius:50%;border:4px solid var(--rope);background:radial-gradient(circle at 35% 35%,#1a5fa8,#0a2a4a);box-shadow:inset 0 0 8px rgba(0,0,0,.6),0 0 0 2px #8b6020;z-index:2;overflow:hidden;}\n.porthole::after{content:'';position:absolute;inset:0;background:linear-gradient(var(--rope) 0,var(--rope) 100%) center\/2px 100% no-repeat,linear-gradient(var(--rope) 0,var(--rope) 100%) center\/100% 2px no-repeat;border-radius:50%;opacity:.5;}\n#rope-line{position:absolute;top:46px;left:0;right:0;height:3px;background:repeating-linear-gradient(90deg,var(--rope) 0,var(--rope) 5px,#8b6020 5px,#8b6020 7px);z-index:3;}\n.flag{position:absolute;top:36px;z-index:4;width:0;height:0;}\n#rug{position:absolute;left:60px;top:130px;width:220px;height:110px;background:#1a4a6a;border:3px solid #0d3050;border-radius:4px;opacity:.7;z-index:1;}\n.desk-wrap{position:absolute;z-index:3;}\n.desk-top{background:var(--desk);border:3px solid var(--wood);box-shadow:0 4px 0 rgba(0,0,0,.3);position:relative;}\n.monitor{position:absolute;background:#1a2a3a;border:2px solid #0a1a2a;}\n.mscreen{background:#00ff88;animation:mf 3s infinite;}\n.mscreen.blue{background:#00b4d8;}\n@keyframes mf{0%,100%{opacity:1}96%{opacity:.7}}\n.chair-wrap{position:absolute;z-index:2;}\n.chair-back{background:#a07830;border-radius:2px 2px 0 0;}\n.chair-seat{background:var(--chair);border:2px solid #a07830;border-radius:3px;}\n.plant-wrap{position:absolute;z-index:5;}\n.leaves{width:18px;height:16px;background:#2d6a2d;border-radius:50% 50% 20% 20%;border:2px solid #1a4a1a;margin-left:-2px;margin-top:-4px;position:relative;}\n.leaves::before{content:'';position:absolute;width:10px;height:12px;background:#2d6a2d;border-radius:50%;top:-6px;left:4px;border:2px solid #1a4a1a;}\n.pot{width:14px;height:10px;background:#c87850;border:2px solid #8b5a30;border-radius:0 0 3px 3px;}\n.npc-wrap{position:absolute;z-index:6;}\n#sailor{position:absolute;z-index:10;transition:left .9s cubic-bezier(.45,0,.55,1),top .9s cubic-bezier(.45,0,.55,1);}\n#bubble{position:absolute;bottom:44px;left:50%;transform:translateX(-50%);background:var(--navy);border:2px solid var(--teal);padding:4px 7px;font-size:4px;color:var(--teal);white-space:nowrap;min-width:80px;text-align:center;line-height:1.8;z-index:20;}\n#bubble::after{content:'';position:absolute;bottom:-7px;left:50%;transform:translateX(-50%);border:5px solid transparent;border-top-color:var(--teal);}\n#sailorCanvas{image-rendering:pixelated;width:24px;height:28px;display:block;}\n.tabs{display:flex;gap:2px;margin-bottom:10px;}\n.tab{font-family:'Press Start 2P',monospace;font-size:7px;padding:6px 8px;cursor:pointer;border:2px solid rgba(200,160,80,.25);color:var(--dim);background:transparent;}\n.tab.on{border-color:var(--gold);color:var(--gold);background:rgba(255,209,102,.07);}\n.field{display:flex;flex-direction:column;gap:4px;margin-bottom:9px;}\n.field label{font-size:5px;color:var(--rope);letter-spacing:1px;}\n.field input{background:rgba(0,0,0,.4);border:2px solid var(--navy);color:var(--chalk);font-family:'VT323',monospace;font-size:16px;padding:6px 8px;outline:none;width:100%;}\n.field input:focus{border-color:var(--teal);}\n#dropzone{border:2px dashed var(--dim);padding:16px 10px;text-align:center;cursor:pointer;font-size:7px;color:var(--dim);line-height:2.4;margin-bottom:10px;transition:all .2s;}\n#dropzone:hover,#dropzone.over{border-color:var(--gold);color:var(--gold);}\n.btn{font-family:'Press Start 2P',monospace;font-size:6px;padding:8px 12px;border:none;cursor:pointer;letter-spacing:1px;display:inline-flex;align-items:center;gap:5px;}\n.btn:active{transform:translate(2px,2px);}\n.btn:disabled{opacity:.3;cursor:not-allowed;}\n.gold{background:var(--gold);color:var(--plank);box-shadow:3px 3px 0 #8b6020;}\n.teal{background:var(--teal);color:var(--plank);box-shadow:3px 3px 0 #005f73;}\n.red{background:var(--red);color:#fff;box-shadow:3px 3px 0 #8b0000;}\n.sm{padding:6px 10px;font-size:5px;}\n.row{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-top:6px;}\n.tbl-scroll{max-height:140px;overflow:auto;}\ntable{width:100%;border-collapse:collapse;font-size:5px;}\nth{background:var(--navy);color:var(--gold);padding:4px 6px;text-align:left;}\ntd{padding:4px 6px;border-bottom:1px solid rgba(26,58,92,.7);font-family:'VT323',monospace;font-size:14px;}\ntr:hover td{background:rgba(0,180,216,.07);}\n.empty{font-size:6px;color:var(--dim);text-align:center;padding:16px;line-height:2.4;}\n#log{background:rgba(0,0,0,.4);border:2px solid var(--navy);height:140px;overflow-y:auto;padding:6px 8px;font-family:'VT323',monospace;font-size:14px;line-height:1.6;}\n#prog-bar{height:12px;background:rgba(0,0,0,.4);border:2px solid var(--navy);margin:6px 0;overflow:hidden;}\n#prog-fill{height:100%;background:var(--green);width:0%;transition:width .5s;background-image:repeating-linear-gradient(90deg,var(--green) 0,var(--green) 5px,#04a87e 5px,#04a87e 10px);}\n.steps{display:flex;gap:2px;margin:6px 0;}\n.step{flex:1;padding:3px;text-align:center;font-size:5px;border:2px solid rgba(26,58,92,.7);color:var(--dim);}\n.step.active{border-color:var(--gold);color:var(--gold);}\n.step.done{border-color:var(--green);color:var(--green);}\n.step.err{border-color:var(--red);color:var(--red);}\n#result-card{display:none;border:2px solid var(--green);background:rgba(6,214,160,.06);padding:10px;margin-top:6px;text-align:center;}\n#result-id{font-size:26px;color:var(--green);font-family:'VT323',monospace;}\n.compass{width:40px;height:40px;border-radius:50%;border:3px solid var(--rope);background:radial-gradient(circle,var(--navy),var(--ocean));margin:8px auto;position:relative;}\n.needle{width:2px;height:16px;background:linear-gradient(var(--red) 50%,var(--chalk) 50%);position:absolute;left:50%;top:50%;margin-left:-1px;margin-top:-16px;transform-origin:bottom center;animation:rotn 6s linear infinite;}\n@keyframes rotn{to{transform:rotate(360deg)}}\n.sdot{width:6px;height:6px;display:inline-block;animation:blink 1s infinite;margin-right:6px;}\n@keyframes blink{0%,100%{opacity:1}50%{opacity:0}}\n.badge{font-size:5px;padding:3px 6px;background:var(--navy);color:var(--teal);border:1px solid var(--teal);}\n.sec-badge{font-size:5px;color:var(--green);background:rgba(6,214,160,.08);border:1px solid rgba(6,214,160,.3);padding:5px 7px;margin-bottom:9px;}\n.saved-box{background:rgba(6,214,160,.08);border:2px solid var(--green);padding:12px;text-align:center;}\n#statusbar{height:34px;background:var(--plank);border-top:3px solid var(--rope);display:flex;align-items:center;gap:14px;padding:0 14px;font-family:'VT323',monospace;font-size:14px;color:var(--dim);flex-shrink:0;}\n::-webkit-scrollbar{width:5px;height:5px;}\n::-webkit-scrollbar-track{background:var(--ocean);}\n::-webkit-scrollbar-thumb{background:var(--navy);}\n<\/style>\n<p><\/head><br \/>\n<body><\/p>\n<div id=\"titlebar\">\n  <span class=\"wheel\">\u2699<\/span><\/p>\n<div id=\"title-text\">\u2693 SABOTIGA ORDER NAVIGATOR \u2693<\/div>\n<div id=\"clock\">00:00:00<\/div>\n<\/div>\n<div id=\"main\">\n<div class=\"side\" id=\"side-l\">\n<div class=\"psec\">\n<div class=\"plbl\">CARGA<\/div>\n<div class=\"tabs\">\n<div class=\"tab on\" onclick=\"setTab('upload')\">EXCEL<\/div>\n<div class=\"tab\" onclick=\"setTab('email')\">EMAIL<\/div>\n<div class=\"tab\" onclick=\"setTab('config')\">PUERTO<\/div>\n<\/p><\/div>\n<div id=\"tab-upload\">\n<div id=\"dropzone\" onclick=\"document.getElementById('fileInput').click()\" ondragover=\"event.preventDefault();this.classList.add('over')\" ondragleave=\"this.classList.remove('over')\" ondrop=\"event.preventDefault();this.classList.remove('over');handleFile(event.dataTransfer.files[0])\">\n<div style=\"font-size:20px;margin-bottom:4px\">\ud83d\udce6<\/div>\n<p>          SOLTAR MANIFESTO<br \/>o click para buscar\n        <\/div>\n<p>        <input type=\"file\" id=\"fileInput\" accept=\".xlsx,.xls,.csv\" style=\"display:none\" onchange=\"handleFile(this.files[0])\">\n      <\/div>\n<div id=\"tab-email\" style=\"display:none\">\n        <textarea id=\"emailText\" placeholder=\"Pegar email del pedido...\" style=\"width:100%;background:rgba(0,0,0,.3);border:2px solid var(--navy);color:var(--chalk);font-family:'VT323',monospace;font-size:15px;padding:6px;resize:none;height:120px;outline:none;margin-bottom:10px;\"><\/textarea><br \/>\n        <button class=\"btn teal sm\" onclick=\"parseEmail()\">\u2693 DESCIFRAR<\/button>\n      <\/div>\n<div id=\"tab-config\" style=\"display:none\">\n<div id=\"config-form\">\n<div class=\"sec-badge\">\ud83d\udd12 SOLO EN MEMORIA<\/div>\n<div class=\"field\"><label>URL DE LA WEB<\/label><input type=\"text\" id=\"inp-url\" placeholder=\"https:\/\/sabotiga.es\" autocomplete=\"off\"><\/div>\n<div class=\"field\"><label>CONSUMER KEY (ck_&#8230;)<\/label><input type=\"password\" id=\"inp-user\" autocomplete=\"new-password\"><\/div>\n<div class=\"field\"><label>CONSUMER SECRET (cs_&#8230;)<\/label><input type=\"password\" id=\"inp-pass\" autocomplete=\"new-password\"><\/div>\n<p>          <button class=\"btn gold sm\" onclick=\"saveCreds()\">\ud83d\udd12 GUARDAR SEGURO<\/button>\n        <\/div>\n<div id=\"config-saved\" style=\"display:none\" class=\"saved-box\">\n<div style=\"font-size:24px\">\ud83d\udd12<\/div>\n<div style=\"font-size:5px;color:var(--green);margin:5px 0\">CREDENCIALES EN MEMORIA<\/div>\n<div style=\"font-size:5px;color:var(--dim)\" id=\"saved-url\"><\/div>\n<div class=\"row\"><button class=\"btn red sm\" onclick=\"clearCreds()\">\u2715 BORRAR<\/button><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"psec\">\n<div class=\"plbl\">TABLA DE CARGA<\/div>\n<div class=\"tbl-scroll\" id=\"tbl-wrap\">\n<div class=\"empty\">Sin carga.<br \/>Sube el manifesto.<\/div>\n<\/div>\n<div class=\"row\" id=\"tbl-badges\" style=\"display:none;margin-top:5px\"><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div id=\"scene\">\n<div id=\"wall\">\n<div class=\"porthole\" style=\"left:20px\"><\/div>\n<div class=\"porthole\" style=\"left:80px\"><\/div>\n<div class=\"porthole\" style=\"left:150px\"><\/div>\n<div class=\"porthole\" style=\"left:220px\"><\/div>\n<\/p><\/div>\n<div id=\"rope-line\"><\/div>\n<div class=\"flag\" style=\"left:35px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:10px solid #ef476f\"><\/div>\n<div class=\"flag\" style=\"left:90px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:10px solid #ffd166\"><\/div>\n<div class=\"flag\" style=\"left:145px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:10px solid #06d6a0\"><\/div>\n<div class=\"flag\" style=\"left:200px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:10px solid #00b4d8\"><\/div>\n<div class=\"flag\" style=\"left:255px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:10px solid #f5e6c8\"><\/div>\n<div id=\"rug\"><\/div>\n<div class=\"desk-wrap\" style=\"left:50px;top:65px\">\n<div class=\"desk-top\" style=\"width:80px;height:40px\">\n<div class=\"monitor\" style=\"left:16px;top:4px;width:26px;height:20px\">\n<div class=\"mscreen\" style=\"margin:2px;height:14px\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"chair-wrap\" style=\"left:62px;top:109px\">\n<div class=\"chair-back\" style=\"width:28px;height:5px\"><\/div>\n<div class=\"chair-seat\" style=\"width:28px;height:22px\"><\/div>\n<\/div>\n<div class=\"npc-wrap\" style=\"left:56px;top:95px\"><canvas id=\"npc1\" width=\"20\" height=\"20\" style=\"image-rendering:pixelated;width:20px;height:20px\"><\/canvas><\/div>\n<div class=\"desk-wrap\" style=\"left:185px;top:65px\">\n<div class=\"desk-top\" style=\"width:80px;height:40px\">\n<div class=\"monitor\" style=\"left:16px;top:4px;width:26px;height:20px\">\n<div class=\"mscreen blue\" style=\"margin:2px;height:14px\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"chair-wrap\" style=\"left:197px;top:109px\">\n<div class=\"chair-back\" style=\"width:28px;height:5px\"><\/div>\n<div class=\"chair-seat\" style=\"width:28px;height:22px\"><\/div>\n<\/div>\n<div class=\"npc-wrap\" style=\"left:191px;top:95px\"><canvas id=\"npc2\" width=\"20\" height=\"20\" style=\"image-rendering:pixelated;width:20px;height:20px\"><\/canvas><\/div>\n<div class=\"desk-wrap\" style=\"left:320px;top:65px\">\n<div class=\"desk-top\" style=\"width:80px;height:40px\">\n<div class=\"monitor\" style=\"left:16px;top:4px;width:26px;height:20px\">\n<div class=\"mscreen\" style=\"margin:2px;height:14px\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"chair-wrap\" style=\"left:332px;top:109px\">\n<div class=\"chair-back\" style=\"width:28px;height:5px\"><\/div>\n<div class=\"chair-seat\" style=\"width:28px;height:22px\"><\/div>\n<\/div>\n<div class=\"npc-wrap\" style=\"left:326px;top:95px\"><canvas id=\"npc3\" width=\"20\" height=\"20\" style=\"image-rendering:pixelated;width:20px;height:20px\"><\/canvas><\/div>\n<div class=\"desk-wrap\" style=\"left:50px;top:185px\">\n<div class=\"desk-top\" style=\"width:80px;height:40px\">\n<div class=\"monitor\" style=\"left:16px;top:4px;width:26px;height:20px\">\n<div class=\"mscreen\" style=\"margin:2px;height:14px\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"chair-wrap\" style=\"left:62px;top:229px\">\n<div class=\"chair-back\" style=\"width:28px;height:5px\"><\/div>\n<div class=\"chair-seat\" style=\"width:28px;height:22px\"><\/div>\n<\/div>\n<div class=\"npc-wrap\" style=\"left:56px;top:215px\"><canvas id=\"npc4\" width=\"20\" height=\"20\" style=\"image-rendering:pixelated;width:20px;height:20px\"><\/canvas><\/div>\n<div class=\"desk-wrap\" style=\"left:185px;top:185px\">\n<div class=\"desk-top\" style=\"width:80px;height:40px\">\n<div class=\"monitor\" style=\"left:16px;top:4px;width:26px;height:20px\">\n<div class=\"mscreen\" style=\"margin:2px;height:14px\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"chair-wrap\" style=\"left:197px;top:229px\">\n<div class=\"chair-back\" style=\"width:28px;height:5px\"><\/div>\n<div class=\"chair-seat\" style=\"width:28px;height:22px\"><\/div>\n<\/div>\n<div class=\"npc-wrap\" style=\"left:191px;top:215px\"><canvas id=\"npc5\" width=\"20\" height=\"20\" style=\"image-rendering:pixelated;width:20px;height:20px\"><\/canvas><\/div>\n<div class=\"plant-wrap\" style=\"left:8px;top:55px\">\n<div class=\"leaves\"><\/div>\n<div class=\"pot\"><\/div>\n<\/div>\n<div class=\"plant-wrap\" style=\"right:8px;top:55px\">\n<div class=\"leaves\" style=\"background:#1a5a1a\"><\/div>\n<div class=\"pot\"><\/div>\n<\/div>\n<div class=\"plant-wrap\" style=\"left:8px;top:240px\">\n<div class=\"leaves\"><\/div>\n<div class=\"pot\"><\/div>\n<\/div>\n<div class=\"plant-wrap\" style=\"right:8px;top:240px\">\n<div class=\"leaves\" style=\"background:#2d7a2d\"><\/div>\n<div class=\"pot\"><\/div>\n<\/div>\n<div id=\"sailor\" style=\"left:160px;top:155px\">\n<div id=\"bubble\">\u00a1Ahoy! Listo<br \/>para zarpar,<br \/>capit\u00e1n!<\/div>\n<p>      <canvas id=\"sailorCanvas\" width=\"24\" height=\"28\"><\/canvas>\n    <\/div>\n<\/p><\/div>\n<div class=\"side\" id=\"side-r\">\n<div class=\"psec\">\n<div class=\"plbl\">NAVEGACI\u00d3N<\/div>\n<div class=\"steps\">\n<div class=\"step\" id=\"s0\">\u00b7<br \/>LEER<\/div>\n<div class=\"step\" id=\"s1\">\u00b7<br \/>TRADUC<\/div>\n<div class=\"step\" id=\"s2\">\u00b7<br \/>ENVIAR<\/div>\n<div class=\"step\" id=\"s3\">\u00b7<br \/>OK<\/div>\n<\/p><\/div>\n<div id=\"prog-bar\">\n<div id=\"prog-fill\"><\/div>\n<\/div>\n<div class=\"compass\">\n<div class=\"needle\"><\/div>\n<\/div>\n<div style=\"display:flex;align-items:center;font-size:6px;margin-top:6px\">\n        <span class=\"sdot\" id=\"sdot\" style=\"background:var(--teal)\"><\/span><br \/>\n        <span id=\"status-txt\">EN PUERTO<\/span>\n      <\/div>\n<div id=\"result-card\">\n<div style=\"font-size:4px;color:var(--dim)\">PEDIDO CREADO<\/div>\n<div id=\"result-id\">#000<\/div>\n<div style=\"font-size:4px;color:var(--dim);margin-top:2px\" id=\"result-name\"><\/div>\n<div style=\"font-size:4px;color:var(--gold);margin-top:2px\" id=\"result-total\"><\/div>\n<\/p><\/div>\n<div class=\"row\" style=\"margin-top:8px\">\n        <button class=\"btn gold sm\" id=\"zarpar-btn\" onclick=\"runAgent()\" disabled>\u2693 ZARPAR<\/button><br \/>\n        <button class=\"btn teal sm\" onclick=\"resetAll()\">\u21ba<\/button>\n      <\/div>\n<div style=\"margin-top:8px\">\n<div class=\"field\"><label>NOMBRE CLIENTE<\/label><input type=\"text\" id=\"inp-nombre\" autocomplete=\"off\"><\/div>\n<div class=\"field\"><label>NOMBRE BARCO<\/label><input type=\"text\" id=\"inp-barco\" autocomplete=\"off\"><\/div>\n<div class=\"field\"><label>AGENCIA<\/label><input type=\"text\" id=\"inp-agencia\" autocomplete=\"off\"><\/div>\n<div class=\"field\"><label>PUERTO<\/label><input type=\"text\" id=\"inp-puerto\" autocomplete=\"off\"><\/div>\n<div class=\"field\"><label>HORA ENTREGA<\/label><input type=\"text\" id=\"inp-hora\" placeholder=\"ej. 10:00\" autocomplete=\"off\"><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"psec\">\n<div class=\"plbl\">BIT\u00c1CORA<\/div>\n<div id=\"log\"><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/div>\n<div id=\"statusbar\">\n  \u2693 SABOTIGA NAVIGATOR<br \/>\n  <span id=\"sb-port\">\u26a0 SIN PUERTO<\/span><br \/>\n  <span id=\"sb-items\">\ud83d\udce6 0 \u00edtems<\/span><br \/>\n  <span style=\"margin-left:auto\" id=\"sb-date\"><\/span>\n<\/div>\n<p><script>\nvar creds={url:'',user:'',apppass:''};\nvar orderItems=[];\nvar agentState='idle';\nvar sailorX=160,sailorY=155;\nvar facing='right';\nvar animTick=0;\nvar WAYPOINTS={idle:{x:160,y:155},loading:{x:70,y:215},working:{x:190,y:90},success:{x:290,y:155},error:{x:90,y:155}};<\/p>\n<p>setInterval(function(){\n  var n=new Date();\n  document.getElementById('clock').textContent=n.toLocaleTimeString('es-ES');\n  var m=['ENE','FEB','MAR','ABR','MAY','JUN','JUL','AGO','SEP','OCT','NOV','DIC'];\n  document.getElementById('sb-date').textContent=m[n.getMonth()]+' '+n.getDate()+' '+n.getFullYear();\n},1000);<\/p>\n<p>function setTab(t){\n  ['upload','email','config'].forEach(function(id,i){\n    document.getElementById('tab-'+id).style.display=id===t?'block':'none';\n    document.querySelectorAll('.tab')[i].classList.toggle('on',id===t);\n  });\n}<\/p>\n<p>function parseEmail(){\n  var text=document.getElementById('emailText').value.trim();\n  if(!text){addLog('Pega el email primero','warn');return;}\n  moveSailor('working','working');\n  setSpeech('Descifrando<br \/>mensaje...');\n  addLog('Analizando email...','info');\n  var normalized=text.replace(\/\\n\/g,' ').replace(\/\\s+\/g,' ').trim();\n  var positions=[];\n  var re=\/(\\d+)\\s+x\\s+\/g;\n  var m;\n  while((m=re.exec(normalized))!==null){\n    positions.push({pos:m.index,qty:parseInt(m[1]),end:m.index+m[0].length});\n  }\n  var items=[];\n  for(var i=0;i<positions.length;i++){\n    var start=positions[i].end;\n    var end=i+1<positions.length?positions[i+1].pos:normalized.length;\n    var name=normalized.slice(start,end).trim().replace(\/\\d+$\/,'').trim();\n    var qty=positions[i].qty;\n    if(name.length>1&&qty>0&&qty<10000){\n      items.push({name:name,price:0,qty:qty,total:0});\n    }\n  }\n  if(items.length>0){\n    orderItems=items;renderTable();\n    moveSailor('idle','idle');\n    setSpeech('\u00a1Descifrado!<br \/>'+items.length+' producto(s)');\n    addLog('Email: '+items.length+' productos','ok');\n    document.getElementById('zarpar-btn').disabled=false;\n  } else {\n    addLog('No se detectaron productos','err');\n    moveSailor('error','error');\n  }\n}<\/p>\n<p>function saveCreds(){\n  var u=document.getElementById('inp-url').value.trim();\n  var k=document.getElementById('inp-user').value.trim();\n  var s=document.getElementById('inp-pass').value.trim();\n  if(!u||!k||!s){addLog('Rellena todos los campos','warn');return;}\n  creds={url:u,user:k,apppass:s};\n  document.getElementById('inp-url').value='';\n  document.getElementById('inp-user').value='';\n  document.getElementById('inp-pass').value='';\n  document.getElementById('config-form').style.display='none';\n  document.getElementById('config-saved').style.display='block';\n  document.getElementById('saved-url').textContent=u;\n  document.getElementById('sb-port').textContent='\ud83d\udd12 PUERTO CONFIGURADO';\n  addLog('Credenciales guardadas \u2713','ok');\n  setTab('upload');\n}\nfunction clearCreds(){\n  creds={url:'',user:'',apppass:''};\n  document.getElementById('config-form').style.display='block';\n  document.getElementById('config-saved').style.display='none';\n  document.getElementById('sb-port').textContent='\u26a0 SIN PUERTO';\n  addLog('Credenciales eliminadas','warn');\n}<\/p>\n<p>function addLog(msg,type){\n  type=type||'info';\n  var n=new Date();\n  var ts=('0'+n.getHours()).slice(-2)+':'+('0'+n.getMinutes()).slice(-2)+':'+('0'+n.getSeconds()).slice(-2);\n  var c={ok:'#06d6a0',err:'#ef476f',info:'#00b4d8',warn:'#ffd166'};\n  var el=document.getElementById('log');\n  el.innerHTML+='<\/p>\n<div><span style=\"color:#4a6a8a\">['+ts+']<\/span> <span style=\"color:'+(c[type]||c.info)+'\">'+msg+'<\/span><\/div>\n<p>';\n  el.scrollTop=el.scrollHeight;\n}<\/p>\n<p>var SKIP=['customer','boat name','company','departure date','price','quant.','total \u20ac','f.product and cold cuts','cold cut','gins and vodkas','whiskeys','liquors','brandies','cavas','champagne','snacks','fruits and vegetables','cheeses','meats','refrigerated items','personal hygiene','bread and sweets','candles and flowers','prepared dishes','beers','juices','suggestions','red wine','white wine','ros\u00e9 wine','water and soft','breakfast '];\nfunction isSkip(v){\n  if(!v||typeof v!=='string'||v.trim().length<3)return true;\n  var vl=v.toLowerCase().trim();\n  return SKIP.some(function(w){return vl===w||vl.indexOf(w)===0;});\n}\n\nfunction parseExcel(buffer){\n  var wb=XLSX.read(buffer,{type:'array'});\n  var ws=wb.Sheets[wb.SheetNames[0]];\n  var data=XLSX.utils.sheet_to_json(ws,{header:1,defval:null});\n  if(data.length<2)throw new Error('Excel vac\u00edo');\n  var items=[],seen={};\n  for(var r=0;r<data.length;r++){\n    var row=data[r];\n    var n=row.length;\n    for(var i=0;i<n-4;i++){\n      var name=row[i];\n      if(isSkip(name))continue;\n      var gap=row[i+1],price=row[i+2],qty=row[i+3],total=row[i+4];\n      if(gap===null&#038;&#038;typeof price==='number'&#038;&#038;price>0&&typeof qty==='number'&&qty>0&&qty<10000&#038;&#038;typeof total==='number'&#038;&#038;total>0){\n        var k=name.trim()+'|'+price+'|'+qty;\n        if(!seen[k]){seen[k]=1;items.push({name:name.trim(),price:price,qty:parseInt(qty),total:Math.round(total*100)\/100});}\n      }\n    }\n  }\n  if(!items.length)throw new Error('No se encontraron productos con cantidad');\n  return items;\n}<\/p>\n<p>function handleFile(file){\n  if(!file)return;\n  moveSailor('loading','walking');\n  setSpeech('\u00a1Cargando el<br \/>manifesto!');\n  addLog('Leyendo: '+file.name,'info');\n  var reader=new FileReader();\n  reader.onload=function(e){\n    try{\n      orderItems=parseExcel(new Uint8Array(e.target.result));\n      var total=orderItems.reduce(function(s,i){return s+i.total;},0).toFixed(2);\n      renderTable();\n      moveSailor('idle','idle');\n      setSpeech('\u00a1Carga a bordo!<br \/>'+orderItems.length+' producto(s)<br \/>'+total+'\u20ac');\n      addLog('Excel: '+orderItems.length+' productos, '+total+'\u20ac','ok');\n      document.getElementById('zarpar-btn').disabled=false;\n    }catch(err){\n      moveSailor('error','error');\n      setSpeech('\u00a1Error en el<br \/>manifesto!');\n      addLog('Error: '+err.message,'err');\n    }\n  };\n  reader.readAsArrayBuffer(file);\n}<\/p>\n<p>function renderTable(){\n  var html='<\/p>\n<table>\n<thead>\n<tr>\n<th>Producto<\/th>\n<th>\u20ac<\/th>\n<th>Cant<\/th>\n<th>Total<\/th>\n<\/tr>\n<\/thead>\n<tbody>';\n  orderItems.slice(0,60).forEach(function(i){html+='<\/p>\n<tr>\n<td>'+i.name+'<\/td>\n<td>'+i.price+'<\/td>\n<td>'+i.qty+'<\/td>\n<td>'+i.total+'<\/td>\n<\/tr>\n<p>';});\n  html+='<\/tbody>\n<\/table>\n<p>';\n  document.getElementById('tbl-wrap').innerHTML=html;\n  var b=document.getElementById('tbl-badges');\n  b.style.display='flex';\n  b.innerHTML='<span class=\"badge\">'+orderItems.length+' \u00cdTEMS<\/span>';\n  document.getElementById('sb-items').textContent='\ud83d\udce6 '+orderItems.length+' \u00edtems';\n}<\/p>\n<p>function setStep(i,state){\n  var el=document.getElementById('s'+i);\n  el.className='step'+(state?' '+state:'');\n  var icons={active:'\u25b6',done:'\u2713',err:'\u2717','':'\u00b7'};\n  var labels=['LEER','TRADUC','ENVIAR','OK'];\n  el.innerHTML=(icons[state]||'\u00b7')+'<br \/>'+labels[i];\n}\nfunction setProgress(p){document.getElementById('prog-fill').style.width=p+'%';}\nfunction setStatus(state){\n  agentState=state;\n  var c={idle:'#00b4d8',walking:'#ffd166',working:'#ffd166',success:'#06d6a0',error:'#ef476f'};\n  var t={idle:'EN PUERTO',walking:'NAVEGANDO...',working:'TRABAJANDO...',success:'ENTREGADO \u2713',error:'AVER\u00cdA \u2717'};\n  document.getElementById('sdot').style.background=c[state]||c.idle;\n  document.getElementById('status-txt').textContent=t[state]||'EN PUERTO';\n}<\/p>\n<p>async function runAgent(){\n  if(!orderItems.length){addLog('Sin carga en bodega','warn');return;}\n  if(!creds.url||!creds.user||!creds.apppass){addLog('Configura el puerto primero','warn');setTab('config');return;}\n  document.getElementById('result-card').style.display='none';\n  setProgress(0);[0,1,2,3].forEach(function(i){setStep(i,'');});\n  var delay=function(ms){return new Promise(function(r){setTimeout(r,ms);});};\n  var total=orderItems.reduce(function(s,i){return s+i.total;},0).toFixed(2);\n  try{\n    moveSailor('loading','walking');\n    setSpeech('Revisando<br \/>la carga...');\n    addLog('Revisando Excel...','info');\n    setStep(0,'active');\n    await delay(600);\n    setProgress(20);setStep(0,'done');setStep(1,'active');\n    moveSailor('working','working');\n    setSpeech('Traduciendo<br \/>productos...');\n    addLog('Traduciendo al espa\u00f1ol...','info');\n    try{\n      var names=orderItems.map(function(i){return i.name;});\n      var tr=await fetch('https:\/\/api.anthropic.com\/v1\/messages',{method:'POST',headers:{'Content-Type':'application\/json'},body:JSON.stringify({model:'claude-sonnet-4-20250514',max_tokens:2000,messages:[{role:'user',content:'Traduce estos nombres de productos al espa\u00f1ol. Responde SOLO con un array JSON con las traducciones en el mismo orden, sin explicaciones ni markdown:\\n'+JSON.stringify(names)}]})});\n      var td=await tr.json();\n      var traw=td.content.map(function(b){return b.text||'';}).join('').replace(\/```json|```\/g,'').trim();\n      var ts2=traw.indexOf('['),te=traw.lastIndexOf(']');\n      var translated=JSON.parse(traw.slice(ts2,te+1));\n      if(Array.isArray(translated)&&translated.length===orderItems.length){\n        orderItems=orderItems.map(function(item,i){return Object.assign({},item,{name:translated[i]||item.name});});\n        addLog('Traducci\u00f3n completada \u2713','ok');renderTable();\n      }\n    }catch(e){addLog('Traducci\u00f3n omitida','warn');}\n    setProgress(55);setStep(1,'done');setStep(2,'active');\n    setSpeech('Enviando al<br \/>puerto...');\n    addLog('Conectando con WooCommerce...','info');\n    await delay(400);\n    var nombre=document.getElementById('inp-nombre').value.trim();\n    var barco=document.getElementById('inp-barco').value.trim();\n    var agencia=document.getElementById('inp-agencia').value.trim();\n    var puerto=document.getElementById('inp-puerto').value.trim();\n    var hora=document.getElementById('inp-hora').value.trim();\n    var np=nombre.split(' ');\n    var notasPedido='Barco: '+(barco||'-')+' | Agencia: '+(agencia||'-')+' | Puerto: '+(puerto||'-')+' | Hora: '+(hora||'-');\n    var wcBase=creds.url.replace(\/\\\/$\/,'');\n    var isWooKey=creds.user.indexOf('ck_')===0;\n    var authParam=isWooKey?'?consumer_key='+encodeURIComponent(creds.user)+'&consumer_secret='+encodeURIComponent(creds.apppass):'';\n    var feeLines=orderItems.map(function(i){return{name:i.qty+'x '+i.name,tax_status:'none',total:String(i.total||0)};});\n    var wooOrder={status:'processing',billing:{first_name:np[0]||'Cliente',last_name:np.slice(1).join(' ')||'Barco',email:'info@sabotiga.es',phone:'',address_1:puerto||'',city:puerto||'',postcode:'',country:'ES'},customer_note:notasPedido,fee_lines:feeLines};\n    var wcUrl,headers={'Content-Type':'application\/json'};\n    if(isWooKey){wcUrl=wcBase+'\/wp-json\/wc\/v3\/orders'+authParam;}\n    else{wcUrl=wcBase+'\/wp-json\/wc\/v3\/orders';headers['Authorization']='Basic '+btoa(creds.user+':'+creds.apppass);}\n    var wcRes=await fetch(wcUrl,{method:'POST',headers:headers,body:JSON.stringify(wooOrder)});\n    if(!wcRes.ok){var et=await wcRes.text();var em='';try{var j=JSON.parse(et);em=j.message||j.code||et;}catch(_){em=et;}throw new Error('WooCommerce '+wcRes.status+': '+em.substring(0,150));}\n    var wc=await wcRes.json();\n    setProgress(100);[0,1,2,3].forEach(function(i){setStep(i,'done');});\n    moveSailor('success','success');\n    setSpeech('\u00a1Puerto!<br \/>Pedido #'+wc.id+'<br \/>entregado \u2605');\n    document.getElementById('result-card').style.display='block';\n    document.getElementById('result-id').textContent='#'+wc.id;\n    document.getElementById('result-name').textContent=orderItems.length+' productos';\n    document.getElementById('result-total').textContent=(wc.total||total)+'\u20ac';\n    addLog('\u2713 Pedido #'+wc.id+' creado. Total: '+(wc.total||total)+'\u20ac','ok');\n    orderItems=[];\n  }catch(err){\n    addLog('ERROR: '+err.message.substring(0,120),'err');\n    var lines=['Producto,Precio,Cantidad,Total'];\n    orderItems.forEach(function(i){lines.push('\"'+i.name+'\",'+i.price+','+i.qty+','+i.total);});\n    lines.push(',,TOTAL,'+total);\n    var csv=lines.join('\\n');\n    var blob=new Blob([csv],{type:'text\/csv;charset=utf-8;'});\n    var url2=URL.createObjectURL(blob);\n    var a=document.createElement('a');\n    a.href=url2;a.download='pedido_sabotiga_'+new Date().toISOString().slice(0,10)+'.csv';\n    document.body.appendChild(a);a.click();document.body.removeChild(a);\n    URL.revokeObjectURL(url2);\n    setProgress(100);[0,1,2,3].forEach(function(i){setStep(i,'done');});\n    moveSailor('success','success');\n    setSpeech('\u00a1CSV listo!<br \/>'+orderItems.length+' productos');\n    document.getElementById('result-card').style.display='block';\n    document.getElementById('result-id').textContent='CSV';\n    document.getElementById('result-name').textContent=orderItems.length+' productos';\n    document.getElementById('result-total').textContent=total+'\u20ac';\n    addLog('CSV descargado: '+orderItems.length+' productos','ok');\n    orderItems=[];\n  }\n}<\/p>\n<p>function resetAll(){\n  orderItems=[];\n  ['inp-nombre','inp-barco','inp-agencia','inp-puerto','inp-hora'].forEach(function(id){document.getElementById(id).value='';});\n  document.getElementById('tbl-wrap').innerHTML='<\/p>\n<div class=\"empty\">Sin carga.<br \/>Sube el manifesto.<\/div>\n<p>';\n  document.getElementById('tbl-badges').style.display='none';\n  document.getElementById('result-card').style.display='none';\n  document.getElementById('zarpar-btn').disabled=true;\n  setProgress(0);[0,1,2,3].forEach(function(i){setStep(i,'');});\n  moveSailor('idle','idle');\n  setSpeech('\u00a1Listo para<br \/>otro viaje!');\n  document.getElementById('sb-items').textContent='\ud83d\udce6 0 \u00edtems';\n  addLog('Puerto limpio.','info');\n}<\/p>\n<p>function moveSailor(pos,state){\n  var wp=WAYPOINTS[pos]||WAYPOINTS.idle;\n  var el=document.getElementById('sailor');\n  facing=wp.x>sailorX?'right':'left';\n  sailorX=wp.x;sailorY=wp.y;\n  el.style.left=sailorX+'px';el.style.top=sailorY+'px';\n  setStatus(state);\n}\nfunction setSpeech(html){document.getElementById('bubble').innerHTML=html;}<\/p>\n<p>function drawNPC(id,col,hair){\n  var c=document.getElementById(id);if(!c)return;\n  var ctx=c.getContext('2d');\n  ctx.fillStyle='rgba(0,0,0,.2)';ctx.fillRect(3,15,14,4);\n  ctx.fillStyle=col;ctx.fillRect(4,8,12,8);\n  ctx.fillStyle='#ffd5a8';ctx.fillRect(5,2,10,9);\n  ctx.fillStyle=hair;ctx.fillRect(5,2,10,3);ctx.fillRect(4,3,2,4);ctx.fillRect(14,3,2,4);\n  ctx.fillStyle='#0a1628';ctx.fillRect(7,7,2,2);ctx.fillRect(11,7,2,2);\n}\ndrawNPC('npc1','#c0392b','#2c1a0e');\ndrawNPC('npc2','#2980b9','#5c3a1e');\ndrawNPC('npc3','#27ae60','#1a0e05');\ndrawNPC('npc4','#8e44ad','#3d2b1a');\ndrawNPC('npc5','#d35400','#2c1a0e');<\/p>\n<p>function drawSailor(){\n  var c=document.getElementById('sailorCanvas');if(!c)return;\n  var ctx=c.getContext('2d');\n  var t=animTick,s=agentState;\n  ctx.clearRect(0,0,24,28);\n  var bob=s==='working'?Math.sin(t*.2)*1:0;\n  ctx.fillStyle='rgba(0,0,0,.25)';ctx.beginPath();ctx.ellipse(12,26,7,2,0,0,Math.PI*2);ctx.fill();\n  var la=s==='walking'?Math.sin(t*.3)*2:0;\n  ctx.fillStyle='#1a3a5c';ctx.fillRect(6,18+bob,5,7+la);ctx.fillRect(13,18+bob,5,7-la);\n  ctx.fillStyle='#0a1628';ctx.fillRect(5,23+bob+la,6,3);ctx.fillRect(13,23+bob-la,6,3);\n  ctx.fillStyle='#1a3a5c';ctx.fillRect(4,11+bob,16,9);\n  ctx.fillStyle='#f5e6c8';ctx.fillRect(4,11+bob,16,2);ctx.fillRect(8,11+bob,3,5);ctx.fillRect(13,11+bob,3,5);\n  ctx.fillStyle='#ffd166';ctx.fillRect(11,13+bob,2,4);ctx.fillRect(9,14+bob,6,1);ctx.fillRect(9,16+bob,2,1);ctx.fillRect(13,16+bob,2,1);\n  var aa=s==='working'?Math.sin(t*.25)*3:s==='walking'?Math.sin(t*.3)*2:0;\n  ctx.fillStyle='#1a3a5c';ctx.fillRect(0,12+bob+aa,5,3);ctx.fillRect(19,12+bob-aa,5,3);\n  if(s==='working'){ctx.fillStyle='#ffd166';ctx.fillRect(19,14+bob-aa,5,5);}\n  ctx.fillStyle='#ffd5a8';ctx.fillRect(6,3+bob,12,10);\n  ctx.fillStyle='#1a3a5c';ctx.fillRect(4,1+bob,16,4);ctx.fillRect(6,0+bob,12,2);\n  ctx.fillStyle='#f5e6c8';ctx.fillRect(4,3+bob,16,1);\n  ctx.fillStyle='#ffd166';ctx.fillRect(10,1+bob,4,2);\n  ctx.fillStyle='#0a1628';\n  if(facing==='right'){ctx.fillRect(14,7+bob,2,2);ctx.fillRect(11,7+bob,2,2);}\n  else{ctx.fillRect(8,7+bob,2,2);ctx.fillRect(11,7+bob,2,2);}\n  if(s==='success'){\n    ctx.fillStyle='#06d6a0';ctx.fillRect(8,10+bob,8,1);ctx.fillRect(7,9+bob,2,1);ctx.fillRect(15,9+bob,2,1);\n    ctx.fillStyle='#ffd166';ctx.fillRect(0,0,3,3);ctx.fillRect(21,2,3,3);\n  }else if(s==='error'){\n    ctx.fillStyle='#ef476f';ctx.fillRect(8,10+bob,8,1);ctx.fillRect(7,9+bob,2,2);ctx.fillRect(15,9+bob,2,2);\n  }\n  if(s==='working'){\n    ctx.fillStyle='#ffd166';\n    var sp=Math.floor(t\/5)%4;\n    var sparks=[[0,3,2,2],[21,1,2,2],[0,14,2,2],[21,14,2,2]];\n    var sv=sparks[sp];if(sv)ctx.fillRect(sv[0],sv[1],sv[2],sv[3]);\n  }\n  animTick++;\n  requestAnimationFrame(drawSailor);\n}\ndrawSailor();\naddLog('Sistema iniciado. Puerto en calma.','info');\n<\/script><br \/>\n<\/body><br \/>\n<\/html><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u2693 Sabotiga Navigator \u2699 \u2693 SABOTIGA ORDER NAVIGATOR \u2693 00:00:00 CARGA EXCEL EMAIL PUERTO \ud83d\udce6 SOLTAR MANIFESTOo click para buscar \u2693 DESCIFRAR \ud83d\udd12 SOLO EN MEMORIA URL DE LA WEB CONSUMER KEY (ck_&#8230;) CONSUMER SECRET (cs_&#8230;) \ud83d\udd12 GUARDAR SEGURO \ud83d\udd12 CREDENCIALES EN MEMORIA \u2715 BORRAR TABLA DE CARGA Sin carga.Sube el manifesto. \u00a1Ahoy! Listopara zarpar,capit\u00e1n! [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1717","page","type-page","status-publish","hentry"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/sabotiga.es\/en\/wp-json\/wp\/v2\/pages\/1717","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sabotiga.es\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sabotiga.es\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sabotiga.es\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/sabotiga.es\/en\/wp-json\/wp\/v2\/comments?post=1717"}],"version-history":[{"count":1,"href":"https:\/\/sabotiga.es\/en\/wp-json\/wp\/v2\/pages\/1717\/revisions"}],"predecessor-version":[{"id":1718,"href":"https:\/\/sabotiga.es\/en\/wp-json\/wp\/v2\/pages\/1717\/revisions\/1718"}],"wp:attachment":[{"href":"https:\/\/sabotiga.es\/en\/wp-json\/wp\/v2\/media?parent=1717"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}