/* ==========================================================================
   INVprod — ESPACE CLIENT (/mon-espace) — feuille SUPPLÉMENTAIRE
   --------------------------------------------------------------------------
   RÔLE : ce fichier habille le portail privé réservé aux clients du studio
   (tableau de bord client, projets, documents/devis, galerie de médias,
   messagerie…). Il est chargé par mon-espace/inc/top.php.

   IMPORTANT — c'est un SUPPLÉMENT, pas une feuille autonome :
   style.css (la charte graphique v9 du site public) est chargé AVANT celle-ci.
   style.css fournit déjà :
     - les tokens de couleur : --noir, --blanc, --gris-moyen, --gris-clair,
       --gris-fonce, --ligne, --ligne-forte…
     - la texture rayée du site, la typographie Montserrat, la variable
       d'accélération d'animation --ease,
     - les composants de base : .btn, .lead, les titres, etc.
   => On NE redéfinit RIEN de tout cela ici. On ajoute UNIQUEMENT les
      composants propres au portail, en réutilisant ces mêmes tokens, pour
      rester visuellement identique au reste du site.

   CHARTE v9 rappelée : noir/blanc/gris uniquement (AUCUN bleu ni accent
   coloré), coins DROITS (jamais d'arrondi), cadres blancs fins, pas d'ombre
   ni de dégradé, texture rayée pour les fonds « matière ».

   STRUCTURE GÉNÉRALE : une coque à deux colonnes (sidebar de catégories à
   gauche + zone de contenu à droite) qui, sur mobile, se transforme en une
   barre horizontale collante en haut de l'écran.
   ========================================================================== */
/* CHARTE « Paola » — espace client clair, doux et rassurant.
   Ce fichier étant chargé APRÈS le style.css public, on redéfinit ici, dans son
   propre :root, tous les tokens que l'espace client réutilise. Ainsi le portail
   passe en univers Paola (crème/bleu/olive/ocre) quelles que soient les valeurs
   du site public. Les NOMS des tokens sont conservés : seules les VALEURS
   changent.
   --raye = « texture matière » (rayures diagonales très discrètes). Elle passe
   d'un blanc sur noir à un bleu très léger sur clair. */
:root{
  /* Palette Paola (tokens nommés) */
  --creme:#F7F2EA; --bleu:#244F7A; --bleu-clair:#E8EEF3;
  --olive:#445D2A; --ocre:#C99A55; --rose:#E7A39A;
  /* Tokens historiques réaffectés (repris de style.css, ici repeints en clair) */
  --noir:#F7F2EA;         /* fond général → crème */
  --panel:#FFFFFF;        /* fond des blocs/cartes → blanc */
  --gris-fonce:#E8EEF3;   /* survols / zones secondaires → gris-bleu clair */
  --gris-moyen:#5F574A;   /* textes secondaires lisibles sur crème */
  --gris-clair:#111111;   /* texte principal (noir crayonné) */
  --blanc:#244F7A;        /* accent principal → bleu profond */
  --ligne:rgba(17,17,17,.12);        /* bordure fine douce */
  --ligne-forte:rgba(17,17,17,.20);  /* bordure plus marquée */
  --ease:cubic-bezier(.4,0,.2,1);    /* accélération d'animation (repli si absent) */
  --ombre:0 2px 10px rgba(17,17,17,.06);
  --raye:repeating-linear-gradient(45deg,transparent 0 7px,rgba(36,79,122,.06) 7px 8px);
}

/* Corps en colonne pleine hauteur (pour coller le pied en bas). Fond crème et
   texte foncé imposés ici (le style.css public serait sinon prioritaire pour
   la couleur héritée). Typographie Paola : Nunito en texte courant. */
body{
  min-height:100vh;display:flex;flex-direction:column;overflow-x:hidden;
  background:var(--creme);color:var(--gris-clair);
  font-family:'Nunito','Lato',system-ui,Arial,sans-serif;
}
/* Titres en Poppins (repli Nunito puis système). */
h1,h2,h3,.eyebrow,.crm-wordmark{font-family:'Poppins','Nunito',system-ui,Arial,sans-serif}

/* ==========================================================================
   COQUE — sidebar de gauche + zone de contenu à droite
   ========================================================================== */
/* Grille à deux colonnes : sidebar fixe de 250px + contenu élastique (1fr
   = « tout le reste »). align-items:stretch = les deux colonnes s'étirent à
   la même hauteur. flex:1 pour occuper la hauteur laissée par le corps flex. */
.esp-shell{flex:1;display:grid;grid-template-columns:250px 1fr;align-items:stretch;width:100%}

/* Sidebar. position:sticky + top:0 + height:100vh = elle reste visible en
   permanence (collée en haut) et fait toute la hauteur de l'écran ; overflow-y:auto
   = si les liens dépassent, la sidebar défile seule sans bouger le reste. */
.esp-side{
  border-right:1px solid var(--ligne);
  display:flex;flex-direction:column;
  position:sticky;top:0;height:100vh;overflow-y:auto;
  background:var(--noir);
}
.esp-brand-row{padding:26px 26px 22px;border-bottom:1px solid var(--ligne)} /* bloc logo en tête */
.esp-logo{display:block}
.esp-logo img{height:32px;width:auto;display:block}
.esp-logo span{
  display:block;margin-top:8px;
  font-size:.62rem;font-weight:700;letter-spacing:.28em;text-transform:uppercase;color:var(--gris-moyen);
}

/* Liste des liens de navigation. flex:1 = elle occupe toute la hauteur libre
   entre le logo (haut) et le bloc profil (bas), qui se retrouve ainsi poussé
   tout en bas de la sidebar. */
.esp-nav{display:flex;flex-direction:column;padding:14px 0;flex:1}
/* Un lien : icône + libellé alignés (gap:13px). border-left transparent =
   réserve la place du filet blanc de l'état actif (évite un décalage au clic).
   transition = les changements de couleur/fond se font en douceur au survol. */
.esp-nav a{
  display:flex;align-items:center;gap:13px;
  padding:13px 26px;border-left:2px solid transparent;
  color:var(--gris-moyen);font-size:.8rem;font-weight:700;letter-spacing:.06em;
  transition:color .2s var(--ease),background .2s var(--ease);
}
.esp-nav a:hover{color:var(--gris-clair);background:var(--panel)}
.esp-nav a.on{color:var(--blanc);border-left-color:var(--blanc);background:var(--panel)} /* page en cours : filet blanc à gauche */
.esp-nav a svg{flex:0 0 auto} /* l'icône ne se compresse pas (garde sa taille) */
/* Pastille de compteur (ex. nombre de messages non lus). margin-left:auto la
   pousse tout à droite du lien, contre le bord. */
.esp-nav .pill{
  margin-left:auto;background:var(--blanc);color:var(--noir);
  font-size:.62rem;font-weight:800;padding:1px 8px;letter-spacing:0;
}

/* Bloc « profil » en bas de la sidebar : avatar + nom + lien de déconnexion. */
.esp-me{
  border-top:1px solid var(--ligne);padding:18px 26px 22px;
  display:flex;gap:13px;align-items:center;
}
/* Avatar carré (initiales du client). flex:0 0 auto = taille fixe, ne se
   déforme jamais même si le nom à côté est long. */
.esp-me .av{
  flex:0 0 auto;width:36px;height:36px;border:1px solid var(--ligne-forte);
  display:flex;align-items:center;justify-content:center;
  font-size:.72rem;font-weight:800;color:var(--blanc);letter-spacing:.06em;
}
.esp-me div{min-width:0;font-size:.72rem;color:var(--gris-moyen)} /* min-width:0 autorise la troncature du nom ci-dessous */
/* Nom du client : white-space:nowrap + overflow:hidden + text-overflow:ellipsis
   = si le nom est trop long, il est coupé avec « … » au lieu de déborder. */
.esp-me b{display:block;color:var(--blanc);font-size:.8rem;letter-spacing:.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:2px}
.esp-me a{color:var(--gris-moyen);font-weight:700}
.esp-me a:hover,.esp-me a.on{color:var(--blanc)}

/* Colonne de droite (le contenu). min-width:0 = astuce indispensable en grille
   flex/grid : sans elle, un contenu large (tableau, texte long) pourrait
   empêcher la colonne de se rétrécir et casserait la mise en page. */
.esp-content{display:flex;flex-direction:column;min-width:0}
/* Zone principale, centrée et limitée à 1040px de large. clamp(min, idéal, max)
   = la valeur s'adapte à l'écran en restant bornée : ici le padding vertical
   varie entre 30px et 58px (selon 5% de la largeur), l'horizontal entre 20 et
   44px — grand sur desktop, resserré sur mobile, sans palier brutal. */
.esp-content main{flex:1;width:100%;max-width:1040px;margin:0 auto;padding:clamp(30px,5vw,58px) clamp(20px,4vw,44px) 70px}

/* ==========================================================================
   RESPONSIVE — MOBILE : la sidebar devient une barre collante en haut
   @media (max-width:860px) = ne s'applique que sous 860px de large. On passe
   d'une colonne latérale à une barre horizontale posée en haut de l'écran.
   ========================================================================== */
@media(max-width:860px){
  .esp-shell{grid-template-columns:1fr}   /* une seule colonne : plus de sidebar latérale */
  /* La sidebar devient une barre horizontale (flex-direction:row) collée en
     haut (sticky, top:0). height:auto = elle ne fait plus toute la hauteur.
     flex-wrap:wrap = logo/profil sur une ligne, liens qui passent en dessous. */
  .esp-side{
    position:sticky;top:0;z-index:30;height:auto;overflow:visible;
    flex-direction:row;flex-wrap:wrap;align-items:center;
    border-right:0;border-bottom:1px solid var(--ligne);
  }
  .esp-brand-row{flex:1;border-bottom:0;padding:14px 18px;display:flex;align-items:center}
  .esp-logo img{height:26px}
  .esp-logo span{display:none}   /* on masque le sous-titre du logo (place limitée) */
  .esp-me{border-top:0;padding:10px 18px}
  .esp-me .av{display:none}      /* avatar masqué sur mobile */
  .esp-me b{display:none}        /* nom masqué : on ne garde que le lien déconnexion */
  /* La barre de liens passe sur toute la largeur, en 3e position (order:3, donc
     sous le logo/profil), et défile horizontalement si les liens dépassent.
     scrollbar-width:none (+ ::-webkit-scrollbar) = on masque la barre de
     défilement pour un rendu propre ; -webkit-overflow-scrolling:touch = défilement
     fluide « à l'inertie » sur iOS. */
  .esp-nav{
    order:3;flex-direction:row;width:100%;padding:0;flex:0 0 100%;
    overflow-x:auto;border-top:1px solid var(--ligne);
    -webkit-overflow-scrolling:touch;scrollbar-width:none;
  }
  .esp-nav::-webkit-scrollbar{display:none}  /* masque la barre de défilement sous Chrome/Safari */
  /* Les liens deviennent des onglets : le repère d'état actif passe du filet
     GAUCHE (desktop) à un soulignement du BAS (border-bottom). flex:0 0 auto =
     chaque onglet garde sa largeur naturelle et ne s'étire pas. */
  .esp-nav a{
    padding:11px 15px;border-left:0;border-bottom:2px solid transparent;
    white-space:nowrap;flex:0 0 auto;
  }
  .esp-nav a.on{border-bottom-color:var(--blanc)}
  .esp-nav a svg{display:none}   /* icônes masquées : on ne garde que le texte */
  .esp-nav .pill{margin-left:8px}
}

/* ==========================================================================
   TRAME COMMUNE — éléments réutilisés sur toutes les pages du portail
   (titre de page, lien retour, surtitre, cartes, grilles, badges)
   ========================================================================== */
.page-intro{margin-bottom:clamp(26px,4vw,42px)} /* en-tête de page (marge basse adaptative) */
.page-intro h1{margin-bottom:10px}
.page-intro .muted{color:var(--gris-moyen)}
/* Lien « retour ». inline-flex = flèche + texte alignés sur une ligne. */
.back{
  display:inline-flex;align-items:center;gap:9px;color:var(--gris-moyen);
  font-weight:700;font-size:.72rem;letter-spacing:.2em;text-transform:uppercase;margin-bottom:26px;
}
.back:hover{color:var(--blanc)}

/* Surtitre = petite étiquette de section (reprend le style .section-label du site).
   ::after ajoute un court trait horizontal APRÈS le texte (content:"") : flex:0 0 48px
   lui donne une longueur fixe de 48px, height:1px en fait un filet fin. */
.eyebrow{
  display:flex;align-items:center;gap:16px;
  font-size:.72rem;font-weight:700;letter-spacing:.28em;text-transform:uppercase;
  color:var(--gris-moyen);margin-bottom:18px;
}
.eyebrow::after{content:"";flex:0 0 48px;height:1px;background:var(--ligne-forte)}

/* ---- Cadres blancs (cartes) — coins droits, pas d'ombre (charte v9) ---- */
.card{border:1px solid var(--ligne);padding:clamp(24px,3vw,36px)}
.card + .card{margin-top:clamp(20px,2.6vw,28px)}   /* espace entre deux cartes qui se suivent */
.card > h2{margin-bottom:clamp(18px,2.4vw,26px)}
.grid{display:grid;gap:clamp(20px,2.6vw,28px)}
/* La variante .cols-2 ne passe à deux colonnes qu'à partir de 680px de large
   (min-width) : en dessous, tout reste empilé sur une seule colonne. */
@media(min-width:680px){.grid.cols-2{grid-template-columns:1fr 1fr}}
.sec{margin-top:clamp(34px,4.6vw,52px)}   /* bloc de section (grand espacement au-dessus) */
.sec > h2{margin-bottom:18px}
.sec-link{font-size:.74rem;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--gris-moyen)} /* lien « voir tout » d'une section */
.sec-link:hover{color:var(--blanc)}

/* ---- Badges de statut — nuances de gris différenciées par le TRAITEMENT ----
   Rappel charte : pas de couleur. On distingue donc les états par le remplissage
   plutôt que par la teinte : contour gris (à venir), contour blanc (en cours),
   fond blanc plein (terminé/positif). */
.badge{
  display:inline-block;padding:5px 12px;border:1px solid var(--ligne-forte);
  font-size:.64rem;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--blanc);
}
.badge.devis{border-color:var(--ligne);color:var(--gris-moyen)}                                    /* devis : discret, contour faible */
.badge.encours,.badge.tournage,.badge.montage{color:var(--blanc);border-color:var(--ligne-forte)} /* en cours : contour blanc marqué */
.badge.livre,.badge.termine,.badge.paye{background:var(--blanc);color:var(--noir);border-color:var(--blanc)} /* abouti : plein blanc (inversé) */
.badge.act{background:var(--blanc);color:var(--noir);border-color:var(--blanc)}                    /* actif : plein blanc également */

/* ==========================================================================
   ACCUEIL — liste « à traiter », chiffres-clés (KPI), aperçus de messages
   ========================================================================== */
.todo{border:1px solid var(--ligne-forte)}   /* encadré des actions en attente */
/* En-tête de l'encadré : le fond utilise la texture rayée (var(--raye)) pour
   le distinguer visuellement du corps de la liste. */
.todo-head{
  padding:13px 22px;border-bottom:1px solid var(--ligne-forte);
  font-size:.68rem;font-weight:700;letter-spacing:.24em;text-transform:uppercase;color:var(--blanc);
  background:var(--raye);
}
/* Une ligne d'action. flex-wrap:wrap = le bouton passe sous le texte si la
   largeur manque. */
.todo-item{display:flex;align-items:center;gap:18px;padding:18px 22px;border-bottom:1px solid var(--ligne);flex-wrap:wrap}
.todo-item:last-child{border-bottom:0}   /* pas de trait sous la dernière ligne */
.todo-item .t{flex:1;min-width:230px}     /* le texte occupe la place libre ; min-width évite qu'il ne soit trop écrasé */
.todo-item .t b{display:block;color:var(--blanc);font-size:.94rem;letter-spacing:.02em}
.todo-item .t span{color:var(--gris-moyen);font-size:.8rem}
.todo-ok{border:1px solid var(--ligne);padding:20px 22px;color:var(--gris-moyen);font-size:.9rem} /* état « rien à traiter » */
.todo-ok b{color:var(--blanc)}

/* Bloc des chiffres-clés (KPI). Astuce visuelle : gap:1px + fond var(--ligne)
   sur la grille, mais fond noir sur chaque .kpi => les 1px d'écart laissent
   voir la « ligne » du fond et dessinent ainsi de fins séparateurs entre
   cellules, sans avoir à poser une bordure sur chacune. */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:1px;background:var(--ligne);border:1px solid var(--ligne);margin-top:clamp(20px,2.6vw,28px)}
.kpi{background:var(--noir);padding:18px 20px}
/* font-variant-numeric:tabular-nums = tous les chiffres ont la même largeur,
   pour que les nombres restent bien alignés en colonne (important pour des KPI). */
.kpi b{display:block;font-size:1.4rem;font-weight:800;color:var(--blanc);font-variant-numeric:tabular-nums;letter-spacing:.02em}
.kpi span{font-size:.64rem;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--gris-moyen)}
a.kpi{transition:background .2s var(--ease)}   /* un KPI cliquable : léger fond au survol */
a.kpi:hover{background:var(--gris-fonce)}

/* Aperçu d'un message récent. Filet blanc à gauche + léger fond laiteux. */
.mini-msg{border-left:2px solid var(--ligne-forte);padding:12px 16px;background:var(--panel);font-size:.88rem;line-height:1.55}
.mini-msg .from{display:block;font-size:.62rem;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--gris-moyen);margin-bottom:5px}

/* ==========================================================================
   PROJETS — cartes de projet avec barre de progression
   ========================================================================== */
/* Même astuce de séparateurs que .kpis (gap:1px sur fond var(--ligne)). */
.pcards{display:grid;gap:1px;background:var(--ligne);border:1px solid var(--ligne)}
@media(min-width:680px){.pcards{grid-template-columns:1fr 1fr}}   /* deux colonnes à partir de 680px */
/* Une carte de projet, en colonne. color:inherit = si la carte est un lien
   <a>, le texte garde sa couleur normale au lieu du bleu de lien par défaut. */
.pcard{
  display:flex;flex-direction:column;gap:13px;background:var(--noir);
  padding:clamp(22px,3vw,30px);color:inherit;transition:background .25s var(--ease);
}
.pcard:hover{background:var(--gris-fonce)}
.pcard h3{margin:0}
.pcard .meta{color:var(--gris-moyen);font-size:.8rem;letter-spacing:.02em}
.pcard .next{font-size:.8rem;color:var(--gris-moyen)}   /* prochaine étape du projet */
.pcard .next b{color:var(--gris-clair)}
/* Flèche « voir le projet ». margin-top:auto la colle en bas de la carte
   (l'espace libre est repoussé au-dessus d'elle). L'animation sur gap fait
   « respirer » l'écart entre le texte et la flèche au survol (effet de poussée). */
.pcard .arrow{
  color:var(--blanc);font-weight:700;margin-top:auto;font-size:.72rem;
  letter-spacing:.2em;text-transform:uppercase;display:inline-flex;gap:10px;align-items:center;transition:gap .25s var(--ease);
}
.pcard:hover .arrow{gap:16px}   /* au survol : la flèche s'éloigne un peu du texte */

/* Barre de progression. position:relative sert de repère pour le remplissage
   interne. Le fond rayé (var(--raye)) matérialise la partie « non faite ». */
.prog{height:6px;border:1px solid var(--ligne);position:relative;background:var(--raye)}
/* La partie remplie <i> : positionnée en absolu, calée à gauche et sur toute
   la hauteur ; sa largeur (le % d'avancement) est fixée en ligne dans le HTML. */
.prog i{position:absolute;top:0;bottom:0;left:0;background:var(--blanc)}
.prog-lbl{font-size:.68rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--gris-moyen);margin-top:8px} /* libellé « 60 % » sous la barre */
.prog-lbl b{color:var(--blanc)}

/* ==========================================================================
   DOCUMENTS — vue unifiée (devis + factures), résumé, filtres, lignes
   ========================================================================== */
.doc-sum{display:flex;gap:clamp(18px,3vw,34px);flex-wrap:wrap;margin-bottom:22px;font-size:.82rem;color:var(--gris-moyen)} /* ligne de totaux en tête */
.doc-sum b{color:var(--blanc);font-variant-numeric:tabular-nums}   /* montants alignés (chiffres de largeur fixe) */

/* Barre de filtres (segmentée). width:max-content = la barre ne fait que la
   largeur de ses boutons (pas toute la ligne). gap:1px sur fond var(--ligne) =
   fins séparateurs entre boutons (même astuce que .kpis / .pcards). */
.filters{display:flex;gap:1px;border:1px solid var(--ligne);background:var(--ligne);width:max-content;max-width:100%;margin-bottom:22px}
.filters button{
  background:var(--noir);border:0;color:var(--gris-moyen);cursor:pointer;
  font-family:inherit;font-size:.7rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  padding:10px 20px;transition:color .2s var(--ease);
}
.filters button:hover{color:var(--blanc)}
.filters button.on{background:var(--blanc);color:var(--noir)}   /* filtre actif : plein blanc */

/* Tableau de documents (chaque ligne = un devis/une facture). */
.doc-table{border:1px solid var(--ligne)}
.doc-table .doc-row{padding:16px 20px;border-top:1px solid var(--ligne);margin:0} /* trait de séparation entre lignes */
.doc-table .doc-row:first-child{border-top:0}   /* sauf au-dessus de la première */
.doc-table .doc-row.urgent{border-left:2px solid var(--blanc);background:var(--panel)} /* document à traiter : filet blanc + fond marqué */

/* Une ligne de document : icône + infos + montant + actions, alignés.
   flex-wrap:wrap = passe à la ligne sur petit écran. */
.doc-row{display:flex;align-items:center;gap:16px;padding:16px 0;border-top:1px solid var(--ligne);flex-wrap:wrap}
.doc-row:first-of-type{border-top:0}
.doc-row .ico{flex:0 0 auto;width:40px;height:40px;border:1px solid var(--ligne);display:flex;align-items:center;justify-content:center;color:var(--gris-moyen)} /* pastille d'icône (taille fixe) */
.doc-row .info{flex:1;min-width:200px}   /* infos : occupent la place libre ; min-width évite l'écrasement */
.doc-row .info b{color:var(--blanc);font-weight:800;display:block;text-transform:uppercase;letter-spacing:.02em;font-size:.9rem}
.doc-row .info span{color:var(--gris-moyen);font-size:.82rem}
.doc-row .amt{font-weight:700;white-space:nowrap;letter-spacing:.02em;font-variant-numeric:tabular-nums} /* montant : jamais coupé, chiffres alignés */
.doc-row .acts{display:flex;gap:10px;flex-wrap:wrap}   /* boutons d'action (télécharger, accepter…) */

/* ==========================================================================
   MÉDIAS — galerie globale des livrables, filtres par projet/type
   ========================================================================== */
/* « Chips » = petites puces de filtre arrondies-non (coins droits). */
.chips{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:22px}
.chips button{
  background:transparent;border:1px solid var(--ligne);color:var(--gris-moyen);cursor:pointer;
  font-family:inherit;font-size:.68rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  padding:7px 15px;transition:color .2s var(--ease),border-color .2s var(--ease);
}
.chips button:hover{color:var(--blanc);border-color:var(--ligne-forte)}
.chips button.on{background:var(--blanc);color:var(--noir);border-color:var(--blanc)}   /* filtre actif : plein blanc */

.media-top{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap} /* barre au-dessus de la galerie (titre + actions) */

/* Grille de médias : colonnes automatiques de 220px min. Séparateurs 1px via
   l'astuce gap:1px sur fond var(--ligne). */
.media-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:1px;background:var(--ligne);border:1px solid var(--ligne)}
.media-item{background:var(--noir);display:flex;flex-direction:column;min-width:0} /* min-width:0 permet la troncature des légendes */

/* Vignette. Selon le média, l'élément est soit un <button> (photo/vidéo → ouvre
   la visionneuse), soit un <a> (lien externe, doc). aspect-ratio:16/10 force un
   cadre au ratio constant quelle que soit la largeur (pas besoin de hauteur fixe).
   overflow:hidden coupe l'image qui déborde lors du zoom au survol. font:inherit
   et la remise à zéro border/padding neutralisent le style natif du <button>. */
.media-thumb{
  position:relative;display:block;width:100%;aspect-ratio:16/10;overflow:hidden;
  background:var(--raye);border:0;padding:0;margin:0;cursor:pointer;
  color:var(--gris-moyen);font:inherit;
}
/* object-fit:cover = l'image remplit le cadre 16/10 sans se déformer.
   La transition anime le léger zoom + fondu au survol. */
.media-thumb img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .35s var(--ease),opacity .35s var(--ease)}
.media-thumb:hover img{transform:scale(1.04);opacity:.85}   /* survol : zoom discret (104%) + légère transparence */
/* Pictogramme centré par-dessus (icône play/loupe). inset:0 = collé aux 4 bords. */
.media-thumb .pict{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;transition:color .2s var(--ease)}
/* :focus-visible = mis en surbrillance UNIQUEMENT lors d'une navigation au
   clavier (Tab), pas au clic souris — pour l'accessibilité sans gêner la souris. */
.media-thumb:hover .pict,.media-thumb:focus-visible .pict{color:var(--blanc)}
/* currentColor = reprend la couleur de texte courante, donc l'anneau change de
   teinte en même temps que le picto (gris au repos, blanc au survol/focus). */
.media-thumb .pict .ring{
  width:56px;height:56px;border:1px solid currentColor;
  display:flex;align-items:center;justify-content:center;
}
/* Contour de focus clavier. outline-offset:-1px le place à l'intérieur du cadre
   pour qu'il reste visible malgré overflow:hidden. */
.media-thumb:focus-visible{outline:1px solid var(--blanc);outline-offset:-1px}

/* Légende sous la vignette : titre + projet/poids + bouton télécharger. */
.media-cap{display:flex;align-items:center;gap:10px;padding:10px 12px;border-top:1px solid var(--ligne)}
.media-cap .tt{flex:1;min-width:0}   /* min-width:0 = indispensable pour que la troncature « … » fonctionne dans un flex */
.media-cap .tt b{display:block;color:var(--blanc);font-size:.78rem;font-weight:600;letter-spacing:.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} /* titre tronqué si trop long */
.media-cap .tt small{display:block;color:var(--gris-moyen);font-size:.66rem;letter-spacing:.06em;text-transform:uppercase;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} /* sous-titre tronqué aussi */
/* Bouton de téléchargement carré (taille fixe). */
.media-cap .dlb{
  flex:0 0 auto;width:32px;height:32px;border:1px solid var(--ligne);
  display:flex;align-items:center;justify-content:center;color:var(--blanc);
  transition:background .2s var(--ease),border-color .2s var(--ease),color .2s var(--ease);
}
.media-cap .dlb:hover,.media-cap .dlb:focus-visible{background:var(--blanc);color:var(--noir);border-color:var(--blanc)} /* plein blanc au survol/focus clavier */

/* ---- Visionneuse plein écran (photos + vidéos, navigation ‹ ›) ---- */
.lb{position:fixed;inset:0;z-index:100;background:rgba(0,0,0,.95);display:flex;flex-direction:column}
.lb[hidden]{display:none}
.lb-stage{flex:1;display:flex;align-items:center;justify-content:center;min-height:0;padding:clamp(14px,3vw,30px)}
.lb-stage img,.lb-stage video{max-width:100%;max-height:100%;border:1px solid var(--ligne);background:var(--noir)}
.lb-bar{
  display:flex;align-items:center;gap:16px;flex-wrap:wrap;
  padding:14px clamp(16px,3vw,28px);border-top:1px solid var(--ligne);
}
.lb-bar .tt{flex:1;min-width:200px}
.lb-bar .tt b{display:block;color:var(--blanc);font-size:.92rem;letter-spacing:.02em}
.lb-bar .tt small{color:var(--gris-moyen);font-size:.7rem;letter-spacing:.1em;text-transform:uppercase}
.lb-btn{
  background:none;border:1px solid var(--ligne);color:var(--blanc);cursor:pointer;
  width:44px;height:44px;display:flex;align-items:center;justify-content:center;
  font-size:1.15rem;line-height:1;font-family:inherit;
  transition:background .2s var(--ease),border-color .2s var(--ease),color .2s var(--ease);
}
.lb-btn:hover,.lb-btn:focus-visible{background:var(--blanc);color:var(--noir);border-color:var(--blanc)}
.lb-close{position:absolute;top:clamp(12px,2.4vw,22px);right:clamp(12px,2.4vw,22px);z-index:2}
.lb-prev,.lb-next{position:absolute;top:50%;transform:translateY(-50%);z-index:2}
.lb-prev{left:clamp(8px,2vw,20px)}
.lb-next{right:clamp(8px,2vw,20px)}
.lb-count{color:var(--gris-moyen);font-size:.7rem;letter-spacing:.16em}
@media(max-width:640px){
  .lb-prev,.lb-next{top:auto;bottom:86px;transform:none}
}

/* ==========================================================================
   MESSAGES — boîte de réception (conversations + fil)
   ========================================================================== */
.inbox{display:grid;grid-template-columns:280px 1fr;border:1px solid var(--ligne);min-height:460px}
.convs{border-right:1px solid var(--ligne);overflow-y:auto}
.conv{
  display:flex;flex-direction:column;gap:3px;padding:17px 20px;
  border-bottom:1px solid var(--ligne);border-left:2px solid transparent;color:inherit;
  transition:background .2s var(--ease);
}
.conv:hover{background:var(--panel)}
.conv.on{background:var(--panel);border-left-color:var(--blanc)}
.conv b{color:var(--blanc);font-size:.84rem;letter-spacing:.02em;display:flex;align-items:center;gap:9px}
.conv b .dot{width:7px;height:7px;background:var(--blanc);flex:0 0 auto}
.conv span{color:var(--gris-moyen);font-size:.76rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.thread-pane{display:flex;flex-direction:column;padding:clamp(18px,2.6vw,26px);min-width:0}
.thread-pane .thread{flex:1;margin-bottom:18px}
@media(max-width:760px){
  .inbox{grid-template-columns:1fr;min-height:0}
  .convs{display:flex;border-right:0;border-bottom:1px solid var(--ligne);overflow-x:auto;scrollbar-width:none}
  .convs::-webkit-scrollbar{display:none}
  .conv{border-bottom:0;border-left:0;border-right:1px solid var(--ligne);min-width:210px;border-top:2px solid transparent}
  .conv.on{border-top-color:var(--blanc)}
}

/* ---- Fil de discussion (partagé avec la page projet) ---- */
.thread{display:flex;flex-direction:column;gap:12px;margin-bottom:24px;max-height:440px;overflow-y:auto;padding-right:4px}
.msg{max-width:80%;padding:12px 16px;font-size:.9rem;line-height:1.5;border:1px solid var(--ligne)}
.msg .from{display:block;font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;font-weight:700;margin-bottom:5px;color:var(--gris-moyen)}
.msg .time{display:block;font-size:.62rem;letter-spacing:.12em;color:var(--gris-moyen);margin-top:6px}
.msg.studio{align-self:flex-start;background:var(--gris-fonce)}
.msg.client{align-self:flex-end;background:var(--blanc);color:var(--creme);border-color:var(--blanc)}
.msg.client .from,.msg.client .time{color:rgba(255,255,255,.72)}
.thread-empty{color:var(--gris-moyen);text-align:center;padding:26px 0}

/* ---- Suivi (étapes) — page projet ---- */
.steps{list-style:none;margin:0;padding:0}
.steps li{display:flex;gap:16px;padding:0}
.steps .dot{position:relative;flex:0 0 auto;width:20px;display:flex;justify-content:center}
.steps .dot::before{content:"";position:absolute;top:20px;bottom:-2px;width:1px;background:var(--ligne)}
.steps li:last-child .dot::before{display:none}
.steps .dot i{width:14px;height:14px;border:1px solid var(--gris-moyen);background:var(--noir);margin-top:4px}
.steps li.done .dot i{background:var(--blanc);border-color:var(--blanc)}
.steps .txt{padding-bottom:22px}
.steps .txt b{color:var(--gris-moyen);font-weight:700}
.steps li.done .txt b{color:var(--blanc)}
.steps .txt span{display:block;color:var(--gris-moyen);font-size:.76rem;letter-spacing:.08em;margin-top:3px}

/* ==========================================================================
   FORMULAIRES / DIVERS (repris du style .field du site : soulignement)
   ========================================================================== */
.f{margin-bottom:22px}
.f label{display:block;font-size:.7rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--gris-moyen);margin-bottom:10px}
/* Champs clairs, encadrés arrondis, texte foncé, focus bleu (charte Paola). */
.f input,.f textarea{
  width:100%;background:#fff;border:1px solid var(--ligne-forte);
  color:var(--gris-clair);font-family:inherit;font-size:1rem;font-weight:400;padding:12px 14px;
  border-radius:10px;transition:border-color .25s,box-shadow .25s;
}
.f input::placeholder,.f textarea::placeholder{color:var(--gris-moyen)}
.f input:focus,.f textarea:focus{outline:none;border-color:var(--bleu);box-shadow:0 0 0 3px rgba(36,79,122,.12)}
.f textarea{min-height:104px;resize:vertical}
.hint{font-size:.78rem;color:var(--gris-moyen);margin-top:10px;line-height:1.6}
.msg-form{display:flex;gap:16px;align-items:flex-end}
.msg-form .f{flex:1;margin-bottom:0}

.btn.full{display:block;width:100%;text-align:center}
.btn.ghost{border-color:var(--ligne)}
.btn.ghost:hover{background:var(--blanc);color:var(--noir);border-color:var(--blanc)}
.btn.solid{background:var(--blanc);color:var(--noir)}
.btn.solid:hover{background:transparent;color:var(--blanc)}
.btn.sm{padding:9px 18px;font-size:.68rem}

.flash{padding:14px 18px;border:1px solid var(--ligne-forte);border-left-width:3px;font-size:.85rem;font-weight:600;letter-spacing:.02em;margin-bottom:24px}
.flash.ok{border-left-color:var(--blanc)}
.flash.err{border-left-color:var(--gris-moyen);color:var(--gris-clair)}

.empty{text-align:center;padding:clamp(36px,5vw,52px) 20px;color:var(--gris-moyen)}

/* ---- Connexion / bienvenue (centrée) ---- */
.auth-wrap{flex:1;display:flex;align-items:center;justify-content:center;padding:clamp(36px,6vw,56px) 22px}
.auth-box{width:100%;max-width:440px;border:1px solid var(--ligne-forte);padding:clamp(30px,4vw,44px)}
.auth-box .brand{display:flex;justify-content:center;margin-bottom:30px}
.auth-box .brand img{height:44px;width:auto}
.auth-box h1{font-size:clamp(1.5rem,3vw,2rem);text-align:center;margin-bottom:14px}
.auth-box .lead{text-align:center;margin:0 auto 30px}
.auth-box .note{margin-top:24px;padding-top:22px;border-top:1px solid var(--ligne);font-size:.78rem;color:var(--gris-moyen);text-align:center;line-height:1.7}

/* ---- Pied ---- */
.esp-footer{
  border-top:1px solid var(--ligne);padding:24px;text-align:center;
  color:var(--gris-moyen);font-size:.68rem;letter-spacing:.18em;text-transform:uppercase;
}
.esp-footer a{color:var(--gris-moyen)}
.esp-footer a:hover{color:var(--bleu)}

/* ==========================================================================
   HABILLAGE PAOLA — arrondis doux, ombres légères, ajustements de teinte
   Ces règles arrivent en fin de fichier pour repeindre par-dessus les blocs
   ci-dessus : coins arrondis (charte Paola, là où v9 imposait des coins droits),
   ombres douces « carnet », et correction des zones sombres résiduelles.
   ========================================================================== */
/* Cartes, encadrés, blocs de contenu : coins arrondis + ombre douce. */
.card,.todo,.todo-ok,.auth-box,.mini-msg,.doc-table,.inbox{
  border-radius:16px;box-shadow:var(--ombre);
}
.card,.auth-box{background:#fff}
.todo-head{border-radius:16px 16px 0 0;color:var(--bleu)}
/* KPI, cartes projet, galerie : arrondir le contour et rogner proprement les
   séparateurs internes (gap:1px sur fond var(--ligne)). */
.kpis,.pcards,.media-grid{border-radius:16px;overflow:hidden;box-shadow:var(--ombre)}
/* Barres segmentées (filtres) et puces (chips) : pastilles arrondies. */
.filters{border-radius:12px;overflow:hidden}
.chips button{border-radius:999px}
.chips button.on{background:var(--bleu);color:var(--creme);border-color:var(--bleu)}
.filters button.on{background:var(--bleu);color:var(--creme)}
/* Badges : pastilles arrondies. */
.badge{border-radius:999px}
/* Boutons de l'espace (variantes locales) : coins arrondis + accents bleus. */
.btn{border-radius:10px}
.btn.solid{background:var(--bleu);color:var(--creme);border-color:var(--bleu)}
.btn.solid:hover{background:#fff;color:var(--bleu)}
.btn.ghost{border-color:var(--ligne-forte);color:var(--bleu)}
.btn.ghost:hover{background:var(--bleu);color:var(--creme);border-color:var(--bleu)}
/* Avatar, pastilles de compteur, icônes carrées : coins adoucis. */
.esp-me .av{border-radius:10px;color:var(--bleu)}
.esp-nav .pill{border-radius:999px;background:var(--bleu);color:var(--creme)}
.doc-row .ico,.media-cap .dlb{border-radius:10px}
.media-thumb{border-radius:0}
/* Barres de progression et vignettes : arrondis. */
.prog{border-radius:999px;overflow:hidden}
.prog i{border-radius:999px}
/* Liens de navigation actifs et survols : passer aux teintes Paola. */
.esp-nav a.on{color:var(--bleu);border-left-color:var(--bleu)}
.esp-nav a:hover{color:var(--olive)}
.back:hover,.sec-link:hover,.esp-me a:hover,.esp-me a.on{color:var(--bleu)}
.conv b .dot{border-radius:50%;background:var(--bleu)}
.eyebrow::after{background:var(--ligne-forte)}
/* Messages « studio » : bulle gris-bleu clair, texte foncé. */
.msg{border-radius:14px}
.mini-msg{border-radius:0 12px 12px 0}
.doc-table .doc-row.urgent{border-left-color:var(--bleu)}

/* ---- Visionneuse plein écran : scrim adouci + barre claire (charte Paola) ----
   On garde un fond sombre translucide pour faire ressortir les médias, mais la
   barre de contrôle et les boutons passent en clair pour rester lisibles. */
.lb{background:rgba(17,17,17,.72)}
.lb-bar{background:#fff;border-top:1px solid var(--ligne)}
.lb-bar .tt b{color:var(--bleu)}
.lb-bar .tt small,.lb-count{color:var(--gris-moyen)}
.lb-btn{background:#fff;border:1px solid var(--ligne-forte);color:var(--bleu);border-radius:10px}
.lb-btn:hover,.lb-btn:focus-visible{background:var(--bleu);color:var(--creme);border-color:var(--bleu)}
.lb-stage img,.lb-stage video{border-radius:12px;border-color:var(--ligne)}
