:root{
  --bg:#faf9f5; --surf:#ffffff; --surf1:#f4f2ec; --bd:#e3e0d6; --bd2:#c9c6bb;
  --tx:#1f1e1b; --tx2:#6b6a63; --tx3:#94938b;
  --ok-bg:#e1f5ee; --ok-tx:#0f6e56; --ok-bd:#5dcaa5;
  --neg:#a32d2d; --pos:#0f6e56;
  --warn-bg:#faeeda; --warn-tx:#854f0b;
  --red-bg:#fceceb; --red-tx:#a32d2d;
  --acc-bg:#e6f1fb; --acc-tx:#0c447c; --acc-bd:#85b7eb;
  --r:8px;
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--tx);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.5}
h1{font-size:22px;font-weight:500;margin:0 0 16px}
h2{font-size:16px;font-weight:500;margin:0 0 12px}
a{color:var(--acc-tx);text-decoration:none}
.muted{color:var(--tx2)} .small{font-size:12px} .mono{font-family:ui-monospace,Menlo,monospace;font-size:12px}
.mt{margin-top:20px}
.r{text-align:right} .pos{color:var(--pos)} .neg{color:var(--neg)}

.nav{display:flex;align-items:center;gap:6px;background:var(--surf);border-bottom:1px solid var(--bd);
  padding:10px 20px;position:sticky;top:0;z-index:5}
.nav .brand{font-weight:500;margin-right:14px}
.nav a{padding:6px 10px;border-radius:var(--r);color:var(--tx2)}
.nav a:hover{background:var(--surf1)}
.nav a.on{background:var(--surf1);color:var(--tx)}
.nav .spacer{flex:1}
.nav .who{color:var(--tx3);font-size:13px}
.nav .logout{color:var(--neg)}

.wrap{max-width:1440px;margin:0 auto;padding:24px 20px 60px}
.flash{background:var(--acc-bg);color:var(--acc-tx);border-radius:var(--r);padding:10px 14px;margin-bottom:16px;font-size:13px}

.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin-bottom:16px}
.card{background:var(--surf1);border-radius:var(--r);padding:16px}
.card .k{font-size:13px;color:var(--tx2)} .card .v{font-size:24px;font-weight:500;margin:2px 0} .card .h{font-size:11px;color:var(--tx3)}
.card.reale{background:var(--ok-bg)} .card.reale .k,.card.reale .v,.card.reale .h{color:var(--ok-tx)}
.card.prev-card{background:var(--acc-bg)} .card.prev-card .k,.card.prev-card .v,.card.prev-card .h{color:var(--acc-tx)}

.panel{background:var(--surf);border:1px solid var(--bd);border-radius:12px;padding:18px;margin-bottom:16px}
.panel-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}
.panel-head h2{margin:0}
.year-select{width:auto;padding:7px 10px;font-size:13px}

details.panel > summary{list-style:none;cursor:pointer;display:flex;align-items:center;
  justify-content:space-between;gap:12px;user-select:none}
details.panel > summary::-webkit-details-marker{display:none}
details.panel > summary::after{content:'▾';color:var(--tx3);font-size:12px;flex-shrink:0;transition:transform .15s}
details.panel:not([open]) > summary::after{transform:rotate(-90deg)}
details.panel > summary h2{margin:0}
details.panel:not([open]) > summary{margin:0}
details.panel[open] > summary{margin-bottom:12px}
details.panel > summary:hover h2{color:var(--tx2)}
.year-form{margin-bottom:12px}
.row2{display:grid;grid-template-columns:2fr 1fr;gap:16px}
@media(max-width:760px){.row2{grid-template-columns:1fr}}
.panel.prev{background:var(--acc-bg);border-color:var(--acc-bd);border-style:dashed}
.prev-tag{font-size:12px;font-weight:500;color:var(--acc-tx)}
.prev-k{font-size:13px;color:var(--acc-tx);margin-top:4px}
.prev-line{font-size:15px;color:var(--acc-tx);margin-top:4px}
.prev-more{display:inline-block;margin-top:10px;font-size:13px}
.tag-prev{font-size:12px;font-weight:400;background:var(--acc-bg);color:var(--acc-tx);padding:2px 8px;border-radius:6px;vertical-align:middle}

.alert{border-radius:var(--r);padding:10px 14px;margin-bottom:16px;font-size:13px}
.alert.rosso{background:var(--red-bg);color:var(--red-tx)}
.alert.giallo{background:var(--warn-bg);color:var(--warn-tx)}

.tbl{width:100%;border-collapse:collapse;font-size:13px}
.tbl th{text-align:left;color:var(--tx2);font-weight:500;padding:8px 6px;border-bottom:1px solid var(--bd)}
.tbl td{padding:7px 6px;border-bottom:1px solid var(--bd)}
.tbl tr:last-child td{border-bottom:none}
.tbl .desc{max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tbl.mov tr.nobiz{opacity:.6}
.tbl tr.clickable{cursor:pointer}
.tbl tr.clickable:hover{background:var(--surf1)}
.tbl-scroll{max-height:60vh;overflow:auto}
.tbl-scroll-x{overflow-x:auto}
.tbl.mov{min-width:980px}

.chip{display:inline-block;background:var(--surf1);color:var(--tx2);border-radius:6px;padding:2px 8px;font-size:12px}
.chip.manual{background:var(--acc-bg);color:var(--acc-tx)}
.chip.pers{background:var(--warn-bg);color:var(--warn-tx);margin-left:4px}
.chip.atteso{background:var(--warn-bg);color:var(--warn-tx)}
.chip.st-incassato,.chip.st-accettato{background:var(--ok-bg);color:var(--ok-tx)}
.chip.st-perso{background:var(--red-bg);color:var(--red-tx)}

label{display:block;font-size:12px;color:var(--tx2);margin-bottom:4px}
input,select,button{font-size:14px;font-family:inherit}
input,select{width:100%;padding:8px 10px;border:1px solid var(--bd2);border-radius:var(--r);background:var(--surf)}
.inline{display:inline} .inline select{width:auto;padding:4px 6px;font-size:12px}
button{background:var(--tx);color:#fff;border:none;border-radius:var(--r);padding:9px 16px;cursor:pointer}
button:hover{opacity:.9}

.tbl td.actions{white-space:nowrap;display:flex;gap:6px}
.btn-sm{background:var(--surf);color:var(--tx2);border:1px solid var(--bd2);
  border-radius:var(--r);padding:5px 11px;font-size:12px;cursor:pointer}
.btn-sm:hover{background:var(--surf1);color:var(--tx);opacity:1}
.btn-sm.danger{background:var(--red-bg);color:var(--red-tx);border-color:transparent}
.btn-sm.danger:hover{opacity:.8}

dialog.modal{border:1px solid var(--bd);border-radius:16px;padding:0;width:580px;max-width:94vw;
  background:var(--surf);box-shadow:0 20px 60px rgba(20,19,17,.28)}
dialog.modal::backdrop{background:rgba(20,19,17,.5)}
dialog.modal .modal-body{padding:22px 26px 24px;max-height:85vh;overflow:auto}
dialog.modal h3{font-size:16px;font-weight:500;margin:0 0 18px;padding-bottom:14px;
  border-bottom:1px solid var(--bd);color:var(--tx)}
dialog.modal .grid-form{gap:14px 16px}
dialog.modal.modal-wide{width:760px}
@media(max-width:640px){dialog.modal{width:94vw}dialog.modal.modal-wide{width:94vw}}

.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px;
  padding-top:16px;border-top:1px solid var(--bd)}
.modal-actions .btn-sm{padding:9px 18px;font-size:14px}

.upload{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.upload input[type=file]{width:auto;border:none;background:transparent}
.grid-form{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}
.grid-form .full{grid-column:1/-1}
@media(max-width:600px){.grid-form{grid-template-columns:1fr}}

.login-box{max-width:340px;margin:8vh auto;background:var(--surf);border:1px solid var(--bd);border-radius:12px;padding:28px}
.login-box h1{font-size:18px;margin-bottom:2px}
.login-box label{margin-top:12px}
.login-box button{width:100%;margin-top:18px}
.err{background:var(--red-bg);color:var(--red-tx);padding:8px 12px;border-radius:var(--r);font-size:13px;margin-top:10px}
