/* ===== Design tokens ===== */
:root{
  --paper:#F7F4EC;
  --paper-2:#F1ECE0;
  --ink:#2B2A26;
  --ink-soft:#6B6659;
  --line:#E4DDCB;
  --green:#234B3E;
  --green-soft:#3A6D5B;
  --gold:#B9862F;
  --gold-soft:#E4C77E;
  --terracotta:#B4553F;
  --card:#FFFFFF;
  --shadow: 0 1px 2px rgba(43,42,38,.04), 0 8px 24px -12px rgba(43,42,38,.12);
  --radius: 14px;
  --radius-sm: 9px;
  --font-display: 'Fraunces', Georgia, serif;
  --font-body: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  --font-mono: 'JetBrains Mono', ui-monospace, monospace;
}

*{box-sizing:border-box;}
html,body{margin:0;padding:0;}
body{
  background:var(--paper);
  color:var(--ink);
  font-family:var(--font-body);
  -webkit-font-smoothing:antialiased;
  min-height:100vh;
}
body::before{
  content:"";
  position:fixed;inset:0;
  background-image:
    radial-gradient(circle at 1px 1px, rgba(43,42,38,0.035) 1px, transparent 0);
  background-size:22px 22px;
  pointer-events:none;
  z-index:0;
}

a{color:inherit;}
button{font-family:inherit;cursor:pointer;}
input,select,textarea{font-family:inherit;}

::selection{background:var(--gold-soft);}

@media (prefers-reduced-motion: reduce){
  *{animation-duration:.001ms !important; transition-duration:.001ms !important;}
}

/* ===== Layout shell ===== */
.wrap{
  position:relative;
  z-index:1;
  max-width:1080px;
  margin:0 auto;
  padding:28px 20px 80px;
}

/* ===== Top bar / ledger tab ===== */
.topbar{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:16px;
  margin-bottom:28px;
  flex-wrap:wrap;
}
.brand{
  display:flex;
  flex-direction:column;
  gap:6px;
}
.brand .eyebrow{
  font-family:var(--font-mono);
  font-size:11px;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--ink-soft);
}
.list-picker{
  position:relative;
}
.list-picker-btn{
  display:flex;
  align-items:center;
  gap:8px;
  background:var(--paper-2);
  border:1px solid var(--line);
  border-radius:999px;
  padding:8px 16px 8px 18px;
  font-family:var(--font-display);
  font-size:22px;
  font-weight:600;
  color:var(--green);
  transition:background .18s ease, transform .12s ease;
}
.list-picker-btn:hover{background:#EAE3D0;}
.list-picker-btn:active{transform:scale(.98);}
.list-picker-btn svg{transition:transform .2s ease;}
.list-picker.open .list-picker-btn svg{transform:rotate(180deg);}

.list-menu{
  position:absolute;
  top:calc(100% + 8px);
  left:0;
  min-width:260px;
  background:var(--card);
  border:1px solid var(--line);
  border-radius:var(--radius);
  box-shadow:var(--shadow);
  padding:8px;
  opacity:0;
  transform:translateY(-6px) scale(.98);
  pointer-events:none;
  transition:opacity .16s ease, transform .16s ease;
  z-index:40;
}
.list-picker.open .list-menu{
  opacity:1;
  transform:translateY(0) scale(1);
  pointer-events:auto;
}
.list-menu-item{
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:10px;
  width:100%;
  text-align:left;
  background:none;
  border:none;
  border-radius:var(--radius-sm);
  padding:10px 12px;
  font-size:14.5px;
  color:var(--ink);
}
.list-menu-item:hover{background:var(--paper-2);}
.list-menu-item.active{color:var(--green); font-weight:600;}
.list-menu-item small{color:var(--ink-soft); font-family:var(--font-mono); font-weight:400; font-size:12px;}
.list-menu-divider{height:1px; background:var(--line); margin:6px 4px;}
.list-menu-new{
  display:flex; align-items:center; gap:8px;
  width:100%; background:none; border:none;
  padding:10px 12px; font-size:14px; color:var(--green-soft); font-weight:600;
  border-radius:var(--radius-sm);
}
.list-menu-new:hover{background:var(--paper-2);}

.nav-actions{display:flex; gap:10px; align-items:center;}
.btn{
  display:inline-flex;
  align-items:center;
  gap:8px;
  padding:11px 18px;
  border-radius:999px;
  border:1px solid transparent;
  font-size:14px;
  font-weight:600;
  transition:transform .12s ease, background .16s ease, box-shadow .16s ease;
}
.btn:active{transform:scale(.96);}
.btn-primary{background:var(--green); color:#fff; box-shadow:var(--shadow);}
.btn-primary:hover{background:var(--green-soft);}
.btn-ghost{background:var(--paper-2); color:var(--ink); border-color:var(--line);}
.btn-ghost:hover{background:#EAE3D0;}
.btn-danger{background:#fff; color:var(--terracotta); border-color:#E3C4BB;}
.btn-danger:hover{background:#FBEEEA;}
.btn-sm{padding:7px 13px; font-size:12.5px;}

/* ===== Stamp / total badge (signature element) ===== */
.stamp-row{
  display:flex;
  gap:18px;
  flex-wrap:wrap;
  align-items:stretch;
  margin-bottom:28px;
}
.stamp{
  --rot:-3deg;
  flex:0 0 auto;
  width:172px;
  height:172px;
  border-radius:50%;
  border:2px dashed var(--green);
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  transform:rotate(var(--rot));
  color:var(--green);
  position:relative;
  animation:stampIn .55s cubic-bezier(.2,.8,.2,1) both;
  background:
    repeating-linear-gradient(var(--rot), transparent, transparent 100%);
}
.stamp::before{
  content:"";
  position:absolute; inset:9px;
  border-radius:50%;
  border:1px solid var(--green);
  opacity:.5;
}
.stamp .stamp-label{
  font-family:var(--font-mono);
  font-size:10px;
  letter-spacing:.16em;
  text-transform:uppercase;
  opacity:.85;
}
.stamp .stamp-amount{
  font-family:var(--font-display);
  font-size:30px;
  font-weight:700;
  line-height:1.1;
  margin-top:4px;
  text-align:center;
  padding:0 10px;
}
.stamp .stamp-count{
  font-family:var(--font-mono);
  font-size:10.5px;
  margin-top:6px;
  opacity:.75;
}
@keyframes stampIn{
  0%{opacity:0; transform:rotate(var(--rot)) scale(.6);}
  60%{opacity:1;}
  100%{opacity:1; transform:rotate(var(--rot)) scale(1);}
}

.mini-cards{
  flex:1 1 320px;
  display:grid;
  grid-template-columns:repeat(auto-fit, minmax(140px,1fr));
  gap:12px;
}
.mini-card{
  background:var(--card);
  border:1px solid var(--line);
  border-radius:var(--radius);
  padding:16px 16px 14px;
  box-shadow:var(--shadow);
  opacity:0;
  animation:fadeUp .5s ease forwards;
}
.mini-card:nth-child(1){animation-delay:.04s;}
.mini-card:nth-child(2){animation-delay:.09s;}
.mini-card:nth-child(3){animation-delay:.14s;}
.mini-card:nth-child(4){animation-delay:.19s;}
@keyframes fadeUp{
  from{opacity:0; transform:translateY(8px);}
  to{opacity:1; transform:translateY(0);}
}
.mini-card .label{
  font-family:var(--font-mono);
  font-size:10.5px;
  letter-spacing:.1em;
  text-transform:uppercase;
  color:var(--ink-soft);
}
.mini-card .value{
  font-family:var(--font-display);
  font-size:22px;
  font-weight:600;
  margin-top:6px;
  color:var(--ink);
}
.mini-card .value.gold{color:var(--gold);}

/* ===== Section headers ===== */
.section-title{
  font-family:var(--font-display);
  font-size:19px;
  font-weight:600;
  margin:36px 0 14px;
  display:flex;
  align-items:center;
  gap:10px;
  color:var(--ink);
}
.section-title .rule{
  flex:1;
  height:1px;
  background:repeating-linear-gradient(90deg, var(--line) 0 6px, transparent 6px 10px);
}

/* ===== Charts grid ===== */
.charts-grid{
  display:grid;
  grid-template-columns:1.1fr 1fr;
  gap:16px;
}
@media (max-width:760px){
  .charts-grid{grid-template-columns:1fr;}
}
.chart-card{
  background:var(--card);
  border:1px solid var(--line);
  border-radius:var(--radius);
  padding:18px;
  box-shadow:var(--shadow);
}
.chart-card h3{
  margin:0 0 12px;
  font-family:var(--font-body);
  font-size:13px;
  font-weight:700;
  color:var(--ink-soft);
  text-transform:uppercase;
  letter-spacing:.06em;
}
.chart-wrap{position:relative; height:260px; width:100%;}
.chart-wrap canvas{max-height:260px;}

/* ===== Ledger table ===== */
.ledger{
  background:var(--card);
  border:1px solid var(--line);
  border-radius:var(--radius);
  box-shadow:var(--shadow);
  overflow:hidden;
}
.ledger-filters{
  display:flex;
  gap:10px;
  padding:14px 16px;
  border-bottom:1px solid var(--line);
  flex-wrap:wrap;
  background:var(--paper-2);
}
.ledger-filters select, .ledger-filters input{
  border:1px solid var(--line);
  background:#fff;
  border-radius:8px;
  padding:8px 10px;
  font-size:13px;
  color:var(--ink);
}
.ledger-row{
  display:grid;
  grid-template-columns:96px 1fr 130px 120px 90px 76px;
  gap:12px;
  align-items:center;
  padding:14px 16px;
  border-bottom:1px dashed var(--line);
  font-size:14px;
  opacity:0;
  animation:fadeUp .4s ease forwards;
}
.ledger-row:last-child{border-bottom:none;}
.ledger-row.header{
  font-family:var(--font-mono);
  font-size:10.5px;
  text-transform:uppercase;
  letter-spacing:.08em;
  color:var(--ink-soft);
  background:var(--paper-2);
  animation:none;
  opacity:1;
}
.ledger-row .date{font-family:var(--font-mono); color:var(--ink-soft); font-size:12.5px;}
.ledger-row .business{font-weight:600;}
.ledger-row .business .note{display:block; font-weight:400; color:var(--ink-soft); font-size:12px; margin-top:2px;}
.chip{
  display:inline-flex;
  align-items:center;
  padding:4px 10px;
  border-radius:999px;
  background:var(--paper-2);
  border:1px solid var(--line);
  font-size:12px;
  font-weight:600;
  color:var(--green);
  width:fit-content;
}
.payer-tag{font-size:12.5px; color:var(--ink-soft);}
.amount{
  font-family:var(--font-mono);
  font-weight:700;
  color:var(--ink);
  text-align:right;
}
.row-actions{display:flex; gap:6px; justify-content:flex-end;}
.icon-btn{
  width:30px; height:30px;
  display:flex; align-items:center; justify-content:center;
  border-radius:8px;
  border:1px solid var(--line);
  background:#fff;
  color:var(--ink-soft);
  transition:background .15s ease, color .15s ease;
}
.icon-btn:hover{background:var(--paper-2); color:var(--green);}
.icon-btn.danger:hover{color:var(--terracotta); background:#FBEEEA;}

.empty-state{
  padding:60px 20px;
  text-align:center;
  color:var(--ink-soft);
}
.empty-state h4{font-family:var(--font-display); font-size:20px; color:var(--ink); margin-bottom:6px;}

@media (max-width:700px){
  .ledger-row{
    grid-template-columns:1fr;
    gap:4px;
    position:relative;
    padding:16px;
  }
  .ledger-row.header{display:none;}
  .ledger-row .date{order:1; font-size:11px;}
  .ledger-row .business{order:2; font-size:15px;}
  .ledger-row .chip{order:3; margin-top:4px;}
  .ledger-row .payer-tag{order:4;}
  .ledger-row .amount{order:5; text-align:left; font-size:17px; margin-top:2px;}
  .ledger-row .row-actions{order:6; justify-content:flex-start; margin-top:6px;}
}

/* ===== Insert page ===== */
.center-screen{
  min-height:100vh;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:20px;
  position:relative;
  z-index:1;
}
.auth-card, .form-card{
  background:var(--card);
  border:1px solid var(--line);
  border-radius:var(--radius);
  box-shadow:var(--shadow);
  padding:32px;
  width:100%;
  max-width:420px;
  animation:fadeUp .5s ease both;
}
.auth-card h1, .form-card h1{
  font-family:var(--font-display);
  font-size:26px;
  margin:0 0 6px;
  color:var(--green);
}
.auth-card p, .form-card .sub{color:var(--ink-soft); font-size:14px; margin-bottom:20px;}
.field{margin-bottom:16px;}
.field label{
  display:block;
  font-size:12.5px;
  font-weight:600;
  color:var(--ink-soft);
  margin-bottom:6px;
  text-transform:uppercase;
  letter-spacing:.04em;
}
.field input, .field select, .field textarea{
  width:100%;
  padding:12px 14px;
  border:1px solid var(--line);
  border-radius:10px;
  background:var(--paper);
  font-size:15px;
  color:var(--ink);
  transition:border-color .15s ease, box-shadow .15s ease;
}
.field input:focus, .field select:focus, .field textarea:focus{
  outline:none;
  border-color:var(--green-soft);
  box-shadow:0 0 0 3px rgba(58,109,91,.14);
}
.amount-input{position:relative;}
.amount-input::before{
  content:"€";
  position:absolute; left:14px; top:50%; transform:translateY(-50%);
  font-family:var(--font-mono); color:var(--ink-soft); font-weight:600;
}
.amount-input input{padding-left:30px; font-family:var(--font-mono); font-weight:700; font-size:18px;}

.payer-grid{display:grid; grid-template-columns:1fr 1fr; gap:8px;}
.payer-opt{
  border:1px solid var(--line);
  background:var(--paper);
  border-radius:10px;
  padding:11px;
  text-align:center;
  font-size:14px;
  font-weight:600;
  color:var(--ink);
  transition:all .15s ease;
}
.payer-opt.selected{
  background:var(--green);
  color:#fff;
  border-color:var(--green);
}

.cat-row{display:flex; gap:8px;}
.cat-row select{flex:1;}

.shake{animation:shake .4s ease;}
@keyframes shake{
  10%,90%{transform:translateX(-2px);}
  20%,80%{transform:translateX(4px);}
  30%,50%,70%{transform:translateX(-8px);}
  40%,60%{transform:translateX(8px);}
}

.toast{
  position:fixed;
  bottom:24px; left:50%;
  transform:translateX(-50%) translateY(20px);
  background:var(--ink);
  color:#fff;
  padding:13px 22px;
  border-radius:999px;
  font-size:14px;
  font-weight:600;
  opacity:0;
  pointer-events:none;
  transition:opacity .22s ease, transform .22s ease;
  z-index:100;
  box-shadow:var(--shadow);
  display:flex; align-items:center; gap:8px;
}
.toast.show{opacity:1; transform:translateX(-50%) translateY(0);}
.toast.success{background:var(--green);}
.toast.error{background:var(--terracotta);}

.modal-overlay{
  position:fixed; inset:0; background:rgba(43,42,38,.45);
  display:flex; align-items:center; justify-content:center;
  z-index:90; opacity:0; pointer-events:none;
  transition:opacity .18s ease;
  padding:20px;
}
.modal-overlay.open{opacity:1; pointer-events:auto;}
.modal{
  background:#fff; border-radius:var(--radius); padding:26px;
  width:100%; max-width:380px;
  transform:scale(.92); transition:transform .18s ease;
  box-shadow:var(--shadow);
}
.modal-overlay.open .modal{transform:scale(1);}
.modal h3{font-family:var(--font-display); font-size:20px; margin:0 0 8px; color:var(--ink);}
.modal p{font-size:13.5px; color:var(--ink-soft); margin-bottom:16px;}
.modal-actions{display:flex; gap:10px; justify-content:flex-end; margin-top:6px;}

.footer-note{
  text-align:center; color:var(--ink-soft); font-size:12px;
  margin-top:50px; font-family:var(--font-mono);
}

.link-quiet{
  font-size:13px; color:var(--ink-soft); text-decoration:underline; text-underline-offset:3px;
}

.spinner{
  width:16px; height:16px; border-radius:50%;
  border:2px solid rgba(255,255,255,.4); border-top-color:#fff;
  animation:spin .7s linear infinite; display:inline-block;
}
@keyframes spin{to{transform:rotate(360deg);}}

.back-link{
  display:inline-flex; align-items:center; gap:6px;
  font-size:13px; color:var(--ink-soft); margin-bottom:18px;
}
.back-link:hover{color:var(--green);}
