@font-face{font-family:Spectral;font-weight:500;font-style:normal;font-display:swap;src:url(fonts/spectral-latin-500-normal.woff2) format('woff2')}
@font-face{font-family:Spectral;font-weight:600;font-style:normal;font-display:swap;src:url(fonts/spectral-latin-600-normal.woff2) format('woff2')}
@font-face{font-family:Spectral;font-weight:500;font-style:italic;font-display:swap;src:url(fonts/spectral-latin-500-italic.woff2) format('woff2')}
@font-face{font-family:'Public Sans';font-weight:400;font-display:swap;src:url(fonts/public-sans-latin-400-normal.woff2) format('woff2')}
@font-face{font-family:'Public Sans';font-weight:500;font-display:swap;src:url(fonts/public-sans-latin-500-normal.woff2) format('woff2')}
@font-face{font-family:'Public Sans';font-weight:600;font-display:swap;src:url(fonts/public-sans-latin-600-normal.woff2) format('woff2')}
@font-face{font-family:'Public Sans';font-weight:700;font-display:swap;src:url(fonts/public-sans-latin-700-normal.woff2) format('woff2')}

:root{
  --fond:#EEECEF; --carte:#FFFFFF; --encre:#22202A; --doux:#625C69; --trait:#DAD6DE; --trait2:#ECE9EE;
  --violet:#4E3157; --violet-f:#3B2350; --or:#D9AE52;
  --ok:#2E6B3F; --ok-f:#E6F1E8; --att:#8A5410; --att-f:#FFF5E3; --mal:#A3471F; --mal-f:#FBEAE3;
  --serif:Spectral,Georgia,serif; --sans:'Public Sans',system-ui,-apple-system,sans-serif;
  color-scheme:light;
}
*{box-sizing:border-box}
html,body{margin:0;background:var(--fond);color:var(--encre);font-family:var(--sans);font-size:15px;-webkit-text-size-adjust:100%}
body{padding-bottom:calc(76px + env(safe-area-inset-bottom,0px))}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
a{color:var(--violet)}
.num{font-variant-numeric:tabular-nums}
.serif{font-family:var(--serif)}
.lab{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--doux);font-weight:600}
.muet{color:var(--doux)}
[hidden]{display:none!important}
:focus-visible{outline:2px solid var(--violet);outline-offset:2px}

#app{max-width:640px;margin:0 auto;padding:calc(22px + env(safe-area-inset-top,0px)) max(16px,env(safe-area-inset-right,0px)) 28px max(16px,env(safe-area-inset-left,0px));display:flex;flex-direction:column;gap:18px}
h1{font-family:var(--serif);font-weight:600;font-size:32px;line-height:1.08;margin:0;text-wrap:balance}
h2{font-family:var(--serif);font-weight:600;font-size:21px;margin:0}
.entete{display:flex;justify-content:space-between;align-items:flex-end;gap:12px}
.carte{background:var(--carte);border:1px solid var(--trait);border-radius:14px}
.pad{padding:16px}
.pile{display:flex;flex-direction:column;gap:10px}
.ligne{display:flex;justify-content:space-between;align-items:center;gap:12px}
.grille2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.point{width:9px;height:9px;border-radius:50%;flex:none;display:inline-block}
.titre-groupe{display:flex;justify-content:space-between;align-items:center;padding:0 4px;gap:8px}
.titre-groupe span{display:flex;align-items:center;gap:8px}

.btn{border:0;border-radius:12px;background:var(--violet);color:#fff;font-weight:600;padding:13px 16px;min-height:46px}
.btn:disabled{opacity:.5;cursor:default}
.btn-2{border:1px solid var(--trait);background:var(--carte);color:var(--encre);border-radius:11px;font-weight:600;padding:11px 14px;min-height:44px}
.btn-lien{border:0;background:none;color:var(--violet);font-weight:600;padding:8px 0;min-height:40px}
.btn-danger{color:var(--mal)}
.rang-btn{display:flex;gap:10px;flex-wrap:wrap}
.rang-btn>*{flex:1}

.bandeau{display:flex;align-items:center;gap:14px;padding:16px 18px;border-radius:14px;background:var(--violet);color:#fff;border:0;text-align:left;width:100%}
.bandeau .grand{font-family:var(--serif);font-size:21px;font-weight:600;margin-top:2px}
.bandeau .petit{font-size:12.5px;opacity:.88;margin-top:3px}
.bandeau.fait{background:var(--carte);color:var(--encre);border:1px solid var(--trait)}
.bandeau.fait .petit{color:var(--doux);opacity:1}

.liste{display:flex;flex-direction:column;overflow:hidden}
.liste>*{border-bottom:1px solid var(--trait2)}
.liste>*:last-child{border-bottom:0}
.alerte{display:flex;gap:12px;padding:13px 16px;text-align:left;background:none;border:0;width:100%;color:var(--encre)}
.alerte .point{margin-top:6px;width:8px;height:8px}
.alerte b{font-weight:600}
.alerte small{display:block;color:var(--doux);font-size:13px;margin-top:2px;line-height:1.35}

.projet{display:flex;flex-direction:column;gap:8px;padding:13px 15px;background:none;border:0;text-align:left;width:100%;color:var(--encre)}
.projet .nom{font-size:15px;font-weight:600}
.badge{font-size:10.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;padding:3px 7px;border-radius:5px;white-space:nowrap}
.b-plafond{background:#EEECEF;color:#4A4450}
.b-echeance{background:#EEE8F1;color:var(--violet)}
.b-cycle{background:#E3EFEE;color:#1F4F4B}
.b-treso{background:#F4ECDD;color:#6B4510}
.b-archive{background:#F1EFF2;color:var(--doux)}
.jauge{height:7px;border-radius:4px;background:var(--trait2);overflow:hidden}
.jauge>div{height:100%;border-radius:4px}
.etat{font-size:12.5px;text-align:right}
.e-ok{color:var(--ok)} .e-att{color:var(--att)} .e-mal{color:var(--mal);font-weight:600} .e-muet{color:var(--doux)}

.filtres{display:flex;gap:8px;flex-wrap:wrap}
.filtre{border:1px solid var(--trait);background:var(--carte);border-radius:20px;font-weight:600;font-size:13px;padding:8px 13px;min-height:36px}
.filtre.on{background:var(--encre);border-color:var(--encre);color:#fff}

.hist{display:flex;gap:12px;align-items:flex-start;padding:10px 0;font-size:14px}
.hist .d{width:62px;flex:none;color:var(--doux)}
.hist .t{flex:1;min-width:0}
.hist small{display:block;color:var(--doux);font-size:12.5px}

.champ{display:flex;flex-direction:column;gap:5px}
.champ label{font-size:13px;font-weight:600}
.champ .aide{font-size:12px;color:var(--doux)}
input[type=text],input[type=email],input[type=password],input[type=date],input[inputmode],select,textarea{border:1px solid #B9B3BF;border-radius:10px;padding:11px 12px;background:#fff;min-height:44px;width:100%}
textarea{min-height:70px;resize:vertical}
.case{display:flex;align-items:center;gap:10px;font-size:14px;min-height:40px}
.case input{width:20px;height:20px;accent-color:var(--violet)}
.montant{width:104px!important;text-align:right;font-weight:600;font-variant-numeric:tabular-nums}
.ecart{border-radius:9px;padding:10px 12px;font-size:13.5px;font-weight:600;line-height:1.4}
.ecart.ok{background:var(--ok-f);color:var(--ok)} .ecart.plus{background:var(--att-f);color:#7A4E0E} .ecart.moins{background:var(--mal-f);color:var(--mal)}

/* Navigation */
nav.bas{position:fixed;left:0;right:0;bottom:0;background:var(--carte);border-top:1px solid var(--trait);display:flex;justify-content:center;padding:0 max(8px,env(safe-area-inset-right,0px)) env(safe-area-inset-bottom,0px) max(8px,env(safe-area-inset-left,0px));z-index:20}
nav.bas .in{display:flex;width:100%;max-width:640px}
nav.bas button{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;padding:10px 0 12px;font-size:11px;font-weight:600;color:var(--doux);background:none;border:0;min-height:56px}
nav.bas button.on{color:var(--violet)}

/* Fenêtres */
.voile{position:fixed;inset:0;background:rgba(34,32,42,.45);z-index:40;display:flex;align-items:flex-end;justify-content:center}
.feuille{background:#F7F6F8;width:100%;max-width:640px;max-height:94vh;border-radius:22px 22px 0 0;display:flex;flex-direction:column;overflow:hidden}
@media (min-width:700px){.voile{align-items:center}.feuille{border-radius:20px;max-height:90vh}}
.feuille .haut{padding:12px 18px 8px;display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
.feuille .corps{overflow-y:auto;padding:6px 16px 18px;display:flex;flex-direction:column;gap:14px;-webkit-overflow-scrolling:touch}
.feuille .pied{padding:14px 18px calc(16px + env(safe-area-inset-bottom,0px));background:#fff;border-top:1px solid var(--trait);display:flex;flex-direction:column;gap:10px}
.fermer{width:44px;height:44px;border:0;background:none;color:var(--doux);display:flex;align-items:center;justify-content:center;flex:none}
.poignee{display:flex;justify-content:center;padding-top:10px}
.poignee span{width:40px;height:5px;border-radius:3px;background:#C9C4CE}

.srow{display:flex;align-items:center;gap:12px;padding:10px 14px;min-height:56px}
.srow.off{opacity:.55}
.tick{width:30px;height:30px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex:none;padding:0;background:#fff;border:1.5px solid #B9B3BF}
.srow .info{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.srow .info b{font-size:14px;font-weight:500}
.srow .info small{font-size:12px;line-height:1.35}
.chip{border:1px solid #B7791F;background:#FFF8EC;color:#7A4E0E;border-radius:20px;font-weight:600;font-size:12px;padding:5px 10px;min-height:30px;align-self:flex-start}

.toast{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(90px + env(safe-area-inset-bottom,0px));background:var(--encre);color:#fff;padding:11px 16px;border-radius:10px;font-size:14px;z-index:60;max-width:calc(100% - 32px)}
.vide{text-align:center;color:var(--doux);padding:18px;font-size:14px;line-height:1.5}
.connexion{max-width:380px;margin:12vh auto 0;display:flex;flex-direction:column;gap:14px}
.flamme{width:64px;height:64px;border-radius:15px}
@media (prefers-reduced-motion:no-preference){.feuille{animation:monte .22s ease-out}@keyframes monte{from{transform:translateY(24px);opacity:.6}to{transform:none;opacity:1}}}
.trim{border:1px solid var(--trait2);border-radius:10px;padding:10px 12px;display:flex;flex-direction:column;gap:6px}
.case-reg{display:flex;align-items:center;gap:10px;background:none;border:0;padding:6px 0;text-align:left;font-size:14px;min-height:40px;width:100%;color:var(--encre)}
.case-reg .boite{width:22px;height:22px;border-radius:6px;border:1.5px solid #B9B3BF;display:flex;align-items:center;justify-content:center;flex:none;background:#fff}
.case-reg.on .boite{background:var(--ok);border-color:var(--ok)}
