/* =========================================================================
   FEEL-BETTER — Couche de finition anti "AI slop" (2026-07-05)
   Base : skill "make-interfaces-feel-better" (Jakub Krehel) — sous-ensemble SUR
   applique globalement. 100% ADDITIF, charge en DERNIER dans la cascade.

   Pourquoi seulement un sous-ensemble : GestDoc a deja un design system complet
   (design-tokens.css : ombres en couches, radius, easings) et microinteractions.css
   (toasts, ripple, view transitions). Les principes "ombres > bordures",
   "radius concentriques" et "easings standardises" sont donc DEJA couverts.
   Cette couche ajoute uniquement ce qui manquait, sans rien reecrire.

   Apports :
     1. Font smoothing            -> texte plus net sur macOS/retina
     2. text-wrap: balance        -> titres jamais coupes en lignes desequilibrees
     3. text-wrap: pretty         -> corps de texte sans mots orphelins
     4. tabular-nums              -> chiffres a chasse fixe = zero saut de layout
     5. scale(.96) au clic        -> feedback tactile subtil sur les boutons
     6. .gd-img-outline           -> outline subtil pour ancrer les images (opt-in)

   Garde-fous (conventions projet) :
     - respecte prefers-reduced-motion (neutralise le press-scale)
     - N'OVERRIDE aucune transition existante : ajoute seulement un transform:active
       (si le bouton transitionne deja transform via son style, le press s'anime ;
        sinon il claque instantanement, ce qui reste un press valide) -> zero regression
     - aucune variable existante modifiee, aucun composant reecrit
     - rollback : retirer la balise <link> de GestDoc_Pro_Interface.html suffit
   ========================================================================= */

/* -------------------------------------------------------------------------
   1 — FONT SMOOTHING
   Rend le texte plus fin et net sur macOS / ecrans retina. No-op ailleurs.
   ------------------------------------------------------------------------- */
body {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* -------------------------------------------------------------------------
   2 — TEXT-WRAP: BALANCE sur les titres
   Repartit les mots equitablement sur les lignes d'un titre (max ~6 lignes).
   Ignore automatiquement les titres tronques (white-space: nowrap).
   ------------------------------------------------------------------------- */
h1, h2, h3, h4,
.page-title, .section-title, .card-title, .modal-title,
.dec-hero-title, .hero-title, .gd-unified-hero h1, .gd-unified-hero h2 {
  text-wrap: balance;
}

/* -------------------------------------------------------------------------
   3 — TEXT-WRAP: PRETTY sur le corps de texte
   Evite qu'un seul mot se retrouve seul sur la derniere ligne (orphelin).
   Progressif : les navigateurs sans support l'ignorent.
   ------------------------------------------------------------------------- */
p, li, dd, figcaption,
.subtitle, .card-subtitle, .doc-summary, .summary-text,
.empty-state, .hint, .help-text, .description, .muted, .text-muted {
  text-wrap: pretty;
}

/* -------------------------------------------------------------------------
   4 — TABULAR NUMBERS
   Chiffres a largeur fixe : les compteurs, montants et dates ne "sautent"
   plus quand leur valeur change. Cible les afficheurs numeriques + tableaux.
   ------------------------------------------------------------------------- */
.kpi-value, .stat-value, .cp-stat-value,
.dec-hero-counter .num, .dec-hero-counter,
.badge, .count, .counter, .metric, .nav-badge, .pill-count,
.amount, .montant, .price, .date-cell,
table td, table th,
input[type="number"], input[type="date"], input[type="time"], input[type="datetime-local"],
time,
.tabular-nums, .gd-tabular {
  font-variant-numeric: tabular-nums;
}

/* -------------------------------------------------------------------------
   5 — SCALE ON PRESS (feedback tactile)
   scale(.96) exactement (skill : jamais < .95, sinon exagere). On EXCLUT les
   boutons "link" / "ghost" (coherent avec le ripple de microinteractions.css)
   et les boutons desactives. On ne touche AUCUNE transition existante.
   ------------------------------------------------------------------------- */
.btn:active:not(:disabled):not(.btn-link):not(.btn-ghost),
button:active:not([disabled]):not(.btn-link):not(.btn-ghost),
[role="button"]:active:not([aria-disabled="true"]) {
  transform: scale(.96);
}

/* -------------------------------------------------------------------------
   6 — IMAGE OUTLINE (opt-in via classe)
   Outline subtil pour donner de la profondeur/ancrage a une image raster.
   Volontairement OPT-IN (classe) et pas un blanket `img {}` : eviterait de
   dessiner une boite autour des logos transparents / icones.
   Regle skill : noir pur en clair, blanc pur en dark — jamais une teinte.
   ------------------------------------------------------------------------- */
.gd-img-outline {
  outline: 1px solid rgba(0, 0, 0, .1);
  outline-offset: -1px;
}
[data-theme="dark"] .gd-img-outline {
  outline-color: rgba(255, 255, 255, .1);
}

/* -------------------------------------------------------------------------
   REDUCED MOTION : neutralise le press-scale (accessibilite)
   ------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  .btn:active,
  button:active,
  [role="button"]:active {
    transform: none;
  }
}
