/* Reward Ledger — design 1a "Brutalist financial terminal" (docs/design/README.md).
   Radius 0 everywhere, no shadows/gradients/blur; layers separated by 1px lines and the head fill. */
:root{
  --bg:#000000; --head:#0A0A0A; --hover:#0F0F0F;
  --ink:#E5E5E5; --bright:#FFFFFF; --sub:#A3A3A3; --muted:#737373; --dim:#525252;
  --line:#1A1A1A; --strong:#333333;
  --gain:#34D399; --loss:#FB7185; --warn:#FBBF24;
  --gainBg:rgba(52,211,153,.08); --lossBg:rgba(251,113,133,.08); --warnBg:rgba(251,191,36,.08);
  --btnBg:#E5E5E5; --btnInk:#000000; --onAccent:#000000;
  --ctl:36px; --btn:40px;
  color-scheme:dark;
}
@media (prefers-color-scheme:dark){ :root:not([data-theme="light"]){ color-scheme:dark; } }
:root[data-theme="dark"]{ color-scheme:dark; }
:root[data-theme="light"]{
  --bg:#FFFFFF; --head:#F5F5F5; --hover:#F0F0F0;
  --ink:#171717; --bright:#000000; --sub:#525252; --muted:#737373; --dim:#A3A3A3;
  --line:#E5E5E5; --strong:#A3A3A3;
  --gain:#047857; --loss:#BE123C; --warn:#B45309;
  --gainBg:rgba(4,120,87,.08); --lossBg:rgba(190,18,60,.08); --warnBg:rgba(180,83,9,.08);
  --btnBg:#000000; --btnInk:#FFFFFF; --onAccent:#FFFFFF;
  color-scheme:light;
}
@media (max-width:759px){ :root{ --ctl:44px; --btn:44px; } }

*,*::before,*::after{box-sizing:border-box;border-radius:0 !important}
[hidden]{display:none !important}
html,body{margin:0;background:var(--bg);color:var(--ink)}
body{font-family:"JetBrains Mono",ui-monospace,Menlo,Consolas,monospace;font-size:13px;line-height:1.5;font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased}
input,textarea,button{font-family:inherit;color:inherit}
input::placeholder,textarea::placeholder{color:var(--dim)}
button{cursor:pointer}
:focus-visible{outline:1px solid var(--warn);outline-offset:2px}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* ---------- page ---------- */
.page{max-width:1204px;padding:0 max(12px,env(safe-area-inset-right)) calc(96px + env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left));display:flex;flex-direction:column;gap:12px}

/* ---------- buttons ---------- */
.btn{height:var(--ctl);padding:0 14px;background:var(--bg);color:var(--ink);border:1px solid var(--strong);font-size:11px;font-weight:500;letter-spacing:.08em;white-space:nowrap}
.btn:hover{background:var(--hover);border-color:var(--muted)}
.btn.primary{background:var(--btnBg);color:var(--btnInk);border-color:var(--btnBg);font-weight:700}
.btn.primary:hover{opacity:.88}
.btn.primary:disabled{background:var(--dim);border-color:var(--dim);color:var(--onAccent);opacity:1;cursor:default}
.btn.danger{color:var(--loss);border-color:var(--loss);font-weight:700}
.btn.danger:hover{background:var(--lossBg)}
.btn.danger.armed{background:var(--loss);color:var(--onAccent)}
.btn.lg{height:var(--btn);padding:0 16px}
.linkish{background:transparent;border:0;padding:0;color:var(--sub);font-size:10.5px;letter-spacing:.08em;text-decoration:underline}
.linkish:hover{color:var(--bright)}

/* ---------- top bar ---------- */
.topbar{display:flex;flex-wrap:wrap;align-items:center;gap:12px;padding:calc(10px + env(safe-area-inset-top)) 0 10px;border-bottom:1px solid var(--line)}
.app-name{font-size:15px;font-weight:700;color:var(--bright);letter-spacing:.04em}
.chip{font-size:10.5px;font-weight:500;letter-spacing:.08em;padding:2px 6px;border:1px solid currentColor;color:var(--sub);background:transparent}
.chip.ok{color:var(--gain);background:var(--gainBg)}
.chip.warn{color:var(--warn);background:var(--warnBg)}
.chip.bad{color:var(--loss);background:var(--lossBg)}
.clock{font-size:12px;color:var(--muted)}
.spacer{flex:1}
.top-actions{display:flex;gap:8px}

/* ---------- summary ---------- */
.summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border-top:1px solid var(--strong);border-left:1px solid var(--strong)}
.stat{padding:12px;border-right:1px solid var(--strong);border-bottom:1px solid var(--strong);display:flex;flex-direction:column;gap:6px;min-width:0}
.label{font-size:10.5px;font-weight:500;letter-spacing:.08em;color:var(--muted);text-transform:uppercase}
.stat .val{font-size:22px;font-weight:700;color:var(--bright);overflow-wrap:anywhere}
.stat .subl{font-size:11px;color:var(--muted)}

/* ---------- colours ---------- */
.gain{color:var(--gain) !important}
.loss{color:var(--loss) !important}
.zero{color:var(--muted) !important}
.dimc{color:var(--dim) !important}
.pill{font-weight:700;padding:1px 6px;white-space:nowrap}
.pill.gain{background:var(--gainBg)} .pill.loss{background:var(--lossBg)}

/* ---------- toolbar ---------- */
.toolbar{display:flex;flex-wrap:wrap;gap:12px;align-items:center}
.search{flex:1 1 260px;max-width:420px;height:var(--ctl);border:1px solid var(--strong);display:flex;align-items:center}
.search:focus-within{box-shadow:inset 0 0 0 1px var(--warn)}
.search input{flex:1;min-width:0;height:100%;background:transparent;border:0;font-size:12px;padding:0 10px;outline:none}
.search input::-webkit-search-cancel-button{display:none}
.search .clear{width:34px;height:100%;background:transparent;border:0;color:var(--muted);font-size:14px}
.search .clear:hover{color:var(--bright)}
.seg{display:flex;height:var(--ctl);border:1px solid var(--strong)}
.seg button{padding:0 12px;border:0;background:var(--bg);color:var(--muted);font-size:11px;font-weight:500;letter-spacing:.08em}
.seg button+button{border-left:1px solid var(--strong)}
.seg button[aria-pressed="true"]{background:var(--hover);color:var(--bright);box-shadow:inset 0 -2px 0 var(--bright)}
.seg button:focus-visible{outline-offset:-1px}

/* ---------- banners ---------- */
.sample{border:1px solid var(--warn);background:var(--warnBg);padding:8px 12px;display:flex;flex-wrap:wrap;align-items:center;gap:12px}
.sample .tag{font-size:10.5px;font-weight:700;letter-spacing:.08em;color:var(--warn)}
.sample .txt{font-size:12px;flex:1 1 200px}
.sample .btn{padding:0 12px;font-size:10.5px;font-weight:700;color:var(--warn);border-color:var(--warn)}
.sample.armed{border-color:var(--loss);background:var(--lossBg)}
.sample.armed .tag{color:var(--loss)}
.sample.armed .btn{background:var(--loss);border-color:var(--loss);color:var(--onAccent)}
.offline{border:1px solid var(--loss);background:var(--lossBg);padding:10px 12px;font-size:12.5px;color:var(--loss)}

/* ---------- page states ---------- */
.loading{padding:32px 0;display:flex;flex-direction:column;gap:10px}
.loading .t{font-size:13px;color:var(--sub)}
.skel{height:10px;background:var(--hover)}
.boxed{border:1px dashed var(--strong);padding:48px 16px;display:flex;flex-direction:column;align-items:center;gap:14px;text-align:center}
.boxed.nores{padding:40px 16px;gap:10px}
.boxed .h{font-size:14px;font-weight:700;color:var(--bright)}
.boxed.nores .h{font-size:13px;font-weight:400}
.boxed .p{font-size:12px;color:var(--muted)}

/* ---------- tree ---------- */
.tree{display:flex;flex-direction:column;gap:12px}
.year{display:flex;flex-direction:column;gap:12px}
.hdr{display:flex;flex-wrap:wrap;gap:8px;justify-content:space-between;background:transparent;border:0;color:inherit;text-align:left;width:100%}
.year-h{align-items:flex-end;padding:12px 0 8px;border-bottom:1px solid var(--strong)}
.year-h .t{font-size:30px;font-weight:700;color:var(--bright);line-height:1}
.totals{display:flex;flex-direction:column;align-items:flex-end;gap:4px}
.year-h .pnl{font-size:18px;font-weight:700}
.muted-s{font-size:11px;color:var(--muted)}

.chart{display:flex;flex-direction:column;gap:6px;max-width:560px}
.bars{display:flex;gap:4px;align-items:flex-end}
.bar{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px;background:transparent;border:0;padding:0;color:inherit}
.bar:hover:not(:disabled){background:var(--hover)}
.bar:disabled{cursor:default}
.bar:focus-visible{outline-offset:1px}
.bar .v{font-size:10px;color:var(--muted);text-align:center;height:12px;line-height:12px;white-space:nowrap;overflow:hidden}
.bar .area{height:56px;display:flex;flex-direction:column;justify-content:flex-end;border-bottom:1px solid var(--strong)}
.bar .fill{height:0;background:var(--dim)}
.bar .fill.cur{background:var(--gain)} .bar .fill.neg{background:var(--loss)}
.bar .m{font-size:10.5px;text-align:center;color:var(--muted)}
.bar .m.cur{color:var(--bright)} .bar:disabled .m{color:var(--dim)}

.month{border:1px solid var(--strong)}
.month-h{background:var(--head);padding:10px 12px;align-items:center}
.month-h:hover{background:var(--hover)}
.month-h:focus-visible,.day-h:focus-visible{outline-offset:-1px}
.month.open>.month-h{border-bottom:1px solid var(--strong)}
.month-h .t{font-size:14px;font-weight:700;color:var(--bright);letter-spacing:.04em}
.inline-tot{display:flex;gap:12px;align-items:baseline}
.month-h .pnl{font-size:14px;font-weight:700}
.day+.day{border-top:1px solid var(--line)}
.day-h{padding:6px 12px;min-height:44px;align-items:center}
.day-h:hover{background:var(--hover)}
.day-h .l{display:flex;gap:12px;align-items:baseline}
.day-h .mk{font-size:12px;color:var(--muted)}
.day-h .dd{font-size:20px;font-weight:700;color:var(--bright)}
.day-h .dl{font-size:11px;color:var(--muted);letter-spacing:.08em}
.day-h .pnl{font-size:13px;font-weight:700}

/* entry table (desktop) */
.tbl{overflow-x:auto;border-top:1px solid var(--line)}
.tbl-in{min-width:940px}
.trow{display:grid;grid-template-columns:48px 60px 104px 104px 84px 108px 84px 104px minmax(160px,1fr) 124px;align-items:start}
.trow>span{padding:6px 10px;min-width:0}
.thead{background:var(--head);border-bottom:1px solid var(--strong);font-size:10.5px;font-weight:500;letter-spacing:.08em;color:var(--muted)}
.r{text-align:right}
.entry{font-size:12.5px;border-bottom:1px solid var(--line);cursor:pointer}
.entry:last-child{border-bottom:0}
.entry:hover{background:var(--hover)}
.entry:focus-visible{outline:1px solid var(--warn);outline-offset:-1px}
.entry.flash,.card.flash{background:var(--warnBg)}
.entry .no{color:var(--muted)}
.stack{display:flex;flex-direction:column;gap:2px}
.stack .s2{color:var(--muted);font-size:11px}
.apr{display:flex;flex-direction:column;align-items:flex-end;gap:2px;overflow-wrap:anywhere;text-align:right}
.wrapnum{overflow-wrap:anywhere}
.detail{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;line-height:1.45}
.detail b{color:var(--bright);font-weight:500}
.detail i{font-style:normal;color:var(--muted)}
.thumbs{display:flex;flex-wrap:wrap;gap:4px}
.thumb{width:34px;height:34px;padding:0;border:1px solid var(--strong);background:var(--hover);cursor:zoom-in;overflow:hidden;flex:none}
.thumb img{width:100%;height:100%;object-fit:cover;display:block}
.thumb:focus-visible{outline-offset:1px}
.tag1d{font-size:10px;color:var(--warn);border:1px solid var(--warn);padding:0 4px;letter-spacing:.06em}

/* entry cards (mobile) */
.cards{border-top:1px solid var(--line);display:flex;flex-direction:column}
.card{padding:10px 12px;border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:5px;cursor:pointer}
.card:last-child{border-bottom:0}
.card:hover{background:var(--hover)}
.card:focus-visible{outline:1px solid var(--warn);outline-offset:-1px}
.card .l1{display:flex;align-items:center;gap:8px}
.card .no{font-size:11px;color:var(--muted)}
.card .pl{font-size:13px;font-weight:700;color:var(--bright);flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.card .pill{font-size:13px}
.card .l2{display:flex;flex-wrap:wrap;justify-content:space-between;gap:4px 12px;font-size:11.5px;color:var(--sub)}
.card .l2 .a{display:flex;gap:6px;align-items:center}
.card .l2 .a .k{color:var(--muted)}
.card .l3{display:flex;gap:8px;align-items:center}
.card .l3 .d{flex:1;min-width:0;font-size:11.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.card .thumb{width:32px;height:32px}

/* FAB (mobile) */
.fab{position:fixed;right:max(16px,env(safe-area-inset-right));bottom:calc(16px + env(safe-area-inset-bottom));width:60px;height:60px;background:var(--btnBg);color:var(--btnInk);border:1px solid var(--btnBg);font-size:28px;font-weight:700;z-index:10}
.fab:hover{opacity:.88}

/* ---------- dialog ---------- */
.backdrop{position:fixed;inset:0;background:rgba(0,0,0,.8);display:flex;align-items:flex-start;justify-content:center;padding:12px;z-index:20;overflow:auto}
.dlg{width:100%;max-width:680px;max-height:calc(100dvh - 24px);margin-top:4vh;background:var(--bg);border:1px solid var(--strong);display:flex;flex-direction:column}
.dlg-h{background:var(--head);border-bottom:1px solid var(--strong);padding:0 16px;min-height:48px;display:flex;align-items:center;justify-content:space-between;gap:12px}
.dlg-h h2{margin:0;font-size:14px;font-weight:700;color:var(--bright);letter-spacing:.04em}
.dlg-h h2 span{color:var(--muted)}
.xbtn{width:var(--ctl);height:var(--ctl);border:1px solid var(--strong);background:var(--bg);color:var(--sub);font-size:14px;flex:none}
.xbtn:hover{color:var(--bright);border-color:var(--muted)}
.dlg-b{padding:16px;display:flex;flex-direction:column;gap:14px;overflow-y:auto;flex:1}
.row2{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}
.row3{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px}
.fld{display:flex;flex-direction:column;gap:6px;min-width:0}
.fld-l{display:flex;justify-content:space-between;gap:6px;font-size:10.5px;letter-spacing:.08em;color:var(--muted);font-weight:500}
.fld-l .opt{color:var(--dim)}
.inp{height:var(--btn);border:1px solid var(--strong);background:var(--bg);padding:0 10px;font-size:13px;outline:none;width:100%}
.inp:focus{border-color:var(--warn)}
.inp.bad,.money.bad{border-color:var(--loss)}
textarea.inp{height:auto;padding:8px 10px;resize:vertical;line-height:1.5}
.money{height:var(--btn);border:1px solid var(--strong);display:flex;align-items:center;padding-left:10px}
.money:focus-within{border-color:var(--warn)}
.money .cur{color:var(--muted);font-size:13px}
.money input{flex:1;min-width:0;height:100%;background:transparent;border:0;text-align:right;padding:0 10px;font-size:13px;outline:none}
.money input.pnlv{font-weight:700}
.err{font-size:11px;color:var(--loss)}
.pm{display:flex;gap:8px}
.pm button{background:transparent;border:0;padding:0;font-size:10.5px;letter-spacing:.08em;color:var(--muted)}
.pm button[aria-pressed="true"]{color:var(--bright);box-shadow:inset 0 -1px 0 var(--bright)}
.netline{display:flex;justify-content:flex-end;gap:8px;font-size:12px;color:var(--muted);margin-top:-6px;flex-wrap:wrap}
.netline .pill{padding:0 6px}
.preview{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));border:1px solid var(--strong);background:var(--head)}
.preview>div{padding:10px 12px;display:flex;flex-direction:column;gap:4px;min-width:0}
.preview>div+div{border-left:1px solid var(--strong)}
.preview .pv{font-size:18px;font-weight:700;color:var(--bright);overflow-wrap:anywhere}
.suggest{border:1px solid var(--strong);border-top:0;margin-top:-6px;display:flex;flex-direction:column}
.suggest button{text-align:left;padding:8px 10px;background:var(--bg);border:0;border-bottom:1px solid var(--line);color:var(--sub);font-size:12.5px}
.suggest button:last-child{border-bottom:0}
.suggest button:hover,.suggest button.act{background:var(--hover);color:var(--bright)}
.up{color:var(--warn)}
.drop{border:1px dashed var(--strong);min-height:76px;padding:8px;display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.drop.over{border-color:var(--warn);background:var(--warnBg)}
.fimg{width:76px;height:76px;border:1px solid var(--strong);position:relative;background:var(--hover)}
.fimg img{width:100%;height:100%;object-fit:cover;display:block}
.fimg.pending img{opacity:.45}
.fimg button{position:absolute;top:-1px;right:-1px;width:24px;height:24px;background:var(--bg);border:1px solid var(--strong);font-size:12px;padding:0}
.fimg button:hover{border-color:var(--loss);color:var(--loss)}
.drop .hint{flex:1;min-width:200px;display:flex;align-items:center;justify-content:center;gap:6px;font-size:12px;color:var(--muted);text-align:center}
.drop.over .hint{color:var(--warn)}
.drop .hint button{background:transparent;border:0;padding:0;color:var(--ink);text-decoration:underline;font-size:12px}
.drop .hint button:hover{color:var(--bright)}
.dlg-err{background:var(--lossBg);border-top:1px solid var(--loss);padding:8px 16px;font-size:12px;color:var(--loss)}
.dlg-f{background:var(--head);border-top:1px solid var(--strong);padding:10px 16px calc(10px + env(safe-area-inset-bottom));display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px}
.dlg-f .rt{display:flex;gap:8px}

@media (max-width:759px){
  .summary{grid-template-columns:repeat(2,minmax(0,1fr))}
  .stat .val{font-size:18px}
  .backdrop{align-items:flex-end;padding:0}
  .dlg{max-width:100%;height:calc(100dvh - env(safe-area-inset-top) - 8px);max-height:100dvh;margin-top:0}
}

/* ---------- lightbox ---------- */
.lightbox{position:fixed;inset:0;background:rgba(0,0,0,.94);display:flex;align-items:center;justify-content:center;padding:24px;z-index:30;cursor:zoom-out}
.lightbox img{max-width:100%;max-height:100%;border:1px solid var(--strong);display:block}
