*{margin:0;padding:0;box-sizing:border-box;scrollbar-width:none}
::-webkit-scrollbar{display:none}
:root{
  /* Surfaces */
  --bg:#f3f5f7;
  --bg-elev:#ffffff;
  --surface:#ffffff;
  --surface2:#edf1f4;
  --surface3:#e4eaf0;
  --surface-inverse:#121820;

  /* Borders */
  --border:rgba(18,24,32,.07);
  --border2:rgba(18,24,32,.13);
  --border-strong:rgba(18,24,32,.2);

  /* Ink */
  --ink:#121820;
  --text:var(--ink);
  --text2:#52606c;
  --text3:#5f6b76;

  /* Precision Hybrid accents */
  --accent:#0068ff;
  --accent-deep:#0047b8;
  --accent-soft:rgba(0,104,255,.08);
  --green:#16836a;
  --red:#c8102e;
  --blue:#0068ff;
  --warning:#b7791f;
  --positive:#16836a;
  --rose:var(--accent);
  --rose-deep:var(--accent-deep);
  --rose-fill:rgba(0,104,255,.18);
  --rose-hover:rgba(0,104,255,.1);

  /* Geometry */
  --radius:14px;
  --radius-control:10px;
  --shadow-card:0 12px 32px rgba(18,24,32,.08),0 2px 8px rgba(18,24,32,.05);

  /* Typography */
  --font-sans:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
  --font-display:'Manrope','Inter',-apple-system,sans-serif;
  --font-serif:var(--font-display);
}
/* Toolbar tokens — roles, tints, geometry */
:root{
  /* Vote = curation : favori bleu électrique / corbeille graphite. */
  --role-vote-positive:var(--rose);--role-vote-negative:var(--red);--role-comment:var(--blue);
  --role-cta-primary:var(--accent);--role-cta-restore:var(--accent);--role-destructive:var(--red);--role-quiet:var(--text3);
  --tint-positive-bg:rgba(22,131,106,.08);--tint-positive-border:rgba(22,131,106,.3);--tint-positive-hover:rgba(22,131,106,.14);--tint-positive-fill:rgba(22,131,106,.2);
  --tint-negative-bg:rgba(200,16,46,.07);--tint-negative-border:rgba(200,16,46,.28);--tint-negative-hover:rgba(200,16,46,.11);--tint-negative-fill:rgba(200,16,46,.14);
  --tint-comment-bg:rgba(0,104,255,.07);--tint-comment-border:rgba(0,104,255,.28);--tint-comment-hover:rgba(0,104,255,.11);
  --tint-destructive-hover:rgba(200,16,46,.1);
  --toolbar-button-min:40px;--toolbar-icon-size:18px;--toolbar-icon-size-detail:20px;--toolbar-radius:12px;--toolbar-gap:4px;--toolbar-cluster-gap:6px
}
body{font-family:var(--font-sans);background:var(--bg);color:var(--text);overflow:hidden;height:100dvh;-webkit-font-smoothing:antialiased}

#view-board{display:flex;flex-direction:column;height:100%;overflow:hidden;position:relative}
#view-detail{display:none;height:100dvh;overflow-y:auto;-webkit-overflow-scrolling:touch;background:var(--surface);scrollbar-width:none}
#view-detail::-webkit-scrollbar{display:none}
#view-detail.slide-in{animation:detailSlideIn .3s cubic-bezier(.25,.46,.45,.94) forwards}
@keyframes detailSlideIn{from{opacity:0}to{opacity:1}}

/* Header — minimal */
.header{padding:18px 20px 10px;flex-shrink:0}
.header-top{display:flex;align-items:baseline;justify-content:space-between}
.header h1{font-size:.95em;font-weight:600;color:var(--accent);letter-spacing:-.02em}

.view-title{font-family:var(--font-serif);font-size:32px;font-weight:400;color:var(--ink);padding:28px 20px 8px;letter-spacing:-.02em;line-height:1.05;display:flex;align-items:center;gap:6px}
.view-title-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.view-title-actions{flex-shrink:0;display:flex;align-items:center;gap:8px;margin-left:auto}
.view-back{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:50%;color:var(--text2);cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background .15s;flex-shrink:0}
.view-back:active{background:var(--surface3)}
/* Sort bar */
.filter-bar{display:flex;gap:8px;padding:8px 20px 12px;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;flex-shrink:0;align-items:center}
.filter-bar::-webkit-scrollbar{display:none}
.filter-bar:empty{display:none}
.filter-chip{display:inline-flex;align-items:center;gap:4px;padding:7px 14px;border-radius:999px;background:var(--surface3);border:1.5px solid transparent;color:var(--text2);font-size:.74em;font-weight:500;white-space:nowrap;cursor:pointer;transition:all .2s;flex-shrink:0;-webkit-tap-highlight-color:transparent;font-family:inherit}
.filter-chip:active{transform:scale(.96)}
.filter-chip.active{background:rgba(0,104,255,.1);border-color:rgba(0,104,255,.3);color:var(--accent);font-weight:600}
.filter-chip svg{width:14px;height:14px;flex-shrink:0}
.filter-clear{color:var(--accent);font-size:.72em;font-weight:600;white-space:nowrap;cursor:pointer;padding:7px 10px;flex-shrink:0;border:none;background:none;font-family:inherit;-webkit-tap-highlight-color:transparent}
.filter-clear:active{opacity:.6}
.filter-dropdown-overlay{position:fixed;inset:0;z-index:149;background:transparent}
.filter-dropdown{position:fixed;z-index:150;background:var(--surface);border-radius:var(--radius);border:1px solid var(--border2);box-shadow:0 8px 32px rgba(0,0,0,.12),0 2px 8px rgba(0,0,0,.06);padding:14px;min-width:220px;max-width:calc(100vw - 40px);max-height:60vh;overflow-y:auto;animation:ddIn .2s ease}
@keyframes ddIn{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}
.filter-dd-title{font-size:.72em;font-weight:600;color:var(--text3);text-transform:uppercase;letter-spacing:.06em;margin-bottom:10px}
.filter-sort-option{display:flex;align-items:center;justify-content:space-between;padding:11px 12px;border-radius:10px;cursor:pointer;transition:background .15s;-webkit-tap-highlight-color:transparent}
.filter-sort-option:active{background:var(--surface3)}
.filter-sort-option.selected{background:rgba(0,104,255,.06)}
.filter-sort-label{font-size:.84em;color:var(--text);font-weight:500}
.filter-sort-option.selected .filter-sort-label{color:var(--accent);font-weight:600}
.filter-sort-check{width:18px;height:18px;color:var(--accent);opacity:0;transition:opacity .15s}
.filter-sort-option.selected .filter-sort-check{opacity:1}

/* Bottom nav */
.column-tabs{display:flex;background:var(--surface);border-top:1px solid var(--border2);flex-shrink:0}
.column-tabs button{flex:1;padding:8px 0 6px;background:none;border:none;color:#66727e;cursor:pointer;transition:color .2s;display:flex;flex-direction:column;align-items:center;gap:4px;position:relative;overflow:visible;transform:translateZ(0);-webkit-tap-highlight-color:transparent}
.column-tabs button.active{color:var(--accent)}
.column-tabs button svg{width:26px;height:26px;transition:transform .35s cubic-bezier(.34,1.56,.64,1),color .18s ease,filter .18s ease,stroke-width .18s ease;stroke-width:1.6}
.tab-label,.column-tabs .count{display:inline-block;transition:transform .35s cubic-bezier(.34,1.56,.64,1),color .18s ease,opacity .18s ease}
.column-tabs button.active svg{transform:scale(1.12);stroke-width:2.2}
.column-tabs button.pop svg{animation:navShrink .4s cubic-bezier(.4,0,.2,1)}
.column-tabs button.pop .tab-label,.column-tabs button.pop .count{animation:navShrinkLabel .4s cubic-bezier(.4,0,.2,1)}
.column-tabs button.fx-top svg{color:var(--positive);filter:drop-shadow(0 0 8px rgba(61,126,94,.28))}
.column-tabs button.fx-visit svg{color:var(--positive);filter:drop-shadow(0 0 8px rgba(61,126,94,.28))}
.column-tabs button.fx-trash svg{color:var(--red);filter:drop-shadow(0 0 8px rgba(194,85,80,.26))}
.column-tabs button.fx-top .tab-label,.column-tabs button.fx-top .count{color:var(--positive);opacity:1}
.column-tabs button.fx-visit .tab-label,.column-tabs button.fx-visit .count{color:var(--positive);opacity:1}
.column-tabs button.fx-trash .tab-label,.column-tabs button.fx-trash .count{color:var(--red);opacity:1}
@keyframes navShrink{0%{transform:scale(1)}30%{transform:scale(.7)}100%{transform:scale(1.12)}}
@keyframes navShrinkLabel{0%{transform:scale(1)}30%{transform:scale(.75)}100%{transform:scale(1)}}
.tab-label{font-size:.82em;font-weight:500;letter-spacing:.02em}
.column-tabs button.active .tab-label{font-weight:700}
.column-tabs .count{font-size:.9em;opacity:.75;font-weight:700}
/* Bottom bar profil tab */

/* Board */
.board{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.3fr) minmax(0,1fr);grid-template-rows:1fr;gap:10px;padding:0 10px 10px;flex:1;overflow:hidden;min-height:0}
.column{display:flex;flex-direction:column;background:var(--surface2);border-radius:var(--radius);overflow:hidden;min-height:0}
.column-header{padding:14px 16px;font-weight:500;font-size:.7em;background:transparent;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;flex-shrink:0;text-transform:uppercase;letter-spacing:.05em;color:var(--text3)}
.column-header .col-count{opacity:.4;font-weight:400}
.column-cards{flex:1;overflow-y:auto;padding:52px 10px 10px;scroll-padding-top:52px;scroll-padding-bottom:10px;display:flex;flex-direction:column;gap:44px;position:relative}
.ptr-indicator{position:absolute;top:-44px;left:50%;transform:translateX(-50%);width:36px;height:36px;border-radius:50%;background:var(--surface);box-shadow:0 2px 8px rgba(0,0,0,.12);display:flex;align-items:center;justify-content:center;z-index:1;opacity:0;transition:opacity .2s}
.ptr-indicator.visible{opacity:1}
.ptr-indicator svg{width:20px;height:20px;stroke:var(--text3);fill:none;stroke-width:2;stroke-linecap:round;transition:transform .2s}
.ptr-indicator.ready svg{stroke:var(--accent)}
.ptr-indicator .ptr-spinner{width:20px;height:20px;border:2.5px solid var(--border2);border-top-color:var(--accent);border-radius:50%;animation:ptrSpin .6s linear infinite}
@keyframes ptrSpin{to{transform:rotate(360deg)}}
.col-deck .column-header{color:var(--blue)}
.col-favoris .column-header{color:var(--accent)}
.col-corbeille .column-header{color:var(--text3)}
.col-corbeille{background:var(--bg)}

/* ── Cards — image-led, magazine feel ── */
.card{background:var(--surface);border-radius:var(--radius);border:1.5px solid rgba(0,0,0,.1);overflow:hidden;transition:transform .25s ease,box-shadow .3s ease;cursor:pointer;flex-shrink:0;position:relative;box-shadow:0 2px 6px rgba(0,0,0,.15);-webkit-tap-highlight-color:transparent}
.card.pulse-like{animation:pulseLike .5s cubic-bezier(.22,.61,.36,1)}
.card.pulse-dislike{animation:pulseDislike .5s cubic-bezier(.22,.61,.36,1)}
/* Favori = micro-recompense doree ; ecarte = silencieux (simple scale neutre). */
@keyframes pulseLike{0%{transform:scale(1)}25%{transform:scale(1.02);box-shadow:0 0 0 4px rgba(61,126,94,.42)}100%{transform:scale(1);box-shadow:0 2px 6px rgba(0,0,0,.15)}}
@keyframes pulseDislike{0%{transform:scale(1)}25%{transform:scale(1.008)}100%{transform:scale(1);box-shadow:0 2px 6px rgba(0,0,0,.15)}}
.col-deck{background:var(--bg)}
.col-favoris{background:var(--bg)}
.card.stripe-top{border-color:var(--accent)}
/* Favoris (stripe-visit) : pas de lisere colore — bordure neutre par defaut de .card */
.card-img-placeholder{width:100%;height:150px;display:flex;align-items:center;justify-content:center;background:var(--surface2)}
.card-img{width:100%;height:150px;object-fit:cover;display:block;background:var(--surface3)}
.card-gallery{position:relative;overflow:hidden;height:150px;background:var(--surface3)}
.card-gallery-track{display:flex;height:100%;transition:transform .35s cubic-bezier(.25,.46,.45,.94);will-change:transform}
.card-gallery-track.dragging{transition:none}
.card-gallery-track img{width:100%;height:100%;object-fit:cover;flex-shrink:0}
.card-gallery-dots{position:absolute;bottom:6px;left:50%;transform:translateX(-50%);display:flex;gap:4px}
.card-gallery-dots span{width:5px;height:5px;border-radius:50%;background:rgba(255,255,255,.4)}
.card-gallery-dots span.active{background:#fff}
/* Partage en overlay (carte favori) : verre givre blanc + icone foncee — harmonise avec .detail-overlay-btn de la vue detail. */
.card-fav-share{position:absolute;top:10px;right:10px;z-index:3;width:34px;height:34px;border-radius:50%;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text);background:rgba(255,255,255,.92);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);box-shadow:0 2px 8px rgba(0,0,0,.18);-webkit-tap-highlight-color:transparent;transition:transform .1s ease}
.card-fav-share:active{transform:scale(.94)}
.card-fav-share svg{width:17px;height:17px}
.card-body{padding:14px 16px 6px}
.toolbar .btn-primary--visit{background:var(--accent);border:1.5px solid var(--accent);color:#fff;font-weight:600;padding:6px 10px;min-height:auto;font-size:.72em;border-radius:8px}
.col-favoris .toolbar[data-context="card"]{gap:2px;padding:6px 16px}
.col-favoris .toolbar[data-context="card"] .toolbar-cluster{gap:2px}
/* Share retire de la toolbar (overlay photo) : le status se centre dans l'espace restant. */
.col-favoris .toolbar[data-context="card"] .toolbar-cluster--actions{display:none}
.col-favoris .toolbar[data-context="card"] .toolbar-cluster--reactions{flex:1}
.col-favoris .toolbar[data-context="card"] .btn-primary--visit{justify-content:space-between;margin-left:auto}
.btn-primary--visit[data-has-dropdown] .btn-primary__label{display:inline-grid;grid-template-columns:auto}
.btn-primary--visit[data-has-dropdown] .btn-primary__label > *{grid-area:1/1}
.btn-primary--visit[data-has-dropdown] .btn-primary__label-sizer{visibility:hidden;pointer-events:none}
.btn-primary--visit[data-has-dropdown] .btn-primary__label{justify-items:center}
.btn-primary--visit[data-has-dropdown] .btn-primary__label-text{text-align:center;white-space:nowrap}
.toolbar .btn-primary--visit.btn-primary--go{background:#fff;color:var(--accent)}
.toolbar .btn-primary--go .btn-primary__icon{animation:arrowNudge 2.4s ease-in-out infinite}
@media(hover:hover){.toolbar .btn-primary--go:hover .btn-primary__icon{animation:none;transform:translateX(3px);transition:transform .2s ease}}
@keyframes arrowNudge{0%,70%,100%{transform:translateX(0)}85%{transform:translateX(3px)}}
.card-price-row{display:flex;align-items:baseline;gap:6px;margin-bottom:2px}
.card-price{font-size:1.1em;font-weight:700;color:var(--text);letter-spacing:-.02em}
.card-old-price{font-size:.72em;color:var(--text3);text-decoration:line-through;font-weight:400}
.card-title{font-size:.8em;font-weight:400;color:var(--text2);display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;line-height:1.4;margin-bottom:4px}
.card-loc{font-size:.72em;color:var(--text3);margin-bottom:14px}
.card-chips{display:flex;gap:4px;flex-wrap:wrap;margin-bottom:18px}
.card-pubdate{font-size:.64em;color:var(--text3);margin-bottom:16px}
.chip{padding:3px 8px;border-radius:8px;font-size:.66em;font-weight:500;background:var(--surface3);color:var(--text2)}
.badge{padding:3px 8px;border-radius:8px;font-size:.66em;font-weight:500}
.badge-certified{background:rgba(61,126,94,.12);color:var(--green);font-weight:700}
.src-seloger{background:#fef3e2;color:#9a6b28}.src-leboncoin{background:#fef8e2;color:#8a7530}.src-bienici{background:#e8f5ec;color:#3d7e5e}
.dpe-A{background:#e8f5ec;color:#2e7d46}.dpe-B{background:#ecf5e8;color:#4a8a3a}.dpe-C{background:#f2f5e2;color:#6a8a2a}
.dpe-D{background:#fef8e2;color:#8a7a2a}.dpe-E{background:#fef0e2;color:#9a6a2a}.dpe-F{background:#fee8de;color:#a85a30}.dpe-G{background:#fce4e2;color:#a84a48}
/* Ruban « Plus en ligne » : le favori retire du marche reste visible dans le
   suivi (gris = inactif, meme geometrie que le ruban Vendue). */
.card-offline-overlay{position:absolute;inset:0;z-index:5;pointer-events:none}
.card-offline-overlay span{position:absolute;top:16px;left:-36px;transform:rotate(-45deg);background:var(--text2);color:#fff;font-size:.64em;font-weight:800;letter-spacing:.12em;text-transform:uppercase;padding:5px 42px;box-shadow:0 2px 6px rgba(0,0,0,.28);text-align:center;line-height:1;white-space:nowrap}
.availability-missing_unconfirmed span,.availability-historical_unavailable span{background:var(--blue)}
.availability-out_of_scope span{background:#9a7b4f}
.detail-availability{width:max-content;max-width:100%;margin:10px auto 4px;padding:7px 12px;border-radius:999px;background:var(--surface3);color:var(--text2);font-size:.75em;font-weight:700}
.price-history{max-width:480px;margin:14px auto 0}
.price-history:empty{display:none}
.price-history-title{font-size:.72em;font-weight:700;color:var(--text3);text-transform:uppercase;letter-spacing:.06em;margin-bottom:6px}
.price-history-row{display:flex;justify-content:space-between;gap:12px;padding:7px 0;border-top:1px solid var(--border2);font-size:.76em;color:var(--text2)}
.price-history-row strong{color:var(--ink);white-space:nowrap}
/* Ruban « VENDUE » sur la vignette (statut visit_status='vendue'). Le span deborde
   en coin haut-gauche et est clippe par l'overflow:hidden de la carte. Pas de tint
   sur tout la carte (le corps blanc reste clair). */
.card-vendue-overlay{position:absolute;inset:0;z-index:5;pointer-events:none}
.card-vendue-overlay span{position:absolute;top:16px;left:-36px;transform:rotate(-45deg);background:var(--accent);color:#fff;font-size:.64em;font-weight:800;letter-spacing:.12em;text-transform:uppercase;padding:5px 42px;box-shadow:0 2px 6px rgba(0,0,0,.28);text-align:center;line-height:1}
.card-footer{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:16px 14px 14px}
.card-id{font-size:.6em;color:var(--text3);font-family:'Inter',sans-serif;opacity:.5}
.card-meta{display:flex;align-items:center;gap:8px;min-width:0}
.card-actions{display:flex;gap:5px;flex-wrap:wrap;justify-content:flex-end}
.card-actions button{height:32px;min-width:32px;border-radius:10px;border:1px solid rgba(0,0,0,.08);background:var(--surface);font-size:.85em;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease;color:var(--text2);padding:0 8px}
.card-actions button:active{transform:scale(.92)}
.btn-like-count{gap:4px;padding:0 10px!important;color:var(--text2)!important;background:var(--surface)!important;border:1px solid rgba(0,0,0,.08)!important}
.btn-like-count.liked{color:var(--positive)!important;background:rgba(61,126,94,.10)!important}
.btn-like-count.disliked{color:var(--red)!important;background:rgba(194,85,80,.10)!important}
.btn-like-count .like-num,.btn-like-count .comment-num{font-size:.75em;font-weight:600}
.btn-comment.has-comments{color:var(--blue)!important;background:rgba(78,127,170,.08)!important;border-color:rgba(78,127,170,.16)!important}
.btn-pill{padding:0 12px!important;font-size:.7em!important;font-weight:600;white-space:nowrap;color:var(--text)}
.card-vote-ro{display:flex;align-items:center;gap:3px;font-size:.72em;color:var(--text3);opacity:.5}
/* Header icons */
.header-actions{position:absolute;top:28px;right:20px;z-index:50;display:flex;align-items:center;gap:4px}
.header-help{width:36px;height:36px;display:flex;align-items:center;justify-content:center;border-radius:50%;cursor:pointer;color:var(--text2);transition:background .15s;-webkit-tap-highlight-color:transparent}
.header-help:active{background:var(--surface3)}
.header-profil{width:36px;height:36px;display:flex;align-items:center;justify-content:center;border-radius:50%;cursor:pointer;transition:transform .15s;-webkit-tap-highlight-color:transparent}
.header-profil:active{transform:scale(.92)}
#headerProfilAvatar{width:28px;height:28px;border-radius:50%;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:.78em;font-weight:700;line-height:1;box-shadow:0 0 0 2px transparent;transition:box-shadow .2s ease}
/* Profil */
.profil{padding:28px 20px 80px}
.profil-head{display:flex;align-items:center;gap:14px;margin-bottom:14px}
.profil-avatar{width:48px;height:48px;border-radius:50%;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:1.2em;font-weight:700;flex-shrink:0}
.profil-name{font-size:1.1em;font-weight:600;color:var(--text)}
.profil-metrics{display:flex;gap:10px;margin-bottom:28px}
.profil-metric{flex:1;background:var(--surface);border-radius:14px;padding:14px;text-align:center;box-shadow:0 1px 4px rgba(0,0,0,.04)}
.profil-metric-num{font-size:1.3em;font-weight:700;color:var(--text)}
.profil-metric-label{font-size:.68em;color:var(--text3);margin-top:2px}
.profil-section-title{font-size:.7em;font-weight:500;color:var(--text3);text-transform:uppercase;letter-spacing:.06em;margin-bottom:12px}
.profil-activity{display:flex;flex-direction:column;gap:1px;background:var(--surface);border-radius:14px;overflow:hidden;box-shadow:0 1px 4px rgba(0,0,0,.04)}
.profil-act{display:flex;align-items:center;gap:10px;padding:12px 14px;cursor:pointer;transition:background .15s}
.profil-act:active{background:var(--surface3)}
.profil-act-icon{flex-shrink:0;color:var(--text3)}
.profil-act-icon.act-like{color:var(--positive)}
.profil-act-icon.act-dislike{color:var(--red)}
.profil-act-icon.act-comment{color:var(--blue)}
.profil-act-text{flex:1;min-width:0;font-size:.82em;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.profil-act-time{font-size:.68em;color:var(--text3);flex-shrink:0}
.profil-logout{display:block;width:100%;margin-top:32px;padding:12px;background:none;border:1px solid var(--border);border-radius:12px;color:var(--text3);font-size:.82em;font-weight:500;cursor:pointer;transition:all .15s}
.profil-logout:active{background:var(--surface3);color:var(--red)}
/* Profil slim : la deconnexion remonte en ligne, a droite du prenom. */
.profil-head .profil-logout{width:auto;margin:0 0 0 auto;padding:8px 14px;font-size:.78em;border-radius:10px}

/* Comments */
.detail-comments-section{margin-top:8px}
.detail-comments-section .feed-reactions-log{padding:0 0 0 48px;margin:0 0 12px;background:none;border:none;border-radius:0;gap:6px}
.comments-section-head{display:flex;justify-content:space-between;align-items:center;gap:14px;margin-bottom:16px}
.comments-summary{display:inline-block;background:var(--surface3);color:var(--text2);padding:2px 8px;border-radius:999px;font-size:.65em;font-weight:600;vertical-align:middle;margin-left:6px;text-transform:none;letter-spacing:0;line-height:1.4}
.comments-shell{display:flex;flex-direction:column;gap:16px}
.comments-panel:empty{display:none}
.comments-inline-note{margin-bottom:10px;padding:11px 13px;border-radius:14px;background:rgba(78,127,170,.08);color:var(--blue);font-size:.76em;line-height:1.5}
.comments-state{padding:18px 18px 16px;border-radius:18px;background:var(--surface3);color:var(--text2)}
.comments-state-title{font-size:.86em;font-weight:600;color:var(--text);margin-bottom:4px}
.comments-state-copy{font-size:.78em;line-height:1.6;color:var(--text3)}
.comments-skeleton{display:flex;flex-direction:column;gap:10px;margin-bottom:12px}
.comment-skeleton-row{height:11px;border-radius:999px;background:linear-gradient(90deg,rgba(0,0,0,.04) 25%,rgba(0,0,0,.08) 50%,rgba(0,0,0,.04) 75%);background-size:200% 100%;animation:shimmer 1.5s ease-in-out infinite}
.comment-skeleton-row.short{width:62%}
@keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}
.comment-delete{background:none;border:none;color:var(--text3);cursor:pointer;padding:2px 4px;border-radius:6px;opacity:.4;transition:color .15s,opacity .15s,background .15s;display:flex;align-items:center;margin-left:auto;flex-shrink:0}
.comment-delete:hover,.comment-delete:active{color:var(--red);opacity:1;background:rgba(194,85,80,.08)}
.comment-delete svg{width:14px;height:14px}
.comment-kebab,.feed-kebab{background:none;border:none;color:var(--text3);cursor:pointer;padding:2px 4px;border-radius:6px;opacity:.5;transition:color .15s,opacity .15s,background .15s;display:inline-flex;align-items:center;margin-left:auto;flex-shrink:0}
.comment-kebab:hover,.comment-kebab:active,.feed-kebab:hover,.feed-kebab:active{color:var(--text);opacity:1;background:var(--surface3)}
.comment-edited{font-size:.68em;color:var(--text3);font-style:italic}
.comment-menu{position:fixed;background:var(--surface);border:1px solid var(--border2);border-radius:10px;box-shadow:0 4px 16px rgba(0,0,0,.12);z-index:100;overflow:hidden;min-width:140px}
.comment-menu button{display:block;width:100%;padding:10px 20px;border:none;background:none;font-size:.78em;font-weight:500;color:var(--text2);cursor:pointer;text-align:left;white-space:nowrap;font-family:inherit}
.comment-menu button:active,.comment-menu button:hover{background:var(--surface3);color:var(--text)}
.comment-menu-sep{height:1px;background:var(--border2);margin:4px 0}
.comment-menu button.menu-item-remove{color:var(--red)}
.comment-menu button.menu-item-remove:hover,.comment-menu button.menu-item-remove:active{background:rgba(194,85,80,.08);color:var(--red)}
.comment-edit-wrap{margin-top:6px}
.comment-edit-area{width:100%;min-height:60px;padding:10px 12px;border:1px solid var(--border2);border-radius:10px;background:var(--surface);color:var(--text);font-family:inherit;font-size:.82em;line-height:1.45;resize:none;outline:none;box-sizing:border-box}
.comment-edit-area:focus{border-color:var(--accent);box-shadow:0 0 0 2px rgba(0,104,255,.12)}
.comment-edit-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:6px}
.comment-edit-actions button{padding:6px 14px;border:1px solid var(--border2);border-radius:8px;background:var(--surface);color:var(--text2);font-size:.76em;font-weight:500;cursor:pointer;font-family:inherit}
.comment-edit-actions .comment-edit-save{background:var(--accent);color:#fff;border-color:var(--accent)}
.comment-edit-actions .comment-edit-save:hover{filter:brightness(1.08)}
.comment-edit-actions .comment-edit-cancel:hover{background:var(--surface3)}
.feed-kebab svg{width:14px;height:14px}
.feed-entry .feed-entry-head{display:flex;align-items:center;gap:4px 6px;flex-wrap:wrap}
.comments{display:flex;flex-direction:column;gap:10px}
.comment{display:flex;gap:12px;align-items:flex-start;padding:14px;border-radius:18px;background:var(--surface);border:none;box-shadow:none}
.comment-own{background:#f2f7ff;border-color:rgba(0,104,255,.14)}
.comment-pending{opacity:.72}
.comment-avatar{width:36px;height:36px;border-radius:14px;background:var(--surface3);color:var(--text2);display:flex;align-items:center;justify-content:center;font-size:.78em;font-weight:700;letter-spacing:.02em;flex-shrink:0}
.comment-avatar-self{background:var(--accent);color:#fff}
.comment-body{flex:1;min-width:0}
.comment-head{display:flex;align-items:center;flex-wrap:wrap;gap:6px 8px;margin-bottom:6px}
.comment-user{font-size:.8em;font-weight:600;color:var(--text)}
.comment-badge{padding:2px 8px;border-radius:999px;background:rgba(0,104,255,.12);color:var(--accent);font-size:.64em;font-weight:700;text-transform:uppercase;letter-spacing:.04em}
.comment-time{font-size:.68em;color:var(--text3)}
.comment-status{padding:2px 8px;border-radius:999px;background:rgba(78,127,170,.08);color:var(--blue);font-size:.64em;font-weight:700;letter-spacing:.03em}
.comment-text{font-size:.84em;color:var(--text2);line-height:1.72;word-break:break-word}
.comment-composer-slot{position:relative}
.comment-composer-card{padding:0;border-radius:0;background:none;border:none;box-shadow:none}
.comment-composer-field{border:1px solid var(--border2);border-radius:14px;background:var(--surface);padding:11px 13px;transition:border-color .2s ease,box-shadow .2s ease}
.comment-composer-field:focus-within{border-color:rgba(0,104,255,.38);box-shadow:0 0 0 4px rgba(0,104,255,.08)}
.comment-composer-field textarea{width:100%;min-height:28px;max-height:180px;resize:none;border:none;background:transparent;font-size:.84em;line-height:1.65;color:var(--text);font-family:inherit;outline:none}
.comment-composer-field textarea::placeholder{color:var(--text3)}
.comment-form-error{margin-top:9px;font-size:.75em;color:var(--red);line-height:1.5}
.comment-composer-actions{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:12px}
.comment-composer-actions-simple{justify-content:flex-end}
.comment-composer-hint{font-size:.72em;color:var(--text3);line-height:1.4}
.comment-composer-actions button{padding:10px 14px;border:none;border-radius:12px;background:var(--accent);color:#fff;font-size:.78em;font-weight:700;cursor:pointer;font-family:inherit;flex-shrink:0;transition:transform .15s ease,opacity .15s ease}
.comment-composer-actions button:active{transform:scale(.97)}
.comment-composer-actions button:disabled{opacity:.45;cursor:default}

.card.fadeout{animation:fadeOut .52s cubic-bezier(.24,.78,.22,1) forwards}
@keyframes fadeOut{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:translateY(-4px) scale(.94)}}
.card.departing{position:relative;z-index:2}
.card.reflowing{transition:transform .94s cubic-bezier(.22,.61,.36,1),box-shadow .3s ease;will-change:transform}
.card.just-moved-1{animation:hl-blue 2s ease-out}
.card.just-moved-2{animation:hl-positive 2s ease-out}
.card.just-moved-3{animation:hl-neutral 2s ease-out}
.card.just-moved-0{animation:hl-neutral 2s ease-out}
@keyframes hl-blue{0%{box-shadow:0 0 0 2px rgba(78,127,170,.3)}100%{box-shadow:0 1px 2px rgba(0,0,0,.04)}}
@keyframes hl-positive{0%{box-shadow:0 0 0 2px rgba(61,126,94,.3)}100%{box-shadow:0 1px 2px rgba(0,0,0,.04)}}
@keyframes hl-neutral{0%{box-shadow:0 0 0 2px rgba(0,0,0,.08)}100%{box-shadow:0 1px 2px rgba(0,0,0,.04)}}
.no-results{text-align:center;padding:60px 20px;color:#000;font-size:.82em}

/* Toast */
.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:var(--accent);color:#fff;padding:14px 18px;border-radius:14px;display:none;z-index:300;font-size:.82em;gap:12px;align-items:center;justify-content:space-between;box-shadow:0 6px 20px rgba(0,0,0,.15);overflow:hidden;white-space:nowrap;width:auto;max-width:calc(100% - 40px)}
.toast.show{display:flex}
.toast-progress{position:absolute;bottom:0;left:0;height:3px;background:rgba(255,255,255,.35);border-radius:0 0 14px 14px;animation:toastCountdown 4s linear forwards}
@keyframes toastCountdown{from{width:0%}to{width:100%}}
.toast button{background:rgba(255,255,255,.2);border:none;color:#fff;padding:6px 14px;border-radius:8px;cursor:pointer;font-size:.8em;font-weight:500}

/* Carousel */
.carousel{position:relative;background:#1a1a1e;overflow:hidden;touch-action:pan-y;-webkit-user-select:none;user-select:none;border-radius:0 0 var(--radius) var(--radius)}
.carousel-track{display:flex;transition:transform .35s cubic-bezier(.25,.46,.45,.94)}
.carousel-track.dragging{transition:none}
.carousel-track img{width:100%;object-fit:contain;flex-shrink:0;pointer-events:none}
.carousel-btn{position:absolute;top:50%;transform:translateY(-50%);width:40px;height:40px;border-radius:50%;background:rgba(255,255,255,.15);backdrop-filter:blur(8px);border:none;color:#fff;font-size:1.2em;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:5;transition:background .2s}
.carousel-btn:active{background:rgba(255,255,255,.3)}
.carousel-btn.prev{left:12px}
.carousel-btn.next{right:12px}
.carousel-counter{position:absolute;bottom:28px;right:14px;background:rgba(0,0,0,.4);backdrop-filter:blur(6px);color:rgba(255,255,255,.85);padding:4px 10px;border-radius:20px;font-size:.68em;z-index:5;font-weight:500}
.carousel-dots{display:flex;justify-content:center;gap:5px;padding:14px 0;background:var(--bg)}
.carousel-dots span{width:6px;height:6px;border-radius:50%;background:var(--surface3);cursor:pointer;transition:all .3s ease}
.carousel-dots span.active{background:var(--accent);width:20px;border-radius:3px}

/* ── Lightbox ── */
.lightbox{display:none;position:fixed;inset:0;background:rgba(0,0,0,.95);z-index:200;flex-direction:column;align-items:center;justify-content:center}
.lightbox.open{display:flex}
.lightbox-track{display:flex;height:100%;width:100%;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;scrollbar-width:none}
.lightbox-track::-webkit-scrollbar{display:none}
.lightbox-slide{width:100%;height:100%;flex-shrink:0;scroll-snap-align:center;overflow:hidden;display:flex;align-items:center;justify-content:center}
.lightbox-slide.zoomed{touch-action:none}
.lightbox-slide img{max-width:100%;max-height:100%;object-fit:contain;-webkit-user-select:none;user-select:none;transform-origin:0 0;will-change:transform}
.lightbox-close{position:absolute;top:16px;right:16px;width:36px;height:36px;border-radius:50%;border:none;background:rgba(255,255,255,.15);color:#fff;font-size:1.2em;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:201;backdrop-filter:blur(8px)}
.lightbox-close:active{background:rgba(255,255,255,.3)}
.lightbox-counter{position:absolute;bottom:20px;left:50%;transform:translateX(-50%);background:rgba(0,0,0,.4);backdrop-filter:blur(6px);color:rgba(255,255,255,.85);padding:4px 14px;border-radius:20px;font-size:.75em;z-index:201;font-weight:500}
.lightbox-btn{position:absolute;top:50%;transform:translateY(-50%);width:44px;height:44px;border-radius:50%;background:rgba(255,255,255,.12);backdrop-filter:blur(8px);border:none;color:#fff;font-size:1.3em;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:201}
.lightbox-btn:active{background:rgba(255,255,255,.25)}
.lightbox-btn.prev{left:12px}
.lightbox-btn.next{right:12px}

/* ── Detail page — editorial ── */
.detail-sticky-ctx{display:none} /* deprecated : remplace par .detail-overlay-btn en overlay image */

/* Header scroll-sensible (pattern Airbnb) : fade in au scroll up, fade out au scroll down */
.detail-scroll-header{position:fixed;top:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;padding:16px;padding-top:calc(16px + env(safe-area-inset-top,0px));background:rgba(255,255,255,.92);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-bottom:1px solid var(--border);z-index:30;opacity:0;pointer-events:none;transition:opacity .22s ease}
.detail-scroll-header.visible{opacity:1;pointer-events:auto}
.detail-scroll-header .detail-overlay-btn{position:static;top:auto;left:auto;right:auto;background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none;box-shadow:none}
.detail-scroll-header .detail-overlay-btn:active{background:var(--surface3)}
/* Actions ancrees dans la section Contact (anciennement FAB flottant) */
.contact-actions{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}
.contact-action{text-decoration:none;font-size:.82em;font-weight:600;display:inline-flex;align-items:center;gap:8px;border-radius:12px;padding:11px 16px;transition:filter .15s ease,transform .1s ease,background .15s;-webkit-tap-highlight-color:transparent;flex:1 1 auto;justify-content:center;min-width:120px}
.contact-action:active{transform:scale(.97)}
.contact-action svg{flex-shrink:0}
.contact-action-call{background:#e7efeb;color:var(--green);border:1px solid rgba(61,126,94,.28)}
.contact-action-call:hover{background:rgba(61,126,94,.14)}
.contact-action-source{background:#edf5ff;color:var(--accent);border:1px solid rgba(0,104,255,.28)}
.contact-action-source:hover{background:rgba(0,104,255,.14)}
.detail-back{background:none;border:none;color:var(--text);padding:6px 0;cursor:pointer;font-size:1em;display:flex;align-items:center;gap:6px;font-weight:700;letter-spacing:-.03em;font-family:inherit}
.detail-back svg{flex-shrink:0}
.detail-back:active{opacity:.7}
.detail-placeholder{width:100%;height:200px;display:flex;align-items:center;justify-content:center;background:var(--surface2);position:relative}
.detail-carousel{margin:0;position:relative}
.detail-overlay-btn{position:absolute;top:calc(16px + env(safe-area-inset-top,0px));width:40px;height:40px;border-radius:50%;border:none;background:rgba(255,255,255,.92);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);color:var(--text);display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:20;box-shadow:0 2px 8px rgba(0,0,0,.18);transition:transform .1s ease,background .15s;-webkit-tap-highlight-color:transparent;padding:0}
.detail-overlay-btn:active{transform:scale(.92);background:#fff}
.detail-overlay-btn svg{flex-shrink:0}
.detail-overlay-back{left:16px}
.detail-overlay-share{right:16px}
.detail-carousel .carousel{border-radius:0}
.detail-carousel .carousel-track img{height:44vh}
.detail-content{padding:24px 20px 120px;max-width:640px;margin:0 auto;border-radius:18px 18px 0 0;margin-top:-16px;position:relative;background:var(--surface)}
.detail-title{font-size:1.05em;font-weight:400;color:var(--text2);line-height:1.5;margin-bottom:8px;text-align:center}
.detail-price{font-family:var(--font-serif);font-size:2em;font-weight:400;color:var(--ink);letter-spacing:-.02em;line-height:1.05;margin-bottom:2px;text-align:center}
.detail-location{font-size:.82em;color:var(--text3);margin-bottom:20px;text-align:center}
.detail-badges{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:24px}
.detail-section{margin-bottom:36px}
.detail-section h3{margin:0 0 16px;color:var(--text);font-size:.88em;font-weight:700;text-transform:uppercase;letter-spacing:.08em;text-align:center;padding-top:20px;border-top:1px solid var(--border2)}
.detail-section a{color:var(--blue);text-decoration:none}
.detail-desc{font-size:.84em;color:var(--text2);line-height:1.85;white-space:pre-wrap}
.dup-links{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}
.dup-link{text-decoration:none;font-size:.82em;font-weight:600;color:var(--text2);background:var(--bg);border:1px solid var(--border);border-radius:12px;padding:9px 14px;transition:background .15s,transform .1s ease;-webkit-tap-highlight-color:transparent}
.dup-link:active{transform:scale(.97)}
a.dup-link:hover{background:var(--border2)}
.char-group{margin-bottom:24px}
.char-group:last-child{margin-bottom:0}
.char-group-title{font-size:.72em;font-weight:600;color:var(--text3);text-transform:uppercase;letter-spacing:.06em;padding:0 4px 10px;text-align:center}
.char-group-card{background:var(--bg);border-radius:14px;overflow:hidden;border:1px solid var(--border)}
.char-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:15px 18px;border-bottom:1px solid var(--border)}
.char-row:last-child{border-bottom:none}
.char-lbl{font-size:.84em;color:var(--text2);font-weight:500}
.char-val{font-size:.84em;font-weight:600;color:var(--text);text-align:right;display:flex;align-items:center;gap:6px}
.char-val a{color:var(--blue);text-decoration:none}
.char-val .badge{font-size:.88em;padding:2px 9px;border-radius:6px;font-weight:700;letter-spacing:.02em}
.char-val-sub{font-weight:500;color:var(--text2);font-size:.92em}
.detail-equips{display:flex;flex-wrap:wrap;gap:6px;padding:10px 4px 0}
.detail-equip{display:inline-flex;align-items:center;padding:5px 12px;background:var(--surface2);border-radius:20px;font-size:.74em;color:var(--text2);font-weight:500;border:1px solid var(--border2)}
.detail-feed-entries{gap:12px}
.detail-feed-entries .feed-avatar{width:34px;height:34px;font-size:.76em}
.detail-feed-entries .feed-content{padding:6px 14px}
.detail-feed-entries .feed-text{font-size:.82em}
.detail-composer{margin-top:12px}
.comments-panel:empty+.comment-composer-slot .detail-composer{margin-top:0}
.detail-composer .feed-composer-avatar{width:34px;height:34px;font-size:.76em}
.detail-actions{position:fixed;bottom:0;left:0;right:0;display:flex;flex-direction:column;gap:8px;padding:10px 16px calc(16px + env(safe-area-inset-bottom,0px));background:rgba(255,255,255,.92);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border-top:1px solid var(--border);z-index:10}
.visit-status-menu{position:fixed;background:var(--surface);border:1px solid var(--border2);border-radius:10px;box-shadow:0 4px 16px rgba(0,0,0,.12);z-index:100;overflow:hidden}
.visit-status-menu button{display:block;width:100%;padding:10px 20px;border:none;background:none;font-size:.78em;font-weight:500;color:var(--text2);cursor:pointer;text-align:left;white-space:nowrap;font-family:inherit}
.visit-status-menu button:active{background:var(--surface3)}
.visit-status-menu button.active{color:var(--accent);font-weight:600}
.visit-status-menu-sep{height:1px;background:var(--border2);margin:4px 0}
.visit-status-menu button.menu-item-remove{color:var(--red)}
.visit-status-menu button.vendue-option{color:var(--accent)}
.visit-confirm-text{padding:12px 16px 6px;font-size:.76em;color:var(--text);max-width:230px;line-height:1.45}
.visit-confirm-row{display:flex;gap:8px;padding:8px 12px 12px;justify-content:flex-end}
.visit-confirm-row button{display:inline-block;width:auto;padding:8px 14px;border-radius:9px;font-size:.76em}
.visit-confirm-row .visit-confirm-ok{background:var(--accent);color:#fff;font-weight:600}
.detail-bar-actions{display:flex;align-items:center;justify-content:center;gap:8px}
.detail-cta{padding:10px 16px;border-radius:10px;border:none;background:var(--accent);color:#fff;font-size:.78em;font-weight:600;cursor:pointer;text-decoration:none;transition:transform .15s;white-space:nowrap;display:flex;align-items:center;justify-content:center;min-width:0}
.detail-cta:active{transform:scale(.96)}
.detail-cta-call{background:var(--green);padding:10px 22px;flex:0 0 auto}

/* Fly-to ghost */
.fly-ghost{position:fixed;z-index:200;overflow:hidden;border-radius:var(--radius);background:linear-gradient(145deg,rgba(255,255,255,.98),rgba(237,241,244,.92));border:1px solid rgba(255,255,255,.72);box-shadow:0 16px 30px rgba(24,23,26,.12),0 6px 14px rgba(0,104,255,.1);pointer-events:none;transform-origin:center center;will-change:transform,opacity;contain:paint;backface-visibility:hidden;transform:translateZ(0)}
.fly-ghost::before{content:'';position:absolute;inset:0;background:linear-gradient(140deg,rgba(255,255,255,.24),rgba(255,255,255,0) 36%,rgba(255,255,255,.12) 100%);pointer-events:none}
.fly-ghost::after{content:'';position:absolute;inset:-18%;background:radial-gradient(circle at top left,rgba(255,255,255,.22),rgba(255,255,255,0) 44%);opacity:.45;pointer-events:none}
.fly-ghost img,.fly-ghost-fill{width:100%;height:100%;display:block}
.fly-ghost img{object-fit:cover;transform:scale(1.03)}
.fly-ghost-fill{background:linear-gradient(135deg,rgba(0,104,255,.24),rgba(61,126,94,.16))}
.count.count-bump{animation:countBump .42s cubic-bezier(.22,1,.36,1)}
@keyframes countBump{0%{transform:scale(1)}35%{transform:translateY(-2px) scale(1.38)}100%{transform:scale(1)}}

/* Card Feed */
.card-feed{border-top:none;padding:0 20px;background:transparent;border-radius:0 0 16px 16px}
.feed-reactions-log{display:flex;flex-direction:column;gap:0;padding:8px 20px 4px;margin:0 -20px;background:none}
.feed-reactions-log:has(~ .feed-comments.open){padding-bottom:4px}
.feed-reaction-like{color:var(--text3)}
/* Reaction-log = trace historique, secondaire : icones grises (coeur en contour,
   croix en gris), couleur semantique reservee aux boutons d'action. */
.feed-reaction-dislike{color:var(--text3)}
.feed-reaction-like .reaction-log-icon{width:11px;height:11px;fill:none;stroke:var(--text3);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vertical-align:-2px;margin-right:4px}
.feed-reaction-dislike .reaction-log-icon{width:11px;height:11px;fill:none;stroke:var(--text3);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vertical-align:-2px;margin-right:4px}
.feed-comments{display:none}
.feed-comments.open{display:block;padding-bottom:20px;padding-top:10px;border-top:none;margin:0 -20px;padding-left:20px;padding-right:20px}
.feed-entries{display:flex;flex-direction:column;gap:14px;margin-top:10px}
.feed-entry{display:flex;align-items:flex-start;gap:6px}
.feed-avatar{width:30px;height:30px;border-radius:50%;background:var(--surface3);color:var(--text2);display:flex;align-items:center;justify-content:center;font-size:.72em;font-weight:700;flex-shrink:0;position:relative}
.feed-avatar-like{background:rgba(61,126,94,.14);color:var(--positive)}
.feed-avatar-dislike{background:rgba(194,85,80,.14);color:var(--red)}
.feed-avatar-icon{position:absolute;bottom:-3px;right:-3px;font-size:.55em;line-height:1;background:var(--surface);border-radius:50%;width:14px;height:14px;display:flex;align-items:center;justify-content:center;border:1px solid var(--border2);box-shadow:none}
.feed-content{flex:1;min-width:0;background:rgba(0,104,255,.05);border-radius:14px;padding:5px 12px;border:.5px solid rgba(0,104,255,.15)}
.feed-entry-head{display:flex;align-items:baseline;gap:6px;margin-bottom:1px}
.feed-user{font-size:.76em;font-weight:600;color:var(--text)}
.feed-sep{color:var(--text3);font-size:.9em;font-weight:700}
.feed-time{font-size:.68em;color:var(--text3);flex-shrink:0}
.feed-text{font-size:.78em;color:var(--text);line-height:1.5;word-break:break-word}
.feed-entry-reaction{align-items:center}
.feed-content-reaction{background:none!important;padding:1px 0!important;border:none!important}
.feed-reaction-line{font-size:.78em;color:var(--text3);line-height:1.4}
.feed-reaction-line .feed-user{font-style:normal;font-weight:400;font-size:1em;color:var(--text3)}
.feed-see-more{display:block;font-size:.68em;color:var(--blue);font-weight:500;cursor:pointer;padding:3px 0;background:none;border:none;font-family:inherit;text-align:left}
.feed-composer{display:flex;flex-direction:row;align-items:flex-start;gap:8px;margin-top:14px}
.feed-composer-avatar{width:30px;height:30px;border-radius:50%;color:#fff;display:flex;align-items:center;justify-content:center;font-size:.72em;font-weight:700;flex-shrink:0;margin-top:2px}
.feed-composer-field{flex:1;border:1px solid var(--border2);border-radius:10px;padding:0 10px;transition:border-color .2s;background:#fff;display:flex;align-items:center}
.feed-composer-field:focus-within{border-color:rgba(0,104,255,.38)}
.feed-composer-field textarea{width:100%;min-height:30px;max-height:80px;resize:none;border:none;background:transparent;font-size:.74em;line-height:1.4;color:var(--text);font-family:inherit;outline:none;padding:6px 0;overflow-y:auto}
.feed-submit{background:var(--accent);color:#fff;border:none;border-radius:10px;padding:8px 14px;font-size:.72em;font-weight:600;cursor:pointer;font-family:inherit;align-self:flex-end;transition:transform .15s}
.feed-submit:active{transform:scale(.94)}
.feed-submit:disabled{opacity:.4;cursor:default}

/* ===== Toolbar (unified) ===== */
.toolbar{display:flex;align-items:center;gap:var(--toolbar-gap);padding:4px 10px;background:transparent}
/* Filet de toolbar carte : gris aluminium neutre. Haut = info/boutons.
   Bas (border-bottom) : present UNIQUEMENT quand un reaction-log ou des commentaires
   suivent -> separe les boutons de la zone reaction-log. Sinon aucun filet bas. */
.toolbar[data-context="card"]{margin:0 -20px;border-top:1px solid rgba(18,24,32,.10);border-bottom:none}
.toolbar[data-context="card"]:has(~ .feed-reactions-log),.toolbar[data-context="card"]:has(~ .feed-comments.open){border-bottom:1px solid rgba(18,24,32,.10)}
.toolbar-cluster{display:flex;align-items:center;gap:var(--toolbar-gap)}
.toolbar-cluster--actions{margin-left:auto;gap:var(--toolbar-cluster-gap)}
.btn-reaction,.btn-primary,.btn-quiet{font-family:inherit;cursor:pointer;border:1.5px solid transparent;background:transparent;display:inline-flex;align-items:center;justify-content:center;gap:5px;-webkit-tap-highlight-color:transparent;transition:background .15s ease,color .15s ease,border-color .15s ease,transform .1s ease;color:var(--role-quiet)}
.btn-reaction:active,.btn-primary:active,.btn-quiet:active{transform:scale(.96)}
.btn-reaction:focus-visible,.btn-primary:focus-visible,.btn-quiet:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.btn-reaction[disabled],.btn-primary[disabled],.btn-quiet[disabled]{opacity:.45;cursor:default;pointer-events:none}
/* Variant A — reaction (ghost toggle) */
.btn-reaction{padding:6px 10px;border-radius:var(--toolbar-radius);min-height:var(--toolbar-button-min);font-size:.86em;font-weight:600}
.btn-reaction__icon{display:inline-flex;width:var(--toolbar-icon-size);height:var(--toolbar-icon-size);flex-shrink:0;align-items:center;justify-content:center}
.btn-reaction__icon svg{width:100%;height:100%;stroke-width:2}
.btn-reaction__count{font-variant-numeric:tabular-nums;font-weight:600;color:inherit;line-height:1}
.btn-reaction--positive,.btn-reaction--negative,.btn-reaction--comment,.btn-reaction--fav{color:var(--text2)}
/* Coeur de la carte favori : vert plein quand actif (= dans tes favoris). Re-appui = retrait. */
.btn-reaction--fav.is-on{color:var(--rose)}
.btn-reaction--fav.is-on .btn-reaction__icon svg{fill:var(--rose)}
.btn-reaction--positive.is-on .btn-reaction__icon{color:var(--role-vote-positive)}
.btn-reaction--positive.is-on .btn-reaction__icon svg{fill:var(--rose-fill)}
.btn-reaction--negative.is-on .btn-reaction__icon{color:var(--role-vote-negative)}
.btn-reaction--negative.is-on .btn-reaction__icon svg{fill:var(--tint-negative-fill)}
.btn-reaction--comment.comments-open{background:var(--tint-comment-bg);border-color:var(--tint-comment-border);color:var(--role-comment)}
.btn-reaction--comment.comments-open .btn-reaction__count{color:var(--role-comment)}
.btn-reaction__count{color:var(--text2)}
@media(hover:hover){
  .btn-reaction--positive:hover{background:var(--rose-hover);color:var(--role-vote-positive)}
  .btn-reaction--negative:hover{background:var(--tint-negative-hover);color:var(--role-vote-negative)}
  .btn-reaction--comment:hover{background:var(--tint-comment-hover);color:var(--role-comment)}
}
/* Variant B — primary CTA */
.btn-primary{padding:8px 14px;border-radius:10px;color:#fff;font-size:.78em;font-weight:600;white-space:nowrap;min-height:36px;gap:6px}
.btn-primary--visit{background:var(--role-cta-primary);border-color:var(--role-cta-primary)}
.btn-primary--restore{background:var(--role-cta-restore);border-color:var(--role-cta-restore)}
@media(hover:hover){
  .btn-primary--visit:hover{filter:brightness(1.06)}
  .btn-primary--restore:hover{filter:brightness(1.06)}
}
.btn-primary__icon{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px}
.btn-primary__icon svg{width:100%;height:100%;stroke:currentColor;stroke-width:2.2}
.btn-primary--restore .btn-primary__icon{width:16px;height:16px}
.btn-primary__label{line-height:1}
/* Variant C — quiet (icon-only) */
.btn-quiet{padding:10px;border-radius:var(--toolbar-radius);min-width:var(--toolbar-button-min);min-height:var(--toolbar-button-min);color:var(--text2)}
.btn-quiet svg{width:var(--toolbar-icon-size);height:var(--toolbar-icon-size);stroke-width:2}
.btn-quiet.is-destructive{color:rgba(194,85,80,.55)}
@media(hover:hover){
  .btn-quiet:hover{background:var(--surface3);color:var(--text2)}
  .btn-quiet.is-destructive:hover{background:var(--tint-destructive-hover);color:var(--role-destructive)}
}
/* Read-only state (archived view) */
.toolbar[data-readonly="true"] .btn-reaction--positive,
.toolbar[data-readonly="true"] .btn-reaction--negative{opacity:.55;cursor:default;pointer-events:none}
/* Detail context */
.toolbar[data-context="detail"]{margin:0;padding:0;border:none;width:100%}
.toolbar[data-context="detail"] .btn-reaction__icon,
.toolbar[data-context="detail"] .btn-quiet svg{width:var(--toolbar-icon-size-detail);height:var(--toolbar-icon-size-detail)}
.toolbar[data-context="detail"] .toolbar-cluster--actions .btn-primary{flex:1}

/* Mobile */
@media(max-width:768px){
  .column-tabs{display:flex;position:fixed;bottom:0;left:0;right:0;background:var(--surface);border-top:1px solid var(--border2);z-index:100;padding:2px 0 env(safe-area-inset-bottom,2px)}
  .board{display:flex;flex-direction:row;padding:0;gap:0;width:500%;transition:transform .3s cubic-bezier(.25,.1,.25,1);will-change:transform}
  .column{display:flex;flex-direction:column;width:calc(100%/5);flex-shrink:0;border-radius:0;background:var(--bg);min-height:0}
  .column-header{display:none}
  .column-cards{padding:52px 20px 110px;scroll-padding-bottom:110px;gap:48px;scrollbar-width:none;-webkit-overflow-scrolling:touch;overscroll-behavior-y:none}
  .column-cards::-webkit-scrollbar{display:none}
  .card-img-placeholder{height:180px}
  .card-img{height:180px}
  .card-gallery{height:180px}
  .detail-carousel .carousel-track img{height:36vh}
  .detail-content{padding:20px 18px 120px}
  .comments-section-head{flex-direction:column;align-items:flex-start}
  .comments-summary{align-self:flex-start}
  .comment{padding:13px}
  .comment-composer-card{padding:14px}
  .comment-composer-actions{flex-direction:column;align-items:stretch}
  .comment-composer-actions button{width:100%}
  .toast{bottom:90px;left:50%;transform:translateX(-50%)}
}
@media(min-width:769px){
  .column-tabs{display:none}
}

/* Home page */
#view-home{height:100dvh;overflow-y:auto;background:var(--bg)}
/* Aide page */
.home-wrap{max-width:640px;margin:0 auto;padding:12px 20px 120px;width:100%;box-sizing:border-box}
.home-title{font-size:1.3em;font-weight:300;color:var(--text);letter-spacing:.2em;text-transform:uppercase;margin-bottom:12px}
.home-title .brand-light{font-weight:700}
.home-intro{font-size:.84em;color:var(--text2);line-height:1.8;max-width:340px;margin:0 auto}
.home-section{margin-bottom:36px}
.home-hero{text-align:center;padding:28px 0 36px}
.home-reveal{opacity:0;transform:translateY(24px);transition:opacity .5s ease,transform .5s ease}
.home-reveal.visible{opacity:1;transform:translateY(0)}
.home-section-title{font-size:.68em;font-weight:700;color:var(--text3);text-transform:uppercase;letter-spacing:.1em;margin-bottom:16px;text-align:center}
/* Steps */
.home-steps{display:flex;flex-direction:column;gap:0;position:relative;padding-left:18px}
.home-steps::before{content:'';position:absolute;left:5px;top:8px;bottom:8px;width:1.5px;background:var(--border2)}
.home-step{display:flex;align-items:flex-start;gap:16px;padding:12px 0;position:relative}
.home-step-dot{width:12px;height:12px;border-radius:50%;flex-shrink:0;margin-top:2px;position:relative;z-index:1;margin-left:-18px;box-shadow:0 0 0 4px var(--bg)}
.home-step-body{flex:1;min-width:0}
.home-step-body strong{display:block;font-size:.88em;font-weight:700;color:var(--text);margin-bottom:3px}
.home-step-body p{font-size:.8em;color:var(--text2);line-height:1.6;margin:0}
/* Actions */
.home-actions{display:flex;flex-direction:column;gap:12px}
.home-action{display:flex;align-items:flex-start;gap:14px;background:var(--surface);border-radius:16px;padding:18px;border:1px solid var(--border)}
.home-action-bubble{width:42px;height:42px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.home-action-text{flex:1;min-width:0}
.home-action-text strong{display:block;font-size:.84em;font-weight:700;color:var(--text);margin-bottom:3px}
.home-action-text p{font-size:.78em;color:var(--text2);line-height:1.6;margin:0}
/* Criteria */
.home-criteria{background:var(--surface);border-radius:16px;overflow:hidden;border:1px solid var(--border)}
.home-crit-row{display:flex;align-items:center;justify-content:space-between;padding:15px 18px;border-bottom:1px solid var(--border)}
.home-crit-row:last-child{border-bottom:none}
.home-crit-label{font-size:.8em;color:var(--text2);font-weight:500}
.home-crit-value{font-size:.8em;font-weight:600;color:var(--text);text-align:right}
.home-sites{display:flex;gap:8px;flex-wrap:wrap}
.home-sites .badge{font-size:.78em;padding:5px 12px}
.home-site-off{background:var(--surface3);color:var(--text3)}

/* ── Swipe view (Tab 0) ───────────────────────────────────────────── */
/* La classe .swipe-mount est ajoutee par swipe.js::mount() sur #col-0.
   On bascule de la liste kanban scrollable a un layout flex contenu. */
.column-cards.swipe-mount{
  display:flex;flex-direction:column;align-items:center;justify-content:flex-start;
  padding:12px 16px 16px;gap:0;overflow:hidden;flex:1 1 auto;min-height:0;
  box-sizing:border-box;width:100%;
}
.swipe-counter{font-size:.78em;color:var(--text2);font-weight:500;margin-bottom:10px;text-align:center;flex-shrink:0}
.swipe-loading{color:var(--text2);font-size:.85em;padding:40px 0;text-align:center;flex:1;display:flex;align-items:center;justify-content:center}
.swipe-deck{position:relative;width:100%;max-width:420px;flex:1 1 0;min-height:0;margin:0 auto}
/* --stack-reserve : bande reservee en bas du deck pour les lamelles de la pile.
   Toutes les cartes s'arretent a cette distance du bas ; les couches derriere
   (transform-origin bottom) depassent vers le bas dans cette reserve. */
.swipe-card{position:absolute;top:0;left:0;right:0;bottom:var(--stack-reserve,36px);background:var(--surface);border-radius:var(--radius);overflow:hidden;box-shadow:0 8px 32px rgba(0,0,0,.08),0 2px 8px rgba(0,0,0,.04);user-select:none;-webkit-user-select:none;touch-action:pan-y;will-change:transform}
/* Couches derriere (pile de fiches) : position au repos (transform/opacity/z-index)
   pilotee en inline par SLOTS (swipe.js). transform-origin bottom -> le scale ancre
   le bas, ty controle seul la hauteur de lamelle visible. */
.swipe-card-peek{pointer-events:none;transform-origin:bottom center}
/* Fiche fantome : carte vide, seuls ses bords depassent en lamelle. Bord de feuille
   net + ombre plus legere que le hero pour reculer dans la profondeur. */
.swipe-card-ghost{background:var(--surface);border:1px solid var(--border2);box-shadow:0 4px 12px rgba(0,0,0,.06)}
.swipe-card-top{z-index:50;cursor:grab}
.swipe-card-top:active{cursor:grabbing}
.swipe-card-photo{position:absolute;inset:0;background:var(--surface3);overflow:hidden}
/* Pellicule (filmstrip) : toutes les photos cote a cote, translatee d'un bloc.
   Chaque slide fait 100% de la largeur du conteneur (flex-basis 100%, no-shrink),
   les slides debordent et sont clippees par .swipe-card-photo{overflow:hidden}. */
.swipe-card-track{display:flex;width:100%;height:100%;will-change:transform}
.swipe-card-slide{flex:0 0 100%;height:100%}
.swipe-card-img{width:100%;height:100%;object-fit:cover;display:block}
.swipe-card-noimg{width:100%;height:100%;background:linear-gradient(135deg,var(--surface3),var(--surface2))}
.swipe-card-bottom-overlay{position:absolute;bottom:0;left:0;right:0;padding:24px 20px 20px;background:linear-gradient(to top,rgba(0,0,0,.8),rgba(0,0,0,.4) 50%,transparent);color:#fff;pointer-events:none;text-align:left}
.swipe-card-price{font-size:1.5em;font-weight:700;letter-spacing:-.02em;margin-bottom:6px;text-shadow:0 2px 8px rgba(0,0,0,.4);line-height:1.1}
.swipe-card-title{font-size:.95em;font-weight:600;line-height:1.3;margin-bottom:4px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-shadow:0 1px 4px rgba(0,0,0,.35)}
.swipe-card-meta{font-size:.78em;opacity:.92;text-shadow:0 1px 4px rgba(0,0,0,.35)}
.swipe-card-segments{position:absolute;top:10px;left:10px;right:10px;display:flex;gap:4px;z-index:3;pointer-events:none}
.swipe-card-segment{flex:1;height:3px;border-radius:2px;background:rgba(255,255,255,.4);transition:background .15s ease}
.swipe-card-segment.active{background:rgba(255,255,255,.95)}
.swipe-actions{display:flex;align-items:center;justify-content:center;gap:28px;margin-top:18px;flex-shrink:0}
.swipe-btn{
  width:60px;height:60px;border-radius:50%;
  border:2px solid;background:var(--surface);
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  -webkit-tap-highlight-color:transparent;flex-shrink:0;padding:0;
  transition:transform .2s cubic-bezier(.34,1.56,.64,1),background-color .18s ease,border-color .18s ease,color .18s ease,box-shadow .22s ease,opacity .18s ease;
  will-change:transform;
}
.swipe-btn svg{transition:transform .2s cubic-bezier(.34,1.56,.64,1)}
.swipe-btn:active{transform:scale(.93)}

/* Ecarter : disque blanc + anneau ET croix gris (= couleur par defaut des icones
   de la bottom-bar) — geste neutre. Garder : disque plein rose, coeur blanc —
   action principale, legere elevation rose. */
.swipe-btn-dislike{border-color:#66727e;color:#66727e}
.swipe-btn-dislike:hover{transform:scale(1.06);border-color:#4b5661;color:#4b5661;background:rgba(0,0,0,.03)}
.swipe-btn-like{border-color:var(--rose);background:var(--rose);color:#fff;box-shadow:0 4px 12px rgba(0,104,255,.35)}
.swipe-btn-like svg{width:30px;height:30px}
.swipe-btn-like:hover{transform:scale(1.08);background:var(--rose-deep);border-color:var(--rose-deep);color:#fff}

.swipe-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;text-align:center;width:100%;flex:1}
.swipe-empty-check{display:flex;align-items:center;justify-content:center;width:64px;height:64px;border-radius:50%;background:var(--tint-positive-bg);color:var(--positive);font-size:1.7em;font-weight:400;margin-bottom:20px;line-height:1}
.swipe-empty-title{font-family:var(--font-serif);font-size:1.7em;font-weight:400;color:var(--ink);margin-bottom:10px;letter-spacing:-.01em;line-height:1.05}
.swipe-empty-sub{font-size:.86em;color:var(--text2);margin-bottom:28px;max-width:28ch;line-height:1.45}

/* FAB like/dislike dans la vue detail (mode ?from=swipe) : boutons ronds flottants,
   pas de barre ni fond — les boutons eux-memes portent l'elevation via leur shadow. */
.detail-swipe-bar{
  position:fixed;left:0;right:0;
  bottom:calc(20px + env(safe-area-inset-bottom,0px));
  display:flex;align-items:center;justify-content:center;gap:40px;
  pointer-events:none;   /* laisse le scroll passer entre les FABs */
  z-index:15;
}
.detail-swipe-bar .swipe-btn{
  pointer-events:auto;
  width:64px;height:64px;
}
.detail-swipe-bar .swipe-btn svg{width:30px;height:30px}
#view-detail.detail--swipe{padding-bottom:120px}

/* Mobile : bounded-height explicite pour que le deck remplisse sans overflow.
   ~108px au-dessus (header-actions + view-title) + ~68px en-dessous (bottom-nav
   fixe + safe-area). view-stats et filter-bar sont masques en mode swipe. */
@media(max-width:768px){
  .column-cards.swipe-mount{
    padding:8px 12px;
    height:calc(100dvh - 176px);
    max-height:calc(100dvh - 176px);
    flex:none;
  }
  .swipe-deck{max-width:none}
  .swipe-actions{gap:22px;margin-top:14px;padding-bottom:18px}
  .swipe-btn{width:56px;height:56px}
  .swipe-btn-details{width:44px;height:44px}
  .swipe-card-title{font-size:1em}
  .swipe-card-price{font-size:1.5em}
}
/* Reduced motion : coupe l'envol et la cascade de la pile (complete la garde JS de
   performSwipe, le !important neutralise aussi les transitions posees en inline). */
@media (prefers-reduced-motion:reduce){
  .swipe-card{transition:none !important}
}
.view-subtitle{font-size:.82em;color:var(--text2);padding:0 20px 16px;line-height:1.4}
/* Compteur « N véhicules » en tete de legende : ouvre la phrase, en bleu électrique. */
.vsub-count{color:var(--accent);font-weight:600}
.view-subtitle:empty{display:none}

/* Sur le deck (Tab 1), la barre filter/sort/stats est sans objet et la ligne
   de la tab-bar est retiree pour une transition plus propre. */
#view-board.tab-active-1 .filter-bar{display:none}
#view-board.tab-active-1 .column-tabs{border-top:none}
/* Liste favoris — padding et gap plus serres que le generique. */
.col-favoris .column-cards{padding:14px 16px 110px;gap:40px;scroll-padding-top:14px;scroll-padding-bottom:110px;background:var(--bg)}
/* Corbeille — rangees denses a filets, groupees par date d'ecartement. */
.col-corbeille .column-cards{padding:4px 20px 110px;gap:0;scroll-padding-top:14px;scroll-padding-bottom:110px;background:var(--bg)}

/* ── Corbeille (rework) : rangee dense + restaurer en un geste ──
   Le contenu est « ecarte » : photo desaturee, prix serif attenue, densite
   elevee pour le scan. Swipe droit = restaurer (miroir du deck). */
.corb-grp,.fav-grp{font-size:.6em;font-weight:700;letter-spacing:.15em;text-transform:uppercase;color:var(--text3);padding:18px 0 8px}
.corb-item{position:relative;border-radius:14px;flex-shrink:0}
.corb-under{position:absolute;inset:0;border-radius:14px;background:var(--accent-soft,#edf5ff);
  border:1px solid rgba(0,104,255,.28);display:flex;align-items:center;gap:9px;padding-left:18px;
  color:var(--accent);opacity:0}
.corb-item.swiping .corb-under{opacity:1}
.corb-item.will-restore .corb-under{background:#dcecff}
.corb-under svg{width:18px;height:18px}
.corb-under span{font-size:.76em;font-weight:600}
.corb-row{position:relative;display:flex;align-items:center;gap:13px;padding:12px 0;
  border-bottom:1px solid var(--border2);background:var(--bg);cursor:pointer;
  -webkit-tap-highlight-color:transparent}
.corb-item:last-child .corb-row{border-bottom:none}
.corb-item.swiping .corb-row{border-radius:14px;border-bottom-color:transparent;
  box-shadow:0 6px 18px rgba(18,24,32,.12);padding-left:10px;padding-right:10px}
.corb-ph{flex:0 0 92px;height:69px;border-radius:12px;background-size:cover;background-position:center;
  background-color:var(--surface2);filter:saturate(.45) contrast(.97);opacity:.88}
.corb-bd{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.corb-price{font-family:var(--font-serif);font-size:1.06em;color:#52606c;letter-spacing:-.01em;line-height:1.15}
.corb-meta{font-size:.76em;color:var(--text2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.corb-ago{font-size:.7em;color:var(--text3);display:flex;align-items:center;gap:5px}
.corb-ago svg{width:11px;height:11px;opacity:.8;flex-shrink:0}
.corb-restore{flex:0 0 42px;width:42px;height:42px;border-radius:50%;background:var(--accent-soft,#edf5ff);
  border:1px solid rgba(0,104,255,.28);color:var(--accent);display:flex;align-items:center;
  justify-content:center;cursor:pointer;-webkit-tap-highlight-color:transparent;padding:0}
.corb-restore svg{width:17px;height:17px}
@media(hover:hover){.corb-restore:hover{background:#dcecff}}
/* Etat vide : raconte le geste au lieu du « Aucune annonce » generique. */
.corb-empty{display:flex;flex-direction:column;align-items:center;text-align:center;padding:88px 30px 0}
.corb-empty-disc{width:92px;height:92px;border-radius:50%;background:var(--surface2);display:flex;
  align-items:center;justify-content:center;color:var(--text3);margin-bottom:22px}
.corb-empty-disc svg{width:34px;height:34px}
.corb-empty h2{font-family:var(--font-serif);font-weight:400;font-size:1.35em;color:var(--ink);margin-bottom:10px}
.corb-empty p{font-size:.82em;color:var(--text2);line-height:1.55;max-width:270px}

.detail-breadcrumb{padding:8px 16px;font-size:.75em;color:var(--text2);border-bottom:1px solid var(--border2);background:var(--surface2)}
.detail-prev-next{display:flex;justify-content:space-between;padding:12px 16px;background:var(--surface)}
.detail-prev-next button{background:transparent;border:none;color:var(--accent);font-family:inherit;font-size:.85em;cursor:pointer;font-weight:500}
.detail-prev-next span{flex:1}
.detail-footer-sticky{position:sticky;bottom:0;display:flex;gap:8px;padding:12px 16px;background:var(--surface);border-top:1px solid var(--border2);box-shadow:0 -2px 8px rgba(0,0,0,.04);z-index:10}
.detail-footer-sticky button{flex:1;padding:12px;border:1px solid var(--border2);border-radius:12px;background:var(--surface);color:var(--text);font-family:inherit;font-size:.85em;font-weight:500;cursor:pointer}
.detail-footer-sticky .footer-primary{background:var(--accent);color:#fff;border-color:var(--accent);font-weight:600}
.detail-footer-sticky .footer-archive{color:var(--red);border-color:rgba(194,85,80,.3)}

/* ── Admin (sessions augmentees) ── */
.header-admin{width:36px;height:36px;display:flex;align-items:center;justify-content:center;border-radius:50%;cursor:pointer;color:var(--accent);transition:background .15s;-webkit-tap-highlight-color:transparent}
@media(hover:hover){.header-admin:hover{background:var(--surface3)}}
#view-admin{display:none;position:fixed;inset:0;z-index:250;background:var(--bg);height:100dvh;overflow-y:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
#view-admin::-webkit-scrollbar{display:none}
.admin-head{position:sticky;top:0;z-index:5;display:flex;align-items:center;gap:8px;padding:calc(14px + env(safe-area-inset-top,0px)) 16px 12px;background:var(--bg);border-bottom:1px solid var(--border2)}
.admin-title{font-family:var(--font-serif);font-size:1.35em;color:var(--text)}
.admin-tabs{display:flex;gap:8px;padding:14px 16px 4px;background:var(--bg)}
.admin-tab{flex:1;padding:10px;border:1px solid var(--border2);border-radius:12px;background:var(--surface);color:var(--text2);font-family:inherit;font-size:.82em;font-weight:600;cursor:pointer;transition:all .15s}
.admin-tab.active{background:var(--accent);color:#fff;border-color:var(--accent)}
.admin-body{padding:8px 16px calc(40px + env(safe-area-inset-bottom,0px))}
.admin-loading,.admin-empty{padding:24px 8px;text-align:center;color:var(--text3);font-size:.85em}
.admin-section-title{font-size:.72em;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text3);margin:22px 2px 10px}

.admin-kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:8px}
.admin-kpi{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:14px 8px;text-align:center}
.admin-kpi-num{font-family:var(--font-serif);font-size:1.5em;color:var(--text);line-height:1}
.admin-kpi-label{font-size:.66em;color:var(--text2);margin-top:6px;text-transform:uppercase;letter-spacing:.03em}

.admin-chips{display:flex;flex-wrap:wrap;gap:8px}
.admin-chip{display:flex;align-items:center;gap:8px;background:var(--surface);border:1px solid var(--border2);border-radius:20px;padding:6px 12px;font-size:.8em;color:var(--text2)}
.admin-chip b{color:var(--text);font-weight:700}
button.admin-chip{font-family:inherit;cursor:pointer;transition:background .15s,border-color .15s}
button.admin-chip.clickable{border-color:var(--tint-comment-border);color:var(--text)}
@media(hover:hover){button.admin-chip:hover{background:var(--tint-comment-bg)}}

.admin-users{display:flex;flex-direction:column;gap:8px}
.admin-user{display:flex;flex-direction:column;gap:10px;background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:12px}
.admin-user-top{display:flex;align-items:center;justify-content:space-between;gap:10px}
.admin-user-id{display:flex;align-items:center;gap:10px;min-width:0}
.admin-user-name{font-size:.92em;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.admin-avatar{width:34px;height:34px;border-radius:50%;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:.82em;font-weight:700;flex-shrink:0}
.admin-avatar.sm{width:28px;height:28px;font-size:.72em}
.admin-tosort{display:flex;flex-direction:column;align-items:flex-end;line-height:1;flex-shrink:0}
.admin-tosort b{font-family:var(--font-serif);font-size:1.45em;color:var(--accent)}
.admin-tosort span{font-size:.62em;color:var(--text3);text-transform:uppercase;letter-spacing:.03em;margin-top:3px}
.admin-tosort.done b{color:var(--positive)}
.admin-user-stats{display:flex;gap:6px}
.admin-stat{flex:1;display:flex;flex-direction:column;align-items:center;gap:1px;padding:6px 4px;border:1px solid var(--border2);border-radius:10px;background:var(--surface2);font-family:inherit;cursor:default}
button.admin-stat{cursor:pointer;transition:background .15s}
@media(hover:hover){button.admin-stat:hover{background:var(--surface3)}}
.admin-stat b{font-size:.95em;color:var(--text);font-weight:700}
.admin-stat span{font-size:.6em;color:var(--text3);text-transform:uppercase;letter-spacing:.02em}
.admin-stat.like b{color:var(--positive)}
.admin-stat.dislike b{color:var(--red)}

.admin-activity{display:flex;flex-direction:column;gap:2px}
.admin-act{display:flex;align-items:center;gap:10px;padding:9px 6px;border-radius:10px;cursor:pointer;transition:background .15s}
@media(hover:hover){.admin-act:hover{background:var(--surface2)}}
.admin-act-body{min-width:0;flex:1}
.admin-act-line{font-size:.82em;color:var(--text2);line-height:1.3;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.admin-act-line b{color:var(--text);font-weight:600}
.admin-act-verb.like{color:var(--positive)}
.admin-act-verb.dislike{color:var(--red)}
.admin-act-verb.comment{color:var(--blue)}
.admin-act-time{font-size:.68em;color:var(--text3);margin-top:2px}

.admin-subhead{display:flex;align-items:center;gap:10px;margin-top:8px}
.admin-back-link{background:none;border:none;color:var(--accent);font-family:inherit;font-size:.85em;font-weight:600;cursor:pointer;padding:4px 0}
.admin-subtitle{font-size:.9em;font-weight:600;color:var(--text)}
.admin-seg{display:flex;gap:6px;margin:12px 0}
.admin-seg button{flex:1;padding:8px;border:1px solid var(--border2);border-radius:10px;background:var(--surface);color:var(--text2);font-family:inherit;font-size:.8em;font-weight:600;cursor:pointer}
.admin-seg button.active{background:var(--accent);color:#fff;border-color:var(--accent)}
.admin-anns{display:flex;flex-direction:column;gap:8px}
.admin-ann{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:10px 12px;cursor:pointer;transition:background .15s}
@media(hover:hover){.admin-ann:hover{background:var(--surface2)}}
.admin-ann-title{font-size:.86em;font-weight:600;color:var(--text);line-height:1.3}
.admin-ann-sub{font-size:.74em;color:var(--text3);margin-top:3px}

.admin-scrape-status{display:flex;align-items:center;gap:12px;background:var(--surface);border:1px solid var(--border2);border-radius:14px;padding:14px;margin-top:8px}
.admin-scrape-status.running{border-color:var(--tint-comment-border);background:var(--tint-comment-bg)}
.admin-scrape-status.done{border-color:var(--tint-positive-border);background:var(--tint-positive-bg)}
.admin-scrape-status.failed{border-color:var(--tint-negative-border);background:var(--tint-negative-bg)}
.admin-scrape-status b{font-size:.9em;color:var(--text)}
.admin-scrape-sub{font-size:.74em;color:var(--text2);margin-top:3px}
.admin-scrape-status .ptr-spinner{position:static;width:22px;height:22px;flex-shrink:0}
.admin-scrape-launch{display:flex;gap:8px;margin-top:12px}
.admin-select{flex:1;min-width:0;padding:12px;border:1px solid var(--border2);border-radius:12px;background:var(--surface);color:var(--text);font-family:inherit;font-size:.84em}
.admin-scrape-btn{flex-shrink:0;padding:12px 18px;border:none;border-radius:12px;background:var(--accent);color:#fff;font-family:inherit;font-size:.84em;font-weight:600;cursor:pointer}
.admin-scrape-btn:disabled{opacity:.5;cursor:not-allowed}
.admin-scrape-note{font-size:.72em;color:var(--text3);margin-top:8px;line-height:1.4}
.admin-runs{display:flex;flex-direction:column;gap:2px}
.admin-run{display:flex;align-items:flex-start;gap:10px;padding:9px 6px}
.admin-run-dot{width:8px;height:8px;border-radius:50%;margin-top:5px;flex-shrink:0;background:var(--text3)}
.admin-run-dot.done{background:var(--positive)}
.admin-run-dot.partial{background:var(--accent)}
.admin-run-dot.failed{background:var(--red)}
.admin-run-dot.running{background:var(--blue)}
.admin-run-dot.interrupted{background:#b8893f}
/* Scrape interrompu (process tué avant la fin) : ambre, distinct d'une erreur (rouge). */
.admin-scrape-status.interrupted{border-color:rgba(184,137,63,.35);background:rgba(184,137,63,.08)}
.run-running{color:var(--blue);font-weight:600}
.run-interrupted{color:#b8893f;font-weight:600}
.admin-run-dot.running{background:var(--blue)}
.admin-run-body{flex:1;min-width:0}
.admin-run-line{font-size:.82em;color:var(--text2)}
.admin-run-line b{color:var(--text);font-weight:600}
.admin-run-sub{font-size:.72em;color:var(--text3);margin-top:2px}
.run-when{color:var(--text2)}
.admin-run-line b.run-new,.admin-scrape-sub b.run-new{color:var(--positive)}
.admin-run-line b.run-removed,.admin-scrape-sub b.run-removed{color:var(--red)}
.admin-run-line b.run-zero,.admin-scrape-sub b.run-zero{color:var(--text3)}
.run-sep{color:var(--text3)}
.run-err{color:var(--red);font-size:.92em}
.run-running{color:var(--blue);font-weight:600}
.admin-run.clickable{cursor:pointer;border-radius:10px;padding-right:8px;-webkit-tap-highlight-color:transparent}
.admin-run.clickable:hover{background:var(--surface)}
.admin-run.open{background:var(--surface)}
.admin-run-chev{color:var(--text3);margin-top:4px;flex-shrink:0;transition:transform .15s ease}
.admin-run.open .admin-run-chev{transform:rotate(180deg)}
.admin-run-detail{margin:0 0 6px 18px;padding-left:12px;border-left:2px solid var(--border2)}
.admin-run-detail[hidden]{display:none}
.admin-run-detail-load,.admin-run-detail-empty{font-size:.78em;color:var(--text3);padding:8px 4px}
.run-site{display:flex;align-items:flex-start;gap:9px;padding:7px 4px}
.run-site-body{flex:1;min-width:0}
.run-site-line{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.run-site-name{font-size:.84em;font-weight:600;color:var(--text)}
.run-site-counts{font-size:.82em}
.run-site-counts b.run-new{color:var(--positive)}
.run-site-counts b.run-removed{color:var(--red)}
.run-site-counts b.run-zero{color:var(--text3)}
.run-site-status{font-size:.7em;color:var(--text3);margin-left:auto}
.run-site-sub{font-size:.72em;color:var(--text3);margin-top:2px}
.run-site-note{font-size:.7em;color:var(--accent);margin-top:2px}
.run-site-err{font-size:.7em;color:var(--red);margin-top:2px;word-break:break-word;font-family:ui-monospace,monospace}
.run-site-foot{font-size:.66em;color:var(--text3);padding:6px 4px 2px;font-style:italic}

.admin-dup{background:var(--surface);border:1px solid var(--border);border-radius:16px;padding:5px 6px 7px;margin-bottom:11px;box-shadow:0 1px 2px rgba(18,24,32,.04)}
.admin-dup-head{display:flex;align-items:center;gap:9px;padding:9px 8px}
.admin-dup-count{display:inline-flex;align-items:baseline;gap:5px;color:var(--text2);font-size:.74em;font-weight:500}
.admin-dup-count b{font-family:var(--font-serif);font-weight:400;font-size:1.25em;color:var(--ink);line-height:1}
.admin-dup-sep{height:1px;background:var(--border2);margin:0 6px 2px}
.admin-dup-mem{display:flex;align-items:center;gap:11px;padding:7px 8px;border-radius:12px;cursor:pointer;transition:background .15s}
@media(hover:hover){.admin-dup-mem:hover{background:var(--surface2)}}
.admin-dup-mem.gone{opacity:.55}
.admin-dup-thumb{width:56px;height:56px;border-radius:11px;object-fit:cover;flex-shrink:0;background:var(--surface3);display:block}
.admin-dup-mem.gone .admin-dup-thumb{filter:grayscale(1)}
.admin-dup-thumb-ph{width:56px;height:56px;border-radius:11px;flex-shrink:0;background:var(--surface3);display:flex;align-items:center;justify-content:center;color:var(--text3)}
.admin-dup-mem-body{min-width:0;flex:1}
.admin-dup-src{display:inline-flex;align-items:center;gap:5px;font-size:.62em;font-weight:600;color:var(--text2);background:var(--surface2);border:1px solid var(--border2);border-radius:7px;padding:2px 8px 2px 6px;margin-bottom:5px}
.admin-dup-srcdot{width:6px;height:6px;border-radius:50%;background:var(--text3);flex-shrink:0}
.admin-dup-mem-title{font-size:.84em;font-weight:600;color:var(--text);line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.admin-dup-gone{color:var(--red);font-weight:500;font-size:.9em}
.admin-dup-mem-sub{font-size:.74em;color:var(--text3);margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* Édition d'un groupe de doublons : corriger un faux positif */
.admin-dup-edit{margin-left:auto;display:inline-flex;align-items:center;font-size:.68em;font-weight:600;color:var(--accent);cursor:pointer;padding:5px 11px;border-radius:8px;border:1px solid var(--border2);background:var(--surface2);white-space:nowrap;-webkit-tap-highlight-color:transparent}
.admin-dup.editing{border-color:rgba(0,104,255,.4);box-shadow:0 0 0 1px rgba(0,104,255,.16)}
.admin-dup.editing .admin-dup-mem{cursor:default}
@media(hover:hover){.admin-dup.editing .admin-dup-mem:hover{background:transparent}}
.admin-dup-edithint{font-size:.7em;color:var(--text3);padding:0 8px 7px;line-height:1.4}
.admin-dup-detach{flex-shrink:0;display:inline-flex;align-items:center;font-size:.68em;font-weight:600;color:var(--red);background:rgba(194,85,80,.08);border:1px solid rgba(194,85,80,.28);border-radius:9px;padding:7px 11px;cursor:pointer;font-family:inherit;-webkit-tap-highlight-color:transparent}
.admin-split{display:flex;align-items:center;gap:10px;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:9px 10px;margin-bottom:8px}
.admin-split-body{min-width:0;flex:1}
.admin-split-line{font-size:.76em;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.admin-split-vs{font-size:.58em;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--red);margin:2px 0}
.admin-split-relink{flex-shrink:0;display:inline-flex;align-items:center;font-size:.68em;font-weight:600;color:var(--accent);background:var(--surface2);border:1px solid var(--border2);border-radius:9px;padding:7px 11px;cursor:pointer;font-family:inherit;-webkit-tap-highlight-color:transparent}
.admin-budget-bw{font-size:.74em;color:var(--text3);margin-top:4px}
.admin-empty code{background:var(--surface2);border:1px solid var(--border2);border-radius:6px;padding:1px 6px;font-size:.92em;color:var(--text2)}

/* ── Indicateur de compte actif (anti contamination de compte) ───────────── */
.header-profil{width:auto;min-width:36px;gap:7px;padding-left:4px;border-radius:18px}
.header-profil-name{font-size:.8em;font-weight:600;color:var(--text2);max-width:96px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.header-profil-name:empty{display:none}
.profil-logout-all{margin-top:10px;color:var(--red)}

/* ═══════ Couche Famille (beta fermee — body.is-famille-beta) ═══════
   CSS par defaut = experience historique (fail-closed) : toutes les surfaces
   beta sont masquees tant que la classe n'est pas posee par /api/me. */

/* Onglet Famille : rendu statique mais invisible hors beta */
body:not(.is-famille-beta) .tab-famille{display:none}

/* Geometrie hors beta : sur mobile la colonne fantome CONSERVE sa place
   (COL_PCT=20% est global — un display:none decalerait Profil d'un ecran) ;
   sur desktop elle sort de la grille. */
@media(max-width:768px){
  body:not(.is-famille-beta) .col-famille{visibility:hidden;pointer-events:none}
}
@media(min-width:769px){
  .board{position:relative}
  body.is-famille-beta .board{grid-template-columns:minmax(0,1fr) minmax(0,1.3fr) minmax(0,1fr) minmax(0,1fr)}
  body:not(.is-famille-beta) .col-famille{display:none}
  /* Profil : plus jamais un enfant de grille traine — panneau superpose plein
     board (correctif transversal assume pour tous, l'ancienne translation de
     grille etait degradee). */
  .col-profil{display:none}
  .col-profil.is-overlay{display:flex;position:absolute;inset:0;z-index:60;background:var(--bg);border-radius:var(--radius)}
}

/* Badge non-vu (mobile uniquement — pilote par le watermark) */
.column-tabs .count.fam-badge{position:absolute;top:1px;left:calc(50% + 5px);background:var(--accent);color:#fff;font-size:.6em;font-weight:700;min-width:16px;height:16px;padding:0 4px;border-radius:9px;display:flex;align-items:center;justify-content:center;box-shadow:0 1px 4px rgba(0,104,255,.4);opacity:1}
.column-tabs .count.fam-badge:empty{display:none}

/* Colonne Famille */
.col-famille .column-header{color:var(--rose-deep)}
.col-famille .column-cards{padding:4px 20px 110px;gap:0;scroll-padding-top:14px;scroll-padding-bottom:110px;background:var(--bg)}
.fam-grp{font-size:.7em;text-transform:uppercase;letter-spacing:.07em;color:var(--text3);font-weight:600;margin:26px 0 4px;display:flex;align-items:baseline;gap:7px}
.fam-grp .g-count{opacity:.55;font-weight:500}
.fam-grp:first-child{margin-top:14px}
.fam-empty{font-size:.8em;color:var(--text3);padding:10px 0 6px;line-height:1.5}

/* Rangee : conteneur non interactif, lien ETIRE + bouton resume FRERES
   (jamais d'imbrication interactive). */
.fam-item{position:relative;display:flex;gap:13px;padding:13px 0;border-bottom:1px solid var(--border2)}
.fam-stretch{position:absolute;inset:0;z-index:1;border-radius:10px}
.fam-stretch:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.fam-ph{position:relative;flex:0 0 92px;height:70px;border-radius:10px;background-size:cover;background-position:center;background-color:var(--surface3)}
.fam-bd{flex:1;min-width:0;display:flex;flex-direction:column;gap:5px}
.fam-line1{display:flex;align-items:baseline;gap:8px;min-width:0}
.fam-price{font-family:var(--font-serif);font-size:1.08em;color:var(--ink);white-space:nowrap}
.fam-loc{font-size:.76em;color:var(--text2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fam-line-cmt{display:flex}
.fam-comments{display:inline-flex;align-items:center;gap:4px;font-size:.74em;color:var(--text2);font-weight:600}
.fam-comments svg{width:13px;height:13px}
.fam-evt-head{font-size:.72em;color:var(--text2)}
.fam-evt-head b{color:var(--ink);font-weight:600}
.fam-when{font-size:.68em;color:var(--text3)}
/* M11c : dans Coups de coeur l'evenement est une note neutre — pas d'emphase */
.fam-evt-foot b{color:inherit;font-weight:500}

/* Marqueur personnel sur la photo (couche perso, comme le badge) */
.fam-me{position:absolute;top:-6px;left:-6px;width:21px;height:21px;border-radius:50%;display:flex;align-items:center;justify-content:center;border:2px solid var(--bg);box-shadow:0 1px 4px rgba(0,0,0,.22);z-index:2}
.fam-me svg{width:11px;height:11px;fill:currentColor;stroke:currentColor}
.fam-me--like{background:var(--rose);color:#fff}
.fam-me--dislike{background:var(--text2);color:#fff}

/* ── ReactionSummary : segments egaux par personne, depliable.
   Replie : segments jointifs = barre continue proportionnelle.
   Deplie : espaces + prenom sous chaque segment (cascade bornee). ── */
.rs-slot{position:relative;z-index:2;display:block}
.reaction-summary{display:flex;align-items:center;gap:8px;width:100%;background:none;border:none;padding:2px 0;margin:0;cursor:pointer;font-family:inherit;text-align:left;-webkit-tap-highlight-color:transparent}
.reaction-summary:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}
.rs-count{display:inline-flex;align-items:center;gap:4px;font-size:.74em;font-weight:600;flex-shrink:0;transition:opacity .26s ease}
.rs-count svg{width:12px;height:12px}
.rs-count--like{color:var(--rose-deep)}
.rs-count--like svg{fill:currentColor}
.rs-count--dislike{color:#66727e}
.reaction-summary.is-open .rs-count{opacity:0}
.rs-track{flex:1;display:flex;gap:0;min-width:0;transition:gap .26s cubic-bezier(.25,.1,.25,1)}
.rs-seg{flex:1;min-width:0;display:flex;flex-direction:column;align-items:stretch}
.rs-seg i{display:block;height:4px;transition:height .26s cubic-bezier(.25,.1,.25,1),border-radius .26s ease}
.rs-seg:first-child i{border-radius:2px 0 0 2px}
.rs-seg:last-child i{border-radius:0 2px 2px 0}
.rs-seg--like i{background:var(--rose)}
.rs-seg--dislike i{background:#66727e}
.rs-seg em{font-style:normal;font-size:.58em;color:var(--text2);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-height:0;opacity:0;transform:translateY(-2px);transition:opacity .26s ease,transform .26s ease,max-height .26s ease}
.reaction-summary.is-open .rs-track{gap:3px}
.reaction-summary.is-open .rs-seg i{height:6px;border-radius:3px}
.reaction-summary.is-open .rs-seg em{max-height:14px;opacity:1;transform:none;margin-top:3px}
@media(prefers-reduced-motion:reduce){
  .rs-track,.rs-seg i,.rs-seg em,.rs-count{transition:none !important}
}

/* Surfaces hotes du resume */
.corb-fam-line{display:flex;flex-direction:column;gap:3px;margin-top:2px}
.card-rs-line{padding:2px 2px 4px}
.detail-rs{max-width:340px;margin:2px auto 16px}

/* Accessibilite */
.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}

/* ═══════════════════════════════════════════════════════════════════════════
   Precision Hybrid — identité Henni Auto
   Nacré froid + graphite + bleu électrique. Les règles ci-dessous
   consolident les composants historiques sans modifier leurs comportements.
   ═══════════════════════════════════════════════════════════════════════════ */

html{background:var(--bg);color-scheme:light}
body{
  background:
    radial-gradient(circle at 50% -20%,rgba(0,104,255,.055),transparent 32rem),
    var(--bg);
  font-variant-numeric:tabular-nums;
}
button,input,textarea,select{font:inherit}
button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{
  outline:2px solid var(--accent);outline-offset:3px
}

/* Connexion — carte d'accès inspirée d'une clé numérique. */
#view-login{
  display:none;position:fixed;inset:0;z-index:500;align-items:center;justify-content:center;
  padding:24px;background:
    radial-gradient(circle at 20% 10%,rgba(53,164,255,.14),transparent 26rem),
    radial-gradient(circle at 90% 90%,rgba(18,24,32,.07),transparent 30rem),
    var(--bg)
}
.login-shell{
  width:100%;max-width:390px;padding:38px;border:1px solid rgba(255,255,255,.86);
  border-radius:24px;background:rgba(255,255,255,.88);backdrop-filter:blur(20px);
  -webkit-backdrop-filter:blur(20px);box-shadow:0 28px 70px rgba(18,24,32,.14),0 2px 8px rgba(18,24,32,.06);
  text-align:left
}
.login-brand-mark{width:72px;height:72px;margin-bottom:24px;border-radius:20px;overflow:hidden;box-shadow:0 12px 28px rgba(18,24,32,.2)}
.login-brand-mark img{display:block;width:100%;height:100%}
.login-wordmark{font-family:var(--font-display);font-size:1.7rem;font-weight:800;letter-spacing:.08em;color:var(--ink);line-height:1}
.login-wordmark span{font-weight:500;color:var(--text2)}
.login-subtitle{margin:10px 0 30px;color:var(--text2);font-size:.84rem;line-height:1.55}
.login-form{display:flex;flex-direction:column;gap:12px}
.login-input{width:100%;padding:14px 15px;border:1px solid var(--border2);border-radius:var(--radius-control);background:#fff;color:var(--text);outline:none;transition:border-color .18s,box-shadow .18s}
.login-input::placeholder{color:var(--text3)}
.login-input:focus{border-color:rgba(0,104,255,.6);box-shadow:0 0 0 4px rgba(0,104,255,.1)}
.login-button{display:flex;align-items:center;justify-content:space-between;width:100%;margin-top:4px;padding:14px 16px;border:0;border-radius:var(--radius-control);background:var(--surface-inverse);color:#fff;font-weight:700;cursor:pointer;box-shadow:0 10px 22px rgba(18,24,32,.16);transition:background .18s,transform .15s,box-shadow .18s}
.login-button svg{width:19px;height:19px;color:#63b3ff;transition:transform .18s}
.login-button:active{transform:scale(.985)}
.login-button:hover{background:#1d2935;box-shadow:0 12px 26px rgba(18,24,32,.2)}
.login-button:hover svg{transform:translateX(3px)}
.login-error{display:none;margin-top:12px;color:var(--red);font-size:.78rem;line-height:1.45}

/* Entête, titres et filtres. */
#view-board{position:relative}
#view-board::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,var(--surface-inverse),var(--accent) 48%,#47b3ff);z-index:80}
.view-title{font-family:var(--font-display);font-size:30px;font-weight:700;letter-spacing:-.045em;line-height:1.08;color:var(--ink);padding:30px 20px 7px}
.view-subtitle{padding-bottom:14px;color:var(--text2)}
.vsub-count{color:var(--accent);font-weight:700}
.header-actions{top:24px;right:20px;gap:8px}
.header-profil-name{font-size:.72rem;font-weight:700;color:var(--text2);letter-spacing:.01em}
.header-profil{width:auto;min-width:36px;gap:9px}
#headerProfilAvatar{background:var(--surface-inverse);box-shadow:0 0 0 2px #fff,0 0 0 3px var(--border2)}
.header-admin{color:var(--accent);background:var(--accent-soft)}
.filter-bar{gap:7px}
.filter-chip{padding:8px 13px;border:1px solid var(--border);border-radius:10px;background:rgba(255,255,255,.72);font-weight:600;color:var(--text2)}
.filter-chip.active{background:var(--accent-soft);border-color:rgba(0,104,255,.28);color:var(--accent)}
.filter-clear{color:var(--accent)}
.filter-dropdown{border-radius:14px;border-color:var(--border2);box-shadow:0 18px 48px rgba(18,24,32,.14)}
.filter-sort-option.selected{background:var(--accent-soft)}

/* Board desktop : trois panneaux d'inventaire précis, sans tonalité immobilière. */
.board{gap:12px;padding:0 12px 12px}
.column{border:1px solid var(--border);background:rgba(255,255,255,.46);border-radius:16px}
.column-header{padding:13px 15px;border-bottom-color:var(--border);font-size:.67rem;font-weight:700;letter-spacing:.11em;color:var(--text3)}
.column-header .col-count{font-weight:700;opacity:.65;color:var(--text2)}
.col-deck,.col-favoris,.col-corbeille{background:rgba(255,255,255,.46)}
.col-deck .column-header{color:var(--accent)}
.col-favoris .column-header{color:var(--ink)}
.ptr-indicator{border:1px solid var(--border);box-shadow:0 6px 18px rgba(18,24,32,.12)}

/* Cartes véhicule. */
.card{
  border:1px solid var(--border2);border-radius:var(--radius);box-shadow:var(--shadow-card);
  background:var(--surface);transition:transform .22s cubic-bezier(.2,.8,.2,1),box-shadow .22s,border-color .22s
}
.card.stripe-top{border-color:var(--border2)}
.card-img,.card-img-placeholder,.card-gallery{height:190px;background:var(--surface2)}
.card-gallery-dots{bottom:9px;padding:5px 7px;border-radius:999px;background:rgba(18,24,32,.32);backdrop-filter:blur(8px)}
.card-gallery-dots span{width:4px;height:4px}
.card-gallery-dots span.active{width:13px;border-radius:4px;background:#fff}
.card-fav-share{background:rgba(18,24,32,.78);color:#fff;border:1px solid rgba(255,255,255,.22);box-shadow:0 6px 18px rgba(18,24,32,.2)}
.card-body{padding:16px 17px 8px}
.card-price-row{margin-bottom:4px}
.card-price{font-family:var(--font-display);font-size:1.18rem;font-weight:800;color:var(--ink);letter-spacing:-.045em}
.card-old-price{color:var(--text3)}
.card-title{font-size:.82rem;font-weight:600;color:var(--text);line-height:1.45;margin-bottom:3px}
.card-loc{font-size:.7rem;color:var(--text3);margin-bottom:13px}
.vehicle-meta{display:grid;gap:9px}
.vehicle-location{display:flex;align-items:center;gap:9px;min-width:0;color:var(--text)}
.vehicle-location svg{width:17px;height:17px;flex:0 0 auto;color:var(--accent)}
.vehicle-location span,.vehicle-provenance{display:flex;flex-direction:column;min-width:0}
.vehicle-meta small{font-size:.56rem;font-weight:800;letter-spacing:.09em;text-transform:uppercase;color:var(--text3);line-height:1.2}
.vehicle-meta strong{font-family:var(--font-display);font-size:.75rem;font-weight:700;color:var(--ink);line-height:1.35}
.card-vehicle-meta{grid-template-columns:minmax(0,1fr) auto;align-items:center;margin:7px 0 14px;padding:10px 11px;background:var(--surface2);border:1px solid var(--border);border-radius:10px}
.card-vehicle-meta .vehicle-provenance{padding-left:10px;border-left:1px solid var(--border2)}
.card-vehicle-meta .vehicle-provenance strong{color:var(--accent)}
.card-chips{gap:6px;margin-bottom:15px}
.chip,.badge{padding:4px 8px;border-radius:7px;font-size:.64rem;font-weight:700;letter-spacing:.015em}
.chip{background:var(--surface2);color:var(--text2);border:1px solid transparent}
.badge-certified{background:rgba(22,131,106,.1);color:var(--green);border:1px solid rgba(22,131,106,.16)}
.card-pubdate{font-size:.64rem;color:var(--text3);margin-bottom:12px}
.toolbar[data-context="card"]{border-top-color:var(--border);margin:0 -20px;padding:6px 10px}
.toolbar[data-context="card"]:has(~ .feed-reactions-log),.toolbar[data-context="card"]:has(~ .feed-comments.open){border-bottom-color:var(--border)}
.btn-reaction{border-radius:9px;color:var(--text2)}
.btn-reaction--fav.is-on,.btn-reaction--positive.is-on .btn-reaction__icon{color:var(--accent)}
.btn-primary{border-radius:9px}
.toolbar .btn-primary--visit{border-radius:8px;background:var(--surface-inverse);border-color:var(--surface-inverse)}
.toolbar .btn-primary--visit.btn-primary--go{background:#fff;color:var(--accent);border-color:rgba(0,104,255,.3)}
.feed-content{background:var(--accent-soft);border-color:rgba(0,104,255,.12)}
.feed-composer-field:focus-within,.comment-composer-field:focus-within{border-color:rgba(0,104,255,.42);box-shadow:0 0 0 4px rgba(0,104,255,.08)}
.feed-submit,.comment-composer-actions button{background:var(--accent)}

/* Les statuts deviennent des plaques techniques horizontales. */
.card-offline-overlay span,.card-vendue-overlay span{
  top:12px;left:12px;transform:none;padding:7px 10px;border-radius:7px;
  font-size:.59rem;letter-spacing:.1em;box-shadow:0 6px 18px rgba(18,24,32,.2)
}
.card-offline-overlay span{background:var(--surface-inverse)}
.availability-missing_unconfirmed span,.availability-historical_unavailable span{background:var(--warning)}
.availability-out_of_scope span{background:#596673}
.card-vendue-overlay span{background:var(--surface-inverse);border-left:3px solid var(--accent)}
.detail-availability{background:var(--surface2);border:1px solid var(--border2);color:var(--text2)}

/* Listes secondaires. */
.corb-grp,.fav-grp{font-size:.61rem;color:var(--text3);letter-spacing:.13em}
.corb-row{background:transparent;border-bottom-color:var(--border)}
.corb-ph{filter:saturate(.35) contrast(.98);border:1px solid var(--border)}
.corb-price{font-family:var(--font-display);font-weight:700;color:var(--text)}
.corb-under,.corb-restore{background:var(--accent-soft);border-color:rgba(0,104,255,.26);color:var(--accent)}
.corb-empty-disc{background:linear-gradient(145deg,#fff,var(--surface2));border:1px solid var(--border);color:var(--text3);box-shadow:0 12px 30px rgba(18,24,32,.06)}
.corb-empty h2{font-family:var(--font-display);font-weight:700;color:var(--ink);letter-spacing:-.025em}
.corb-empty p{color:var(--text2)}

/* Fiche véhicule : galerie cockpit et fiche technique. */
#view-detail{background:var(--bg)}
.carousel{background:#0d1218}
.detail-carousel .carousel-track img{height:min(56vh,580px);background:#0d1218}
.detail-overlay-btn{background:rgba(18,24,32,.78);color:#fff;border:1px solid rgba(255,255,255,.2);box-shadow:0 8px 24px rgba(0,0,0,.24)}
.detail-overlay-btn:active{background:#1d2935}
.detail-scroll-header{background:rgba(243,245,247,.9);border-bottom-color:var(--border2)}
.detail-scroll-header .detail-overlay-btn{color:var(--text)}
.detail-content{max-width:760px;padding:30px 28px 120px;border-radius:18px 18px 0 0;background:var(--surface);box-shadow:0 -8px 30px rgba(18,24,32,.06)}
.detail-title{font-family:var(--font-display);font-size:1.14rem;font-weight:700;color:var(--text);line-height:1.45;margin-bottom:7px;text-align:left}
.detail-price{font-family:var(--font-display);font-size:2rem;font-weight:800;color:var(--ink);text-align:left;letter-spacing:-.055em}
.detail-location{text-align:left;color:var(--text2);margin:7px 0 24px}
.detail-vehicle-meta{grid-template-columns:minmax(0,1fr) auto;align-items:stretch;margin:16px 0 28px}
.detail-vehicle-meta>div{padding:13px 15px;background:var(--surface2);border:1px solid var(--border);border-radius:11px}
.detail-vehicle-meta .vehicle-location svg{width:20px;height:20px}
.detail-vehicle-meta .vehicle-provenance{justify-content:center;min-width:145px}
.detail-vehicle-meta .vehicle-provenance strong{font-size:.82rem;color:var(--accent)}
.detail-rs{margin-left:0;margin-right:0}
.detail-section{margin-bottom:34px}
.detail-section h3{font-family:var(--font-display);font-size:.78rem;font-weight:800;text-align:left;letter-spacing:.11em;border-top-color:var(--border2)}
.char-group-title{text-align:left;color:var(--text3);font-weight:700;letter-spacing:.1em;padding-left:2px}
.char-group-card{border-radius:12px;border-color:var(--border2);background:var(--surface2)}
.char-row{background:rgba(255,255,255,.66);border-bottom-color:var(--border);padding:14px 16px}
.char-lbl{color:var(--text2)}
.char-val{color:var(--ink);font-weight:700}
.detail-equip{background:#fff;border-color:var(--border2);border-radius:8px;color:var(--text2)}
.contact-action{border-radius:10px}
.contact-action-call{background:rgba(22,131,106,.09);color:var(--green);border-color:rgba(22,131,106,.24)}
.contact-action-source{background:var(--accent-soft);color:var(--accent);border-color:rgba(0,104,255,.25)}
.detail-actions{background:rgba(243,245,247,.92);border-top-color:var(--border2)}
.detail-cta{background:var(--surface-inverse);border-radius:9px}
.detail-cta-call{background:var(--green)}

/* Profil et administration : lecture proche d'une télémétrie sobre. */
.profil-avatar,.admin-avatar{background:var(--surface-inverse)}
.profil-name,.admin-title{font-family:var(--font-display);font-weight:700}
.profil-metric,.profil-activity,.admin-kpi,.admin-user,.admin-ann,.admin-scrape-status,.admin-dup{border:1px solid var(--border);box-shadow:0 8px 24px rgba(18,24,32,.045)}
.profil-metric-num,.admin-kpi-num,.admin-tosort b,.admin-dup-count b{font-family:var(--font-display);font-weight:700}
#view-admin{background:var(--bg)}
.admin-head{background:rgba(243,245,247,.92);border-bottom-color:var(--border2);backdrop-filter:blur(14px)}
.admin-tabs{background:var(--bg)}
.admin-tab{border-radius:9px;background:#fff}
.admin-tab.active,.admin-seg button.active{background:var(--surface-inverse);border-color:var(--surface-inverse)}
.admin-kpi{border-top:3px solid var(--accent)}
.admin-scrape-btn{background:var(--surface-inverse);border-radius:9px}
.admin-run-dot.partial{background:var(--warning)}
.admin-dup-edit,.admin-split-relink{color:var(--accent);background:var(--accent-soft)}

/* Notifications et surfaces flottantes. */
.toast{background:var(--surface-inverse);border:1px solid rgba(255,255,255,.12);box-shadow:0 16px 40px rgba(18,24,32,.24)}
.toast-progress{background:var(--accent)}
.comment-menu,.visit-status-menu{border-color:var(--border2);box-shadow:0 16px 44px rgba(18,24,32,.18)}
.fly-ghost{background:linear-gradient(145deg,rgba(255,255,255,.98),rgba(237,241,244,.94));box-shadow:0 18px 34px rgba(18,24,32,.14),0 6px 16px rgba(0,104,255,.1)}

/* Navigation mobile : aluminium clair, active bleu électrique. */
@media(max-width:768px){
  .view-title{font-size:28px;padding:28px 20px 7px}
  .header-actions{top:22px}
  .header-profil-name{display:none}
  .board{gap:0;padding:0}
  .column-tabs{padding:5px 0 calc(5px + env(safe-area-inset-bottom,0px));background:rgba(255,255,255,.94);border-top-color:var(--border2);box-shadow:0 -10px 30px rgba(18,24,32,.09);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}
  .column-tabs button{padding:7px 0 5px;color:#66737f}
  .column-tabs button.active{color:var(--accent)}
  .column-tabs button svg{width:25px;height:25px}
  .column-tabs .count{color:inherit}
  .column{border:0;border-radius:0;background:transparent}
  .column-cards{padding:20px 20px 110px;gap:34px}
  .col-deck .column-cards{padding-top:20px}
  .col-favoris .column-cards{padding:16px 20px 110px;gap:34px}
  .card-img,.card-img-placeholder,.card-gallery{height:210px}
  .card-body{padding:16px 17px 8px}
  .toast{bottom:92px}
  .detail-carousel .carousel-track img{height:42vh;min-height:280px}
  .detail-content{padding:24px 20px 120px;border-radius:16px 16px 0 0}
  .detail-title{font-size:1rem}
  .detail-price{font-size:1.75rem}
  .detail-vehicle-meta{grid-template-columns:1fr}
  .detail-vehicle-meta .vehicle-provenance{min-width:0}
  .login-shell{max-width:360px;padding:30px 26px;border-radius:20px}
  .login-brand-mark{width:64px;height:64px;border-radius:18px}
}

@media(min-width:769px){
  .column-cards{padding:42px 14px 18px;gap:42px}
  .col-deck .column-cards,.col-favoris .column-cards{padding-top:42px;padding-bottom:18px}
  .col-corbeille .column-cards{padding:10px 18px 18px}
  .card-img,.card-img-placeholder,.card-gallery{height:220px}
  .card:hover{transform:translateY(-3px);border-color:rgba(0,104,255,.25);box-shadow:0 18px 44px rgba(18,24,32,.12),0 4px 12px rgba(18,24,32,.06)}
  .char-group-card{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;background:var(--border)}
  .char-row{border:0;min-height:52px}
}

@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
}
