*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{
  --bg:#0d1117;--surface:#111827;--s2:#1a2235;--s3:#253344;--border:#1e2d45;
  --gold:#e8b84b;--green:#34d399;--red:#f87171;--orange:#fb923c;--blue:#60a5fa;
  --text:#e2e8f0;--dim:#7b8aa0;--mid:#94a3b8;
  --r:14px;--rs:9px;
  --font:'DM Sans',system-ui,sans-serif;--serif:'Playfair Display',Georgia,serif;
}
html{-webkit-text-size-adjust:100%}
body{font-family:var(--font);background:var(--bg);color:var(--text);min-height:100vh;padding-bottom:env(safe-area-inset-bottom)}
button,input,select{font-family:inherit}
button{cursor:pointer}

/* BARRE DU HAUT */
#topbar{background:linear-gradient(135deg,#1a1f2e,#16213e);border-bottom:1px solid var(--border);padding:12px 28px;padding-top:max(12px,env(safe-area-inset-top));display:flex;justify-content:space-between;align-items:center;gap:12px;position:sticky;top:0;z-index:50;flex-wrap:wrap}
.brand{display:flex;flex-direction:column}
.app-title{font-family:var(--serif);font-size:20px;color:var(--gold)}
.app-sub{font-size:10px;color:var(--dim);margin-top:1px;display:flex;gap:6px;align-items:center}
.pill{display:inline-flex;align-items:center;gap:4px;border-radius:20px;padding:1px 7px;font-size:10px;border:1px solid var(--border);color:var(--mid)}
.pill.ok{color:var(--green);border-color:#34d39944}.pill.warn{color:var(--orange);border-color:#fb923c55}.pill.err{color:var(--red);border-color:#f8717155}
.actions{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
#tab-bar{display:flex;gap:6px}
.tab-btn{background:#1e2a3a;color:var(--mid);border:none;border-radius:8px;padding:7px 12px;font-size:12px;font-weight:500;transition:all .15s;white-space:nowrap;position:relative}
.tab-btn:hover{background:var(--s3);color:var(--text)}
.tab-btn.active{background:var(--gold);color:#0d1117;font-weight:700}
.badge{position:absolute;top:-5px;right:-5px;background:var(--red);color:#fff;border-radius:10px;font-size:9px;font-weight:700;padding:1px 5px;min-width:16px;text-align:center}
.sep{width:1px;height:24px;background:var(--border);margin:0 2px}
.btn-sync{background:#1a2e4a;border:1px solid #60a5fa66;border-radius:8px;color:var(--blue);padding:7px 12px;font-size:12px;font-weight:700;transition:all .15s;white-space:nowrap}
.btn-sync:hover{background:#1e3a5c}
.btn-sync[disabled]{opacity:.55;cursor:wait}
.btn-xls{background:#1a3a1a;border:1px solid #34d39966;border-radius:8px;color:var(--green);padding:7px 12px;font-size:12px;font-weight:700;white-space:nowrap}
.btn-xls:hover{background:#1e4a1e}

/* MOIS */
#month-bar{background:var(--surface);border-bottom:1px solid var(--border);padding:9px 28px;display:flex;gap:5px;align-items:center;overflow-x:auto;scrollbar-width:none}
#month-bar::-webkit-scrollbar{display:none}
.year-nav{display:flex;align-items:center;gap:2px;margin-right:8px;flex-shrink:0}
.year-nav button{background:none;border:none;color:var(--mid);font-size:16px;padding:0 6px}
.year-nav strong{color:var(--gold);font-size:13px}
.m-btn{background:var(--s2);color:var(--mid);border:1px solid var(--border);border-radius:6px;padding:4px 10px;font-size:11px;transition:all .15s;position:relative;flex-shrink:0}
.m-btn:hover{background:var(--s3)}
.m-btn.active{background:var(--gold);color:#0d1117;font-weight:700;border-color:var(--gold)}
.m-btn.has-ann{border-color:#f8717155}
.dot{position:absolute;top:-3px;right:-3px;background:var(--red);border-radius:50%;width:6px;height:6px;display:block}
.m-btn .real{position:absolute;bottom:-3px;left:50%;transform:translateX(-50%);width:4px;height:4px;border-radius:50%;background:var(--blue)}

/* VUES */
#content{padding:20px 28px;max-width:1400px;margin:0 auto}
.view{display:none}.view.active{display:block}
.banner{border-radius:var(--rs);padding:10px 14px;margin-bottom:14px;font-size:12px;line-height:1.5;display:flex;gap:10px;align-items:center;justify-content:space-between;flex-wrap:wrap}
.banner.info{background:#0f1f33;border:1px solid #60a5fa44;color:#bcd6f5}
.banner.warn{background:#2d1a0e;border:1px solid #fb923c55;color:#fcd3b0}
.banner button{background:none;border:1px solid currentColor;color:inherit;border-radius:6px;padding:4px 10px;font-size:11px;font-weight:600}

/* CARTES */
.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:16px 18px;margin-bottom:14px}
.ct{font-size:13px;font-weight:700;color:var(--gold);margin-bottom:12px;display:flex;justify-content:space-between;align-items:center;gap:8px}
.ct span{font-size:13px;color:var(--mid);font-weight:400}
.hint{font-size:11px;color:var(--dim);line-height:1.6}
code{color:var(--mid);background:var(--s2);padding:1px 5px;border-radius:4px;font-size:11px}

.g2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.g4{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:14px}

.kpi{border-radius:var(--r);padding:14px 16px}
.ki{font-size:20px}.kl{font-size:10px;color:var(--dim);margin:5px 0 2px;letter-spacing:.5px;text-transform:uppercase}
.kv{font-size:22px;font-weight:700;font-family:var(--serif)}
.ks{font-size:10px;color:var(--dim);margin-top:2px}

/* SAISIE */
.ig{margin-bottom:9px}
.il{font-size:11px;color:var(--dim);margin-bottom:3px;display:flex;justify-content:space-between;gap:6px}
.il .real-tag{color:var(--blue);font-size:10px}
.iw{display:flex;align-items:center;background:var(--s2);border:1px solid var(--border);border-radius:var(--rs);overflow:hidden;transition:border-color .2s}
.iw:focus-within{border-color:var(--gold)}
.iw input{flex:1;min-width:0;background:transparent;border:none;color:var(--text);padding:8px 11px;font-size:14px;outline:none}
.iw input[disabled]{opacity:.6}
.iw .sf{color:var(--dim);padding-right:11px;font-size:12px}
.ip{width:100%;background:var(--s2);border:1px solid var(--border);border-radius:var(--rs);color:var(--text);padding:8px 11px;font-size:13px;outline:none}
.ip:focus{border-color:var(--gold)}
select.ip{cursor:pointer}
input[type=number]{-moz-appearance:textfield}

.btn-gold{background:var(--gold);color:#0d1117;border:none;border-radius:var(--rs);padding:9px 16px;font-size:13px;font-weight:700}
.btn-add{background:var(--green);color:#0d1117;border:none;border-radius:var(--rs);padding:7px 13px;font-weight:700;font-size:13px}
.btn-ghost{background:transparent;border:1px solid var(--border);border-radius:var(--rs);color:var(--mid);padding:8px 12px;font-size:12px}
.btn-ghost:hover{background:var(--s2);color:var(--text)}
.btn-del{background:none;border:none;color:var(--dim);font-size:13px;padding:2px 5px}
.btn-del:hover{color:var(--red)}
.btn-big{width:100%;border-radius:var(--rs);padding:11px;font-size:13px;font-weight:700;margin-bottom:8px}
.btn-csv{background:#1a2a3c;border:1px solid #2980b944;color:var(--blue)}
.btn-csv:hover{background:#1e3a55}
.btn-odoo{background:#2a1a33;border:1px solid #a78bfa55;color:#c4b5fd}
.btn-odoo:hover{background:#352042}

.alert{border-radius:var(--rs);padding:11px 15px;margin-bottom:12px;display:flex;gap:10px;align-items:flex-start}
.alert.danger{background:#2d0e0e;border:1px solid #f8717155}
.alert.warn{background:#2d1a0e;border:1px solid #fb923c55}
.at{font-weight:700;font-size:12px;margin-bottom:4px}
.danger .at{color:var(--red)}.warn .at{color:var(--orange)}
.chips{display:flex;flex-wrap:wrap;gap:5px;margin-top:3px}
.chip{border-radius:20px;padding:2px 9px;font-size:11px;font-weight:600;color:#fff}

.barchart{display:flex;align-items:flex-end;gap:5px;height:140px}
.bc{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;cursor:pointer;min-width:0}
.bc .bt{font-size:9px;margin-bottom:2px;font-weight:600;white-space:nowrap}
.bc .bb{width:100%;border-radius:4px 4px 0 0;min-height:3px;transition:height .4s}
.bc .bl{font-size:9px;margin-top:3px}

.mb-bg{background:var(--s2);border-radius:4px;height:5px;margin-top:2px}
.mb-fill{height:5px;border-radius:4px}

.row{display:flex;align-items:center;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--s2);gap:8px}
.row:last-child{border-bottom:none;padding-bottom:0}
.row:first-child{padding-top:0}

/* TRANSACTIONS */
.tx-tools{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:10px;align-items:center}
.tx-tools .ip{flex:1;min-width:160px}
.tx-list{display:flex;flex-direction:column}
.tx{display:grid;grid-template-columns:62px 1fr 110px 210px 28px;gap:10px;align-items:center;padding:9px 4px;border-bottom:1px solid var(--s2);font-size:12px}
.tx:last-child{border-bottom:none}
.tx-date{color:var(--dim);font-variant-numeric:tabular-nums}
.tx-lib{min-width:0}
.tx-lib b{display:block;color:var(--text);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tx-lib small{color:var(--dim);display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tx-amt{text-align:right;font-weight:700;font-variant-numeric:tabular-nums}
.tx-amt.in{color:var(--green)}.tx-amt.out{color:var(--text)}
.tx select{padding:6px 8px;font-size:12px}
.tx.uncat select{border-color:var(--orange)}
.src{font-size:9px;border-radius:4px;padding:0 4px;margin-right:4px;border:1px solid var(--border);color:var(--mid);vertical-align:middle}
.src.odoo{color:#c4b5fd;border-color:#a78bfa55}
.dup{color:var(--orange);font-size:10px}
.empty{color:var(--dim);font-size:12px;padding:12px 0}

/* RÈGLES */
.rg{display:grid;grid-template-columns:1fr 1fr;gap:7px;max-height:480px;overflow-y:auto;padding-right:4px}
.rc{background:var(--s2);border:1px solid var(--border);border-radius:var(--rs);padding:10px 12px;display:flex;align-items:flex-start;gap:8px}
.kw-tag{background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:1px 6px;font-size:10px;color:var(--mid);display:inline-flex;gap:4px;align-items:center}
.kw-tag button{background:none;border:none;color:var(--dim);font-size:10px;padding:0}
.kw-tag button:hover{color:var(--red)}
.kws{display:flex;flex-wrap:wrap;gap:3px;margin-bottom:3px}
.arf{background:#1a1a0e;border:1px solid #e8b84b33;border-radius:var(--r);padding:16px;margin-bottom:14px}
.cat-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:5px;margin-bottom:8px}
.cat-btn{background:var(--s2);border:1px solid var(--border);border-radius:8px;padding:7px 5px;font-size:11px;color:var(--mid);text-align:center;transition:all .15s}
.cat-btn:hover{background:var(--s3);color:var(--text)}
.cat-btn.sel{border-color:var(--gold);background:#2a2510;color:var(--gold);font-weight:600}

/* MODALE */
.overlay{position:fixed;inset:0;background:#000c;z-index:200;display:none;align-items:center;justify-content:center;padding:16px}
.overlay.open{display:flex}
.modal{background:var(--surface);border:1px solid var(--border);border-radius:18px;padding:22px;width:520px;max-width:100%;max-height:90vh;overflow-y:auto}
.mh{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px;gap:8px}
.mh .t{font-size:16px;font-weight:700;color:var(--gold)}
.prog{font-size:11px;color:var(--dim);background:var(--s2);padding:4px 10px;border-radius:20px;white-space:nowrap}
.txbox{background:var(--s2);border-radius:10px;padding:12px 14px;margin-bottom:14px}
.txbox .l{font-size:14px;font-weight:700;margin-bottom:4px;word-break:break-word}
.txbox .p{font-size:12px;color:var(--mid);margin-bottom:6px}
.txbox .m{display:flex;gap:16px;font-size:12px;color:var(--dim)}
.kwbox{background:#1a1a0e;border:1px solid #e8b84b33;border-radius:9px;padding:11px 13px;margin-bottom:14px}
.kwbox .lbl{font-size:11px;color:var(--gold);margin-bottom:5px}
.sec{font-size:10px;color:var(--dim);letter-spacing:1px;text-transform:uppercase;margin:10px 0 6px}
.choice-grid{display:grid;grid-template-columns:1fr 1fr;gap:5px}
.choice{background:var(--s2);border:1px solid var(--border);border-radius:9px;color:var(--mid);padding:9px 8px;font-size:12px;text-align:left}
.choice:hover{background:var(--s3);color:var(--text)}
.choice.fixed{width:100%;background:#1e0a0a;border-color:#f8717133;color:var(--red)}
.choice.rev{background:#0d2218;border-color:#34d39933;color:var(--green)}
.mfoot{display:flex;gap:6px;margin-top:12px}
.mfoot button{flex:1}

/* SOLDE */
.sh{border-radius:var(--r);display:flex;flex-direction:column;justify-content:center;align-items:center;padding:24px;text-align:center;height:100%;min-height:160px}

/* TOAST */
#toast{position:fixed;left:50%;bottom:max(20px,env(safe-area-inset-bottom));transform:translateX(-50%) translateY(120px);background:var(--s2);border:1px solid var(--border);color:var(--text);border-radius:10px;padding:10px 16px;font-size:13px;z-index:300;transition:transform .25s;max-width:calc(100% - 32px);box-shadow:0 8px 24px #0008}
#toast.show{transform:translateX(-50%) translateY(0)}
#toast.err{border-color:#f8717188}

::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:var(--bg)}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}

/* TABLETTE */
@media (max-width:1000px){
  #topbar,#month-bar{padding-left:16px;padding-right:16px}
  #content{padding:16px}
  .g4{grid-template-columns:repeat(2,1fr)}
  .tx-date{grid-area:d}.tx-lib{grid-area:l}.tx-amt{grid-area:a}.tx select{grid-area:s}.tx .btn-del{grid-area:x;justify-self:end}
  .tx{grid-template-columns:56px 1fr 90px 28px;grid-template-areas:"d l a a" "s s s x"}
}
/* TÉLÉPHONE */
@media (max-width:700px){
  #topbar{position:static}
  .actions{width:100%}
  #tab-bar{width:100%;overflow-x:auto;scrollbar-width:none;padding-top:4px}
  #tab-bar::-webkit-scrollbar{display:none}
  .sep{display:none}
  .btn-sync,.btn-xls{flex:1}
  #month-bar{position:sticky;top:0;z-index:40}
  .g2{grid-template-columns:1fr}
  .g4{gap:8px}
  .kpi{padding:11px 12px}.kv{font-size:18px}
  .rg{grid-template-columns:1fr;max-height:none}
  .tx-tools .ip:first-child{flex-basis:100%}
  .tx-tools .ip,.tx-tools .btn-ghost{flex:1}
  .cat-grid{grid-template-columns:repeat(2,1fr)}
  .tx-lib b{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
  .choice-grid{grid-template-columns:1fr}
  .modal{padding:18px;border-radius:14px}
  .bc .bt{font-size:7px}
}
