{"id":820,"date":"2026-01-16T14:15:36","date_gmt":"2026-01-16T14:15:36","guid":{"rendered":"https:\/\/nextlevelproyectos.es\/?page_id=820"},"modified":"2026-09-28T14:50:41","modified_gmt":"2026-09-28T14:50:41","slug":"projects","status":"publish","type":"page","link":"https:\/\/nextlevelcocinas.com\/en\/projects\/","title":{"rendered":"Projects"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"820\" class=\"elementor elementor-820\">\n\t\t\t\t<div class=\"elementor-element elementor-element-deb8090 e-con-full e-flex e-con e-parent\" data-id=\"deb8090\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-20e7fa1 elementor-widget elementor-widget-html\" data-id=\"20e7fa1\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- ============================================================\n     NEXT LEVEL COCINAS \u00b7 Projects (menu + pagina + pie)\n     14\/09\/2026 \u00b7 para pegar tal cual en Elementor\n     20\/09\/2026 \u00b7 el menu pasa a v11: cuatro entradas, con New Kitchens,\n     sin recuadro de foco al abrir con el raton y con el Tab\n     contenido dentro del menu tambien en escritorio\n     20\/09\/2026 \u00b7 el pie pasa a v2: dos enlaces legales, Legal Notice\n     & Terms of Use y Privacy Policy. Los videos de Vimeo llevan dnt=1\n     20\/09\/2026 \u00b7 barra de cookies arriba del todo, antes del menu, y\n     boton \"Cookie settings\" en el pie (v3). Hoy no bloquea nada: la\n     web no usa analitica ni publicidad\n\n     Este archivo NO empieza con <!doctype html> a proposito: es un\n     fragmento, igual que los de home y redise\u00f1o. Trae la barra de\n     cookies, el menu y el pie incluidos. La barra de cookies tiene\n     que estar en TODAS las paginas: una pagina sin ella no pregunta\n     nada.\n\n     27\/09\/2026 \u00b7 v17: las cocinas se presentan como cocinas\n     terminadas, con los textos del portfolio y los materiales en cada\n     ficha. v18: se anade el proyecto 08, Estepona \u00b7 Los Granados del\n     Mar (la cocina de roble y gris que ya salia en la Home), y la Home\n     abre este mismo popup en sus tres fotos de Recent work.\n\n     QUE HACE ESTA PAGINA\n     Es un registro: la cuadricula demuestra cuantas cocinas hay, y\n     al pinchar cada ficha se abre el caso de esa cocina. Una sola\n     pagina hace de indice y de ficha de proyecto, asi que no hace\n     falta crear una pagina por obra.\n\n     FALTA \u00b7 ANTES DE PUBLICAR\n     1. SUBIR LAS FOTOS a la biblioteca de WordPress. Estan listas\n        y con el nombre correcto en WEB\/projects\/fotos-para-wordpress\/.\n        Desde el 27\/09\/2026 hay dos mas, las del proyecto 08:\n        proyecto-08-roble-1.jpg y proyecto-08-roble-2.jpg. Tienen que\n        subirse en septiembre de 2026 para que caigan en la carpeta\n        2026\/09 de WordPress, que es la que pone su URL (WP, arriba).\n        Salen tambien en el popup de la Home.\n        Si las subes con ese mismo nombre, las URLs de este archivo ya\n        son las buenas y no hay que tocar nada. Si WordPress les\n        cambia el nombre (les suele anadir un -1 al final), hay que\n        corregir la URL de esa foto aqui.\n        Las dos fotos del proyecto 01, las dos del 04, la foto del\n        proyecto 03, y la foto principal del proyecto 02 NO hace falta\n        subirlas: ya estaban en WordPress y el codigo apunta directo a\n        sus URLs. El video del proyecto 03 tampoco: esta en Vimeo y el\n        codigo carga el reproductor de ahi directo.\n     2. LOS TEXTOS DE CADA CASO son de ejemplo: zona, titulo, parrafo\n        y las dos listas. Estan escritos para ver la forma. Hay que\n        sustituirlos por los de verdad. Lo real hoy son las fotos y,\n        en el proyecto 03, tambien el video.\n     3. Los proyectos estan agrupados por como se parecen las fotos\n        entre si, no porque sepa que foto es de que obra. Revisa las\n        agrupaciones: los proyectos 01, 04 y 06 llevan dos fotos; el\n        02 lleva un video (primero) y dos fotos; el 03 lleva un video\n        y una foto (la misma foto hace de portada de la ficha y de\n        segunda imagen del caso); el 05 lleva dos videos y una foto\n        que es solo portada de la ficha (en el caso, dentro del popup,\n        no hay ninguna foto, solo los dos videos); el 07 lleva un\n        video (primero) y dos fotos; el resto, una foto.\n        Los videos del 02, 03 y 05 son verticales porque Franco lo dijo.\n        El del 07 lo puse vertical tambien, igual que todos los que\n        mando hasta ahora, pero no lo confirmo: si es horizontal, en\n        VIDEOS de mas arriba no cambia nada, hay que tocar el CSS de\n        .nlp-pj-vid (esta mas abajo en el html) para ese proyecto en\n        particular.\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\">\n\n  <div class=\"nlp-ck-bar\" id=\"nlp-ck-bar\" role=\"region\" aria-label=\"Cookie consent\" hidden>\n    <div class=\"nlp-ck-wrap\">\n      <div class=\"nlp-ck-copy\">\n        <p class=\"nlp-ck-p\"><strong>Cookies.<\/strong> We only use the cookies this website needs to work. Analytics and marketing cookies stay off unless you accept them, and we use none today. <span class=\"nlp-ck-long\">You can change your choice at any time with Cookie settings at the bottom of every page.<\/span> <a href=\"\/privacy-policy#nlp-lg-cookies\">Privacy Policy<\/a><\/p>\n      <\/div>\n      <div class=\"nlp-ck-acts\">\n        <button type=\"button\" class=\"nlp-ck-btn\" data-nlp-ck-reject>Reject all<\/button>\n        <button type=\"button\" class=\"nlp-ck-btn\" data-nlp-ck-accept>Accept all<\/button>\n        <button type=\"button\" class=\"nlp-ck-btn nlp-ck-btn--line\" data-nlp-ck-open>Customise<\/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>Cookie settings<\/h2>\n        <\/div>\n        <button type=\"button\" class=\"nlp-ck-x\" data-nlp-ck-close aria-label=\"Close cookie settings\">\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\">Choose which optional cookies you accept. Your choice is saved in this browser for 12 months, and you can change it at any time with Cookie settings at the bottom of every page.<\/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\">Necessary<\/p>\n            <span class=\"nlp-ck-always\">Always on<\/span>\n          <\/div>\n          <p class=\"nlp-ck-cat-d\">They keep the website working and remember your cookie choice. The law does not require your consent for them.<\/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\">Analytics<\/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\">They would help us understand how the website is used, so that we can improve it. We do not use any analytics tools today.<\/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\">They would let us measure and show our own advertising. We do not use any marketing tools today.<\/p>\n        <\/li>\n      <\/ul>\n\n      <p class=\"nlp-ck-p nlp-ck-more\">The booking window is run by Calendly, which asks about its own optional cookies when you open it. More about cookies in our <a href=\"\/privacy-policy#nlp-lg-cookies\">Privacy Policy<\/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>Reject all<\/button>\n      <button type=\"button\" class=\"nlp-ck-btn nlp-ck-btn--line\" data-nlp-ck-accept>Accept all<\/button>\n      <button type=\"button\" class=\"nlp-ck-btn nlp-ck-save\" data-nlp-ck-save>Save my choices<\/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:\"Off\";}\n.nlp-ck-sw input:checked ~ .nlp-ck-state::before{content:\"On\";}\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-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 v13 \u00b7 22\/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     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<!-- 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\">\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=\"Open menu\">\n        <span class=\"nlp-toggle-bars\"><span><\/span><span><\/span><span><\/span><\/span>\n        <span class=\"nlp-toggle-t\">Menu<\/span>\n      <\/button>\n    <\/div>\n\n    <a href=\"\/\" 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\">EN<\/button>\n        <div class=\"nlp-lang-panel\" id=\"nlp-lang-panel\">\n          <div class=\"nlp-lang-in\">\n            <p class=\"nlp-lang-label\">Language<\/p>\n            <ul class=\"nlp-lang-list\">\n              <!-- IDIOMA: poner las URLs reales -->\n              <li><a href=\"\/\" hreflang=\"en\" lang=\"en\" data-code=\"EN\" aria-current=\"true\"><span>English<\/span><\/a><\/li>\n              <li><a href=\"\/es\/\" hreflang=\"es\" lang=\"es\" data-code=\"ES\"><span>Espa&ntilde;ol<\/span><\/a><\/li>\n            <\/ul>\n            <p class=\"nlp-lang-place\">Kitchens &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\">Arrange a visit<\/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\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Menu\" tabindex=\"-1\" hidden>\n  <nav class=\"nlp-nav-inner\" aria-label=\"Principal\">\n\n    <ul class=\"nlp-nav-list\">\n      <li><a href=\"\/kitchen-redesign\"><span>Kitchen Redesign<\/span><\/a><\/li>\n      <li><a href=\"\/new-kitchens\"><span>New Kitchens<\/span><\/a><\/li>\n      <li><a href=\"\/projects\"><span>Projects<\/span><\/a><\/li>\n      <li><a href=\"\/about\"><span>About<\/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\">Arrange a visit<\/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\">Kitchens &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\" aria-current=\"true\">English<\/a>'+\n                  '<a href=\"\/es\/\" hreflang=\"es\">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\",\"Close menu\");\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\",\"Open menu\");\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 pagina Projects\n     La pagina es un REGISTRO: la cuadricula de cocinas, todas del\n     mismo tamano, es la prueba de cantidad. Al pinchar una ficha se\n     abre EL CASO de esa cocina, que es la prueba de criterio.\n     Asi la pagina hace las dos cosas sin necesidad de una pagina\n     por proyecto.\n\n     COMO SE ANADE UN PROYECTO\n     Se copia un bloque <article class=\"nlp-pj-item\"> entero y se\n     cambian: la foto de la ficha, la leyenda, y el contenido del\n     <div class=\"nlp-pj-case\" hidden> de dentro. El popup se monta\n     solo a partir de eso, no hay que tocar el codigo de abajo.\n\n     27\/09\/2026 (v17) \u00b7 LAS COCINAS SE PRESENTAN COMO COCINAS TERMINADAS\n     Sin \"What stayed \/ What changed\" ni lenguaje de reforma. Los textos\n     son los del portfolio (MARKETING\/Portfolio cocinas\/_fuente-portfolio\/\n     build_lookbook.py) y la lista de cada caso dice los materiales.\n     Solo Fuengirola dice \"new kitchen\": las que fueron cambio de frentes\n     no lo dicen.\n     ============================================================ -->\n<div class=\"nlp-pj\">\n\n<header class=\"nlp-pj-top nlp-pj-in\">\n  <p class=\"nlp-pj-eyebrow\">Projects<\/p>\n  <h1 class=\"nlp-pj-h1\">The work, kitchen by kitchen.<\/h1>\n  <p class=\"nlp-pj-lead\">Every photograph on this page is a kitchen we fitted, taken in the client&rsquo;s home once the work was finished. Open any one of them for the materials and the full set of photographs.<\/p>\n<\/header>\n\n<div class=\"nlp-pj-in\">\n  <div class=\"nlp-pj-bar\">\n    <p class=\"nlp-pj-bar-l\">Costa del Sol<\/p>\n    <p class=\"nlp-pj-bar-r\">Most recent first<\/p>\n  <\/div>\n\n  <div class=\"nlp-pj-grid\">\n\n    <!-- ---------------- proyecto 01 ---------------- -->\n    <article class=\"nlp-pj-item\">\n      <button type=\"button\" class=\"nlp-pj-open\">\n        <img decoding=\"async\" src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/proyecto-3-2.png\" alt=\"Kitchen with a dark stone island, Marbella\" loading=\"lazy\">\n        <span class=\"nlp-pj-cap\">\n          <span class=\"nlp-pj-cap-t\">Marbella<\/span>\n          <span class=\"nlp-pj-cap-s\">Matte white, dark marble<\/span>\n        <\/span>\n      <\/button>\n      <div class=\"nlp-pj-case\" hidden>\n        <p class=\"nlp-pj-meta\">Marbella<\/p>\n        <h2 class=\"nlp-pj-case-h\">Dark marble in a room full of light.<\/h2>\n        <p class=\"nlp-pj-case-p\">Matte white fronts along the run, glazed doors on the upper units, and an island in dark marble to carry the room.<\/p>\n        <dl class=\"nlp-pj-kv\">\n          <div><dt>Fronts<\/dt><dd>Matte white, glazed upper units<\/dd><\/div>\n          <div><dt>Worktop<\/dt><dd>Dark marble<\/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    <\/article>\n\n    <!-- ---------------- proyecto 02 ---------------- -->\n    <article class=\"nlp-pj-item\">\n      <button type=\"button\" class=\"nlp-pj-open\">\n        <img decoding=\"async\" src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/05\/2718EDF5-7569-41C2-B131-DD6801B4BD8E_1_201_a.jpeg\" alt=\"Open kitchen with a marble island, Estepona\" loading=\"lazy\">\n        <span class=\"nlp-pj-cap\">\n          <span class=\"nlp-pj-cap-t\">Estepona<\/span>\n          <span class=\"nlp-pj-cap-s\">Matte cashmere, glass doors<\/span>\n        <\/span>\n      <\/button>\n      <div class=\"nlp-pj-case\" hidden>\n        <p class=\"nlp-pj-meta\">Estepona<\/p>\n        <h2 class=\"nlp-pj-case-h\">A straight run, until the island steps in.<\/h2>\n        <p class=\"nlp-pj-case-p\">The kitchen runs mostly in a single straight line, with the island adding a bit of personality and extra worktop space. Wall and base units are finished in a matte cashmere tone, with glass doors throughout, and black matte plinths finish the run.<\/p>\n        <dl class=\"nlp-pj-kv\">\n          <div><dt>Fronts<\/dt><dd>Matte cashmere, glass doors<\/dd><\/div>\n          <div><dt>Plinths<\/dt><dd>Black matte<\/dd><\/div>\n        <\/dl>\n        <div class=\"nlp-pj-shots\">\n          <div class=\"nlp-pj-vid\"><iframe src=\"https:\/\/player.vimeo.com\/video\/1226925354?dnt=1\" title=\"Next Level Cocinas, kitchen video\" 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\/05\/2718EDF5-7569-41C2-B131-DD6801B4BD8E_1_201_a.jpeg\" alt=\"\" loading=\"lazy\">\n          <img decoding=\"async\" src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/proyecto-02-b.jpg\" alt=\"\" loading=\"lazy\">\n        <\/div>\n      <\/div>\n    <\/article>\n\n    <!-- ---------------- proyecto 03 ---------------- -->\n    <article class=\"nlp-pj-item\">\n      <button type=\"button\" class=\"nlp-pj-open\">\n        <img decoding=\"async\" src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/proyecto3imagen.png\" alt=\"Grey kitchen with a white stone worktop, Fuengirola\" loading=\"lazy\">\n        <span class=\"nlp-pj-cap\">\n          <span class=\"nlp-pj-cap-t\">Fuengirola<\/span>\n          <span class=\"nlp-pj-cap-s\">Flat grey, white stone<\/span>\n        <\/span>\n      <\/button>\n      <div class=\"nlp-pj-case\" hidden>\n        <p class=\"nlp-pj-meta\">Fuengirola<\/p>\n        <h2 class=\"nlp-pj-case-h\">A new kitchen, built around a single stone.<\/h2>\n        <p class=\"nlp-pj-case-p\">The worktop and splashback share the same white stone, with flat grey fronts chosen to let it lead.<\/p>\n        <dl class=\"nlp-pj-kv\">\n          <div><dt>Fronts<\/dt><dd>Flat grey<\/dd><\/div>\n          <div><dt>Worktop and splashback<\/dt><dd>White stone<\/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, kitchen video\" 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    <\/article>\n\n    <!-- ---------------- proyecto 04 ---------------- -->\n    <article class=\"nlp-pj-item\">\n      <button type=\"button\" class=\"nlp-pj-open\">\n        <img decoding=\"async\" src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/proyecto42.jpeg\" alt=\"Kitchen with dark Nocce fronts and a black worktop, San Pedro de Alc&aacute;ntara\" loading=\"lazy\">\n        <span class=\"nlp-pj-cap\">\n          <span class=\"nlp-pj-cap-t\">San Pedro de Alc&aacute;ntara<\/span>\n          <span class=\"nlp-pj-cap-s\">Nocce, black worktop<\/span>\n        <\/span>\n      <\/button>\n      <div class=\"nlp-pj-case\" hidden>\n        <p class=\"nlp-pj-meta\">San Pedro de Alc&aacute;ntara<\/p>\n        <h2 class=\"nlp-pj-case-h\">Nocce fronts, and a worktop kept black.<\/h2>\n        <p class=\"nlp-pj-case-p\">The fronts and plinth are finished in a tone called Nocce, carried through the whole kitchen. The black worktop runs into the black of the handle-less opening profile, and LED lighting rounds it off, for a quietly elegant kitchen.<\/p>\n        <dl class=\"nlp-pj-kv\">\n          <div><dt>Fronts<\/dt><dd>Nocce, handle-less<\/dd><\/div>\n          <div><dt>Worktop<\/dt><dd>Black<\/dd><\/div>\n        <\/dl>\n        <div class=\"nlp-pj-shots\">\n          <img decoding=\"async\" src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/proyecto42.jpeg\" alt=\"\" loading=\"lazy\">\n          <img decoding=\"async\" src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/proyecto4-scaled.jpeg\" alt=\"\" loading=\"lazy\">\n        <\/div>\n      <\/div>\n    <\/article>\n\n    <!-- ---------------- proyecto 05 ---------------- -->\n    <article class=\"nlp-pj-item\">\n      <button type=\"button\" class=\"nlp-pj-open\">\n        <img decoding=\"async\" src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/proyecto-5-imgmain.png\" alt=\"Kitchen with a stone backsplash and recessed lighting, Benahav&iacute;s\" loading=\"lazy\">\n        <span class=\"nlp-pj-cap\">\n          <span class=\"nlp-pj-cap-t\">Benahav&iacute;s<\/span>\n          <span class=\"nlp-pj-cap-s\">Flat matte white<\/span>\n        <\/span>\n      <\/button>\n      <div class=\"nlp-pj-case\" hidden>\n        <p class=\"nlp-pj-meta\">Benahav&iacute;s<\/p>\n        <h2 class=\"nlp-pj-case-h\">A door to the balcony does the decorating.<\/h2>\n        <p class=\"nlp-pj-case-p\">Flat fronts in matte white, with the oven and microwave built into one tall column. The balcony door brings in the one view worth keeping.<\/p>\n        <dl class=\"nlp-pj-kv\">\n          <div><dt>Fronts<\/dt><dd>Flat, matte white<\/dd><\/div>\n          <div><dt>Tall column<\/dt><dd>Oven and microwave<\/dd><\/div>\n        <\/dl>\n        <div class=\"nlp-pj-shots\">\n          <div class=\"nlp-pj-vid\"><iframe src=\"https:\/\/player.vimeo.com\/video\/1226926715?dnt=1\" title=\"Next Level Cocinas, kitchen video\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture\" allowfullscreen loading=\"lazy\"><\/iframe><\/div>\n          <div class=\"nlp-pj-vid\"><iframe src=\"https:\/\/player.vimeo.com\/video\/1226926714?dnt=1\" title=\"Next Level Cocinas, kitchen video\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture\" allowfullscreen loading=\"lazy\"><\/iframe><\/div>\n        <\/div>\n      <\/div>\n    <\/article>\n\n    <!-- ---------------- proyecto 06 ---------------- -->\n    <article class=\"nlp-pj-item\">\n      <button type=\"button\" class=\"nlp-pj-open\">\n        <img decoding=\"async\" src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/proyecto6.png\" alt=\"Light oak kitchen with a stone worktop and splashback, Nueva Andaluc&iacute;a\" loading=\"lazy\">\n        <span class=\"nlp-pj-cap\">\n          <span class=\"nlp-pj-cap-t\">Nueva Andaluc&iacute;a<\/span>\n          <span class=\"nlp-pj-cap-s\">Light oak, grey stone<\/span>\n        <\/span>\n      <\/button>\n      <div class=\"nlp-pj-case\" hidden>\n        <p class=\"nlp-pj-meta\">Nueva Andaluc&iacute;a<\/p>\n        <h2 class=\"nlp-pj-case-h\">A corner run, finished down to the last detail.<\/h2>\n        <p class=\"nlp-pj-case-p\">Light oak in a corner run, with a grey stone worktop and matching splashback. Sink, tap and hob complete the run.<\/p>\n        <dl class=\"nlp-pj-kv\">\n          <div><dt>Fronts<\/dt><dd>Light oak<\/dd><\/div>\n          <div><dt>Worktop and splashback<\/dt><dd>Grey stone<\/dd><\/div>\n        <\/dl>\n        <div class=\"nlp-pj-shots\">\n          <img decoding=\"async\" src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/proyecto6.png\" alt=\"\" loading=\"lazy\">\n          <img decoding=\"async\" src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/proyecto62.png\" alt=\"\" loading=\"lazy\">\n        <\/div>\n      <\/div>\n    <\/article>\n\n    <!-- ---------------- proyecto 07 ---------------- -->\n    <article class=\"nlp-pj-item\">\n      <button type=\"button\" class=\"nlp-pj-open\">\n        <img decoding=\"async\" src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/proyecto7-scaled.jpg\" alt=\"Kitchen with fluted cabinet fronts and a stone worktop, La Cala de Mijas\" loading=\"lazy\">\n        <span class=\"nlp-pj-cap\">\n          <span class=\"nlp-pj-cap-t\">La Cala de Mijas<\/span>\n          <span class=\"nlp-pj-cap-s\">Fluted taupe, stone<\/span>\n        <\/span>\n      <\/button>\n      <div class=\"nlp-pj-case\" hidden>\n        <p class=\"nlp-pj-meta\">La Cala de Mijas<\/p>\n        <h2 class=\"nlp-pj-case-h\">Fluted fronts, and a worktop that stays quiet.<\/h2>\n        <p class=\"nlp-pj-case-p\">Fluted fronts in a soft taupe, with the worktop and splashback in the same quiet stone. The handles stay off the face, so the texture on the doors does the talking.<\/p>\n        <dl class=\"nlp-pj-kv\">\n          <div><dt>Fronts<\/dt><dd>Fluted, soft taupe<\/dd><\/div>\n          <div><dt>Worktop and splashback<\/dt><dd>Stone<\/dd><\/div>\n        <\/dl>\n        <div class=\"nlp-pj-shots\">\n          <div class=\"nlp-pj-vid\"><iframe src=\"https:\/\/player.vimeo.com\/video\/1226951003?dnt=1\" title=\"Next Level Cocinas, kitchen video\" 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\/proyecto7-scaled.jpg\" alt=\"\" loading=\"lazy\">\n          <img decoding=\"async\" src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/proyecto71-scaled.jpg\" alt=\"\" loading=\"lazy\">\n        <\/div>\n      <\/div>\n    <\/article>\n\n    <!-- ---------------- proyecto 08 ----------------\n         27\/09\/2026 \u00b7 la cocina de roble y gris que ya salia en la Home.\n         Datos confirmados: encimera Silestone, altos en oak claro, bajos en\n         blanco hueso mate. La foto que sale en la Home no se usa\n         aqui: la ficha lleva las dos del portfolio. -->\n    <article class=\"nlp-pj-item\">\n      <button type=\"button\" class=\"nlp-pj-open\">\n        <img decoding=\"async\" src=\"https:\/\/nextlevelcocinas.com\/wp-content\/uploads\/2026\/09\/proyecto-08-roble-1.jpg\" alt=\"Kitchen with light oak wall units and a Silestone worktop, Estepona\" loading=\"lazy\">\n        <span class=\"nlp-pj-cap\">\n          <span class=\"nlp-pj-cap-t\">Estepona &middot; Los Granados del Mar<\/span>\n          <span class=\"nlp-pj-cap-s\">Light oak, Silestone<\/span>\n        <\/span>\n      <\/button>\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\">Light oak above, bone white below.<\/h2>\n        <p class=\"nlp-pj-case-p\">Wall units in light oak, base units in a matte bone white, and a Silestone worktop between the two. A line of light under the wall units brings out the grain of the oak.<\/p>\n        <dl class=\"nlp-pj-kv\">\n          <div><dt>Fronts<\/dt><dd>Light oak and matte bone white<\/dd><\/div>\n          <div><dt>Worktop<\/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    <\/article>\n\n  <\/div>\n<\/div>\n\n<div class=\"nlp-pj-end nlp-pj-in\">\n  <h2>Let&rsquo;s talk about your kitchen.<\/h2>\n  <p>We&rsquo;ll come and see it, at no charge, and send a closed price within 48 hours.<\/p>\n  <a class=\"nlp-pj-btn nlp-calendly-btn\" href=\"#\" id=\"nlp-calendly-btn-pj\">Arrange a visit<\/a>\n<\/div>\n\n<!-- ============================================================\n     El popup. Se rellena solo con el caso de la ficha que se pincha.\n     Es un <dialog>: el navegador ya se encarga de atrapar el foco y\n     de cerrar con Esc, asi que aqui hay mucho menos codigo que en un\n     modal hecho a mano, y funciona mejor con teclado.\n     ============================================================ -->\n<dialog class=\"nlp-pj-modal\" 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=\"Previous kitchen\">\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=\"Next kitchen\">\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=\"Close\">\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<\/div>\n\n<style>\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{font-family:var(--nlp-font);color:var(--nlp-ink2);background:#fff;}\n.nlp-pj *,.nlp-pj-modal *{box-sizing:border-box;}\n.nlp-pj-in{max-width:1600px;margin:0 auto;padding:0 clamp(20px,5vw,70px);}\n\n\/* cabecera, con sitio para la barra fija del menu *\/\n.nlp-pj-top{padding-block:calc(92px + clamp(40px,7vw,86px)) clamp(30px,4vw,48px);}\n.nlp-pj-eyebrow{\n  margin:0 0 18px;font-size:11px;font-weight:600;letter-spacing:.18em;\n  text-transform:uppercase;color:var(--nlp-accent);\n}\n.nlp-pj-h1{\n  margin:0;color:var(--nlp-ink);font-weight:600;\n  font-size:clamp(34px,5.2vw,60px);line-height:1.06;letter-spacing:-.022em;\n  text-wrap:balance;max-width:16ch;\n}\n.nlp-pj-lead{margin:22px 0 0;font-size:19px;line-height:1.6;max-width:54ch;color:var(--nlp-ink2);}\n\n.nlp-pj-bar{\n  display:flex;flex-wrap:wrap;gap:8px 26px;justify-content:space-between;\n  border-top:1px solid var(--nlp-line);border-bottom:1px solid var(--nlp-line);\n  padding:15px 0;margin-bottom:clamp(28px,4vw,44px);\n}\n.nlp-pj-bar p{margin:0;font-size:14.5px;}\n.nlp-pj-bar-l{color:var(--nlp-ink);font-weight:600;}\n.nlp-pj-bar-r{color:var(--nlp-ink3);}\n\n\/* ---------------- la cuadricula ---------------- *\/\n.nlp-pj-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(20px,2.6vw,36px) clamp(16px,2vw,28px);}\n.nlp-pj-item{margin:0;}\n.nlp-pj-open{\n  display:block;width:100%;padding:0;border:0;background:none;\n  font-family:inherit;text-align:left;cursor:pointer;\n}\n.nlp-pj-open img{\n  width:100%;aspect-ratio:1\/1;object-fit:cover;display:block;background:var(--nlp-soft);\n  filter:grayscale(40%) sepia(10%) saturate(88%) contrast(.96) brightness(1.03);\n  transition:opacity .3s ease,filter .3s ease;\n}\n.nlp-pj-open:hover img{opacity:.88;filter:grayscale(22%) sepia(6%) saturate(94%) contrast(.98) brightness(1.02);}\n.nlp-pj-open:focus-visible{outline:2px solid var(--nlp-accent);outline-offset:3px;}\n.nlp-pj-cap{display:block;padding-top:13px;}\n.nlp-pj-cap-t{display:block;font-size:15px;font-weight:600;color:var(--nlp-ink);}\n.nlp-pj-cap-s{display:block;font-size:14.5px;color:var(--nlp-ink2);margin-top:2px;}\n@media(max-width:900px){ .nlp-pj-grid{grid-template-columns:repeat(2,1fr);} }\n@media(max-width:560px){ .nlp-pj-grid{grid-template-columns:1fr;} }\n\/* ---------- MOVIL \u00b7 22\/09\/2026 ----------\n   En el movil la cuadricula copia el estilo de Recent work de la Home: fotos a todo el ancho y en\n   vertical (4:5), separadas por una franja blanca fina, con el nombre y el trabajo encima de la foto\n   sobre un degradado oscuro, y la etiqueta \"See project\" arriba a la derecha, donde no tapa nada.\n   Las fotos mantienen el filtro de la cuadricula. En escritorio y en tableta no cambia nada. *\/\n@media(max-width:600px){\n  .nlp-pj-grid{grid-template-columns:1fr;gap:6px;margin:0 calc(-1 * clamp(20px,5vw,70px));}\n  .nlp-pj-open{position:relative;overflow:hidden;}\n  .nlp-pj-open img{aspect-ratio:4\/5;}\n  .nlp-pj-open::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  .nlp-pj-cap{position:absolute;left:clamp(20px,5vw,70px);right:clamp(20px,5vw,70px);bottom:18px;z-index:1;\n     display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 14px;padding:0;line-height:1.65;pointer-events:none;}\n  .nlp-pj-cap-t{color:#fff;font-size:16px;}\n  .nlp-pj-cap-s{color:rgba(255,255,255,.86);font-size:14px;margin-top:0;}\n  .nlp-pj-open::before{\n    content:\"See project\";position:absolute;top:16px;right:16px;z-index:1;\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;\n    opacity:0;transform:translateY(-6px);transition:opacity .25s ease,transform .25s ease;pointer-events:none;\n  }\n  .nlp-pj-open:hover::before,.nlp-pj-open:focus-visible::before{opacity:1;transform:none;}\n  .nlp-pj-open:focus-visible{outline-offset:-3px;}\n}\n\n\/* ---------------- cierre ---------------- *\/\n.nlp-pj-end{\n  margin-top:clamp(60px,8vw,110px);\n  border-top:1px solid var(--nlp-line);\n  padding-block:clamp(54px,7vw,86px) clamp(60px,8vw,96px);\n  text-align:center;\n}\n.nlp-pj-end h2{\n  margin:0 auto;color:var(--nlp-ink);font-weight:600;\n  font-size:clamp(26px,3.4vw,40px);line-height:1.12;letter-spacing:-.018em;max-width:20ch;\n}\n.nlp-pj-end p{margin:18px auto 30px;max-width:46ch;font-size:18px;}\n.nlp-pj-btn{\n  display:inline-flex;align-items:center;height:52px;padding:0 30px;\n  background:var(--nlp-accent);color:#fff;text-decoration:none;\n  font-size:15px;font-weight:600;border-radius:2px;transition:background .3s ease;\n}\n.nlp-pj-btn:hover{background:var(--nlp-accent-dk);color:#fff;}\n\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<\/style>\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\">\n  <div class=\"nlp-ft-inner\">\n    <div class=\"nlp-ft-brand\">\n      <a href=\"\/\" 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; Estepona to M&aacute;laga<\/p>\n    <\/div>\n\n    <nav class=\"nlp-ft-nav\" aria-label=\"Footer\">\n      <a href=\"\/kitchen-redesign\">Kitchen Redesign<\/a>\n      <a href=\"\/new-kitchens\">New Kitchens<\/a>\n      <a href=\"\/projects\">Projects<\/a>\n      <a href=\"\/about\">About<\/a>\n    <\/nav>\n\n    <div class=\"nlp-ft-contact\">\n      <p class=\"nlp-ft-talk\">Talk to us<\/p>\n      <a href=\"mailto:design@nextlevelcocinas.com\"><span class=\"nlp-ft-k\">Email<\/span>design@nextlevelcocinas.com<\/a>\n      <a href=\"tel:+34647036816\"><span class=\"nlp-ft-k\">Call<\/span>+34 647 036 816<\/a>\n      <a href=\"https:\/\/instagram.com\/nextlevelcosta\" target=\"_blank\" rel=\"noopener\"><span class=\"nlp-ft-k\">Follow<\/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=\"\/terms-of-use\">Legal Notice &amp; Terms of Use<\/a>\n      <a href=\"\/privacy-policy\">Privacy Policy<\/a>\n      <button type=\"button\" class=\"nlp-ft-cookie\" data-nlp-cookie-open>Cookie settings<\/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. We only use the cookies this website needs to work. Analytics and marketing cookies stay off unless you accept them, and we use none today. You can change your choice at any time with Cookie settings at the bottom of every page. Privacy Policy Reject all Accept all Customise Cookies Cookie settings Choose which [&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-820","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/nextlevelcocinas.com\/en\/wp-json\/wp\/v2\/pages\/820","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=820"}],"version-history":[{"count":866,"href":"https:\/\/nextlevelcocinas.com\/en\/wp-json\/wp\/v2\/pages\/820\/revisions"}],"predecessor-version":[{"id":5218,"href":"https:\/\/nextlevelcocinas.com\/en\/wp-json\/wp\/v2\/pages\/820\/revisions\/5218"}],"wp:attachment":[{"href":"https:\/\/nextlevelcocinas.com\/en\/wp-json\/wp\/v2\/media?parent=820"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}