{"id":5221,"date":"2026-09-28T15:42:28","date_gmt":"2026-09-28T15:42:28","guid":{"rendered":"https:\/\/nextlevelcocinas.com\/?page_id=5221"},"modified":"2026-09-29T11:31:38","modified_gmt":"2026-09-29T11:31:38","slug":"es","status":"publish","type":"page","link":"https:\/\/nextlevelcocinas.com\/en\/es\/","title":{"rendered":"Home"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"5221\" class=\"elementor elementor-5221\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c56606b e-con-full e-flex e-con e-parent\" data-id=\"c56606b\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-65fb3a2 elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"65fb3a2\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- ============================================================\n     NEXT LEVEL COCINAS \u00b7 Home \u00b7 VERSION EN ESPANOL\n     Se pega en la pagina de WordPress \/es\/\n     28\/09\/2026 \u00b7 montada con build-es.py a partir de la version inglesa\n     (nl-home-completa.txt). NO se edita a mano: los textos estan en es_textos.py (y los\n     legales en es_legal.py) y el diseno sale de la pagina inglesa. Para\n     cambiar algo, se cambia alli y se vuelven a montar las dos.\n     Este archivo NO empieza con <!doctype html> a proposito: es un\n     fragmento para pegar en el widget HTML de Elementor, igual que el ingles.\n     ============================================================ -->\n\n<!-- ============================================================\n     NEXT LEVEL COCINAS \u00b7 gl-02-cookies v1 \u00b7 20\/09\/2026\n     Barra de cookies y panel de preferencias. Va ARRIBA DEL TODO de\n     cada pagina, antes del menu, igual que el menu y el pie van en cada\n     pagina. Sale en la primera visita, sea cual sea la pagina por la que\n     entre el visitante, y no vuelve a preguntar mientras dure la\n     eleccion (12 meses).\n\n     QUE CUMPLE (guia de cookies de la AEPD y criterio del CEPD)\n     - Aceptar y Rechazar son dos botones iguales, al mismo nivel, en la\n       primera capa. Personalizar es un tercer boton (guia, 3.1.2.2).\n     - Nada viene marcado de antemano. Seguir navegando o hacer scroll\n       NO cuenta como consentimiento (guia, 3.2.1).\n     - No hay muro de cookies: la web funciona igual se acepte o no.\n     - Cambiar o retirar la eleccion es tan facil como darla: el enlace\n       \"Cookie settings\" esta en el pie de todas las paginas (guia, 3.2.9).\n     - La eleccion se guarda 12 meses (la AEPD recomienda no pasar de 24,\n       guia 3.2.8) en la cookie tecnica nlp_cookie_consent. Si el\n       navegador no deja usar cookies, se guarda en el almacenamiento\n       local.\n\n     ESTADO HOY: la web NO usa cookies de analitica ni de publicidad (lo\n     confirmo el titular el 20\/09\/2026), asi que la barra todavia no bloquea\n     nada: recuerda la eleccion y deja el mecanismo listo. Los textos de\n     Analytics y Marketing dicen \"we do not use any today\": mientras sea\n     verdad, se quedan asi.\n\n     ANTES DE ANADIR CUALQUIER HERRAMIENTA NUEVA (Google Analytics, Meta\n     Pixel, un mapa, un chat, videos de otra plataforma...):\n     1. Que salga con su nombre en el texto de su categoria (Analytics o\n        Marketing) de este archivo y en la seccion de cookies de Privacy\n        Policy. Ya no puede decir \"we do not use any today\".\n     2. Subir VERSION a 2 (y asi cada vez) en el script de abajo: todos los\n        visitantes vuelven a ver la barra y deciden con la informacion\n        nueva. Un permiso dado antes no vale para una herramienta nueva.\n     3. Cargarla SOLO con consentimiento. En un widget HTML de Elementor,\n        el script se escribe con type=\"text\/plain\" y con data-nlp-consent\n        igual al nombre de la categoria, por ejemplo analytics o marketing.\n        Los iframes llevan data-src en lugar de src, y el mismo\n        data-nlp-consent. La barra los activa cuando el visitante acepta\n        esa categoria.\n        OJO: lo que se instale con otros plugins (Site Kit, el Pixel de\n        Meta...) no pasa por aqui y hay que engancharlo aparte. Avisar\n        antes de instalarlo, no despues.\n     4. Si el visitante retira el permiso despues de que algo se haya\n        cargado, la pagina se recarga sin ello.\n     5. Si alguna vez se instala en toda la web, esta barra tiene que\n        estar en todas las paginas: hoy va dentro de cada pagina, y una\n        pagina que no la lleve no pregunta nada.\n\n     LA VENTANA DE RESERVAS ES DE CALENDLY. Calendly muestra su propio aviso\n     de cookies dentro de la ventana (lo hace por defecto; se oculta con\n     hide_gdpr_banner=1). La frase del panel que lo dice, y la de Privacy,\n     dependen de eso: si algun dia se oculta, hay que gestionar aqui las\n     cookies de Calendly y cambiar esas dos frases.\n\n     Para leer la eleccion desde otro script: window.nlpConsent.has('analytics')\n     y window.nlpConsent.onChange(function(c){ ... }).\n     Para abrir el panel desde cualquier enlace o boton: atributo\n     data-nlp-cookie-open.\n\n     Todo prefijado .nlp-ck; las variables van dentro de .nlp-ck, no en :root.\n     ============================================================ -->\n<div class=\"nlp-ck\" id=\"nlp-ck\" lang=\"es\">\n\n  <div class=\"nlp-ck-bar\" id=\"nlp-ck-bar\" role=\"region\" aria-label=\"Consentimiento de cookies\" hidden>\n    <div class=\"nlp-ck-wrap\">\n      <div class=\"nlp-ck-copy\">\n        <p class=\"nlp-ck-p\"><strong>Cookies.<\/strong> Solo usamos las cookies que esta web necesita para funcionar. Las de anal\u00edtica y marketing est\u00e1n desactivadas salvo que las aceptes, y de momento no usamos ninguna. <span class=\"nlp-ck-long\">Puedes cambiar tu elecci\u00f3n en cualquier momento desde Configurar cookies, al pie de cada p\u00e1gina.<\/span> <a href=\"\/es\/politica-de-privacidad#nlp-lg-cookies\">Pol\u00edtica de privacidad<\/a><\/p>\n      <\/div>\n      <div class=\"nlp-ck-acts\">\n        <button type=\"button\" class=\"nlp-ck-btn\" data-nlp-ck-reject>Rechazar todas<\/button>\n        <button type=\"button\" class=\"nlp-ck-btn\" data-nlp-ck-accept>Aceptar todas<\/button>\n        <button type=\"button\" class=\"nlp-ck-btn nlp-ck-btn--line\" data-nlp-ck-open>Configurar<\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <dialog class=\"nlp-ck-dlg\" id=\"nlp-ck-dlg\" aria-labelledby=\"nlp-ck-dlg-t\">\n    <div class=\"nlp-ck-dlg-in\">\n      <div class=\"nlp-ck-top\">\n        <div>\n          <p class=\"nlp-ck-eyebrow\">Cookies<\/p>\n          <h2 class=\"nlp-ck-dlg-t\" id=\"nlp-ck-dlg-t\" tabindex=\"-1\" autofocus>Configuraci\u00f3n de cookies<\/h2>\n        <\/div>\n        <button type=\"button\" class=\"nlp-ck-x\" data-nlp-ck-close aria-label=\"Cerrar la configuraci\u00f3n de cookies\">\n          <svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M5 5l14 14M19 5L5 19\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\"\/><\/svg>\n        <\/button>\n      <\/div>\n      <p class=\"nlp-ck-p\">Elige qu\u00e9 cookies opcionales aceptas. Guardamos tu elecci\u00f3n en este navegador durante 12 meses, y puedes cambiarla en cualquier momento desde Configurar cookies, al pie de cada p\u00e1gina.<\/p>\n\n      <ul class=\"nlp-ck-cats\">\n        <li class=\"nlp-ck-cat\">\n          <div class=\"nlp-ck-cat-h\">\n            <p class=\"nlp-ck-cat-t\">Necesarias<\/p>\n            <span class=\"nlp-ck-always\">Siempre activas<\/span>\n          <\/div>\n          <p class=\"nlp-ck-cat-d\">Hacen que la web funcione y recuerdan tu elecci\u00f3n de cookies. La ley no exige tu consentimiento para usarlas.<\/p>\n        <\/li>\n        <li class=\"nlp-ck-cat\">\n          <div class=\"nlp-ck-cat-h\">\n            <p class=\"nlp-ck-cat-t\" id=\"nlp-ck-t-analytics\">Anal\u00edtica<\/p>\n            <label class=\"nlp-ck-sw\"><input type=\"checkbox\" role=\"switch\" data-nlp-ck-cat=\"analytics\" aria-labelledby=\"nlp-ck-t-analytics\"><span class=\"nlp-ck-track\" aria-hidden=\"true\"><\/span><span class=\"nlp-ck-state\" aria-hidden=\"true\"><\/span><\/label>\n          <\/div>\n          <p class=\"nlp-ck-cat-d\">Nos ayudar\u00edan a entender c\u00f3mo se usa la web para poder mejorarla. De momento no usamos ninguna herramienta de anal\u00edtica.<\/p>\n        <\/li>\n        <li class=\"nlp-ck-cat\">\n          <div class=\"nlp-ck-cat-h\">\n            <p class=\"nlp-ck-cat-t\" id=\"nlp-ck-t-marketing\">Marketing<\/p>\n            <label class=\"nlp-ck-sw\"><input type=\"checkbox\" role=\"switch\" data-nlp-ck-cat=\"marketing\" aria-labelledby=\"nlp-ck-t-marketing\"><span class=\"nlp-ck-track\" aria-hidden=\"true\"><\/span><span class=\"nlp-ck-state\" aria-hidden=\"true\"><\/span><\/label>\n          <\/div>\n          <p class=\"nlp-ck-cat-d\">Nos permitir\u00edan medir y mostrar nuestra propia publicidad. De momento no usamos ninguna herramienta de marketing.<\/p>\n        <\/li>\n      <\/ul>\n\n      <p class=\"nlp-ck-p nlp-ck-more\">La ventana de reservas es de Calendly, que al abrirla te preguntar\u00e1 por sus propias cookies opcionales. Encontrar\u00e1s m\u00e1s informaci\u00f3n sobre las cookies en nuestra <a href=\"\/es\/politica-de-privacidad#nlp-lg-cookies\">Pol\u00edtica de privacidad<\/a>.<\/p>\n    <\/div>\n\n    <div class=\"nlp-ck-foot\">\n      <button type=\"button\" class=\"nlp-ck-btn nlp-ck-btn--line\" data-nlp-ck-reject>Rechazar todas<\/button>\n      <button type=\"button\" class=\"nlp-ck-btn nlp-ck-btn--line\" data-nlp-ck-accept>Aceptar todas<\/button>\n      <button type=\"button\" class=\"nlp-ck-btn nlp-ck-save\" data-nlp-ck-save>Guardar mi elecci\u00f3n<\/button>\n    <\/div>\n  <\/dialog>\n\n<\/div>\n\n<style>\n.nlp-ck{\n  --nlp-ink:#1F1D1B; --nlp-ink2:#6B6259; --nlp-ink3:#9A9089;\n  --nlp-line:#E6E1D9; --nlp-soft:#F6F3EE; --nlp-bg:#FFFFFF;\n  --nlp-accent:#8A6A4C; --nlp-accent-dk:#75593F;\n  --nlp-font:\"Instrument Sans\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",Helvetica,Arial,sans-serif;\n  --nlp-pad:clamp(20px,5vw,70px);\n  font-family:var(--nlp-font); color:var(--nlp-ink);\n}\n.nlp-ck *,.nlp-ck *::before,.nlp-ck *::after{box-sizing:border-box;}\n.nlp-ck [hidden]{display:none !important;}\n:where(.nlp-ck) p{margin:0;}\n\n\/* ---------- la barra: por debajo del menu (9998) y de su panel (9997) ---------- *\/\n.nlp-ck-bar{\n  position:fixed;left:0;right:0;bottom:0;z-index:9990;\n  background:var(--nlp-soft);border-top:1px solid var(--nlp-line);\n  box-shadow:0 -14px 40px -24px rgba(31,29,27,.4);\n  padding-bottom:env(safe-area-inset-bottom);\n  transform:translateY(100%);opacity:0;\n  transition:transform .5s cubic-bezier(.22,.61,.36,1),opacity .35s ease;\n}\n.nlp-ck-bar.nlp-ck-on{transform:none;opacity:1;}\n.nlp-ck-wrap{\n  max-width:1600px;margin:0 auto;padding:22px var(--nlp-pad);\n  display:flex;align-items:center;justify-content:space-between;gap:20px 48px;\n}\n.nlp-ck-copy{flex:1 1 auto;min-width:0;max-width:100ch;}\n.nlp-ck-p{font-size:17px;line-height:1.55;color:var(--nlp-ink2);}\n.nlp-ck-p strong{color:var(--nlp-ink);font-weight:600;}\n.nlp-ck-p a{\n  color:var(--nlp-accent-dk);text-decoration:underline;\n  text-decoration-thickness:1px;text-underline-offset:3px;white-space:nowrap;\n}\n.nlp-ck-p a:hover{color:var(--nlp-accent);}\n.nlp-ck-acts{display:flex;flex:0 0 auto;gap:10px;align-items:center;}\n\n\/* Aceptar y Rechazar: la misma clase, el mismo tamano, el mismo color.\n   Los selectores de los botones llevan .nlp-ck delante y fijan tambien :focus y :hover, para que\n   el tema de WordPress no pueda pintar encima sus propios estados de button:hover y button:focus *\/\n.nlp-ck .nlp-ck-btn{\n  -webkit-appearance:none;appearance:none;\n  display:inline-flex;align-items:center;justify-content:center;\n  min-width:128px;height:46px;padding:0 22px;margin:0;\n  font-family:var(--nlp-font);font-size:14px;font-weight:600;letter-spacing:.01em;line-height:1;\n  text-transform:none;text-decoration:none;\n  color:#fff;background:var(--nlp-accent);border:1px solid var(--nlp-accent);border-radius:2px;box-shadow:none;\n  cursor:pointer;white-space:nowrap;\n  transition:background .3s ease,border-color .3s ease,color .3s ease;\n}\n.nlp-ck .nlp-ck-btn:focus{color:#fff;background:var(--nlp-accent);border-color:var(--nlp-accent);}\n.nlp-ck .nlp-ck-btn:hover{color:#fff;background:var(--nlp-accent-dk);border-color:var(--nlp-accent-dk);}\n.nlp-ck .nlp-ck-btn--line{color:var(--nlp-ink);background:transparent;border-color:var(--nlp-ink);}\n.nlp-ck .nlp-ck-btn--line:focus{color:var(--nlp-ink);background:transparent;border-color:var(--nlp-ink);}\n.nlp-ck .nlp-ck-btn--line:hover{color:var(--nlp-accent-dk);background:transparent;border-color:var(--nlp-accent-dk);}\n.nlp-ck .nlp-ck-btn:focus-visible,.nlp-ck .nlp-ck-x:focus-visible,.nlp-ck .nlp-ck-p a:focus-visible{\n  outline:2px solid var(--nlp-accent-dk);outline-offset:3px;\n}\n\n\/* ---------- el panel de preferencias (dialog nativo: capa superior, foco atrapado, Esc cierra) ---------- *\/\n.nlp-ck-dlg{\n  width:min(640px,calc(100vw - 24px));max-width:none;max-height:calc(100vh - 24px);max-height:calc(100dvh - 24px);\n  margin:auto;padding:0;overflow:auto;\n  background:var(--nlp-bg);color:var(--nlp-ink);font-family:var(--nlp-font);\n  border:1px solid var(--nlp-line);border-radius:3px;\n  box-shadow:0 30px 80px -30px rgba(31,29,27,.55);\n}\n.nlp-ck-dlg::backdrop{background:rgba(31,29,27,.52);}\n.nlp-ck-dlg-in{padding:28px clamp(20px,4vw,36px) 8px;}\n.nlp-ck-top{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin:0 0 14px;}\n.nlp-ck-eyebrow{\n  font-size:11px;letter-spacing:.18em;text-transform:uppercase;font-weight:600;\n  color:var(--nlp-accent);margin:0 0 10px;\n}\n.nlp-ck .nlp-ck-dlg-t{\n  margin:0;font-family:var(--nlp-font);font-size:clamp(24px,3vw,30px);font-weight:600;letter-spacing:-.02em;line-height:1.15;color:var(--nlp-ink);\n}\n.nlp-ck .nlp-ck-dlg-t:focus{outline:none;}\n.nlp-ck .nlp-ck-x{\n  -webkit-appearance:none;appearance:none;flex:0 0 auto;\n  display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;margin:-8px -10px 0 0;padding:0;\n  background:none;border:0;border-radius:2px;box-shadow:none;color:var(--nlp-ink);cursor:pointer;\n}\n.nlp-ck .nlp-ck-x:focus{background:none;color:var(--nlp-ink);}\n.nlp-ck .nlp-ck-x:hover{background:none;color:var(--nlp-accent);}\n\n.nlp-ck-cats{list-style:none;margin:22px 0 0;padding:0;border:1px solid var(--nlp-line);border-radius:3px;}\n.nlp-ck-cat{padding:18px 20px;border-top:1px solid var(--nlp-line);}\n.nlp-ck-cat:first-child{border-top:0;}\n.nlp-ck-cat-h{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:0 0 6px;}\n.nlp-ck-cat-t{font-size:18px;font-weight:600;letter-spacing:-.01em;color:var(--nlp-ink);}\n.nlp-ck-cat-d{font-size:17px;line-height:1.55;color:var(--nlp-ink2);}\n.nlp-ck-always{font-size:14px;font-weight:600;letter-spacing:.01em;color:var(--nlp-accent-dk);white-space:nowrap;}\n\n\/* interruptor: es un checkbox de verdad, con la palabra On\/Off al lado para no depender del color *\/\n.nlp-ck-sw{position:relative;display:inline-flex;align-items:center;gap:12px;flex:0 0 auto;cursor:pointer;}\n.nlp-ck-sw input{position:absolute;inset:0;width:100%;height:100%;margin:0;opacity:0;cursor:pointer;}\n.nlp-ck-track{\n  position:relative;flex:0 0 auto;width:48px;height:28px;border-radius:14px;\n  background:var(--nlp-ink3);transition:background .25s ease;\n}\n.nlp-ck-track::after{\n  content:\"\";position:absolute;top:3px;left:3px;width:22px;height:22px;border-radius:50%;\n  background:#fff;transition:transform .25s ease;\n}\n.nlp-ck-sw input:checked + .nlp-ck-track{background:var(--nlp-accent);}\n.nlp-ck-sw input:checked + .nlp-ck-track::after{transform:translateX(20px);}\n.nlp-ck-sw input:focus-visible + .nlp-ck-track{outline:2px solid var(--nlp-accent-dk);outline-offset:3px;}\n.nlp-ck-state{min-width:24px;font-size:14px;font-weight:600;letter-spacing:.01em;color:var(--nlp-ink2);}\n.nlp-ck-state::before{content:\"No\";}\n.nlp-ck-sw input:checked ~ .nlp-ck-state::before{content:\"S\u00ed\";}\n\n.nlp-ck-more{margin:18px 0 0;}\n\/* los botones del panel se quedan pegados abajo mientras se desplaza el contenido: en el movil no hay que buscar Save *\/\n.nlp-ck-foot{\n  position:sticky;bottom:0;z-index:1;display:flex;flex-wrap:wrap;gap:10px;\n  padding:16px clamp(20px,4vw,36px) calc(16px + env(safe-area-inset-bottom));\n  background:var(--nlp-bg);border-top:1px solid var(--nlp-line);\n}\n\n\/* ---------- movil ---------- *\/\n@media(max-width:1100px){\n  .nlp-ck-wrap{flex-direction:column;align-items:stretch;gap:16px;padding:18px var(--nlp-pad);}\n  .nlp-ck-copy{max-width:none;}\n}\n@media(max-width:600px){\n  .nlp-ck-wrap{gap:14px;padding:16px var(--nlp-pad);}\n  .nlp-ck-long{display:none;}\n  .nlp-ck-acts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;}\n  .nlp-ck-acts .nlp-ck-btn{min-width:0;width:100%;padding:0 6px;}\n  .nlp-ck-foot{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;padding-top:14px;}\n  .nlp-ck-foot .nlp-ck-btn{width:100%;min-width:0;padding:0 6px;}\n  .nlp-ck-foot .nlp-ck-save{grid-column:1 \/ -1;}\n  .nlp-ck-cat{padding:16px;}\n}\n@media(max-width:400px){\n  .nlp-ck .nlp-ck-acts{grid-template-columns:repeat(2,minmax(0,1fr));}\n  .nlp-ck .nlp-ck-acts .nlp-ck-btn--line{grid-column:1 \/ -1;}\n}\n@media(max-height:500px){                       \/* movil en horizontal: que la barra tape lo minimo *\/\n  .nlp-ck-long{display:none;}\n  .nlp-ck-wrap{gap:10px;padding-top:12px;padding-bottom:12px;}\n}\n@media(prefers-reduced-motion:reduce){\n  .nlp-ck-bar,.nlp-ck-track,.nlp-ck-track::after{transition:none;}\n}\n@media print{.nlp-ck{display:none;}}\n<\/style>\n\n<script>\n(function(){\n  'use strict';\n  if (window.__nlpCookiesWired) return;\n  window.__nlpCookiesWired = true;\n\n  var KEY = 'nlp_cookie_consent';\n  var VERSION = 1;    \/\/ subir a 2, 3... al anadir una herramienta nueva: todos vuelven a decidir\n  var DAYS = 365;     \/\/ cuanto dura la eleccion (la AEPD recomienda 24 meses como maximo)\n  var CATS = ['analytics', 'marketing'];\n\n  var body = document.body;\n  var bar = document.getElementById('nlp-ck-bar');\n  var dlg = document.getElementById('nlp-ck-dlg');\n  if (!body || !bar || !dlg) return;\n  \/\/ dentro del editor de Elementor la barra no sale\n  if (body.classList.contains('elementor-editor-active')) return;\n\n  var state = { analytics: false, marketing: false };\n  var decided = false;\n  var activated = {};\n  var listeners = [];\n  var opener = null;\n  var padOrig = null;\n\n  \/* ---------- guardar y leer la eleccion (cookie tecnica; si no se puede, almacenamiento local) ---------- *\/\n  function parse(raw){\n    try{\n      var o = JSON.parse(raw);\n      if (!o || o.v !== VERSION || typeof o.t !== 'number') return null;\n      if (Date.now() - o.t > DAYS * 864e5) return null;\n      return { analytics: o.a === 1, marketing: o.m === 1, t: o.t };\n    }catch(e){ return null; }\n  }\n  function readCookie(){\n    var m = document.cookie.match(new RegExp('(?:^|; )' + KEY + '=([^;]*)'));\n    return m ? decodeURIComponent(m[1]) : null;\n  }\n  function read(){\n    var s = null, raw;\n    try{ raw = readCookie(); if (raw) s = parse(raw); }catch(e){}\n    if (!s){ try{ raw = window.localStorage.getItem(KEY); if (raw) s = parse(raw); }catch(e){} }\n    return s;\n  }\n  function write(s){\n    var raw = JSON.stringify({ v: VERSION, a: s.analytics ? 1 : 0, m: s.marketing ? 1 : 0, t: s.t });\n    var ok = false;\n    try{\n      document.cookie = KEY + '=' + encodeURIComponent(raw) + '; Path=\/; Max-Age=' + (DAYS * 86400) +\n                        '; SameSite=Lax' + (location.protocol === 'https:' ? '; Secure' : '');\n      ok = readCookie() === raw;\n    }catch(e){}\n    if (!ok){ try{ window.localStorage.setItem(KEY, raw); }catch(e){} }\n  }\n\n  \/* ---------- avisar y liberar lo que estaba esperando el permiso ---------- *\/\n  function snapshot(){ return { decided: decided, analytics: !!state.analytics, marketing: !!state.marketing }; }\n  function announce(){\n    var snap = snapshot();\n    listeners.forEach(function(fn){ try{ fn(snap); }catch(e){} });\n    try{ document.dispatchEvent(new CustomEvent('nlp:consent', { detail: snap })); }catch(e){}\n  }\n  function release(){\n    var nodes = document.querySelectorAll('script[type=\"text\/plain\"][data-nlp-consent], iframe[data-nlp-consent][data-src]');\n    Array.prototype.forEach.call(nodes, function(n){\n      var cat = n.getAttribute('data-nlp-consent');\n      if (!state[cat] || n.getAttribute('data-nlp-released')) return;\n      n.setAttribute('data-nlp-released', '1');\n      activated[cat] = true;\n      if (n.tagName === 'SCRIPT'){\n        var s = document.createElement('script');\n        Array.prototype.forEach.call(n.attributes, function(a){\n          if (a.name !== 'type' && a.name.indexOf('data-nlp-') !== 0) s.setAttribute(a.name, a.value);\n        });\n        s.text = n.text;\n        n.parentNode.insertBefore(s, n.nextSibling);\n      } else {\n        n.src = n.getAttribute('data-src');\n      }\n    });\n  }\n\n  \/* ---------- la barra ---------- *\/\n  function fit(){ if (!bar.hidden) body.style.paddingBottom = bar.offsetHeight + 'px'; }\n  function showBar(){\n    if (padOrig === null) padOrig = body.style.paddingBottom;\n    bar.hidden = false;\n    fit();                                       \/\/ leer la altura fuerza el layout y deja correr la transicion\n    bar.classList.add('nlp-ck-on');\n    window.addEventListener('resize', fit);\n  }\n  function hideBar(){\n    if (bar.hidden) return;\n    bar.classList.remove('nlp-ck-on');\n    window.removeEventListener('resize', fit);\n    setTimeout(function(){ bar.hidden = true; body.style.paddingBottom = padOrig || ''; }, 350);\n  }\n\n  \/* ---------- el panel ---------- *\/\n  function syncToggles(){\n    CATS.forEach(function(c){\n      var i = dlg.querySelector('[data-nlp-ck-cat=\"' + c + '\"]');\n      if (i) i.checked = !!state[c];\n    });\n  }\n  function readToggles(){\n    var o = {};\n    CATS.forEach(function(c){\n      var i = dlg.querySelector('[data-nlp-ck-cat=\"' + c + '\"]');\n      o[c] = !!(i && i.checked);\n    });\n    return o;\n  }\n  function openPanel(from){\n    opener = from || document.activeElement;\n    syncToggles();\n    if (typeof dlg.showModal === 'function') dlg.showModal(); else dlg.setAttribute('open', '');\n  }\n  dlg.addEventListener('close', function(){\n    if (opener && document.contains(opener) && typeof opener.focus === 'function'){ try{ opener.focus(); }catch(e){} }\n    opener = null;\n  });\n  dlg.addEventListener('click', function(e){                                          \/\/ clic en el fondo\n    if (e.target !== dlg) return;                \/\/ un clic sobre algo del panel (o un Enter sobre un boton) nunca lo cierra\n    var r = dlg.getBoundingClientRect();\n    var dentro = e.clientX >= r.left && e.clientX <= r.right && e.clientY >= r.top && e.clientY <= r.bottom;\n    if (!dentro) dlg.close();\n  });\n\n  \/* ---------- decidir ---------- *\/\n  function apply(next){\n    var revoked = CATS.some(function(c){ return state[c] && !next[c] && activated[c]; });\n    state.analytics = !!next.analytics;\n    state.marketing = !!next.marketing;\n    decided = true;\n    write({ analytics: state.analytics, marketing: state.marketing, t: Date.now() });\n    hideBar();\n    if (dlg.open) dlg.close();\n    release();\n    announce();\n    if (revoked) location.reload();              \/\/ lo que ya se cargo no se puede descargar: se recarga sin ello\n  }\n\n  document.addEventListener('click', function(e){\n    var t = e.target && e.target.closest ? e.target.closest(\n      '[data-nlp-ck-accept],[data-nlp-ck-reject],[data-nlp-ck-save],[data-nlp-ck-close],[data-nlp-ck-open],[data-nlp-cookie-open]') : null;\n    if (!t) return;\n    if (t.hasAttribute('data-nlp-ck-accept')) { apply({ analytics: true, marketing: true }); return; }\n    if (t.hasAttribute('data-nlp-ck-reject')) { apply({ analytics: false, marketing: false }); return; }\n    if (t.hasAttribute('data-nlp-ck-save'))   { apply(readToggles()); return; }\n    if (t.hasAttribute('data-nlp-ck-close'))  { dlg.close(); return; }\n    e.preventDefault();\n    openPanel(t);\n  });\n\n  \/* ---------- por si la eleccion se tomo en otra pestana o en otra pagina (boton Atras, cache) ---------- *\/\n  function recheck(){\n    if (decided) return;\n    var s = read();\n    if (!s) return;\n    state.analytics = s.analytics; state.marketing = s.marketing; decided = true;\n    hideBar(); release(); announce();\n  }\n  document.addEventListener('visibilitychange', function(){ if (document.visibilityState === 'visible') recheck(); });\n  window.addEventListener('pageshow', function(e){ if (e.persisted) recheck(); });\n\n  \/* ---------- lo que pueden usar otros scripts ---------- *\/\n  window.nlpConsent = {\n    get: snapshot,\n    has: function(cat){ return !!state[cat]; },\n    open: function(){ openPanel(document.activeElement); },\n    onChange: function(fn){ if (typeof fn === 'function'){ listeners.push(fn); try{ fn(snapshot()); }catch(e){} } }\n  };\n\n  \/* ---------- arranque ---------- *\/\n  var saved = read();\n  if (saved){\n    state.analytics = saved.analytics; state.marketing = saved.marketing; decided = true;\n    release();\n    announce();\n  } else {\n    showBar();\n  }\n})();\n<\/script>\n\n<!-- ============================================================\n     NEXT LEVEL COCINAS \u00b7 gl-01-menu\n     Men\u00fa global \u00b7 v14 \u00b7 28\/09\/2026\n     CTA conectado a Calendly. La barra queda SIEMPRE visible.\n     v7: se quita Fraunces de la carga de fuentes, porque los\n     titulares de la web pasan a Instrument Sans.\n     v8: debajo de las rayitas va la palabra \"Menu\", alineada con\n     el arranque de las rayitas.\n     v9: el menu queda en tres entradas. \"Redesign & New Kitchens\"\n     pasa a \"Kitchen Redesign\", y \"Design Yours\" sale: no es\n     puerta de entrada para un cliente que llega recomendado.\n     La cocina completa vive en el footer y al final de la\n     pagina de redise\u00f1o, como manda el sistema de marca.\n     v10: New Kitchens entra en el menu, entre Kitchen Redesign y\n     Projects (el mismo orden que el footer). Decision del\n     20\/09\/2026: hasta v9 no tenia entrada propia en el menu. El\n     menu queda en cuatro entradas.\n     v11: al abrir el menu con el raton o el dedo ya no sale el\n     recuadro marron del foco en el primer enlace. El foco entra en\n     el panel (que no dibuja aro) y solo con teclado va al primer\n     enlace, donde el aro se sigue viendo por accesibilidad.\n     Ademas, con Tab en escritorio el foco ya no se escapa del menu\n     abierto: antes contaba como \"ultimo enlace\" el selector de\n     idioma del panel, que en escritorio esta oculto.\n     v12 (22\/09\/2026), solo en movil: mas aire arriba del logo y de\n     la hamburguesa; el selector de idioma sale del panel y queda\n     siempre a la vista, a la derecha de la barra; la hamburguesa\n     tiene zona de toque de 46x46; y en el panel abierto el boton\n     \"Arrange a visit\" lleva el texto a la izquierda.\n     v13 (22\/09\/2026), movil y escritorio: el desplegable del idioma\n     pasa a una franja de lado a lado que sale de la propia barra,\n     con su mismo crema, y se lee como el menu principal: Language\n     a la izquierda, los idiomas en grande a la derecha terminando\n     justo bajo el EN, y al pie Kitchens \u00b7 Costa del Sol. La pagina\n     se apaga un poco detras. Se cierra tocando fuera, con Esc o al\n     hacer scroll.\n     v14 (28\/09\/2026), idioma automatico: quien llega a la web desde\n     fuera (Google, Instagram, un anuncio, un enlace o escribiendo\n     la direccion) ve la pagina en el idioma de su navegador:\n     espanol si lo tiene en espanol (o en catalan, gallego o\n     euskera), ingles con cualquier otro idioma. Moviendose dentro\n     de la web no cambia nunca solo, asi que el selector de idioma\n     siempre manda. No guarda nada en el navegador. No actua con\n     buscadores (Google tiene que ver las dos versiones), ni dentro\n     del editor de Elementor ni en las vistas previas. Va arriba del\n     todo del menu para que el cambio sea antes de que se vea nada.\n     Las parejas de paginas las pone _fuente\/idiomas.py al montar.\n     Pegar tal cual en un widget HTML de Elementor.\n\n     Estructura: hamburguesa a la izquierda \u00b7 logo centrado \u00b7\n     idioma y CTA a la derecha.\n     La navegaci\u00f3n vive dentro del overlay a pantalla completa.\n\n     FALTA \u00b7 ANTES DE PUBLICAR:\n     1. Los href de los cuatro enlaces del overlay.\n     2. Los href del selector de idioma (marcados IDIOMA).\n     3. Los dos botones \"Arrange a visit\" ya abren Calendly solos\n        (ver script al final). No llevan el id contacto-pop-up a\n        proposito, para que tu popup nativo no salte tambien.\n\n     Versiones anteriores guardadas al lado como .ANTERIOR.html,\n     .ANTERIOR-v2.html y .ANTERIOR-v3.html.\n     ============================================================ -->\n\n<!-- idioma automatico (v14): ver la nota de arriba. NLP_PAREJAS la rellena _fuente\/idiomas.py. -->\n<script>\n(function () {\n  var NLP_PAREJAS = {\"\/\": \"\/es\/\", \"\/kitchen-redesign\": \"\/es\/rediseno-de-cocinas\", \"\/new-kitchens\": \"\/es\/cocinas-nuevas\", \"\/projects\": \"\/es\/proyectos\", \"\/about\": \"\/es\/nosotros\", \"\/terms-of-use\": \"\/es\/aviso-legal\", \"\/privacy-policy\": \"\/es\/politica-de-privacidad\"};\n  try {\n    if (window.self !== window.top) return;\n    if (\/[?&](elementor-preview|preview|preview_id|customize_changeset_uuid)=\/.test(location.search)) return;\n    if (\/bot|crawl|spider|slurp|facebookexternalhit|lighthouse|inspectiontool\/i.test(navigator.userAgent || '')) return;\n    var sinWww = function (h) { return String(h || '').split(':')[0].toLowerCase().replace(\/^www\\.\/, ''); };\n    var ref = document.referrer;\n    if (ref && sinWww(ref.split('\/')[2]) === sinWww(location.hostname)) return;\n    var limpia = function (p) { return String(p).replace(\/\\\/+$\/, '') || '\/'; };\n    var aqui = limpia(location.pathname), idioma = '', pareja = '';\n    for (var en in NLP_PAREJAS) {\n      if (!Object.prototype.hasOwnProperty.call(NLP_PAREJAS, en)) continue;\n      if (limpia(en) === aqui) { idioma = 'en'; pareja = NLP_PAREJAS[en]; }\n      else if (limpia(NLP_PAREJAS[en]) === aqui) { idioma = 'es'; pareja = en; }\n    }\n    if (!idioma) return;\n    var nav = String((navigator.languages && navigator.languages[0]) || navigator.language || '').toLowerCase();\n    var quiere = \/^(es|ca|gl|eu)(-|_|$)\/.test(nav) ? 'es' : 'en';\n    if (quiere !== idioma) location.replace(pareja + location.search + location.hash);\n  } catch (e) {}\n})();\n<\/script>\n\n<!-- Fuentes de marca. Se cargan una sola vez aqui y sirven para toda la pagina. -->\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Instrument+Sans:wght@400;500;600&display=swap\" rel=\"stylesheet\">\n\n<header id=\"nlp-mainmenu\" lang=\"es\">\n  <div class=\"nlp-hd-inner\">\n\n    <div class=\"nlp-hd-left\">\n      <button class=\"nlp-toggle\" type=\"button\" aria-expanded=\"false\" aria-controls=\"nlp-nav\" aria-label=\"Abrir el men\u00fa\">\n        <span class=\"nlp-toggle-bars\"><span><\/span><span><\/span><span><\/span><\/span>\n        <span class=\"nlp-toggle-t\">Men\u00fa<\/span>\n      <\/button>\n    <\/div>\n\n    <a href=\"\/es\/\" class=\"nlp-logo\" aria-label=\"Next Level Cocinas, inicio\">\n      <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/nextlevel-wordmark-negro-web@3x_1.png\"\n           alt=\"Next Level Cocinas\" width=\"695\" height=\"135\">\n    <\/a>\n\n    <div class=\"nlp-hd-right\">\n\n      <div class=\"nlp-lang\">\n        <button class=\"nlp-lang-btn\" type=\"button\" aria-expanded=\"false\" aria-controls=\"nlp-lang-panel\">ES<\/button>\n        <div class=\"nlp-lang-panel\" id=\"nlp-lang-panel\">\n          <div class=\"nlp-lang-in\">\n            <p class=\"nlp-lang-label\">Idioma<\/p>\n            <ul class=\"nlp-lang-list\">\n              <!-- IDIOMA: poner las URLs reales -->\n              <li><a href=\"\/\" hreflang=\"en\" lang=\"en\" data-code=\"EN\"><span>English<\/span><\/a><\/li>\n              <li><a href=\"\/es\/\" hreflang=\"es\" lang=\"es\" data-code=\"ES\" aria-current=\"true\"><span>Espa&ntilde;ol<\/span><\/a><\/li>\n            <\/ul>\n            <p class=\"nlp-lang-place\">Cocinas &middot; Costa del Sol<\/p>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <a href=\"#\" id=\"nlp-calendly-btn-bar\" class=\"nlp-bar-cta nlp-calendly-btn\">Concertar una visita<\/a>\n\n    <\/div>\n  <\/div>\n<\/header>\n\n<!-- el velo: mientras la franja del idioma esta abierta, la pagina se apaga un poco detras -->\n<div class=\"nlp-lang-veil\" aria-hidden=\"true\"><\/div>\n\n<div class=\"nlp-nav\" id=\"nlp-nav\" lang=\"es\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Men\u00fa\" tabindex=\"-1\" hidden>\n  <nav class=\"nlp-nav-inner\" aria-label=\"Principal\">\n\n    <ul class=\"nlp-nav-list\">\n      <li><a href=\"\/es\/rediseno-de-cocinas\"><span>Redise\u00f1o de cocinas<\/span><\/a><\/li>\n      <li><a href=\"\/es\/cocinas-nuevas\"><span>Cocinas nuevas<\/span><\/a><\/li>\n      <li><a href=\"\/es\/proyectos\"><span>Proyectos<\/span><\/a><\/li>\n      <li><a href=\"\/es\/nosotros\"><span>Nosotros<\/span><\/a><\/li>\n    <\/ul>\n\n    <div class=\"nlp-nav-foot\">\n      <a href=\"#\" class=\"nlp-nav-cta nlp-calendly-btn\" id=\"nlp-calendly-btn-nav\">Concertar una visita<\/a>\n      <p class=\"nlp-nav-meta\">\n        <a href=\"mailto:design@nextlevelcocinas.com\">design@nextlevelcocinas.com<\/a>\n        <span aria-hidden=\"true\">&middot;<\/span>\n        <a href=\"tel:+34647036816\">+34 647 036 816<\/a>\n        <span aria-hidden=\"true\">&middot;<\/span>\n        <a href=\"https:\/\/instagram.com\/nextlevelcosta\" target=\"_blank\" rel=\"noopener\">Instagram<\/a>\n      <\/p>\n      <p class=\"nlp-nav-place\">Cocinas &middot; Costa del Sol<\/p>\n    <\/div>\n\n  <\/nav>\n<\/div>\n\n<style>\n#nlp-mainmenu,.nlp-nav{\n  --nlp-ink:#1F1D1B;\n  --nlp-ink2:#6B6259;\n  --nlp-ink3:#9A9089;\n  --nlp-line:#E6E1D9;\n  --nlp-soft:#F6F3EE;\n  --nlp-accent:#8A6A4C;\n  --nlp-accent-dk:#75593F;\n  --nlp-font:\"Instrument Sans\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",Helvetica,Arial,sans-serif;\n}\n\n\/* =========================================================\n   BARRA\n========================================================= *\/\n#nlp-mainmenu{\n  position:fixed;\n  top:0; left:0; right:0;\n  z-index:9998;\n  padding:16px 0;\n  background:rgba(246,243,238,.78);\n  backdrop-filter:blur(18px);\n  -webkit-backdrop-filter:blur(18px);\n  border-bottom:1px solid rgba(230,225,217,.7);\n  font-family:var(--nlp-font);\n  transition:background .45s ease, padding .45s ease,\n             transform .6s cubic-bezier(.22,.61,.36,1), opacity .4s ease;\n  opacity:1;\n}\n#nlp-mainmenu *,#nlp-mainmenu *::before,#nlp-mainmenu *::after,\n.nlp-nav *,.nlp-nav *::before,.nlp-nav *::after{box-sizing:border-box;}\n\n#nlp-mainmenu.nlp-scrolled{\n  background:rgba(246,243,238,.62);\n  backdrop-filter:blur(24px);\n  -webkit-backdrop-filter:blur(24px);\n  box-shadow:0 10px 35px rgba(31,29,27,.05);\n  padding:11px 0;\n}\n#nlp-mainmenu .nlp-hd-inner{\n  display:grid;\n  grid-template-columns:1fr auto 1fr;   \/* el logo queda centrado pase lo que pase a los lados *\/\n  align-items:center;\n  gap:20px;\n  padding:0 clamp(20px,5vw,70px);\n  max-width:1600px;\n  margin:0 auto;\n}\n#nlp-mainmenu .nlp-hd-left{display:flex;align-items:center;justify-self:start;}\n#nlp-mainmenu .nlp-logo{display:flex;align-items:center;justify-self:center;}\n#nlp-mainmenu .nlp-logo img{height:45px; width:auto; display:block;}\n\n#nlp-mainmenu .nlp-hd-right{display:flex;align-items:center;gap:24px;justify-self:end;}\n\n\/* CTA de la barra *\/\n#nlp-mainmenu .nlp-bar-cta{\n  display:inline-flex;\n  align-items:center;\n  height:42px;\n  padding:0 22px;\n  background:var(--nlp-accent);\n  color:#fff;\n  font-size:14px;\n  font-weight:600;\n  letter-spacing:.01em;\n  text-decoration:none;\n  border-radius:2px;\n  white-space:nowrap;\n  transition:background .3s ease;\n}\n#nlp-mainmenu .nlp-bar-cta:hover{background:var(--nlp-accent-dk);color:#fff;}\n\n\/* idioma \u00b7 v13 (22\/09\/2026): el desplegable es una franja de lado a lado que sale de la barra, con\n   su mismo crema, y se lee como el menu principal. A la izquierda la palabra Language, a la altura\n   de MENU; a la derecha los idiomas en grande, con una linea entre ellos, que terminan justo donde\n   termina el EN; al pie, una linea y Kitchens \u00b7 Costa del Sol, como en el menu. Mientras esta\n   abierta, la pagina se apaga un poco detras (.nlp-lang-veil, mas abajo).\n   A prueba de los estilos del tema: listas, vinetas, subrayados.\n   .nlp-lang sin posicion propia: asi la franja se coloca contra la barra y no contra el boton *\/\n#nlp-mainmenu .nlp-lang{position:static;}\n#nlp-mainmenu .nlp-lang-btn{\n  display:flex;align-items:center;\n  height:42px;padding:0 2px;margin:0;\n  background:none;border:none;border-radius:0;box-shadow:none;cursor:pointer;\n  \/* misma tipografia que el CTA: Instrument Sans 600 a 14px *\/\n  font-family:var(--nlp-font);font-size:14px;font-weight:600;letter-spacing:.01em;text-transform:none;\n  color:var(--nlp-ink);transition:color .3s ease;\n}\n#nlp-mainmenu .nlp-lang-btn:hover,\n#nlp-mainmenu .nlp-lang-btn:focus,\n#nlp-mainmenu .nlp-lang-btn[aria-expanded=\"true\"]{background:none;color:var(--nlp-accent);}\n#nlp-mainmenu .nlp-lang-btn:focus-visible{outline:2px solid var(--nlp-accent);outline-offset:4px;}\n\/* la franja empieza justo en el borde de abajo de la barra y se despliega hacia abajo. Mientras esta\n   abierta la barra se vuelve del mismo crema macizo (.nlp-lang-on, lo pone el script) y se leen como\n   una sola pieza *\/\n#nlp-mainmenu .nlp-lang-panel{\n  position:absolute;top:100%;left:0;right:0;z-index:2;\n  margin:0;padding:0;background:#F8F6F2;\n  visibility:hidden;clip-path:inset(0 0 100% 0);\n  transition:clip-path .35s cubic-bezier(.4,0,.2,1), visibility 0s linear .35s;\n}\n#nlp-mainmenu .nlp-lang-panel.nlp-open{\n  visibility:visible;clip-path:inset(0 0 -60px 0);\n  transition:clip-path .6s cubic-bezier(.22,1,.36,1), visibility 0s;\n}\nbody:not(.nlp-nav-lock) #nlp-mainmenu.nlp-lang-on{background:#F8F6F2;}\n\/* por dentro, el mismo ancho y los mismos margenes que la barra *\/\n#nlp-mainmenu .nlp-lang-in{\n  display:grid;grid-template-columns:1fr auto;align-items:start;column-gap:24px;\n  max-width:1600px;margin:0 auto;padding:26px clamp(20px,5vw,70px) 0;\n}\n#nlp-mainmenu .nlp-lang-label{\n  display:flex;align-items:center;min-height:64px;margin:0;\n  font-family:var(--nlp-font);font-size:11px;font-weight:600;letter-spacing:.18em;text-transform:uppercase;\n  line-height:1;color:var(--nlp-accent);\n}\n\/* --nlp-lang-pr: lo que hay del final del EN al borde derecho de la lista. Lo mide el script al abrir *\/\n#nlp-mainmenu .nlp-lang-list{margin:0;padding:0 var(--nlp-lang-pr,2px) 0 0;list-style:none;}\n#nlp-mainmenu .nlp-lang-list li{display:flex;justify-content:flex-end;margin:0;padding:0;list-style:none;border:0;}\n#nlp-mainmenu .nlp-lang-list li::marker{content:\"\";}\n#nlp-mainmenu .nlp-lang-list li + li{border-top:1px solid var(--nlp-line);}\n\/* nombres grandes, como los del menu: el actual en tinta y el otro en gris claro. Cada uno tiene zona\n   de toque a los dos lados sin moverse de sitio *\/\n#nlp-mainmenu .nlp-lang-list a{\n  position:relative;display:inline-flex;align-items:center;\n  min-height:64px;margin:0 -16px 0 0;padding:0 16px 0 36px;\n  border:0;border-radius:0;box-shadow:none;background:none;\n  font-family:var(--nlp-font);font-size:clamp(26px,2.3vw,32px);font-weight:600;letter-spacing:-.02em;line-height:1.1;\n  color:var(--nlp-ink3);text-decoration:none;\n  transition:color .25s ease;\n}\n#nlp-mainmenu .nlp-lang-list a span{display:inline-block;transition:transform .5s cubic-bezier(.22,1,.36,1), color .3s ease;}\n#nlp-mainmenu .nlp-lang-list a:hover,\n#nlp-mainmenu .nlp-lang-list a:focus{color:var(--nlp-ink);background:none;text-decoration:none;}\n\/* al pasar el raton el nombre se desliza y se pone marron, como en el menu *\/\n#nlp-mainmenu .nlp-lang-list a:hover span{transform:translateX(-14px);color:var(--nlp-accent);}\n#nlp-mainmenu .nlp-lang-list a:focus-visible{outline:2px solid var(--nlp-accent);outline-offset:-2px;}\n#nlp-mainmenu .nlp-lang-list a[aria-current=\"true\"]{color:var(--nlp-ink);}\n\/* el pie: una linea y Kitchens \u00b7 Costa del Sol, como en el menu *\/\n#nlp-mainmenu .nlp-lang-place{\n  display:flex;align-items:center;grid-column:1 \/ -1;min-height:54px;margin:24px 0 0;\n  border-top:1px solid var(--nlp-line);\n  font-family:var(--nlp-font);font-size:11px;font-weight:600;letter-spacing:.18em;text-transform:uppercase;\n  line-height:1;color:var(--nlp-ink3);\n}\n\/* lo de dentro entra escalonado, como en el menu *\/\n#nlp-mainmenu .nlp-lang-label,\n#nlp-mainmenu .nlp-lang-list li,\n#nlp-mainmenu .nlp-lang-place{opacity:0;transform:translateY(-8px);transition:opacity .2s ease, transform .2s ease;}\n#nlp-mainmenu .nlp-lang-panel.nlp-open .nlp-lang-label,\n#nlp-mainmenu .nlp-lang-panel.nlp-open .nlp-lang-list li,\n#nlp-mainmenu .nlp-lang-panel.nlp-open .nlp-lang-place{\n  opacity:1;transform:none;transition:opacity .5s ease, transform .6s cubic-bezier(.22,1,.36,1);\n}\n#nlp-mainmenu .nlp-lang-panel.nlp-open .nlp-lang-label{transition-delay:.12s;}\n#nlp-mainmenu .nlp-lang-panel.nlp-open .nlp-lang-list li:nth-child(1){transition-delay:.16s;}\n#nlp-mainmenu .nlp-lang-panel.nlp-open .nlp-lang-list li:nth-child(2){transition-delay:.22s;}\n#nlp-mainmenu .nlp-lang-panel.nlp-open .nlp-lang-place{transition-delay:.3s;}\n\n\/* hamburguesa *\/\n#nlp-mainmenu .nlp-toggle{\n  display:flex;flex-direction:column;align-items:flex-start;gap:7px;\n  width:auto;height:auto;\n  padding:0;background:none;border:none;cursor:pointer;\n  flex:0 0 auto;\n}\n\/* las tres rayitas, con su caja propia *\/\n#nlp-mainmenu .nlp-toggle-bars{position:relative;display:block;width:30px;height:16px;flex:0 0 auto;}\n\/* la palabra, alineada con el arranque de las rayitas *\/\n#nlp-mainmenu .nlp-toggle-t{\n  display:block;font-family:var(--nlp-font);\n  font-size:11px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;\n  line-height:1;color:var(--nlp-ink);   \/* misma tinta que las rayitas *\/\n}\n#nlp-mainmenu .nlp-toggle-bars span{\n  position:absolute;left:0;height:1.5px;background:var(--nlp-ink);\n  transition:transform .4s cubic-bezier(.22,1,.36,1), opacity .25s ease, width .4s ease;\n}\n#nlp-mainmenu .nlp-toggle-bars span:nth-child(1){top:0;width:100%;}\n#nlp-mainmenu .nlp-toggle-bars span:nth-child(2){top:7px;width:70%;}\n#nlp-mainmenu .nlp-toggle-bars span:nth-child(3){top:14px;width:100%;}\n#nlp-mainmenu .nlp-toggle:hover .nlp-toggle-bars span:nth-child(2){width:100%;}\n#nlp-mainmenu .nlp-toggle[aria-expanded=\"true\"] .nlp-toggle-bars span:nth-child(1){transform:translateY(7px) rotate(45deg);}\n#nlp-mainmenu .nlp-toggle[aria-expanded=\"true\"] .nlp-toggle-bars span:nth-child(2){opacity:0;width:0;}\n#nlp-mainmenu .nlp-toggle[aria-expanded=\"true\"] .nlp-toggle-bars span:nth-child(3){transform:translateY(-7px) rotate(-45deg);}\n\n#nlp-mainmenu a:focus-visible,\n#nlp-mainmenu button:focus-visible,\n.nlp-nav a:focus-visible{\n  outline:2px solid var(--nlp-accent);outline-offset:5px;border-radius:2px;\n}\n\/* el panel recibe el foco al abrirse pero no es un control: sin aro *\/\n.nlp-nav:focus,.nlp-nav:focus-visible{outline:none;}\n\n\/* =========================================================\n   OVERLAY\n========================================================= *\/\n.nlp-nav{\n  position:fixed;\n  inset:0;\n  z-index:9997;\n  background:var(--nlp-soft);\n  font-family:var(--nlp-font);\n  opacity:0;\n  pointer-events:none;\n  transition:opacity .45s ease;\n  overflow-y:auto;\n}\n.nlp-nav[hidden]{display:none;}\n.nlp-nav.nlp-open{opacity:1;pointer-events:auto;}\n\n.nlp-nav .nlp-nav-inner{\n  min-height:100%;\n  display:flex;\n  flex-direction:column;\n  justify-content:space-between;\n  gap:48px;\n  max-width:1600px;\n  margin:0 auto;\n  padding:clamp(120px,16vh,190px) clamp(20px,5vw,70px) clamp(36px,6vh,64px);\n}\n\n.nlp-nav .nlp-nav-list{list-style:none;margin:0;padding:0;}\n\/* solo separadores entre enlaces: sin linea encima del primero ni debajo del ultimo *\/\n.nlp-nav .nlp-nav-list li + li{border-top:1px solid var(--nlp-line);}\n.nlp-nav .nlp-nav-list a{\n  display:block;\n  padding:clamp(13px,1.9vh,22px) 0;\n  font-family:var(--nlp-font);\n  font-weight:600;\n  font-size:clamp(26px,3.6vw,44px);\n  line-height:1.12;\n  letter-spacing:-.02em;\n  color:var(--nlp-ink);\n  text-decoration:none;\n  overflow:hidden;\n}\n.nlp-nav .nlp-nav-list a span{\n  display:inline-block;\n  transition:transform .5s cubic-bezier(.22,1,.36,1), color .3s ease;\n}\n.nlp-nav .nlp-nav-list a:hover span{transform:translateX(18px);color:var(--nlp-accent);}\n\n\/* entrada escalonada *\/\n.nlp-nav .nlp-nav-list li,\n.nlp-nav .nlp-nav-foot{\n  opacity:0;\n  transform:translateY(14px);\n  transition:opacity .5s ease, transform .5s cubic-bezier(.22,1,.36,1);\n}\n.nlp-nav.nlp-open .nlp-nav-list li,\n.nlp-nav.nlp-open .nlp-nav-foot{opacity:1;transform:none;}\n.nlp-nav.nlp-open .nlp-nav-list li:nth-child(1){transition-delay:.10s}\n.nlp-nav.nlp-open .nlp-nav-list li:nth-child(2){transition-delay:.16s}\n.nlp-nav.nlp-open .nlp-nav-list li:nth-child(3){transition-delay:.22s}\n.nlp-nav.nlp-open .nlp-nav-list li:nth-child(4){transition-delay:.28s}\n.nlp-nav.nlp-open .nlp-nav-foot{transition-delay:.34s}\n\n.nlp-nav .nlp-nav-foot{display:flex;flex-direction:column;gap:18px;align-items:flex-start;}\n\/* En escritorio el CTA ya esta en la barra: aqui seria el mismo boton dos veces.\n   Solo aparece en movil, donde la barra no lo lleva. *\/\n.nlp-nav .nlp-nav-cta{\n  display:none;\n  align-items:center;justify-content:center;\n  min-height:52px;padding:0 30px;\n  background:var(--nlp-accent);color:#fff;\n  font-size:16px;font-weight:600;text-decoration:none;border-radius:2px;\n  transition:background .3s ease;\n}\n.nlp-nav .nlp-nav-cta:hover{background:var(--nlp-accent-dk);color:#fff;}\n.nlp-nav .nlp-nav-meta{margin:0;font-size:15px;color:var(--nlp-ink2);display:flex;flex-wrap:wrap;gap:10px;}\n.nlp-nav .nlp-nav-meta a{color:var(--nlp-ink2);text-decoration:none;border-bottom:1px solid var(--nlp-line);}\n.nlp-nav .nlp-nav-meta a:hover{color:var(--nlp-accent);border-color:var(--nlp-accent);}\n.nlp-nav .nlp-nav-place{\n  margin:0;font-size:11px;letter-spacing:.18em;text-transform:uppercase;\n  font-weight:600;color:var(--nlp-ink3);\n}\n\nbody.nlp-nav-lock{overflow:hidden;}\n\n\/* Con el overlay abierto la barra pierde fondo y linea: el logo, el idioma\n   y el CTA quedan flotando sobre el overlay, sin caja ni raya cruzandolo. *\/\nbody.nlp-nav-lock #nlp-mainmenu{\n  background:transparent;\n  backdrop-filter:none;\n  -webkit-backdrop-filter:none;\n  border-bottom-color:transparent;\n  box-shadow:none;\n}\n\n\/* el velo del idioma: mientras la franja esta abierta, la pagina se apaga y se desenfoca\n   un poco detras *\/\n.nlp-lang-veil{\n  position:fixed;inset:0;z-index:9996;\n  background:rgba(31,29,27,.24);\n  -webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);\n  opacity:0;visibility:hidden;pointer-events:none;\n  transition:opacity .3s ease, visibility 0s linear .3s;\n}\n.nlp-lang-veil.nlp-open{opacity:1;visibility:visible;pointer-events:auto;transition:opacity .5s ease, visibility 0s;}\n\n\/* =========================================================\n   M\u00d3VIL\n========================================================= *\/\n@media(max-width:820px){\n  \/* v12: mas aire arriba, el logo y la hamburguesa ya no van pegados al borde *\/\n  #nlp-mainmenu{padding:calc(18px + env(safe-area-inset-top)) 0 14px;}\n  #nlp-mainmenu.nlp-scrolled{padding:calc(12px + env(safe-area-inset-top)) 0 10px;}\n  #nlp-mainmenu .nlp-hd-inner{padding:0 20px;gap:16px;}\n  #nlp-mainmenu .nlp-logo img{height:34px;}\n  #nlp-mainmenu .nlp-hd-right{gap:18px;}\n  #nlp-mainmenu .nlp-bar-cta{display:none;}   \/* el CTA vive en el overlay *\/\n  \/* v12: el idioma se queda en la barra, siempre a la vista, con zona de toque de 44px *\/\n  #nlp-mainmenu .nlp-lang-btn{min-width:44px;height:44px;justify-content:flex-end;font-size:13px;letter-spacing:.08em;}\n  \/* v13: la franja del idioma, con los margenes de la barra y los nombres un poco mas chicos *\/\n  #nlp-mainmenu .nlp-lang-in{padding:16px 20px 0;}\n  #nlp-mainmenu .nlp-lang-label{min-height:56px;}\n  #nlp-mainmenu .nlp-lang-list a{min-height:56px;font-size:26px;}\n  #nlp-mainmenu .nlp-lang-place{margin-top:16px;min-height:50px;}\n  \/* v12: zona de toque de 46x46 en la hamburguesa, sin mover las rayitas de sitio *\/\n  #nlp-mainmenu .nlp-toggle{padding:6px 8px;margin:-6px -8px;}\n  .nlp-nav .nlp-nav-inner{padding-top:104px;gap:36px;}\n  \/* v12: el boton del panel abierto lleva el texto a la izquierda *\/\n  .nlp-nav .nlp-nav-cta{display:inline-flex;width:100%;justify-content:flex-start;padding:0 20px;}\n  .nlp-nav .nlp-nav-meta{flex-direction:column;gap:8px;}\n  .nlp-nav .nlp-nav-meta span{display:none;}\n}\n\n\/* el idioma del panel ya no se muestra: desde v12 el selector de la barra se ve tambien en movil *\/\n.nlp-nav .nlp-nav-lang{display:none;}\n\n@media(prefers-reduced-motion:reduce){\n  #nlp-mainmenu,#nlp-mainmenu *,#nlp-mainmenu *::after,.nlp-nav,.nlp-nav *,.nlp-lang-veil{\n    transition-duration:.01ms !important;transition-delay:0s !important;animation:none !important;\n  }\n}\n<\/style>\n\n<script>\n(function(){\n  function init(){\n    var hd=document.getElementById(\"nlp-mainmenu\");\n    var nav=document.getElementById(\"nlp-nav\");\n    if(!hd||!nav) return;\n\n    var toggle=hd.querySelector(\".nlp-toggle\");\n    var langBtn=hd.querySelector(\".nlp-lang-btn\");\n    var langPan=hd.querySelector(\".nlp-lang-panel\");\n    var langLst=hd.querySelector(\".nlp-lang-list\");\n    var langVeil=document.querySelector(\".nlp-lang-veil\");\n    var lastFocus=null;\n\n    \/* ---------- idioma en el overlay, solo movil ---------- *\/\n    var foot=nav.querySelector(\".nlp-nav-foot\");\n    if(foot && !nav.querySelector(\".nlp-nav-lang\")){\n      var p=document.createElement(\"p\");\n      p.className=\"nlp-nav-lang\";\n      p.innerHTML='<a href=\"\/\" hreflang=\"en\">English<\/a>'+\n                  '<a href=\"\/es\/\" hreflang=\"es\" aria-current=\"true\">Espa\u00f1ol<\/a>';\n      foot.appendChild(p);\n    }\n\n    \/* ---------- scroll ----------\n       El menu se mantiene siempre visible; el scroll solo cambia el\n       fondo\/sombra (.nlp-scrolled) al bajar un poco, sin esconderse. *\/\n    var tick=false;\n    function onScroll(){\n      var y=window.scrollY;\n      hd.classList.toggle(\"nlp-scrolled\", y>12);\n    }\n    window.addEventListener(\"scroll\",function(){\n      if(tick) return; tick=true;\n      requestAnimationFrame(function(){ onScroll(); tick=false; });\n    },{passive:true});\n\n    \/* ---------- idioma ----------\n       La franja va de lado a lado y los nombres terminan justo donde termina el EN: al abrir se mide\n       la distancia de ese punto al borde derecho de la lista (--nlp-lang-pr) y su posicion en la\n       franja (--nlp-lang-x). Se cierra tocando fuera, con Esc, al salir con el tabulador o al hacer\n       scroll. *\/\n    var langY=0;\n    function langOpen(){ return !!langPan && langPan.classList.contains(\"nlp-open\"); }\n    function alignLang(){\n      try{\n        var r=document.createRange(); r.selectNodeContents(langBtn);\n        var fin=r.getBoundingClientRect().right;\n        if(!fin){ var b=langBtn.getBoundingClientRect(); fin=b.right-(parseFloat(getComputedStyle(langBtn).paddingRight)||0); }\n        var pr=langLst.getBoundingClientRect().right-fin;\n        if(pr>=0) langPan.style.setProperty(\"--nlp-lang-pr\", pr+\"px\");\n        langPan.style.setProperty(\"--nlp-lang-x\", (fin-langPan.getBoundingClientRect().left)+\"px\");\n      }catch(err){}\n    }\n    function setLang(o){\n      if(!langPan) return;\n      if(o) alignLang();\n      langPan.classList.toggle(\"nlp-open\", o);\n      hd.classList.toggle(\"nlp-lang-on\", o);\n      if(langVeil) langVeil.classList.toggle(\"nlp-open\", o);\n      if(langBtn) langBtn.setAttribute(\"aria-expanded\", o?\"true\":\"false\");\n      langY=window.scrollY;\n    }\n    function closeLang(){ if(langOpen()) setLang(false); }\n    if(langBtn&&langPan&&langLst){\n      langBtn.addEventListener(\"click\",function(e){\n        e.stopPropagation();\n        setLang(!langOpen());\n      });\n      document.addEventListener(\"click\",function(e){\n        if(langOpen() && !hd.querySelector(\".nlp-lang\").contains(e.target)) closeLang();\n      });\n      hd.querySelector(\".nlp-lang\").addEventListener(\"focusout\",function(e){\n        if(e.relatedTarget && !this.contains(e.relatedTarget)) closeLang();\n      });\n      window.addEventListener(\"resize\",function(){ if(langOpen()) alignLang(); });\n      window.addEventListener(\"scroll\",function(){\n        if(langOpen() && Math.abs(window.scrollY-langY)>40) closeLang();\n      },{passive:true});\n    }\n\n    \/* ---------- overlay ---------- *\/\n    var viaTeclado=false;   \/* true si se abrio con Enter o Espacio, o se cierra con Esc *\/\n    function openNav(){\n      lastFocus=document.activeElement;\n      nav.hidden=false;\n      \/* fuerza reflow para que la transicion arranque *\/\n      void nav.offsetWidth;\n      nav.classList.add(\"nlp-open\");\n      toggle.setAttribute(\"aria-expanded\",\"true\");\n      toggle.setAttribute(\"aria-label\",\"Cerrar el men\u00fa\");\n      document.body.classList.add(\"nlp-nav-lock\");\n      closeLang();\n      \/* El foco entra en el panel, para que el teclado y los lectores de\n         pantalla sepan donde estan. Con raton o dedo va al panel, que no\n         dibuja aro: asi no sale el recuadro marron en el primer enlace.\n         Con teclado va directo al primer enlace y ahi el aro se ve. *\/\n      var first=nav.querySelector(\"a\");\n      setTimeout(function(){\n        var destino=(viaTeclado && first) ? first : nav;\n        destino.focus({preventScroll:true});\n      },380);\n    }\n    function closeNav(){\n      nav.classList.remove(\"nlp-open\");\n      toggle.setAttribute(\"aria-expanded\",\"false\");\n      toggle.setAttribute(\"aria-label\",\"Abrir el men\u00fa\");\n      document.body.classList.remove(\"nlp-nav-lock\");\n      setTimeout(function(){ if(!nav.classList.contains(\"nlp-open\")) nav.hidden=true; },460);\n      \/* el foco vuelve al boton solo si se usa el teclado *\/\n      if(viaTeclado && lastFocus) lastFocus.focus({preventScroll:true});\n    }\n    toggle.addEventListener(\"click\",function(e){\n      viaTeclado=(e.detail===0);   \/* un clic hecho con el teclado llega con detail 0 *\/\n      if(nav.classList.contains(\"nlp-open\")) closeNav(); else openNav();\n    });\n    nav.querySelectorAll(\"a\").forEach(function(a){\n      a.addEventListener(\"click\",function(){ closeNav(); });\n    });\n    document.addEventListener(\"keydown\",function(e){\n      if(e.key===\"Escape\"){\n        closeLang();\n        if(nav.classList.contains(\"nlp-open\")){ viaTeclado=true; closeNav(); }\n      }\n      \/* el foco no se escapa del overlay. Solo cuentan los enlaces que se\n         ven: en escritorio el selector de idioma del panel esta oculto y no\n         puede recibir el foco, asi que no puede hacer de \"ultimo\" *\/\n      if(e.key===\"Tab\" && nav.classList.contains(\"nlp-open\")){\n        var f=[].filter.call(nav.querySelectorAll(\"a,button\"),function(el){ return el.getClientRects().length>0; });\n        if(!f.length) return;\n        var first=f[0], lastEl=f[f.length-1];\n        if(e.shiftKey && (document.activeElement===first || document.activeElement===nav)){ e.preventDefault(); lastEl.focus(); }\n        else if(!e.shiftKey && document.activeElement===lastEl){ e.preventDefault(); first.focus(); }\n      }\n    });\n    window.addEventListener(\"resize\",function(){\n      if(window.innerWidth>820 && nav.classList.contains(\"nlp-open\")) closeNav();\n    });\n  }\n  if(document.readyState===\"loading\") document.addEventListener(\"DOMContentLoaded\",init);\n  else init();\n})();\n<\/script>\n\n<!-- ============================================================\n     Calendly: widget oficial + conexion de los botones .nlp-calendly-btn\n     Este menu va en TODAS las paginas, asi que trae su propia copia\n     del widget de Calendly (para que el popup funcione en cualquier\n     pagina, no solo en la home). El script esta protegido con\n     window.__nlpCalendlyWired asi que, si esta MISMA copia tambien\n     esta presente en otra seccion de la misma pagina (por ejemplo la\n     home, que tiene su propio boton final), no se conecta dos veces\n     ni abre el popup por duplicado.\n     ============================================================ -->\n<link href=\"https:\/\/assets.calendly.com\/assets\/external\/widget.css\" rel=\"stylesheet\">\n<script src=\"https:\/\/assets.calendly.com\/assets\/external\/widget.js\" async><\/script>\n<script>\n(function(){\n  if(window.__nlpCalendlyWired) return;\n  window.__nlpCalendlyWired = true;\n  var CALENDLY_URL = 'https:\/\/calendly.com\/nextlevelmontajes\/30min';\n  document.addEventListener('click', function(e){\n    var btn = e.target.closest ? e.target.closest('.nlp-calendly-btn') : null;\n    if(!btn) return;\n    e.preventDefault();\n    e.stopPropagation();\n    if(window.Calendly){\n      window.Calendly.initPopupWidget({url: CALENDLY_URL});\n    } else {\n      window.open(CALENDLY_URL, '_blank');\n    }\n  });\n})();\n<\/script>\n\n<!-- ============================================================\n     NEXT LEVEL COCINAS \u00b7 home (contenido de la pagina)\n     Opcion \"El estudio\" \u00b7 titulares en Instrument Sans.\n     El menu va arriba del todo y el footer al final de este\n     mismo archivo. Todo prefijado .nlp- y las variables van\n     dentro de .nlp-home, no en :root, para no chocar con el\n     tema de Elementor.\n     ============================================================ -->\n<div class=\"nlp-home\" lang=\"es\">\n\n<!-- ============================================================\n     hm-01-hero \u00b7 texto a la izquierda, proyecto a toda altura\n\n     27\/09\/2026 (v23) \u00b7 la home presenta los dos servicios. Titular\n     elegido entre cuatro frases y cuatro letras: \"A new\n     kitchen, or yours, made new.\" en DOS PESOS: la primera parte en\n     la negrita de siempre y la segunda (.nlp-hero-alt) en letra fina,\n     empezando siempre en linea propia, tambien en el movil.\n     ============================================================ -->\n<section class=\"nlp-hero\">\n  <div class=\"nlp-hero-t\">\n    <div>\n      <h1 class=\"nlp-display nlp-hero-h\">Una cocina nueva,<br> <span class=\"nlp-hero-alt\">o la tuya, redise\u00f1ada.<\/span><\/h1>\n      <p class=\"nlp-hero-l\">En ambos casos, la dise\u00f1amos contigo y la instala nuestro propio equipo.<\/p>\n      <p class=\"nlp-hero-m\">Cocinas &middot; Costa del Sol<\/p>\n      <a class=\"nlp-hero-cta nlp-calendly-btn\" href=\"#\" id=\"nlp-calendly-btn-hero\">Concertar una visita<\/a>\n    <\/div>\n  <\/div>\n  <div class=\"nlp-hero-img\">\n    <!-- 27\/09\/2026 (v23) \u00b7 foto del hero cambiada a proyecto3-11.png, con esa misma URL. OJO: es\n         la misma foto que la segunda del proyecto 01 (Marbella) dentro del popup de Projects -->\n    <img decoding=\"async\" src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/proyecto3-11.png\"\n         alt=\"Cocina montada por Next Level, Costa del Sol\" fetchpriority=\"high\">\n  <\/div>\n<\/section>\n\n<!-- ============================================================\n     hm-02-work \u00b7 la obra, lo primero despues del hero\n\n     22\/09\/2026 \u00b7 leyendas reales puestas: cada proyecto con su\n     zona en .nlp-cap-t (mismo dato replicado en data-cap, que es\n     lo que se ve al abrir la foto en grande, para que no quede\n     desactualizado ahi). El orden es el de aparicion en pantalla,\n     la foto grande primero.\n     27\/09\/2026 (v23) \u00b7 fuera la segunda linea (.nlp-cap-s, \"Fronts,\n     sides and lighting\"): las cocinas se presentan como cocinas\n     terminadas, sin lenguaje de reforma, igual que en Projects.\n     27\/09\/2026 (v24) \u00b7 al pinchar una foto se abre EL MISMO popup que\n     en Projects, con el caso de esa cocina (flechas y contador 1\/3,\n     2\/3, 3\/3). Nombres corregidos el 27\/09, los de Projects: la\n     grande es Fuengirola y la vertical Marbella. La ancha es la cocina\n     de Estepona que se anadio a Projects como proyecto 08. El caso NO\n     se escribe aqui: cada <figure> lleva una marca DESDE-PROJECTS y al\n     montar la Home se copia de prod-projects.html (ver\n     _fuente\/desde_projects.py). Para cambiar un texto, se cambia en\n     Projects y se vuelven a montar las dos paginas.\n     ============================================================ -->\n<section class=\"nlp-work\">\n  <div class=\"nlp-in\">\n    <div class=\"nlp-work-head\">\n      <div>\n        <p class=\"nlp-eyebrow\">Costa del Sol<\/p>\n        <h2 class=\"nlp-display nlp-h2\">\u00daltimos trabajos<\/h2>\n      <\/div>\n    <\/div>\n\n    <div class=\"nlp-work-grid\">\n    <figure class=\"nlp-proj-item nlp-proj-lead nlp-pj-item\">\n      <button class=\"nlp-shot nlp-pj-open\" type=\"button\" aria-label=\"Ver proyecto, Fuengirola\">\n        <img decoding=\"async\" src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/cocina2.jpeg\"\n             alt=\"Cocina gris con encimera de piedra blanca, Fuengirola\" loading=\"lazy\">\n      <\/button>\n      <figcaption class=\"nlp-cap\">\n        <span class=\"nlp-cap-t\">Fuengirola<\/span>\n      <\/figcaption>\n      <div class=\"nlp-pj-case\" hidden>\n        <p class=\"nlp-pj-meta\">Fuengirola<\/p>\n        <h2 class=\"nlp-pj-case-h\">Una cocina nueva, con la piedra como protagonista.<\/h2>\n        <p class=\"nlp-pj-case-p\">Encimera y frontal en la misma piedra blanca, y frentes lisos en gris que la dejan lucir.<\/p>\n        <dl class=\"nlp-pj-kv\">\n          <div><dt>Frentes<\/dt><dd>Gris liso<\/dd><\/div>\n          <div><dt>Encimera y frontal<\/dt><dd>Piedra blanca<\/dd><\/div>\n        <\/dl>\n        <div class=\"nlp-pj-shots\">\n          <div class=\"nlp-pj-vid\"><iframe src=\"https:\/\/player.vimeo.com\/video\/1226921548?dnt=1\" title=\"Next Level Cocinas, v\u00eddeo de la cocina\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture\" allowfullscreen loading=\"lazy\"><\/iframe><\/div>\n          <img decoding=\"async\" src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/proyecto3imagen.png\" alt=\"\" loading=\"lazy\">\n        <\/div>\n      <\/div>\n    <\/figure>\n\n    <div class=\"nlp-pair\">\n      <figure class=\"nlp-proj-item nlp-pj-item\">\n        <button class=\"nlp-shot nlp-tall nlp-pj-open\" type=\"button\" aria-label=\"Ver proyecto, Marbella\">\n          <img decoding=\"async\" src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/cocina3.png\"\n               alt=\"Cocina con isla de piedra oscura, Marbella\" loading=\"lazy\">\n        <\/button>\n        <figcaption class=\"nlp-cap\">\n          <span class=\"nlp-cap-t\">Marbella<\/span>\n        <\/figcaption>\n        <div class=\"nlp-pj-case\" hidden>\n        <p class=\"nlp-pj-meta\">Marbella<\/p>\n        <h2 class=\"nlp-pj-case-h\">M\u00e1rmol oscuro en una cocina llena de luz.<\/h2>\n        <p class=\"nlp-pj-case-p\">Frentes en blanco mate en toda la cocina, puertas de cristal en los muebles altos y una isla de m\u00e1rmol oscuro que se lleva todas las miradas.<\/p>\n        <dl class=\"nlp-pj-kv\">\n          <div><dt>Frentes<\/dt><dd>Blanco mate, muebles altos con cristal<\/dd><\/div>\n          <div><dt>Encimera<\/dt><dd>M\u00e1rmol oscuro<\/dd><\/div>\n        <\/dl>\n        <div class=\"nlp-pj-shots\">\n          <img decoding=\"async\" src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/proyecto-3-2.png\" alt=\"\" loading=\"lazy\">\n          <img decoding=\"async\" src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/proyecto3-11.png\" alt=\"\" loading=\"lazy\">\n        <\/div>\n      <\/div>\n      <\/figure>\n      <figure class=\"nlp-proj-item nlp-pj-item\">\n        <button class=\"nlp-shot nlp-wide nlp-pj-open\" type=\"button\" aria-label=\"Ver proyecto, Estepona\">\n          <img decoding=\"async\" src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/cocina1-.jpeg\"\n               alt=\"Cocina con muebles altos de roble claro, Estepona\" loading=\"lazy\">\n        <\/button>\n        <figcaption class=\"nlp-cap\">\n          <span class=\"nlp-cap-t\">Estepona &middot; Los Granados del Mar<\/span>\n        <\/figcaption>\n        <div class=\"nlp-pj-case\" hidden>\n        <p class=\"nlp-pj-meta\">Estepona &middot; Los Granados del Mar<\/p>\n        <h2 class=\"nlp-pj-case-h\">Roble claro arriba, blanco hueso abajo.<\/h2>\n        <p class=\"nlp-pj-case-p\">Muebles altos en roble claro, bajos en blanco hueso mate y, entre ambos, encimera de Silestone. La tira de luz bajo los altos resalta la veta de la madera.<\/p>\n        <dl class=\"nlp-pj-kv\">\n          <div><dt>Frentes<\/dt><dd>Roble claro y blanco hueso mate<\/dd><\/div>\n          <div><dt>Encimera<\/dt><dd>Silestone<\/dd><\/div>\n        <\/dl>\n        <div class=\"nlp-pj-shots\">\n          <img decoding=\"async\" src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/proyecto-08-roble-1.jpg\" alt=\"\" loading=\"lazy\">\n          <img decoding=\"async\" src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/proyecto-08-roble-2.jpg\" alt=\"\" loading=\"lazy\">\n        <\/div>\n      <\/div>\n      <\/figure>\n    <\/div>\n    <\/div>\n    <a class=\"nlp-work-more\" href=\"\/es\/proyectos\">Ver todos los proyectos<\/a>\n  <\/div>\n<\/section>\n\n<!-- ============================================================\n     hm-03-who \u00b7 quien esta del otro lado\n\n     FALTA \u00b7 RETRATO Y NOMBRE, dos cosas:\n     1. El retrato. El bloque de la foto esta comentado abajo:\n        quita los <!- - y - -> y pon la URL de tu foto una vez\n        subida a WordPress. Mientras siga comentado el texto\n        ocupa todo el ancho y no se ve ningun hueco vacio.\n     2. El nombre. La linea .nlp-who-name esta comentada por lo\n        mismo. Si decides que la web lleve nombre, descomentala.\n     ============================================================ -->\n<section class=\"nlp-who\">\n  <div class=\"nlp-in nlp-who-in\">\n    <!-- RETRATO: descomentar cuando tengas la foto subida\n    <div class=\"nlp-portrait\">\n      <img decoding=\"async\" src=\"URL-DE-TU-FOTO.jpg\" alt=\"\" loading=\"lazy\">\n    <\/div>\n    -->\n    <div class=\"nlp-who-t\">\n      <p class=\"nlp-eyebrow\">Qui\u00e9n est\u00e1 detr\u00e1s<\/p>\n      <h2 class=\"nlp-display nlp-h2\">Un equipo propio, un&nbsp;solo&nbsp;responsable.<\/h2>\n      <!-- NOMBRE: descomentar si la web lleva nombre\n      <p class=\"nlp-who-name\">Tu nombre<\/p>\n      -->\n      <p class=\"nlp-body nlp-who-p\">Detr\u00e1s de cada cocina hay un equipo con oficio y una persona que lo dirige: la misma que va a tu casa, te asesora en cada elecci\u00f3n y responde de cada detalle, tambi\u00e9n cuando la cocina ya est\u00e1 terminada.<\/p>\n      <p class=\"nlp-body nlp-who-p\">Todo empieza en tu casa, viendo el espacio y la luz tal como son.<\/p>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- ============================================================\n     hm-04-paths \u00b7 los dos servicios, uno al lado del otro\n     27\/09\/2026 (v23) \u00b7 sustituye a \"What changes, and what stays\".\n     Mismo fondo que tenia esa seccion (.nlp-does). Cada bloque\n     enlaza a su pagina.\n     ============================================================ -->\n<section class=\"nlp-does\">\n  <div class=\"nlp-in\">\n    <div class=\"nlp-paths-head\">\n      <p class=\"nlp-eyebrow\">Qu\u00e9 hacemos<\/p>\n      <h2 class=\"nlp-display nlp-h2\">Dos tipos de cocina,<br>el mismo cuidado.<\/h2>\n    <\/div>\n    <div class=\"nlp-paths\">\n      <div class=\"nlp-path\">\n        <p class=\"nlp-path-k\">Cocinas nuevas<\/p>\n        <h3>La cocina entera, de principio a&nbsp;fin.<\/h3>\n        <p>Distribuci\u00f3n, fontaner\u00eda, electricidad y muebles, todo nuevo. Coordinamos cada etapa y, antes de empezar, ver\u00e1s tu cocina en un render.<\/p>\n        <a href=\"\/es\/cocinas-nuevas\">Ver cocinas nuevas<\/a>\n      <\/div>\n      <div class=\"nlp-path\">\n        <p class=\"nlp-path-k\">Redise\u00f1o de cocinas<\/p>\n        <h3>Con los muebles que ya tienes.<\/h3>\n        <p>Frentes, laterales, z\u00f3calos, iluminaci\u00f3n y tiradores nuevos. De tres a cinco d\u00edas de montaje, sin obra.<\/p>\n        <a href=\"\/es\/rediseno-de-cocinas\">Ver redise\u00f1o de cocinas<\/a>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- ============================================================\n     hm-05-film \u00b7 las muestras, sin una palabra encima\n     ============================================================ -->\n<section class=\"nlp-film\">\n  <!-- FALTA \u00b7 subir a WordPress nl-video-acabados-720p.mp4 (esta en WEB\/home): pesa 0,9 MB\n       en vez de 14 y se ve en todos los navegadores. Mientras no este subido, el navegador\n       usa el video anterior (la segunda fuente). -->\n  <video muted loop playsinline preload=\"none\" aria-hidden=\"true\" tabindex=\"-1\" data-nlp-lazy>\n    <source src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/nl-video-acabados-720p.mp4\" type=\"video\/mp4\">\n    <source src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/09112.mp4\" type=\"video\/mp4\">\n  <\/video>\n<\/section>\n\n<!-- ============================================================\n     hm-06-materials \u00b7 los seis acabados de pie\n\n     22\/09\/2026 \u00b7 preocupaba que seis acabados pudieran leerse como \"esto\n     es todo, no hay mas\". Dos retoques, nada de layout nuevo:\n     el texto de arriba ahora dice \"to start\" (la idea de que sigue entra\n     ANTES de que cuenten los cuadraditos, no solo despues) y la nota de\n     abajo destaca su primera frase en negrita y mas oscura, mas cerca de\n     la fila, para que no quede perdida como una letra chica cualquiera.\n     ============================================================ -->\n<section class=\"nlp-mat\">\n  <div class=\"nlp-in\">\n    <div class=\"nlp-mat-head\">\n      <p class=\"nlp-eyebrow\">Materiales<\/p>\n      <h2 class=\"nlp-display nlp-h2\">Un poco de nuestra&nbsp;paleta.<\/h2>\n      <p class=\"nlp-body nlp-mat-p\">Frentes con acabado madera o lacados mate.<\/p>\n    <\/div>\n    <div class=\"nlp-mat-row\">\n      <figure class=\"nlp-mat-panel\">\n        <span class=\"nlp-mat-face nlp-mat-flat\" style=\"background-color:#F6F5FA;\"><\/span>\n        <figcaption class=\"nlp-mat-cap\"><span class=\"nlp-mat-name\">Blanco Polar<\/span><span class=\"nlp-mat-line\">Refleja la luz. La opci\u00f3n segura para una cocina peque\u00f1a u orientada al norte.<\/span><\/figcaption>\n      <\/figure>\n      <figure class=\"nlp-mat-panel\">\n        <span class=\"nlp-mat-face nlp-mat-flat\" style=\"background-color:#CDC6BC;\"><\/span>\n        <figcaption class=\"nlp-mat-cap\"><span class=\"nlp-mat-name\">Cashmere<\/span><span class=\"nlp-mat-line\">M\u00e1s c\u00e1lido que el blanco y m\u00e1s suave con el sol fuerte del mediod\u00eda.<\/span><\/figcaption>\n      <\/figure>\n      <figure class=\"nlp-mat-panel is-dark\">\n        <span class=\"nlp-mat-face nlp-mat-flat\" style=\"background-color:#847B76;\"><\/span>\n        <figcaption class=\"nlp-mat-cap\"><span class=\"nlp-mat-name\">Basalto<\/span><span class=\"nlp-mat-line\">Un gris medio que queda muy bien con una encimera de piedra.<\/span><\/figcaption>\n      <\/figure>\n      <figure class=\"nlp-mat-panel\">\n        <span class=\"nlp-mat-face\"><img src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/finish-warm-oak.jpg\" alt=\"Acabado Roble C\u00e1lido, veta de madera\" loading=\"lazy\" decoding=\"async\"><\/span>\n        <figcaption class=\"nlp-mat-cap\"><span class=\"nlp-mat-name\">Roble C\u00e1lido<\/span><span class=\"nlp-mat-line\">C\u00e1lido sin tirar a naranja. Va bien con casi cualquier encimera.<\/span><\/figcaption>\n      <\/figure>\n      <figure class=\"nlp-mat-panel is-dark\">\n        <span class=\"nlp-mat-face\"><img src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/finish-aged-walnut.jpg\" alt=\"Acabado Nogal Envejecido, veta de madera\" loading=\"lazy\" decoding=\"async\"><\/span>\n        <figcaption class=\"nlp-mat-cap\"><span class=\"nlp-mat-name\">Nogal Envejecido<\/span><span class=\"nlp-mat-line\">Da profundidad a una cocina grande, sobre todo si entra mucha luz natural.<\/span><\/figcaption>\n      <\/figure>\n      <figure class=\"nlp-mat-panel is-dark\">\n        <span class=\"nlp-mat-face\"><img src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/finish-smoked-oak.jpg\" alt=\"Acabado Roble Ahumado, veta de madera\" loading=\"lazy\" decoding=\"async\"><\/span>\n        <figcaption class=\"nlp-mat-cap\"><span class=\"nlp-mat-name\">Roble Ahumado<\/span><span class=\"nlp-mat-line\">Parece casi negro hasta que te acercas, y entonces aparece la veta.<\/span><\/figcaption>\n      <\/figure>\n    <\/div>\n    <p class=\"nlp-mat-note\"><strong>Es solo el punto de partida.<\/strong> En la visita ver\u00e1s la gama completa de colores y acabados, en persona u online.<\/p>\n  <\/div>\n<\/section>\n\n<!-- ============================================================\n     hm-07-how \u00b7 los tres pasos\n     ============================================================ -->\n<section class=\"nlp-how\">\n  <div class=\"nlp-in\">\n    <div class=\"nlp-how-head\">\n      <p class=\"nlp-eyebrow\">C\u00f3mo funciona<\/p>\n      <h2 class=\"nlp-display nlp-h2\">Tres pasos.<\/h2>\n    <\/div>\n    <ol class=\"nlp-steps\">\n      <li>\n        <span class=\"nlp-num\">01<\/span>\n        <h3>Vamos a tu casa<\/h3>\n        <p>Vemos tu cocina, c\u00f3mo la usas y lo que te gustar\u00eda cambiar, y te decimos con franqueza qu\u00e9 te conviene.<\/p>\n      <\/li>\n      <li>\n        <span class=\"nlp-num\">02<\/span>\n        <h3>La propuesta, por escrito<\/h3>\n        <p>Si es un redise\u00f1o, un precio cerrado en 48 horas. Si es una cocina nueva, primero la propuesta de dise\u00f1o.<\/p>\n      <\/li>\n      <li>\n        <span class=\"nlp-num\">03<\/span>\n        <h3>Montaje y entrega<\/h3>\n        <p>Nuestros montadores son gente del oficio, y te entregamos la cocina terminada, sin cabos sueltos.<\/p>\n      <\/li>\n    <\/ol>\n  <\/div>\n<\/section>\n\n<!-- ============================================================\n     hm-08-cta \u00b7 cierre\n     ============================================================ -->\n<section class=\"nlp-cta\">\n  <div class=\"nlp-in nlp-cta-in\">\n    <h2 class=\"nlp-display nlp-cta-h\">Elige el d\u00eda.<br>Del resto nos ocupamos.<\/h2>\n    <p class=\"nlp-cta-p\">Pasamos a ver tu cocina, sin ning\u00fan coste.<\/p>\n    <a class=\"nlp-cta-btn nlp-calendly-btn\" href=\"#\" id=\"nlp-calendly-btn\">Concertar una visita<\/a>\n    <p class=\"nlp-cta-c\">\n      <a href=\"mailto:design@nextlevelcocinas.com\">design@nextlevelcocinas.com<\/a>\n      <span aria-hidden=\"true\">&middot;<\/span>\n      <a href=\"tel:+34647036816\">+34 647 036 816<\/a>\n    <\/p>\n  <\/div>\n<\/section>\n\n\n<\/div><!-- \/.nlp-home -->\n\n<!-- ============================================================\n     27\/09\/2026 (v24) \u00b7 el popup de proyectos, el mismo de Projects.\n     Va FUERA de .nlp-home a proposito, para que ninguna regla de la\n     Home le cambie el aspecto. Se copia al montar (DESDE-PROJECTS).\n     ============================================================ -->\n<dialog class=\"nlp-pj-modal\" lang=\"es\" id=\"nlp-pj-modal\" aria-labelledby=\"nlp-pj-modal-h\">\n  <div class=\"nlp-pj-modal-bar\">\n    <div class=\"nlp-pj-nav\">\n      <button type=\"button\" class=\"nlp-pj-arrow\" data-go=\"-1\" aria-label=\"Cocina anterior\">\n        <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M15 4 7 12l8 8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>\n      <\/button>\n      <span class=\"nlp-pj-count\" id=\"nlp-pj-count\"><\/span>\n      <button type=\"button\" class=\"nlp-pj-arrow\" data-go=\"1\" aria-label=\"Cocina siguiente\">\n        <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M9 4l8 8-8 8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>\n      <\/button>\n    <\/div>\n    <button type=\"button\" class=\"nlp-pj-x\" data-close aria-label=\"Cerrar\">\n      <svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M6 6l12 12M18 6L6 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\"\/><\/svg>\n    <\/button>\n  <\/div>\n  <div class=\"nlp-pj-modal-body\" id=\"nlp-pj-modal-body\"><\/div>\n<\/dialog>\n\n<style>\n\/* =========================================================\n   NEXT LEVEL \u00b7 home \u00b7 variables dentro de .nlp-home a proposito\n   ========================================================= *\/\n.nlp-home{\n  --nlp-ink:#1F1D1B; --nlp-ink2:#6B6259; --nlp-ink3:#9A9089;\n  --nlp-line:#E6E1D9; --nlp-soft:#F6F3EE; --nlp-bg:#FFFFFF;\n  --nlp-accent:#8A6A4C; --nlp-accent-dk:#75593F;\n  --nlp-font:\"Instrument Sans\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",Helvetica,Arial,sans-serif;\n  --nlp-pad:clamp(20px,5vw,70px);\n  --nlp-bar:77px;   \/* alto de la barra del menu, para el hueco del hero *\/\n  background:var(--nlp-bg); color:var(--nlp-ink);\n  font-family:var(--nlp-font); font-size:18px; line-height:1.65;\n}\n.nlp-home *{box-sizing:border-box;}\n.nlp-home img,.nlp-home video{display:block;max-width:100%;}\n.nlp-in{max-width:1600px;margin:0 auto;padding:0 var(--nlp-pad);}\n\n.nlp-eyebrow{\n  font-size:11px;letter-spacing:.18em;text-transform:uppercase;font-weight:600;\n  color:var(--nlp-accent);margin:0 0 16px;\n}\n\/* Titulares en Instrument Sans 600. Decision del 13\/09\/2026:\n   se descarta Fraunces para la web, asi que ya no se carga. *\/\n.nlp-display{font-weight:600;letter-spacing:-.022em;line-height:1.05;margin:0;}\n.nlp-body{font-size:18px;line-height:1.65;color:var(--nlp-ink2);}\n.nlp-h2{font-size:clamp(28px,3.2vw,42px);color:var(--nlp-ink);}\n\n\/* ---------- hero ---------- *\/\n.nlp-hero{\n  display:grid;grid-template-columns:46fr 54fr;\n  min-height:100vh;min-height:100dvh;background:var(--nlp-soft);\n}\n.nlp-hero-t{display:flex;align-items:center;padding:calc(var(--nlp-bar) + 40px) clamp(28px,3.4vw,64px) 40px var(--nlp-pad);}\n.nlp-hero-h{font-size:clamp(34px,3.5vw,54px);color:var(--nlp-ink);margin-bottom:26px;}\n.nlp-hero-l{font-size:19px;line-height:1.55;color:var(--nlp-ink2);margin:0;max-width:30ch;}\n.nlp-hero-m{\n  margin:clamp(38px,6vh,68px) 0 0;padding-top:18px;border-top:1px solid var(--nlp-line);\n  width:-moz-fit-content;width:fit-content;white-space:nowrap;\n  font-size:11px;font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:var(--nlp-ink2);\n}\n.nlp-hero-img{position:relative;overflow:hidden;background:var(--nlp-line);}\n.nlp-hero-img img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;\n  \/* mismo filtro que la cuadricula de Projects, para que los colores vayan a juego (22\/09\/2026) *\/\n  filter:grayscale(40%) sepia(10%) saturate(88%) contrast(.96) brightness(1.03);\n  \/* ken burns sutil: zoom lento de ida y vuelta, para que la foto del hero no quede tan quieta (22\/09\/2026) *\/\n  transform-origin:56% 46%;animation:nlpKenBurns 24s ease-in-out infinite alternate;}\n@keyframes nlpKenBurns{from{transform:scale(1);}to{transform:scale(1.08);}}\n\n\/* ---------- obra ---------- *\/\n.nlp-work{padding:clamp(76px,9vw,128px) 0 clamp(56px,7vw,96px);}\n.nlp-work-head{display:flex;justify-content:space-between;align-items:flex-end;gap:32px;flex-wrap:wrap;margin-bottom:clamp(32px,4vw,56px);}\n.nlp-work-side{font-size:17px;line-height:1.6;color:var(--nlp-ink2);margin:0;max-width:34ch;}\n.nlp-proj-item{margin:0;}\n.nlp-shot{\n  display:block;width:100%;padding:0;border:0;background:var(--nlp-line);cursor:pointer;\n  position:relative;overflow:hidden;border-radius:2px;\n}\n.nlp-work .nlp-shot img{position:absolute;inset:0;display:block;width:100%;height:100%;object-fit:cover;transition:transform .9s cubic-bezier(.22,1,.36,1);}\n\/* la foto va colocada dentro de su recuadro (absoluta): asi lo llena en todos los navegadores. Con\n   height:100% dentro de un boton, Safari dejaba la foto a su alto natural y en el movil la segunda,\n   que es vertical, se salia del recuadro y tapaba la franja blanca de debajo *\/\n@supports not (aspect-ratio:1\/1){ .nlp-work .nlp-shot img{position:static;height:auto;} }\n\/* efecto escalonado al hacer scroll (ver script), el mismo de las fotos de About: en escritorio las\n   fotos entran un poco mas abajo y suben hasta su sitio, y la de la derecha del par entra bastante mas\n   abajo; desde el centro de la pantalla quedan quietas y alineadas. En movil y tableta, quietas *\/\n@media(min-width:901px){\n  .nlp-work-grid .nlp-proj-lead > *,.nlp-work-grid .nlp-pair > .nlp-proj-item{will-change:transform;}\n}\n.nlp-shot:hover img{transform:scale(1.03);}\n.nlp-shot::after{\n  content:\"Ver proyecto\";position:absolute;left:16px;bottom:16px;\n  background:#fff;color:var(--nlp-ink);border-radius:20px;padding:8px 14px;\n  font-family:var(--nlp-font);font-size:12.5px;font-weight:600;line-height:1.5;opacity:0;transform:translateY(6px);\n  transition:opacity .25s ease,transform .25s ease;\n}\n.nlp-shot:hover::after,.nlp-shot:focus-visible::after{opacity:1;transform:none;}\n.nlp-shot:focus-visible{outline:2px solid var(--nlp-accent);outline-offset:3px;}\n.nlp-proj-lead .nlp-shot{aspect-ratio:16\/9;}\n.nlp-tall{aspect-ratio:3\/4;}\n.nlp-wide{aspect-ratio:4\/3;}\n.nlp-cap{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 14px;margin-top:14px;}\n.nlp-cap-t{font-size:15px;font-weight:600;color:var(--nlp-ink);}\n.nlp-cap-s{font-size:14px;color:var(--nlp-ink2);}\n.nlp-pair{display:grid;grid-template-columns:5fr 7fr;gap:clamp(16px,2.4vw,34px);align-items:start;margin-top:clamp(24px,3vw,46px);}\n\n\/* ---------- quien ---------- *\/\n.nlp-who{padding:clamp(76px,9vw,120px) 0;}\n\/* auto en la primera columna: sin retrato, el texto ocupa todo el ancho *\/\n.nlp-who-in{display:grid;grid-template-columns:auto 1fr;gap:clamp(32px,5vw,72px);align-items:start;}\n.nlp-portrait{width:min(380px,38vw);}\n.nlp-portrait img{width:100%;aspect-ratio:4\/5;object-fit:cover;border-radius:2px;}\n.nlp-who-name{margin:18px 0 0;font-size:17px;font-weight:600;color:var(--nlp-ink);}\n.nlp-who-p{margin:18px 0 0;max-width:56ch;}\n\n\/* ---------- que cambia ---------- *\/\n.nlp-does{background:var(--nlp-soft);padding:clamp(64px,8vw,104px) 0;}\n.nlp-does-in{display:grid;grid-template-columns:1fr 1fr;gap:clamp(32px,5vw,80px);align-items:start;}\n.nlp-does-p{margin:0 0 18px;max-width:52ch;}\n.nlp-facts{list-style:none;margin:32px 0 0;padding:0;}\n.nlp-facts li{border-top:1px solid var(--nlp-line);padding:14px 0;font-size:15px;font-weight:600;letter-spacing:.02em;color:var(--nlp-ink);}\n\n\/* ---------- franja de video ---------- *\/\n.nlp-film{height:clamp(260px,38vh,420px);overflow:hidden;background:var(--nlp-line);}\n.nlp-film video{display:block;width:100%;height:100%;object-fit:cover;\n  \/* el mismo filtro que la cuadricula de Projects, para que los colores vayan a juego (22\/09\/2026) *\/\n  filter:grayscale(40%) sepia(10%) saturate(88%) contrast(.96) brightness(1.03);}\n\n\/* ---------- materiales ---------- *\/\n.nlp-mat{padding:clamp(76px,9vw,120px) 0;}\n.nlp-mat-head{max-width:640px;margin-bottom:clamp(30px,4vw,48px);}\n.nlp-mat-p{margin:14px 0 0;max-width:52ch;}\n.nlp-mat-row{display:flex;gap:4px;height:clamp(300px,32vw,440px);border-radius:3px;overflow:hidden;}\n.nlp-mat-panel{position:relative;flex:1 1 0;min-width:0;margin:0;overflow:hidden;transition:flex-grow .55s cubic-bezier(.22,1,.36,1);}\n.nlp-mat-face{position:absolute;inset:0;display:block;transition:transform .55s cubic-bezier(.22,1,.36,1);}\n.nlp-mat-face img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;}\n.nlp-mat-flat::after{\n  content:\"\";position:absolute;inset:0;pointer-events:none;\n  background:linear-gradient(102deg,rgba(255,255,255,.11),rgba(255,255,255,0) 46%,rgba(31,29,27,.055));\n}\n.nlp-mat-cap{\n  position:absolute;left:0;right:0;bottom:0;display:block;text-align:left;padding:18px 16px 16px;\n  background:linear-gradient(to top,rgba(255,255,255,.95),rgba(255,255,255,0));\n}\n.nlp-mat-panel.is-dark .nlp-mat-cap{background:linear-gradient(to top,rgba(20,18,17,.9),rgba(20,18,17,0));}\n.nlp-mat-name{display:block;font-size:15px;font-weight:600;letter-spacing:-.01em;color:var(--nlp-ink);white-space:nowrap;}\n.nlp-mat-panel.is-dark .nlp-mat-name{color:#fff;}\n\/* 16px es una excepcion consciente a la regla de 17: la frase vive dentro\n   de un panel estrecho y a 17 se parte en demasiadas lineas. *\/\n.nlp-mat-line{\n  display:block;font-size:16px;line-height:1.5;color:var(--nlp-ink2);max-width:30ch;margin-top:7px;\n  opacity:0;max-height:0;overflow:hidden;transition:opacity .35s ease .1s,max-height .45s ease;\n}\n.nlp-mat-panel.is-dark .nlp-mat-line{color:rgba(255,255,255,.9);}\n@media (hover:hover) and (pointer:fine){\n  .nlp-mat-row:hover .nlp-mat-panel{flex-grow:.82;}\n  .nlp-mat-row .nlp-mat-panel:hover{flex-grow:2.4;}\n  .nlp-mat-panel:hover .nlp-mat-face{transform:scale(1.04);}\n  .nlp-mat-panel:hover .nlp-mat-line{opacity:1;max-height:130px;}\n}\n.nlp-mat-note{margin:14px 0 0;font-size:18px;line-height:1.6;color:var(--nlp-ink2);max-width:62ch;}\n.nlp-mat-note strong{font-weight:600;color:var(--nlp-ink);}\n\/* efecto domino al entrar en la seccion (ver script, 22\/09\/2026): los seis acabados salen uno detras de\n   otro desde el borde derecho y se deslizan hasta su sitio, primero Polar White. El que va delante pasa\n   por encima de los que le siguen. Sin script, o si el sistema pide menos movimiento, quietos en su sitio *\/\n.nlp-mat-row{position:relative;}\n\/* en el movil la fila es una tira con imanes (scroll-snap): mientras dura la entrada se apagan, porque si\n   no la tira se iria detras de Polar White y el efecto no se veria *\/\n.nlp-mat-row.nlp-dom{scroll-snap-type:none;}\n.nlp-mat-row.nlp-dom .nlp-mat-panel{transform:translate3d(var(--nlp-from,0px),0,0);z-index:calc(10 - var(--i,0));}\n.nlp-mat-row.nlp-dom.nlp-go .nlp-mat-panel{\n  transform:none;\n  transition:flex-grow .55s cubic-bezier(.22,1,.36,1), transform 1.1s cubic-bezier(.22,1,.36,1) calc(var(--i,0) * .12s);\n}\n\n\/* ---------- pasos ---------- *\/\n.nlp-how{background:var(--nlp-soft);padding:clamp(72px,9vw,116px) 0;}\n.nlp-how-head{margin-bottom:clamp(36px,5vw,60px);}\n.nlp-steps{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(28px,4vw,56px);}\n.nlp-steps li{border-top:1px solid var(--nlp-line);padding-top:22px;}\n.nlp-num{display:block;font-weight:600;font-size:28px;letter-spacing:-.01em;color:var(--nlp-ink3);margin-bottom:16px;}\n.nlp-steps h3{margin:0 0 10px;font-size:19px;font-weight:600;color:var(--nlp-ink);}\n.nlp-steps p{margin:0;font-size:17px;line-height:1.6;color:var(--nlp-ink2);max-width:34ch;}\n\n\/* ---------- cierre ---------- *\/\n.nlp-cta{background:var(--nlp-soft);padding:clamp(80px,10vw,128px) 0;}\n.nlp-cta-in{text-align:center;max-width:760px;}\n.nlp-cta-h{font-size:clamp(28px,3.4vw,46px);color:var(--nlp-ink);margin-bottom:18px;}\n.nlp-cta-p{font-size:18px;line-height:1.6;color:var(--nlp-ink2);margin:0 0 34px;}\n.nlp-cta-btn{\n  display:inline-flex;align-items:center;justify-content:center;min-height:54px;padding:0 34px;\n  background:var(--nlp-accent);color:#fff;font-size:16px;font-weight:600;text-decoration:none;\n  border-radius:2px;transition:background .3s ease;\n}\n.nlp-cta-btn:hover{background:var(--nlp-accent-dk);color:#fff;}\n.nlp-cta-btn:focus-visible{outline:2px solid var(--nlp-accent);outline-offset:4px;}\n.nlp-cta-c{margin:26px 0 0;font-size:14.5px;color:var(--nlp-ink2);}\n.nlp-cta-c a{color:var(--nlp-ink2);text-decoration:none;}\n.nlp-cta-c a:hover{color:var(--nlp-accent);}\n\n\/* ---------- cocina completa ---------- *\/\n.nlp-nk{border-top:1px solid var(--nlp-line);padding:clamp(28px,4vw,44px) 0;}\n.nlp-nk-in{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:10px 28px;}\n.nlp-nk-in p{margin:0;font-size:17px;color:var(--nlp-ink2);max-width:70ch;text-wrap:balance;}\n.nlp-nk-in a{font-size:15px;font-weight:600;color:var(--nlp-ink);text-decoration:none;border-bottom:1px solid var(--nlp-accent);padding-bottom:2px;white-space:nowrap;}\n\n\n\/* ---------- movil ---------- *\/\n@media(max-width:1000px){\n  .nlp-does-in{grid-template-columns:1fr;gap:28px;}\n  .nlp-steps{grid-template-columns:1fr;gap:26px;}\n  .nlp-who-in{grid-template-columns:1fr;}\n  .nlp-portrait{width:min(320px,70vw);}\n}\n@media(max-width:900px){\n  .nlp-home{--nlp-bar:68px;}\n  .nlp-hero{grid-template-columns:1fr;min-height:0;}\n  .nlp-hero-img{order:-1;height:52vh;min-height:320px;}\n  .nlp-hero-t{padding:clamp(34px,7vw,52px) 20px clamp(40px,8vw,58px);}\n  .nlp-hero-h{font-size:clamp(32px,8.4vw,44px);}\n  .nlp-pair{grid-template-columns:1fr;gap:30px;}\n  .nlp-tall,.nlp-wide{aspect-ratio:4\/3;}\n  .nlp-proj-lead .nlp-shot{aspect-ratio:4\/3;}\n}\n@media(max-width:760px){\n  .nlp-mat-row{height:auto;gap:10px;overflow-x:auto;padding-bottom:6px;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;}\n  .nlp-mat-panel{flex:0 0 62%;scroll-snap-align:start;height:64vw;max-height:400px;border-radius:3px;}\n  .nlp-mat-line{opacity:1;max-height:130px;}\n}\n@media(max-width:600px){\n  .nlp-nk-in{flex-direction:column;align-items:flex-start;gap:10px;}\n}\n\/* ---------- MOVIL v2 \u00b7 22\/09\/2026 ----------\n   Elegido el 22\/09\/2026: hero con la foto arriba como antes y el texto como el de la opcion 2\n   (etiqueta arriba en color, titular grande, texto y boton de reserva a la vista); Recent work\n   con las fotos a todo el ancho y la leyenda encima; un cuarto menos de aire entre secciones;\n   el mail y el telefono del cierre en dos lineas faciles de tocar. En escritorio no cambia nada:\n   el boton del hero y el enlace a Projects solo se ven en movil.\n   22\/09\/2026 (tarde): en el movil la etiqueta \"See project\" de las fotos pasa arriba a la derecha,\n   porque abajo a la izquierda quedaba debajo de la leyenda. Projects copia este mismo estilo.\n   Ademas la etiqueta lleva ya la fuente de la marca: dentro de un boton el navegador ponia la suya. *\/\n.nlp-hero-cta,.nlp-work-more{display:none;}\n@media(max-width:900px){\n  .nlp-hero-t{display:block;}\n  .nlp-hero-t > div{display:flex;flex-direction:column;align-items:flex-start;}\n  .nlp-hero-m{order:-1;margin:0 0 18px;padding:0;border:0;color:var(--nlp-accent);}\n  .nlp-hero-h{font-size:clamp(38px,10.4vw,50px);line-height:1.02;margin-bottom:18px;text-wrap:balance;}\n  .nlp-hero-h br{display:none;}\n  .nlp-hero-l{font-size:18px;}\n  .nlp-home .nlp-hero-cta{display:inline-flex;align-items:center;min-height:52px;margin-top:28px;padding:0 26px;background:var(--nlp-accent);color:#fff;font-size:16px;font-weight:600;letter-spacing:.01em;text-decoration:none;border-radius:2px;}\n  .nlp-home .nlp-hero-cta:hover{background:var(--nlp-accent-dk);color:#fff;}\n  .nlp-work-grid{margin:0 calc(-1 * var(--nlp-pad));}\n  \/* la franja blanca fina entre foto y foto es un borde de la propia foto: se dibuja igual entre la\n     1 y la 2 que entre la 2 y la 3, y ninguna foto la puede tapar *\/\n  .nlp-work-grid .nlp-pair{display:block;margin:0;}\n  .nlp-work-grid .nlp-pair .nlp-proj-item{border-top:6px solid #fff;}\n  .nlp-work-grid .nlp-proj-item{position:relative;overflow:hidden;}\n  .nlp-work-grid .nlp-shot{aspect-ratio:4\/5;border-radius:0;}\n  .nlp-work-grid .nlp-proj-item::after{content:\"\";position:absolute;left:0;right:0;bottom:0;height:42%;pointer-events:none;\n     background:linear-gradient(180deg,rgba(24,21,18,0),rgba(24,21,18,.62));}\n  \/* 22\/09\/2026 \u00b7 right agregado para que la leyenda tenga ancho fijo: con nombres\n     largos como \"Estepona \u00b7 Los Granados del Mar\" necesita poder partir en dos\n     lineas en vez de desbordar tapada por el overflow:hidden de la foto *\/\n  .nlp-work-grid .nlp-cap{position:absolute;left:var(--nlp-pad);right:var(--nlp-pad);bottom:18px;z-index:1;margin:0;pointer-events:none;}\n  .nlp-work-grid .nlp-cap-t{color:#fff;font-size:16px;}\n  .nlp-work-grid .nlp-cap-s{color:rgba(255,255,255,.86);}\n  \/* el \"See project\" va arriba a la derecha: abajo quedaba debajo de la leyenda *\/\n  .nlp-work-grid .nlp-shot::after{left:auto;right:16px;bottom:auto;top:16px;transform:translateY(-6px);}\n  .nlp-work-grid .nlp-shot:hover::after,.nlp-work-grid .nlp-shot:focus-visible::after{transform:none;}\n  .nlp-home .nlp-work-more{display:inline-block;margin-top:26px;padding:12px 0 5px;font-size:16px;font-weight:600;\n     color:var(--nlp-ink);text-decoration:none;border-bottom:1px solid var(--nlp-accent);}\n}\n@media(max-width:600px){\n  .nlp-work{padding:56px 0 42px;}\n  .nlp-who,.nlp-mat{padding:56px 0;}\n  .nlp-does{padding:48px 0;}\n  .nlp-how{padding:54px 0 36px;}\n  .nlp-cta{padding:40px 0 60px;}\n  .nlp-cta-c{display:flex;flex-direction:column;align-items:center;margin-top:18px;}\n  .nlp-cta-c span{display:none;}\n  .nlp-cta-c a{display:inline-flex;align-items:center;min-height:44px;font-size:15.5px;}\n}\n@media(prefers-reduced-motion:reduce){\n  .nlp-home *{transition:none !important;animation:none !important;}\n  .nlp-mat-line{opacity:1 !important;max-height:130px !important;}\n  .nlp-mat-row:hover .nlp-mat-panel,.nlp-mat-row .nlp-mat-panel:hover{flex-grow:1 !important;}\n  .nlp-shot:hover img,.nlp-mat-panel:hover .nlp-mat-face{transform:none !important;}\n}\n\n\/* 27\/09\/2026 (v23) \u00b7 hero en dos pesos: la segunda parte en letra fina y en linea propia *\/\n.nlp-hero .nlp-hero-h .nlp-hero-alt{display:block;font-weight:400;}\n.nlp-hero .nlp-hero-l{text-wrap:balance;}\n@media(max-width:900px){\n  \/* en el movil el titular va en dos lineas desde 320 px: el tamano sigue al ancho para que\n     \"or yours, made new.\" no se parta en dos (a 375 px se partia por 1 px) *\/\n  .nlp-hero .nlp-hero-h{font-size:clamp(32px,calc((100vw - 40px) \/ 10),50px);}\n}\n\n\/* 27\/09\/2026 (v23) \u00b7 hm-04-paths, los dos servicios *\/\n.nlp-paths-head{margin-bottom:clamp(32px,4vw,52px);}\n.nlp-paths{display:grid;grid-template-columns:1fr 1fr;gap:clamp(28px,4vw,64px);}\n.nlp-path{border-top:1px solid var(--nlp-ink);padding-top:24px;}\n\n.nlp-path h3{margin:0 0 12px;font-size:clamp(24px,2.4vw,30px);font-weight:600;letter-spacing:-.01em;line-height:1.15;color:var(--nlp-ink);}\n.nlp-path p{margin:0 0 22px;font-size:17px;line-height:1.65;color:var(--nlp-ink2);max-width:44ch;}\n.nlp-path p.nlp-path-k{margin:0 0 14px;font-size:12px;font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:var(--nlp-accent);}\n.nlp-path a{font-size:15px;font-weight:600;color:var(--nlp-ink);text-decoration:none;border-bottom:1px solid var(--nlp-accent);padding-bottom:2px;}\n.nlp-paths-note{margin:clamp(32px,4vw,48px) 0 0;font-size:17px;color:var(--nlp-ink2);}\n@media (max-width:767px){.nlp-paths{grid-template-columns:1fr;gap:36px;}}\n\/* ---------- popup de proyectos: copiado al montar desde prod-projects.html ---------- *\/\n.nlp-pj,.nlp-pj-modal{\n  --nlp-ink:#1F1D1B; --nlp-ink2:#6B6259; --nlp-ink3:#9A9089;\n  --nlp-line:#E6E1D9; --nlp-soft:#F6F3EE;\n  --nlp-accent:#8A6A4C; --nlp-accent-dk:#75593F;\n  --nlp-font:\"Instrument Sans\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",Helvetica,Arial,sans-serif;\n}\n.nlp-pj *,.nlp-pj-modal *{box-sizing:border-box;}\n\/* ---------------- el popup ---------------- *\/\n.nlp-pj-modal{\n  width:min(1180px,calc(100vw - 40px));max-width:none;\n  max-height:calc(100dvh - 40px);\n  padding:0;border:0;border-radius:3px;background:#fff;\n  color:var(--nlp-ink2);font-family:var(--nlp-font);\n  box-shadow:0 40px 90px -30px rgba(31,29,27,.55);\n  overflow:hidden;\n}\n.nlp-pj-modal::backdrop{background:rgba(31,29,27,.62);}\n.nlp-pj-modal[open]{display:flex;flex-direction:column;}\nbody.nlp-pj-locked{overflow:hidden;}\n\n.nlp-pj-modal-bar{\n  flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:16px;\n  padding:12px clamp(14px,2vw,22px);border-bottom:1px solid var(--nlp-line);background:#fff;\n}\n.nlp-pj-nav{display:flex;align-items:center;gap:6px;}\n.nlp-pj-arrow,.nlp-pj-x{\n  display:inline-flex;align-items:center;justify-content:center;\n  width:44px;height:44px;padding:0;border:0;border-radius:2px;\n  background:none;color:var(--nlp-ink2);cursor:pointer;\n  transition:background .2s ease,color .2s ease;\n}\n.nlp-pj-arrow:hover,.nlp-pj-x:hover{background:var(--nlp-soft);color:var(--nlp-ink);}\n.nlp-pj-arrow:focus-visible,.nlp-pj-x:focus-visible{outline:2px solid var(--nlp-accent);outline-offset:-2px;}\n.nlp-pj-arrow[disabled]{opacity:.3;cursor:default;}\n.nlp-pj-arrow[disabled]:hover{background:none;color:var(--nlp-ink2);}\n.nlp-pj-count{\n  min-width:64px;text-align:center;font-size:13px;font-weight:600;\n  letter-spacing:.12em;color:var(--nlp-ink3);font-variant-numeric:tabular-nums;\n}\n\n.nlp-pj-modal-body{flex:1 1 auto;overflow-y:auto;-webkit-overflow-scrolling:touch;}\n.nlp-pj-case-in{\n  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.25fr);\n  gap:clamp(24px,3.4vw,52px);\n  padding:clamp(24px,3.4vw,44px);\n}\n.nlp-pj-meta{\n  margin:0 0 12px;font-size:12px;font-weight:600;letter-spacing:.16em;\n  text-transform:uppercase;color:var(--nlp-accent);\n}\n.nlp-pj-case-h{\n  margin:0;color:var(--nlp-ink);font-weight:600;\n  font-size:clamp(24px,2.7vw,33px);line-height:1.14;letter-spacing:-.018em;text-wrap:balance;\n}\n.nlp-pj-case-p{margin:16px 0 0;font-size:18px;line-height:1.65;max-width:46ch;}\n.nlp-pj-kv{margin:26px 0 0;display:grid;grid-template-columns:1fr 1fr;gap:16px 24px;border-top:1px solid var(--nlp-line);padding-top:20px;}\n.nlp-pj-kv > div{display:block;}\n.nlp-pj-kv dt{\n  margin:0 0 6px;font-size:12px;font-weight:600;letter-spacing:.14em;\n  text-transform:uppercase;color:var(--nlp-ink3);\n}\n.nlp-pj-kv dd{margin:0;font-size:17px;color:var(--nlp-ink2);}\n.nlp-pj-shots{display:grid;gap:clamp(12px,1.6vw,18px);}\n.nlp-pj-case-p + .nlp-pj-shots{margin-top:26px;}\n.nlp-pj-shots img{width:100%;object-fit:cover;background:var(--nlp-soft);display:block;}\n.nlp-pj-vid{position:relative;width:100%;aspect-ratio:9\/16;max-width:420px;margin:0 auto;background:var(--nlp-soft);}\n.nlp-pj-vid iframe{position:absolute;inset:0;width:100%;height:100%;border:0;}\n@media(max-width:900px){\n  .nlp-pj-case-in{grid-template-columns:1fr;}\n  .nlp-pj-modal{width:100vw;max-width:100vw;max-height:100dvh;height:100dvh;border-radius:0;}\n}\n\n@media (prefers-reduced-motion:no-preference){\n  .nlp-pj-modal[open]{animation:nlp-pj-in .28s cubic-bezier(.22,1,.36,1);}\n  @keyframes nlp-pj-in{from{opacity:0;transform:translateY(10px);}to{opacity:1;transform:none;}}\n}\n\n<\/style>\n\n<!-- Calendly: el menu trae su propia copia de este script porque vive\n     aparte en Elementor. La bandera window.__nlpCalendlyWired evita que,\n     si las dos copias acaban en la misma pagina, el clic se conecte dos\n     veces y el popup salte por duplicado. -->\n<link href=\"https:\/\/assets.calendly.com\/assets\/external\/widget.css\" rel=\"stylesheet\">\n<script src=\"https:\/\/assets.calendly.com\/assets\/external\/widget.js\" async><\/script>\n<script>\n(function(){\n  if(window.__nlpCalendlyWired) return;\n  window.__nlpCalendlyWired = true;\n  var CALENDLY_URL = 'https:\/\/calendly.com\/nextlevelmontajes\/30min';\n  document.addEventListener('click', function(e){\n    var btn = e.target.closest ? e.target.closest('.nlp-calendly-btn') : null;\n    if(!btn) return;\n    e.preventDefault();\n    e.stopPropagation();\n    if(window.Calendly){ window.Calendly.initPopupWidget({url: CALENDLY_URL}); }\n    else { window.open(CALENDLY_URL, '_blank'); }\n  });\n})();\n<\/script>\n\n\n<script>\n\/* video de acabados: no se descarga hasta que el cliente se acerca a esa parte,\n   y se pausa cuando sale de la pantalla *\/\n(function () {\n  var v = document.querySelector('.nlp-film video[data-nlp-lazy]');\n  if (!v || v.getAttribute('data-nlp-wired')) return;\n  v.setAttribute('data-nlp-wired', '1');\n  function reproducir() { var p = v.play(); if (p && p.catch) p.catch(function () {}); }\n  if (!('IntersectionObserver' in window)) { v.preload = 'auto'; reproducir(); return; }\n  new IntersectionObserver(function (es) {\n    es.forEach(function (e) { if (e.isIntersecting) reproducir(); else if (!v.paused) v.pause(); });\n  }, { rootMargin: '300px 0px' }).observe(v);\n})();\n<\/script>\n\n<script>\n\/* Materiales \u00b7 efecto domino al entrar en la seccion: los seis acabados salen uno detras de otro desde el\n   borde derecho de la fila y se deslizan hasta su sitio, primero Polar White y despues los demas, cada uno\n   0,12 s mas tarde. Se hace una sola vez, con la fila ya un tercio a la vista, y solo usa transform. En el\n   movil igual, dentro de la tira que se desliza. Sin IntersectionObserver o si el sistema pide menos\n   movimiento, los acabados estan quietos en su sitio desde el principio. *\/\n(function () {\n  if (window.__nlpMatDomino) return;\n  window.__nlpMatDomino = true;\n  var row = document.querySelector('.nlp-mat-row');\n  if (!row || !('IntersectionObserver' in window)) return;\n  if (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n  var panels = [].slice.call(row.querySelectorAll('.nlp-mat-panel'));\n  if (!panels.length) return;\n  var PASO = 0.12, DURA = 1.1, hecho = false;   \/* los mismos tiempos que en el CSS *\/\n  function medir() {\n    var w = row.clientWidth, x0 = row.scrollLeft;\n    panels.forEach(function (p, i) {\n      \/* cada acabado empieza justo pasado el borde derecho; los que ya estan fuera de la vista, quietos *\/\n      p.style.setProperty('--nlp-from', Math.max(0, w - (p.offsetLeft - x0)) + 'px');\n      p.style.setProperty('--i', i);\n    });\n  }\n  function limpiar() {\n    row.classList.remove('nlp-dom');\n    row.classList.remove('nlp-go');\n    panels.forEach(function (p) { p.style.removeProperty('--nlp-from'); p.style.removeProperty('--i'); });\n  }\n  medir();\n  row.classList.add('nlp-dom');\n  window.addEventListener('resize', medir);\n  var io = new IntersectionObserver(function (es) {\n    if (hecho || !es[0].isIntersecting) return;\n    hecho = true; io.disconnect(); window.removeEventListener('resize', medir);\n    void row.offsetWidth;\n    row.classList.add('nlp-go');\n    setTimeout(limpiar, (DURA + PASO * (panels.length - 1)) * 1000 + 200);\n  }, { threshold: 0.3 });\n  io.observe(row);\n})();\n<\/script>\n\n<script>\n\/* Recent work \u00b7 efecto escalonado al hacer scroll, el mismo de las fotos de About: al entrar por abajo,\n   la foto grande y la de la izquierda van 40px mas abajo y la de la derecha 170px; mientras se hace\n   scroll suben hasta su sitio, y desde el centro de la pantalla quedan quietas y alineadas. Cada foto\n   se mueve con su leyenda. Solo usa transform, no toca el scroll. En pantallas de 900px o menos (fotos\n   una debajo de otra) se quedan quietas, y tambien si el sistema pide menos movimiento. *\/\n(function () {\n  if (window.__nlpHomeEscalonado) return;\n  window.__nlpHomeEscalonado = true;\n  var lead = document.querySelector('.nlp-work-grid .nlp-proj-lead');\n  var pair = document.querySelector('.nlp-work-grid .nlp-pair');\n  if (!lead || !pair) return;\n  if (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n  \/* cada grupo: la caja que se mide (esa no se mueve), lo que se mueve y cuantos px entra mas abajo *\/\n  var GRUPOS = [\n    { caja: lead, piezas: [].slice.call(lead.children), recorrido: [40, 40] },\n    { caja: pair, piezas: [].slice.call(pair.children), recorrido: [40, 170] }\n  ];\n  var pendiente = false;\n  function mover() {\n    pendiente = false;\n    var vh = window.innerHeight, activo = window.innerWidth > 900;\n    GRUPOS.forEach(function (g) {\n      var r = g.caja.getBoundingClientRect();\n      var avance = (r.top + r.height \/ 2 - vh \/ 2) \/ (vh \/ 2 + r.height \/ 2);\n      if (avance > 1) avance = 1;\n      var entra = avance > 0 ? avance : 0;   \/* 1 cuando asoma por abajo, 0 desde el centro de la pantalla *\/\n      g.piezas.forEach(function (p, i) {\n        p.style.transform = activo ? 'translate3d(0,' + (entra * (g.recorrido[i] || 0)).toFixed(1) + 'px,0)' : '';\n      });\n    });\n  }\n  function pedir() { if (!pendiente) { pendiente = true; window.requestAnimationFrame(mover); } }\n  window.addEventListener('scroll', pedir, { passive: true });\n  window.addEventListener('resize', pedir);\n  mover();\n})();\n<\/script>\n\n<script>\n(function(){\n  function init(){\n    var modal = document.getElementById('nlp-pj-modal');\n    var body  = document.getElementById('nlp-pj-modal-body');\n    var count = document.getElementById('nlp-pj-count');\n    if(!modal || !body || !modal.showModal) return;   \/* navegador viejo: las fichas no abren nada y la pagina sigue entera *\/\n\n    var items = [].slice.call(document.querySelectorAll('.nlp-pj-item'));\n    var casos = items.map(function(it){ return it.querySelector('.nlp-pj-case'); });\n    var i = 0;\n\n    function pintar(n){\n      if(n < 0 || n >= casos.length || !casos[n]) return;\n      i = n;\n      var c = casos[n].cloneNode(true);\n      c.removeAttribute('hidden');\n      c.classList.add('nlp-pj-case-in');\n      var h = c.querySelector('.nlp-pj-case-h');\n      if(h) h.id = 'nlp-pj-modal-h';\n      \/* el texto va a un lado y las fotos al otro *\/\n      var shots = c.querySelector('.nlp-pj-shots');\n      var texto = document.createElement('div');\n      while(c.firstChild && c.firstChild !== shots) texto.appendChild(c.firstChild);\n      c.insertBefore(texto, shots);\n      body.innerHTML = '';\n      body.appendChild(c);\n      body.scrollTop = 0;\n      \/* los videos se ponen solos, salvo que el visitante pida menos\n         movimiento; en ese caso llegan con sus controles, listos para\n         darles play a mano. puede haber mas de uno por proyecto *\/\n      if(!window.matchMedia('(prefers-reduced-motion: reduce)').matches){\n        c.querySelectorAll('.nlp-pj-vid iframe').forEach(function(vid){\n          var src = vid.getAttribute('src');\n          vid.setAttribute('src', src + (src.indexOf('?') > -1 ? '&' : '?') + 'autoplay=1&muted=1');\n        });\n      }\n      count.textContent = (n + 1) + ' \/ ' + casos.length;\n      modal.querySelectorAll('.nlp-pj-arrow').forEach(function(b){\n        b.disabled = (b.dataset.go === '-1') ? (n === 0) : (n === casos.length - 1);\n      });\n    }\n\n    items.forEach(function(it, n){\n      var btn = it.querySelector('.nlp-pj-open');\n      if(!btn) return;\n      btn.addEventListener('click', function(){\n        pintar(n);\n        document.body.classList.add('nlp-pj-locked');\n        modal.showModal();\n      });\n    });\n\n    modal.addEventListener('click', function(e){\n      if(e.target.closest('[data-close]')){ modal.close(); return; }\n      var go = e.target.closest('.nlp-pj-arrow');\n      if(go){ pintar(i + parseInt(go.dataset.go, 10)); return; }\n      \/* pinchar fuera de la tarjeta tambien cierra *\/\n      if(e.target === modal){ modal.close(); }\n    });\n\n    modal.addEventListener('keydown', function(e){\n      if(e.key === 'ArrowLeft')  pintar(i - 1);\n      if(e.key === 'ArrowRight') pintar(i + 1);\n    });\n\n    modal.addEventListener('close', function(){\n      document.body.classList.remove('nlp-pj-locked');\n      var btn = items[i] && items[i].querySelector('.nlp-pj-open');\n      if(btn) btn.focus();\n    });\n  }\n  if(document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init);\n  else init();\n})();\n<\/script>\n\n<!-- ============================================================\n     NEXT LEVEL COCINAS \u00b7 gl-99-footer-v4\n     11\/09\/2026 \u00b7 Bloque global, se repite en todas las paginas.\n     20\/09\/2026 \u00b7 v2: los enlaces legales pasan de tres a dos.\n     \"Legal Notice & Terms of Use\" (\/terms-of-use) lleva la\n     identificacion del titular que exige la LSSI y las condiciones\n     de uso; \"Privacy Policy\" (\/privacy-policy) lleva tambien la\n     parte de cookies. Ya no hay paginas aparte de Legal Notice ni de\n     Cookie Policy.\n     20\/09\/2026 \u00b7 v3: se anade el boton \"Cookie settings\", que abre el\n     panel de la barra de cookies (parts\/cookies.html) para cambiar o\n     retirar la eleccion: la AEPD pide que sea tan facil como darla y\n     que este siempre a mano. Es un boton y no un enlace. Los tres\n     elementos del bloque legal pasan del gris claro al gris oscuro de\n     la paleta, porque el claro no llegaba al contraste minimo.\n     22\/09\/2026 \u00b7 v4: en movil el contacto va primero, con tres\n     botones grandes (llamar, escribir, Instagram), luego las paginas\n     en filas y al final el logo y lo legal. En escritorio solo\n     cambia la zona: \"Costa del Sol \u00b7 Estepona to Malaga\".\n     Pegar tal cual en tu widget\/plantilla global de footer en\n     Elementor (el mismo lugar donde va el menu, pero al pie).\n     ============================================================ -->\n\n<!-- ============================================================\n     gl-99-footer\n     ============================================================ -->\n<footer class=\"nlp-ft\" lang=\"es\">\n  <div class=\"nlp-ft-inner\">\n    <div class=\"nlp-ft-brand\">\n      <a href=\"\/es\/\" class=\"nlp-ft-logo\" aria-label=\"Next Level Cocinas, inicio\">\n        <img decoding=\"async\" src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/nextlevel-wordmark-negro-web@3x_1.png\"\n             alt=\"Next Level Cocinas\" width=\"695\" height=\"135\">\n      <\/a>\n      <p class=\"nlp-ft-areas\">Costa del Sol &middot; De Estepona a M&aacute;laga<\/p>\n    <\/div>\n\n    <nav class=\"nlp-ft-nav\" aria-label=\"Pie de p\u00e1gina\">\n      <a href=\"\/es\/rediseno-de-cocinas\">Redise\u00f1o de cocinas<\/a>\n      <a href=\"\/es\/cocinas-nuevas\">Cocinas nuevas<\/a>\n      <a href=\"\/es\/proyectos\">Proyectos<\/a>\n      <a href=\"\/es\/nosotros\">Nosotros<\/a>\n    <\/nav>\n\n    <div class=\"nlp-ft-contact\">\n      <p class=\"nlp-ft-talk\">Contacto<\/p>\n      <a href=\"mailto:design@nextlevelcocinas.com\"><span class=\"nlp-ft-k\">Escr\u00edbenos<\/span>design@nextlevelcocinas.com<\/a>\n      <a href=\"tel:+34647036816\"><span class=\"nlp-ft-k\">Ll\u00e1manos<\/span>+34 647 036 816<\/a>\n      <a href=\"https:\/\/instagram.com\/nextlevelcosta\" target=\"_blank\" rel=\"noopener\"><span class=\"nlp-ft-k\">S\u00edguenos<\/span>Instagram<\/a>\n    <\/div>\n  <\/div>\n  <div class=\"nlp-ft-legal\">\n    <span>&copy; 2026 Next Level Cocinas.<\/span>\n    <nav class=\"nlp-ft-legal-nav\" aria-label=\"Legal\">\n      <a href=\"\/es\/aviso-legal\">Aviso legal y condiciones de uso<\/a>\n      <a href=\"\/es\/politica-de-privacidad\">Pol\u00edtica de privacidad<\/a>\n      <button type=\"button\" class=\"nlp-ft-cookie\" data-nlp-cookie-open>Configurar cookies<\/button>\n    <\/nav>\n  <\/div>\n<\/footer>\n\n<style>\n.nlp-ft{\n  --nlp-ink:#1F1D1B; --nlp-ink2:#6B6259; --nlp-ink3:#9A9089; --nlp-line:#E6E1D9;\n  --nlp-accent:#8A6A4C;\n  --nlp-font:\"Instrument Sans\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",Helvetica,Arial,sans-serif;\n  background:#fff; color:var(--nlp-ink2); font-family:var(--nlp-font);\n  padding:clamp(48px,6vw,64px) 0 28px;\n  border-top:1px solid var(--nlp-line);\n}\n.nlp-ft *{box-sizing:border-box;}\n.nlp-ft-inner{\n  max-width:1600px;margin:0 auto;padding:0 clamp(20px,5vw,70px);\n  display:flex;flex-wrap:wrap;justify-content:space-between;gap:32px;\n}\n.nlp-ft-logo{display:inline-block;margin:0 0 4px;}\n\/* mismo archivo que el logo de la cabecera, un punto mas bajo:\n   el pie es una firma, no una segunda cabecera *\/\n.nlp-ft-logo img{height:42px;width:auto;display:block;}\n.nlp-ft-nav{display:flex;flex-direction:column;gap:10px;}\n.nlp-ft-nav a{font-size:14.5px;color:var(--nlp-ink2);text-decoration:none;}\n.nlp-ft-nav a:hover{color:var(--nlp-accent);}\n.nlp-ft-contact{display:flex;flex-direction:column;gap:10px;align-items:flex-start;}\n.nlp-ft-contact a{font-size:14.5px;color:var(--nlp-ink2);text-decoration:none;}\n.nlp-ft-contact a:hover{color:var(--nlp-accent);}\n.nlp-ft-areas{\n  font-size:12.5px;line-height:1.6;color:var(--nlp-ink3);margin:14px 0 0;max-width:30ch;\n}\n.nlp-ft-legal{\n  max-width:1600px;margin:44px auto 0;padding:20px clamp(20px,5vw,70px) 0;\n  border-top:1px solid var(--nlp-line);\n  font-size:12.5px;color:var(--nlp-ink3);\n  display:flex;flex-wrap:wrap;justify-content:space-between;gap:10px 24px;\n}\n.nlp-ft-legal-nav{display:flex;flex-wrap:wrap;gap:4px 18px;}\n.nlp-ft-legal-nav a{color:var(--nlp-ink2);text-decoration:none;}\n.nlp-ft-legal-nav a:hover{color:var(--nlp-accent);}\n\/* el boton \"Cookie settings\" parece un enlace mas. Va con .nlp-ft delante y fija :focus y :hover\n   para que el tema de WordPress no le pinte encima sus estados de button:hover y button:focus *\/\n.nlp-ft .nlp-ft-cookie{\n  -webkit-appearance:none;appearance:none;display:inline;\n  background:none;border:0;border-radius:0;box-shadow:none;padding:0;margin:0;\n  font:inherit;color:var(--nlp-ink2);text-decoration:none;text-transform:none;cursor:pointer;\n}\n.nlp-ft .nlp-ft-cookie:focus{background:none;color:var(--nlp-ink2);}\n.nlp-ft .nlp-ft-cookie:hover{background:none;color:var(--nlp-accent);}\n.nlp-ft .nlp-ft-cookie:focus-visible{outline:2px solid var(--nlp-accent);outline-offset:3px;}\n@media(max-width:600px){\n  .nlp-ft-inner{gap:26px;}\n  .nlp-ft-logo img{height:34px;}\n}\n\/* v4 \u00b7 movil: el contacto primero (llamar, escribir, Instagram), las paginas en filas,\n   y el logo y lo legal al final. Todo con zona de toque de 40 a 64px.\n   \"Talk to us\" y las etiquetas de cada boton solo se ven en movil. *\/\n.nlp-ft-talk,.nlp-ft-k{display:none;}\n@media(max-width:900px){\n  .nlp-ft{padding:44px 0 calc(26px + env(safe-area-inset-bottom));}\n  .nlp-ft-inner{display:flex;flex-direction:column;gap:34px;padding:0 20px;}\n  .nlp-ft-contact{order:-1;gap:10px;align-items:stretch;}\n  .nlp-ft .nlp-ft-talk{display:block;margin:0 0 4px;font-size:11px;letter-spacing:.18em;text-transform:uppercase;font-weight:600;color:var(--nlp-accent);}\n  .nlp-ft-contact a{display:flex;flex-direction:column;justify-content:center;min-height:64px;padding:10px 18px;background:#fff;\n     border:1px solid var(--nlp-line);border-radius:2px;font-size:17px;font-weight:600;color:var(--nlp-ink);}\n  .nlp-ft .nlp-ft-k{display:block;margin-bottom:3px;font-size:11px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--nlp-ink2);}\n  .nlp-ft-contact a[href^=\"tel\"]{order:-1;background:var(--nlp-accent);border-color:var(--nlp-accent);color:#fff;}\n  .nlp-ft-contact a[href^=\"tel\"]:hover{background:var(--nlp-accent-dk);color:#fff;}\n  .nlp-ft-contact a[href^=\"tel\"] .nlp-ft-k{color:rgba(255,255,255,.8);}\n  .nlp-ft .nlp-ft-talk{order:-2;}\n  .nlp-ft-nav{gap:0;border-top:1px solid var(--nlp-line);}\n  .nlp-ft-nav a{display:flex;align-items:center;min-height:54px;font-size:18px;font-weight:600;color:var(--nlp-ink);border-bottom:1px solid var(--nlp-line);}\n  .nlp-ft-brand{order:2;}\n  .nlp-ft-legal{margin-top:30px;padding:18px 20px 0;flex-direction:column;gap:2px;}\n  .nlp-ft-legal-nav{flex-direction:column;gap:0;}\n  .nlp-ft-legal-nav a,.nlp-ft .nlp-ft-cookie{display:flex;align-items:center;min-height:40px;}\n}\n<\/style>\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>Cookies. Solo usamos las cookies que esta web necesita para funcionar. Las de anal\u00edtica y marketing est\u00e1n desactivadas salvo que las aceptes, y de momento no usamos ninguna. Puedes cambiar tu elecci\u00f3n en cualquier momento desde Configurar cookies, al pie de cada p\u00e1gina. Pol\u00edtica de privacidad Rechazar todas Aceptar todas Configurar Cookies Configuraci\u00f3n de cookies [&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-5221","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/nextlevelcocinas.com\/en\/wp-json\/wp\/v2\/pages\/5221","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nextlevelcocinas.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/nextlevelcocinas.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/nextlevelcocinas.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nextlevelcocinas.com\/en\/wp-json\/wp\/v2\/comments?post=5221"}],"version-history":[{"count":16,"href":"https:\/\/nextlevelcocinas.com\/en\/wp-json\/wp\/v2\/pages\/5221\/revisions"}],"predecessor-version":[{"id":5272,"href":"https:\/\/nextlevelcocinas.com\/en\/wp-json\/wp\/v2\/pages\/5221\/revisions\/5272"}],"wp:attachment":[{"href":"https:\/\/nextlevelcocinas.com\/en\/wp-json\/wp\/v2\/media?parent=5221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}