/* Bootstrap 5.3 bridge — maps Bootstrap's semantic roles onto Ledea tokens.
   Ledea's staff platform runs on Bootstrap 5.3, light theme only, so this file
   emits NO dark-mode block: the design system's prefers-color-scheme values are
   for other consumers, not for the theme.

   Bootstrap does NOT put button colours on :root — it writes them inside each
   .btn-* class. Setting --bs-primary alone therefore recolours utilities and
   alerts but NOT buttons, which is why the .btn-* blocks below are required.

   Decisions this encodes (approved by Design):
   Rev. 2026-08 "verde clinico" — il primario è teal-600, non coral-600. Il coral
                             resta esclusivo del distruttivo. Q1 sotto è storia
                             conservata: il ragionamento sul 4,5:1 vale ancora,
                             solo applicato al teal (teal-50 su teal-600 5,54:1).
   Q1 conditional primary  — coral-600 fills every button, because no Ledea button
                             label reaches 18.66px bold (all are 13–15px), so the
                             4.5:1 threshold applies everywhere. coral-400 stays
                             the brand SURFACE fill via --brand-surface.
   Q2 option A             — in an action row only the destructive action is filled;
                             neutral actions are outline. Zero new hues.
   Q3 ochre                — one additive ramp, semantic only, text/subtle surfaces.
*/

:root{
  --bs-primary:var(--primary); --bs-primary-rgb:var(--teal-600-rgb);
  --bs-secondary:var(--secondary); --bs-secondary-rgb:var(--teal-800-rgb);
  --bs-success:var(--success); --bs-success-rgb:var(--teal-800-rgb);
  --bs-danger:var(--danger); --bs-danger-rgb:var(--coral-600-rgb);
  --bs-warning:var(--warning); --bs-warning-rgb:var(--ochre-600-rgb);
  --bs-info:var(--info); --bs-info-rgb:var(--gray-800-rgb);
  --bs-light:var(--paper-alt); --bs-dark:var(--gray-900);

  /* 5.3 subtle / emphasis tiers map onto the 7-step ramps without friction */
  --bs-primary-bg-subtle:var(--teal-50); --bs-primary-border-subtle:var(--teal-100); --bs-primary-text-emphasis:var(--teal-800);
  /* "secondary" come nota de-enfatizzata: neutro caldo. Se fosse teal sarebbe
     identico a success — stesso surface, stesso bordo, nessuna informazione. */
  --bs-secondary-bg-subtle:var(--paper-alt); --bs-secondary-border-subtle:var(--gray-100); --bs-secondary-text-emphasis:var(--gray-800);
  --bs-success-bg-subtle:var(--teal-50); --bs-success-border-subtle:var(--teal-100); --bs-success-text-emphasis:var(--teal-800);
  --bs-danger-bg-subtle:var(--coral-50); --bs-danger-border-subtle:var(--coral-100); --bs-danger-text-emphasis:var(--coral-600);
  --bs-warning-bg-subtle:var(--ochre-50); --bs-warning-border-subtle:var(--ochre-100); --bs-warning-text-emphasis:var(--ochre-600);
  --bs-info-bg-subtle:var(--gray-50); --bs-info-border-subtle:var(--gray-100); --bs-info-text-emphasis:var(--gray-800);

  --bs-body-bg:var(--paper); --bs-body-color:var(--gray-800);
  --bs-secondary-bg:var(--paper-alt); --bs-tertiary-bg:var(--gray-50);
  --bs-border-color:var(--gray-100); --bs-border-color-translucent:var(--gray-100);
  --bs-heading-color:var(--teal-900);
  /* links follow the design system's own choice (teal), not Bootstrap's blue.
     .btn-link segue il primario: dal 2026-08 è teal, non coral. */
  --bs-link-color:var(--secondary); --bs-link-color-rgb:var(--teal-800-rgb);
  --bs-link-hover-color:var(--secondary-hover);
  --bs-emphasis-color:var(--gray-900);
  --bs-secondary-color:var(--gray-600); --bs-tertiary-color:var(--gray-400);

  /* navigazione: neutra, colore solo sull'attivo */
  --bs-nav-link-color:var(--nav-link); --bs-nav-link-hover-color:var(--nav-link-hover);
  --bs-nav-pills-link-active-bg:var(--primary); --bs-nav-pills-link-active-color:var(--primary-text);
  --bs-nav-tabs-link-active-color:var(--nav-link-active);
  /* componenti che Bootstrap 5.3 scrive ancora con #0d6efd letterale */
  --bs-pagination-color:var(--nav-link); --bs-pagination-hover-color:var(--nav-link-hover);
  --bs-pagination-active-bg:var(--primary); --bs-pagination-active-border-color:var(--primary); --bs-pagination-active-color:var(--primary-text);
  --bs-pagination-focus-color:var(--nav-link-hover); --bs-pagination-focus-bg:var(--teal-50);
  --bs-list-group-active-bg:var(--primary); --bs-list-group-active-border-color:var(--primary); --bs-list-group-active-color:var(--primary-text);
  --bs-list-group-action-hover-bg:var(--teal-50);
  --bs-dropdown-link-active-bg:var(--primary); --bs-dropdown-link-active-color:var(--primary-text);
  --bs-dropdown-link-hover-bg:var(--gray-50);
  --bs-progress-bar-bg:var(--primary);
  --bs-accordion-active-color:var(--teal-800); --bs-accordion-active-bg:var(--teal-50);
  --bs-accordion-btn-focus-box-shadow:0 0 0 var(--focus-ring-width) rgba(var(--teal-400-rgb),.25);
  --bs-highlight-bg:var(--ochre-50);

  --bs-border-radius:var(--radius-md); --bs-border-radius-sm:var(--radius-sm);
  --bs-border-radius-lg:var(--radius-lg); --bs-border-radius-xl:var(--radius-xl);
  --bs-border-radius-pill:var(--radius-pill);

  --bs-font-sans-serif:var(--font-body);
  --bs-body-font-family:var(--font-body);
}

h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:var(--font-display);font-weight:700}

/* ---- buttons: shared shape ------------------------------------------------ */
.btn{
  --bs-btn-font-family:var(--font-body);
  --bs-btn-font-weight:700;
  --bs-btn-padding-y:10px; --bs-btn-padding-x:20px; --bs-btn-font-size:13.5px;
  --bs-btn-border-radius:var(--radius-md);
  --bs-btn-border-width:1.5px;
  /* Ledea is flat: Bootstrap's inset highlight and pressed-in shadow are removed */
  --bs-btn-box-shadow:none;
  --bs-btn-active-shadow:none;
  --bs-btn-focus-box-shadow:0 0 0 var(--focus-ring-width) rgba(var(--bs-btn-focus-shadow-rgb),.3);
  transition:background-color var(--duration-fast) var(--ease-standard),border-color var(--duration-fast) var(--ease-standard),color var(--duration-fast) var(--ease-standard);
}
.btn-sm{--bs-btn-padding-y:6px;--bs-btn-padding-x:11px;--bs-btn-font-size:12.25px;--bs-btn-border-radius:var(--radius-sm)}
.btn-lg{--bs-btn-padding-y:13px;--bs-btn-padding-x:26px;--bs-btn-font-size:15px;--bs-btn-border-radius:var(--radius-lg)}

/* Bootstrap never mapped these, so #0d6efd / #198754 / #dc3545 leaked through on
   every disabled button — and lep_disable_button() disables the whole page. One
   neutral state for all variants, opacity 1 so the colour itself is the signal. */
.btn-primary,.btn-secondary,.btn-success,.btn-danger,.btn-danger-soft,.btn-warning,.btn-info,.btn-light,.btn-dark,
.btn-outline-primary,.btn-outline-secondary,.btn-outline-success,.btn-outline-danger,
.btn-outline-warning,.btn-outline-info,.btn-outline-light,.btn-outline-dark{
  --bs-btn-disabled-color:var(--disabled-text)!important;
  --bs-btn-disabled-bg:var(--disabled-bg)!important;
  --bs-btn-disabled-border-color:var(--disabled-border)!important;
  --bs-btn-disabled-opacity:1!important; /* @kind other */
}

/* ---- filled variants ------------------------------------------------------ */
.btn-primary{
  --bs-btn-color:var(--primary-text)!important; --bs-btn-bg:var(--primary)!important; --bs-btn-border-color:var(--primary)!important;
  --bs-btn-hover-color:var(--primary-text)!important; --bs-btn-hover-bg:var(--primary-hover)!important; --bs-btn-hover-border-color:var(--primary-hover)!important;
  --bs-btn-active-color:var(--primary-text)!important; --bs-btn-active-bg:var(--primary-active)!important; --bs-btn-active-border-color:var(--primary-active)!important;
  --bs-btn-focus-shadow-rgb:var(--teal-600-rgb)!important;
}
/* secondary = il SECONDO PESO del primario, non una seconda tinta. Prima era il
   teal pieno; ora che il teal è il primario, due pieni teal misurerebbero 1,48:1
   fra loro. Il peso tenue tiene la gerarchia leggibile: label 8,17:1 sul surface. */
.btn-secondary{
  --bs-btn-color:var(--primary-soft-text)!important; --bs-btn-bg:var(--primary-soft-bg)!important; --bs-btn-border-color:var(--primary-soft-border)!important;
  --bs-btn-hover-color:var(--primary-text)!important; --bs-btn-hover-bg:var(--primary)!important; --bs-btn-hover-border-color:var(--primary)!important;
  --bs-btn-active-color:var(--primary-text)!important; --bs-btn-active-bg:var(--primary-hover)!important; --bs-btn-active-border-color:var(--primary-hover)!important;
  --bs-btn-focus-shadow-rgb:var(--teal-600-rgb)!important;
}
/* success is a STATE in this system: come BOTTONE non esiste. Dal 2026-08 mappa
   sugli stessi valori di .btn-primary — così i submit .btn-success non ancora
   rietichettati rendono già come il primario (che è esattamente la migrazione
   prescritta) e non possono mai affiancarsi a un primario come secondo pieno
   teal indistinguibile. Lo stato positivo resta --success / .alert-success:
   teal-800 su teal-50 con icona, mai un fill. */
.btn-success{
  --bs-btn-color:var(--primary-text)!important; --bs-btn-bg:var(--primary)!important; --bs-btn-border-color:var(--primary)!important;
  --bs-btn-hover-color:var(--primary-text)!important; --bs-btn-hover-bg:var(--primary-hover)!important; --bs-btn-hover-border-color:var(--primary-hover)!important;
  --bs-btn-active-color:var(--primary-text)!important; --bs-btn-active-bg:var(--primary-active)!important; --bs-btn-active-border-color:var(--primary-active)!important;
  --bs-btn-focus-shadow-rgb:var(--teal-600-rgb)!important;
}
/* The destructive role has TWO named weights, and which one applies is decided
   by the block, not by the button (see guidelines/colors-destructive.html):

     .btn-danger       SOLID — only when the destructive action is the single
                       filled button in its block (action rows, confirm dialogs).
     .btn-danger-soft  SOFT  — whenever a filled .btn-primary is present in the
                       same block (form footers, tables inside modals).

   Dal 2026-08 danger non condivide più il valore con primary, ma la regola non
   cambia: coral-600 e teal-600 misurano 1,11:1 l'uno contro l'altro, cioè due
   pieni affiancati differiscono solo per tinta — invisibile a un deuteranope.
   La distinzione la portano il peso e l'icona (cestino), mai il colore da solo. */
.btn-danger{
  --bs-btn-color:var(--coral-50)!important; --bs-btn-bg:var(--danger)!important; --bs-btn-border-color:var(--danger)!important;
  --bs-btn-hover-color:var(--coral-50)!important; --bs-btn-hover-bg:var(--coral-800)!important; --bs-btn-hover-border-color:var(--coral-800)!important;
  --bs-btn-active-color:var(--coral-50)!important; --bs-btn-active-bg:var(--coral-900)!important; --bs-btn-active-border-color:var(--coral-900)!important;
  --bs-btn-focus-shadow-rgb:var(--coral-600-rgb)!important;
}
/* Same values as the React Button variant="danger", so the two consumers of this
   system render the identical control. Label 6.03:1 on its own surface. */
.btn-danger-soft{
  --bs-btn-color:var(--danger)!important; --bs-btn-bg:var(--danger-bg)!important; --bs-btn-border-color:var(--coral-100)!important;
  --bs-btn-hover-color:var(--coral-50)!important; --bs-btn-hover-bg:var(--danger)!important; --bs-btn-hover-border-color:var(--danger)!important;
  --bs-btn-active-color:var(--coral-50)!important; --bs-btn-active-bg:var(--coral-800)!important; --bs-btn-active-border-color:var(--coral-800)!important;
  --bs-btn-focus-shadow-rgb:var(--coral-600-rgb)!important;
}
/* warning as a BUTTON should not exist in Ledea (the 11 btn-warning CTAs become
   btn-primary). Mapped defensively; ochre-400 fill needs dark text at 4.75:1. */
.btn-warning{
  --bs-btn-color:var(--gray-900)!important; --bs-btn-bg:var(--ochre-400)!important; --bs-btn-border-color:var(--ochre-400)!important;
  --bs-btn-hover-color:var(--ochre-50)!important; --bs-btn-hover-bg:var(--ochre-600)!important; --bs-btn-hover-border-color:var(--ochre-600)!important;
  --bs-btn-active-color:var(--ochre-50)!important; --bs-btn-active-bg:var(--ochre-600)!important; --bs-btn-active-border-color:var(--ochre-600)!important;
  --bs-btn-focus-shadow-rgb:var(--ochre-400-rgb)!important;
}
/* info: lep_generate_alert() accepts 'info', so it must be mapped even though the
   design system has no such role — otherwise Bootstrap cyan leaks through. */
.btn-info{
  --bs-btn-color:var(--gray-800)!important; --bs-btn-bg:var(--gray-50)!important; --bs-btn-border-color:var(--gray-200)!important;
  --bs-btn-hover-color:var(--paper)!important; --bs-btn-hover-bg:var(--gray-800)!important; --bs-btn-hover-border-color:var(--gray-800)!important;
  --bs-btn-active-color:var(--paper)!important; --bs-btn-active-bg:var(--gray-900)!important; --bs-btn-active-border-color:var(--gray-900)!important;
  --bs-btn-focus-shadow-rgb:var(--gray-600-rgb)!important;
}
.btn-light{
  --bs-btn-color:var(--gray-800)!important; --bs-btn-bg:var(--paper-alt)!important; --bs-btn-border-color:var(--gray-100)!important;
  --bs-btn-hover-color:var(--gray-900)!important; --bs-btn-hover-bg:var(--gray-50)!important; --bs-btn-hover-border-color:var(--gray-200)!important;
  --bs-btn-active-color:var(--gray-900)!important; --bs-btn-active-bg:var(--gray-100)!important; --bs-btn-active-border-color:var(--gray-200)!important;
  --bs-btn-focus-shadow-rgb:var(--gray-600-rgb)!important;
}
.btn-dark{
  --bs-btn-color:var(--paper)!important; --bs-btn-bg:var(--gray-900)!important; --bs-btn-border-color:var(--gray-900)!important;
  --bs-btn-hover-color:var(--paper)!important; --bs-btn-hover-bg:var(--gray-800)!important; --bs-btn-hover-border-color:var(--gray-800)!important;
  --bs-btn-active-color:var(--paper)!important; --bs-btn-active-bg:var(--ink)!important; --bs-btn-active-border-color:var(--ink)!important;
  --bs-btn-focus-shadow-rgb:var(--gray-900-rgb)!important;
}
.btn-link{
  --bs-btn-color:var(--secondary)!important; --bs-btn-hover-color:var(--secondary-hover)!important;
  --bs-btn-font-weight:700!important; text-decoration:underline;
  --bs-btn-focus-shadow-rgb:var(--teal-600-rgb)!important;
}

/* ---- outline variants ----------------------------------------------------- */
/* The theme had NO .btn-outline-* block at all: the 69 "Annulla" of the staff
   modals rendered in cold Bootstrap #6c757d, outside the warm ramp. */
.btn-outline-primary{
  --bs-btn-color:var(--secondary)!important; --bs-btn-border-color:var(--primary)!important;
  --bs-btn-hover-color:var(--primary-text)!important; --bs-btn-hover-bg:var(--primary)!important; --bs-btn-hover-border-color:var(--primary)!important;
  --bs-btn-active-color:var(--primary-text)!important; --bs-btn-active-bg:var(--primary-hover)!important; --bs-btn-active-border-color:var(--primary-hover)!important;
  --bs-btn-focus-shadow-rgb:var(--teal-600-rgb)!important;
}
/* DELIBERATE ASYMMETRY: Bootstrap generates .btn-secondary and
   .btn-outline-secondary from one hue, but in Ledea they do different jobs —
   filled teal is the second brand action, outline is "close without doing
   anything". 69 existing call sites make re-labelling riskier than this break. */
.btn-outline-secondary{
  --bs-btn-color:var(--dismiss-text)!important; --bs-btn-border-color:var(--dismiss-border)!important;
  --bs-btn-hover-color:var(--dismiss-hover-text)!important; --bs-btn-hover-bg:var(--dismiss-hover-bg)!important; --bs-btn-hover-border-color:var(--dismiss-hover-bg)!important;
  --bs-btn-active-color:var(--dismiss-hover-text)!important; --bs-btn-active-bg:var(--gray-900)!important; --bs-btn-active-border-color:var(--gray-900)!important;
  --bs-btn-focus-shadow-rgb:var(--gray-600-rgb)!important;
}
/* outline-success è volutamente identico a outline-primary: da quando il
   primario è teal, due outline teal diversi sarebbero rumore senza informazione. */
.btn-outline-success{
  --bs-btn-color:var(--secondary)!important; --bs-btn-border-color:var(--primary)!important;
  --bs-btn-hover-color:var(--primary-text)!important; --bs-btn-hover-bg:var(--primary)!important; --bs-btn-hover-border-color:var(--primary)!important;
  --bs-btn-active-color:var(--primary-text)!important; --bs-btn-active-bg:var(--primary-hover)!important; --bs-btn-active-border-color:var(--primary-hover)!important;
  --bs-btn-focus-shadow-rgb:var(--teal-600-rgb)!important;
}
.btn-outline-danger{
  --bs-btn-color:var(--coral-600)!important; --bs-btn-border-color:var(--coral-400)!important;
  --bs-btn-hover-color:var(--coral-50)!important; --bs-btn-hover-bg:var(--coral-600)!important; --bs-btn-hover-border-color:var(--coral-600)!important;
  --bs-btn-active-color:var(--coral-50)!important; --bs-btn-active-bg:var(--coral-800)!important; --bs-btn-active-border-color:var(--coral-800)!important;
  --bs-btn-focus-shadow-rgb:var(--coral-600-rgb)!important;
}
.btn-outline-warning{
  --bs-btn-color:var(--ochre-600)!important; --bs-btn-border-color:var(--ochre-100)!important;
  --bs-btn-hover-color:var(--gray-900)!important; --bs-btn-hover-bg:var(--ochre-400)!important; --bs-btn-hover-border-color:var(--ochre-400)!important;
  --bs-btn-active-color:var(--ochre-50)!important; --bs-btn-active-bg:var(--ochre-600)!important; --bs-btn-active-border-color:var(--ochre-600)!important;
  --bs-btn-focus-shadow-rgb:var(--ochre-400-rgb)!important;
}
.btn-outline-info,.btn-outline-light,.btn-outline-dark{
  --bs-btn-color:var(--gray-600)!important; --bs-btn-border-color:var(--gray-100)!important;
  --bs-btn-hover-color:var(--paper)!important; --bs-btn-hover-bg:var(--gray-800)!important; --bs-btn-hover-border-color:var(--gray-800)!important;
  --bs-btn-active-color:var(--paper)!important; --bs-btn-active-bg:var(--gray-900)!important; --bs-btn-active-border-color:var(--gray-900)!important;
  --bs-btn-focus-shadow-rgb:var(--gray-600-rgb)!important;
}

/* ---- alerts, badges, text/bg utilities ----------------------------------- */
.alert-primary{--bs-alert-color:var(--teal-800);--bs-alert-bg:var(--teal-50);--bs-alert-border-color:var(--teal-100)}
.alert-secondary{--bs-alert-color:var(--gray-800);--bs-alert-bg:var(--paper-alt);--bs-alert-border-color:var(--gray-100)}
.alert-success{--bs-alert-color:var(--teal-800);--bs-alert-bg:var(--teal-50);--bs-alert-border-color:var(--teal-100)}
.alert-danger{--bs-alert-color:var(--coral-600);--bs-alert-bg:var(--coral-50);--bs-alert-border-color:var(--coral-100)}
.alert-warning{--bs-alert-color:var(--ochre-600);--bs-alert-bg:var(--ochre-50);--bs-alert-border-color:var(--ochre-100)}
.alert-info{--bs-alert-color:var(--gray-800);--bs-alert-bg:var(--gray-50);--bs-alert-border-color:var(--gray-100)}
.alert{--bs-alert-border-radius:var(--radius-md)}

/* text-warning was coral-200: 2.08:1 on paper, i.e. the ⚠ glyphs were invisible */
.text-warning{color:var(--ochre-600)!important}
.text-danger{color:var(--coral-600)!important}
.text-success{color:var(--teal-800)!important}
.text-info{color:var(--gray-800)!important}
.text-primary{color:var(--primary)!important}
.text-secondary{color:var(--gray-600)!important}
.text-muted{color:var(--gray-600)!important}

.form-control,.form-select{
  --bs-border-radius:var(--radius-md);
  background-color:var(--paper);border-color:var(--gray-100);color:var(--gray-900)
}
.form-control:focus,.form-select:focus{
  border-color:var(--focus-ring-color);
  box-shadow:0 0 0 var(--focus-ring-width) rgba(var(--teal-400-rgb),.25)
}
.form-control::placeholder{color:var(--gray-400)}

/* Bootstrap 5.3 compila checkbox, radio, switch e range con #0d6efd letterale:
   senza queste righe i toggle restavano blu Bootstrap (sul live erano coral solo
   grazie a un override sparso nel tema). Un solo accento per tutti i controlli. */
.form-check-input:checked{background-color:var(--control-accent)!important;border-color:var(--control-accent)!important}
.form-check-input:focus{border-color:var(--focus-ring-color);box-shadow:0 0 0 var(--focus-ring-width) rgba(var(--teal-400-rgb),.25)}
.form-check-input[type=checkbox]:indeterminate{background-color:var(--control-accent);border-color:var(--control-accent)}
.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%230F6E56'/%3e%3c/svg%3e")}
.form-range::-webkit-slider-thumb{background-color:var(--control-accent)}
.form-range::-moz-range-thumb{background-color:var(--control-accent)}
.nav-tabs .nav-link.active{color:var(--nav-link-active);border-bottom-color:var(--primary)}
.link-primary{color:var(--secondary)!important}
