/* ==========================================================================
   Ts-Immo Vitrine — feuille de styles principale
   Les tokens (couleurs, rayons…) sont définis dans style.css et surchargés par
   le Customizer via une feuille inline.
   ========================================================================== */

/* ---- Base ---- */
*, *::before, *::after { box-sizing: border-box; }
body {
  margin: 0;
  font-family: var(--tsv-font-base);
  color: var(--tsv-color-fg);
  background: var(--tsv-color-bg);
  line-height: 1.55;
  -webkit-font-smoothing: antialiased;
}
img { max-width: 100%; height: auto; display: block; }
a { color: var(--tsv-color-accent); text-decoration: none; }
a:hover { color: var(--tsv-color-accent-hover); }
h1, h2, h3, h4 { font-family: var(--tsv-font-head); line-height: 1.2; color: var(--tsv-color-dark); }

.tsv-container { max-width: var(--tsv-container); margin: 0 auto; padding: 0 1.25rem; width: 100%; }
.tsv-container--narrow { max-width: 860px; }

.screen-reader-text {
  position: absolute !important; width: 1px; height: 1px; overflow: hidden;
  clip: rect(1px,1px,1px,1px); white-space: nowrap;
}
.skip-link { position: absolute; left: -9999px; top: 0; background: #fff; padding: .5rem 1rem; z-index: 1000; }
.skip-link:focus { left: 0; }

/* ---- Boutons ---- */
.tsv-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: .4rem;
  padding: .7rem 1.3rem; border-radius: var(--tsv-radius-sm); font-weight: 600; font-size: .95rem;
  border: 1px solid var(--tsv-color-border); background: #fff; color: var(--tsv-color-fg);
  cursor: pointer; transition: background .15s, border-color .15s, transform .05s; text-align: center;
}
.tsv-btn:hover { border-color: var(--tsv-color-accent); }
.tsv-btn:active { transform: translateY(1px); }
.tsv-btn--accent { background: var(--tsv-color-accent); border-color: var(--tsv-color-accent); color: #fff; }
.tsv-btn--accent:hover { background: var(--tsv-color-accent-hover); border-color: var(--tsv-color-accent-hover); color: #fff; }
.tsv-btn--light { background: #fff; color: var(--tsv-color-dark); }

/* ---- En-tête ---- */
.tsv-header { background: #fff; border-bottom: 1px solid var(--tsv-color-border); position: sticky; top: 0; z-index: 100; }
.tsv-header-inner { display: flex; align-items: center; gap: 1.5rem; min-height: 76px; }
.tsv-branding { display: flex; flex-direction: column; }
.tsv-site-title { font-size: 1.4rem; font-weight: 800; color: var(--tsv-color-dark); }
.tsv-site-desc { font-size: .8rem; color: var(--tsv-color-muted); }
.tsv-nav { margin-left: auto; }
.tsv-menu { display: flex; gap: 1.4rem; list-style: none; margin: 0; padding: 0; }
.tsv-menu a { color: var(--tsv-color-fg); font-weight: 600; padding: .5rem 0; display: inline-block; }
.tsv-menu a:hover { color: var(--tsv-color-accent); }
.tsv-menu .current-menu-item > a { color: var(--tsv-color-accent); }
.tsv-header-actions { display: flex; align-items: center; gap: 1rem; }
.tsv-header-phone { font-weight: 700; color: var(--tsv-color-accent); white-space: nowrap; }
.tsv-lang-switcher { display: flex; gap: .4rem; list-style: none; margin: 0; padding: 0; font-size: .85rem; }
.tsv-lang-switcher .is-current a { font-weight: 800; }
.tsv-nav-toggle { display: none; background: none; border: 0; cursor: pointer; width: 40px; height: 40px; }
.tsv-burger, .tsv-burger::before, .tsv-burger::after {
  display: block; width: 24px; height: 2px; background: var(--tsv-color-dark); position: relative; transition: .2s;
}
.tsv-burger::before, .tsv-burger::after { content: ""; position: absolute; left: 0; }
.tsv-burger::before { top: -7px; } .tsv-burger::after { top: 7px; }

/* ---- Hero ---- */
.tsv-hero { position: relative; min-height: 560px; display: flex; align-items: center; overflow: hidden; background: var(--tsv-color-dark); }
.tsv-hero-media { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 0; }
.tsv-hero-image { background-size: cover; background-position: center; }
.tsv-hero-slider { position: absolute; inset: 0; z-index: 0; }
.tsv-hero-slide { position: absolute; inset: 0; background-size: cover; background-position: center; opacity: 0; transition: opacity 1s; display: flex; align-items: flex-end; }
.tsv-hero-slide.is-active { opacity: 1; }
.tsv-hero-slide-info { background: linear-gradient(transparent, rgba(0,0,0,.7)); color: #fff; padding: 2rem 1.5rem 1rem; width: 100%; display: flex; flex-direction: column; gap: .2rem; }
.tsv-hero-slide-title { font-size: 1.2rem; font-weight: 700; }
.tsv-hero-slide-price { font-size: 1.3rem; font-weight: 800; color: #fff; }
.tsv-hero-overlay { position: relative; z-index: 2; width: 100%; background: linear-gradient(105deg, rgba(15,23,42,.72), rgba(15,23,42,.25)); padding: 4rem 0; }
.tsv-hero-content { color: #fff; }
.tsv-hero-title { color: #fff; font-size: clamp(2rem, 5vw, 3.4rem); margin: 0 0 .5rem; }
.tsv-hero-subtitle { font-size: 1.2rem; margin: 0 0 1.75rem; opacity: .95; }

/* ---- Recherche ---- */
.tsv-search { background: #fff; border-radius: var(--tsv-radius); box-shadow: var(--tsv-shadow-lg); padding: 1.25rem; color: var(--tsv-color-fg); max-width: 860px; }
.tsv-search-modes { display: flex; gap: .25rem; margin-bottom: 1rem; }
.tsv-search-mode { flex: 1; padding: .6rem; border: 1px solid var(--tsv-color-border); background: #fff; border-radius: var(--tsv-radius-sm); font-weight: 600; cursor: pointer; }
.tsv-search-mode.is-active { background: var(--tsv-color-accent); color: #fff; border-color: var(--tsv-color-accent); }
.tsv-search-ai, .tsv-search-filters { display: none; }
.tsv-search-ai.is-active, .tsv-search-filters.is-active { display: block; }
.tsv-search-ai { gap: .5rem; }
.tsv-search-ai.is-active { display: flex; }
.tsv-search-ai input { flex: 1; padding: .8rem 1rem; border: 1px solid var(--tsv-color-border); border-radius: var(--tsv-radius-sm); font: inherit; }
.tsv-search-ai input:focus, .tsv-search-filters input:focus, .tsv-search-filters select:focus { outline: 0; border-color: var(--tsv-color-accent); box-shadow: 0 0 0 3px var(--tsv-color-ring); }
.tsv-filter-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: .75rem; align-items: end; }
.tsv-filter { display: flex; flex-direction: column; gap: .3rem; }
.tsv-filter label { font-size: .8rem; font-weight: 600; color: var(--tsv-color-muted); }
.tsv-filter input, .tsv-filter select { padding: .65rem .75rem; border: 1px solid var(--tsv-color-border); border-radius: var(--tsv-radius-sm); font: inherit; background: #fff; }
.tsv-search-results { margin-top: 1.25rem; }
.tsv-search-loading { text-align: center; color: var(--tsv-color-muted); padding: 1.5rem; }

/* ---- Sections génériques ---- */
.tsv-section { padding: 4rem 0; }
.tsv-section:nth-of-type(even) { background: var(--tsv-color-bg-alt); }
.tsv-section-head { text-align: center; margin-bottom: 2.5rem; }
.tsv-section-title { font-size: clamp(1.6rem, 3vw, 2.2rem); margin: 0 0 .4rem; }
.tsv-section-sub { color: var(--tsv-color-muted); margin: 0; font-size: 1.05rem; }
.tsv-section-more { text-align: center; margin-top: 2rem; }

/* ---- Grille de cartes ---- */
.tsv-grid--cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: var(--tsv-gap); }

/* ---- Carte standard ---- */
.tsv-card { background: #fff; border: 1px solid var(--tsv-color-border); border-radius: var(--tsv-radius); overflow: hidden; display: flex; flex-direction: column; transition: box-shadow .2s, transform .2s; }
.tsv-card:hover { box-shadow: var(--tsv-shadow-sm); transform: translateY(-3px); }
.tsv-card-media { position: relative; aspect-ratio: 4 / 3; overflow: hidden; }
.tsv-card-img { width: 100%; height: 100%; object-fit: cover; transition: transform .4s; }
.tsv-card:hover .tsv-card-img { transform: scale(1.05); }
.tsv-card-badges { position: absolute; top: .75rem; left: .75rem; display: flex; gap: .35rem; flex-wrap: wrap; }
.tsv-card-fav { position: absolute; top: .6rem; right: .6rem; z-index: 3; }
.tsv-card-body { padding: 1.1rem; display: flex; flex-direction: column; gap: .55rem; flex: 1; }
.tsv-card-title { font-size: 1.1rem; margin: 0; }
.tsv-card-title a { color: var(--tsv-color-dark); }
.tsv-card-title a:hover { color: var(--tsv-color-accent); }
.tsv-card-loc { color: var(--tsv-color-muted); font-size: .9rem; margin: 0; }
.tsv-card-pills { display: flex; flex-wrap: wrap; gap: .6rem; margin-top: auto; }
.tsv-card-footer { display: flex; align-items: center; justify-content: space-between; gap: .5rem; border-top: 1px solid var(--tsv-color-border); padding-top: .75rem; margin-top: .25rem; }
.tsv-card-price { font-size: 1.25rem; font-weight: 800; color: var(--tsv-color-dark); }
.tsv-card-price small { font-size: .8rem; font-weight: 500; color: var(--tsv-color-muted); }
.tsv-card-price--na { font-size: 1rem; color: var(--tsv-color-muted); }

/* Carte compacte */
.tsv-card--compact { flex-direction: row; }
.tsv-card--compact .tsv-card-media { width: 40%; aspect-ratio: auto; }
.tsv-card--compact .tsv-card-body { width: 60%; }

/* Carte luxe */
.tsv-card--luxe { position: relative; border: 0; }
.tsv-card--luxe .tsv-card-media { display: block; aspect-ratio: 3 / 4; background-size: cover; background-position: center; }
.tsv-card-luxe-overlay { position: absolute; inset: 0; display: flex; flex-direction: column; justify-content: flex-end; gap: .25rem; padding: 1.5rem; color: #fff; background: linear-gradient(transparent 40%, rgba(0,0,0,.78)); }
.tsv-card-luxe-eyebrow { font-size: .75rem; letter-spacing: .15em; text-transform: uppercase; color: var(--tsv-color-gold); font-weight: 700; }
.tsv-card-luxe-title { font-size: 1.35rem; font-weight: 700; }
.tsv-card-luxe-loc { opacity: .9; }
.tsv-card-luxe-price { font-size: 1.5rem; font-weight: 800; color: var(--tsv-color-gold); margin-top: .35rem; }

/* ---- Badges & pills ---- */
.tsv-badge { display: inline-block; padding: .25rem .6rem; border-radius: 999px; font-size: .72rem; font-weight: 700; text-transform: uppercase; letter-spacing: .03em; }
.tsv-badge--sale { background: var(--tsv-color-accent); color: #fff; }
.tsv-badge--rent { background: var(--tsv-color-success); color: #fff; }
.tsv-badge--type { background: rgba(255,255,255,.92); color: var(--tsv-color-dark); }
.tsv-pill { display: inline-flex; align-items: center; gap: .3rem; font-size: .85rem; color: var(--tsv-color-fg); }
.tsv-pill-icon { opacity: .65; }

/* ---- Onglets ---- */
.tsv-tabs-nav { display: flex; gap: .5rem; justify-content: center; margin-bottom: 2rem; }
.tsv-tab { padding: .6rem 1.4rem; border: 1px solid var(--tsv-color-border); background: #fff; border-radius: 999px; font-weight: 600; cursor: pointer; }
.tsv-tab.is-active { background: var(--tsv-color-dark); color: #fff; border-color: var(--tsv-color-dark); }
.tsv-tab-panel { display: none; }
.tsv-tab-panel.is-active { display: block; }

/* ---- Agence / CTA ---- */
.tsv-agency-grid { display: grid; grid-template-columns: 1.4fr 1fr; gap: 2.5rem; align-items: center; }
.tsv-agency-info p { margin: .2rem 0; }
.tsv-agency-name { font-weight: 700; font-size: 1.1rem; }
.tsv-section--cta { background: var(--tsv-color-dark); color: #fff; text-align: center; }
.tsv-cta-title { color: #fff; font-size: 2rem; margin: 0 0 .5rem; }
.tsv-cta-text { opacity: .9; margin: 0 0 1.5rem; }
.tsv-cta-actions { display: flex; gap: .75rem; justify-content: center; flex-wrap: wrap; }

/* ---- Listing ---- */
.tsv-listing { padding: 2rem 1.25rem 4rem; }
.tsv-listing-head { margin: 1rem 0 1.5rem; }
.tsv-page-title { font-size: clamp(1.7rem, 3vw, 2.4rem); margin: 0 0 .5rem; }
.tsv-listing-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 1rem; margin: 1.5rem 0; flex-wrap: wrap; }
.tsv-listing-count { color: var(--tsv-color-muted); font-weight: 600; }
.tsv-sort { display: flex; align-items: center; gap: .5rem; }
.tsv-sort select { padding: .55rem .75rem; border: 1px solid var(--tsv-color-border); border-radius: var(--tsv-radius-sm); font: inherit; }
.tsv-empty { text-align: center; color: var(--tsv-color-muted); padding: 3rem 1rem; }

/* Pagination */
.tsv-listing-results .page-numbers, .tsv-pagination .page-numbers { display: inline-flex; align-items: center; }
.page-numbers { padding: .5rem .85rem; border: 1px solid var(--tsv-color-border); border-radius: var(--tsv-radius-sm); margin: 1.5rem .15rem 0; font-weight: 600; }
.page-numbers.current { background: var(--tsv-color-accent); color: #fff; border-color: var(--tsv-color-accent); }

/* ---- Fil d'Ariane ---- */
.tsv-breadcrumb ol { display: flex; flex-wrap: wrap; gap: .4rem; list-style: none; margin: 1rem 0; padding: 0; font-size: .85rem; color: var(--tsv-color-muted); }
.tsv-breadcrumb li:not(:last-child)::after { content: "/"; margin-left: .4rem; opacity: .6; }

/* ==========================================================================
   Fiche bien
   ========================================================================== */
.tsv-property { padding-bottom: 4rem; }
.tsv-property-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 1.5rem; padding: 1.5rem 0 1rem; flex-wrap: wrap; }
.tsv-property-badges { display: flex; gap: .4rem; margin-bottom: .6rem; }
.tsv-property-title { font-size: clamp(1.6rem, 3.5vw, 2.4rem); margin: 0 0 .35rem; }
.tsv-property-loc { color: var(--tsv-color-muted); font-size: 1.05rem; margin: 0; }
.tsv-property-head-aside { text-align: right; }
.tsv-property-ref { color: var(--tsv-color-muted); font-size: .85rem; margin: .5rem 0 0; }

.tsv-property-body { display: grid; grid-template-columns: 1fr 380px; gap: 2.5rem; align-items: start; margin-top: 2rem; }
.tsv-property-content { min-width: 0; display: flex; flex-direction: column; gap: 2.5rem; }
.tsv-property-sticky { position: sticky; top: 96px; display: flex; flex-direction: column; gap: 1.25rem; }
.tsv-block-title { font-size: 1.4rem; margin: 0 0 1rem; padding-bottom: .5rem; border-bottom: 2px solid var(--tsv-color-border); }

/* Prix */
.tsv-price { background: var(--tsv-color-bg-alt); border: 1px solid var(--tsv-color-border); border-radius: var(--tsv-radius); padding: 1.25rem 1.5rem; }
.tsv-price-main { font-size: 2rem; font-weight: 800; color: var(--tsv-color-dark); }
.tsv-price-tag { font-size: .9rem; font-weight: 600; color: var(--tsv-color-muted); }
.tsv-price-detail { list-style: none; margin: .75rem 0 0; padding: 0; display: flex; flex-direction: column; gap: .35rem; font-size: .9rem; color: var(--tsv-color-fg); }
.tsv-price-note { color: var(--tsv-color-muted); font-style: italic; font-size: .82rem; }
.tsv-price--na { font-size: 1.2rem; font-weight: 700; color: var(--tsv-color-muted); }

/* Caractéristiques */
.tsv-specs-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 1rem; }
.tsv-spec-cell { background: var(--tsv-color-bg-alt); border-radius: var(--tsv-radius-sm); padding: 1rem; text-align: center; display: flex; flex-direction: column; gap: .25rem; }
.tsv-spec-cell .tsv-spec-icon { font-size: 1.4rem; }
.tsv-spec-cell .tsv-spec-value { font-size: 1.2rem; font-weight: 700; color: var(--tsv-color-dark); }
.tsv-spec-cell .tsv-spec-label { font-size: .8rem; color: var(--tsv-color-muted); }
.tsv-specs-list { list-style: none; margin: 0; padding: 0; }
.tsv-specs-list li, .tsv-spec-line { display: flex; justify-content: space-between; gap: 1rem; padding: .6rem 0; border-bottom: 1px solid var(--tsv-color-border); }
.tsv-specs-list .tsv-spec-label, .tsv-spec-line .tsv-spec-label { color: var(--tsv-color-muted); }
.tsv-specs-list .tsv-spec-value, .tsv-spec-line .tsv-spec-value { font-weight: 600; }
.tsv-specs-columns { columns: 2; column-gap: 2rem; }
.tsv-specs-columns .tsv-spec-line { break-inside: avoid; }
@media (max-width: 560px) { .tsv-specs-columns { columns: 1; } }

/* ---- DPE / GES ---- */
.tsv-dpe-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem; }
@media (max-width: 640px) { .tsv-dpe-grid { grid-template-columns: 1fr; } }
.tsv-dpe-ladder-head { font-weight: 700; margin: 0 0 .5rem; }
.tsv-dpe-ladder-head span { color: var(--tsv-color-muted); font-weight: 500; }
.tsv-dpe-scale { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 3px; }
.tsv-dpe-step { display: flex; align-items: center; justify-content: space-between; padding: .35rem .6rem; color: #1a1a1a; font-weight: 700; border-radius: 3px; position: relative; width: 55%; transition: width .2s; }
.tsv-dpe-step .tsv-dpe-arrow { background: var(--tsv-color-dark); color: #fff; padding: .15rem .5rem; border-radius: 3px; font-size: .8rem; white-space: nowrap; position: absolute; right: -8px; transform: translateX(100%); }
.tsv-dpe-step.is-active { width: 100%; box-shadow: 0 0 0 2px var(--tsv-color-dark); }
/* dégradé A→G (énergie) */
.tsv-dpe-step--a { background: var(--tsv-dpe-a); width: 45%; }
.tsv-dpe-step--b { background: var(--tsv-dpe-b); width: 52%; }
.tsv-dpe-step--c { background: var(--tsv-dpe-c); width: 60%; }
.tsv-dpe-step--d { background: var(--tsv-dpe-d); width: 68%; }
.tsv-dpe-step--e { background: var(--tsv-dpe-e); width: 76%; }
.tsv-dpe-step--f { background: var(--tsv-dpe-f); width: 86%; color: #fff; }
.tsv-dpe-step--g { background: var(--tsv-dpe-g); width: 100%; color: #fff; }
.tsv-dpe-ladder--ges .tsv-dpe-step--a { background: var(--tsv-ges-a); }
.tsv-dpe-ladder--ges .tsv-dpe-step--b { background: var(--tsv-ges-b); }
.tsv-dpe-ladder--ges .tsv-dpe-step--c { background: var(--tsv-ges-c); }
.tsv-dpe-ladder--ges .tsv-dpe-step--d { background: var(--tsv-ges-d); color: #fff; }
.tsv-dpe-ladder--ges .tsv-dpe-step--e { background: var(--tsv-ges-e); color: #fff; }
.tsv-dpe-ladder--ges .tsv-dpe-step--f { background: var(--tsv-ges-f); color: #fff; }
.tsv-dpe-ladder--ges .tsv-dpe-step--g { background: var(--tsv-ges-g); color: #fff; }
.tsv-dpe-ladder-note { font-size: .78rem; color: var(--tsv-color-muted); margin: .5rem 0 0; }
.tsv-dpe-cost { background: var(--tsv-color-bg-alt); padding: .75rem 1rem; border-radius: var(--tsv-radius-sm); font-size: .9rem; margin-top: 1.25rem; }
.tsv-dpe-alert { background: #fef2f2; color: #991b1b; border: 1px solid #fecaca; padding: .75rem 1rem; border-radius: var(--tsv-radius-sm); font-size: .85rem; margin-top: 1rem; }
.tsv-dpe-date { font-size: .8rem; color: var(--tsv-color-muted); margin-top: .75rem; }
.tsv-dpe--na .tsv-dpe-note { color: var(--tsv-color-muted); }
/* badges DPE compacts (cartes) */
.tsv-dpe-badges { display: inline-flex; gap: .3rem; }
.tsv-dpe-badge { font-size: .72rem; font-weight: 700; padding: .2rem .45rem; border-radius: 4px; color: #1a1a1a; }
.tsv-dpe-badge--energy.tsv-dpe-step--f, .tsv-dpe-badge--energy.tsv-dpe-step--g { color: #fff; }
.tsv-ges-step--d, .tsv-ges-step--e, .tsv-ges-step--f, .tsv-ges-step--g { color: #fff; }

/* ---- Galerie ---- */
.tsv-gallery { margin: 1.5rem 0 0; }
.tsv-gallery-main { position: relative; aspect-ratio: 16 / 9; background: #000; border-radius: var(--tsv-radius); overflow: hidden; }
.tsv-gallery-track { position: relative; width: 100%; height: 100%; }
.tsv-gallery-item { position: absolute; inset: 0; margin: 0; opacity: 0; transition: opacity .4s; }
.tsv-gallery-item.is-active { opacity: 1; }
.tsv-gallery-item img { width: 100%; height: 100%; object-fit: cover; cursor: zoom-in; }
.tsv-gallery--single img { width: 100%; border-radius: var(--tsv-radius); }
.tsv-gallery-nav { position: absolute; top: 50%; transform: translateY(-50%); z-index: 4; width: 44px; height: 44px; border-radius: 50%; border: 0; background: rgba(255,255,255,.9); font-size: 1.5rem; cursor: pointer; }
.tsv-gallery-prev { left: 1rem; } .tsv-gallery-next { right: 1rem; }
.tsv-gallery-zoom { position: absolute; bottom: 1rem; right: 1rem; border: 0; background: rgba(255,255,255,.9); width: 40px; height: 40px; border-radius: 8px; cursor: pointer; font-size: 1.1rem; }
.tsv-gallery-counter { position: absolute; bottom: 1rem; left: 1rem; background: rgba(0,0,0,.6); color: #fff; padding: .25rem .6rem; border-radius: 999px; font-size: .85rem; z-index: 4; }
.tsv-gallery-thumbs { display: flex; gap: .5rem; margin-top: .75rem; overflow-x: auto; padding-bottom: .25rem; }
.tsv-gallery-thumb { flex: 0 0 auto; width: 90px; height: 64px; border: 2px solid transparent; border-radius: 6px; overflow: hidden; padding: 0; cursor: pointer; background: none; }
.tsv-gallery-thumb.is-active { border-color: var(--tsv-color-accent); }
.tsv-gallery-thumb img { width: 100%; height: 100%; object-fit: cover; }

/* Lightbox */
.tsv-lightbox { position: fixed; inset: 0; background: rgba(0,0,0,.92); z-index: 9999; display: flex; align-items: center; justify-content: center; }
.tsv-lightbox[hidden] { display: none; }
.tsv-lightbox-img { max-width: 92vw; max-height: 88vh; object-fit: contain; border-radius: 4px; }
.tsv-lightbox-close, .tsv-lightbox-prev, .tsv-lightbox-next { position: absolute; background: rgba(255,255,255,.15); color: #fff; border: 0; cursor: pointer; border-radius: 50%; }
.tsv-lightbox-close { top: 1.25rem; right: 1.25rem; width: 48px; height: 48px; font-size: 1.8rem; }
.tsv-lightbox-prev, .tsv-lightbox-next { top: 50%; transform: translateY(-50%); width: 56px; height: 56px; font-size: 2rem; }
.tsv-lightbox-prev { left: 1.25rem; } .tsv-lightbox-next { right: 1.25rem; }

/* Carte */
.tsv-map-frame { aspect-ratio: 16 / 9; border-radius: var(--tsv-radius); overflow: hidden; border: 1px solid var(--tsv-color-border); }
.tsv-map-frame iframe { width: 100%; height: 100%; border: 0; }
.tsv-map-note { font-size: .8rem; color: var(--tsv-color-muted); margin: .5rem 0 0; }

/* ---- Layout luxe ---- */
.tsv-property--luxe .tsv-luxe-hero { position: relative; }
.tsv-luxe-hero-overlay { position: absolute; bottom: 0; left: 0; right: 0; padding: 3rem 0; background: linear-gradient(transparent, rgba(0,0,0,.7)); color: #fff; pointer-events: none; }
.tsv-luxe-eyebrow { color: var(--tsv-color-gold); text-transform: uppercase; letter-spacing: .15em; font-weight: 700; font-size: .85rem; }
.tsv-luxe-title { color: #fff; font-size: clamp(2rem, 4vw, 3rem); margin: .3rem 0; }
.tsv-luxe-loc { color: #fff; opacity: .9; }
.tsv-luxe-body { padding-top: 2rem; }
.tsv-luxe-price .tsv-price { background: var(--tsv-color-dark); color: #fff; border: 0; }
.tsv-luxe-price .tsv-price-main, .tsv-luxe-price .tsv-block-title { color: var(--tsv-color-gold); }
.tsv-luxe-grid { display: grid; grid-template-columns: 1fr 380px; gap: 2.5rem; margin-top: 2rem; align-items: start; }
.tsv-property--luxe .tsv-block-title { border-color: var(--tsv-color-gold); }
.tsv-property--luxe { font-size: 1.02rem; }

/* ---- Contact fallback ---- */
.tsv-contact-fallback { background: #fff; border: 1px solid var(--tsv-color-border); border-radius: var(--tsv-radius); padding: 1.5rem; }

/* ---- Agence (page) ---- */
.tsv-agency-hero { position: relative; min-height: 320px; background: var(--tsv-color-dark); display: flex; align-items: flex-end; }
.tsv-agency-hero-img { position: absolute; inset: 0; background-size: cover; background-position: center; opacity: .55; }
.tsv-agency-hero-overlay { position: relative; padding: 3rem 0; width: 100%; }
.tsv-agency-hero-title { color: #fff; font-size: clamp(2rem, 4vw, 3rem); margin: 0; }
.tsv-agency-content { padding: 3rem 1.25rem; }

/* ---- Prose ---- */
.tsv-prose { line-height: 1.7; }
.tsv-prose h2, .tsv-prose h3 { margin-top: 1.8rem; }
.tsv-prose img { border-radius: var(--tsv-radius-sm); }

/* ---- Légal ---- */
.tsv-legal-mentions h2 { margin-top: 2rem; }
.tsv-legal-list { list-style: none; padding: 0; margin: 0 0 1rem; }
.tsv-legal-list li { padding: .35rem 0; border-bottom: 1px solid var(--tsv-color-border); }

/* ---- Contenu / sidebar ---- */
.tsv-content-grid { display: grid; grid-template-columns: 1fr 300px; gap: 2.5rem; padding: 2rem 1.25rem; }
.tsv-sidebar .widget { margin-bottom: 2rem; }
.widget-title { font-size: 1.1rem; margin: 0 0 1rem; }
.tsv-posts { display: grid; gap: 1.5rem; }
.tsv-post-card { display: flex; gap: 1.25rem; border-bottom: 1px solid var(--tsv-color-border); padding-bottom: 1.5rem; }
.tsv-post-thumb { flex: 0 0 200px; }
.tsv-post-thumb img { border-radius: var(--tsv-radius-sm); }

/* ---- Pied de page ---- */
.tsv-footer { background: var(--tsv-color-dark); color: #cbd5e1; margin-top: 4rem; padding: 3rem 0 1.5rem; }
.tsv-footer a { color: #e2e8f0; }
.tsv-footer .widget-title, .tsv-footer h2 { color: #fff; }
.tsv-footer-widgets { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 2rem; padding-bottom: 2rem; border-bottom: 1px solid rgba(255,255,255,.1); }
.tsv-footer-menu, .tsv-legal-menu { list-style: none; padding: 0; margin: 0; }
.tsv-footer-menu li { padding: .25rem 0; }
.tsv-footer-bottom { display: flex; justify-content: space-between; align-items: center; gap: 1rem; flex-wrap: wrap; padding-top: 1.5rem; font-size: .85rem; }
.tsv-legal-menu { display: flex; gap: 1rem; }

/* ---- 404 ---- */
.tsv-404 { text-align: center; padding: 5rem 1.25rem; }
.tsv-404-code { font-size: 6rem; margin: 0; color: var(--tsv-color-accent); }

/* ==========================================================================
   Responsive
   ========================================================================== */
@media (max-width: 980px) {
  .tsv-property-body, .tsv-luxe-grid { grid-template-columns: 1fr; }
  .tsv-property-sticky { position: static; }
  .tsv-content-grid { grid-template-columns: 1fr; }
  .tsv-agency-grid { grid-template-columns: 1fr; }
}
@media (max-width: 768px) {
  .tsv-nav-toggle { display: block; order: 3; }
  .tsv-nav { margin-left: 0; }
  .tsv-menu { display: none; position: absolute; top: 100%; left: 0; right: 0; background: #fff; flex-direction: column; padding: 1rem 1.25rem; border-bottom: 1px solid var(--tsv-color-border); box-shadow: var(--tsv-shadow-sm); }
  .tsv-nav.is-open .tsv-menu { display: flex; }
  .tsv-header-inner { flex-wrap: wrap; position: relative; }
  .tsv-header-actions { margin-left: auto; }
  .tsv-card--compact { flex-direction: column; }
  .tsv-card--compact .tsv-card-media, .tsv-card--compact .tsv-card-body { width: 100%; }
  .tsv-post-card { flex-direction: column; }
  .tsv-post-thumb { flex-basis: auto; }
}
