{"id":2669,"date":"2025-04-02T09:56:38","date_gmt":"2025-04-02T08:56:38","guid":{"rendered":"https:\/\/zabalimp.es\/?page_id=2669"},"modified":"2025-04-02T09:57:44","modified_gmt":"2025-04-02T08:57:44","slug":"administracion-conserjeria","status":"publish","type":"page","link":"https:\/\/zabalimp.es\/en\/administracion-conserjeria\/","title":{"rendered":"Administraci\u00f3n y conserjer\u00eda"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"2669\" class=\"elementor elementor-2669\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a56280 e-flex e-con-boxed e-con e-parent\" data-id=\"a56280\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-40597d16 e-con-full e-flex e-con e-child\" data-id=\"40597d16\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2da53f0a elementor-invisible elementor-widget elementor-widget-image\" data-id=\"2da53f0a\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInLeft&quot;}\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"800\" height=\"800\" src=\"https:\/\/zabalimp.es\/wp-content\/uploads\/2025\/03\/Administracion-y-conserjeria.png\" class=\"attachment-large size-large wp-image-1833\" alt=\"\" srcset=\"https:\/\/zabalimp.es\/wp-content\/uploads\/2025\/03\/Administracion-y-conserjeria.png 1024w, https:\/\/zabalimp.es\/wp-content\/uploads\/2025\/03\/Administracion-y-conserjeria-300x300.png 300w, https:\/\/zabalimp.es\/wp-content\/uploads\/2025\/03\/Administracion-y-conserjeria-100x100.png 100w, https:\/\/zabalimp.es\/wp-content\/uploads\/2025\/03\/Administracion-y-conserjeria-600x600.png 600w, https:\/\/zabalimp.es\/wp-content\/uploads\/2025\/03\/Administracion-y-conserjeria-150x150.png 150w, https:\/\/zabalimp.es\/wp-content\/uploads\/2025\/03\/Administracion-y-conserjeria-768x768.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2a67d0c8 e-con-full e-flex e-con e-child\" data-id=\"2a67d0c8\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-30f0296c e-con-full e-flex e-con e-child\" data-id=\"30f0296c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7c1ce1d8 elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"7c1ce1d8\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<span class=\"elementor-heading-title elementor-size-default\">Una comunidad bien gestionada se nota en los peque\u00f1os detalles del d\u00eda a d\u00eda. Nuestro servicio de administraci\u00f3n y conserjer\u00eda garantiza un entorno ordenado, seguro y atendido, donde cada vecino se sienta respaldado.\n\nNos ocupamos de la recepci\u00f3n de visitas y paqueter\u00eda, supervisi\u00f3n de accesos, gesti\u00f3n de incidencias, contacto con proveedores, control de llaves y apoyo log\u00edstico, siempre con una actitud cercana, profesional y resolutiva.\n\n\ud83d\udccb Administraci\u00f3n eficaz, \ud83d\udee1\ufe0f presencia vigilante, \ud83e\uddd1\u200d\ud83d\udcbc trato cordial, \ud83d\udcde disponibilidad continua.\nActuamos como el punto de referencia de la comunidad, cuidando tanto de los espacios como de las relaciones.\n\nPorque una buena conserjer\u00eda no solo abre puertas, tambi\u00e9n fomenta tranquilidad, convivencia y confianza.<\/span>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-1e80f3b9 e-con-full e-flex e-con e-child\" data-id=\"1e80f3b9\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5b969e9c elementor-widget elementor-widget-html\" data-id=\"5b969e9c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<script>\r\n  const subservicioId = 29;\r\n<\/script>\r\n\r\n<div id=\"form-field-dinamico\"><\/div>\r\n\r\n<div id=\"resumen-seleccionado\" style=\"min-height: 40px; margin-bottom: 60px;\"><\/div>\r\n<div id=\"pedir-fixed-wrapper\">\r\n  <div id=\"option_price\">\ud83d\udfe9 Total: 0.00 \u20ac 0.00<\/div>\r\n  <button id=\"btn-pedir\" class=\"elementor-button\">\ud83d\uded2 Order<\/button>\r\n<\/div>\r\n\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1a144564 elementor-widget elementor-widget-html\" data-id=\"1a144564\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<script>\r\nlet selected = {};\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\", function () {\r\n  fetch(`\/wp-json\/miapi\/v1\/subservicio?id=${subservicioId}`)\r\n    .then(res => res.json())\r\n    .then(data => {\r\n      selected = {\r\n        servicio: { id: data.service_id, name: data.service_name },\r\n        subservicio: { id: data.id, name: data.name }\r\n      };\r\n      cargarParametros(data.id);\r\n    });\r\n\r\n  document.getElementById(\"btn-pedir\").addEventListener(\"click\", () => {\r\n    const resumen = document.getElementById(\"resumen-seleccionado\");\r\n    const precioField = document.getElementById(\"option_price\");\r\n\r\n    const descripcion = resumen.innerText;\r\n    const precioTexto = precioField.textContent.match(\/([\\d\\.]+) \u20ac$\/);\r\n    const precio = precioTexto ? parseFloat(precioTexto[1]) : 0;\r\n    const imagen = `https:\/\/zabalimp.es\/wp-content\/uploads\/2025\/03\/${normalizeFileName(selected.subservicio.name)}.png`;\r\n\r\n    const datosPedido = {\r\n      nombre: `${selected.servicio.name} \u2013 ${selected.subservicio.name}`,\r\n      descripcion: descripcion,\r\n      precio: precio,\r\n      imagen: imagen\r\n    };\r\n\r\n    fetch('\/wp-json\/miapi\/v1\/add-to-cart', {\r\n      method: 'POST',\r\n      headers: { 'Content-Type': 'application\/json' },\r\n      body: JSON.stringify(datosPedido)\r\n    })\r\n      .then(res => res.json())\r\n      .then(data => {\r\n        if (data.success) {\r\n          alert(\"\u2705 Producto a\u00f1adido al carrito\");\r\n          window.location.href = \"\/carrito\";\r\n        } else {\r\n          alert(\"\u274c No se pudo a\u00f1adir al carrito\");\r\n        }\r\n      })\r\n      .catch(err => {\r\n        console.error(\"Error:\", err);\r\n        alert(\"\u274c Error en el servidor\");\r\n      });\r\n  });\r\n});\r\n\r\nfunction normalizeFileName(name) {\r\n  const map = { '\u00e1':'a','\u00e9':'e','\u00ed':'i','\u00f3':'o','\u00fa':'u','\u00fc':'u','\u00f1':'n','\u00c1':'A','\u00c9':'E','\u00cd':'I','\u00d3':'O','\u00da':'U','\u00dc':'U','\u00d1':'N' };\r\n  return name.split('').map(c => map[c] || c).join('').replace(\/\\s+\/g, '-').replace(\/[^\\w\\-]\/g, '');\r\n}\r\n\r\n\r\nfunction cargarParametros(id) {\r\n  fetch(`\/wp-json\/miapi\/v1\/parametros?subservicio=${id}`)\r\n    .then(res => res.json())\r\n    .then(async parametros => {\r\n      const dinamico = document.getElementById(\"form-field-dinamico\");\r\n      dinamico.innerHTML = \"\";\r\n\r\n      for (const param of parametros) {\r\n        const priceData = await fetch(`\/wp-json\/miapi\/v1\/option-price?id=${param.id}`).then(r => r.json());\r\n        const base = parseFloat(priceData?.base_price || 0);\r\n        const pricePerUnit = parseFloat(priceData?.price_per_unit || 0);\r\n        const unit = priceData?.unit || \"servicio\";\r\n        const modifiers = priceData?.value_modifier || \"\";\r\n\r\n        const modArray = modifiers\r\n          .split(\";\")\r\n          .map(s => s.trim().split(\":\"))\r\n            .filter(([key, val]) =>\r\n                key && val !== undefined &&\r\n                !isNaN(parseFloat(val)) &&\r\n                !(key.toLowerCase() === \"no\" && parseFloat(val) === 0)\r\n              )\r\n          .filter(([key, val]) => key && val !== undefined && !isNaN(parseFloat(val)));\r\n\r\n        \/\/ \u0411\u043b\u043e\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\r\n        const group = document.createElement(\"div\");\r\n        group.className = \"parametro-group\";\r\n        group.style.display = \"flex\";\r\n        group.style.flexWrap = \"wrap\";\r\n        group.style.alignItems = \"center\";\r\n        group.style.marginBottom = \"10px\";\r\n        group.style.gap = \"8px\";\r\n\r\n        \/\/ \u0427\u0435\u043a\u0431\u043e\u043a\u0441 + \u0438\u043c\u044f\r\n        const baseCheckbox = document.createElement(\"input\");\r\n        baseCheckbox.type = \"checkbox\";\r\n        baseCheckbox.dataset.baseValue = base;\r\n        baseCheckbox.dataset.paramName = param.name;\r\n        baseCheckbox.addEventListener(\"change\", updatePrecio);\r\n\r\n        const nameSpan = document.createElement(\"span\");\r\n        nameSpan.textContent = ` ${param.name}`;\r\n        nameSpan.style.fontWeight = \"500\";\r\n\r\n        group.appendChild(baseCheckbox);\r\n        group.appendChild(nameSpan);\r\n\r\n        \/\/ \u041c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b\r\n        if (modArray.length > 0) {\r\n          const dash = document.createElement(\"span\");\r\n          dash.textContent = \"\u2014\";\r\n          group.appendChild(dash);\r\n\r\n          if (modArray.length > 2) {\r\n            const select = document.createElement(\"select\");\r\n            select.dataset.modType = \"select\";\r\n            select.dataset.paramId = param.id;\r\n            select.style.display = \"inline-block\";\r\n            select.style.maxWidth = \"200px\";\r\n            select.style.padding = \"4px\";\r\n            select.style.verticalAlign = \"middle\";\r\n                    select.addEventListener(\"change\", (e) => {\r\n          if (e.target.value) {\r\n            baseCheckbox.checked = true;\r\n          }\r\n          updatePrecio();\r\n        });\r\n\r\n\r\n            const optDefault = document.createElement(\"option\");\r\n            optDefault.value = \"\";\r\n            optDefault.textContent = \"-- Selecciona --\";\r\n            select.appendChild(optDefault);\r\n\r\n            modArray.forEach(([labelText, modValue]) => {\r\n              const opt = document.createElement(\"option\");\r\n              opt.value = modValue;\r\n              opt.text = `${labelText} (+${parseFloat(modValue).toFixed(2)} \u20ac)`;\r\n              select.appendChild(opt);\r\n            });\r\n\r\n            group.appendChild(select);\r\n          } else {\r\n            modArray.forEach(([labelText, modValue]) => {\r\n              const modLabel = document.createElement(\"label\");\r\n              modLabel.style.whiteSpace = \"nowrap\";\r\n\r\n              const modCheckbox = document.createElement(\"input\");\r\n              modCheckbox.type = \"checkbox\";\r\n              modCheckbox.dataset.modifierValue = parseFloat(modValue);\r\n              modCheckbox.dataset.paramId = param.id;\r\n              modCheckbox.addEventListener(\"change\", (e) => {\r\n                  baseCheckbox.checked = true;\r\n                  updatePrecio();\r\n                });\r\n\r\n\r\n              modLabel.appendChild(modCheckbox);\r\n              modLabel.append(` ${labelText} (+${parseFloat(modValue).toFixed(2)} \u20ac)`);\r\n              group.appendChild(modLabel);\r\n            });\r\n          }\r\n        }\r\n\r\n        \/\/ \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u0435\u043d \u0432\u0432\u043e\u0434 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430\r\n        if (!modifiers && pricePerUnit > 0) {\r\n          const dash = document.createElement(\"span\");\r\n          dash.textContent = \"\u2014\";\r\n          group.appendChild(dash);\r\n\r\n          const inputNum = document.createElement(\"input\");\r\n          inputNum.type = \"number\";\r\n          inputNum.min = \"0\";\r\n          inputNum.step = \"1\";\r\n          inputNum.placeholder = `Cantidad en ${unit}`;\r\n          inputNum.dataset.unit = unit;\r\n          inputNum.dataset.price = pricePerUnit;\r\n          inputNum.style.width = \"80px\";\r\n          inputNum.style.padding = \"4px\";\r\n          inputNum.style.verticalAlign = \"middle\";\r\ninputNum.addEventListener(\"input\", () => {\r\n  if (inputNum.value && parseFloat(inputNum.value) > 0) {\r\n    baseCheckbox.checked = true;\r\n  }\r\n  updatePrecio();\r\n});\r\ninputNum.addEventListener(\"change\", () => {\r\n  if (inputNum.value && parseFloat(inputNum.value) > 0) {\r\n    baseCheckbox.checked = true;\r\n  }\r\n  updatePrecio();\r\n});\r\n\r\n\r\n          group.appendChild(inputNum);\r\n        }\r\n\r\n        \/\/ \u041f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 \u043f\u043e\u0434 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c\r\n        const info = [];\r\n        if (base > 0) info.push(`base: ${base.toFixed(2)} \u20ac`);\r\n        if (pricePerUnit > 0) info.push(`precio por ${unit}: ${pricePerUnit.toFixed(2)} \u20ac`);\r\n\r\n        if (info.length > 0) {\r\n          const hint = document.createElement(\"div\");\r\n          hint.style.fontSize = \"0.85em\";\r\n          hint.style.color = \"#888\";\r\n          hint.style.marginLeft = \"24px\";\r\n          hint.style.width = \"100%\";\r\n          hint.textContent = `(${info.join(\" | \")})`;\r\n          group.appendChild(hint);\r\n        }\r\n\r\n        dinamico.appendChild(group);\r\n      }\r\n\r\n      updatePrecio();\r\n    });\r\n}\r\n\r\nfunction updatePrecio() {\r\n  const resumen = document.getElementById(\"resumen-seleccionado\");\r\n  const precioField = document.getElementById(\"option_price\");\r\n\r\n  let total = 0;\r\n  let partes = [];\r\n  let detalles = [];\r\n\r\n  document.querySelectorAll(\"#form-field-dinamico .parametro-group\").forEach(group => {\r\n    const baseCheckbox = group.querySelector(\"input[type='checkbox'][data-base-value]\");\r\n    if (!baseCheckbox || !baseCheckbox.checked) return;\r\n\r\n    const nombre = baseCheckbox.dataset.paramName || \"Par\u00e1metro\";\r\n    const base = parseFloat(baseCheckbox.dataset.baseValue || 0);\r\n\r\n    if (base > 0) {\r\n      total += base;\r\n      partes.push(base.toFixed(2));\r\n      detalles.push(`${nombre}: base ${base.toFixed(2)} \u20ac`);\r\n    }\r\n\r\n    \/\/ \u041c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b: select\r\n    const select = group.querySelector(\"select[data-mod-type='select']\");\r\n    if (select && select.value) {\r\n      const mod = parseFloat(select.value);\r\n      total += mod;\r\n      partes.push(mod.toFixed(2));\r\n      detalles.push(`${nombre}: extra +${mod.toFixed(2)} \u20ac`);\r\n    }\r\n\r\n    \/\/ \u041c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b: \u0447\u0435\u043a\u0431\u043e\u043a\u0441\u044b\r\n    const modCheckboxes = group.querySelectorAll(\"input[type='checkbox'][data-modifier-value]\");\r\n    modCheckboxes.forEach(cb => {\r\n      if (cb.checked) {\r\n        const mod = parseFloat(cb.dataset.modifierValue || 0);\r\n        total += mod;\r\n        partes.push(mod.toFixed(2));\r\n        detalles.push(`${nombre}: extra +${mod.toFixed(2)} \u20ac`);\r\n      }\r\n    });\r\n\r\n    \/\/ \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u00d7 \u0446\u0435\u043d\u0430\r\n    const numInput = group.querySelector(\"input[type='number']\");\r\n    if (numInput && parseFloat(numInput.value) > 0) {\r\n      const cantidad = parseFloat(numInput.value || 0);\r\n      const precioUnitario = parseFloat(numInput.dataset.price || 0);\r\n      const subtotal = cantidad * precioUnitario;\r\n      total += subtotal;\r\n      partes.push(subtotal.toFixed(2));\r\n      detalles.push(`${nombre}: ${cantidad} \u00d7 ${precioUnitario.toFixed(2)} \u20ac = ${subtotal.toFixed(2)} \u20ac`);\r\n    }\r\n  });\r\n\r\nconst soloTotal = total.toFixed(2) + \" \u20ac\";\r\nconst desglose = partes.length > 1 ? partes.join(\" + \") + \" = \" + soloTotal : soloTotal;\r\n\r\nresumen.innerHTML = `<div class=\"total\">\ud83d\udfe9 Total: ${desglose}<\/div>`;\r\n\r\n\/\/ \u0412 \"\u043b\u0435\u0442\u0430\u044e\u0449\u0435\u0439\" \u043a\u043d\u043e\u043f\u043a\u0435 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0442\u043e\u0433\r\nif (document.getElementById(\"option_price\")) {\r\n  document.getElementById(\"option_price\").textContent = `\ud83d\udfe9 Total: ${soloTotal}`;\r\n\r\n}\r\n}\r\n\r\n<\/script>\r\n<style>\r\n#form-field-dinamico {\r\n  position: relative;\r\n  padding: 20px;\r\n  background: rgba(255, 255, 255, 0.85);\r\n  border-radius: 10px;\r\n  box-shadow: 0 0 10px rgba(0,0,0,0.05);\r\n}\r\n\r\n\r\n#pedir-fixed-wrapper {\r\n  position: absolute;\r\n  bottom: 10px;\r\n  right: 10px;\r\n  z-index: 10;\r\n  background: #fff;\r\n  padding: 12px 16px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 10px;\r\n  box-shadow: 0 4px 12px rgba(0,0,0,0.1);\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 12px;\r\n}\r\n\r\n#option_price {\r\n  font-weight: bold;\r\n  font-size: 1em;\r\n  color: #3c763d;\r\n}\r\n\r\n.parametro-group {\r\n  margin-bottom: 8px;\r\n  display: flex;\r\n  align-items: center;\r\n  flex-wrap: wrap;\r\n}\r\n\r\n.parametro-group label {\r\n  margin-right: 8px;\r\n}\r\n\r\n.mod-container select,\r\n.mod-container input[type=\"number\"] {\r\n  display: inline-block;\r\n  max-width: 200px;\r\n  margin-left: 6px;\r\n  margin-right: 8px;\r\n  vertical-align: middle;\r\n  height: auto;\r\n  line-height: 1.2;\r\n  padding: 4px 6px;\r\n  font-size: 0.95em;\r\n}\r\n.parametro-group {\r\n  display: flex;\r\n  align-items: flex-start;\r\n  flex-wrap: wrap;\r\n  gap: 6px;\r\n  margin-bottom: 8px;\r\n}\r\n\r\n.parametro-group label {\r\n  margin-right: 8px;\r\n  vertical-align: middle;\r\n}\r\n\r\n.mi-header-icons {\r\n  display: flex;\r\n  gap: 20px;\r\n  align-items: center;\r\n  justify-content: center;\r\n  font-size: 18px;\r\n  background-color: #E9CC3A;\r\n  border-radius: 4px;\r\n  padding:6px 14px;\r\n  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.5);\r\n}\r\n<\/style>\r\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\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>Una comunidad bien gestionada se nota en los peque\u00f1os detalles del d\u00eda a d\u00eda. Nuestro servicio de administraci\u00f3n y conserjer\u00eda garantiza un entorno ordenado, seguro y atendido, donde cada vecino se sienta respaldado. Nos ocupamos de la recepci\u00f3n de visitas y paqueter\u00eda, supervisi\u00f3n de accesos, gesti\u00f3n de incidencias, contacto con proveedores, control de llaves y [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_joinchat":[],"footnotes":""},"class_list":["post-2669","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/zabalimp.es\/en\/wp-json\/wp\/v2\/pages\/2669","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zabalimp.es\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/zabalimp.es\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/zabalimp.es\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zabalimp.es\/en\/wp-json\/wp\/v2\/comments?post=2669"}],"version-history":[{"count":0,"href":"https:\/\/zabalimp.es\/en\/wp-json\/wp\/v2\/pages\/2669\/revisions"}],"wp:attachment":[{"href":"https:\/\/zabalimp.es\/en\/wp-json\/wp\/v2\/media?parent=2669"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}