:root{--bg:#f1f5f9;--card:#fff;--fg:#0f172a;--muted:#64748b;--pri:#0f766e;--line:#e2e8f0}
@media(prefers-color-scheme:dark){:root{--bg:#0b1220;--card:#162033;--fg:#e8eefc;--muted:#93a1ba;--line:#26334d}}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--fg);font:16px/1.45 system-ui,-apple-system,"Sarabun","Noto Sans Thai",sans-serif;padding-bottom:96px}
header{background:var(--pri);color:#fff;padding:calc(12px + env(safe-area-inset-top)) 16px 14px;position:sticky;top:0;z-index:5}
h1{margin:0 0 6px;font-size:20px}h2{margin:0;font-size:17px}
.month{display:flex;align-items:center;justify-content:center;gap:16px;font-weight:600}
.month button{background:rgba(255,255,255,.2);color:#fff;border:0;border-radius:50%;width:34px;height:34px;font-size:20px}
main{max-width:640px;margin:0 auto;padding:12px}
.card,.total{background:var(--card);border-radius:14px;padding:14px;margin-bottom:12px;box-shadow:0 1px 2px rgba(0,0,0,.06)}
.total{text-align:center}.big{font-size:34px;font-weight:700;color:var(--pri)}
.muted{color:var(--muted)}.small{font-size:13px}.center{text-align:center}
.row{display:flex;align-items:center}.between{justify-content:space-between}.gap{gap:8px}.grow{flex:1}
button{font:inherit;cursor:pointer}
.ghost{background:transparent;border:1px solid var(--line);color:var(--fg);border-radius:10px;padding:8px 12px}
.primary{background:var(--pri);color:#fff;border:0;border-radius:10px;padding:10px 14px;font-weight:600}
.danger{background:transparent;color:#dc2626;border:1px solid #dc2626;border-radius:10px;padding:10px 14px}
.bar{margin:10px 0}.bar .lbl{display:flex;justify-content:space-between;font-size:14px}
.bar .t{height:10px;background:var(--line);border-radius:6px;overflow:hidden;margin-top:4px}.bar .t i{display:block;height:100%;border-radius:6px}
ul{list-style:none;margin:8px 0 0;padding:0}
li{display:flex;align-items:center;gap:10px;padding:10px 0;border-top:1px solid var(--line);cursor:pointer}
li .ic{width:40px;height:40px;border-radius:10px;display:grid;place-items:center;font-size:20px;flex:none}
li .mid{flex:1;min-width:0}li .nm{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:600}
li .sub{font-size:13px;color:var(--muted)}li .amt{font-weight:700}
.fab{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(18px + env(safe-area-inset-bottom));background:var(--pri);color:#fff;padding:14px 28px;border-radius:999px;font-weight:700;box-shadow:0 6px 18px rgba(0,0,0,.3);z-index:6;cursor:pointer}
.progress{position:fixed;inset:auto 12px 90px;background:var(--card);padding:12px;border-radius:12px;box-shadow:0 4px 14px rgba(0,0,0,.25);z-index:7}
.track{height:6px;background:var(--line);border-radius:4px;margin-top:8px;overflow:hidden}#progressBar{height:100%;width:0;background:var(--pri);transition:width .2s}
.toast{position:fixed;left:12px;right:12px;bottom:90px;background:#111827;color:#fff;padding:12px 14px;border-radius:12px;z-index:9;text-align:center}
dialog{border:0;border-radius:16px;padding:16px;width:min(94vw,440px);max-height:92vh;background:var(--card);color:var(--fg)}
dialog::backdrop{background:rgba(0,0,0,.5)}
dialog label{display:block;margin:10px 0 0;font-size:14px;color:var(--muted)}
dialog label.row{color:var(--fg)}
input,select{width:100%;font:inherit;padding:10px;border:1px solid var(--line);border-radius:10px;background:var(--bg);color:var(--fg);margin-top:4px}
input[type=checkbox]{width:auto;margin:0 8px 0 0}
#thumb{max-height:150px;display:block;margin:8px auto;border-radius:8px}
pre{white-space:pre-wrap;font-size:12px;max-height:160px;overflow:auto;background:var(--bg);padding:8px;border-radius:8px}
.actions{margin-top:14px}

.fld{display:block;margin-top:10px;font-size:14px;color:var(--muted)}
[hidden]{display:none!important}
.wide{width:100%;margin-top:10px}
.err{color:#dc2626;min-height:1em;font-size:14px}
.warn{display:block;width:100%;background:#fef3c7;color:#92400e;border:1px solid #fcd34d;border-radius:12px;padding:12px;margin-bottom:12px;font-weight:600;text-align:left}
li.rev .nm{color:#b45309}
