/* ============ Identité & base ============ */
@import url('https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,600;9..144,700&family=Public+Sans:wght@400;500;600;700&display=swap');
:root{
  --ink:#15222F; --paper:#F5F6F3; --card:#FFFFFF; --line:#DFE3DE;
  --woad:#2F5D8C; --woad-deep:#26496F; --woad-soft:#E4EBF4; --dim:#66707A;
  --ok:#33714B; --ok-soft:#E4F0E8; --warn:#A97416; --warn-soft:#F7EEDC;
  --alert:#B23A2C; --alert-soft:#F8E7E3;
}
*{box-sizing:border-box; margin:0; padding:0}
body{font-family:'Public Sans',system-ui,sans-serif; background:var(--paper); color:var(--ink); font-size:14px; line-height:1.45}
h1,h2,h3,.fr{font-family:'Fraunces',serif}
.logo{font-family:'Fraunces',serif; font-weight:700; font-size:19px}
.logo span{color:var(--woad)}
.dim{color:var(--dim)}

/* ============ Page de connexion ============ */
.login-body{min-height:100vh; display:flex; align-items:center; justify-content:center; padding:24px;
  background:linear-gradient(180deg,#F5F6F3 0%, #E4EBF4 100%)}
.login-card{background:var(--card); border:1px solid var(--line); border-radius:16px; padding:34px 32px;
  width:min(420px,100%); box-shadow:0 24px 60px rgba(21,34,47,.12)}
.login-card h1{font-size:23px; margin:16px 0 6px}
.login-sub{color:var(--dim); font-size:13.5px; margin-bottom:18px}
.login-card label{display:block; font-size:12.5px; font-weight:700; margin:14px 0 6px}
.login-card input{width:100%; font:inherit; padding:11px 13px; border:1px solid var(--line); border-radius:9px}
.login-card input:focus{outline:2px solid var(--woad-soft); border-color:var(--woad)}
.login-card button{width:100%; margin-top:20px; font:inherit; font-weight:700; background:var(--woad);
  color:#fff; border:none; padding:13px; border-radius:10px; cursor:pointer}
.login-card button:hover{background:var(--woad-deep)}
.login-err{background:var(--alert-soft); color:var(--alert); border:1px solid var(--alert);
  border-radius:9px; padding:10px 12px; font-weight:600; font-size:13px; margin-bottom:4px}
.login-note{margin-top:18px; font-size:12px; color:var(--dim)}

/* ============ Barre d'application ============ */
.topbar{position:sticky; top:0; z-index:40; background:rgba(245,246,243,.9); backdrop-filter:blur(8px);
  border-bottom:1px solid var(--line); padding:12px clamp(14px,4vw,40px);
  display:flex; align-items:center; gap:16px; flex-wrap:wrap}
.topbar .commune{font-weight:700; font-size:15px}
.topbar .who{font-size:12.5px; color:var(--dim)}
.topbar form{margin-left:auto}
.btn{font:inherit; font-weight:600; padding:9px 15px; border-radius:8px; border:1px solid var(--line);
  background:var(--card); color:var(--ink); cursor:pointer}
.btn:hover{border-color:var(--woad)}
.btn.primary{background:var(--woad); border-color:var(--woad); color:#fff}
.btn.primary:hover{background:var(--woad-deep)}

/* ============ Tableau de bord ============ */
.page{padding:22px clamp(14px,4vw,40px) 48px; max-width:1180px; margin:0 auto}
.eyebrow{font-size:11.5px; text-transform:uppercase; letter-spacing:.12em; color:var(--woad); font-weight:600}
.page h1{font-weight:700; font-size:clamp(24px,3vw,32px); letter-spacing:-.01em; margin-top:2px}
.importbar{margin-top:16px; border:1.5px dashed var(--woad); background:var(--woad-soft); border-radius:12px;
  padding:13px 18px; display:flex; align-items:center; gap:14px; flex-wrap:wrap}
.importbar .txt{font-size:13.5px; color:var(--woad-deep)}
.importbar .txt b{color:var(--ink)}
#import-status{font-size:13px; font-weight:600}
#import-status.ok{color:var(--ok)} #import-status.ko{color:var(--alert)}
.empty{margin-top:24px; background:var(--card); border:1px solid var(--line); border-radius:12px;
  padding:26px; text-align:center; color:var(--dim)}

.yearline{margin-top:20px}
.yearrail{position:relative; height:10px; background:var(--card); border:1px solid var(--line); border-radius:6px}
.yearfill{height:100%; background:var(--woad-soft); border-radius:5px 0 0 5px}
.yeartick{position:absolute; top:-4px; bottom:-4px; width:2px; background:var(--ink); border-radius:1px}
.month{position:absolute; top:14px; font-size:9.5px; color:var(--dim); transform:translateX(2px)}
.yearlabel{margin-top:22px; font-size:13px; color:var(--dim)}
.yearlabel strong{color:var(--ink)}

.kpis{display:grid; grid-template-columns:repeat(auto-fit,minmax(215px,1fr)); gap:12px; margin-top:18px}
.kpi{background:var(--card); border:1px solid var(--line); border-radius:12px; padding:14px 16px}
.kpi .t{font-size:12px; font-weight:600; text-transform:uppercase; letter-spacing:.06em; color:var(--dim)}
.kpi .p{font-size:30px; font-weight:700; font-variant-numeric:tabular-nums; margin:4px 0 8px}
.kpi .s{font-size:12.5px; margin-top:8px; font-variant-numeric:tabular-nums}
.foot-note{font-size:12px; color:var(--dim); margin:10px 2px 0}

.alerts{margin-top:26px}
.alerts>h2{font-size:20px}
.alerts .sub{font-size:13px; color:var(--dim); margin:4px 0 14px}
.fam{background:var(--card); border:1px solid var(--line); border-radius:12px; padding:14px 18px; margin-bottom:12px}
.fam-head{display:flex; align-items:baseline; gap:10px; flex-wrap:wrap; margin-bottom:4px}
.fam-badge{font-size:10px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; padding:3px 8px; border-radius:5px}
.b-alert{background:var(--alert-soft); color:var(--alert)} .b-warn{background:var(--warn-soft); color:var(--warn)}
.b-ok{background:var(--ok-soft); color:var(--ok)}
.fam-desc{font-size:12.5px; color:var(--dim)}
.al{display:flex; gap:10px; align-items:baseline; padding:7px 0 7px 2px; border-top:1px dashed var(--line); cursor:pointer}
.al:first-of-type{border-top:none}
.al:hover .al-line{text-decoration:underline}
.al .dot{width:8px; height:8px; border-radius:50%; flex:none; transform:translateY(-1px)}
.d-alert{background:var(--alert)} .d-warn{background:var(--warn)} .d-ok{background:var(--ok)}
.al-body{font-size:13.5px}
.al-line{font-weight:700}
.al-note{display:block; font-size:12.5px; color:var(--dim); margin-top:1px}

.controls{display:flex; gap:16px; align-items:center; margin:26px 0 4px; flex-wrap:wrap}
.search{font:inherit; padding:9px 13px; border:1px solid var(--line); border-radius:8px; background:var(--card); min-width:min(320px,100%)}
.search:focus{outline:2px solid var(--woad-soft); border-color:var(--woad)}
.check{display:flex; gap:7px; align-items:center; font-size:13px; color:var(--dim); cursor:pointer; user-select:none}

.section-t{margin-top:22px}
.sec-head{display:flex; justify-content:space-between; align-items:baseline; gap:14px; flex-wrap:wrap; margin-bottom:8px}
.sec-head h2{font-size:19px}
.sec-total{font-size:13px; color:var(--dim); font-variant-numeric:tabular-nums}
.sec-total strong{color:var(--ink); font-size:14px}
.tbl{background:var(--card); border:1px solid var(--line); border-radius:12px; overflow-x:auto}
.tr{display:grid; grid-template-columns:86px minmax(190px,1.5fr) 122px 122px 82px minmax(120px,1fr) 122px;
  align-items:center; min-width:880px; border-top:1px solid var(--line)}
.tr:first-child{border-top:none}
.thead{font-size:11px; text-transform:uppercase; letter-spacing:.07em; color:var(--dim); font-weight:600; background:#FBFCFA}
.td{padding:9px 12px}
.td.code{font-weight:600; font-variant-numeric:tabular-nums; white-space:nowrap}
.td.num{text-align:right; font-variant-numeric:tabular-nums; white-space:nowrap}
.td.num.neg{color:var(--alert); font-weight:600}
.td.pct{text-align:right; font-variant-numeric:tabular-nums; font-weight:600; white-space:nowrap}
.chapr{cursor:pointer; background:#FBFCFA}
.chapr:hover{background:var(--woad-soft)}
.chapr .td.label{font-weight:600}
.chapr.ordre{color:var(--dim)}
.artr .td.code{padding-left:30px; font-weight:500; color:var(--dim)}
.caret{display:inline-block; margin-right:7px; color:var(--woad); transition:transform .15s}
.caret.open{transform:rotate(90deg)}
.badge{font-size:10px; font-weight:700; text-transform:uppercase; letter-spacing:.05em; border-radius:5px; padding:2px 6px; margin-left:8px; vertical-align:1px}
.badge.ordre{background:#EEF0ED; color:var(--dim)}
.s-over{color:var(--alert)} .s-warn{color:var(--warn)} .s-good{color:var(--ok)} .s-empty{color:var(--dim)}
.gauge{position:relative; height:9px; background:#EDEFEA; border-radius:5px; min-width:100px}
.gfill{height:100%; border-radius:5px; background:var(--woad)}
.g-warn .gfill{background:var(--warn)} .g-over .gfill{background:var(--alert)} .g-good .gfill{background:var(--ok)}
.gtick{position:absolute; top:-3px; bottom:-3px; width:2px; background:var(--ink); opacity:.65; border-radius:1px}
.gover{position:absolute; right:-3px; top:-6px; color:var(--alert); font-size:11px; font-weight:700}
.flash{animation:flash 2.2s ease-out}
@keyframes flash{0%{background:var(--warn-soft)} 100%{background:transparent}}
.metho{margin-top:22px; font-size:12px; color:var(--dim)}

/* ============ Portail administrateur (v1.1) ============ */
.adm-row{display:grid; grid-template-columns:1.4fr 130px 110px 110px 96px; align-items:center;
  min-width:640px; border-top:1px solid var(--line); cursor:pointer}
.adm-row:first-child{border-top:none}
.adm-row:hover{background:var(--woad-soft)}
.adm-row.thead{cursor:default; background:#FBFCFA}
.adm-row.thead:hover{background:#FBFCFA}
.pill{display:inline-block; background:var(--woad-soft); color:var(--woad-deep); font-weight:700;
  font-size:11.5px; padding:2px 9px; border-radius:9px}
.nc-form{display:flex; gap:10px; flex-wrap:wrap; align-items:center}
.nc-form input{font:inherit; padding:9px 12px; border:1px solid var(--line); border-radius:8px}
.ed-toolbar{display:flex; gap:12px; flex-wrap:wrap; align-items:center; margin:14px 0}
.ed-toolbar input{font:inherit; padding:10px 13px; border:1px solid var(--line); border-radius:8px; min-width:min(300px,100%)}
#ed-status{font-size:13px; font-weight:600}
#ed-status.ok{color:var(--ok)} #ed-status.ko{color:var(--alert)}
.ed-sec{margin-top:18px}
.ed-sec-head{display:flex; justify-content:space-between; align-items:baseline; gap:12px; flex-wrap:wrap; margin-bottom:6px}
.ed-sec-head h3{font-size:16.5px; font-family:'Fraunces'}
.ed-sec-head .tot{font-size:13px; color:var(--dim); font-variant-numeric:tabular-nums}
.ed-sec-head .tot b{color:var(--ink)}
.ed-tbl{background:var(--card); border:1px solid var(--line); border-radius:12px; overflow-x:auto; padding:4px 0}
.ed-row{display:grid; grid-template-columns:92px 120px 1fr 150px 38px; gap:6px; align-items:center;
  min-width:640px; padding:3px 10px}
.ed-row input{font:inherit; font-size:13px; padding:7px 9px; border:1px solid var(--line); border-radius:7px; width:100%}
.ed-row input:focus{outline:2px solid var(--woad-soft); border-color:var(--woad)}
.ed-row input.num{text-align:right; font-variant-numeric:tabular-nums}
.ed-row .del{border:none; background:none; color:var(--dim); font-size:16px; cursor:pointer; border-radius:6px}
.ed-row .del:hover{color:var(--alert); background:var(--alert-soft)}
.ed-head{display:grid; grid-template-columns:92px 120px 1fr 150px 38px; gap:6px; min-width:640px;
  padding:6px 10px 2px; font-size:10.5px; text-transform:uppercase; letter-spacing:.07em; color:var(--dim); font-weight:700}
.chap-div{min-width:640px; padding:8px 10px 3px; font-size:11.5px; font-weight:700; color:var(--woad-deep);
  border-top:1px dashed var(--line); margin-top:4px}
.chap-div .ordre-tag{color:var(--dim); font-weight:600}
.btn.small{padding:7px 12px; font-size:13px}
.ver-item,.cpt-item{display:flex; gap:12px; align-items:center; padding:8px 2px; border-top:1px dashed var(--line); font-size:13.5px; flex-wrap:wrap}
.ver-item:first-child,.cpt-item:first-child{border-top:none}
.ver-item .d{color:var(--dim); font-size:12.5px}
.mt{margin-top:22px}
