/* ============================================================================
   CasaGuide — Back-office propriétaire
   Identité visuelle reprise de guide_preview.html : fond sable, encre profonde,
   accent mer, Fraunces pour les titres, Instrument Sans pour le texte.
   ============================================================================ */

:root{
  --sand:#FAF7F2; --shell:#FFFFFF; --ink:#1E2A32; --muted:#6B7A84;
  --sea:#0E5A73; --sea-dark:#0A4658; --line:#E7E0D4; --line-soft:#F1ECE2;
  --ok:#2E7D32; --prog:#EF6C00; --todo:#90A4AE; --alert:#C62828; --lock:#5E35B1;
  --sand-hi:#FFF6E5; --sand-hi-line:#F0E2C0; --sand-hi-ink:#7A5A12;
  --radius:12px; --radius-lg:16px;
  --shadow:0 1px 2px rgba(30,42,50,.05), 0 6px 20px rgba(30,42,50,.06);
  --shadow-pop:0 10px 40px rgba(30,42,50,.18);
  font-variant-numeric:tabular-nums;
}

/* Couleurs de chapitre (A→I) — cohérentes avec les map_color du seed */
:root{
  --ch-A:#546E7A; --ch-B:#0E5A73; --ch-C:#2E7D32; --ch-D:#C62828; --ch-E:#6A1B9A;
  --ch-F:#EF6C00; --ch-G:#0277BD; --ch-H:#00695C; --ch-I:#6D4C41;
}

*{box-sizing:border-box}
html,body{height:100%}
body{margin:0;background:var(--sand);color:var(--ink);
     font-family:"Instrument Sans",system-ui,-apple-system,sans-serif;line-height:1.5;
     -webkit-font-smoothing:antialiased}
h1,h2,h3,h4{font-family:Fraunces,Georgia,serif;font-weight:600;margin:0}
a{color:var(--sea);text-decoration:none}
a:hover{text-decoration:underline}
button{font-family:inherit;font-size:inherit;cursor:pointer}
input,select,textarea{font-family:inherit;font-size:15px;color:var(--ink)}
[data-lucide]{width:1em;height:1em;stroke-width:2;vertical-align:-.125em}
.hidden{display:none !important}

/* ── Boutons ──────────────────────────────────────────────────────────────── */
.btn{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--line);
     background:var(--shell);color:var(--ink);border-radius:10px;padding:9px 16px;
     font-weight:600;font-size:14.5px;line-height:1;transition:.12s;white-space:nowrap}
.btn:hover{border-color:var(--muted);text-decoration:none}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn .ic,.btn [data-lucide]{width:17px;height:17px}
.btn-primary{background:var(--sea);border-color:var(--sea);color:#fff}
.btn-primary:hover{background:var(--sea-dark);border-color:var(--sea-dark)}
.btn-ok{background:var(--ok);border-color:var(--ok);color:#fff}
.btn-ok:hover{filter:brightness(.94)}
.btn-danger{background:#fff;border-color:#E7C4C4;color:var(--alert)}
.btn-danger:hover{background:#FDECEC;border-color:var(--alert)}
/* État « traductions à mettre à jour » (M-09) : contenu modifié depuis la dernière traduction */
.btn-warn{background:#FFF7E8;border-color:#E8CE93;color:#8A5A00}
.btn-warn:hover{background:#FCEFD2;border-color:#D9B25E}
.btn-ghost{background:transparent;border-color:transparent}
.btn-ghost:hover{background:rgba(30,42,50,.05)}
.btn-sm{padding:6px 11px;font-size:13px;border-radius:8px}
.btn-block{width:100%;justify-content:center}

/* ── Barre supérieure ─────────────────────────────────────────────────────── */
.topbar{position:sticky;top:0;z-index:1000;background:rgba(250,247,242,.86);
        backdrop-filter:blur(10px);border-bottom:1px solid var(--line);
        display:flex;align-items:center;gap:16px;padding:12px 22px}
.brand{display:flex;align-items:center;gap:9px;font-family:Fraunces,serif;
       font-weight:700;font-size:19px;color:var(--ink)}
.brand:hover{text-decoration:none}
.brand .mark{width:30px;height:30px;border-radius:8px;background:var(--sea);color:#fff;
             display:grid;place-items:center;font-size:16px}
.topbar .spacer{flex:1}
.usermenu{display:flex;align-items:center;gap:10px;font-size:13.5px;color:var(--muted)}
.usermenu .email{max-width:40vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ── Conteneurs ───────────────────────────────────────────────────────────── */
.page{max-width:1080px;margin:0 auto;padding:26px 22px 90px}
.page-narrow{max-width:560px}
.eyebrow{font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);
         font-weight:600}
.page-title{font-size:30px;margin:.12em 0 .3em}
.crumbs{display:flex;align-items:center;gap:8px;font-size:13.5px;color:var(--muted);
        margin-bottom:6px;flex-wrap:wrap}
.crumbs a{color:var(--muted);font-weight:600}
.card{background:var(--shell);border:1px solid var(--line);border-radius:var(--radius-lg);
      box-shadow:var(--shadow)}
.stack>*+*{margin-top:14px}
.muted{color:var(--muted)}
.row{display:flex;gap:12px;align-items:center;flex-wrap:wrap}

/* ── Badges & pastilles ───────────────────────────────────────────────────── */
.badge{display:inline-flex;align-items:center;gap:5px;border-radius:999px;
       padding:3px 10px;font-size:12px;font-weight:600;line-height:1.3}
.badge-draft{background:#EEF1F3;color:#54636B}
.badge-published{background:#E7F3EA;color:var(--ok)}
.badge-archived{background:#F1ECE2;color:var(--muted)}
.badge-secret{background:#EFE9F7;color:var(--lock)}
.badge-ai{background:#EAF3F6;color:var(--sea)}
.badge-suggested{background:#FFF1E2;color:var(--prog)}
.badge-approved{background:#E7F3EA;color:var(--ok)}
.badge-edited{background:#EAF3F6;color:var(--sea)}
.badge-rejected{background:#F3E9E9;color:var(--alert)}

/* ── Barre de complétude ──────────────────────────────────────────────────── */
.meter{height:8px;background:#EEE8DC;border-radius:5px;overflow:hidden}
.meter>i{display:block;height:100%;background:var(--sea);border-radius:5px;
         transition:width .35s ease}
.meter.mini{height:6px}

/* ── Formulaires ──────────────────────────────────────────────────────────── */
.field{display:block;margin-bottom:16px}
/* :not(.switch) : un interrupteur bool est un <label> mais ne doit pas hériter
   du display:block des libellés de champ (sinon le bouton chevauche le texte). */
.field>label:not(.switch),.field-label{display:block;font-weight:600;font-size:14px;margin-bottom:5px}
.field .help{font-size:12.5px;color:var(--muted);margin:-2px 0 7px}
.field input[type=text],.field input[type=email],.field input[type=password],
.field input[type=tel],.field input[type=url],.field input[type=number],
.field input[type=time],.field input[type=date],.field select,.field textarea{
  width:100%;border:1px solid var(--line);border-radius:10px;padding:10px 12px;
  background:var(--shell);transition:.12s;outline:none}
.field input:focus,.field select:focus,.field textarea:focus{
  border-color:var(--sea);box-shadow:0 0 0 3px rgba(14,90,115,.12)}
.field textarea{min-height:88px;resize:vertical;line-height:1.5}
.field .input-error{border-color:var(--alert)}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
@media(max-width:560px){.grid-2{grid-template-columns:1fr}}

/* Interrupteur (bool) */
.switch{display:inline-flex;align-items:center;gap:10px;cursor:pointer;user-select:none}
.switch input{position:absolute;opacity:0;width:0;height:0}
.switch .track{width:42px;height:24px;background:#D9D2C6;border-radius:999px;
               position:relative;transition:.16s;flex:none}
.switch .track::after{content:"";position:absolute;top:2px;left:2px;width:20px;height:20px;
               background:#fff;border-radius:50%;box-shadow:0 1px 2px rgba(0,0,0,.25);transition:.16s}
.switch input:checked + .track{background:var(--sea)}
.switch input:checked + .track::after{transform:translateX(18px)}
.switch input:focus-visible + .track{box-shadow:0 0 0 3px rgba(14,90,115,.25)}

/* Champ secret chiffré */
.secret-field{border:1px dashed var(--lock);background:#FBF9FE;border-radius:10px;
              padding:12px 13px;margin-bottom:14px}
.secret-field .field{margin-bottom:0}
.secret-note{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--lock);
             font-weight:600;margin-top:7px}

/* Aperçu du QR Wifi (M-06) */
.wifiqr{margin-top:12px}
.wifiqr .field-label{display:flex;align-items:center;gap:6px}
.wifiqr-canvas{margin:8px 0}
.wifiqr-canvas canvas{width:150px;height:150px;image-rendering:pixelated;
             background:#fff;border:1px solid var(--line);border-radius:8px;padding:6px}
.wifiqr-empty{font-size:12.5px;color:var(--muted);background:#fff;border:1px dashed var(--line);
             border-radius:8px;padding:14px 12px}
.wifiqr-foot{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:space-between}
.wifiqr-foot .help{flex:1;min-width:160px}

/* Réseaux Wifi multiples (M-15) */
.wifi-nets{margin:10px 0}
.wifi-net{border:1px solid var(--line);border-radius:12px;padding:14px;margin-bottom:10px;
          background:#FCFAF6;position:relative}
.wifi-net .rm{position:absolute;top:8px;right:8px}
.wifi-net .field{margin-bottom:8px}
.wifi-net-qr{margin-top:8px;display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.wifi-net-qr .wifiqr-canvas{margin:0}
.wifi-net-qr .wifiqr-canvas canvas{width:118px;height:118px}
.wifi-net-qr .wifiqr-empty{flex:1;min-width:150px}

/* Groupe répétable */
.repeat-item{border:1px solid var(--line);border-radius:12px;padding:14px;
             margin-bottom:10px;background:#FCFAF6;position:relative}
.repeat-item .rm{position:absolute;top:8px;right:8px}

/* ── Bannières & encarts ──────────────────────────────────────────────────── */
.notice{border-radius:12px;padding:12px 15px;font-size:13.5px;display:flex;gap:11px;
        align-items:flex-start}
.notice [data-lucide]{width:18px;height:18px;flex:none;margin-top:1px}
.notice-warn{background:var(--sand-hi);border:1px solid var(--sand-hi-line);color:var(--sand-hi-ink)}
.notice-info{background:#EAF3F6;border:1px solid #CFE4EA;color:var(--sea-dark)}
.notice-ai{background:#F4FAF6;border:1px solid #D4E9DA;color:#256b2b}

.empty{text-align:center;padding:48px 20px;color:var(--muted)}
.empty [data-lucide]{width:36px;height:36px;opacity:.6;margin-bottom:10px}
.empty h3{font-size:19px;color:var(--ink);margin-bottom:6px}

.errbox{background:#FDECEC;border:1px solid #F2C4C4;color:#8A2A2A;border-radius:10px;
        padding:11px 14px;font-size:13.5px;margin:12px 0}

/* ── Écran de connexion ───────────────────────────────────────────────────── */
.auth-wrap{min-height:100vh;display:grid;place-items:center;padding:24px}
.auth-card{width:100%;max-width:420px;padding:30px 28px}
.auth-card .brand{font-size:24px;justify-content:center;margin-bottom:4px}
.auth-card .brand .mark{width:36px;height:36px;font-size:20px}
.auth-tabs{display:flex;gap:6px;background:#F1ECE2;border-radius:10px;padding:4px;margin:20px 0 22px}
.auth-tabs button{flex:1;border:none;background:transparent;padding:8px;border-radius:8px;
                  font-weight:600;color:var(--muted)}
.auth-tabs button.on{background:var(--shell);color:var(--ink);box-shadow:var(--shadow)}

/* ── Liste des logements ──────────────────────────────────────────────────── */
.prop-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px}
.prop-card{padding:18px 20px;display:flex;flex-direction:column;gap:12px}
.prop-card h3{font-size:19px}
.prop-card .addr{font-size:13.5px;color:var(--muted);margin-top:2px}
.prop-card .statline{display:flex;justify-content:space-between;align-items:center;
                     font-size:12.5px;color:var(--muted)}
.prop-card .poi-counts{display:flex;gap:6px;flex-wrap:wrap;margin-top:2px}
.prop-card .actions{display:flex;gap:8px;margin-top:auto;padding-top:4px}

/* ── Éditeur de guide (M-03) ──────────────────────────────────────────────── */
.editor{display:grid;grid-template-columns:270px 1fr;gap:22px;align-items:start}
@media(max-width:820px){.editor{grid-template-columns:1fr}}
.chapters{position:sticky;top:74px}
@media(max-width:820px){.chapters{position:static}}
.chap{margin-bottom:6px}
.chap-head{display:flex;align-items:center;gap:9px;width:100%;border:none;background:transparent;
           padding:9px 10px;border-radius:10px;text-align:left;color:var(--ink);font-weight:600}
.chap-head:hover{background:rgba(30,42,50,.04)}
.chap-dot{width:24px;height:24px;border-radius:7px;display:grid;place-items:center;color:#fff;flex:none}
.chap-dot [data-lucide]{width:15px;height:15px}
.chap-head .nm{flex:1;font-size:14.5px}
.chap-head .cnt{font-size:11.5px;color:var(--muted);font-weight:600}
.sec-list{margin:2px 0 8px 12px;border-left:1px solid var(--line);padding-left:6px}
.sec-link{display:flex;align-items:center;gap:8px;width:100%;border:none;background:transparent;
          padding:7px 9px;border-radius:8px;text-align:left;color:#44525A;font-size:13.5px;font-weight:500}
.sec-link:hover{background:rgba(30,42,50,.04)}
.sec-link.on{background:#EAF3F6;color:var(--sea-dark);font-weight:600}
.sec-link .tick{margin-left:auto;color:var(--ok);width:15px;height:15px;flex:none}
.sec-link .tick.off{color:var(--line)}
.sec-link .dim{opacity:.5}

.section-panel{padding:22px 24px}
.section-panel .sp-head{display:flex;align-items:flex-start;gap:12px;margin-bottom:4px}
.section-panel h2{font-size:23px}
.section-panel .sp-desc{color:var(--muted);font-size:14px;margin:6px 0 18px}
.section-panel .sp-toolbar{display:flex;flex-wrap:wrap;gap:14px;align-items:center;
                           border-top:1px solid var(--line-soft);margin-top:18px;padding-top:16px}
.section-panel .sp-toolbar .spacer{flex:1}
.savehint{font-size:12px;color:var(--muted)}
kbd{font-family:inherit;background:#F1ECE2;border-radius:5px;padding:1px 6px;font-size:11.5px;
    border:1px solid var(--line)}

/* ── Photos & documents par section (M-12) ────────────────────────────────── */
.media-panel{border-top:1px solid var(--line-soft);margin-top:18px;padding-top:16px}
.media-head{display:flex;align-items:center;gap:9px}
.media-head h3{font-size:16px}
.media-head .media-count{margin-left:auto;font-size:12px;color:var(--muted);
                         background:#F1ECE2;border-radius:999px;padding:1px 9px;min-width:22px;text-align:center}
.media-head .media-count:empty{display:none}
.media-desc{color:var(--muted);font-size:13px;margin:5px 0 12px}
.media-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;margin-bottom:12px}
.media-grid:empty{display:none}
.media-item{border:1px solid var(--line);border-radius:12px;background:var(--shell);
            padding:8px;display:flex;flex-direction:column;gap:7px}
.media-item.dragging{opacity:.5}
.media-thumb{position:relative;aspect-ratio:4/3;border-radius:8px;overflow:hidden;
             background:#F4F0E7;display:grid;place-items:center;color:var(--muted)}
.media-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.media-thumb.is-pdf{flex-direction:column;gap:2px;color:var(--sea-dark);font-size:11px;font-weight:600}
.media-thumb.is-pdf [data-lucide]{width:26px;height:26px}
.media-thumb.broken{color:var(--alert)}
.media-item input[type=text]{width:100%;border:1px solid var(--line);border-radius:8px;
                             padding:6px 8px;font-size:12.5px}
.media-item input[type=text]:focus{outline:none;border-color:var(--sea)}
.media-actions{display:flex;align-items:center;gap:2px}
.media-actions .btn-sm{padding:4px 6px}
.media-drop{width:100%;border:1.5px dashed var(--line);background:#FCFAF6;border-radius:12px;
            padding:16px;display:flex;flex-direction:column;align-items:center;gap:4px;
            color:var(--muted);font-weight:600;font-size:13.5px;transition:.12s}
.media-drop:hover{border-color:var(--sea);color:var(--sea-dark)}
.media-drop.over{border-color:var(--sea);background:#EAF3F6;color:var(--sea-dark)}
.media-drop [data-lucide]{width:20px;height:20px}
.media-drop .hint{font-weight:400;font-size:11.5px;color:var(--muted)}

/* ── Validation des POI (M-04) ────────────────────────────────────────────── */
.pois-layout{display:grid;grid-template-columns:1fr 420px;gap:20px;align-items:start}
@media(max-width:900px){.pois-layout{grid-template-columns:1fr}}
.pois-map-col{position:sticky;top:74px}
@media(max-width:900px){.pois-map-col{position:static;order:-1}}
#poi-map{height:460px;border-radius:14px;border:1px solid var(--line);box-shadow:var(--shadow)}
@media(max-width:900px){#poi-map{height:300px}}
.filters{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px}
.filters .chip{border:1px solid var(--line);background:var(--shell);border-radius:999px;
               padding:6px 13px;font-size:13px;font-weight:600;color:var(--muted)}
.filters .chip.on{background:var(--sea);border-color:var(--sea);color:#fff}
/* Compteur par filtre (M-23) : « À valider · 12 » — pastille lisible, à jour en direct */
.filters .chip .chip-n{display:inline-block;margin-left:7px;padding:0 7px;border-radius:999px;
                       background:rgba(30,42,50,.08);font-size:12px;font-weight:700}
.filters .chip.on .chip-n{background:rgba(255,255,255,.24)}
.cat-group{margin-bottom:22px}
.cat-group .cat-head{display:flex;align-items:center;gap:9px;margin-bottom:9px}
.cat-group .cat-head .cat-ic{width:26px;height:26px;border-radius:8px;display:grid;
                             place-items:center;color:#fff;flex:none}
.cat-group .cat-head h3{font-size:15px}
.cat-group .cat-head .cnt{font-size:12px;color:var(--muted)}
.cat-group .cat-head .spacer{flex:1}

.poi-card{display:flex;gap:12px;background:var(--shell);border:1px solid var(--line);
          border-left-width:4px;border-radius:12px;padding:12px 14px;margin-bottom:9px;transition:.12s}
.poi-card.hi{box-shadow:0 0 0 2px var(--sea);transform:translateY(-1px)}
.poi-card.is-rejected{opacity:.62}
/* Carte juste arbitrée (M-23) : reste visible, grisée, avec bandeau « Annuler » */
.poi-card.is-acted{opacity:.72;background:var(--sand);padding:11px 14px}
.poi-card .acted-banner{display:flex;align-items:center;gap:9px;width:100%;font-size:13.5px;
                        font-weight:600;color:var(--muted)}
.poi-card .acted-banner .acted-lbl{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.poi-card .acted-banner .spacer{flex:1}
.poi-card .dist{min-width:58px;text-align:center;border-right:1px solid var(--line-soft);
                padding-right:11px;flex:none}
.poi-card .dist b{font-family:Fraunces,serif;font-size:21px;display:block;line-height:1.05}
.poi-card .dist span{font-size:10.5px;color:var(--muted)}
.poi-card .body{flex:1;min-width:0}
.poi-card .body h4{font-size:15.5px;margin:0}
.poi-card .body .sub{font-size:12.5px;color:var(--muted);margin-top:1px}
.poi-card .body p{font-size:13px;color:#3C4A52;margin:6px 0 0}
.poi-card .fav{font-size:13px;color:var(--sea-dark);background:#EAF3F6;border-radius:8px;
               padding:5px 9px;margin-top:7px;display:flex;gap:6px;align-items:flex-start}
.poi-card .poi-meta{display:flex;gap:12px;flex-wrap:wrap;margin-top:7px;font-size:12.5px}
.poi-card .poi-actions{display:flex;gap:6px;margin-top:10px;flex-wrap:wrap}

/* ── Modale ───────────────────────────────────────────────────────────────── */
.modal-back{position:fixed;inset:0;background:rgba(20,28,33,.5);z-index:2000;
            display:grid;place-items:center;padding:20px;backdrop-filter:blur(2px)}
.modal{background:var(--shell);border-radius:16px;box-shadow:var(--shadow-pop);
       width:100%;max-width:520px;max-height:90vh;overflow:auto}
.modal-lg{max-width:680px}
.modal-head{display:flex;align-items:center;gap:10px;padding:18px 22px;
            border-bottom:1px solid var(--line-soft)}
.modal-head h3{font-size:19px;flex:1}
.modal-body{padding:20px 22px}
.modal-foot{display:flex;gap:10px;justify-content:flex-end;padding:16px 22px;
            border-top:1px solid var(--line-soft)}
.modal .close{border:none;background:transparent;color:var(--muted);padding:4px;border-radius:8px}
.modal .close:hover{background:rgba(30,42,50,.06)}
#edit-map,#pos-map,#addpoi-map{height:300px;border-radius:12px;border:1px solid var(--line)}

/* Ajout manuel de lieu (M-22) : résultats de recherche Nominatim + candidats */
hr.soft{border:none;border-top:1px solid var(--line-soft);margin:16px 0}
.poi-search-results{display:flex;flex-direction:column;gap:6px;margin-top:8px;max-height:230px;overflow:auto}
.poi-cand{display:flex;flex-direction:column;gap:2px;text-align:left;width:100%;
          border:1px solid var(--line);background:var(--shell);border-radius:10px;
          padding:9px 12px;cursor:pointer}
.poi-cand:hover{border-color:var(--sea);background:#F7FbFc}
.poi-cand b{font-size:14px;color:var(--ink)}
.poi-cand span{font-size:12px;color:var(--muted)}

/* ── Progression d'enrichissement ─────────────────────────────────────────── */
.steps{list-style:none;padding:0;margin:8px 0 0}
.steps li{display:flex;align-items:center;gap:11px;padding:10px 0;
          border-bottom:1px solid var(--line-soft);font-size:14px}
.steps li:last-child{border-bottom:none}
.step-ic{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;flex:none;
         background:#EEE8DC;color:var(--muted)}
.step-ic.run{background:#FFF1E2;color:var(--prog)}
.step-ic.done{background:#E7F3EA;color:var(--ok)}
.step-ic.fail{background:#F3E9E9;color:var(--alert)}
.step-sub{font-size:12px;color:var(--muted);margin-left:auto}
.spin{animation:spin 1s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* ── Toasts ───────────────────────────────────────────────────────────────── */
#toasts{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);z-index:3000;
        display:flex;flex-direction:column;gap:8px;width:min(92vw,420px)}
.toast{background:var(--ink);color:#fff;border-radius:11px;padding:12px 15px;font-size:14px;
       box-shadow:var(--shadow-pop);display:flex;align-items:center;gap:10px;
       animation:rise .2s ease}
.toast.ok{background:#1f6b26}
.toast.err{background:#a32424}
.toast [data-lucide]{width:18px;height:18px;flex:none}
@keyframes rise{from{opacity:0;transform:translateY(8px)}}

/* Chargement plein écran */
.loading{display:grid;place-items:center;min-height:50vh;color:var(--muted)}
.loading [data-lucide]{width:30px;height:30px}

/* Leaflet : marqueur logement */
.home-pin{font-size:24px;filter:drop-shadow(0 1px 2px rgba(0,0,0,.4))}
