:root{
  /* ---- Palette « carrière & forge » ---- */
  --basalte:#1E2830;
  --basalte-2:#28333C;
  --braise:#E4572E;
  --braise-press:#C6461F;
  --braise-fond:#FBEAE3;
  --pierre:#EFEBE2;
  --carte:#FFFFFF;
  --ardoise:#57636C;
  --encre:#1E2422;
  --ligne:#E1DDD2;
  --ambre-fond:#F7ECD8;

  /* ---- Alias historiques : lus directement par l'app (rentabilité) — ne pas renommer ---- */
  --green-dark:#2F5C46;
  --green:#3F7856;
  --green-light:#E3EEE6;
  --danger:#B23A2E;
  --warn:#B4791F;

  --bg:var(--pierre);
  --card:var(--carte);
  --text:var(--encre);
  --muted:var(--ardoise);
  --border:var(--ligne);

  --radius:14px;
  --radius-sm:9px;
  --nav-h:68px;

  --font-display:'Space Grotesk',system-ui,sans-serif;
  --font-body:'IBM Plex Sans',system-ui,sans-serif;
  --font-mono:'IBM Plex Mono',ui-monospace,SFMono-Regular,Menlo,monospace;

  --shadow-card:0 1px 2px rgba(30,40,48,.07),0 1px 1px rgba(30,40,48,.04);
  --shadow-frame:0 24px 60px rgba(14,18,22,.28),0 2px 10px rgba(14,18,22,.14);

  /* ---- Charte Arvernia (appliquée écran par écran) ---- */
  --arv-green-950: #173A32;
  --arv-green-800: #1F5745;
  --arv-green-600: #32745A;
  --arv-green-100: #E6EFE9;

  --arv-copper: #C56F2A;
  --arv-copper-light: #F3E4D5;

  --arv-bg: #F4F0E8;
  --arv-surface: #FFFFFF;
  --arv-surface-soft: #FAF8F4;
  --arv-border: #DED8CE;

  --arv-text: #202B30;
  --arv-text-muted: #667278;
  --arv-text-on-dark: #FFFFFF;

  --arv-success: #2F7657;
  --arv-warning: #C58A32;
  --arv-danger: #C64B3C;

  --arv-leo: #3D8B6E;
  --arv-leo-soft: #E6F0EA;

  --arv-input-bg: #FFFFFF;
  --arv-input-border: #DED8CE;
  --arv-input-focus: #1F5745;

  --arv-radius-sm: 10px;
  --arv-radius-md: 16px;
  --arv-radius-lg: 22px;

  --arv-shadow-card: 0 4px 14px rgba(23, 58, 50, 0.08);
  --arv-shadow-raised: 0 8px 24px rgba(23, 58, 50, 0.12);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
html,body{margin:0;height:100%;}
body{
  font-family:var(--font-body);
  background:var(--basalte-2);color:var(--text);
  -webkit-font-smoothing:antialiased;
}
h1,h2,h3{font-family:var(--font-display);letter-spacing:-.01em;}
#phone,#authScreen{
  max-width:480px;margin:0 auto;min-height:100vh;background:var(--bg);
  position:relative;display:flex;flex-direction:column;box-shadow:var(--shadow-frame);
}
@media (min-width:481px){
  body{padding:22px 0;}
  #phone,#authScreen{min-height:calc(100vh - 44px);border-radius:26px;overflow:hidden;}
}
.topbar{
  background:var(--arv-green-950);color:var(--arv-text-on-dark);
  padding:calc(env(safe-area-inset-top,0px) + 16px) 18px 16px;
  position:sticky;top:0;z-index:20;
  border-bottom:1px solid var(--arv-copper);
}
.topbar h1{font-size:19px;margin:0;font-weight:700;}
.topbar p{margin:2px 0 0;color:var(--arv-text-on-dark);opacity:.68;font-size:12px;font-family:var(--font-body);}
.install-row{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap;}
.install-btn{background:var(--arv-surface);color:var(--arv-green-950);border:none;border-radius:20px;padding:6px 12px;font-size:11px;font-weight:700;cursor:pointer;}
.install-hint{color:var(--arv-text-on-dark);opacity:.68;font-size:10.5px;align-self:center;}
/* Logo Arvernia au-dessus du titre de l'écran (fichier source non redimensionné). */
.topbar-logo{display:block;width:220px;max-width:100%;height:auto;margin:0 auto 4px;}
/* Logo centré sur toute la largeur du header : le bloc titre occupe toute la largeur,
   la déconnexion sort du flux et reste en haut à droite (même position qu'avant). */
.topbar > div{flex:1;min-width:0;}
#logoutBtnTop{position:absolute;top:calc(env(safe-area-inset-top,0px) + 16px);right:18px;}

.view{display:none;padding:16px 16px calc(var(--nav-h) + 30px);flex:1;}
.view.active{display:block;}

.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:16px;margin-bottom:14px;box-shadow:var(--shadow-card);}
.card h3{margin:0 0 10px;font-size:15px;font-weight:700;}
.row{display:flex;gap:8px;flex-wrap:wrap;}
.btn{border:none;border-radius:10px;padding:12px 14px;font-size:14px;font-weight:600;font-family:var(--font-body);cursor:pointer;min-height:44px;transition:background .12s ease,transform .08s ease;}
.btn-primary{background:var(--braise);color:#fff;}
.btn-primary:hover{background:var(--braise-press);}
.btn-primary:active{transform:translateY(1px);}
.btn-outline{background:#fff;border:1px solid var(--border);color:var(--text);}
.btn-outline:hover{background:var(--pierre);border-color:var(--ardoise);}
.btn-danger{background:#FBEAE6;color:var(--danger);border:1px solid #F0CFC7;}
.btn:disabled{opacity:.5;cursor:not-allowed;}
.btn-full{width:100%;}
/* Bouton « Appeler » de la fiche client : téléphone seulement (écran étroit, ou
   écran tactile sans survol : téléphone tenu à l'horizontale) ; jamais sur ordinateur. */
.btn-appel{display:none;align-items:center;justify-content:center;gap:6px;text-decoration:none;box-sizing:border-box;margin:4px 0 6px;}
@media (max-width:480px), (hover:none) and (pointer:coarse){ .btn-appel{display:flex;} }
/* Fiche client sur ordinateur : numéro en clair et « Copier » (le lien tel: est réservé au téléphone). */
.client-appel-bureau{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:4px 0 6px;}
.client-appel-bureau .btn{min-height:36px;padding:6px 12px;font-size:13px;}
@media (max-width:480px), (hover:none) and (pointer:coarse){ .client-appel-bureau{display:none;} }
/* Clients : recherche et liste en accordéon (js/clients.js). */
.clients-recherche{margin-bottom:12px;}
.list-item.client-item{padding:0;}
.client-item[hidden]{display:none;}
.client-entete{display:flex;align-items:center;gap:10px;width:100%;min-height:52px;padding:10px 12px;background:none;border:none;text-align:left;cursor:pointer;font-family:var(--font-body);color:var(--text);}
.client-chevron{flex-shrink:0;width:20px;font-size:26px;line-height:1;color:var(--text);text-align:center;}
.client-resume{display:flex;flex-direction:column;min-width:0;}
.client-resume b,.client-resume .small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.client-fiche{padding:0 14px 14px;border-top:1px solid var(--border);}
.client-fiche[hidden]{display:none;}
/* Accueil : blocs repliables « Clients à rappeler » et « Pense-bêtes » (js/rappels.js). */
.bloc-accueil>summary{cursor:pointer;font-family:var(--font-display);font-size:15px;font-weight:700;list-style-position:inside;}
.bloc-accueil[open]>summary{margin-bottom:6px;}
.lien-voir-tout{background:none;border:none;padding:8px 0 0;min-height:auto;color:var(--braise);font-weight:600;font-size:13px;cursor:pointer;font-family:var(--font-body);}
/* Pense-bêtes de l'accueil : texte sur une ligne, échéance toujours lisible à droite. */
.pense-bete{display:flex;flex-wrap:wrap;align-items:center;column-gap:8px;margin-top:6px;min-width:0;}
.pense-bete-libelle{display:flex;align-items:center;gap:8px;flex:1 1 120px;min-width:0;margin:0;cursor:pointer;}
.pense-bete-texte{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
/* Date longue sur petit écran : elle passe seule sur une seconde ligne, à droite. */
.pense-bete-date{flex-shrink:0;white-space:nowrap;margin-left:auto;}
.pense-bete-date.en-retard{color:var(--danger);font-weight:600;}
/* Écran Rappels : « Modifier » un pense-bête (lien discret, facile à toucher). */
.ligne-modif{flex-shrink:0;background:none;border:none;padding:8px 6px;min-height:auto;color:var(--braise);font-weight:600;font-size:13px;font-family:var(--font-body);cursor:pointer;}
.client-rappel{border-top:1px solid var(--border);padding:10px 0 4px;}
.client-rappel:first-of-type{border-top:none;}
.client-rappel-tete{display:flex;justify-content:space-between;align-items:baseline;gap:8px;}
.client-rappel-tete b{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.client-rappel-tete .small{flex-shrink:0;}
.client-rappel-motif{display:flex;align-items:center;gap:6px;margin-top:2px;min-width:0;}
.client-rappel-motif>span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.client-rappel-motif .chip{flex-shrink:0;padding:2px 8px;}
.client-rappel-resume{margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.rap-actions{display:flex;gap:6px;margin-top:8px;}
.rap-actions>.btn{flex:1 1 0;min-width:0;padding:8px 6px;font-size:13px;min-height:40px;display:flex;align-items:center;justify-content:center;text-decoration:none;box-sizing:border-box;white-space:nowrap;}
.rap-actions>.rap-tel{display:none;}
@media (max-width:480px), (hover:none) and (pointer:coarse){ .rap-actions>.rap-tel{display:flex;} .rap-actions>.rap-copier{display:none;} }
/* Très petit écran : « Rappeler » sur toute la largeur, les deux autres actions dessous. */
@media (max-width:359px){ .rap-actions{flex-wrap:wrap;} .rap-actions>.btn:first-child{flex-basis:100%;} }
label{display:block;font-size:12px;color:var(--muted);margin-bottom:4px;margin-top:10px;font-weight:500;}
input,select,textarea{width:100%;padding:11px 10px;border:1px solid var(--border);border-radius:8px;font-size:15px;font-family:var(--font-body);background:#fff;color:var(--text);transition:border-color .12s ease,box-shadow .12s ease;}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--braise);box-shadow:0 2px 0 0 var(--braise);}
textarea{resize:vertical;min-height:60px;}
.chip{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border-radius:999px;font-size:11px;font-weight:700;background:var(--green-light);color:var(--green-dark);}
.chip.warn{background:var(--ambre-fond);color:var(--warn);}
.chip.danger{background:#FBEAE6;color:var(--danger);}
.chip.muted{background:var(--pierre);color:var(--muted);}
.chip[hidden]{display:none;}
.tab-btn .badge-pro,.more-tile .badge-pro{padding:1px 6px;font-size:9.5px;margin-left:3px;vertical-align:middle;}
.list-item{border:1px solid var(--border);border-radius:12px;padding:14px;margin-bottom:12px;background:#fff;}
.ligne-row{display:grid;grid-template-columns:1fr 52px 78px 62px 28px;gap:6px;align-items:center;margin-bottom:6px;}
.ligne-row input{padding:8px 6px;font-size:13px;}
.ligne-row .ligne-del{background:none;border:none;color:var(--danger);font-size:16px;cursor:pointer;padding:4px;min-height:auto;}
/* Lot A3 : unité compacte (bouton) et options de ligne repliées. */
.ligne-row .ligne-unite{background:none;border:1px solid var(--border);border-radius:6px;color:var(--text);font-size:11px;line-height:1;padding:3px 2px;min-width:22px;max-width:30px;min-height:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;}
.ligne-row .ligne-unite.a-preciser{color:var(--warn);border-color:var(--warn);}
.ligne-options{display:flex;flex-wrap:wrap;gap:8px;align-items:flex-end;margin:-2px 0 8px;padding:8px;border:1px dashed var(--border);border-radius:8px;}
.ligne-options[hidden]{display:none;}
.ligne-options label{display:flex;flex-direction:column;font-size:11px;color:var(--muted);gap:2px;margin:0;}
.ligne-options select{font-size:13px;padding:6px;max-width:100%;}
.ligne-options .btn{font-size:12px;padding:6px 10px;min-height:auto;}
/* Lot A3bis : « Plus d'options » du devis (autoliquidation BTP), replié par défaut. */
.options-devis{margin-top:10px;font-size:13px;}
.options-devis summary{cursor:pointer;color:var(--muted);font-size:13px;}
.options-devis .case-option{display:flex;align-items:center;gap:8px;margin:8px 0 0;font-size:14px;color:var(--text);}
.options-devis .case-option input{width:auto;}
/* Préparer la facture (Lot A4) : panneau intégré à la carte du devis */
.prep-facture{margin-top:6px;}
.prep-facture .prep-titre{font-weight:700;margin:8px 0 4px;}
.prep-facture .prep-ligne{padding:6px 0;border-top:1px solid var(--border);}
.prep-facture .prep-grille{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px;}
.prep-facture .prep-grille label{font-size:13px;min-width:0;}
.prep-facture .prep-grille input,.prep-facture .prep-grille select{min-width:0;width:100%;box-sizing:border-box;}
.prep-facture .case-option{display:flex;align-items:center;gap:8px;margin:6px 0 0;font-size:14px;}
.prep-facture .case-option input{width:auto;}
.ligne-head{display:grid;grid-template-columns:1fr 52px 78px 62px 28px;gap:6px;font-size:10px;color:var(--muted);font-weight:700;text-transform:uppercase;margin-bottom:4px;padding:0 2px;}
/* Lignes d'un devis sur téléphone (nouveau devis et modification) : la description prend toute la largeur, puis
   quantité, prix et TVA sur une seconde rangée. Sur une seule rangée, la description tombait à une dizaine de pixels
   à 320 px et la page débordait. L'en-tête suit la même grille : il sert de légende aux deux rangées.
   Au-delà de 480 px : rien ne change. (!important : la grille de bureau est posée en style sur chaque ligne.) */
@media (max-width:480px){
  #nd_lignesZone .ligne-head, [id^="dev-edit-lignes-"] .ligne-head,
  #nd_lignesZone .ligne-row, [id^="dev-edit-lignes-"] .ligne-row{grid-template-columns:minmax(0,1fr) minmax(0,1.3fr) minmax(0,1fr) 46px !important;}
  #nd_lignesZone .ligne-head > span:first-child, [id^="dev-edit-lignes-"] .ligne-head > span:first-child,
  #nd_lignesZone .ligne-row > input[data-f="description"], [id^="dev-edit-lignes-"] .ligne-row > input[data-f="description"]{grid-column:1 / -1;}
  #nd_lignesZone .ligne-row input, [id^="dev-edit-lignes-"] .ligne-row input{min-width:0;}
  #nd_lignesZone .ligne-row, [id^="dev-edit-lignes-"] .ligne-row{margin-bottom:14px;}
}
.ligne-total-row{display:flex;justify-content:space-between;align-items:center;margin-top:10px;padding-top:10px;border-top:1px solid var(--border);font-family:var(--font-mono);}
.ligne-total-row b{font-size:18px;font-family:var(--font-display);}
.muted{color:var(--muted);}
.small{font-size:12px;}
table{width:100%;border-collapse:collapse;font-size:12.5px;}
th,td{text-align:left;padding:8px 4px;border-bottom:1px solid var(--border);}
th{color:var(--muted);font-weight:600;font-family:var(--font-body);}
td.num,th.num,.amount{font-family:var(--font-mono);font-variant-numeric:tabular-nums;}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:10px;}

.assistant-wrap{text-align:center;}
.assistant-avatar{width:64px;height:64px;border-radius:50%;background:var(--basalte);display:flex;align-items:center;justify-content:center;margin:6px auto 10px;color:#fff;}
.assistant-avatar svg{width:28px;height:28px;}
.mic-btn{width:96px;height:96px;border-radius:50%;border:none;background:var(--arv-leo);color:#fff;cursor:pointer;box-shadow:0 0 0 8px var(--arv-leo-soft);display:inline-flex;align-items:center;justify-content:center;transition:box-shadow .15s ease,background .15s ease;}
.mic-btn svg{width:34px;height:34px;}
.mic-btn.listening{background:var(--danger);box-shadow:0 0 0 8px #F3D9D3;animation:pulse 1.4s ease-in-out infinite;}
@keyframes pulse{0%,100%{box-shadow:0 0 0 8px #F3D9D3;}50%{box-shadow:0 0 0 14px #F3D9D3;}}
.mic-hint{color:var(--muted);font-size:11.5px;margin-top:8px;}
.quick-actions{display:flex;justify-content:center;gap:18px;margin-top:16px;flex-wrap:wrap;}
.quick-actions a{color:var(--arv-green-800);font-weight:600;font-size:13.5px;cursor:pointer;text-decoration:none;border-bottom:1px solid transparent;}
.quick-actions a:hover{border-bottom-color:var(--arv-leo);}
#voiceStatus{font-weight:700;margin:12px 0 2px;font-family:var(--font-display);}
.confirm-card{border:2px solid var(--arv-leo);text-align:left;}
.confirm-card .pct{background:var(--arv-leo-soft);color:var(--arv-green-800);border-radius:999px;padding:2px 10px;font-size:12px;font-weight:700;float:right;}
.confirm-card .carte-alerte{color:var(--warn);margin:4px 0 6px;line-height:1.45;overflow-wrap:anywhere;}
/* Léo V1.2 : devis comparables et ébauche modifiable (carte « nouveau devis », js/leo.js) */
.leo-chiffrage{margin-top:10px;}
.leo-ref{margin:10px 0 6px;padding:10px 12px;border-radius:10px;background:var(--pierre);font-size:13.5px;line-height:1.45;overflow-wrap:anywhere;}
.leo-ref-titre,.leo-ebauche-titre{font-weight:700;margin-bottom:4px;}
.leo-ref-liste{list-style:none;margin:0;padding:0;}
.leo-ref-item{padding:6px 0;border-top:1px solid var(--border);}
.leo-ref-item:first-child{border-top:none;}
.leo-ref-note{margin-top:6px;}
.leo-ebauche-titre{margin-top:12px;}
.leo-ebauche-ligne{border:1px solid var(--border);border-radius:10px;padding:4px 10px 10px;margin:8px 0;min-width:0;}
.leo-ebauche-ligne legend{padding:0 4px;font-weight:600;}
.leo-ebauche-chiffres{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;}
.leo-ebauche-chiffres input{min-width:0;min-height:44px;box-sizing:border-box;}
/* Intitulés de longueurs différentes (« Prix unitaire HT (€) » passe sur deux lignes sur téléphone) : chaque case est une
   colonne, le champ calé en bas, pour que les trois champs d'une ligne restent alignés. */
.leo-ebauche-chiffres > div{display:flex;flex-direction:column;min-width:0;}
.leo-ebauche-chiffres > div > input{margin-top:auto;}
.leo-ebauche-ligne input{min-height:44px;}
.leo-ebauche-justif{margin-top:6px;line-height:1.4;overflow-wrap:anywhere;}
.leo-ebauche-suppr{margin-top:8px;}
.leo-ebauche-ajout{margin:4px 0 8px;}
.leo-ebauche-total{margin:6px 0 2px;}
#confirmBtn[aria-disabled="true"]{opacity:.6;}
@media (max-width:359px){ .leo-ebauche-chiffres{grid-template-columns:minmax(0,1fr) minmax(0,1fr);} }

.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:5px;margin-top:10px;}
.cal-day-name{text-align:center;font-size:10px;color:var(--muted);font-weight:700;}
.cal-day{aspect-ratio:1;border-radius:8px;background:var(--pierre);display:flex;align-items:center;justify-content:center;font-size:12.5px;cursor:pointer;position:relative;border:1px solid transparent;font-family:var(--font-mono);}
.cal-day.has-event{background:var(--arv-green-100);font-weight:700;color:var(--arv-green-800);}
.cal-day.today{border-color:var(--arv-copper);}
.cal-day.selected{background:var(--arv-green-800);color:var(--arv-text-on-dark);}
.cal-day .dot{position:absolute;bottom:2px;width:13px;height:13px;font-size:8.5px;background:var(--arv-green-800);color:var(--arv-text-on-dark);border-radius:50%;display:flex;align-items:center;justify-content:center;}
.cal-day.selected .dot{background:var(--arv-surface);color:var(--arv-green-800);}
.toast{background:var(--green-light);border:1px solid #C9DFCE;color:var(--green-dark);padding:10px 12px;border-radius:10px;margin-bottom:14px;font-size:12.5px;display:flex;justify-content:space-between;align-items:center;}
.toast button{background:none;border:none;color:inherit;font-size:14px;cursor:pointer;}

.more-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.more-tile{background:var(--arv-surface);border:1px solid var(--arv-border);border-radius:14px;padding:16px 10px;text-align:center;cursor:pointer;transition:border-color .12s ease;}
.more-tile:hover{background:var(--arv-surface-soft);border-color:var(--arv-green-800);}
.more-tile .emoji{display:flex;align-items:center;justify-content:center;color:var(--arv-green-800);}
.more-tile .emoji svg{width:26px;height:26px;}
.more-tile .lbl{font-size:12.5px;font-weight:700;margin-top:6px;font-family:var(--font-body);}

.tabbar{
  position:fixed;left:50%;transform:translateX(-50%);bottom:0;
  width:100%;max-width:480px;background:var(--arv-surface);border-top:1px solid var(--arv-border);
  display:flex;justify-content:space-around;align-items:flex-start;
  padding:7px 4px calc(env(safe-area-inset-bottom,0px) + 6px);z-index:30;
}
.tab-btn{background:none;border:none;display:flex;flex-direction:column;align-items:center;gap:2px;color:var(--arv-text-muted);font-size:10px;font-weight:600;cursor:pointer;flex:1;min-width:0;padding:2px 2px;position:relative;text-align:center;line-height:1.15;}
.tab-btn .lbl{max-width:100%;white-space:normal;word-break:normal;overflow-wrap:break-word;}
.tab-btn .ic{display:flex;align-items:center;justify-content:center;width:36px;height:30px;border-radius:10px;margin-bottom:1px;transition:background .12s ease;}
.tab-btn .ic svg{width:23px;height:23px;}
.tab-btn.active{color:var(--arv-green-800);font-weight:700;}
.tab-btn.active .ic{background:var(--arv-green-100);color:var(--arv-green-800);}
/* ---------- Authentification ---------- */
#authScreen{display:none;flex-direction:column;background:var(--bg);padding:0 0 40px;}
#authScreen.active{display:flex;}
.auth-hero{background:var(--basalte);color:#fff;padding:calc(env(safe-area-inset-top,0px) + 40px) 24px 30px;text-align:center;position:relative;overflow:hidden;}
.auth-hero .logo{font-size:24px;font-weight:700;font-family:var(--font-display);position:relative;z-index:1;display:flex;align-items:center;justify-content:center;gap:8px;}
.auth-hero .tag{color:#A9B7BE;font-size:13px;margin-top:8px;position:relative;z-index:1;}
.auth-hero .chalk{width:56px;height:2px;background:var(--braise);margin:14px auto 0;position:relative;z-index:1;}
.auth-body{padding:22px 20px;}
.auth-tabs{display:flex;background:var(--pierre);border-radius:12px;padding:4px;margin-bottom:18px;}
.auth-tab{flex:1;text-align:center;padding:10px;border-radius:9px;font-size:14px;font-weight:700;cursor:pointer;color:var(--muted);border:none;background:none;font-family:var(--font-body);}
.auth-tab.active{background:#fff;color:var(--basalte);box-shadow:var(--shadow-card);}
.auth-msg{padding:10px 12px;border-radius:10px;font-size:12.5px;margin-bottom:12px;}
.auth-msg.err{background:#FBEAE6;border:1px solid #F0CFC7;color:#8A2E20;}
.auth-msg.ok{background:var(--green-light);border:1px solid #C9DFCE;color:var(--green-dark);}
.auth-trust{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:20px;}
.auth-trust div{background:#fff;border:1px solid var(--border);border-radius:10px;padding:10px;font-size:11.5px;text-align:center;color:var(--muted);}
.legal-links{text-align:center;font-size:11px;color:var(--muted);margin-top:16px;}
.legal-links a{color:var(--muted);cursor:pointer;text-decoration:underline;}
.qr-box{background:#fff;padding:14px;border-radius:12px;text-align:center;border:1px solid var(--border);}
.qr-box img{max-width:190px;width:100%;}
.secret-code{font-family:var(--font-mono);font-size:12px;word-break:break-all;background:var(--pierre);padding:8px;border-radius:8px;margin-top:8px;}
#splash{display:flex;align-items:center;justify-content:center;min-height:100vh;color:var(--arv-green-100);font-size:14px;background:var(--arv-green-950);font-family:var(--font-body);}

/* ===================== CHARTE ARVERNIA — écran Rentabilité (pilote) ===================== */
/* Toutes les règles sont limitées à #view-rentabilite : aucun autre écran n'est concerné.
   Les variables historiques sont redéfinies localement : .card, .muted, th/td et la couleur
   de marge écrite dans le JS (var(--green-dark) / var(--danger)) suivent la charte ici seulement. */
#view-rentabilite {
  --card: var(--arv-surface);
  --border: var(--arv-border);
  --text: var(--arv-text);
  --muted: var(--arv-text-muted);
  --radius: var(--arv-radius-md);
  --shadow-card: var(--arv-shadow-card);
  --green-dark: var(--arv-success);
  --danger: var(--arv-danger);
}
/* body fixe sa couleur de texte avec l'ancienne valeur : on la réapplique dans l'écran. */
#view-rentabilite{color:var(--text);}
#view-rentabilite .card h3{color:var(--arv-text);}

/* KPI : structure et contenu inchangés. Ordre des cartes fixé par renderRentabilite :
   1 Recettes, 2 Dépenses, 3 Marge (couleur déjà portée par les variables ci-dessus). */
#view-rentabilite #rentaKpis .small.muted{font-weight:600;letter-spacing:.02em;}
#view-rentabilite #rentaKpis .card > div:not(.small){font-variant-numeric:tabular-nums;letter-spacing:-.01em;}
#view-rentabilite #rentaKpis .card:nth-child(1) > div:not(.small){color:var(--arv-green-800);}
#view-rentabilite #rentaKpis .card:nth-child(2) > div:not(.small){color:var(--arv-danger);}

/* Tableaux (par chantier, par prestation). */
#view-rentabilite th{background:var(--arv-green-950);color:var(--arv-text-on-dark);border-bottom-color:var(--arv-border);padding:8px;}
#view-rentabilite th:first-child{border-top-left-radius:var(--arv-radius-sm);}
#view-rentabilite th:last-child{border-top-right-radius:var(--arv-radius-sm);}
#view-rentabilite td{border-bottom-color:var(--arv-border);padding:8px;}
#view-rentabilite tr:nth-child(odd) td{background:var(--arv-surface-soft);}

/* ===================== CHARTE ARVERNIA — boutons métier ===================== */
/* Limité à #phone : l'écran de connexion garde son identité actuelle.
   Les boutons « Supprimer » gardent leur texte rouge (couleur danger inline). */
#phone .btn-primary {
  background: var(--arv-green-800);
  color: var(--arv-text-on-dark);
}
#phone .btn-primary:hover {
  background: var(--arv-green-950);
}
#phone .btn-outline {
  background: var(--arv-surface);
  color: var(--arv-text);
  border-color: var(--arv-border);
}
#phone .btn-outline:hover {
  background: var(--arv-surface-soft);
  border-color: var(--arv-green-800);
}
#phone .btn-danger {
  color: var(--arv-danger);
}
/* Actions destructives : aucun vert au survol. */
#phone .btn-outline[data-delete-devis]:hover,
#phone .btn-outline[data-delete-client]:hover {
  background: #FBEAE6;
  border-color: #F0CFC7;
  color: var(--arv-danger);
}

/* ===================== CHARTE ARVERNIA — focus des formulaires ===================== */
/* Limité à #phone : les champs de l'écran de connexion gardent leur focus actuel. */
#phone input:focus,
#phone select:focus,
#phone textarea:focus {
  border-color: var(--arv-input-focus);
  box-shadow: 0 2px 0 0 var(--arv-input-focus);
}

/* ===================== CHARTE ARVERNIA — écran de connexion ===================== */
/* Toutes les règles sont limitées à #authScreen : l'application connectée n'est pas concernée.
   Aucun identifiant ni aucune classe pilotés par auth.js ne sont renommés. */
#authScreen {
  --bg: var(--arv-bg);
  --card: var(--arv-surface);
  --border: var(--arv-border);
  --text: var(--arv-text);
  --muted: var(--arv-text-muted);
  --radius: var(--arv-radius-md);
  background: var(--arv-bg);
  color: var(--arv-text);
}
#authScreen .auth-hero {
  background: var(--arv-green-950);
  color: var(--arv-text-on-dark);
  border-bottom: 1px solid var(--arv-copper);
}
#authScreen .auth-logo {
  display: block;
  width: 270px;
  max-width: 100%;
  height: auto;
  margin: 0 auto;
}
#authScreen .auth-tabs {
  background: var(--arv-surface-soft);
}
#authScreen .auth-tab {
  color: var(--arv-text-muted);
}
#authScreen .auth-tab.active {
  background: var(--arv-green-100);
  color: var(--arv-green-800);
}
#authScreen .btn-primary {
  background: var(--arv-green-800);
  color: var(--arv-text-on-dark);
}
#authScreen .btn-primary:hover {
  background: var(--arv-green-950);
}
#authScreen .btn-outline {
  background: var(--arv-surface);
  border-color: var(--arv-border);
  color: var(--arv-text);
}
#authScreen .btn-outline:hover {
  background: var(--arv-surface-soft);
  border-color: var(--arv-green-800);
}
/* Champs : seules les couleurs changent (hauteur et padding inchangés, icône du mot de passe en place). */
#authScreen input,
#authScreen select,
#authScreen textarea {
  background: var(--arv-input-bg);
  border-color: var(--arv-input-border);
}
#authScreen input:focus,
#authScreen select:focus,
#authScreen textarea:focus {
  border-color: var(--arv-input-focus);
  box-shadow: 0 2px 0 0 var(--arv-input-focus);
}
#authScreen .auth-trust div {
  background: var(--arv-surface);
  border-color: var(--arv-border);
  color: var(--arv-text-muted);
}
#authScreen .auth-msg.ok {
  background: var(--arv-green-100);
  color: var(--arv-success);
}
#authScreen .legal-links,
#authScreen .legal-links a {
  color: var(--arv-text-muted);
}

/* ===================== ONBOARDING DU NOUVEL ARTISAN ===================== */
/* Limité au bloc #onboardingForm de l'écran de connexion. */
#authScreen #onboardingForm .onb-titre {
  font-size: 18px;
  margin: 0 0 6px;
}
#authScreen #onboardingForm .onb-section {
  margin: 22px 0 0;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--arv-green-800);
}
#authScreen #onboardingForm .onb-facultatif {
  font-weight: 400;
}
#authScreen #onboardingForm .onb-erreur {
  margin-top: 4px;
  font-size: 12px;
  color: var(--arv-danger);
}
#authScreen #onboardingForm .onb-erreur:empty {
  display: none;
}
#authScreen #onboardingForm input[aria-invalid="true"] {
  border-color: var(--arv-danger);
}
#authScreen #onboardingForm .onb-choix {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 8px 0 0;
  padding: 12px;
  border: 1px solid var(--arv-border);
  border-radius: var(--arv-radius-sm);
  background: var(--arv-surface);
  color: var(--arv-text);
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
}
#authScreen #onboardingForm .onb-choix input {
  width: auto;
  margin: 0;
  box-shadow: none;
  accent-color: var(--arv-green-800);
}
#authScreen #onboardingForm .onb-choix:has(input:checked) {
  border-color: var(--arv-green-800);
  background: var(--arv-green-100);
}
#authScreen #onboardingForm .onb-aide {
  margin: 6px 0 0;
}

/* Lien direct #abonnement : la carte ne passe pas sous la barre d'en-tête fixe. */
#abonnementCard{scroll-margin-top:190px;}

/* Mon abonnement : cartes de formule sélectionnables (choix initial, changement). */
.offres-grille{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;margin-top:8px;}
.offre-carte.offre-selectionnee{border:2px solid var(--braise);background:var(--braise-fond);color:var(--encre);}
.offre-carte.offre-courante{border-style:dashed;opacity:.75;}
#abonnementContinuer:disabled,#chgConfirmer:disabled{opacity:.5;cursor:not-allowed;}
.chg-bloc{margin-top:16px;padding:14px;border:2px solid var(--braise);border-radius:12px;background:var(--braise-fond);}
.chg-bloc-titre{font-weight:700;margin:0 0 8px;}
.chg-bloc-texte{white-space:pre-line;margin:0 0 6px;}
.chg-bloc-formule{font-weight:700;font-size:1.05em;margin:4px 0 8px;}
#abonnementBandeau[data-goto]{text-decoration:underline;text-underline-offset:3px;}

/* Factures fournisseurs reçues (lot F3) */
.more-tile[hidden]{display:none;}
/* Ligne d'installation de l'application masquée sur certains écrans (classe posée par goTo, js/nav.js). « !important » : la
   ligne porte un style en ligne géré par js/pwa.js, qui n'est pas modifié. */
.install-row.install-row-masquee{display:none !important;}
.badge-compteur{padding:1px 6px;font-size:9.5px;margin-left:3px;vertical-align:middle;}
.ff-filtres{display:flex;gap:6px;overflow-x:auto;padding-bottom:6px;margin-bottom:8px;-webkit-overflow-scrolling:touch;}
.ff-filtre{flex-shrink:0;border:1px solid var(--border);background:#fff;border-radius:999px;padding:6px 12px;font-size:12.5px;font-weight:600;color:var(--muted);cursor:pointer;font-family:inherit;}
.ff-filtre.actif{background:var(--green-light);border-color:var(--green-dark);color:var(--green-dark);}
.ff-outils{justify-content:space-between;align-items:center;gap:8px;margin-bottom:12px;}
.ff-outils select{width:auto;display:inline-block;margin-left:4px;}
.list-item.ff-item{padding:0;}
.ff-entete{padding:14px;cursor:pointer;display:flex;flex-direction:column;gap:4px;}
.ff-chips{display:flex;gap:4px;flex-wrap:wrap;justify-content:flex-end;flex-shrink:0;}
.ff-non-lue::before{content:"";display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--danger);margin-right:6px;vertical-align:middle;}
.ff-fiche{padding:0 14px 14px;border-top:1px solid var(--border);}
.ff-fiche h4{margin:14px 0 4px;font-size:13px;}
.ff-ligne{display:flex;justify-content:space-between;gap:10px;padding:6px 0;border-bottom:1px solid var(--border);font-size:14px;}
.ff-zone{margin-top:10px;padding:10px;border:1px solid var(--border);border-radius:10px;display:flex;flex-direction:column;gap:8px;}
.ff-alerte{margin-top:12px;padding:10px 12px;border-radius:10px;background:#FBEAE6;color:var(--danger);font-size:13.5px;font-weight:600;}

/* Ce que Léo a retenu (js/memoire.js) : écran et bloc de la fiche client. Réutilise .list-item, .chip, .btn, .ff-filtre, .lien-voir-tout. */
.mem-regle{margin:0 0 12px;line-height:1.45;}
.mem-lecture-seule{margin:0 0 10px;}
.mem-compteur{margin-bottom:12px;padding:10px 12px;border-radius:10px;background:var(--ambre-fond);color:var(--text);font-size:13.5px;line-height:1.4;}
.mem-compteur b{color:var(--warn);}
.mem-ajout{margin-bottom:12px;}
.mem-aide{margin:6px 0 0;line-height:1.45;}
.mem-rubriques{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:6px;margin-bottom:12px;}
.mem-rubrique{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:2px;min-height:52px;border-radius:10px;padding:8px 10px;text-align:left;font-size:13px;color:var(--text);min-width:0;overflow-wrap:anywhere;}
.mem-rubrique-detail{font-size:11.5px;font-weight:500;color:var(--muted);}
.mem-rubrique-attente{color:var(--warn);font-weight:700;}
.mem-groupe-titre{margin:16px 0 8px;font-size:15px;overflow-wrap:anywhere;}
.mem-chantier-titre{margin:10px 0 6px;font-size:13px;font-weight:600;color:var(--muted);font-family:var(--font-body);overflow-wrap:anywhere;}
.mem-item.mem-a-confirmer{border-left:4px solid var(--warn);}
.mem-tete{display:flex;justify-content:space-between;align-items:flex-start;gap:8px;}
.mem-tete .chip{flex-shrink:0;white-space:nowrap;}
.mem-sujet{min-width:0;overflow-wrap:anywhere;}
.mem-valeur{margin-top:4px;line-height:1.5;white-space:pre-line;overflow-wrap:anywhere;}
.mem-origine{margin-top:6px;line-height:1.45;overflow-wrap:anywhere;}
.mem-actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px;}
.mem-actions .btn{flex:1 1 auto;padding:8px 10px;font-size:13px;}
#phone .btn.mem-supprimer{color:var(--arv-danger);}
#phone .btn.mem-supprimer:hover{background:#FBEAE6;border-color:#F0CFC7;}
.mem-alerte{margin-top:4px;color:var(--danger);}
.mem-lien{min-height:44px;padding:8px 0;text-align:left;}
.mem-historique{border-top:1px solid var(--border);padding-top:6px;}
.mem-historique[hidden]{display:none;}
.mem-historique-ligne{padding:4px 0;font-size:13.5px;overflow-wrap:anywhere;}
.mem-bloc-client{margin-top:16px;padding-top:16px;border-top:1px solid var(--border);}
.mem-bloc-titre{margin:0 0 8px;font-size:15px;}
.mem-bloc-ligne{padding:8px 0;border-bottom:1px solid var(--border);}
.mem-zone-carte{text-align:left;}
.mem-zone-carte:not(:empty){margin-top:16px;}
.mem-carte{margin-bottom:0;}
.mem-carte-titre{margin:0 0 6px;font-size:16px;}
.mem-carte-phrase{margin:0 0 4px;font-style:italic;line-height:1.45;overflow-wrap:anywhere;}
.mem-carte-pour{margin:10px 0 0;line-height:1.45;overflow-wrap:anywhere;}
.mem-carte-fin{text-align:left;}
.mem-carte-fin p{margin:0;line-height:1.45;}
.mem-ancienne{margin:2px 0 10px;padding:8px 10px;border-radius:10px;background:var(--pierre);}
.mem-nouvelle{margin:2px 0 4px;padding:8px 10px;border-radius:10px;background:var(--ambre-fond);}
.mem-tenu-compte{margin:2px 0 6px;line-height:1.45;overflow-wrap:anywhere;}
.mem-non-pris ul{margin:2px 0 0;padding-left:18px;}
.mem-non-pris li{margin:2px 0;}
.mem-a-verifier{margin:4px 0 6px;line-height:1.45;overflow-wrap:anywhere;}
.mem-choix-titre{font-size:12px;color:var(--muted);margin:10px 0 4px;font-weight:500;}
.mem-choix-rubrique{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:6px;}
.mem-choix{position:relative;display:block;margin:0;}
.mem-choix input{position:absolute;inset:0;width:100%;height:100%;margin:0;padding:0;opacity:0;cursor:pointer;}
.mem-choix span{display:flex;align-items:center;justify-content:center;min-height:44px;padding:8px 10px;border:1px solid var(--border);border-radius:10px;background:#fff;color:var(--text);font-size:14px;font-weight:600;text-align:center;overflow-wrap:anywhere;}
.mem-choix input:checked + span{border-color:var(--arv-leo);background:var(--arv-leo-soft);box-shadow:inset 0 0 0 1px var(--arv-leo);}
.mem-choix input:focus-visible + span{outline:2px solid var(--arv-leo);outline-offset:2px;}
.mem-rappel{margin:8px 0 4px;padding:10px 12px;border-radius:10px;background:var(--pierre);font-size:13.5px;line-height:1.45;overflow-wrap:anywhere;}
.mem-rappel-titre{font-weight:700;margin-bottom:4px;}
.mem-rappel-ligne{padding:2px 0;white-space:pre-line;}
.mem-rappel-note{margin-top:6px;}
.mem-note-retenir{margin-top:8px;}
.mem-note-retenir .btn{font-size:12px;padding:6px 12px;}
.mem-note-zone:not(:empty){margin-top:10px;}
.mem-conditions{margin-bottom:12px;padding:10px 12px;border-radius:10px;background:var(--ambre-fond);color:var(--text);}
.mem-conditions p{margin:0 0 8px;line-height:1.45;}
.mem-conditions .btn{font-size:13px;padding:8px 14px;}
