
  :root{
    --ink:#050403;
    --ink-soft:#171208;
    --parchment:#0b0906;
    --panel:#17130d;
    --surface:#211b12;
    --surface-hover:#2a2216;
    --gold:#e3bb6d;
    --gold-deep:#c9a24a;
    --gold-dim:#8a7239;
    --red:#e2665c;
    --red-bg:rgba(226,102,92,0.14);
    --green:#5cc194;
    --green-bg:rgba(92,193,148,0.14);
    --blue:#7fb2e0;
    --blue-bg:rgba(127,178,224,0.14);
    --line:rgba(227,187,109,0.16);
    --line-strong:rgba(227,187,109,0.32);
    --text:#f1e8d6;
    --text-soft:#a99a78;
    --radius:10px;
    --shadow: 0 1px 2px rgba(0,0,0,0.5), 0 10px 28px rgba(0,0,0,0.5);
  }
  *{box-sizing:border-box;}
  body{
    margin:0;
    background:var(--parchment);
    background-image:
      radial-gradient(circle at 1px 1px, rgba(227,187,109,0.055) 1px, transparent 0),
      radial-gradient(ellipse at top, rgba(227,187,109,0.05), transparent 55%);
    background-size: 22px 22px, 100% 100%;
    color:var(--text);
    font-family:'IBM Plex Sans Thai','IBM Plex Mono',sans-serif;
    -webkit-font-smoothing:antialiased;
  }
  .wrap{max-width:1220px;margin:0 auto;padding:28px 20px 80px;}

  header{
    background:var(--ink);
    background-image: linear-gradient(135deg, #0a0806 0%, #1c160c 100%);
    border-radius: var(--radius);
    border:1px solid var(--line-strong);
    padding:26px 30px;
    color:#f3ede0;
    position:relative;
    overflow:hidden;
    box-shadow:var(--shadow);
  }
  header::after{
    content:"";
    position:absolute; inset:0;
    background-image: repeating-linear-gradient(90deg, transparent 0 27px, rgba(201,162,74,0.08) 27px 28px);
    pointer-events:none;
  }
  .eyebrow{font-family:'IBM Plex Mono',monospace;letter-spacing:.14em;font-size:11px;color:var(--gold);text-transform:uppercase;margin-bottom:8px;}
  h1{font-family:'Space Grotesk',sans-serif;font-size:26px;margin:0 0 4px;font-weight:700;letter-spacing:-0.01em;}
  .acct-line{font-family:'IBM Plex Mono',monospace;font-size:12.5px;color:#c8bfa9;}
  .ticker{margin-top:18px;display:flex;gap:28px;flex-wrap:wrap;font-family:'IBM Plex Mono',monospace;font-size:13px;color:#e9e2cf;border-top:1px dashed rgba(243,237,224,0.25);padding-top:14px;}
  .ticker b{color:#fff;font-weight:600;}

  .cards{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:20px;}
  .card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px;box-shadow:var(--shadow);}
  .card .label{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--text-soft);font-family:'IBM Plex Mono',monospace;margin-bottom:8px;}
  .card .value{font-family:'Space Grotesk',sans-serif;font-size:24px;font-weight:700;}
  .card.income .value{color:var(--green);}
  .card.expense .value{color:var(--red);}
  .card.net .value.pos{color:var(--green);}
  .card.net .value.neg{color:var(--red);}
  .card .sub{font-size:11.5px;color:var(--text-soft);margin-top:4px;font-family:'IBM Plex Mono',monospace;}

  .filters{margin-top:18px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px;box-shadow:var(--shadow);display:flex;gap:14px;flex-wrap:wrap;align-items:flex-end;}
  .field{display:flex;flex-direction:column;gap:6px;position:relative;}
  .field label{font-size:10.5px;text-transform:uppercase;letter-spacing:.08em;color:var(--text-soft);font-family:'IBM Plex Mono',monospace;}
  select, input[type=text], input[type=date]{
    font-family:'IBM Plex Sans Thai',sans-serif;font-size:13.5px;padding:8px 10px;border-radius:7px;
    border:1px solid var(--line);background:var(--surface);color:var(--text);min-width:140px;
  }
  select:focus, input:focus{outline:2px solid var(--gold); outline-offset:1px;}
  .field.grow{flex:1; min-width:200px;}
  .field.grow input{width:100%;}
  .chip-btn{font-family:'IBM Plex Mono',monospace;font-size:12px;background:var(--ink);color:#f3ede0;border:none;border-radius:7px;padding:9px 14px;cursor:pointer;letter-spacing:.03em;}
  .chip-btn:hover{background:var(--ink-soft);}
  .chip-btn.ghost{background:var(--surface); color:var(--text-soft); border:1px solid var(--line);}
  .type-toggle{display:flex; border:1px solid var(--line); border-radius:7px; overflow:hidden;}
  .type-toggle button{font-family:'IBM Plex Mono',monospace;font-size:12.5px;padding:8px 12px;background:var(--surface);border:none;cursor:pointer;color:var(--text-soft);border-right:1px solid var(--line);}
  .type-toggle button:last-child{border-right:none;}
  .type-toggle button.active{background:var(--ink); color:#f3ede0;}

  /* multi-select category dropdown */
  .msel{position:relative;}
  .msel-btn{font-family:'IBM Plex Sans Thai',sans-serif;font-size:13.5px;padding:8px 10px;border-radius:7px;border:1px solid var(--line);background:var(--surface);cursor:pointer;min-width:170px;text-align:left;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
  .msel-panel{display:none;position:absolute;top:calc(100% + 6px);left:0;z-index:30;background:var(--panel);border:1px solid var(--line);border-radius:8px;box-shadow:var(--shadow);padding:8px;min-width:260px;max-height:280px;overflow:auto;}
  .msel-panel.open{display:block;}
  .msel-item{display:flex;align-items:center;gap:8px;padding:5px 6px;border-radius:5px;font-size:12.8px;cursor:pointer;}
  .msel-item:hover{background:var(--surface-hover);}
  .msel-item input{margin:0;}
  .msel-actions{display:flex;justify-content:space-between;padding:6px 6px 2px;border-top:1px dashed var(--line);margin-top:6px;}
  .msel-actions a{font-size:11px;font-family:'IBM Plex Mono',monospace;color:var(--blue);cursor:pointer;text-decoration:none;}

  .active-filters{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px;}
  .pill{display:inline-flex;align-items:center;gap:6px;background:var(--blue-bg);color:var(--blue);border-radius:20px;padding:4px 10px 4px 12px;font-size:11.5px;font-family:'IBM Plex Mono',monospace;}
  .pill .x{cursor:pointer;font-weight:700;opacity:.7;}
  .pill .x:hover{opacity:1;}

  .panel-grid{display:grid;grid-template-columns:1.3fr 1fr;gap:14px;margin-top:18px;align-items:start;}
  @media(max-width:980px){.panel-grid{grid-template-columns:1fr;}}

  .chart-panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:18px 20px 8px;box-shadow:var(--shadow);}
  .chart-panel h2{font-family:'Space Grotesk',sans-serif;font-size:15px;margin:0 0 14px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;}
  .chart-panel h2 span.sub{font-size:11px; color:var(--text-soft); font-family:'IBM Plex Mono',monospace; font-weight:400;}
  .seg{display:flex;border:1px solid var(--line);border-radius:7px;overflow:hidden;}
  .seg button{font-family:'IBM Plex Mono',monospace;font-size:11px;padding:5px 10px;background:var(--surface);border:none;cursor:pointer;color:var(--text-soft);border-right:1px solid var(--line);}
  .seg button:last-child{border-right:none;}
  .seg button.active{background:var(--gold-deep);color:#fff;}

  .bar-row{display:grid;grid-template-columns:190px 1fr 90px;align-items:center;gap:10px;padding:6px 0;font-size:12.5px;border-bottom:1px dashed var(--line);}
  .bar-row:last-child{border-bottom:none;}
  .bar-row .cat-name{color:var(--text); font-weight:500; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; cursor:pointer;}
  .bar-row .cat-name:hover{color:var(--gold-deep);}
  .bar-track{background:var(--surface); border-radius:4px; height:14px; overflow:hidden;}
  .bar-fill{height:100%; background:linear-gradient(90deg, var(--gold-deep), var(--gold)); border-radius:4px;}
  .bar-row .amt{font-family:'IBM Plex Mono',monospace; text-align:right; color:var(--text-soft);}

  .tagtotals{display:flex;flex-direction:column;gap:2px;}
  .tagtotal-row{display:flex;justify-content:space-between;align-items:center;padding:7px 4px;border-bottom:1px dashed var(--line);cursor:pointer;font-size:12.5px;}
  .tagtotal-row:hover{background:var(--surface-hover);}
  .tagtotal-row.active-tag{background:rgba(227,187,109,0.16);}
  .tagtotal-row:last-child{border-bottom:none;}
  .tagtotal-name{font-family:'IBM Plex Mono',monospace;font-weight:600;color:var(--ink);}
  .tagtotal-meta{font-size:10.5px;color:var(--text-soft);}
  .tagtotal-amt{font-family:'IBM Plex Mono',monospace;font-weight:600;}
  .tagtotal-amt.pos{color:var(--green);}
  .tagtotal-amt.neg{color:var(--red);}
  .empty-tip{padding:18px 4px;color:var(--text-soft);font-style:italic;font-size:12.5px;}

  svg.linechart{width:100%;height:220px;overflow:visible;}
  .lc-grid line{stroke:rgba(227,187,109,0.14);stroke-width:1;}
  .lc-axis text{font-family:'IBM Plex Mono',monospace;font-size:9.5px;fill:var(--text-soft);}
  .lc-line{fill:none;stroke-width:2;}
  .lc-dot{r:2.6;}
  .lc-legend{display:flex;gap:16px;font-size:11px;font-family:'IBM Plex Mono',monospace;color:var(--text-soft);margin-top:6px;flex-wrap:wrap;}
  .lc-legend span{display:inline-flex;align-items:center;gap:5px;}
  .lc-legend i{width:10px;height:10px;border-radius:2px;display:inline-block;}

  .table-panel{margin-top:18px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden;}
  .table-head{display:flex; justify-content:space-between; align-items:center;padding:16px 20px 10px; flex-wrap:wrap; gap:8px;}
  .table-head h2{font-family:'Space Grotesk',sans-serif; font-size:15px; margin:0;}
  .count-tag{font-family:'IBM Plex Mono',monospace; font-size:11.5px; color:var(--text-soft);}
  .table-scroll{overflow-x:auto;}
  table{width:100%; border-collapse:collapse; font-size:12.6px; min-width:980px;}
  thead th{text-align:left;font-family:'IBM Plex Mono',monospace;font-size:10.3px;letter-spacing:.06em;text-transform:uppercase;color:var(--text-soft);padding:9px 14px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:var(--surface);cursor:pointer;user-select:none;white-space:nowrap;}
  thead th:hover{color:var(--ink);}
  thead th.sorted::after{content:" ▾"; color:var(--gold-deep);}
  thead th.sorted.asc::after{content:" ▴";}
  thead th.nosort{cursor:default;}
  thead th.nosort:hover{color:var(--text-soft);}
  tbody td{padding:8px 14px;border-bottom:1px solid var(--line);vertical-align:top;}
  tbody tr:hover{background:var(--surface-hover);}
  td.amt{font-family:'IBM Plex Mono',monospace;text-align:right;white-space:nowrap;font-weight:500;}
  td.amt.income{color:var(--green);}
  td.amt.expense{color:var(--red);}
  td.date{font-family:'IBM Plex Mono',monospace; color:var(--text-soft); white-space:nowrap;}
  .tag{display:inline-block;font-size:10.5px;padding:2px 8px;border-radius:20px;background:var(--red-bg);color:var(--red);font-family:'IBM Plex Mono',monospace;}
  .tag.income{background:var(--green-bg); color:var(--green);}
  .desc-cell{max-width:260px; color:var(--text-soft);}
  .empty-row td{text-align:center; padding:40px; color:var(--text-soft); font-style:italic;}

  .tags-cell{min-width:190px;}
  .chip-list{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:5px;}
  .user-tag{display:inline-flex;align-items:center;gap:4px;background:rgba(227,187,109,0.16);color:var(--gold);border-radius:12px;padding:3px 6px 3px 10px;font-size:11px;font-family:'IBM Plex Mono',monospace;white-space:nowrap;}
  .user-tag .rm{cursor:pointer;opacity:.6;font-weight:700;padding:2px 3px;}
  .user-tag .rm:hover{opacity:1;}
  .tag-add-row{display:flex;gap:4px;}
  .tag-input{flex:1;min-width:0;font-size:12px;padding:6px 7px;border:1px solid var(--line);border-radius:5px;background:var(--surface);}
  .tag-add-btn{
    flex:0 0 auto;
    width:30px;height:30px;
    border:1px solid var(--gold-deep);
    background:var(--gold-deep);
    color:#fff;
    border-radius:6px;
    font-size:16px;
    line-height:1;
    cursor:pointer;
    display:flex;align-items:center;justify-content:center;
    -webkit-tap-highlight-color: rgba(0,0,0,0.1);
  }
  .tag-add-btn:active{background:var(--gold);}
  .note-input{width:100%;font-size:11.5px;padding:4px 6px;border:1px solid var(--line);border-radius:5px;background:var(--surface);min-width:150px;}
  .note-cell{min-width:170px;}
  .save-flag{font-size:9.5px;color:var(--green);font-family:'IBM Plex Mono',monospace;opacity:0;transition:opacity .3s;}
  .save-flag.show{opacity:1;}

  footer{text-align:center;font-size:11px;color:var(--text-soft);margin-top:24px;font-family:'IBM Plex Mono',monospace;}
  .storage-note{text-align:center;font-size:10.5px;color:var(--text-soft);margin-top:6px;font-family:'IBM Plex Mono',monospace;}

  @media (max-width:820px){
    .cards{grid-template-columns:repeat(2,1fr);}
    .bar-row{grid-template-columns:110px 1fr 70px;}
  }
  @media (max-width:520px){
    .cards{grid-template-columns:1fr 1fr;}
    h1{font-size:20px;}
  }
  /* prevent iOS auto-zoom on focus (needs >=16px) + bigger touch targets */
  @media (max-width:768px){
    .tag-input, .note-input, input[type=text], input[type=date], select{font-size:16px;}
    .tag-add-btn{width:34px;height:34px;font-size:18px;}
    .user-tag .rm{padding:4px 5px;}
    thead th, tbody td{padding:9px 10px;}
  }

  /* ---------- Pie chart ---------- */
  .pie-wrap{display:flex;gap:22px;align-items:center;flex-wrap:wrap;padding:6px 0 14px;}
  .pie-svg{flex:0 0 auto;width:180px;height:180px;}
  .pie-legend{flex:1;min-width:200px;display:flex;flex-direction:column;gap:6px;}
  .pie-legend-row{display:flex;align-items:center;gap:8px;font-size:12px;}
  .pie-swatch{width:11px;height:11px;border-radius:3px;flex:0 0 auto;}
  .pie-legend-name{flex:1;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;}
  .pie-legend-name:hover{color:var(--gold-deep);}
  .pie-legend-pct{font-family:'IBM Plex Mono',monospace;color:var(--text-soft);font-size:11px;width:42px;text-align:right;}
  .pie-legend-amt{font-family:'IBM Plex Mono',monospace;color:var(--text-soft);font-size:11px;width:80px;text-align:right;}

/* ---------- New: PDF import panel ---------- */
.import-panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:18px 20px;box-shadow:var(--shadow);margin-top:18px;}
.import-panel h2{font-family:'Space Grotesk',sans-serif;font-size:15px;margin:0 0 12px;}
.dropzone{border:1.5px dashed var(--line-strong,var(--line));border-radius:10px;padding:28px 16px;text-align:center;cursor:pointer;transition:background .2s;}
.dropzone:hover, .dropzone.drag{background:var(--surface);}
.dropzone input{display:none;}
.import-summary{margin-top:14px;padding:12px 14px;border-radius:8px;background:var(--surface);font-size:12.5px;font-family:'IBM Plex Mono',monospace;}
.import-summary.ok{border:1px solid rgba(92,193,148,0.35);}
.import-summary.warn{border:1px solid rgba(226,102,92,0.4);}
.import-row{display:flex;justify-content:space-between;padding:3px 0;}
.import-preview-table{width:100%;font-size:11.5px;border-collapse:collapse;margin-top:10px;max-height:280px;display:block;overflow:auto;}
.import-preview-table th{text-align:left;padding:6px 10px;color:var(--text-soft);font-family:'IBM Plex Mono',monospace;font-size:10px;text-transform:uppercase;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--panel);}
.import-preview-table td{padding:5px 10px;border-bottom:1px solid var(--line);}
.import-preview-table tr.dup{opacity:.4;}
.import-actions{display:flex;gap:10px;margin-top:14px;}
.backup-bar{display:flex;gap:10px;flex-wrap:wrap;margin-top:10px;}
.top-tabs{display:flex;gap:8px;margin-bottom:16px;}
.top-tabs button{font-family:'IBM Plex Mono',monospace;font-size:12.5px;padding:8px 16px;border-radius:8px;border:1px solid var(--line);background:var(--surface);color:var(--text-soft);cursor:pointer;}
.top-tabs button.active{background:var(--goldDeep,var(--gold-deep));color:var(--ink);border-color:transparent;}
.spinner{display:inline-block;width:14px;height:14px;border:2px solid rgba(227,187,109,0.3);border-top-color:var(--gold);border-radius:50%;animation:spin .7s linear infinite;}
@keyframes spin{to{transform:rotate(360deg);}}
