.catalogue-intro {padding-block:36px 28px}
.catalogue-intro h1 {font:400 clamp(50px,5.5vw,82px)/1.05 Saonara;margin:0 0 13px}
.catalogue-intro>p {font:350 18px/1.5 "Neue Montreal Text";margin:0}
.catalogue-controls {display:flex;align-items:center;justify-content:space-between;gap:20px;border-bottom:1px solid var(--sky);padding:9px 0 15px}
.catalogue-transactions {display:flex;gap:30px;align-items:center}
.catalogue-controls button,.catalogue-clear {background:none;border:0;border-radius:0;color:var(--espresso);font:400 15px/1.4 "Neue Montreal";min-height:44px;padding:10px 0;cursor:pointer}
.catalogue-transactions button {position:relative;white-space:nowrap}
.catalogue-transactions button::after {content:"";position:absolute;bottom:3px;left:0;right:0;height:2px;background:var(--sky);transform:scaleX(0);transform-origin:left;transition:transform 240ms ease}
.catalogue-transactions button[aria-pressed="true"]::after {transform:scaleX(1)}
.catalogue-type {display:flex;gap:18px;align-items:center;font:350 14px/1.5 "Neue Montreal Text"}
.catalogue-type select {background:transparent;color:var(--espresso);border:0;border-bottom:1px solid var(--sky);border-radius:0;padding:10px 28px 10px 2px;min-height:44px;max-width:100%;font:400 15px/1.4 "Neue Montreal";cursor:pointer}
.catalogue-meta {min-height:65px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding-block:8px 16px;font:350 14px/1.4 "Neue Montreal Text"}
.catalogue-count {margin:0}
.catalogue-clear {font-size:14px;text-decoration:underline;text-decoration-color:var(--sky);text-underline-offset:6px}
.catalogue-clear[hidden],.catalogue-empty[hidden] {display:none}
.catalogue-grid {display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:clamp(32px,6vw,96px);row-gap:54px;align-items:start;overflow-anchor:none}
.catalogue-card {display:block;min-width:0;color:var(--espresso);text-decoration:none}
.catalogue-card:nth-child(even) {width:90%;justify-self:end;margin-top:70px}
.catalogue-image {display:block;aspect-ratio:4/3;overflow:hidden;background:var(--limestone)}
.catalogue-image img {width:100%;height:100%;display:block;object-fit:cover;object-position:var(--crop)}
.catalogue-caption {display:block;padding-top:17px}
.catalogue-name-row {display:flex;align-items:baseline;justify-content:space-between;gap:14px}
.catalogue-name {font:400 clamp(28px,2.7vw,40px)/1.13 Saonara;margin:0;overflow-wrap:break-word}
.catalogue-name span {background:linear-gradient(var(--sky),var(--sky)) left bottom/0 1px no-repeat;padding-bottom:4px;transition: background-size var(--line-duration) var(--ease-reveal);box-decoration-break:clone;-webkit-box-decoration-break:clone}
.catalogue-arrow {font:400 25px/1 "Neue Montreal";color:var(--sky);transition: transform var(--line-duration) var(--ease-reveal);flex:none}
.catalogue-kind,.catalogue-specs {font:350 15px/1.55 "Neue Montreal Text";margin:9px 0 0}
.catalogue-specs {margin-top:5px;display:flex;flex-wrap:wrap;gap:0 7px}
.catalogue-specs>span {white-space:nowrap}
.catalogue-price {font:400 clamp(25px,2.2vw,32px)/1.3 Saonara;-webkit-text-stroke:.2px currentColor;margin:13px 0 0}
.catalogue-price .price-period {font:350 15px/1.5 "Neue Montreal Text";-webkit-text-stroke:0;white-space:nowrap}
.catalogue-card:focus-visible {outline:2px solid var(--espresso);outline-offset:8px}
.catalogue-card:focus-visible .catalogue-name span {background-size:100% 1px}
.catalogue-card:focus-visible .catalogue-arrow {transform:translate(2px,-2px)}
.catalogue-empty {min-height:240px;padding-block:48px;font:350 18px/1.6 "Neue Montreal Text"}
.catalogue-empty p {margin:0 0 15px}
.catalogue-page .property-footer {margin-top:80px}
.catalogue-nojs {font:350 18px/1.8 "Neue Montreal Text"}
@media(hover:hover) and (pointer:fine) {
 .catalogue-card:hover .catalogue-name span {background-size:100% 1px}
 .catalogue-card:hover .catalogue-arrow {transform:translate(2px,-2px)}
}
@media(max-width:767px) {
 .catalogue-page .property-shell {width:calc(100% - 44px)}
 .catalogue-intro {padding-block:28px 23px}
 .catalogue-intro h1 {font-size:52px;margin-bottom:11px}
 .catalogue-intro>p {font-size:16px;max-width:29ch}
 .catalogue-controls {flex-wrap:wrap;gap:10px;padding-top:0;padding-bottom:12px}
 .catalogue-transactions {width:100%;gap:28px}
 .catalogue-type {width:100%;justify-content:space-between;gap:12px}
 .catalogue-type select {width:158px}
 .catalogue-meta {min-height:63px;padding-bottom:13px}
 .catalogue-grid {grid-template-columns:minmax(0,1fr);row-gap:42px}
 .catalogue-card {width:96%}
 .catalogue-card:nth-child(even) {width:max(90%,270px);max-width:100%;margin-top:0}
 .catalogue-card:only-child {width:100%}
 .catalogue-image img {object-position:var(--crop-mobile)}
 .catalogue-caption {padding-top:15px}
 .catalogue-name {font-size:30px}
 .catalogue-kind,.catalogue-specs {font-size:14px}
 .catalogue-price {font-size:27px;margin-top:11px}
 .catalogue-page .property-footer {margin-top:52px}
}
@media(prefers-reduced-motion:reduce) {
 .catalogue-page *, .catalogue-page *::after {animation:none!important;transition:none!important}
 .catalogue-card img {transform:none!important}
}

/* Complete catalogue only: four aligned editorial duos at the desktop breakpoint.
   Flex rows share their tallest caption; proportions exclude the central gutter. */
@media(min-width:1280px) {
 .catalogue-grid--duos {
  --duo-gap:clamp(32px,3vw,48px);
  --duo-image-height:clamp(340px,26.4vw,400px);
  display:flex;flex-wrap:wrap;column-gap:var(--duo-gap);
  row-gap:clamp(56px,4.5vw,72px);align-items:flex-start;
 }
 .catalogue-grid--duos .catalogue-card {
  flex:0 0 auto;width:calc((100% - var(--duo-gap)) * .55);margin-top:0;
 }
 .catalogue-grid--duos .catalogue-card:nth-child(4n + 2),
 .catalogue-grid--duos .catalogue-card:nth-child(4n + 3) {
  width:calc((100% - var(--duo-gap)) * .45);
 }
 .catalogue-grid--duos .catalogue-image {height:var(--duo-image-height);aspect-ratio:auto}
 .catalogue-grid--duos [data-property-id="les-arcades"] img {object-position:50% 46%}
 .catalogue-grid--duos [data-property-id="villa-alba"] img {object-position:50% 55%}
 .catalogue-grid--duos [data-property-id="casa-de-los-olivos"] img {object-position:50% 50%}
 .catalogue-grid--duos [data-property-id="casa-bria"] img {object-position:50% 58%}
 .catalogue-grid--duos [data-property-id="terrazas-del-horizonte"] img {object-position:50% 40%}
 .catalogue-grid--duos [data-property-id="atico-cielo"] img {object-position:50% 48%}
 .catalogue-grid--duos [data-property-id="loft-de-la-luz"] img {object-position:50% 48%}
 .catalogue-grid--duos [data-property-id="casa-serena"] img {object-position:50% 48%}
}

@media (max-width: 1279px) and (max-height: 540px) and (orientation: landscape) {
 .catalogue-page .property-shell { width: calc(100% - 2 * var(--edge)); }
 .catalogue-intro { padding-block: 16px 10px; }
 .catalogue-intro h1 { font-size: clamp(39px, 6vw, 54px); margin-bottom: 6px; }
 .catalogue-controls { gap: 6px 14px; padding-block: 2px 6px; }
 .catalogue-transactions, .catalogue-type { width: auto; }
 .catalogue-transactions { gap: 18px; }
 .catalogue-meta { min-height: 48px; padding-block: 3px 8px; }
 .catalogue-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 22px 18px; }
 .catalogue-card, .catalogue-card:nth-child(even), .catalogue-card:only-child { width: min(100%, calc(var(--landscape-frame-height) * 1.4)); }
 .catalogue-card:nth-child(even) { margin-top: 16px; }
 .catalogue-image { aspect-ratio: 1.4; }
 .catalogue-caption { padding-top: 8px; }
 .catalogue-name { font-size: clamp(25px, 4vw, 34px); }
 .catalogue-price { margin-top: 5px; }
 .catalogue-empty { min-height: 120px; padding-block: 22px; }
}
