{"id":27912,"date":"2021-05-25T09:30:23","date_gmt":"2021-05-25T09:30:23","guid":{"rendered":"https:\/\/www.portamediterranea.com\/home\/"},"modified":"2026-11-11T08:58:18","modified_gmt":"2026-11-11T08:58:18","slug":"home","status":"publish","type":"page","link":"https:\/\/www.portamediterranea.com\/en\/","title":{"rendered":"Home"},"content":{"rendered":"\n<style data-wp-block-html=\"css\">\n.ov-hidden {overflow:hidden;}\n#pmh4{--ola:#359caf;--olo:#2a8191;--tinta:#13262b;--gris:#5b6e73;background:#f4f7f8;padding:clamp(28px,5vh,72px) 0;font-family:Montserrat,Helvetica,Arial,sans-serif}\n#pmh4 *{box-sizing:border-box}\n#pmh4 .rej{display:grid;grid-template-columns:1.1fr .9fr;gap:clamp(28px,5vw,80px);align-items:center;max-width:1714px;margin:0 auto;padding:0 16px}\n#pmh4 .etq{font:600 11px Montserrat,sans-serif;letter-spacing:.22em;text-transform:uppercase;color:var(--olo)}\n#pmh4 .tit{font-family:Fraunces,Georgia,serif;font-weight:300;font-size:clamp(36px,4.4vw,68px);line-height:1.03;margin:18px 0 22px;color:var(--tinta);text-transform:none;letter-spacing:0}\n#pmh4 .tit strong{font-weight:300;font-style:italic;color:var(--ola)}\n#pmh4 p.t{max-width:52ch;font-size:14.5px;line-height:1.7;color:var(--gris);margin:0 0 14px}\n#pmh4 p.t strong{color:var(--tinta);font-weight:600}\n#pmh4 .btns{display:flex;gap:12px;flex-wrap:wrap;margin-top:22px}\n#pmh4 .b{display:inline-flex;align-items:center;padding:15px 26px;font:600 12px Montserrat,sans-serif;letter-spacing:.12em;text-transform:uppercase;background:var(--ola);color:#fff!important;text-decoration:none;border:1px solid var(--ola);transition:background .2s}\n#pmh4 .b:hover{background:var(--olo)}\n#pmh4 .b.l{background:transparent;color:var(--tinta)!important;border-color:var(--tinta)}\n#pmh4 .b.l:hover{background:var(--tinta);color:#fff!important}\n#pmh4 .mos{position:relative;display:grid;grid-template-columns:1.3fr 1fr;grid-template-rows:1fr 1fr;gap:12px;height:min(66vh,540px);min-height:380px}\n#pmh4 .mos a{display:block;background-size:cover;background-position:center;position:relative;overflow:hidden}\n#pmh4 .mos a span{position:absolute;left:0;bottom:0;right:0;padding:26px 14px 10px;background:linear-gradient(transparent,rgba(15,45,55,.75));color:#fff;font:600 10px Montserrat,sans-serif;letter-spacing:.16em;text-transform:uppercase}\n#pmh4 .m1{grid-row:1\/3;border-radius:200px 200px 0 0}\n#pmh4 .tj{position:absolute;left:-26px;bottom:44px;background:#fff;padding:16px 22px;box-shadow:0 18px 40px -18px rgba(15,45,55,.5);min-width:190px}\n#pmh4 .tj small{font:600 9.5px Montserrat,sans-serif;letter-spacing:.2em;text-transform:uppercase;color:var(--gris)}\n#pmh4 .tj b{display:block;font:300 24px Fraunces,Georgia,serif;margin-top:2px;color:var(--olo)}\n@media(max-width:860px){#pmh4 .rej{grid-template-columns:1fr}#pmh4 .tj{left:10px}#pmh4 .mos{order:-1;height:56vh}}\n<\/style>\n<section id=\"pmh4\" aria-label=\"Featured developments\"><div class=\"rej\"><div><span class=\"etq\">Costa del Azahar<\/span><h1 class=\"tit\">New-build developments in&nbsp;<strong>Alcossebre<\/strong><\/h1>\n<p class=\"t\">At&nbsp;<strong>Porta Mediterr\u00e1nea Homes<\/strong>&nbsp;we are committed to quality of life and comfort. That is why all our projects are designed so you can make the most of your free time.<\/p>\n<p class=\"t\">We have created dream spaces with our&nbsp;<strong>new-build developments<\/strong>, ideal for living and for you and your loved ones to enjoy a home with every comfort, close to the beach.<\/p>\n<div class=\"btns\"><a class=\"b\" href=\"\/en\/new-homes-for-sale\/\">View developments \u2192<\/a><a class=\"b l\" href=\"tel:+34964090154\">Call \u00b7 964 09 01 54<\/a><\/div><\/div>\n<div class=\"mos\"><a class=\"m1 pmh4-foto\" href=\"\/en\/new-homes-for-sale\/the-edge-residential\/\" style=\"background-image:url(https:\/\/www.portamediterranea.com\/wp-content\/uploads\/2024\/02\/promociones-theedge.webp)\"><span>The Edge<\/span><\/a>\n<a class=\"pmh4-foto\" href=\"\/en\/new-homes-for-sale\/porta-dirta-building\/\" style=\"background-image:url(https:\/\/www.portamediterranea.com\/wp-content\/uploads\/2024\/02\/porta-dirta.webp)\"><span>Porta d\u2019Irta<\/span><\/a>\n<a class=\"pmh4-foto\" href=\"\/en\/new-homes-for-sale\/porta-dirta-building\/\" style=\"background-image:url(https:\/\/www.portamediterranea.com\/wp-content\/uploads\/2024\/02\/porta-dirta-slider-1.webp)\"><span>Porta d\u2019Irta \u00b7 at sunset<\/span><\/a>\n<div class=\"tj\"><small>The Edge \u00b7 from<\/small><b>\u20ac415,000<\/b><\/div><\/div><\/div><\/section>\n\n\n\n<style>\n.pmk {\n  --pmk-max: 1714px;\n  --pmk-pad: 16px;\n  --pmk-pad-v: 96px;\n  --pmk-ink: #1a1a1a;\n  --pmk-mute: #6b6b6b;\n  --pmk-soft: #ededed;\n  --pmk-line: #e0e0e0;\n  --pmk-bg: #fafafa;\n  --pmk-accent: #0ec2ff;\n  --pmk-dur: 5000ms;\n  --pmk-fade: 1000ms;\n  width: 100%;\n  background-color: #ffffff;\n}\n\n.pmk *,\n.pmk *::before,\n.pmk *::after { box-sizing: border-box; }\n\n.pmk__wrap {\n  width: 100%;\n  max-width: var(--pmk-max);\n  margin-left: auto;\n  margin-right: auto;\n  padding: var(--pmk-pad-v) var(--pmk-pad);\n}\n\n.pmk__head { margin-bottom: 48px; }\n\n.pmk__rule {\n  width: 44px;\n  height: 2px;\n  margin-bottom: 20px;\n  background-color: var(--pmk-accent);\n}\n\n.pmk__eyebrow {\n  margin: 0 0 12px;\n  font-size: 11px;\n  font-weight: 600;\n  letter-spacing: .26em;\n  text-transform: uppercase;\n  color: var(--pmk-mute);\n}\n\n.pmk__title {\n  margin: 0;\n  font-size: clamp(26px, 2.4vw, 40px);\n  font-weight: 300;\n  line-height: 1.1;\n  letter-spacing: -.01em;\n  color: var(--pmk-ink);\n}\n\n.pmk__title strong {\n  display: block;\n  font-weight: 600;\n}\n\n.pmk__grid {\n  display: grid;\n  grid-template-columns: 320px minmax(0, 1fr);\n  column-gap: 56px;\n  align-items: start;\n}\n\n.pmk__index {\n  display: flex;\n  flex-direction: column;\n  border-top: 1px solid var(--pmk-soft);\n}\n\n.pmk__item {\n  position: relative;\n  display: grid;\n  grid-template-columns: 34px minmax(0, 1fr);\n  align-items: start;\n  width: 100%;\n  margin: 0;\n  padding: 18px 4px 18px 16px;\n  border: 0;\n  border-bottom: 1px solid var(--pmk-soft);\n  background: none;\n  font: inherit;\n  text-align: left;\n  cursor: pointer;\n}\n\n.pmk__item::before {\n  content: \"\";\n  position: absolute;\n  left: 0;\n  top: 0;\n  bottom: 0;\n  width: 2px;\n  background-color: var(--pmk-accent);\n  transform: scaleY(0);\n  transform-origin: top;\n  transition: transform 380ms cubic-bezier(.2, .7, .3, 1);\n}\n\n.pmk__item[aria-selected=\"true\"]::before { transform: scaleY(1); }\n\n.pmk__num {\n  font-size: 11px;\n  font-weight: 600;\n  letter-spacing: .1em;\n  line-height: 1.9;\n  color: var(--pmk-line);\n  transition: color 300ms ease;\n}\n\n.pmk__item:hover .pmk__num { color: var(--pmk-mute); }\n.pmk__item[aria-selected=\"true\"] .pmk__num { color: var(--pmk-accent); }\n\n.pmk__itemname {\n  display: block;\n  font-size: 16px;\n  font-weight: 500;\n  line-height: 1.3;\n  color: var(--pmk-mute);\n  transition: color 300ms ease, transform 380ms cubic-bezier(.2, .7, .3, 1);\n}\n\n.pmk__item:hover .pmk__itemname { color: var(--pmk-ink); transform: translateX(4px); }\n\n.pmk__item[aria-selected=\"true\"] .pmk__itemname {\n  font-weight: 600;\n  color: var(--pmk-ink);\n  transform: translateX(4px);\n}\n\n.pmk__itemloc {\n  display: block;\n  overflow: hidden;\n  max-height: 0;\n  margin-top: 0;\n  font-size: 12px;\n  font-weight: 400;\n  letter-spacing: .02em;\n  color: var(--pmk-mute);\n  opacity: 0;\n  transform: translateX(4px);\n  transition: max-height 380ms ease, opacity 300ms ease, margin-top 380ms ease;\n}\n\n.pmk__item[aria-selected=\"true\"] .pmk__itemloc {\n  max-height: 32px;\n  margin-top: 5px;\n  opacity: 1;\n}\n\n.pmk__item:focus-visible {\n  outline: 2px solid var(--pmk-accent);\n  outline-offset: 2px;\n}\n\n.pmk__all {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  margin-top: 24px;\n  padding: 0 0 0 16px;\n  font-size: 12px;\n  font-weight: 600;\n  letter-spacing: .14em;\n  text-transform: uppercase;\n  text-decoration: none;\n  color: var(--pmk-mute);\n  transition: color 260ms ease, gap 260ms ease;\n}\n\n.pmk__all:hover { color: var(--pmk-ink); gap: 13px; }\n\n.pmk__all svg {\n  width: 15px;\n  height: 15px;\n  fill: none;\n  stroke: currentColor;\n  stroke-width: 1.7;\n  stroke-linecap: round;\n  stroke-linejoin: round;\n}\n\n.pmk__stage {\n  position: relative;\n  isolation: isolate;\n  overflow: hidden;\n  width: 100%;\n  border-radius: 10px;\n  background-color: var(--pmk-soft);\n  aspect-ratio: 16 \/ 9;\n  max-height: 500px;\n  touch-action: pan-y;\n}\n\n.pmk__stage::after {\n  content: \"\";\n  position: absolute;\n  inset: auto 0 0 0;\n  height: 45%;\n  z-index: 1;\n  background: linear-gradient(to top, rgba(6, 24, 29, .45), rgba(6, 24, 29, 0));\n  pointer-events: none;\n}\n\n.pmk__img {\n  position: absolute;\n  inset: 0;\n  background-size: cover;\n  background-position: center;\n  background-repeat: no-repeat;\n  opacity: 0;\n  transition: opacity var(--pmk-fade) ease;\n}\n\n.pmk__img.is-on {\n  opacity: 1;\n  animation: pmkZoom 7000ms linear forwards;\n}\n\n@keyframes pmkZoom {\n  from { transform: scale(1.055); }\n  to   { transform: scale(1); }\n}\n\n.pmk__bars {\n  position: absolute;\n  z-index: 3;\n  top: 18px;\n  right: 18px;\n  display: flex;\n  gap: 6px;\n}\n\n.pmk__bar {\n  width: 28px;\n  height: 3px;\n  padding: 0;\n  border: 0;\n  border-radius: 2px;\n  overflow: hidden;\n  background-color: rgba(255, 255, 255, .35);\n  box-shadow: 0 0 10px rgba(0, 0, 0, .25);\n  cursor: pointer;\n}\n\n.pmk__fill {\n  display: block;\n  width: 100%;\n  height: 100%;\n  background-color: #ffffff;\n  transform: scaleX(0);\n  transform-origin: left;\n}\n\n.pmk__bar.is-done .pmk__fill { transform: scaleX(1); }\n.pmk__bar.is-live .pmk__fill { animation: pmkFill var(--pmk-dur) linear forwards; }\n.pmk__stage.is-paused .pmk__fill { animation-play-state: paused; }\n\n@keyframes pmkFill {\n  from { transform: scaleX(0); }\n  to   { transform: scaleX(1); }\n}\n\n.pmk__arrow {\n  position: absolute;\n  z-index: 3;\n  top: 50%;\n  width: 42px;\n  height: 42px;\n  margin-top: -21px;\n  padding: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border: 1px solid rgba(255, 255, 255, .5);\n  border-radius: 50%;\n  background-color: rgba(255, 255, 255, .14);\n  backdrop-filter: blur(6px);\n  color: #ffffff;\n  cursor: pointer;\n  opacity: 0;\n  transition: opacity 300ms ease, background-color 300ms ease, transform 300ms ease;\n}\n\n.pmk__stage:hover .pmk__arrow { opacity: 1; }\n.pmk__arrow:focus-visible { opacity: 1; outline: 2px solid #ffffff; outline-offset: 2px; }\n.pmk__arrow:hover { background-color: rgba(255, 255, 255, .3); }\n.pmk__arrow--prev { left: 16px; }\n.pmk__arrow--next { right: 16px; }\n.pmk__arrow--prev:hover { transform: translateX(-3px); }\n.pmk__arrow--next:hover { transform: translateX(3px); }\n\n.pmk__arrow svg {\n  width: 18px;\n  height: 18px;\n  fill: none;\n  stroke: currentColor;\n  stroke-width: 1.7;\n  stroke-linecap: round;\n  stroke-linejoin: round;\n}\n\n.pmk__card {\n  position: relative;\n  z-index: 4;\n  max-width: 660px;\n  margin: -76px 0 0 44px;\n  padding: 28px 32px 26px;\n  border-radius: 10px;\n  background-color: #ffffff;\n  box-shadow: 0 26px 54px -26px rgba(0, 0, 0, .3);\n}\n\n.pmk__logo {\n  position: absolute;\n  top: 24px;\n  right: 28px;\n  width: auto;\n  height: 50px;\n  max-width: 140px;\n  object-fit: contain;\n  object-position: right center;\n  opacity: .9;\n  pointer-events: none;\n}\n\n.pmk__name {\n  position: relative;\n  max-width: calc(100% - 150px);\n  margin: 0;\n  font-size: clamp(19px, 1.4vw, 24px);\n  font-weight: 600;\n  line-height: 1.2;\n  letter-spacing: .01em;\n  text-transform: uppercase;\n  color: var(--pmk-ink);\n}\n\n.pmk__loc {\n  position: relative;\n  margin: 8px 0 0;\n  font-size: 14px;\n  letter-spacing: .02em;\n  color: var(--pmk-mute);\n}\n\n.pmk__meta {\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin: 18px 0 0;\n  padding: 0;\n}\n\n.pmk__meta span {\n  padding: 4px 13px;\n  border-radius: 100px;\n  border: 1px solid var(--pmk-line);\n  background-color: var(--pmk-bg);\n  font-size: 12px;\n  letter-spacing: .03em;\n  color: var(--pmk-mute);\n}\n\n.pmk__meta span.is-price {\n  border-color: var(--pmk-ink);\n  background-color: #ffffff;\n  font-weight: 600;\n  color: var(--pmk-ink);\n}\n\n.pmk__cta {\n  display: inline-flex;\n  align-items: center;\n  gap: 10px;\n  margin-top: 24px;\n  padding: 13px 26px;\n  border: 1px solid var(--pmk-ink);\n  border-radius: 3px;\n  background-color: var(--pmk-ink);\n  font-size: 12px;\n  font-weight: 600;\n  letter-spacing: .14em;\n  text-transform: uppercase;\n  text-decoration: none;\n  color: #ffffff;\n  transition: background-color 300ms ease, border-color 300ms ease, color 300ms ease, gap 300ms ease, box-shadow 300ms ease;\n}\n\n.pmk__cta:hover,\n.pmk__cta:focus-visible {\n  gap: 16px;\n  border-color: var(--pmk-accent);\n  background-color: var(--pmk-accent);\n  color: #06181d;\n  box-shadow: 0 14px 30px -14px rgba(14, 194, 255, .55);\n}\n\n.pmk__cta svg {\n  width: 16px;\n  height: 16px;\n  fill: none;\n  stroke: currentColor;\n  stroke-width: 1.7;\n  stroke-linecap: round;\n  stroke-linejoin: round;\n}\n\n.pmk__note {\n  margin: 14px 0 0;\n  font-size: 11px;\n  line-height: 1.5;\n  color: #9a9a9a;\n}\n\n.pmk__desc {\n  max-width: 78ch;\n  margin: 30px 0 0 44px;\n  font-size: 15px;\n  line-height: 1.7;\n  color: var(--pmk-mute);\n}\n\n.pmk__card,\n.pmk__desc { transition: opacity 300ms ease, transform 300ms cubic-bezier(.2, .7, .3, 1); }\n.pmk__card.is-out { opacity: 0; transform: translateY(12px); }\n.pmk__desc.is-out { opacity: 0; transform: translateY(12px); }\n\n@media (max-width: 980px) {\n  .pmk { --pmk-pad-v: 48px; }\n\n  .pmk__head { margin-bottom: 28px; }\n\n  .pmk__grid {\n    grid-template-columns: minmax(0, 1fr);\n    row-gap: 22px;\n  }\n\n  .pmk__index {\n    flex-direction: row;\n    border-top: 0;\n    border-bottom: 1px solid var(--pmk-soft);\n    overflow-x: auto;\n    scrollbar-width: none;\n  }\n\n  .pmk__index::-webkit-scrollbar { display: none; }\n\n  .pmk__item {\n    flex: 0 0 auto;\n    width: auto;\n    grid-template-columns: auto auto;\n    column-gap: 8px;\n    align-items: center;\n    padding: 12px 16px 12px 14px;\n    border-bottom: 0;\n    white-space: nowrap;\n  }\n\n  .pmk__item::before {\n    left: 0;\n    right: 0;\n    top: auto;\n    bottom: 0;\n    width: auto;\n    height: 2px;\n    transform: scaleX(0);\n    transform-origin: left;\n  }\n\n  .pmk__item[aria-selected=\"true\"]::before { transform: scaleX(1); }\n\n  .pmk__num { line-height: 1.4; }\n  .pmk__itemname { font-size: 14px; }\n  .pmk__item:hover .pmk__itemname { transform: none; }\n  .pmk__item[aria-selected=\"true\"] .pmk__itemname { transform: none; }\n  .pmk__itemloc { display: none; }\n  .pmk__all { display: none; }\n\n  .pmk__stage { aspect-ratio: 4 \/ 3; border-radius: 8px; }\n  .pmk__arrow { display: none; }\n\n  .pmk__card {\n    max-width: none;\n    margin: -34px 12px 0;\n    padding: 22px 20px;\n    border-radius: 8px;\n  }\n\n  .pmk__logo { height: 36px; max-width: 100px; top: 20px; right: 18px; }\n  .pmk__name { max-width: calc(100% - 106px); }\n  .pmk__cta { width: 100%; justify-content: center; }\n  .pmk__desc { margin: 24px 0 0; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .pmk__img,\n  .pmk__card,\n  .pmk__desc,\n  .pmk__itemname,\n  .pmk__itemloc,\n  .pmk__item::before { transition-duration: 1ms; }\n  .pmk__img.is-on { animation: none; }\n  .pmk__bar.is-live .pmk__fill { animation: none; transform: scaleX(1); }\n}\n<\/style>\n\n<section class=\"pmk\" id=\"pmk-root\" aria-label=\"Developments for sale\">\n  <div class=\"pmk__wrap\">\n    <header class=\"pmk__head\">\n      <div class=\"pmk__rule\"><\/div>\n      <p class=\"pmk__eyebrow\">Now is the time to buy<\/p>\n      <h2 class=\"pmk__title\">Discover the projects<strong>at the key-handover stage<\/strong><\/h2>\n    <\/header>\n\n    <div class=\"pmk__grid\">\n      <div>\n        <nav class=\"pmk__index\" id=\"pmk-index\" role=\"tablist\" aria-orientation=\"vertical\" aria-label=\"Choose development\"><\/nav>\n        <a class=\"pmk__all\" href=\"https:\/\/www.portamediterranea.com\/en\/new-homes-for-sale\/\">\n          See all developments\n          <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M4 12h15m0 0-6-6m6 6-6 6\"><\/path><\/svg>\n        <\/a>\n      <\/div>\n\n      <div>\n        <div class=\"pmk__stage\" id=\"pmk-stage\">\n          <div class=\"pmk__bars\" id=\"pmk-bars\" role=\"group\" aria-label=\"Choose image\"><\/div>\n          <button type=\"button\" class=\"pmk__arrow pmk__arrow--prev\" id=\"pmk-prev\" aria-label=\"Previous image\">\n            <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M15 5l-7 7 7 7\"><\/path><\/svg>\n          <\/button>\n          <button type=\"button\" class=\"pmk__arrow pmk__arrow--next\" id=\"pmk-next\" aria-label=\"Next image\">\n            <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M9 5l7 7-7 7\"><\/path><\/svg>\n          <\/button>\n        <\/div>\n\n        <div class=\"pmk__card\" id=\"pmk-card\" role=\"tabpanel\" tabindex=\"0\">\n          <img decoding=\"async\" class=\"pmk__logo\" id=\"pmk-logo\" src=\"\" alt=\"\" aria-hidden=\"true\">\n          <h3 class=\"pmk__name\" id=\"pmk-name\"><\/h3>\n          <p class=\"pmk__loc\" id=\"pmk-loc\"><\/p>\n          <div class=\"pmk__meta\" id=\"pmk-meta\"><\/div>\n          <a class=\"pmk__cta\" id=\"pmk-cta\" href=\"#\">\n            Visit project\n            <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M4 12h15m0 0-6-6m6 6-6 6\"><\/path><\/svg>\n          <\/a>\n          <p class=\"pmk__note\">Parking space and storage room included. Taxes not included.<\/p>\n        <\/div>\n\n        <p class=\"pmk__desc\" id=\"pmk-desc\"><\/p>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<script>\n(function () {\n  var UP = 'https:\/\/www.portamediterranea.com\/wp-content\/uploads\/';\n  var SITE = 'https:\/\/www.portamediterranea.com\/en\/new-homes-for-sale\/';\n\n  var DATA = [\n    {\n      name: 'The Edge Residential',\n      title: 'THE EDGE RESIDENTIAL',\n      loc: 'Punta del Cargador \u2013 Playa Romana',\n      meta: ['2 and 3 bedrooms', '29 homes'],\n      price: 'From \u20ac415,000',\n      href: SITE + 'urbanizacion-the-edge\/',\n      logo: UP + '2021\/06\/logo-the-edge.png',\n      desc: 'A spectacular residential complex in a prime location in Alcossebre, between two of the area\u2019s best beaches, where the pool merges with the sea in a single harmonious line. With just 29 exclusive homes, its design follows today\u2019s cutting-edge models and sustainable architecture in every detail, and it is highly rated by our clients \u2014 something we are proud to talk about wherever we go.',\n      imgs: [\n        UP + '2024\/02\/slider-the-edge-noctura.webp',\n        UP + '2021\/08\/slider-residencial-the-edge.jpg',\n        UP + '2021\/06\/The-Edge1.jpg'\n      ]\n    },\n    {\n      name: 'Porta d\u2019Irta Development',\n      title: 'PORTA D\u2019IRTA DEVELOPMENT',\n      loc: 'Playas de Ribamar \u2013 Cala Blanca',\n      meta: ['2 and 3 bedrooms', '36 homes'],\n      price: 'From \u20ac319,800',\n      href: SITE + 'urbanizacion-porta-dirta\/',\n      logo: UP + '2023\/12\/logo-porta-d-irta-mediterranea.png',\n      desc: 'A development designed for enjoying outdoor life. At the foot of a mountain range that is a protected Natural Park and next to the Mediterranean Sea, with beautiful coves that let you choose between lively beaches and the peace of these unspoilt spots. 2- and 3-bedroom homes, with penthouses that enjoy spectacular views and ground-floor homes whose private space flows into the large communal areas with gardens, swimming pool and padel court.',\n      imgs: [\n        UP + '2024\/02\/porta-dirta-slider-1.webp',\n        UP + '2023\/11\/porta-mediterranea-dirta-003.jpg',\n        UP + '2023\/11\/porta-mediterranea-dirta-008.jpg'\n      ]\n    }\n  ];\n\n  var PHOTO_MS = 5000;\n\n  function pad(n) {\n    if (n > 9) { return String(n); }\n    return '0' + n;\n  }\n\n  function init() {\n    var root = document.getElementById('pmk-root');\n    if (!root) { return; }\n    if (root.getAttribute('data-ready') === '1') { return; }\n    root.setAttribute('data-ready', '1');\n    root.style.setProperty('--pmk-dur', PHOTO_MS + 'ms');\n\n    var index = document.getElementById('pmk-index');\n    var stage = document.getElementById('pmk-stage');\n    var barsBox = document.getElementById('pmk-bars');\n    var card = document.getElementById('pmk-card');\n    var elLogo = document.getElementById('pmk-logo');\n    var elName = document.getElementById('pmk-name');\n    var elLoc = document.getElementById('pmk-loc');\n    var elMeta = document.getElementById('pmk-meta');\n    var elCta = document.getElementById('pmk-cta');\n    var elDesc = document.getElementById('pmk-desc');\n    var btnPrev = document.getElementById('pmk-prev');\n    var btnNext = document.getElementById('pmk-next');\n\n    var reduce = false;\n    if (window.matchMedia) {\n      reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n    }\n\n    DATA.forEach(function (p) {\n      p.imgs.forEach(function (src) {\n        var pre = new Image();\n        pre.src = src;\n      });\n      var pl = new Image();\n      pl.src = p.logo;\n    });\n\n    var tabs = [];\n    var layers = [];\n    var bars = [];\n    var current = -1;\n    var photo = 0;\n    var timer = null;\n    var inView = true;\n    var hovering = false;\n\n    function stopTimer() {\n      if (timer) { clearInterval(timer); timer = null; }\n      stage.classList.add('is-paused');\n    }\n\n    function startTimer() {\n      if (timer) { clearInterval(timer); timer = null; }\n      if (reduce) { return; }\n      if (!inView) { return; }\n      if (hovering) { return; }\n      if (document.hidden) { return; }\n      if (layers.length === 1) { return; }\n      stage.classList.remove('is-paused');\n      timer = setInterval(nextPhoto, PHOTO_MS);\n    }\n\n    function paintPhoto(k) {\n      layers.forEach(function (L, j) {\n        if (j === k) { L.classList.add('is-on'); } else { L.classList.remove('is-on'); }\n      });\n      bars.forEach(function (b, j) {\n        b.classList.remove('is-done');\n        b.classList.remove('is-live');\n        b.setAttribute('aria-current', j === k ? 'true' : 'false');\n        if (k > j) { b.classList.add('is-done'); }\n      });\n      var live = bars[k];\n      if (live) {\n        var fill = live.firstChild;\n        if (fill) {\n          fill.style.animation = 'none';\n          void fill.offsetWidth;\n          fill.style.animation = '';\n        }\n        live.classList.add('is-live');\n      }\n      photo = k;\n    }\n\n    function nextPhoto() { paintPhoto((photo + 1) % layers.length); }\n    function prevPhoto() { paintPhoto((photo - 1 + layers.length) % layers.length); }\n\n    function buildStage(p) {\n      layers.forEach(function (L) {\n        if (L.parentNode) { L.parentNode.removeChild(L); }\n      });\n      layers = [];\n      while (barsBox.firstChild) { barsBox.removeChild(barsBox.firstChild); }\n      bars = [];\n\n      p.imgs.forEach(function (src, j) {\n        var L = document.createElement('div');\n        L.className = 'pmk__img';\n        L.style.backgroundImage = 'url(\"' + src + '\")';\n        stage.insertBefore(L, barsBox);\n        layers.push(L);\n\n        var b = document.createElement('button');\n        b.type = 'button';\n        b.className = 'pmk__bar';\n        b.setAttribute('aria-label', 'Image ' + (j + 1));\n        var fill = document.createElement('span');\n        fill.className = 'pmk__fill';\n        b.appendChild(fill);\n        b.addEventListener('click', function () {\n          paintPhoto(j);\n          startTimer();\n        });\n        barsBox.appendChild(b);\n        bars.push(b);\n      });\n\n      if (p.imgs.length === 1) { barsBox.style.display = 'none'; }\n      else { barsBox.style.display = ''; }\n\n      photo = 0;\n      paintPhoto(0);\n    }\n\n    function fillInfo(p) {\n      elLogo.src = p.logo;\n      elLogo.alt = p.name;\n      elName.textContent = p.title;\n      elLoc.textContent = p.loc;\n      elDesc.textContent = p.desc;\n      elCta.href = p.href;\n\n      while (elMeta.firstChild) { elMeta.removeChild(elMeta.firstChild); }\n      p.meta.forEach(function (m) {\n        var sp = document.createElement('span');\n        sp.textContent = m;\n        elMeta.appendChild(sp);\n      });\n      if (p.price) {\n        var pr = document.createElement('span');\n        pr.className = 'is-price';\n        pr.textContent = p.price;\n        elMeta.appendChild(pr);\n      }\n    }\n\n    function ensureVisible(b) {\n      var box = index.getBoundingClientRect();\n      var r = b.getBoundingClientRect();\n      if (box.left > r.left) {\n        index.scrollLeft = index.scrollLeft - (box.left - r.left) - 16;\n      }\n      if (r.right > box.right) {\n        index.scrollLeft = index.scrollLeft + (r.right - box.right) + 16;\n      }\n    }\n\n    function select(idx, focusTab) {\n      if (idx === current) { return; }\n      current = idx;\n\n      tabs.forEach(function (b, j) {\n        var on = (j === idx);\n        b.setAttribute('aria-selected', on ? 'true' : 'false');\n        b.setAttribute('tabindex', on ? '0' : '-1');\n      });\n\n      var p = DATA[idx];\n      card.classList.add('is-out');\n      elDesc.classList.add('is-out');\n      buildStage(p);\n      startTimer();\n\n      setTimeout(function () {\n        fillInfo(p);\n        card.classList.remove('is-out');\n        elDesc.classList.remove('is-out');\n      }, reduce ? 0 : 300);\n\n      ensureVisible(tabs[idx]);\n      if (focusTab) { tabs[idx].focus(); }\n    }\n\n    DATA.forEach(function (p, idx) {\n      var b = document.createElement('button');\n      b.type = 'button';\n      b.className = 'pmk__item';\n      b.setAttribute('role', 'tab');\n      b.setAttribute('aria-selected', 'false');\n      b.setAttribute('tabindex', '-1');\n      b.setAttribute('aria-controls', 'pmk-card');\n\n      var num = document.createElement('span');\n      num.className = 'pmk__num';\n      num.textContent = pad(idx + 1);\n\n      var txt = document.createElement('span');\n      var nm = document.createElement('span');\n      nm.className = 'pmk__itemname';\n      nm.textContent = p.name;\n      var lc = document.createElement('span');\n      lc.className = 'pmk__itemloc';\n      lc.textContent = p.loc;\n      txt.appendChild(nm);\n      txt.appendChild(lc);\n\n      b.appendChild(num);\n      b.appendChild(txt);\n      b.addEventListener('click', function () { select(idx, false); });\n      index.appendChild(b);\n      tabs.push(b);\n    });\n\n    index.addEventListener('keydown', function (e) {\n      var last = DATA.length - 1;\n      if (e.key === 'ArrowDown') { e.preventDefault(); select(current === last ? 0 : current + 1, true); }\n      if (e.key === 'ArrowRight') { e.preventDefault(); select(current === last ? 0 : current + 1, true); }\n      if (e.key === 'ArrowUp') { e.preventDefault(); select(current === 0 ? last : current - 1, true); }\n      if (e.key === 'ArrowLeft') { e.preventDefault(); select(current === 0 ? last : current - 1, true); }\n      if (e.key === 'Home') { e.preventDefault(); select(0, true); }\n      if (e.key === 'End') { e.preventDefault(); select(last, true); }\n    });\n\n    btnPrev.addEventListener('click', function () { prevPhoto(); startTimer(); });\n    btnNext.addEventListener('click', function () { nextPhoto(); startTimer(); });\n\n    stage.addEventListener('mouseenter', function () { hovering = true; stopTimer(); });\n    stage.addEventListener('mouseleave', function () { hovering = false; startTimer(); });\n\n    var touchX = 0;\n    stage.addEventListener('touchstart', function (e) {\n      if (e.touches.length === 1) { touchX = e.touches[0].clientX; }\n    }, { passive: true });\n\n    stage.addEventListener('touchend', function (e) {\n      if (!e.changedTouches.length) { return; }\n      var dx = e.changedTouches[0].clientX - touchX;\n      if (Math.abs(dx) > 45) {\n        if (dx > 0) { prevPhoto(); } else { nextPhoto(); }\n        startTimer();\n      }\n    }, { passive: true });\n\n    document.addEventListener('visibilitychange', function () {\n      if (document.hidden) { stopTimer(); } else { startTimer(); }\n    });\n\n    if (window.IntersectionObserver) {\n      new IntersectionObserver(function (entries) {\n        entries.forEach(function (en) {\n          inView = en.isIntersecting;\n          if (inView) { startTimer(); } else { stopTimer(); }\n        });\n      }, { threshold: 0.2 }).observe(root);\n    }\n\n    select(0, false);\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n<\/script>\n\n\n\n\n\n<style>\n.pmq {\n  --pmq-max: 1714px;\n  --pmq-gut: max(16px, calc((100vw - 1714px) \/ 2 + 16px));\n  --pmq-paper: #f7f9fa;\n  --pmq-ink: #14262b;\n  --pmq-mute: #5c6b70;\n  --pmq-dim: #8b979b;\n  --pmq-hair: rgba(20, 38, 43, .14);\n  --pmq-accent: #0ec2ff;\n  --pmq-open: #24d07f;\n  --pmq-shut: #ff9d7a;\n  position: relative;\n  width: 100%;\n  background-color: var(--pmq-paper);\n  color: var(--pmq-ink);\n}\n\n.pmq *,\n.pmq *::before,\n.pmq *::after { box-sizing: border-box; }\n\n.pmq__grid {\n  display: grid;\n  grid-template-columns: minmax(0, 45fr) minmax(0, 55fr);\n  align-items: stretch;\n}\n\n\/* ---------- mitad imagen ---------- *\/\n\n.pmq__visual {\n  position: relative;\n  isolation: isolate;\n  overflow: hidden;\n  min-height: 560px;\n  background-color: #0d2b33;\n}\n\n.pmq__photo {\n  position: absolute;\n  inset: 0;\n  z-index: -2;\n  background-image: url(\"https:\/\/www.portamediterranea.com\/wp-content\/uploads\/2022\/07\/oficina-ventas-porta-mediterranea.jpeg\");\n  background-size: cover;\n  background-position: center;\n  transform: scale(1.04);\n  transition: transform 1200ms cubic-bezier(.2, .7, .3, 1), opacity 500ms ease;\n}\n\n.pmq.is-in .pmq__photo { transform: scale(1); }\n\n.pmq__visual::after {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  z-index: -1;\n  background:\n    linear-gradient(to top, rgba(6, 24, 29, .92) 0%, rgba(6, 24, 29, .68) 34%, rgba(6, 24, 29, .16) 68%, rgba(6, 24, 29, .05) 100%);\n  pointer-events: none;\n  transition: opacity 400ms ease;\n}\n\n.pmq__frame {\n  position: absolute;\n  inset: 0;\n  z-index: 1;\n  width: 100%;\n  height: 100%;\n  border: 0;\n  opacity: 0;\n  pointer-events: none;\n  transition: opacity 450ms ease;\n}\n\n.pmq__visual.is-map .pmq__frame { opacity: 1; pointer-events: auto; }\n.pmq__visual.is-map .pmq__photo { opacity: 0; }\n.pmq__visual.is-map::after { opacity: 0; }\n.pmq__visual.is-map .pmq__over { opacity: 0; pointer-events: none; }\n\n.pmq__switch {\n  position: absolute;\n  z-index: 3;\n  top: 26px;\n  right: 26px;\n  display: flex;\n  gap: 3px;\n  padding: 3px;\n  border-radius: 100px;\n  border: 1px solid rgba(255, 255, 255, .3);\n  background-color: rgba(10, 30, 36, .4);\n  backdrop-filter: blur(8px);\n}\n\n.pmq__tab {\n  padding: 7px 15px;\n  border: 0;\n  border-radius: 100px;\n  background-color: transparent;\n  font: inherit;\n  font-size: 10px;\n  font-weight: 700;\n  letter-spacing: .16em;\n  text-transform: uppercase;\n  color: rgba(255, 255, 255, .72);\n  cursor: pointer;\n  transition: background-color 260ms ease, color 260ms ease;\n}\n\n.pmq__tab[aria-pressed=\"true\"] { background-color: #ffffff; color: #0d2b33; }\n.pmq__tab:focus-visible { outline: 2px solid #ffffff; outline-offset: 2px; }\n\n.pmq__over {\n  position: absolute;\n  z-index: 2;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  padding: 0 40px 46px var(--pmq-gut);\n  color: #ffffff;\n  transition: opacity 400ms ease;\n}\n\n.pmq__badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  margin-bottom: 16px;\n  padding: 6px 14px 6px 11px;\n  border-radius: 100px;\n  border: 1px solid rgba(255, 255, 255, .28);\n  background-color: rgba(255, 255, 255, .1);\n  backdrop-filter: blur(6px);\n  font-size: 10px;\n  font-weight: 700;\n  letter-spacing: .16em;\n  text-transform: uppercase;\n  color: #ffffff;\n}\n\n.pmq__dot {\n  width: 7px;\n  height: 7px;\n  border-radius: 50%;\n  background-color: #ffffff;\n  flex: 0 0 auto;\n}\n\n.pmq__badge.is-open .pmq__dot {\n  background-color: var(--pmq-open);\n  box-shadow: 0 0 0 3px rgba(36, 208, 127, .28);\n}\n\n.pmq__badge.is-shut .pmq__dot {\n  background-color: var(--pmq-shut);\n  box-shadow: 0 0 0 3px rgba(255, 157, 122, .24);\n}\n\n.pmq__vtitle {\n  margin: 0;\n  font-size: clamp(26px, 2.4vw, 38px);\n  font-weight: 300;\n  line-height: 1.05;\n  letter-spacing: -.02em;\n  text-transform: none;\n  color: #ffffff;\n}\n\n.pmq__vtitle strong { font-weight: 600; }\n\n.pmq__addr {\n  margin: 18px 0 0;\n  padding-left: 14px;\n  border-left: 2px solid var(--pmq-accent);\n  font-size: 16px;\n  font-weight: 500;\n  line-height: 1.45;\n  text-transform: none;\n  color: #ffffff;\n}\n\n.pmq__addr span {\n  display: block;\n  margin-top: 3px;\n  font-size: 13px;\n  font-weight: 400;\n  color: rgba(255, 255, 255, .75);\n}\n\n.pmq__acts {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  margin-top: 24px;\n}\n\n.pmq__go,\n.pmq__ring {\n  display: inline-flex;\n  align-items: center;\n  gap: 10px;\n  padding: 13px 22px;\n  border-radius: 3px;\n  font-size: 11px;\n  font-weight: 700;\n  letter-spacing: .14em;\n  text-transform: uppercase;\n  text-decoration: none;\n  transition: background-color 300ms ease, border-color 300ms ease, color 300ms ease, gap 300ms ease, box-shadow 300ms ease;\n}\n\n.pmq__go {\n  border: 1px solid #ffffff;\n  background-color: #ffffff;\n  color: #0d2b33;\n}\n\n.pmq__go:hover,\n.pmq__go:focus-visible {\n  gap: 15px;\n  border-color: var(--pmq-accent);\n  background-color: var(--pmq-accent);\n  color: #06181d;\n  box-shadow: 0 16px 34px -16px rgba(14, 194, 255, .7);\n}\n\n.pmq__ring {\n  border: 1px solid rgba(255, 255, 255, .45);\n  background-color: rgba(255, 255, 255, .08);\n  backdrop-filter: blur(4px);\n  color: #ffffff;\n}\n\n.pmq__ring:hover,\n.pmq__ring:focus-visible { gap: 15px; border-color: #ffffff; background-color: rgba(255, 255, 255, .18); }\n\n.pmq__go svg,\n.pmq__ring svg,\n.pmq__cta svg {\n  width: 15px;\n  height: 15px;\n  fill: none;\n  stroke: currentColor;\n  stroke-width: 1.8;\n  stroke-linecap: round;\n  stroke-linejoin: round;\n}\n\n\/* ---------- mitad papel ---------- *\/\n\n.pmq__paper {\n  display: flex;\n  align-items: center;\n  background-color: var(--pmq-paper);\n}\n\n.pmq__inner {\n  width: 100%;\n  padding: 58px var(--pmq-gut) 58px 64px;\n}\n\n.pmq__rule {\n  width: 40px;\n  height: 2px;\n  margin-bottom: 16px;\n  background-color: var(--pmq-accent);\n}\n\n.pmq__eyebrow {\n  margin: 0 0 10px;\n  font-size: 11px;\n  font-weight: 600;\n  letter-spacing: .24em;\n  text-transform: uppercase;\n  color: var(--pmq-dim);\n}\n\n.pmq__title {\n  margin: 0 0 22px;\n  font-size: clamp(28px, 3.1vw, 46px);\n  font-weight: 300;\n  line-height: 1.04;\n  letter-spacing: -.02em;\n  text-transform: none;\n  color: var(--pmq-ink);\n}\n\n.pmq__title strong {\n  display: block;\n  font-weight: 600;\n}\n\n.pmq__cols {\n  display: grid;\n  grid-template-columns: repeat(2, minmax(0, 1fr));\n  column-gap: 36px;\n}\n\n.pmq__lead {\n  margin: 0;\n  font-size: 14.5px;\n  line-height: 1.7;\n  text-transform: none;\n  color: var(--pmq-mute);\n}\n\n.pmq__stats {\n  display: flex;\n  gap: 44px;\n  margin-top: 26px;\n  padding-top: 20px;\n  border-top: 1px solid var(--pmq-hair);\n}\n\n.pmq__stat {\n  opacity: 0;\n  transform: translateY(12px);\n  transition: opacity 560ms ease, transform 560ms cubic-bezier(.2, .7, .3, 1);\n}\n\n.pmq.is-in .pmq__stat { opacity: 1; transform: none; }\n.pmq.is-in .pmq__stat:nth-child(1) { transition-delay: 120ms; }\n.pmq.is-in .pmq__stat:nth-child(2) { transition-delay: 210ms; }\n.pmq.is-in .pmq__stat:nth-child(3) { transition-delay: 300ms; }\n\n.pmq__num {\n  display: block;\n  font-size: clamp(30px, 2.6vw, 44px);\n  font-weight: 300;\n  line-height: 1;\n  letter-spacing: -.035em;\n  text-transform: none;\n  color: var(--pmq-ink);\n  font-variant-numeric: tabular-nums;\n}\n\n.pmq__label {\n  display: block;\n  margin-top: 8px;\n  font-size: 10px;\n  font-weight: 600;\n  letter-spacing: .16em;\n  text-transform: uppercase;\n  color: var(--pmq-dim);\n}\n\n.pmq__values {\n  list-style: none;\n  display: grid;\n  row-gap: 10px;\n  margin: 22px 0 0;\n  padding: 20px 0 0!important;\n  border-top: 1px solid var(--pmq-hair);\n}\n\n.pmq__values li {\n  display: grid;\n  grid-template-columns: 19px minmax(0, 1fr);\n  column-gap: 12px;\n  align-items: start;\n  font-size: 13.5px;\n  line-height: 1.55;\n  text-transform: none;\n  color: var(--pmq-mute);\n  opacity: 0;\n  transform: translateY(10px);\n  transition: opacity 520ms ease, transform 520ms cubic-bezier(.2, .7, .3, 1);\n}\n\n.pmq.is-in .pmq__values li { opacity: 1; transform: none; }\n.pmq.is-in .pmq__values li:nth-child(1) { transition-delay: 340ms; }\n.pmq.is-in .pmq__values li:nth-child(2) { transition-delay: 410ms; }\n.pmq.is-in .pmq__values li:nth-child(3) { transition-delay: 480ms; }\n\n.pmq__values li::before { content: none; }\n\n.pmq__values svg {\n  width: 17px;\n  height: 17px;\n  margin-top: 2px;\n  fill: none;\n  stroke: var(--pmq-accent);\n  stroke-width: 2;\n  stroke-linecap: round;\n  stroke-linejoin: round;\n}\n\n.pmq__values b {\n  font-weight: 600;\n  color: var(--pmq-ink);\n}\n\n.pmq__values em { font-style: normal; }\n\n.pmq__cta {\n  display: inline-flex;\n  align-items: center;\n  gap: 10px;\n  margin-top: 24px;\n  padding: 13px 26px;\n  border: 1px solid var(--pmq-ink);\n  border-radius: 3px;\n  background-color: transparent;\n  font-size: 11px;\n  font-weight: 700;\n  letter-spacing: .14em;\n  text-transform: uppercase;\n  text-decoration: none;\n  color: var(--pmq-ink);\n  transition: background-color 300ms ease, border-color 300ms ease, color 300ms ease, gap 300ms ease, box-shadow 300ms ease;\n}\n\n.pmq__cta:hover,\n.pmq__cta:focus-visible {\n  gap: 15px;\n  border-color: var(--pmq-accent);\n  background-color: var(--pmq-accent);\n  color: #06181d;\n  box-shadow: 0 14px 30px -14px rgba(14, 194, 255, .55);\n}\n\n\/* ---------- responsive ---------- *\/\n\n@media (max-width: 1280px) {\n  .pmq__grid { grid-template-columns: minmax(0, 42fr) minmax(0, 58fr); }\n  .pmq__inner { padding-left: 48px; }\n  .pmq__cols { grid-template-columns: minmax(0, 1fr); row-gap: 12px; }\n  .pmq__stats { gap: 32px; }\n}\n\n@media (max-width: 900px) {\n  .pmq__grid { grid-template-columns: minmax(0, 1fr); }\n\n  .pmq__over { padding: 0 20px 28px; }\n  .pmq__switch { top: 18px; right: 18px; }\n  .pmq__addr { font-size: 15px; }\n  .pmq__acts { margin-top: 20px; }\n  .pmq__go, .pmq__ring { flex: 1 1 auto; justify-content: center; }\n\n  .pmq__inner { padding: 44px 20px 48px; }\n  .pmq__stats { gap: 0; justify-content: space-between; }\n  .pmq__label { font-size: 9px; letter-spacing: .1em; }\n  .pmq__values em { display: none; }\n  .pmq__values li { font-size: 14px; }\n  .pmq__cta { width: 100%; justify-content: center; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .pmq__photo,\n  .pmq__stat,\n  .pmq__values li { transition: none; transform: none; opacity: 1; }\n}\n\/* Bloque de la oficina: tarjeta redondeada con m\u00e1rgenes (publicado el 10\/11\/2026, opci\u00f3n B). Para volver al dise\u00f1o anterior, borrar este tramo. *\/\n.pmq { --pmq-gut: 44px; background-color: #f4f7f8; padding: clamp(40px, 5vw, 80px) 16px; }\n.pmq .pmq__grid { max-width: calc(var(--pmq-max) - 32px); margin: 0 auto; border-radius: 28px; overflow: hidden; box-shadow: 0 30px 60px -30px rgba(15, 45, 55, .45); }\n.pmq .pmq__paper { background-color: #fff; }\n.pmq .pmq__inner { padding: 58px 56px; }\n@media (max-width: 900px) {\n  .pmq .pmq__inner { padding: 44px 24px 48px; }\n  .pmq .pmq__over { padding-left: 24px; }\n}\n<\/style>\n\n<section class=\"pmq\" id=\"pmq-root\" aria-label=\"Porta Mediterr\u00e1nea Homes\">\n  <div class=\"pmq__grid\">\n\n    <div class=\"pmq__visual\" id=\"pmq-visual\">\n      <div class=\"pmq__photo\"><\/div>\n\n      <div class=\"pmq__switch\" role=\"group\" aria-label=\"Show office or map\">\n        <button type=\"button\" class=\"pmq__tab\" id=\"pmq-tab-foto\" aria-pressed=\"true\">Office<\/button>\n        <button type=\"button\" class=\"pmq__tab\" id=\"pmq-tab-mapa\" aria-pressed=\"false\">Map<\/button>\n      <\/div>\n\n      <div class=\"pmq__over\" id=\"pmq-over\">\n        <span class=\"pmq__badge\" id=\"pmq-badge\">\n          <span class=\"pmq__dot\"><\/span>\n          <span id=\"pmq-badgetext\">Sales office<\/span>\n        <\/span>\n\n        <h3 class=\"pmq__vtitle\">Come and <strong>visit us<\/strong><\/h3>\n\n        <p class=\"pmq__addr\">\n          Calle San Benito, 1 \u2013 Plaza Constituci\u00f3n\n          <span>Alcossebre, Castell\u00f3n \u00b7 Monday to Saturday, 9:00\u201314:00<\/span>\n        <\/p>\n\n        <div class=\"pmq__acts\">\n          <a class=\"pmq__go\" id=\"pmq-dir\" href=\"https:\/\/www.google.com\/maps\" target=\"_blank\" rel=\"noopener\">\n            Get directions\n            <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M4 12h15m0 0-6-6m6 6-6 6\"><\/path><\/svg>\n          <\/a>\n          <a class=\"pmq__ring\" href=\"tel:+34964090154\">\n            <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M6.5 4h3l1.6 4-2 1.4a11.5 11.5 0 005.5 5.5l1.4-2 4 1.6v3a2 2 0 01-2.2 2A16.5 16.5 0 014.5 6.2 2 2 0 016.5 4z\"><\/path><\/svg>\n            964 09 01 54\n          <\/a>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"pmq__paper\">\n      <div class=\"pmq__inner\">\n        <div class=\"pmq__rule\"><\/div>\n        <p class=\"pmq__eyebrow\">New-build real estate developments<\/p>\n        <h2 class=\"pmq__title\">Porta <strong>Mediterr\u00e1nea Homes<\/strong><\/h2>\n\n        <div class=\"pmq__cols\">\n          <p class=\"pmq__lead\">Porta Mediterr\u00e1nea Homes is dedicated to land development and to promoting urban and building projects on the Mediterranean coast. Its main activity currently focuses on urban and residential development in several areas of Alcossebre, on the Costa del Azahar.<\/p>\n          <p class=\"pmq__lead\">At Porta Mediterr\u00e1nea Homes we are involved in every phase of the real estate cycle, offering a comprehensive service built on total commitment to each project. We take care of every detail, from the very first idea until the project becomes a reality.<\/p>\n        <\/div>\n\n        <div class=\"pmq__stats\">\n          <div class=\"pmq__stat\">\n            <span class=\"pmq__num\" data-pmq-to=\"7\">0<\/span>\n            <span class=\"pmq__label\">Projects delivered<\/span>\n          <\/div>\n          <div class=\"pmq__stat\">\n            <span class=\"pmq__num\" data-pmq-to=\"6\">0<\/span>\n            <span class=\"pmq__label\">In development<\/span>\n          <\/div>\n          <div class=\"pmq__stat\">\n            <span class=\"pmq__num\" data-pmq-to=\"155\">0<\/span>\n            <span class=\"pmq__label\">Homes<\/span>\n          <\/div>\n        <\/div>\n\n        <ul class=\"pmq__values\">\n          <li>\n            <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M4.5 12.5l5 5 10-11\"><\/path><\/svg>\n            <span><b>Occupational health and safety<\/b> <em>with ongoing updates to the occupational risk-prevention measures appropriate to each job.<\/em><\/span>\n          <\/li>\n          <li>\n            <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M4.5 12.5l5 5 10-11\"><\/path><\/svg>\n            <span><b>Talent management and professional development<\/b> <em>in a workplace with equal opportunities and respect for diversity.<\/em><\/span>\n          <\/li>\n          <li>\n            <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M4.5 12.5l5 5 10-11\"><\/path><\/svg>\n            <span><b>Environmental protection<\/b> <em>through orderly urban planning.<\/em><\/span>\n          <\/li>\n        <\/ul>\n\n        <a class=\"pmq__cta\" href=\"https:\/\/www.portamediterranea.com\/en\/who-we-are\/\">\n          About us\n          <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M4 12h15m0 0-6-6m6 6-6 6\"><\/path><\/svg>\n        <\/a>\n      <\/div>\n    <\/div>\n\n  <\/div>\n<\/section>\n\n<script>\n(function () {\n  var AMP = String.fromCharCode(38);\n  var PLACE = 'Calle San Benito 1, 12579 Alcossebre, Castell\u00f3n';\n\n  function init() {\n    var root = document.getElementById('pmq-root');\n    if (!root) { return; }\n    if (root.getAttribute('data-ready') === '1') { return; }\n    root.setAttribute('data-ready', '1');\n\n    var visual = document.getElementById('pmq-visual');\n    var tabFoto = document.getElementById('pmq-tab-foto');\n    var tabMapa = document.getElementById('pmq-tab-mapa');\n    var dir = document.getElementById('pmq-dir');\n    var badge = document.getElementById('pmq-badge');\n    var badgeText = document.getElementById('pmq-badgetext');\n    var nums = root.querySelectorAll('[data-pmq-to]');\n\n    var q = encodeURIComponent(PLACE);\n    dir.href = 'https:\/\/www.google.com\/maps\/dir\/?api=1' + AMP + 'destination=' + q;\n\n    var frame = null;\n\n    tabMapa.addEventListener('click', function () {\n      if (!frame) {\n        frame = document.createElement('iframe');\n        frame.className = 'pmq__frame';\n        frame.setAttribute('loading', 'lazy');\n        frame.setAttribute('title', 'Map of the sales office');\n        frame.setAttribute('referrerpolicy', 'no-referrer-when-downgrade');\n        frame.src = 'https:\/\/maps.google.com\/maps?q=' + q + AMP + 'z=16' + AMP + 'output=embed';\n        visual.appendChild(frame);\n      }\n      visual.classList.add('is-map');\n      tabMapa.setAttribute('aria-pressed', 'true');\n      tabFoto.setAttribute('aria-pressed', 'false');\n    });\n\n    tabFoto.addEventListener('click', function () {\n      visual.classList.remove('is-map');\n      tabMapa.setAttribute('aria-pressed', 'false');\n      tabFoto.setAttribute('aria-pressed', 'true');\n    });\n\n    function stamp() {\n      try {\n        var f = new Intl.DateTimeFormat('en-GB', {\n          timeZone: 'Europe\/Madrid',\n          weekday: 'short',\n          hour: '2-digit',\n          minute: '2-digit',\n          hour12: false\n        });\n        var o = { day: '', h: 0, m: 0 };\n        f.formatToParts(new Date()).forEach(function (p) {\n          if (p.type === 'weekday') { o.day = p.value; }\n          if (p.type === 'hour') { o.h = parseInt(p.value, 10); }\n          if (p.type === 'minute') { o.m = parseInt(p.value, 10); }\n        });\n        return o;\n      } catch (e) {\n        return null;\n      }\n    }\n\n    function paintBadge() {\n      var t = stamp();\n      if (!t) { return; }\n\n      var mins = t.h * 60 + t.m;\n      var open = false;\n      var msg = '';\n\n      if (t.day === 'Sun') {\n        msg = 'Closed \u00b7 we open Monday at 9:00';\n      } else {\n        if (mins >= 540) {\n          if (840 > mins) { open = true; msg = 'Open now \u00b7 until 14:00'; }\n        }\n        if (!open) {\n          if (mins >= 1080) {\n            if (0 > mins) { open = true; msg = 'Open now \u00b7 until 22:00'; }\n          }\n        }\n        if (!open) {\n          if (540 > mins) { msg = 'Closed \u00b7 we open today at 9:00'; }\n          else if (0 > mins) { msg = 'Closed \u00b7 we open today at 18:00'; }\n          else if (t.day === 'Sat') { msg = 'Closed \u00b7 we open Monday at 9:00'; }\n          else { msg = 'Closed \u00b7 we open tomorrow at 9:00'; }\n        }\n      }\n\n      badgeText.textContent = msg;\n      badge.classList.remove('is-open');\n      badge.classList.remove('is-shut');\n      badge.classList.add(open ? 'is-open' : 'is-shut');\n    }\n\n    paintBadge();\n    setInterval(paintBadge, 60000);\n\n    var reduce = false;\n    if (window.matchMedia) {\n      reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n    }\n\n    var counted = false;\n\n    function countUp() {\n      if (counted) { return; }\n      counted = true;\n      Array.prototype.forEach.call(nums, function (el) {\n        var target = parseInt(el.getAttribute('data-pmq-to'), 10) || 0;\n        if (reduce) { el.textContent = String(target); return; }\n        var dur = 1400;\n        var t0 = 0;\n        function step(now) {\n          if (!t0) { t0 = now; }\n          var k = (now - t0) \/ dur;\n          if (k > 1) { k = 1; }\n          var eased = 1 - Math.pow(1 - k, 3);\n          el.textContent = String(Math.round(target * eased));\n          if (k === 1) { return; }\n          requestAnimationFrame(step);\n        }\n        requestAnimationFrame(step);\n      });\n    }\n\n    if (window.IntersectionObserver) {\n      new IntersectionObserver(function (entries, obs) {\n        entries.forEach(function (en) {\n          if (en.isIntersecting) {\n            root.classList.add('is-in');\n            countUp();\n            obs.disconnect();\n          }\n        });\n      }, { threshold: 0.18 }).observe(root);\n    } else {\n      root.classList.add('is-in');\n      countUp();\n    }\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n<\/script>\n\n\n\n<style>\n.pmx {\n  --pmx-max: 1714px;\n  --pmx-pad: 16px;\n  --pmx-pad-v: 96px;\n  --pmx-ink: #1a1a1a;\n  --pmx-mute: #6b6b6b;\n  --pmx-soft: #ededed;\n  --pmx-line: #e0e0e0;\n  --pmx-bg: #fafafa;\n  --pmx-accent: #0ec2ff;\n  --pmx-dur: 5000ms;\n  --pmx-fade: 1000ms;\n  width: 100%;\n  background-color: #ffffff;\n}\n\n.pmx *,\n.pmx *::before,\n.pmx *::after { box-sizing: border-box; }\n\n.pmx__wrap {\n  width: 100%;\n  max-width: var(--pmx-max);\n  margin-left: auto;\n  margin-right: auto;\n  padding: var(--pmx-pad-v) var(--pmx-pad);\n}\n\n.pmx__head { margin-bottom: 48px; }\n\n.pmx__rule {\n  width: 44px;\n  height: 2px;\n  margin-bottom: 20px;\n  background-color: var(--pmx-accent);\n}\n\n.pmx__eyebrow {\n  margin: 0 0 12px;\n  font-size: 11px;\n  font-weight: 600;\n  letter-spacing: .26em;\n  text-transform: uppercase;\n  color: var(--pmx-mute);\n}\n\n.pmx__title {\n  margin: 0;\n  font-size: clamp(26px, 2.4vw, 40px);\n  font-weight: 300;\n  line-height: 1.1;\n  letter-spacing: -.01em;\n  color: var(--pmx-ink);\n}\n\n.pmx__title strong {\n  display: block;\n  font-weight: 600;\n}\n\n.pmx__grid {\n  display: grid;\n  grid-template-columns: 320px minmax(0, 1fr);\n  column-gap: 56px;\n  align-items: start;\n}\n\n.pmx__index {\n  display: flex;\n  flex-direction: column;\n  border-top: 1px solid var(--pmx-soft);\n}\n\n.pmx__item {\n  position: relative;\n  display: grid;\n  grid-template-columns: 34px minmax(0, 1fr);\n  align-items: start;\n  width: 100%;\n  margin: 0;\n  padding: 18px 4px 18px 16px;\n  border: 0;\n  border-bottom: 1px solid var(--pmx-soft);\n  background: none;\n  font: inherit;\n  text-align: left;\n  cursor: pointer;\n}\n\n.pmx__item::before {\n  content: \"\";\n  position: absolute;\n  left: 0;\n  top: 0;\n  bottom: 0;\n  width: 2px;\n  background-color: var(--pmx-accent);\n  transform: scaleY(0);\n  transform-origin: top;\n  transition: transform 380ms cubic-bezier(.2, .7, .3, 1);\n}\n\n.pmx__item[aria-selected=\"true\"]::before { transform: scaleY(1); }\n\n.pmx__num {\n  font-size: 11px;\n  font-weight: 600;\n  letter-spacing: .1em;\n  line-height: 1.9;\n  color: var(--pmx-line);\n  transition: color 300ms ease;\n}\n\n.pmx__item:hover .pmx__num { color: var(--pmx-mute); }\n.pmx__item[aria-selected=\"true\"] .pmx__num { color: var(--pmx-accent); }\n\n.pmx__itemname {\n  display: block;\n  font-size: 16px;\n  font-weight: 500;\n  line-height: 1.3;\n  color: var(--pmx-mute);\n  transition: color 300ms ease, transform 380ms cubic-bezier(.2, .7, .3, 1);\n}\n\n.pmx__item:hover .pmx__itemname { color: var(--pmx-ink); transform: translateX(4px); }\n\n.pmx__item[aria-selected=\"true\"] .pmx__itemname {\n  font-weight: 600;\n  color: var(--pmx-ink);\n  transform: translateX(4px);\n}\n\n.pmx__itemloc {\n  display: block;\n  overflow: hidden;\n  max-height: 0;\n  margin-top: 0;\n  font-size: 12px;\n  font-weight: 400;\n  letter-spacing: .02em;\n  color: var(--pmx-mute);\n  opacity: 0;\n  transform: translateX(4px);\n  transition: max-height 380ms ease, opacity 300ms ease, margin-top 380ms ease;\n}\n\n.pmx__item[aria-selected=\"true\"] .pmx__itemloc {\n  max-height: 32px;\n  margin-top: 5px;\n  opacity: 1;\n}\n\n.pmx__item:focus-visible {\n  outline: 2px solid var(--pmx-accent);\n  outline-offset: 2px;\n}\n\n.pmx__stage {\n  position: relative;\n  isolation: isolate;\n  overflow: hidden;\n  width: 100%;\n  border-radius: 10px;\n  background-color: var(--pmx-soft);\n  aspect-ratio: 16 \/ 9;\n  max-height: 500px;\n  touch-action: pan-y;\n}\n\n.pmx__stage::after {\n  content: \"\";\n  position: absolute;\n  inset: auto 0 0 0;\n  height: 45%;\n  z-index: 1;\n  background: linear-gradient(to top, rgba(6, 24, 29, .45), rgba(6, 24, 29, 0));\n  pointer-events: none;\n}\n\n.pmx__img {\n  position: absolute;\n  inset: 0;\n  background-size: cover;\n  background-position: center;\n  background-repeat: no-repeat;\n  opacity: 0;\n  transition: opacity var(--pmx-fade) ease;\n}\n\n.pmx__img.is-on {\n  opacity: 1;\n  animation: pmxZoom 7000ms linear forwards;\n}\n\n@keyframes pmxZoom {\n  from { transform: scale(1.055); }\n  to   { transform: scale(1); }\n}\n\n.pmx__bars {\n  position: absolute;\n  z-index: 3;\n  top: 18px;\n  right: 18px;\n  display: flex;\n  gap: 6px;\n}\n\n.pmx__bar {\n  width: 28px;\n  height: 3px;\n  padding: 0;\n  border: 0;\n  border-radius: 2px;\n  overflow: hidden;\n  background-color: rgba(255, 255, 255, .35);\n  box-shadow: 0 0 10px rgba(0, 0, 0, .25);\n  cursor: pointer;\n}\n\n.pmx__fill {\n  display: block;\n  width: 100%;\n  height: 100%;\n  background-color: #ffffff;\n  transform: scaleX(0);\n  transform-origin: left;\n}\n\n.pmx__bar.is-done .pmx__fill { transform: scaleX(1); }\n.pmx__bar.is-live .pmx__fill { animation: pmxFill var(--pmx-dur) linear forwards; }\n.pmx__stage.is-paused .pmx__fill { animation-play-state: paused; }\n\n@keyframes pmxFill {\n  from { transform: scaleX(0); }\n  to   { transform: scaleX(1); }\n}\n\n.pmx__arrow {\n  position: absolute;\n  z-index: 3;\n  top: 50%;\n  width: 42px;\n  height: 42px;\n  margin-top: -21px;\n  padding: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border: 1px solid rgba(255, 255, 255, .5);\n  border-radius: 50%;\n  background-color: rgba(255, 255, 255, .14);\n  backdrop-filter: blur(6px);\n  color: #ffffff;\n  cursor: pointer;\n  opacity: 0;\n  transition: opacity 300ms ease, background-color 300ms ease, transform 300ms ease;\n}\n\n.pmx__stage:hover .pmx__arrow { opacity: 1; }\n.pmx__arrow:focus-visible { opacity: 1; outline: 2px solid #ffffff; outline-offset: 2px; }\n.pmx__arrow:hover { background-color: rgba(255, 255, 255, .3); }\n.pmx__arrow--prev { left: 16px; }\n.pmx__arrow--next { right: 16px; }\n.pmx__arrow--prev:hover { transform: translateX(-3px); }\n.pmx__arrow--next:hover { transform: translateX(3px); }\n\n.pmx__arrow svg {\n  width: 18px;\n  height: 18px;\n  fill: none;\n  stroke: currentColor;\n  stroke-width: 1.7;\n  stroke-linecap: round;\n  stroke-linejoin: round;\n}\n\n.pmx__card {\n  position: relative;\n  z-index: 4;\n  max-width: 620px;\n  margin: -76px 0 0 44px;\n  padding: 28px 32px 26px;\n  border-radius: 10px;\n  background-color: #ffffff;\n  box-shadow: 0 26px 54px -26px rgba(0, 0, 0, .3);\n}\n\n.pmx__ghost {\n  position: absolute;\n  top: 14px;\n  right: 22px;\n  margin: 0;\n  font-size: 46px;\n  font-weight: 700;\n  line-height: 1;\n  letter-spacing: -.03em;\n  color: #f2f2f2;\n  pointer-events: none;\n}\n\n.pmx__name {\n  position: relative;\n  margin: 0;\n  font-size: clamp(19px, 1.4vw, 24px);\n  font-weight: 600;\n  line-height: 1.2;\n  letter-spacing: .01em;\n  text-transform: uppercase;\n  color: var(--pmx-ink);\n}\n\n.pmx__loc {\n  position: relative;\n  margin: 8px 0 0;\n  font-size: 14px;\n  letter-spacing: .02em;\n  color: var(--pmx-mute);\n}\n\n.pmx__meta {\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin: 18px 0 0;\n  padding: 0;\n}\n\n.pmx__meta span {\n  padding: 4px 13px;\n  border-radius: 100px;\n  border: 1px solid var(--pmx-line);\n  background-color: var(--pmx-bg);\n  font-size: 12px;\n  letter-spacing: .03em;\n  color: var(--pmx-mute);\n}\n\n.pmx__desc {\n  max-width: 78ch;\n  margin: 30px 0 0 44px;\n  font-size: 15px;\n  line-height: 1.7;\n  color: var(--pmx-mute);\n}\n\n.pmx__card,\n.pmx__desc { transition: opacity 300ms ease, transform 300ms cubic-bezier(.2, .7, .3, 1); }\n.pmx__card.is-out { opacity: 0; transform: translateY(12px); }\n.pmx__desc.is-out { opacity: 0; transform: translateY(12px); }\n\n@media (max-width: 980px) {\n  .pmx { --pmx-pad-v: 48px; }\n\n  .pmx__head { margin-bottom: 28px; }\n\n  .pmx__grid {\n    grid-template-columns: minmax(0, 1fr);\n    row-gap: 22px;\n  }\n\n  .pmx__index {\n    flex-direction: row;\n    border-top: 0;\n    border-bottom: 1px solid var(--pmx-soft);\n    overflow-x: auto;\n    scrollbar-width: none;\n  }\n\n  .pmx__index::-webkit-scrollbar { display: none; }\n\n  .pmx__item {\n    flex: 0 0 auto;\n    width: auto;\n    grid-template-columns: auto auto;\n    column-gap: 8px;\n    align-items: center;\n    padding: 12px 16px 12px 14px;\n    border-bottom: 0;\n    white-space: nowrap;\n  }\n\n  .pmx__item::before {\n    left: 0;\n    right: 0;\n    top: auto;\n    bottom: 0;\n    width: auto;\n    height: 2px;\n    transform: scaleX(0);\n    transform-origin: left;\n  }\n\n  .pmx__item[aria-selected=\"true\"]::before { transform: scaleX(1); }\n\n  .pmx__num { line-height: 1.4; }\n  .pmx__itemname { font-size: 14px; }\n  .pmx__item:hover .pmx__itemname { transform: none; }\n  .pmx__item[aria-selected=\"true\"] .pmx__itemname { transform: none; }\n  .pmx__itemloc { display: none; }\n\n  .pmx__stage { aspect-ratio: 4 \/ 3; border-radius: 8px; }\n  .pmx__arrow { display: none; }\n\n  .pmx__card {\n    max-width: none;\n    margin: -34px 12px 0;\n    padding: 22px 20px;\n    border-radius: 8px;\n  }\n\n  .pmx__ghost { font-size: 34px; top: 12px; right: 16px; }\n  .pmx__desc { margin: 24px 0 0; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .pmx__img,\n  .pmx__card,\n  .pmx__desc,\n  .pmx__itemname,\n  .pmx__itemloc,\n  .pmx__item::before { transition-duration: 1ms; }\n  .pmx__img.is-on { animation: none; }\n  .pmx__bar.is-live .pmx__fill { animation: none; transform: scaleX(1); }\n}\n<\/style>\n\n<section class=\"pmx\" id=\"pmx-root\" aria-label=\"Upcoming new-build developments\">\n  <div class=\"pmx__wrap\">\n    <header class=\"pmx__head\">\n      <div class=\"pmx__rule\"><\/div>\n      <p class=\"pmx__eyebrow\">Projects in development<\/p>\n      <h2 class=\"pmx__title\">Upcoming developments<strong>of new homes in Alcossebre<\/strong><\/h2>\n    <\/header>\n\n    <div class=\"pmx__grid\">\n      <nav class=\"pmx__index\" id=\"pmx-index\" role=\"tablist\" aria-orientation=\"vertical\" aria-label=\"Choose development\"><\/nav>\n\n      <div>\n        <div class=\"pmx__stage\" id=\"pmx-stage\">\n          <div class=\"pmx__bars\" id=\"pmx-bars\" role=\"group\" aria-label=\"Choose image\"><\/div>\n          <button type=\"button\" class=\"pmx__arrow pmx__arrow--prev\" id=\"pmx-prev\" aria-label=\"Previous image\">\n            <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M15 5l-7 7 7 7\"><\/path><\/svg>\n          <\/button>\n          <button type=\"button\" class=\"pmx__arrow pmx__arrow--next\" id=\"pmx-next\" aria-label=\"Next image\">\n            <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M9 5l7 7-7 7\"><\/path><\/svg>\n          <\/button>\n        <\/div>\n\n        <div class=\"pmx__card\" id=\"pmx-card\" role=\"tabpanel\" tabindex=\"0\">\n          <p class=\"pmx__ghost\" id=\"pmx-ghost\" aria-hidden=\"true\">01<\/p>\n          <h3 class=\"pmx__name\" id=\"pmx-name\"><\/h3>\n          <p class=\"pmx__loc\" id=\"pmx-loc\"><\/p>\n          <div class=\"pmx__meta\" id=\"pmx-meta\"><\/div>\n        <\/div>\n\n        <p class=\"pmx__desc\" id=\"pmx-desc\"><\/p>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<script>\n(function () {\n  var UP = 'https:\/\/www.portamediterranea.com\/wp-content\/uploads\/';\n\n  var DATA = [\n    {\n      name: 'Villas Mediterr\u00e0nia Life',\n      title: 'VILLAS MEDITERR\u00c0NIA LIFE',\n      loc: 'Playa del Moro \u2013 Tres Playas',\n      meta: ['3 and 4 bedrooms', '6 homes'],\n      desc: '6 exclusive detached homes with excellent finishes, where buyers can adapt the layout to their needs or preferences. Set in a very quiet residential area just a few metres from Tres Playas and Playa del Moro, so your home in Alcossebre gains all the value of being close to the sea.',\n      imgs: [\n        UP + '2024\/02\/slider-villas-mediterranea-life.webp',\n        UP + '2022\/02\/villas-mediterranea-life11.jpg',\n        UP + '2021\/07\/villas-mediterrania-life3.jpg'\n      ]\n    },\n    {\n      name: 'Le Blanc Residential Complex',\n      title: 'LE BLANC RESIDENTIAL COMPLEX',\n      loc: 'Seafront promenade \u2013 Marina',\n      meta: ['2 and 3 bedrooms', '52 homes'],\n      desc: 'Next to the seafront promenade and the marina, this project has been designed on 3 stepped horizontal platforms, creating a sense of privacy for homes that will enjoy superb front-line sea views. The homes are arranged around a large central space open to the sea, featuring green areas, a swimming pool, a padel court, a gym and an indoor pool.',\n      imgs: [\n        UP + '2024\/02\/slider-residencial-le-blanc.webp',\n        UP + '2022\/07\/LeBlanc-casa1.jpg',\n        UP + '2022\/07\/LeBlanc-casa3.jpg'\n      ]\n    },\n    {\n      name: 'Porta Romana Building',\n      title: 'PORTA ROMANA BUILDING',\n      loc: 'Playa Romana',\n      meta: ['2 and 3 bedrooms', '27 homes'],\n      desc: 'For the Porta Romana development we have designed a residential complex with a total of 27 homes. As with all our projects, we designed it with the look of the new Mediterranean aesthetic. 2- and 3-bedroom homes made unique by their front-line beach and seafront location.',\n      imgs: [\n        UP + '2024\/02\/slider2-porta-romana.webp',\n        UP + '2024\/02\/porta-romana-promocion.webp',\n        UP + '2024\/02\/porta-romana-terraza.webp'\n      ]\n    },\n    {\n      name: 'Porta Prima Building',\n      title: 'PORTA PRIMA BUILDING',\n      loc: 'Town centre',\n      meta: ['2 bedrooms', '4 apartments'],\n      desc: 'A treat for those who prefer to be close to the town centre without being far from the beach. This project features 4 two-bedroom apartments with outstanding finishes and facilities that help you enjoy your free time even more.',\n      imgs: [\n        UP + '2024\/02\/viviendas-obra-nueva-porta-prima.webp',\n        UP + '2021\/06\/fachada-obra-nueva-porta-prima.jpg',\n        UP + '2021\/07\/edificio-porta-prima-alcossebre.jpg'\n      ]\n    }\n  ];\n\n  var PHOTO_MS = 5000;\n\n  function pad(n) {\n    if (n > 9) { return String(n); }\n    return '0' + n;\n  }\n\n  function init() {\n    var root = document.getElementById('pmx-root');\n    if (!root) { return; }\n    if (root.getAttribute('data-ready') === '1') { return; }\n    root.setAttribute('data-ready', '1');\n    root.style.setProperty('--pmx-dur', PHOTO_MS + 'ms');\n\n    var index = document.getElementById('pmx-index');\n    var stage = document.getElementById('pmx-stage');\n    var barsBox = document.getElementById('pmx-bars');\n    var card = document.getElementById('pmx-card');\n    var ghost = document.getElementById('pmx-ghost');\n    var elName = document.getElementById('pmx-name');\n    var elLoc = document.getElementById('pmx-loc');\n    var elMeta = document.getElementById('pmx-meta');\n    var elDesc = document.getElementById('pmx-desc');\n    var btnPrev = document.getElementById('pmx-prev');\n    var btnNext = document.getElementById('pmx-next');\n\n    var reduce = false;\n    if (window.matchMedia) {\n      reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n    }\n\n    DATA.forEach(function (p) {\n      p.imgs.forEach(function (src) {\n        var pre = new Image();\n        pre.src = src;\n      });\n    });\n\n    var tabs = [];\n    var layers = [];\n    var bars = [];\n    var current = -1;\n    var photo = 0;\n    var timer = null;\n    var inView = true;\n    var hovering = false;\n\n    function stopTimer() {\n      if (timer) { clearInterval(timer); timer = null; }\n      stage.classList.add('is-paused');\n    }\n\n    function startTimer() {\n      if (timer) { clearInterval(timer); timer = null; }\n      if (reduce) { return; }\n      if (!inView) { return; }\n      if (hovering) { return; }\n      if (document.hidden) { return; }\n      if (layers.length === 1) { return; }\n      stage.classList.remove('is-paused');\n      timer = setInterval(nextPhoto, PHOTO_MS);\n    }\n\n    function paintPhoto(k) {\n      layers.forEach(function (L, j) {\n        if (j === k) { L.classList.add('is-on'); } else { L.classList.remove('is-on'); }\n      });\n      bars.forEach(function (b, j) {\n        b.classList.remove('is-done');\n        b.classList.remove('is-live');\n        b.setAttribute('aria-current', j === k ? 'true' : 'false');\n        if (k > j) { b.classList.add('is-done'); }\n      });\n      var live = bars[k];\n      if (live) {\n        var fill = live.firstChild;\n        if (fill) {\n          fill.style.animation = 'none';\n          void fill.offsetWidth;\n          fill.style.animation = '';\n        }\n        live.classList.add('is-live');\n      }\n      photo = k;\n    }\n\n    function nextPhoto() { paintPhoto((photo + 1) % layers.length); }\n    function prevPhoto() { paintPhoto((photo - 1 + layers.length) % layers.length); }\n\n    function buildStage(p) {\n      layers.forEach(function (L) {\n        if (L.parentNode) { L.parentNode.removeChild(L); }\n      });\n      layers = [];\n      while (barsBox.firstChild) { barsBox.removeChild(barsBox.firstChild); }\n      bars = [];\n\n      p.imgs.forEach(function (src, j) {\n        var L = document.createElement('div');\n        L.className = 'pmx__img';\n        L.style.backgroundImage = 'url(\"' + src + '\")';\n        stage.insertBefore(L, barsBox);\n        layers.push(L);\n\n        var b = document.createElement('button');\n        b.type = 'button';\n        b.className = 'pmx__bar';\n        b.setAttribute('aria-label', 'Image ' + (j + 1));\n        var fill = document.createElement('span');\n        fill.className = 'pmx__fill';\n        b.appendChild(fill);\n        b.addEventListener('click', function () {\n          paintPhoto(j);\n          startTimer();\n        });\n        barsBox.appendChild(b);\n        bars.push(b);\n      });\n\n      if (p.imgs.length === 1) { barsBox.style.display = 'none'; }\n      else { barsBox.style.display = ''; }\n\n      photo = 0;\n      paintPhoto(0);\n    }\n\n    function fillInfo(p, idx) {\n      ghost.textContent = pad(idx + 1);\n      elName.textContent = p.title;\n      elLoc.textContent = p.loc;\n      elDesc.textContent = p.desc;\n      while (elMeta.firstChild) { elMeta.removeChild(elMeta.firstChild); }\n      p.meta.forEach(function (m) {\n        var sp = document.createElement('span');\n        sp.textContent = m;\n        elMeta.appendChild(sp);\n      });\n    }\n\n    function ensureVisible(b) {\n      var box = index.getBoundingClientRect();\n      var r = b.getBoundingClientRect();\n      if (box.left > r.left) {\n        index.scrollLeft = index.scrollLeft - (box.left - r.left) - 16;\n      }\n      if (r.right > box.right) {\n        index.scrollLeft = index.scrollLeft + (r.right - box.right) + 16;\n      }\n    }\n\n    function select(idx, focusTab) {\n      if (idx === current) { return; }\n      current = idx;\n\n      tabs.forEach(function (b, j) {\n        var on = (j === idx);\n        b.setAttribute('aria-selected', on ? 'true' : 'false');\n        b.setAttribute('tabindex', on ? '0' : '-1');\n      });\n\n      var p = DATA[idx];\n      card.classList.add('is-out');\n      elDesc.classList.add('is-out');\n      buildStage(p);\n      startTimer();\n\n      setTimeout(function () {\n        fillInfo(p, idx);\n        card.classList.remove('is-out');\n        elDesc.classList.remove('is-out');\n      }, reduce ? 0 : 300);\n\n      ensureVisible(tabs[idx]);\n      if (focusTab) { tabs[idx].focus(); }\n    }\n\n    DATA.forEach(function (p, idx) {\n      var b = document.createElement('button');\n      b.type = 'button';\n      b.className = 'pmx__item';\n      b.setAttribute('role', 'tab');\n      b.setAttribute('aria-selected', 'false');\n      b.setAttribute('tabindex', '-1');\n      b.setAttribute('aria-controls', 'pmx-card');\n\n      var num = document.createElement('span');\n      num.className = 'pmx__num';\n      num.textContent = pad(idx + 1);\n\n      var txt = document.createElement('span');\n      var nm = document.createElement('span');\n      nm.className = 'pmx__itemname';\n      nm.textContent = p.name;\n      var lc = document.createElement('span');\n      lc.className = 'pmx__itemloc';\n      lc.textContent = p.loc;\n      txt.appendChild(nm);\n      txt.appendChild(lc);\n\n      b.appendChild(num);\n      b.appendChild(txt);\n      b.addEventListener('click', function () { select(idx, false); });\n      index.appendChild(b);\n      tabs.push(b);\n    });\n\n    index.addEventListener('keydown', function (e) {\n      var last = DATA.length - 1;\n      if (e.key === 'ArrowDown') { e.preventDefault(); select(current === last ? 0 : current + 1, true); }\n      if (e.key === 'ArrowRight') { e.preventDefault(); select(current === last ? 0 : current + 1, true); }\n      if (e.key === 'ArrowUp') { e.preventDefault(); select(current === 0 ? last : current - 1, true); }\n      if (e.key === 'ArrowLeft') { e.preventDefault(); select(current === 0 ? last : current - 1, true); }\n      if (e.key === 'Home') { e.preventDefault(); select(0, true); }\n      if (e.key === 'End') { e.preventDefault(); select(last, true); }\n    });\n\n    btnPrev.addEventListener('click', function () { prevPhoto(); startTimer(); });\n    btnNext.addEventListener('click', function () { nextPhoto(); startTimer(); });\n\n    stage.addEventListener('mouseenter', function () { hovering = true; stopTimer(); });\n    stage.addEventListener('mouseleave', function () { hovering = false; startTimer(); });\n\n    var touchX = 0;\n    stage.addEventListener('touchstart', function (e) {\n      if (e.touches.length === 1) { touchX = e.touches[0].clientX; }\n    }, { passive: true });\n\n    stage.addEventListener('touchend', function (e) {\n      if (!e.changedTouches.length) { return; }\n      var dx = e.changedTouches[0].clientX - touchX;\n      if (Math.abs(dx) > 45) {\n        if (dx > 0) { prevPhoto(); } else { nextPhoto(); }\n        startTimer();\n      }\n    }, { passive: true });\n\n    document.addEventListener('visibilitychange', function () {\n      if (document.hidden) { stopTimer(); } else { startTimer(); }\n    });\n\n    if (window.IntersectionObserver) {\n      new IntersectionObserver(function (entries) {\n        entries.forEach(function (en) {\n          inView = en.isIntersecting;\n          if (inView) { startTimer(); } else { stopTimer(); }\n        });\n      }, { threshold: 0.2 }).observe(root);\n    }\n\n    select(0, false);\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Costa del Azahar New-build developments in&nbsp;Alcossebre At&nbsp;Porta Mediterr\u00e1nea Homes&nbsp;we are committed to quality of life and comfort. That is why all our projects are designed so you can make the most of your free time. We have created dream spaces with our&nbsp;new-build developments, ideal for living and for you and your loved ones to enjoy &#8230; <a title=\"Home\" class=\"read-more\" href=\"https:\/\/www.portamediterranea.com\/en\/\" aria-label=\"Read more about Home\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"bc-bloques","meta":{"footnotes":""},"class_list":["post-27912","page","type-page","status-publish"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Porta Mediterr\u00e1nea | New Developments in Alcossebre, Castell\u00f3n<\/title>\n<meta name=\"description\" content=\"New developments in Alcossebre, Castell\u00f3n. Housing with all luxury amenities and close to the beach. 2-3 bedrooms. Contact us!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.portamediterranea.com\/en\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Porta Mediterr\u00e1nea | New Developments in Alcossebre, Castell\u00f3n\" \/>\n<meta property=\"og:description\" content=\"New developments in Alcossebre, Castell\u00f3n. Housing with all luxury amenities and close to the beach. 2-3 bedrooms. Contact us!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.portamediterranea.com\/en\/\" \/>\n<meta property=\"og:site_name\" content=\"Porta Mediterr\u00e1nea Homes\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-11T08:58:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.portamediterranea.com\/wp-content\/uploads\/2021\/05\/icono1.jpg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"14 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.portamediterranea.com\/en\/\",\"url\":\"https:\/\/www.portamediterranea.com\/en\/\",\"name\":\"Porta Mediterr\u00e1nea | New Developments in Alcossebre, Castell\u00f3n\",\"isPartOf\":{\"@id\":\"https:\/\/www.portamediterranea.com\/en\/#website\"},\"datePublished\":\"2021-05-25T09:30:23+00:00\",\"dateModified\":\"2026-11-11T08:58:18+00:00\",\"description\":\"New developments in Alcossebre, Castell\u00f3n. Housing with all luxury amenities and close to the beach. 2-3 bedrooms. Contact us!\",\"breadcrumb\":{\"@id\":\"https:\/\/www.portamediterranea.com\/en\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.portamediterranea.com\/en\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.portamediterranea.com\/en\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\/\/www.portamediterranea.com\/en\/home\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Home\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.portamediterranea.com\/en\/#website\",\"url\":\"https:\/\/www.portamediterranea.com\/en\/\",\"name\":\"Porta Mediterr\u00e1nea Homes\",\"description\":\"Spaces to live and houses to enjoy\",\"publisher\":{\"@id\":\"https:\/\/www.portamediterranea.com\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.portamediterranea.com\/en\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.portamediterranea.com\/en\/#organization\",\"name\":\"Porta Mediterr\u00e1nea\",\"url\":\"https:\/\/www.portamediterranea.com\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.portamediterranea.com\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.portamediterranea.com\/wp-content\/uploads\/2021\/06\/logo-porta-mediterranea-blanco.jpg\",\"contentUrl\":\"https:\/\/www.portamediterranea.com\/wp-content\/uploads\/2021\/06\/logo-porta-mediterranea-blanco.jpg\",\"width\":300,\"height\":211,\"caption\":\"Porta Mediterr\u00e1nea\"},\"image\":{\"@id\":\"https:\/\/www.portamediterranea.com\/en\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Porta Mediterr\u00e1nea | New Developments in Alcossebre, Castell\u00f3n","description":"New developments in Alcossebre, Castell\u00f3n. Housing with all luxury amenities and close to the beach. 2-3 bedrooms. Contact us!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.portamediterranea.com\/en\/","og_locale":"en_US","og_type":"article","og_title":"Porta Mediterr\u00e1nea | New Developments in Alcossebre, Castell\u00f3n","og_description":"New developments in Alcossebre, Castell\u00f3n. Housing with all luxury amenities and close to the beach. 2-3 bedrooms. Contact us!","og_url":"https:\/\/www.portamediterranea.com\/en\/","og_site_name":"Porta Mediterr\u00e1nea Homes","article_modified_time":"2026-11-11T08:58:18+00:00","og_image":[{"url":"https:\/\/www.portamediterranea.com\/wp-content\/uploads\/2021\/05\/icono1.jpg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"14 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.portamediterranea.com\/en\/","url":"https:\/\/www.portamediterranea.com\/en\/","name":"Porta Mediterr\u00e1nea | New Developments in Alcossebre, Castell\u00f3n","isPartOf":{"@id":"https:\/\/www.portamediterranea.com\/en\/#website"},"datePublished":"2021-05-25T09:30:23+00:00","dateModified":"2026-11-11T08:58:18+00:00","description":"New developments in Alcossebre, Castell\u00f3n. Housing with all luxury amenities and close to the beach. 2-3 bedrooms. Contact us!","breadcrumb":{"@id":"https:\/\/www.portamediterranea.com\/en\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.portamediterranea.com\/en\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.portamediterranea.com\/en\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/www.portamediterranea.com\/en\/home\/"},{"@type":"ListItem","position":2,"name":"Home"}]},{"@type":"WebSite","@id":"https:\/\/www.portamediterranea.com\/en\/#website","url":"https:\/\/www.portamediterranea.com\/en\/","name":"Porta Mediterr\u00e1nea Homes","description":"Spaces to live and houses to enjoy","publisher":{"@id":"https:\/\/www.portamediterranea.com\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.portamediterranea.com\/en\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.portamediterranea.com\/en\/#organization","name":"Porta Mediterr\u00e1nea","url":"https:\/\/www.portamediterranea.com\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.portamediterranea.com\/en\/#\/schema\/logo\/image\/","url":"https:\/\/www.portamediterranea.com\/wp-content\/uploads\/2021\/06\/logo-porta-mediterranea-blanco.jpg","contentUrl":"https:\/\/www.portamediterranea.com\/wp-content\/uploads\/2021\/06\/logo-porta-mediterranea-blanco.jpg","width":300,"height":211,"caption":"Porta Mediterr\u00e1nea"},"image":{"@id":"https:\/\/www.portamediterranea.com\/en\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.portamediterranea.com\/en\/wp-json\/wp\/v2\/pages\/27912","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.portamediterranea.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.portamediterranea.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.portamediterranea.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.portamediterranea.com\/en\/wp-json\/wp\/v2\/comments?post=27912"}],"version-history":[{"count":5,"href":"https:\/\/www.portamediterranea.com\/en\/wp-json\/wp\/v2\/pages\/27912\/revisions"}],"predecessor-version":[{"id":32230,"href":"https:\/\/www.portamediterranea.com\/en\/wp-json\/wp\/v2\/pages\/27912\/revisions\/32230"}],"wp:attachment":[{"href":"https:\/\/www.portamediterranea.com\/en\/wp-json\/wp\/v2\/media?parent=27912"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}