/* =========================================================
   BONAPATTE — Design tokens
   Palette « étiquette de don » : papier kraft, vert forêt,
   moutarde et corail, plutôt qu'un cliché crème+serif+terracotta.
   ========================================================= */
:root{
  --paper: #F7F2E9;
  --paper-raised: #FFFDF9;
  --ink: #2B2420;
  --ink-soft: #6B6155;
  --forest: #3B6255;
  --forest-dark: #274238;
  --forest-tint: #E4EDE8;
  --gold: #D9A441;
  --gold-tint: #F7E8C8;
  --coral: #E2634A;
  --coral-tint: #FBE3DC;
  --line: #E4D8C3;
  --radius: 14px;
  --shadow: 0 2px 10px rgba(43,36,32,.06), 0 1px 2px rgba(43,36,32,.06);
  --font-display: 'Baloo 2', 'Segoe UI', sans-serif;
  --font-body: 'Inter', 'Segoe UI', sans-serif;
  --font-mono: 'IBM Plex Mono', monospace;
}

*{box-sizing:border-box;}
html{scroll-behavior:smooth;}
body{
  margin:0;
  background:var(--paper);
  color:var(--ink);
  font-family:var(--font-body);
  font-size:15px;
  line-height:1.5;
}
h1,h2,h3,.brand{font-family:var(--font-display); font-weight:700; letter-spacing:.2px;}
a{color:var(--forest); text-decoration:none;}
:focus-visible{outline:3px solid var(--gold); outline-offset:2px;}

/* ---------- Layout global ---------- */
.app-shell{display:flex; min-height:100vh;}
.sidebar{
  width:230px; flex-shrink:0;
  background:var(--forest-dark);
  color:#F3EEE2;
  display:flex; flex-direction:column;
  padding:22px 14px;
  position:sticky; top:0; height:100vh;
}
.sidebar .brand{
  color:#fff; font-size:22px; display:flex; align-items:center; gap:8px;
  margin-bottom:28px; padding:0 8px;
}
.sidebar .brand .tag-icon{width:26px;height:26px;flex-shrink:0;}
.nav-item{
  display:flex; align-items:center; gap:10px;
  padding:11px 12px; border-radius:10px; color:#DCE6DF;
  font-weight:600; font-size:14.5px; margin-bottom:4px;
  transition:background .15s ease, color .15s ease;
}
.nav-item svg{width:18px;height:18px; flex-shrink:0;}
.nav-item:hover{background:rgba(255,255,255,.08); color:#fff;}
.nav-item.active{background:var(--gold); color:var(--forest-dark);}
.sidebar-footer{margin-top:auto; padding-top:14px; border-top:1px solid rgba(255,255,255,.12);}
.sidebar .user-mini{display:flex; align-items:center; gap:10px; padding:8px; border-radius:10px;}
.sidebar .user-mini .av{width:34px;height:34px;border-radius:50%;background:var(--gold);color:var(--forest-dark);display:flex;align-items:center;justify-content:center;font-weight:700;flex-shrink:0;}
.sidebar .user-mini small{color:#B9C6BE; display:block;}
.sidebar .logout-link{display:block; margin-top:10px; font-size:13px; color:#B9C6BE;}
.sidebar .logout-link:hover{color:#fff;}

.main{flex:1; min-width:0; padding:26px 34px 60px;}
.topbar{display:flex; align-items:center; justify-content:space-between; margin-bottom:22px; gap:16px;}
.topbar h1{margin:0; font-size:26px; color:var(--forest-dark);}
.topbar .subtitle{color:var(--ink-soft); font-size:14px; margin-top:2px;}

/* ---------- Tag / étiquette (élément signature) ---------- */
.tag-badge{
  position:relative;
  display:inline-flex; align-items:center; gap:6px;
  padding:5px 12px 5px 18px;
  font-family:var(--font-mono); font-size:12px; font-weight:600;
  background:var(--forest-tint); color:var(--forest-dark);
  clip-path: polygon(10px 0, 100% 0, 100% 100%, 10px 100%, 0 50%);
  margin-left:6px;
}
.tag-badge::before{
  content:''; position:absolute; left:5px; top:50%; transform:translateY(-50%);
  width:5px; height:5px; border-radius:50%; background:var(--forest-dark);
}
.tag-badge.dispo{background:var(--forest-tint); color:var(--forest-dark);}
.tag-badge.donne{background:#EDE7DA; color:var(--ink-soft);}
.tag-badge.recherche{background:var(--gold-tint); color:#7A5A17;}
.tag-badge.coral{background:var(--coral-tint); color:var(--coral);}

/* ---------- Cartes ---------- */
.card{
  background:var(--paper-raised); border:1px solid var(--line);
  border-radius:var(--radius); box-shadow:var(--shadow);
}
.card-pad{padding:20px;}

.stat-grid{display:grid; grid-template-columns:repeat(4,1fr); gap:16px; margin-bottom:24px;}
.stat-card{padding:18px 20px;}
.stat-card .num{font-family:var(--font-mono); font-size:28px; font-weight:700; color:var(--forest-dark);}
.stat-card .lbl{color:var(--ink-soft); font-size:13px; margin-top:2px;}

/* ---------- Boutons ---------- */
.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:7px;
  border:none; border-radius:10px; padding:10px 18px;
  font-family:var(--font-body); font-weight:600; font-size:14px;
  cursor:pointer; transition:transform .08s ease, background .15s ease;
}
.btn:active{transform:scale(.97);}
.btn-primary{background:var(--forest); color:#fff;}
.btn-primary:hover{background:var(--forest-dark);}
.btn-gold{background:var(--gold); color:var(--forest-dark);}
.btn-gold:hover{background:#c8933a;}
.btn-outline{background:transparent; border:1.5px solid var(--line); color:var(--ink);}
.btn-outline:hover{border-color:var(--forest); color:var(--forest);}
.btn-danger{background:var(--coral-tint); color:var(--coral);}
.btn-danger:hover{background:var(--coral); color:#fff;}
.btn-sm{padding:6px 12px; font-size:13px;}
.btn:disabled{opacity:.5; cursor:not-allowed;}

/* ---------- Formulaires ---------- */
label{font-weight:600; font-size:13px; color:var(--ink); display:block; margin-bottom:5px;}
.form-group{margin-bottom:16px;}
input[type=text], input[type=email], input[type=password], input[type=date],
input[type=tel], input[type=number], select, textarea{
  width:100%; padding:10px 12px; border:1.5px solid var(--line); border-radius:10px;
  font-family:var(--font-body); font-size:14px; background:#fff; color:var(--ink);
}
input:focus, select:focus, textarea:focus{border-color:var(--forest); outline:none;}
textarea{resize:vertical; min-height:90px;}
.form-row{display:grid; grid-template-columns:1fr 1fr; gap:14px;}
.help-text{font-size:12px; color:var(--ink-soft); margin-top:4px;}
.error-text{font-size:13px; color:var(--coral); margin-top:6px; font-weight:600;}
.success-text{font-size:13px; color:var(--forest); margin-top:6px; font-weight:600;}

/* ---------- Modales ---------- */
.modal-overlay{
  position:fixed; inset:0; background:rgba(43,36,32,.45);
  display:none; align-items:center; justify-content:center; z-index:1000; padding:20px;
}
.modal-overlay.open{display:flex;}
.modal-box{
  background:var(--paper-raised); border-radius:16px; width:100%; max-width:640px;
  max-height:90vh; overflow-y:auto; box-shadow:0 20px 50px rgba(0,0,0,.25);
}
.modal-box.modal-lg{max-width:900px;}
.modal-header{display:flex; align-items:center; justify-content:space-between; padding:18px 22px; border-bottom:1px solid var(--line);}
.modal-header h3{margin:0; font-size:19px; color:var(--forest-dark);}
.modal-close{background:none; border:none; font-size:22px; cursor:pointer; color:var(--ink-soft); line-height:1;}
.modal-body{padding:22px;}
.modal-footer{padding:16px 22px; border-top:1px solid var(--line); display:flex; justify-content:flex-end; gap:10px;}

/* ---------- Onglets ---------- */
.tabs{display:flex; gap:6px; border-bottom:2px solid var(--line); margin-bottom:20px;}
.tab-btn{
  padding:10px 16px; font-weight:700; font-size:14px; color:var(--ink-soft);
  border:none; background:none; cursor:pointer; border-bottom:3px solid transparent; margin-bottom:-2px;
}
.tab-btn.active{color:var(--forest-dark); border-bottom-color:var(--gold);}

/* ---------- Grille d'annonces ---------- */
.annonce-grid{display:grid; grid-template-columns:repeat(auto-fill,minmax(240px,1fr)); gap:18px;}
.annonce-card{overflow:hidden; cursor:pointer; transition:transform .12s ease, box-shadow .12s ease;}
.annonce-card:hover{transform:translateY(-3px); box-shadow:0 10px 24px rgba(43,36,32,.12);}
.annonce-card .img-wrap{height:150px; background:var(--forest-tint); position:relative; overflow:hidden;}
.annonce-card .img-wrap .card-img{width:100%; height:100%; object-fit:cover; display:block;}
.annonce-card .img-wrap .badges{position:absolute; top:8px; left:8px; display:flex; gap:4px;}
.annonce-card .body{padding:12px 14px;}
.annonce-card h4{margin:0 0 4px; font-size:15px; color:var(--ink);}
.annonce-card .meta{font-size:12px; color:var(--ink-soft); display:flex; justify-content:space-between; align-items:center; margin-top:8px;}

.filters-bar{display:flex; gap:10px; flex-wrap:wrap; margin-bottom:18px; align-items:center;}
.filters-bar select, .filters-bar input{width:auto; min-width:150px;}

/* ---------- Pagination ---------- */
.pagination{display:flex; flex-wrap:wrap; gap:6px; align-items:center; justify-content:center; margin:26px 0 6px;}
.pagination .page-link{
  display:inline-flex; align-items:center; justify-content:center;
  min-width:36px; height:36px; padding:0 10px; border-radius:9px;
  font-size:13.5px; font-weight:600; color:var(--ink); background:var(--paper-raised);
  border:1.5px solid var(--line); text-decoration:none;
}
.pagination .page-link:hover{border-color:var(--forest); color:var(--forest);}
.pagination .page-link.current{background:var(--forest); border-color:var(--forest); color:#fff; cursor:default;}
.pagination .page-link.disabled{opacity:.4; pointer-events:none;}
.pagination .page-ellipsis{color:var(--ink-soft); padding:0 4px;}

/* ---------- Messagerie ---------- */
.msg-layout{display:grid; grid-template-columns:300px 1fr; gap:0; height:calc(100vh - 130px); overflow:hidden;}
.conv-list{border-right:1px solid var(--line); overflow-y:auto;}
.conv-item{display:flex; gap:10px; padding:13px 16px; border-bottom:1px solid var(--line); cursor:pointer; position:relative;}
.conv-item:hover, .conv-item.active{background:var(--forest-tint);}
.conv-item .av{width:38px;height:38px;border-radius:50%;background:var(--gold);color:var(--forest-dark);display:flex;align-items:center;justify-content:center;font-weight:700;flex-shrink:0;}
.conv-item .info{min-width:0;}
.conv-item .name{font-weight:700; font-size:14px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.conv-item .annonce-titre{font-size:12px; color:var(--forest); font-weight:600;}
.conv-item .preview{font-size:12.5px; color:var(--ink-soft); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; max-width:190px;}
.conv-item .unread-dot{position:absolute; right:14px; top:16px; width:9px; height:9px; border-radius:50%; background:var(--coral);}
.thread-panel{display:flex; flex-direction:column; height:100%;}
.thread-header{padding:14px 20px; border-bottom:1px solid var(--line); display:flex; align-items:center; justify-content:space-between;}
.thread-msgs{flex:1; overflow-y:auto; padding:20px; display:flex; flex-direction:column; gap:10px;}
.bubble{max-width:60%; padding:10px 14px; border-radius:14px; font-size:14px; line-height:1.4;}
.bubble.mine{align-self:flex-end; background:var(--forest); color:#fff; border-bottom-right-radius:4px;}
.bubble.theirs{align-self:flex-start; background:#fff; border:1px solid var(--line); border-bottom-left-radius:4px;}
.bubble .time{display:block; font-size:10.5px; opacity:.7; margin-top:4px;}
.thread-form{display:flex; gap:10px; padding:14px 18px; border-top:1px solid var(--line);}
.thread-form textarea{min-height:44px; max-height:120px;}
.empty-state{display:flex; flex-direction:column; align-items:center; justify-content:center; height:100%; color:var(--ink-soft); text-align:center; gap:8px; padding:40px;}

/* ---------- Profil ---------- */
.profile-grid{display:grid; grid-template-columns:260px 1fr; gap:24px;}
.avatar-block{text-align:center;}
.avatar-block .av-big{width:110px; height:110px; border-radius:50%; background:var(--gold); color:var(--forest-dark); display:flex; align-items:center; justify-content:center; font-size:38px; font-weight:700; margin:0 auto 14px;}
.pet-tag-list{display:flex; flex-wrap:wrap; gap:8px; margin-top:8px;}
.pet-tag{background:var(--forest-tint); color:var(--forest-dark); border-radius:20px; padding:5px 12px 5px 12px; font-size:13px; font-weight:600; display:flex; align-items:center; gap:6px;}
.pet-tag button{background:none;border:none;color:var(--coral);cursor:pointer;font-weight:700;line-height:1;}

.section-title{font-size:16px; color:var(--forest-dark); margin:26px 0 12px; padding-bottom:8px; border-bottom:1px solid var(--line);}
.section-title:first-child{margin-top:0;}

/* ---------- Boutons de partage (parrainage) ---------- */
.share-buttons{display:flex; flex-wrap:wrap; gap:10px;}
.btn-share{
  display:inline-flex; align-items:center; gap:7px; padding:9px 16px; border-radius:10px;
  font-size:13.5px; font-weight:600; text-decoration:none; border:1.5px solid var(--line);
  background:#fff; color:var(--ink); cursor:pointer; font-family:var(--font-body);
  transition:transform .08s ease, background .15s ease;
}
.btn-share:active{transform:scale(.97);}
.btn-share-whatsapp{color:#25D366; border-color:#25D366;}
.btn-share-whatsapp:hover{background:#25D366; color:#fff;}
.btn-share-sms{color:var(--forest); border-color:var(--forest);}
.btn-share-sms:hover{background:var(--forest); color:#fff;}
.btn-share-email{color:var(--gold); border-color:var(--gold);}
.btn-share-email:hover{background:var(--gold); color:#fff;}
.btn-share-link{color:var(--ink-soft);}
.btn-share-link:hover{border-color:var(--ink); color:var(--ink);}

/* ---------- Packs de crédits (achat) ---------- */
.pack-grid{display:grid; grid-template-columns:repeat(4,1fr); gap:10px;}
.pack-card{
  border:1.5px solid var(--line); border-radius:12px; background:#fff; cursor:pointer;
  padding:14px 8px; text-align:center; transition:border-color .12s ease, background .12s ease;
}
.pack-card:hover{border-color:var(--forest);}
.pack-card.selected{border-color:var(--gold); background:var(--gold-tint);}
.pack-card .pack-nb{font-family:var(--font-mono); font-size:22px; font-weight:700; color:var(--forest-dark);}
.pack-card .pack-lbl{font-size:12px; color:var(--ink-soft);}
.pack-card .pack-prix{font-size:13px; font-weight:600; margin-top:4px;}
@media (max-width:480px){.pack-grid{grid-template-columns:repeat(2,1fr);}}

/* ---------- Packs de crédits (achat) ---------- */
.pack-grid{display:grid; grid-template-columns:repeat(4,1fr); gap:10px;}
.pack-card{
  background:#fff; border:2px solid var(--line); border-radius:12px; padding:14px 8px;
  text-align:center; cursor:pointer; font-family:var(--font-body); transition:border-color .15s ease, background .15s ease;
}
.pack-card:hover{border-color:var(--forest);}
.pack-card.selected{border-color:var(--gold); background:var(--gold-tint);}
.pack-nb{font-family:var(--font-mono); font-size:22px; font-weight:700; color:var(--forest-dark);}
.pack-lbl{font-size:12px; color:var(--ink-soft); margin-bottom:4px;}
.pack-prix{font-size:13px; font-weight:600; color:var(--ink);}
@media (max-width:480px){.pack-grid{grid-template-columns:repeat(2,1fr);}}

.toast-wrap{position:fixed; top:20px; right:20px; z-index:2000; display:flex; flex-direction:column; gap:10px;}
.toast{background:var(--forest-dark); color:#fff; padding:12px 18px; border-radius:10px; box-shadow:var(--shadow); font-size:14px; font-weight:600; animation:slideIn .2s ease;}
.toast.error{background:var(--coral);}
@keyframes slideIn{from{transform:translateX(30px); opacity:0;} to{transform:translateX(0); opacity:1;}}

.img-drop-row{display:flex; gap:10px;}
.img-drop{width:90px; height:90px; border:2px dashed var(--line); border-radius:10px; display:flex; align-items:center; justify-content:center; cursor:pointer; position:relative; overflow:hidden; background:#fff; flex-shrink:0;}
.img-drop img{width:100%; height:100%; object-fit:cover;}
.img-drop span{font-size:11px; color:var(--ink-soft); text-align:center;}
.img-drop input{position:absolute; inset:0; opacity:0; cursor:pointer;}

@media (max-width: 900px){
  .app-shell{flex-direction:column;}
  .sidebar{width:100%; height:auto; position:relative; flex-direction:row; overflow-x:auto;}
  .sidebar-footer{display:none;}
  .main{padding:18px;}
  .stat-grid{grid-template-columns:repeat(2,1fr);}
  .profile-grid{grid-template-columns:1fr;}
  .msg-layout{grid-template-columns:1fr; height:auto;}
  .conv-list{max-height:220px;}
  .form-row{grid-template-columns:1fr;}
}