.home-room-mini{display:flex;gap:14px;flex-wrap:wrap;margin:14px 0 2px}.home-room-mini b{font-size:12px;font-weight:600;color:#727278}.room-editorial-media img,.space-panel-media img{width:100%;height:100%;object-fit:cover;display:block}.around-cms-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.around-cms-card{border-top:1px solid #dcdcdf;padding-top:14px}.around-cms-image{aspect-ratio:4/3;overflow:hidden;background:#eee;margin-bottom:15px}.around-cms-image img{width:100%;height:100%;object-fit:cover}.around-cms-card span{font-size:10px;letter-spacing:.08em;color:#777}.around-cms-card h3{font-size:20px;margin:7px 0 8px}.around-cms-card p{font-size:13px;line-height:1.7;color:#5f5f64}.around-cms-card small{display:block;color:#888;margin-top:8px}.around-cms-card a{display:inline-block;margin-top:12px;font-size:12px;color:inherit;text-decoration:none}.cms-link-row{display:flex;gap:10px;flex-wrap:wrap;margin-top:22px}.cms-link-row a[hidden]{display:none}.location-photo img,[data-media-section].has-cms-image img{width:100%;height:100%;object-fit:cover;display:block}.footer-col [hidden]{display:none}.news-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}.news-card{border-top:1px solid #d9d9dc;padding-top:14px}.news-card-image{aspect-ratio:4/3;background:#f1f1f2;overflow:hidden;margin-bottom:16px}.news-card-image img{width:100%;height:100%;object-fit:cover}.news-card time{font-size:10px;color:#888}.news-card h2{font-size:21px;margin:8px 0}.news-card p{font-size:13px;line-height:1.7;color:#666}.news-card button{border:0;background:transparent;padding:0;margin-top:8px;text-decoration:underline;cursor:pointer}.news-detail{max-width:760px;margin:80px auto;padding:0 24px}.news-detail[hidden]{display:none}.news-detail h1{font-size:38px;line-height:1.2}.news-detail-content{white-space:pre-wrap;font-size:15px;line-height:1.9;color:#444}.news-detail-image{margin:28px 0}.news-detail-image img{width:100%;display:block}.reservation-bank-box{margin:24px 0;padding:18px;border:1px solid #ddd;border-radius:12px;background:#fafafa}.reservation-bank-box b{display:block;margin-bottom:7px}.ota-links{display:flex;gap:10px;flex-wrap:wrap;margin-top:18px}.ota-links a[hidden]{display:none}
@media(max-width:900px){.around-cms-grid,.news-grid{grid-template-columns:1fr 1fr}}
@media(max-width:620px){.around-cms-grid,.news-grid{grid-template-columns:1fr}.news-detail h1{font-size:30px}}
.room-mini-gallery{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:22px 0}.room-mini-gallery img{width:100%;aspect-ratio:4/3;object-fit:cover}.room-action-row{display:flex;gap:16px;flex-wrap:wrap;margin-top:20px}

/* V5.3.1 — public images are CMS-only */
.architecture-visual{min-height:0;padding:0;border-top:0;border-bottom:0;display:block;background:#e9e9e6;overflow:hidden}
.architecture-visual .architecture-cms-photo{width:100%;aspect-ratio:4/3;min-height:420px;overflow:hidden;background:#e9e9e6}
.architecture-visual .architecture-cms-photo img{width:100%;height:100%;object-fit:cover;display:block}
.rich-copy .architecture-cms-photo{margin-top:34px}
@media(max-width:620px){.architecture-visual .architecture-cms-photo{min-height:320px}}

/* V5.3.2 — consistent CMS image ratios
   Uploaded originals may have any dimensions. Public slots define the crop ratio,
   and images always fill the slot with object-fit: cover. */

/* Shared behavior */
.room-editorial-media,
.space-panel-media,
.editorial-image,
.architecture-cms-photo,
.around-cms-image,
.news-card-image,
.location-photo,
.room-media,
.space-media,
.room-mini-gallery img {
  overflow: hidden;
}

.room-editorial-media img,
.space-panel-media img,
.editorial-image img,
.architecture-cms-photo img,
.around-cms-image img,
.news-card-image img,
.location-photo img,
.room-media img,
.space-media img,
.room-mini-gallery img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center center;
  display: block;
}

/* Main page — room cards: one fixed landscape ratio */
.room-editorial-media {
  aspect-ratio: 3 / 2;
  min-height: 0 !important;
  position: relative;
}
.room-editorial-media > img,
.room-editorial-media > .placeholder {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  min-height: 0 !important;
}

/* Main page — MIR SPACE: all three columns must end at exactly the same height */
.space-editorial-panels {
  align-items: start;
}
.space-editorial-panels article {
  min-width: 0;
}
.space-panel-media {
  aspect-ratio: 4 / 3;
  min-height: 0 !important;
  position: relative;
}
.space-panel-media > img,
.space-panel-media > .placeholder {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  min-height: 0 !important;
}

/* Main story images keep their editorial shape, but the slot size is now deterministic */
.editorial-image-wide {
  aspect-ratio: 8 / 5;
  min-height: 0 !important;
}
.editorial-image-portrait {
  aspect-ratio: 4 / 5;
  min-height: 0 !important;
}
.editorial-image {
  position: relative;
}
.editorial-image > img,
.editorial-image > .placeholder {
  width: 100%;
  height: 100%;
  min-height: 0 !important;
}

/* Architecture / location / cards */
.architecture-visual .architecture-cms-photo,
.rich-copy .architecture-cms-photo,
.location-photo,
.around-cms-image,
.news-card-image {
  aspect-ratio: 4 / 3;
  min-height: 0 !important;
}

/* Detail pages */
.room-media {
  aspect-ratio: 3 / 2;
  min-height: 0 !important;
}
.space-media {
  aspect-ratio: 4 / 3;
  min-height: 0 !important;
}
.room-mini-gallery img {
  aspect-ratio: 4 / 3;
}
.news-detail-image {
  aspect-ratio: 8 / 5;
  overflow: hidden;
}
.news-detail-image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center center;
}

/* Never stretch an uploaded image. */
[data-media-section].has-cms-image,
[data-room-cover].has-cms-image,
[data-space-cover].has-cms-image {
  background: #ededeb;
}

@media (max-width: 760px) {
  /* Mobile keeps the same ratio instead of switching to viewport-height images. */
  .room-editorial-media,
  .space-panel-media,
  .room-media,
  .space-media {
    min-height: 0 !important;
  }

  .editorial-image-wide {
    aspect-ratio: 4 / 3;
  }

  .editorial-image-portrait {
    aspect-ratio: 4 / 5;
  }
}

/* V5.3.3 — LOCATION map cleanup */
.location-strip {
  min-height: 560px;
  grid-template-columns: minmax(0, 1.15fr) minmax(420px, .85fr);
}
.map-embed {
  position: relative;
  min-height: 560px;
  background: #e9e9e6;
  overflow: hidden;
}
.map-embed iframe {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: 0;
  display: block;
}
.location-info {
  min-width: 0;
}
/* The former exterior / driveway / parking photo block has been removed.
   Arrival and parking guidance now live as text in LOCATION CMS. */
@media (max-width: 900px) {
  .location-strip {
    grid-template-columns: 1fr;
    min-height: 0;
  }
  .map-embed {
    min-height: 420px;
  }
}
@media (max-width: 560px) {
  .map-embed {
    min-height: 340px;
  }
}

/* V5.3.4 — LOCATION layout polish
   Keep the real map useful without letting it dominate the page. */
.location-section {
  background: #f5f4f1;
  padding: clamp(72px, 7vw, 110px) var(--side) clamp(96px, 9vw, 145px);
}

.location-strip {
  width: min(1280px, 100%);
  margin: 0 auto;
  min-height: 0 !important;
  display: grid;
  grid-template-columns: minmax(0, 1.08fr) minmax(340px, .92fr);
  gap: clamp(44px, 6vw, 88px);
  align-items: center;
  background: transparent;
}

.map-embed {
  position: relative;
  min-height: 0 !important;
  height: clamp(360px, 31vw, 430px);
  background: #e9e9e6;
  overflow: hidden;
}

.map-embed iframe {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: 0;
  display: block;
}

.location-info {
  min-width: 0;
  padding: 10px 0;
  justify-content: center;
}

.location-info h2 {
  font-size: clamp(34px, 3.4vw, 52px);
  line-height: 1.12;
  letter-spacing: -.04em;
  margin: 0 0 24px;
  word-break: keep-all;
}

.location-info .info-line {
  padding: 15px 0;
  font-size: 13px;
  line-height: 1.65;
}

.location-info .cms-link-row {
  margin-top: 24px;
}

/* The footer should feel like the next chapter, not like it is glued to the map. */
.location-section + .site-footer {
  margin-top: 0;
}

@media (max-width: 900px) {
  .location-section {
    padding: 64px 24px 90px;
  }

  .location-strip {
    grid-template-columns: 1fr;
    gap: 42px;
  }

  .map-embed {
    height: clamp(320px, 58vw, 390px);
  }

  .location-info {
    padding: 0;
  }
}

@media (max-width: 560px) {
  .location-section {
    padding: 48px 20px 72px;
  }

  .location-strip {
    gap: 32px;
  }

  .map-embed {
    height: 300px;
  }

  .location-info h2 {
    font-size: 34px;
  }
}

/* V5.4.2 — same in-photo arrows on homepage room imagery */
.room-editorial-media.mir-inline-photo-slider{position:relative;overflow:hidden}.room-editorial-media.mir-inline-photo-slider>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}.mir-photo-arrow{position:absolute;top:50%;z-index:5;width:44px;height:44px;transform:translateY(-50%);border:1px solid rgba(255,255,255,.68);border-radius:50%;background:rgba(18,18,18,.42);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);color:#fff;display:grid;place-items:center;padding:0;font:500 19px/1 Arial,sans-serif;cursor:pointer;transition:background .2s ease,transform .2s ease,opacity .2s ease}.mir-photo-arrow:hover{background:rgba(18,18,18,.72);transform:translateY(-50%) scale(1.04)}.mir-photo-prev{left:14px}.mir-photo-next{right:14px}.mir-photo-count{position:absolute;right:14px;bottom:14px;z-index:4;padding:6px 9px;border-radius:999px;background:rgba(18,18,18,.48);backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px);color:#fff;font-size:10px;line-height:1;letter-spacing:.06em;pointer-events:none}
@media(max-width:760px){.mir-photo-arrow{width:40px;height:40px;font-size:17px}.mir-photo-prev{left:10px}.mir-photo-next{right:10px}.mir-photo-count{right:10px;bottom:10px}}
