:root{
  --accent:#4f46e5; --accent-soft:color-mix(in srgb,var(--accent) 12%,transparent);
  --bg:#f4f6fb; --card:#fff; --text:#1e2433; --muted:#6b7385; --line:#e5e8f0;
  --ok:#059669; --ok-soft:#d1fae5; --warn:#d97706; --warn-soft:#fef3c7; --bad:#dc2626; --bad-soft:#fee2e2;
  --radius:14px; --shadow:0 1px 2px rgba(20,30,60,.05),0 4px 16px rgba(20,30,60,.06);
}
:root[data-theme="dark"]{
  --bg:#0f1320; --card:#171c2e; --text:#e8ebf5; --muted:#8b94ab; --line:#262d45;
  --ok:#34d399; --ok-soft:#06352a; --warn:#fbbf24; --warn-soft:#3b2a06; --bad:#f87171; --bad-soft:#3d1414;
  --shadow:0 1px 2px rgba(0,0,0,.3),0 4px 16px rgba(0,0,0,.25);
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{font-family:Inter,system-ui,sans-serif;background:var(--bg);color:var(--text);font-size:14px}
button,input,select{font:inherit;color:inherit}
.app{display:grid;grid-template-columns:340px 1fr;grid-template-rows:auto 1fr;height:100vh}
header{grid-column:1/-1;display:flex;align-items:center;gap:16px;padding:12px 24px;background:var(--card);border-bottom:1px solid var(--line)}
.brand{display:flex;align-items:center;gap:10px;font-weight:700;font-size:16px}
.logo{width:34px;height:34px;border-radius:10px;background:var(--accent);color:#fff;display:grid;place-items:center;font-weight:700}
.spacer{flex:1}
.kpis{display:flex;gap:12px}
.kpi{padding:6px 14px;border-radius:10px;background:var(--bg);min-width:130px}
.kpi small{display:block;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.04em}
.kpi b{font-size:16px}
.kpi.bad b{color:var(--bad)} .kpi.ok b{color:var(--ok)}
.btn{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border-radius:10px;border:1px solid var(--line);background:var(--card);cursor:pointer;font-weight:500;white-space:nowrap}
.btn:hover{border-color:var(--accent);color:var(--accent)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}
.btn.primary:hover{filter:brightness(1.1);color:#fff}
.btn.danger:hover{border-color:var(--bad);color:var(--bad)}
.btn.icon{padding:8px 10px}
.btn.sm{padding:5px 10px;font-size:12px}
/* list */
aside{display:flex;flex-direction:column;border-right:1px solid var(--line);background:var(--card);min-height:0}
.list-head{padding:16px;display:flex;flex-direction:column;gap:10px}
.search{position:relative}
.search input{width:100%;padding:9px 12px 9px 34px;border-radius:10px;border:1px solid var(--line);background:var(--bg);outline:none}
.search input:focus{border-color:var(--accent)}
.search span{position:absolute;left:11px;top:50%;transform:translateY(-50%);color:var(--muted)}
.filters{display:flex;gap:6px;flex-wrap:wrap}
.chip{padding:4px 11px;border-radius:99px;border:1px solid var(--line);background:transparent;cursor:pointer;font-size:12px;color:var(--muted)}
.chip.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent);font-weight:600}
.items{overflow:auto;flex:1;padding:0 10px 10px}
.item{display:grid;grid-template-columns:1fr auto;gap:2px 8px;padding:11px 12px;border-radius:12px;cursor:pointer;border:1px solid transparent}
.item:hover{background:var(--bg)}
.item.sel{background:var(--accent-soft);border-color:var(--accent)}
.item .n{font-weight:600}.item .amt{font-weight:600;text-align:right}
.item .c{color:var(--muted);font-size:12px}
.badge{display:inline-block;padding:2px 9px;border-radius:99px;font-size:11px;font-weight:600}
.badge.ok{background:var(--ok-soft);color:var(--ok)} .badge.bad{background:var(--bad-soft);color:var(--bad)} .badge.warn{background:var(--warn-soft);color:var(--warn)}
.list-foot{padding:14px 16px;border-top:1px solid var(--line);display:grid;grid-template-columns:repeat(3,1fr);gap:8px;font-size:12px}
.list-foot small{display:block;color:var(--muted)}
/* main */
main{overflow:auto;padding:22px 28px;min-height:0}
.toolbar{display:flex;align-items:center;gap:8px;margin-bottom:18px;flex-wrap:wrap}
.toolbar h1{margin:0;font-size:22px}
.nav{display:flex;align-items:center;gap:4px;color:var(--muted)}
.grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-bottom:18px}
.card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:18px}
.card h3{margin:0 0 14px;font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.fields{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}
.fields .full{grid-column:1/-1}
label.f{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--muted);font-weight:500}
.in{padding:9px 11px;border-radius:10px;border:1px solid var(--line);background:var(--bg);outline:none;width:100%;color:var(--text)}
.in:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.in[readonly]{opacity:.8}
.in.num{text-align:right;font-variant-numeric:tabular-nums}
.totals{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}
.tot{padding:12px 14px;border-radius:12px;background:var(--bg)}
.tot small{display:block;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.04em;margin-bottom:3px}
.tot b{font-size:18px;font-variant-numeric:tabular-nums}
.tot.big{background:var(--accent);color:#fff}.tot.big small{color:#ffffffb3}
.tot.reste.ok b{color:var(--ok)}.tot.reste.bad b{color:var(--bad)}
.tabs{display:flex;gap:4px;margin-bottom:14px;border-bottom:1px solid var(--line)}
.tab{padding:9px 16px;border:0;background:none;cursor:pointer;color:var(--muted);font-weight:600;border-bottom:2px solid transparent;margin-bottom:-1px}
.tab.on{color:var(--accent);border-color:var(--accent)}
table{width:100%;border-collapse:collapse}
th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);padding:8px 6px;font-weight:600}
td{padding:4px 4px;border-top:1px solid var(--line)}
td .in{background:transparent;border-color:transparent;padding:8px 8px}
td .in:hover{border-color:var(--line)} td .in:focus{background:var(--bg);border-color:var(--accent)}
td.r,th.r{text-align:right}
.rowtot{font-weight:600;text-align:right;padding-right:10px;font-variant-numeric:tabular-nums;white-space:nowrap}
.x{border:0;background:none;color:var(--muted);cursor:pointer;font-size:16px;padding:4px 8px;border-radius:8px}
.x:hover{background:var(--bad-soft);color:var(--bad)}
.addrow{margin-top:10px}
.options{display:flex;gap:18px;flex-wrap:wrap;margin-top:14px;color:var(--muted);font-size:13px}
.options label{display:flex;gap:6px;align-items:center;cursor:pointer}
.empty{text-align:center;color:var(--muted);padding:60px 20px}
/* modal */
.modal{position:fixed;inset:0;background:#0008;display:none;place-items:center;z-index:50;padding:20px}
.modal.open{display:grid}
.box{background:var(--card);border-radius:var(--radius);width:min(520px,100%);max-height:90vh;overflow:auto;padding:22px;box-shadow:0 20px 60px #0006}
.box h2{margin:0 0 16px;font-size:18px}
.row{display:flex;gap:8px;align-items:center;margin-bottom:10px}
.toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%) translateY(80px);background:#111827;color:#fff;padding:10px 18px;border-radius:10px;opacity:0;transition:.3s;z-index:99}
.toast.show{transform:translateX(-50%);opacity:1}
#sheet{display:none}
@media (max-width:980px){
  .app{grid-template-columns:1fr;height:auto}
  aside{max-height:360px}.grid{grid-template-columns:1fr}.kpis{display:none}
}
@media print{
  body{background:#fff;color:#000}.app,.modal,.toast{display:none!important}
  #sheet{display:block;padding:30px;font-size:13px;color:#111}
  #sheet h1{margin:0;font-size:26px;color:var(--accent)}
  #sheet table{margin:24px 0}#sheet th{background:#f1f3f9;color:#333;padding:9px}
  #sheet td{padding:9px;border-top:1px solid #ddd}
  #sheet .tt{margin-left:auto;width:260px}#sheet .tt div{display:flex;justify-content:space-between;padding:5px 0}
  #sheet .tt .g{font-size:17px;font-weight:700;border-top:2px solid #111;margin-top:6px;padding-top:10px}
  .ph{display:flex;justify-content:space-between;align-items:flex-start;gap:30px}
}
.logo{width:34px;height:34px;border-radius:10px}
.user{display:flex;align-items:center;gap:8px;padding-left:6px;font-weight:500}
.avatar{width:32px;height:32px;border-radius:50%;background:var(--accent-soft);color:var(--accent);display:grid;place-items:center;font-weight:700}
@media(max-width:700px){.user span:last-child{display:none}}

/* ===== Style moderne & personnalisable ===== */
:root{--font:Inter;--rs:calc(var(--radius)*.7)}
body,button,input,select{font-family:var(--font),system-ui,sans-serif}
body{background:radial-gradient(1200px 500px at 85% -10%,color-mix(in srgb,var(--accent) 10%,transparent),transparent),var(--bg)}
header{background:color-mix(in srgb,var(--card) 85%,transparent);backdrop-filter:blur(12px);box-shadow:0 1px 0 var(--line)}
.logo{object-fit:contain;border-radius:var(--rs)}
.card{border:1px solid var(--line);box-shadow:var(--shadow);transition:box-shadow .2s}
.card:hover{box-shadow:0 2px 4px rgba(20,30,60,.06),0 10px 30px rgba(20,30,60,.09)}
.btn,.in,.chip,.search input{border-radius:var(--rs)}
.btn{transition:all .15s}
.btn:active{transform:scale(.97)}
.btn.primary{background:linear-gradient(135deg,var(--accent),color-mix(in srgb,var(--accent) 70%,#a855f7));border:0;box-shadow:0 4px 14px color-mix(in srgb,var(--accent) 35%,transparent)}
.kpi{border-radius:var(--rs);border-left:3px solid var(--accent);background:var(--card);box-shadow:var(--shadow)}
.kpi.ok{border-left-color:var(--ok)}.kpi.bad{border-left-color:var(--bad)}
.item{border-radius:var(--rs);transition:background .15s}
.item.sel{box-shadow:inset 3px 0 0 var(--accent)}
.tot{border-radius:var(--rs)}
.tot.big{background:linear-gradient(135deg,var(--accent),color-mix(in srgb,var(--accent) 60%,#a855f7));box-shadow:0 8px 22px color-mix(in srgb,var(--accent) 30%,transparent)}
.box{border-radius:calc(var(--radius)*1.2)}
.badge{letter-spacing:.02em}
.tab.on{box-shadow:0 2px 0 var(--accent)}
.presets{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px}
.presets button{width:30px;height:30px;border-radius:50%;border:3px solid var(--card);box-shadow:0 0 0 1px var(--line);cursor:pointer;transition:transform .15s}
.presets button:hover{transform:scale(1.15)}
.presets button.on{box-shadow:0 0 0 2px var(--text)}
[data-density="compact"] .card{padding:12px}
[data-density="compact"] td .in{padding:4px 8px}
[data-density="compact"] .item{padding:7px 10px}
[data-density="compact"] main{padding:14px 20px}
[data-density="compact"] .in{padding:6px 9px}

/* ===== Facture imprimable (aperçu + impression) ===== */
textarea.in{resize:vertical;font-family:inherit}
.paper{background:#fff;color:#1a1f2b;font-size:13px;line-height:1.45;padding:34px 38px;border-radius:6px;box-shadow:0 2px 14px rgba(0,0,0,.12);text-align:left}
.paper h4{margin:0 0 6px;font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--accent)}
.p-head{display:flex;justify-content:space-between;align-items:flex-start;gap:24px;padding-bottom:18px;border-bottom:3px solid var(--accent)}
.p-brand{display:flex;gap:12px;align-items:center}
.p-brand img{height:52px;max-width:130px;object-fit:contain}
.p-name{font-size:22px;font-weight:700;color:var(--accent)}
.p-tag{font-size:11px;color:#667}
.p-title{text-align:right}
.p-title h1{margin:0;font-size:26px;letter-spacing:.06em}
.p-num{font-size:15px;font-weight:600;color:var(--accent);margin:2px 0}
.p-parties{display:grid;grid-template-columns:1fr 1fr;gap:30px;margin:22px 0 16px}
.p-meta{display:grid;grid-template-columns:repeat(4,1fr);background:#f3f6f9;border-radius:6px}
.p-meta div{padding:9px 12px;border-right:1px solid #fff}.p-meta div:last-child{border:0}
.p-meta small{display:block;font-size:9px;letter-spacing:.08em;text-transform:uppercase;color:#667;margin-bottom:2px}
.p-table{width:100%;border-collapse:collapse;margin:20px 0 14px}
.p-table th{background:var(--accent);color:#fff;text-align:left;font-size:10px;letter-spacing:.06em;text-transform:uppercase;padding:8px 10px}
.p-table td{padding:9px 10px;border-bottom:1px solid #e3e8ee;vertical-align:top}
.p-table .r,.p-table th.r{text-align:right;font-variant-numeric:tabular-nums}
.p-table .cd{color:#667}
.p-bottom{display:grid;grid-template-columns:1.2fr 1fr;gap:30px;align-items:start}
.p-pay{font-size:12px;border:1px solid #e3e8ee;border-radius:6px;padding:12px 14px}
.p-pay p{margin:10px 0 0;color:#556;font-size:11px}
.p-tot div{display:flex;justify-content:space-between;padding:5px 2px;border-bottom:1px solid #eef1f4}
.p-tot .g{background:var(--accent);color:#fff;font-weight:700;font-size:15px;padding:9px 10px;border-radius:5px;margin:6px 0;border:0}
.p-tot .due{font-weight:700;color:#b91c1c}.p-tot .ok{font-weight:700;color:#047857}
.p-foot{margin-top:30px;padding-top:10px;border-top:1px solid #e3e8ee;text-align:center;font-size:10.5px;color:#778}
@media print{
  @page{size:A4;margin:12mm}
  #sheet{padding:0!important}
  .paper{box-shadow:none;border-radius:0;padding:0}
  .paper *{-webkit-print-color-adjust:exact;print-color-adjust:exact}
}

/* ===== Couleurs Logisoft + pied de page façon TeamViewer ===== */
.paper h4,.p-num{color:var(--inv2,var(--accent))}
.p-foot{display:grid;grid-template-columns:1.3fr 1fr 1.4fr 1fr;gap:18px;margin-top:30px;padding-top:12px;border-top:2px solid var(--accent);font-size:9.5px;color:#556;line-height:1.5;text-align:left;border-bottom:0}
.p-foot b{display:block;color:#222;font-size:9px;letter-spacing:.05em;text-transform:uppercase;margin-bottom:2px}
.p-legal{margin-top:8px;text-align:center;font-size:9.5px;color:#778}
@media print{
  .paper{padding-bottom:34mm}
  .p-foot{position:fixed;left:0;right:0;bottom:0;margin:0;background:#fff}
  .p-legal{position:fixed;left:0;right:0;bottom:-6mm}
}

/* Notes (période / lieu) et totaux alignés à droite */
.p-notes{margin:4px 0 14px;font-size:12.5px;color:#333}
.p-notes div{margin:2px 0}
.p-bottom{display:flex;justify-content:flex-end}
.p-bottom .p-tot{width:48%}
