/* ---------- components/transactions/transactions.css ---------- */
/* ===== transactions =====
   The entries list: day groups, rows (date tile at the left), balance card, draft rows and the in-place edit form. */
#sum:empty{display:none}
.row{display:flex;align-items:center;gap:12px;padding:5px 14px;transition:background .12s}   /* compact: tight vertical padding and line heights (sides unchanged, so the day totals still line up) */
.row+.row{border-top:1px solid var(--line)}
.row .m{display:flex;flex-direction:column;align-items:flex-start;gap:0}
.row .m .a{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.row .m .s{display:flex;flex-direction:column;gap:0;min-width:0;max-width:100%;overflow:hidden}
.row .sd{font-size:13px;line-height:1.2;color:var(--text);opacity:.82;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media (hover:hover){.row:not(.editing):hover{background:var(--bg)}.row .x{opacity:0;transition:opacity .12s}.row:hover .x,.row .x.arm,.row .x:focus-visible{opacity:1}}
.row .m{flex:1;min-width:0}.row .a{font-weight:600}.row .s{font-size:13px;color:var(--mute);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.row .v{font-variant-numeric:tabular-nums;font-weight:700;font-size:16px;white-space:nowrap}.row .v.pos{color:var(--accent)}.row .v.neg{color:var(--err)}
.row .m .acct{font-size:15.5px;font-weight:700;border-bottom:0;line-height:1.2}
.row .acct:hover{color:var(--accent)}
.row .vb{display:flex;flex-direction:column;align-items:flex-end;gap:1px;flex:none}
.row .bl{font-size:11px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums;white-space:nowrap}
.dtile{width:40px;height:40px;flex:none;border-radius:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1.1;color:#fff;font-variant-numeric:tabular-nums}
.dtile b{font-size:15px;font-weight:700}.dtile small{font-size:11px;font-weight:500}
/* date tile: tinted green for money in, tinted red for money out (the accent and error colours follow light and dark mode), grey for a draft */
.dtile.up{background:color-mix(in srgb,var(--accent) 18%,var(--card));color:var(--accent)}.dtile.dn{background:color-mix(in srgb,var(--err) 18%,var(--card));color:var(--err)}.dtile.dr{background:#6b6a63}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .dtile.dr{background:#4f4d47}}
:root[data-theme="dark"] .dtile.dr{background:#4f4d47}
.empty{color:var(--mute);font-size:14px;text-align:center;padding:34px 10px;background:var(--card);border:1px dashed var(--line);border-radius:14px}
:root{--xcol:46px}
.gh{display:flex;justify-content:space-between;align-items:baseline;font-size:12px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--mute);margin:12px 4px 5px;padding-right:calc(var(--xcol) - 4px)}
.gh .gt{display:inline-flex;align-items:baseline;gap:8px;white-space:nowrap;font-variant-numeric:tabular-nums;color:var(--text);font-size:14px;padding:3px 10px;margin-right:-10px;border-radius:99px;background:color-mix(in srgb,var(--text) 7%,transparent)}
.gh .gt.neg{background:color-mix(in srgb,var(--err) 12%,transparent)}
.gh .gt.pos{background:color-mix(in srgb,var(--accent) 14%,transparent)}
.gc{background:var(--card);border:1px solid var(--line);border-radius:14px;overflow:hidden;box-shadow:0 1px 2px rgba(0,0,0,.03)}
.gh .gt small{color:var(--mute);font-size:11px;font-weight:500;text-transform:none;letter-spacing:0;margin-right:0}
.gh .gt.pos{color:var(--accent)}
.gh .gt.neg{color:var(--err)}
.dh{width:100%;min-width:0;border:1px solid var(--line);background:var(--bg);color:var(--text);border-radius:6px;padding:7px 9px;font:inherit;font-size:14px}
.dh.am{text-align:right}.dh.bad{outline:2px solid var(--err);outline-offset:-1px}
.row{touch-action:manipulation}
.row.editing{background:color-mix(in srgb,var(--accent) 8%,transparent);box-shadow:inset 3px 0 0 var(--accent)}
.row.editing .x,.row.draft .x{opacity:1}
.row.draft .dq{width:132px;flex:none}
.ok{width:32px;height:32px;padding:0;border-radius:8px;background:var(--accent);color:var(--bg);font-size:16px;flex:none}

/* ---------- loading effects ---------- */
#ldbar{position:fixed;top:0;left:0;width:100%;height:2px;z-index:9999;pointer-events:none;opacity:0;transition:opacity .2s;background:linear-gradient(90deg,transparent,var(--accent),transparent)}
#ldbar.on{opacity:1;animation:ldb 1.1s ease-in-out infinite}
@keyframes ldb{from{transform:translateX(-100%)}to{transform:translateX(100%)}}
#list,#sum,#pager{transition:opacity .15s}
body.ld #list,body.ld #sum,body.ld #pager{opacity:.55}
#list{position:relative}
#list.fin{animation:lfin .2s ease}
@keyframes lfin{from{opacity:.4;transform:translateY(3px)}to{opacity:1;transform:none}}
body.ld2 #list::after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(100deg,transparent 30%,color-mix(in srgb,var(--text) 9%,transparent) 50%,transparent 70%);background-size:250% 100%;animation:lsh 1.2s linear infinite}
body.ld2 #list:empty::before{content:"";display:block;height:150px;border-radius:12px;background:repeating-linear-gradient(var(--line) 0 44px,transparent 44px 54px)}
@keyframes lsh{from{background-position:100% 0}to{background-position:-100% 0}}
@media (prefers-reduced-motion:reduce){#ldbar.on,#list.fin,body.ld2 #list::after{animation:none}}

/* ---- edit mode: the row keeps its normal layout; only the texts become boxes that look like the texts (thin line under them) ---- */
.row.editing .m .s{flex-direction:row;flex-wrap:wrap;align-items:center;gap:0 8px;width:100%;overflow:visible}
.row.editing .m{align-items:stretch}
.row.editing .m .a{overflow:visible}
.ei{min-width:0;border:0;border-bottom:1px solid var(--line);border-radius:0;background:transparent;color:var(--text);font:inherit;line-height:1.2;padding:1px 0;margin:0}
.ei:focus{outline:none;border-bottom-color:var(--accent)}
.ei.bad{border-bottom-color:var(--err);color:var(--err)}
.ei.ea{width:100%;font-size:15.5px;font-weight:700}
.ei.ed{flex:1 1 90px;font-size:13px;opacity:.82}
.ei.edt{flex:none;width:118px;font-size:12px;color:var(--mute)}
.ei.eam{width:96px;text-align:right;font-size:16px;font-weight:700;font-variant-numeric:tabular-nums}
.row.editing .vb{align-items:flex-end}
@media (max-width:560px){.ei.eam{width:80px}.row.editing{gap:8px}.ok{width:30px;height:30px}}

/* ---- tinted cards: every entry is its own card (green tint for +, red tint for -) ---- */
.gc{background:transparent;border:0;box-shadow:none;border-radius:0;overflow:visible;position:relative}
.row{position:relative;margin:0 0 8px;padding:8px 14px;border:1px solid var(--line);border-radius:12px;background:var(--card);transition:transform .15s ease,background .12s}
.row+.row{border-top:1px solid var(--line)}
.row:last-child{margin-bottom:0}
.row:not(.editing):has(.v.pos){background:color-mix(in srgb,var(--accent) 12%,var(--card));border-color:color-mix(in srgb,var(--accent) 30%,transparent)}
.row:not(.editing):has(.v.neg){background:color-mix(in srgb,var(--err) 12%,var(--card));border-color:color-mix(in srgb,var(--err) 30%,transparent)}
@media (hover:hover){.row:not(.editing):hover{transform:translateX(3px)}}
@media (prefers-reduced-motion:reduce){.row{transition:none}}

.row{flex-wrap:wrap;row-gap:0}

/* ---- phone: our own number pad for typing a draft's Amount (the iPhone keyboard is not used there) ---- */
#dkpad,#dkspace{display:none}
.dq[readonly]{caret-color:transparent;-webkit-user-select:none;user-select:none}
@keyframes dkup{from{transform:translateY(100%)}to{transform:none}}
@media (max-width:560px){
  .row.draft{scroll-margin-bottom:var(--dp-h,300px)}
  .dq.dp-on{outline:2px solid var(--accent);outline-offset:1px}
  html.dp-open #dkspace{display:block;height:var(--dp-h,300px)}
  #dkpad.on{display:block;position:fixed;left:0;right:0;bottom:0;z-index:70;background:var(--card);border-top:1px solid var(--line);padding:8px 10px calc(8px + env(safe-area-inset-bottom));box-shadow:0 -6px 20px rgba(0,0,0,.12);animation:dkup .16s ease-out}
  #dkpad .dp-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
  #dkpad .dp-grid button{height:42px;border:0;border-radius:12px;background:var(--bg);color:var(--text);font-size:20px;font-weight:600;touch-action:manipulation;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
  #dkpad .dp-grid button:active{background:color-mix(in srgb,var(--text) 14%,var(--bg))}
  #dkpad .dp-grid .fn{background:color-mix(in srgb,var(--text) 9%,var(--bg));font-size:18px}
  #dkpad .dp-grid .bk{font-size:15px}
  #dkpad .dp-grid .nx{grid-column:span 2;background:var(--accent);color:var(--bg);font-size:17px;font-weight:700}
  #dkpad .dp-grid .nx:active{background:var(--accent);opacity:.85}
}
@media (prefers-reduced-motion:reduce){#dkpad.on{animation:none}}

/* ---- faded time next to the account name: shows only while the mouse is on the row ---- */
.row .m .a{display:flex;align-items:baseline;gap:8px}
.row .tm{font-size:11.5px;font-weight:500;color:var(--mute);font-variant-numeric:tabular-nums;white-space:nowrap;flex:none}
@media (hover:hover){.row .tm{opacity:0;transition:opacity .15s}.row:hover .tm{opacity:.6}}
/* date tile of a STARRED entry: gold. Tap any date tile to star / un-star the entry */
.dtile.star{background:#FFC83D;color:#4A3200}
.row:not(.editing) .dtile{cursor:pointer;transition:transform .12s}
.row:not(.editing) .dtile:active{transform:scale(.9)}


/* ===== NEW DESIGN: floating outlined cards =====
   Each entry is a rounded floating card with a very light tint and a green (money in) or red (money out) outline.
   The date tile is dark in light mode and light in dark mode, with a slight green / red tint. Tagged tiles (.bw) are left alone. */
.row{border-radius:16px;margin:0 0 10px;box-shadow:0 4px 12px rgba(0,0,0,.12)}
.row:not(.editing):has(.v.pos){background:color-mix(in srgb,var(--accent) 7%,var(--card));border:1.5px solid var(--accent)}
.row:not(.editing):has(.v.neg){background:color-mix(in srgb,var(--err) 7%,var(--card));border:1.5px solid var(--err)}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .row{box-shadow:0 4px 12px rgba(0,0,0,.4)}}
:root[data-theme="dark"] .row{box-shadow:0 4px 12px rgba(0,0,0,.4)}

/* date tiles, light mode: dark tile, white date, slight tint */
.dtile.up:not(.bw){background:color-mix(in srgb,var(--accent) 22%,#1a1a18);color:#fff}
.dtile.dn:not(.bw){background:color-mix(in srgb,var(--err) 22%,#1a1a18);color:#fff}
/* date tiles, dark mode: light tile, dark date, slight tint */
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]) .dtile.up:not(.bw){background:color-mix(in srgb,var(--accent) 22%,#fff);color:#1a1a18}
  :root:not([data-theme="light"]) .dtile.dn:not(.bw){background:color-mix(in srgb,var(--err) 22%,#fff);color:#1a1a18}
}
:root[data-theme="dark"] .dtile.up:not(.bw){background:color-mix(in srgb,var(--accent) 22%,#fff);color:#1a1a18}
:root[data-theme="dark"] .dtile.dn:not(.bw){background:color-mix(in srgb,var(--err) 22%,#fff);color:#1a1a18}
/* the amount is the click spot that opens the edit form */
.row:not(.editing):not(.draft) .vb{cursor:pointer}
