/* ═══════════════════════════════════════════════════════════════════
   app.css  –  Harthena  Core Styles
   ═══════════════════════════════════════════════════════════════════ */

:root{
  --bg:#eeede8;--card:#fff;--card2:#f5f5f0;--text:#1a1a18;--text2:#6b6b66;
  --blight:rgba(0,0,0,0.10);--bmid:rgba(0,0,0,0.18);
  --green:#1D9E75;--gdark:#0F6E56;--glight:#E1F5EE;--gtext:#0F6E56;
  --blue:#185FA5;--bdark:#0c447c;--blight2:#E6F1FB;--btext:#185FA5;
  --pur:#534AB7;--purlight:#EEEDFE;
  --amb:#FAEEDA;--ambt:#854F0B;
  --red:#E24B4A;--rlight:#FCEBEB;--rtext:#A32D2D;
  --rad:10px;--radl:14px;--shad:0 1px 4px rgba(0,0,0,0.07);
}
@media(prefers-color-scheme:dark){:root{
  --bg:#2e2e2b;--card:#1e1e1c;--card2:#272725;--text:#f0efe8;--text2:#a0a09a;
  --blight:rgba(255,255,255,0.10);--bmid:rgba(255,255,255,0.18);
  --glight:#0a3327;--gtext:#5DCAA5;
  --blight2:#071e38;--btext:#85B7EB;
  --purlight:#1a1840;
  --amb:#2a1a00;--ambt:#FAC775;
  --rlight:#2e0e0e;--rtext:#F09595;
}}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent;}
body{font-family:-apple-system,'Segoe UI',system-ui,sans-serif;background:var(--bg);color:var(--text);min-height:100vh;font-size:16px;line-height:1.5;}
#app{max-width:480px;margin:0 auto;min-height:100vh;background:var(--bg);}
.screen{display:none;padding:1rem;}
.screen.active{display:block;}
h2{font-size:20px;font-weight:600;margin-bottom:4px;}
h3{font-size:16px;font-weight:600;margin-bottom:10px;}
.btn{display:block;width:100%;padding:15px 20px;font-size:16px;font-weight:500;border:1px solid var(--bmid);border-radius:var(--radl);background:var(--card);color:var(--text);cursor:pointer;text-align:center;margin-bottom:12px;-webkit-appearance:none;font-family:inherit;}
.btn:active{background:var(--card2);}
.btn-green{background:var(--ch-accent,var(--green));color:#fff;border-color:var(--ch-accent,var(--green));}
.btn-green:active{background:var(--ch-accent,var(--gdark));filter:brightness(0.88);}
.btn-blue{background:var(--blue);color:#fff;border-color:var(--blue);}
.btn-blue:active{background:var(--bdark);}
.btn-red{background:var(--rlight);color:var(--rtext);border-color:var(--rtext);}
.btn-amb{background:var(--amb);color:var(--ambt);border-color:var(--ambt);}
.btn-ghost{background:transparent;border-color:var(--bmid);color:var(--text2);}
.btn-inline{display:inline-block;width:auto;padding:10px 20px;margin-bottom:0;}
.btn-sm{padding:10px 16px;font-size:14px;margin-bottom:8px;}
.card{background:var(--card);border:1px solid var(--blight);border-radius:var(--radl);padding:1rem 1.25rem;margin-bottom:14px;box-shadow:var(--shad);}
.bal-cards{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:18px;}
.bal-card{color:#fff;border-radius:var(--radl);padding:1.1rem 1rem;text-align:center;}
.bal-card .lbl{font-size:11px;opacity:.85;margin-bottom:3px;letter-spacing:.5px;text-transform:uppercase;}
.bal-card .amt{font-size:28px;font-weight:700;letter-spacing:-0.5px;}
.bal-card .rate{font-size:11px;opacity:.8;margin-top:3px;}
.tx-row{display:flex;justify-content:space-between;align-items:flex-start;padding:13px 0;border-bottom:1px solid var(--blight);}
.tx-row.tap{cursor:pointer;}
.tx-row:last-child{border-bottom:none;}
.tx-desc{font-size:15px;font-weight:500;}
.tx-date{font-size:12px;color:var(--text2);margin-top:3px;}
.tx-amt{font-size:16px;font-weight:600;}
.pos{color:var(--ch-income,var(--green));}.neg{color:var(--ch-spend,var(--red));}.trc{color:var(--ch-transfer,var(--blue));}
.badge{display:inline-block;font-size:11px;padding:2px 9px;border-radius:20px;font-weight:600;margin-top:3px;}
.b-in{background:var(--glight);color:var(--gtext);}
.b-out{background:var(--rlight);color:var(--rtext);}
.b-auto{background:var(--amb);color:var(--ambt);}
.b-tr{background:var(--blight2);color:var(--btext);}
.b-int{background:var(--purlight);color:var(--pur);}
/* Category tag — shown on both parent and child transaction rows */
.tx-cat-row{margin-top:3px;}
.child-grid{display:grid;gap:12px;margin-bottom:16px;}
.child-btn{padding:20px 12px;text-align:center;border:1px solid var(--blight);border-radius:var(--radl);background:var(--card);cursor:pointer;box-shadow:var(--shad);}
.child-btn:active{background:var(--card2);}
.child-btn-wide{display:flex;align-items:center;gap:14px;padding:16px;border:1px solid var(--blight);border-radius:var(--radl);background:var(--card);cursor:pointer;margin-bottom:0;box-shadow:var(--shad);width:100%;}
.child-btn-wide:active{background:var(--card2);}
.av{width:56px;height:56px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:28px;margin:0 auto 8px;flex-shrink:0;background:var(--card2);}
.av-sm{width:44px;height:44px;font-size:22px;margin:0;}
.av-p{width:46px;height:46px;font-size:15px;margin:0;background:var(--purlight);border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;color:var(--pur);}
.topbar{display:flex;align-items:center;gap:10px;padding:12px 0 16px;border-bottom:1px solid var(--blight);margin-bottom:18px;}
.topbar h2{margin:0;flex:1;}
.back-btn{font-size:22px;cursor:pointer;color:var(--ch-accent,var(--text2));background:none;border:none;padding:4px 10px;line-height:1;}
.top-act{font-size:13px;font-weight:600;color:var(--ch-accent,var(--green));background:none;border:none;cursor:pointer;padding:4px 2px;}
label{font-size:13px;color:var(--text2);display:block;margin-bottom:5px;font-weight:500;}
input[type=text],input[type=number],input[type=date],select{width:100%;font-size:16px;padding:12px 14px;border:1px solid var(--bmid);border-radius:var(--rad);background:var(--card);color:var(--text);margin-bottom:14px;-webkit-appearance:none;font-family:inherit;}
input:focus,select:focus{outline:2px solid var(--ch-accent,var(--green));outline-offset:1px;}
.fg{margin-bottom:2px;}
.two-col{display:flex;gap:12px;}
.two-col>*{flex:1;min-width:0;}
.ferr{font-size:13px;color:var(--rtext);margin:-10px 0 10px;}

/* ── Tab bar ──────────────────────────────────────────────────────── */
.tab-bar{display:flex;gap:8px;margin-bottom:18px;}
.tab{flex:1;padding:11px;text-align:center;font-size:13px;font-weight:600;border:1px solid var(--blight);border-radius:var(--rad);cursor:pointer;color:var(--text2);background:var(--card2);}
.tab.on{background:var(--ch-accent,var(--green));color:#fff;border-color:var(--ch-accent,var(--green));}
.tab.on-blue{background:var(--blue);color:#fff;border-color:var(--blue);}

/* Scrollable tab bar — retained for possible child-side use */
.tab-bar-scroll{display:flex;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:thin;flex-wrap:nowrap;margin-left:-1rem;margin-right:-1rem;padding-left:1rem;padding-right:1rem;width:calc(100% + 2rem);box-sizing:border-box;}
.tab-bar-scroll::-webkit-scrollbar{height:3px;}
.tab-bar-scroll::-webkit-scrollbar-thumb{background:var(--bmid);border-radius:3px;}
.tab-bar-scroll::-webkit-scrollbar-track{background:transparent;}
.tab-bar-scroll .tab{flex:0 0 auto;white-space:nowrap;}

/* ── Parent-child overview summary cards ──────────────────────────── */
.pc-sum-card{display:flex;align-items:center;gap:14px;padding:14px 16px;cursor:pointer;-webkit-tap-highlight-color:transparent;}
.pc-sum-card + .pc-sum-card{border-top:1px solid var(--blight);}
.pc-sum-card:active{background:var(--card2);}
.pc-sum-icon{font-size:24px;width:34px;text-align:center;flex-shrink:0;}
.pc-sum-body{flex:1;min-width:0;}
.pc-sum-label{font-size:15px;font-weight:600;color:var(--text);}
.pc-sum-sub{font-size:12px;color:var(--text2);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.pc-sum-right{display:flex;align-items:center;gap:6px;flex-shrink:0;}
.pc-sum-value{font-size:13px;font-weight:700;color:var(--text2);text-align:right;}
.pc-sum-green{color:var(--gtext);}
.pc-sum-blue{color:var(--btext);}
.pc-sum-amber{color:var(--ambt);}
.pc-sum-purple{color:var(--pur);}
.pc-sum-arrow{font-size:20px;color:var(--text2);opacity:.4;}

.empty{text-align:center;padding:2.5rem 1rem;color:var(--text2);font-size:14px;line-height:1.7;}

/* Child feature button notification badge */
.ch-btn-badge{display:inline-block;background:#E24B4A;color:#fff;border-radius:20px;font-size:11px;font-weight:700;padding:1px 7px;margin-left:6px;vertical-align:middle;}
#screen-child .empty,
#screen-child-settings .empty,
#screen-goals .empty,
#screen-edit-goal .empty,
#screen-wishlist .empty,
#screen-edit-wish .empty,
#screen-spending .empty,
#screen-projector .empty,
#screen-shopping .empty,
#screen-shopping-add .empty { color:var(--text); opacity:0.6; }
.pin-dots{display:flex;gap:14px;justify-content:center;margin:18px 0;min-height:28px;align-items:center;}
/* Dots are rendered dynamically by pp() — one per digit typed.
   Pop-in animation gives tactile feedback; pop-out on delete.    */
@keyframes pin-dot-in{from{transform:scale(0);opacity:0;}to{transform:scale(1);opacity:1;}}
@keyframes pin-dot-out{from{transform:scale(1);opacity:1;}to{transform:scale(0);opacity:0;}}
.pin-dot{width:18px;height:18px;border-radius:50%;background:var(--ch-accent,var(--green));animation:pin-dot-in 0.12s cubic-bezier(0.34,1.56,0.64,1) forwards;}
.pin-dot.removing{animation:pin-dot-out 0.08s ease-in forwards;}
.pin-submit{max-width:280px;margin:4px auto 12px;display:block;}
.pin-submit:disabled{opacity:0.38;cursor:not-allowed;}
.pin-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;max-width:280px;margin:0 auto;}
.pk{padding:18px;font-size:24px;font-weight:600;text-align:center;border:1px solid var(--blight);border-radius:var(--radl);cursor:pointer;background:var(--card);color:var(--text);user-select:none;box-shadow:var(--shad);}
.pk:active{background:var(--card2);}
.pk-lbl{font-size:13px;color:var(--text2);}
.pst{min-height:22px;text-align:center;font-size:14px;margin-bottom:6px;}
.pst.err{color:var(--rtext);}
.pst.info{color:var(--text2);}
.pst.ok{color:var(--gtext);}
.icon-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin-bottom:14px;}
.icon-opt{width:100%;aspect-ratio:1;font-size:28px;display:flex;align-items:center;justify-content:center;border:2px solid var(--blight);border-radius:var(--rad);cursor:pointer;background:var(--card2);}
.icon-opt.sel{border-color:var(--ch-accent,var(--green));background:var(--glight);}
.info-row{display:flex;justify-content:space-between;align-items:center;padding:10px 0;border-bottom:1px solid var(--blight);font-size:14px;}
.info-row:last-child{border-bottom:none;}
.info-lbl{color:var(--text2);}
.tog-row{display:flex;justify-content:space-between;align-items:center;padding:6px 0 10px;}
.tog{width:48px;height:28px;background:var(--bmid);border-radius:14px;position:relative;cursor:pointer;transition:background .2s;border:none;flex-shrink:0;}
.tog.on{background:var(--green);}
.tog::after{content:'';position:absolute;width:22px;height:22px;background:#fff;border-radius:50%;top:3px;left:3px;transition:left .2s;}
.tog.on::after{left:23px;}
.sec{font-size:11px;font-weight:700;letter-spacing:.8px;text-transform:uppercase;color:var(--text2);margin:18px 0 8px;}
.al-next{font-size:12px;color:var(--text2);margin-top:2px;}
.del-row{display:flex;justify-content:center;margin-top:4px;}
.sum-bal{font-size:13px;font-weight:700;color:var(--green);margin-top:2px;}
.sum-sv{font-size:11px;color:var(--btext);margin-top:1px;}
.overlay{display:none;position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.5);z-index:50;align-items:flex-end;justify-content:center;}
.overlay.on{display:flex;}
.ov-box{background:var(--card);border-radius:var(--radl) var(--radl) 0 0;padding:1.5rem 1.25rem;width:100%;max-width:480px;max-height:85vh;overflow-y:auto;-webkit-overflow-scrolling:touch;box-sizing:border-box;}
.ov-title{font-size:18px;font-weight:600;margin-bottom:8px;}
.ov-body{font-size:14px;color:var(--text2);margin-bottom:16px;line-height:1.6;}
.ov-btns{display:flex;gap:10px;}
.ov-btns .btn{margin-bottom:0;flex:1;}
#sync{position:fixed;bottom:0;left:0;right:0;padding:10px;text-align:center;font-size:13px;font-weight:600;display:none;z-index:99;}
#sync.sav{background:var(--amb);color:var(--ambt);display:block;}
#sync.err{background:var(--rlight);color:var(--rtext);display:block;}
#sync.ok{background:var(--glight);color:var(--gtext);display:block;}
#screen-loading.active{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;gap:16px;}
#screen-loading p{color:var(--text2);font-size:14px;}

/* ── Feature additions ────────────────────────────────────────────── */
.prog-wrap{background:var(--card2);border-radius:20px;height:14px;overflow:hidden;margin:8px 0 4px;}
.prog-bar{height:100%;border-radius:20px;transition:width .4s;}
.goal-card{background:var(--card);border:1px solid var(--blight);border-radius:var(--radl);padding:1rem 1.25rem;margin-bottom:10px;box-shadow:var(--shad);}
.goal-icon{font-size:32px;margin-bottom:6px;display:block;}
.cat-chip{display:inline-block;font-size:11px;padding:2px 8px;border-radius:20px;font-weight:600;margin-top:3px;border:1px solid var(--blight);}
.wish-card{background:var(--card);border:1px solid var(--blight);border-radius:var(--radl);padding:12px 1.25rem;margin-bottom:8px;display:flex;align-items:center;gap:12px;box-shadow:var(--shad);}
.wish-icon{font-size:26px;flex-shrink:0;}
.wish-body{flex:1;min-width:0;}
.wish-name{font-size:15px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.wish-cost{font-size:13px;color:var(--text2);}
.proj-row{display:flex;justify-content:space-between;align-items:center;padding:10px 0;border-bottom:1px solid var(--blight);font-size:14px;}
.proj-row:last-child{border-bottom:none;}
.proj-val{font-weight:700;color:var(--ch-accent,var(--green));}
.chart-wrap{margin:8px 0 4px;}
.chart-bar-row{display:flex;align-items:center;gap:8px;margin-bottom:6px;}
.chart-bar-lbl{font-size:12px;color:var(--text2);width:80px;text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.chart-bar-track{flex:1;background:var(--card2);border-radius:6px;height:18px;overflow:hidden;}
.chart-bar-fill{height:100%;border-radius:6px;}
.chart-bar-amt{font-size:12px;font-weight:600;width:48px;text-align:right;}
.feat-tog-row{display:flex;justify-content:space-between;align-items:center;padding:10px 0;border-bottom:1px solid var(--blight);font-size:14px;}
.feat-tog-row:last-child{border-bottom:none;}
.feat-tog-lbl{color:var(--text);}
.feat-tog-sub{font-size:12px;color:var(--text2);margin-top:2px;}
.spin{width:32px;height:32px;border:3px solid var(--blight);border-top-color:var(--green);border-radius:50%;animation:sp .8s linear infinite;}
@keyframes sp{to{transform:rotate(360deg);}}
.wizard-step{display:none;}
.wizard-step.active{display:block;}
.step-dots{display:flex;gap:6px;justify-content:center;margin-bottom:24px;}
.step-dot{width:8px;height:8px;border-radius:50%;background:var(--blight);}
.step-dot.on{background:var(--green);}
.child-setup-card{border:2px solid var(--blight);border-radius:var(--radl);padding:1rem;margin-bottom:10px;}
.child-setup-card.sel{border-color:var(--green);}

/* ── Settings nav list ────────────────────────────────────────────── */
.settings-nav-row{display:flex;align-items:center;gap:14px;padding:14px 16px;cursor:pointer;-webkit-tap-highlight-color:transparent;}
.settings-nav-row:active{background:var(--card2);}
.settings-nav-icon{font-size:22px;width:32px;text-align:center;flex-shrink:0;}
.settings-nav-body{flex:1;min-width:0;}
.settings-nav-label{font-size:15px;font-weight:500;color:var(--text);}
.settings-nav-sub{font-size:12px;color:var(--text2);margin-top:2px;}
.settings-nav-arrow{font-size:20px;color:var(--text2);opacity:.5;flex-shrink:0;}

/* ── Parent dashboard ─────────────────────────────────────────────── */
.dash-card{padding:0;margin-bottom:16px;}
.dash-item{display:flex;align-items:center;gap:12px;padding:13px 16px;cursor:pointer;}
.dash-item + .dash-item{border-top:1px solid var(--blight);}
.dash-item:active{background:var(--card2);}
.dash-item-icon{font-size:20px;flex-shrink:0;}
.dash-item-text{flex:1;font-size:14px;font-weight:500;}
.dash-item-arrow{font-size:18px;color:var(--text2);opacity:.5;flex-shrink:0;}
.dash-item-green .dash-item-text{color:var(--gtext);}
.dash-item-amber .dash-item-text{color:var(--ambt);}
.dash-item-green{background:var(--glight);}
.dash-item-amber{background:var(--amb);}
.dash-item-green:active,.dash-item-amber:active{filter:brightness(0.96);}


/* ═══════════════════════════════════════════════════════════════════
   CHILD DASHBOARD — UI MODE STYLES
   ═══════════════════════════════════════════════════════════════════ */

/* ── Standard mode: horizontal chip strip ───────────────────────── */
.ch-chip-strip {
  display: flex;
  flex-direction: row;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
  gap: 8px;
  padding: 4px 0 10px;
  margin-bottom: 4px;
}
.ch-chip-strip::-webkit-scrollbar { display: none; }

.ch-chip {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
  flex: 0 0 auto;
  min-width: 64px;
  padding: 10px 8px 8px;
  background: var(--ch-feat-btn-bg, var(--card));
  border: 1px solid var(--blight);
  border-radius: var(--radl);
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
  position: relative;
  box-shadow: var(--shad);
}
.ch-chip:active { background: var(--ch-feat-btn-bg, var(--card2)); filter: brightness(0.93); transform: scale(0.95); }

.ch-chip-icon-wrap {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.ch-chip-icon {
  font-size: 24px;
  line-height: 1;
  display: block;
}
.ch-chip-lbl {
  font-size: 10px;
  font-weight: 600;
  color: var(--ch-feat-btn-text, var(--text));
  text-align: center;
  white-space: nowrap;
  max-width: 72px;
  overflow: hidden;
  text-overflow: ellipsis;
}
.ch-chip-badge {
  position: absolute;
  top: -5px;
  right: -7px;
  background: #E24B4A;
  color: #fff;
  border-radius: 20px;
  font-size: 10px;
  font-weight: 700;
  min-width: 15px;
  height: 15px;
  line-height: 15px;
  text-align: center;
  padding: 0 3px;
  box-sizing: border-box;
}

/* ── Simple mode: large tiles for young children ────────────────── */
.ch-simple-tiles {
  display: flex;
  flex-direction: column;
  gap: 10px;
  margin-bottom: 14px;
}
.ch-simple-tile {
  display: flex;
  align-items: center;
  gap: 16px;
  width: 100%;
  padding: 18px 20px;
  background: var(--ch-feat-btn-bg, var(--card));
  border: 1px solid var(--blight);
  border-radius: var(--radl);
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
  position: relative;
  box-shadow: var(--shad);
}
.ch-simple-tile:active { background: var(--ch-feat-btn-bg, var(--card2)); filter: brightness(0.93); }
.ch-simple-icon {
  font-size: 36px;
  flex-shrink: 0;
  line-height: 1;
}
.ch-simple-lbl {
  font-size: 18px;
  font-weight: 600;
  color: var(--ch-feat-btn-text, var(--text));
  flex: 1;
  text-align: left;
}
.ch-simple-badge {
  background: #E24B4A;
  color: #fff;
  border-radius: 20px;
  font-size: 13px;
  font-weight: 700;
  min-width: 24px;
  height: 24px;
  line-height: 24px;
  text-align: center;
  padding: 0 6px;
  flex-shrink: 0;
}

/* ── Edit child: view mode selector ────────────────────────────── */
.ec-mode-opts {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: 4px;
}
.ec-mode-opt {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 14px;
  border: 2px solid var(--blight);
  border-radius: var(--radl);
  cursor: pointer;
  background: var(--card2);
  -webkit-tap-highlight-color: transparent;
}
.ec-mode-opt:has(input:checked) {
  border-color: var(--ch-accent, var(--green));
  background: var(--glight);
}
.ec-mode-opt input[type="radio"] {
  display: none;   /* hidden — selection shown via border colour */
}
.ec-mode-icon {
  font-size: 24px;
  flex-shrink: 0;
  width: 32px;
  text-align: center;
}
.ec-mode-body {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.ec-mode-lbl {
  font-size: 15px;
  font-weight: 600;
  color: var(--text);
}
.ec-mode-sub {
  font-size: 12px;
  color: var(--text2);
}

/* ── Edit-child: age-band selector ──────────────────────────────── */
.ec-age-band-opts {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: 4px;
}
.ec-age-opt {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 14px;
  border: 2px solid var(--blight);
  border-radius: var(--radl);
  cursor: pointer;
  background: var(--card2);
  -webkit-tap-highlight-color: transparent;
}
.ec-age-opt:has(input:checked) {
  border-color: var(--ch-accent, var(--green));
  background: var(--glight);
}
.ec-age-opt input[type="radio"] { display: none; }
.ec-age-body {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.ec-age-lbl {
  font-size: 15px;
  font-weight: 600;
  color: var(--text);
}
.ec-age-sub {
  font-size: 12px;
  color: var(--text2);
}

/* ── Features toggle list: tighten spacing ──────────────────────── */
.feat-tog-row { padding: 8px 0; }
.feat-tog-sub { font-size: 11px; opacity: 0.75; }

/* ── Feature toggle row: actions area (configure button + toggle) ── */
.feat-tog-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 10px 0;
  border-bottom: 1px solid var(--blight);
  font-size: 14px;
  gap: 8px;
}
.feat-tog-row:last-child { border-bottom: none; }
.feat-tog-actions {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-shrink: 0;
}
.feat-cfg-btn {
  font-size: 12px;
  padding: 6px 10px;
  white-space: nowrap;
  color: var(--ch-accent, var(--green));
  border-color: var(--ch-accent, var(--green));
}

/* ── Feature overflow warnings ──────────────────────────────────── */
.feat-overflow-warn {
  background: var(--amb);
  color: var(--ambt);
  border: 1px solid var(--ambt);
  border-radius: var(--rad);
  font-size: 13px;
  padding: 10px 14px;
  margin-bottom: 10px;
  line-height: 1.5;
}
.feat-overflow-warn strong { font-weight: 700; }
.feat-overflow-warn em { font-style: italic; }

/* ── Transaction pager ──────────────────────────────────────────── */
.tx-pager {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 8px 0 10px;
  gap: 8px;
  flex-wrap: wrap;
}
.tx-ps-chips {
  display: flex;
  gap: 4px;
  flex-wrap: wrap;
}
.tx-ps-chip {
  display: inline-block;
  padding: 4px 10px;
  font-size: 12px;
  font-weight: 600;
  border: 1px solid var(--bmid);
  border-radius: 20px;
  background: var(--card);
  color: var(--text2);
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
  transition: background 0.12s, color 0.12s;
}
.tx-ps-chip.on {
  background: var(--ch-accent, var(--green));
  color: #fff;
  border-color: var(--ch-accent, var(--green));
}
.tx-pg-nav {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-shrink: 0;
}
.tx-pg-btn {
  width: 32px;
  height: 32px;
  font-size: 18px;
  line-height: 32px;
  text-align: center;
  border: 1px solid var(--bmid);
  border-radius: var(--rad);
  background: var(--card);
  color: var(--text);
  cursor: pointer;
  padding: 0;
  -webkit-tap-highlight-color: transparent;
}
.tx-pg-btn:disabled { opacity: 0.3; cursor: default; }
.tx-pg-btn:not(:disabled):active { background: var(--card2); }
.tx-pg-info {
  font-size: 12px;
  color: var(--text2);
  white-space: nowrap;
  min-width: 36px;
  text-align: center;
}

/* ── Parent dashboard feature tiles ────────────────────────────── */
.parent-feat-tiles-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
  margin-bottom: 14px;
}
.parent-feat-tile {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  padding: 16px 8px 14px;
  background: var(--card);
  border: 1px solid var(--blight);
  border-radius: var(--radl);
  cursor: pointer;
  position: relative;
  box-shadow: var(--shad);
  -webkit-tap-highlight-color: transparent;
}
.parent-feat-tile:active { background: var(--card2); transform: scale(0.97); }
.parent-feat-icon { font-size: 28px; line-height: 1; }
.parent-feat-lbl {
  font-size: 13px;
  font-weight: 600;
  color: var(--text);
}
.parent-feat-badge {
  position: absolute;
  top: 8px;
  right: 8px;
  background: var(--red);
  color: #fff;
  border-radius: 20px;
  font-size: 11px;
  font-weight: 700;
  min-width: 18px;
  height: 18px;
  line-height: 18px;
  text-align: center;
  padding: 0 5px;
  box-sizing: border-box;
}

/* ── "More features" overlay list ──────────────────────────────── */
.more-feat-row {
  display: flex;
  align-items: center;
  gap: 14px;
  width: 100%;
  padding: 14px 4px;
  border-bottom: 1px solid var(--blight);
  background: transparent;
  border-left: none;
  border-right: none;
  border-top: none;
  cursor: pointer;
  font-size: 16px;
  font-family: inherit;
  color: var(--text);
  -webkit-tap-highlight-color: transparent;
  position: relative;
  text-align: left;
}
.more-feat-row:last-child { border-bottom: none; }
.more-feat-row:active { background: var(--card2); }
.more-feat-icon { font-size: 28px; flex-shrink: 0; }
.more-feat-lbl { flex: 1; font-weight: 600; font-size: 17px; }
.more-feat-badge {
  background: var(--red);
  color: #fff;
  border-radius: 20px;
  font-size: 12px;
  font-weight: 700;
  min-width: 22px;
  height: 22px;
  line-height: 22px;
  text-align: center;
  padding: 0 6px;
  box-sizing: border-box;
  flex-shrink: 0;
}

/* ── Kindle Fire: tighten layout at narrow widths ───────────────── */
@media (max-width: 360px) {
  .screen { padding: 0.75rem; }
  .ch-chip { min-width: 58px; padding: 8px 6px 6px; }
  .ch-chip-icon { font-size: 22px; }
  .ch-chip-lbl { font-size: 9px; }
  .ch-simple-tile { padding: 16px; }
  .ch-simple-icon { font-size: 32px; }
  .ch-simple-lbl { font-size: 16px; }
  .parent-feat-tiles-grid { grid-template-columns: repeat(3, 1fr); gap: 8px; }
  .parent-feat-tile { padding: 12px 6px 10px; }
  .parent-feat-icon { font-size: 24px; }
  .parent-feat-lbl { font-size: 12px; }
}

/* ══════════════════════════════════════════════════════════════════
   PENDING OFFLINE TRANSACTIONS
   ══════════════════════════════════════════════════════════════════ */

/* Badge pills for pending / rejected state in child tx list */
.b-pot-pending  { background: var(--amb);    color: var(--ambt); }
.b-pot-rejected { background: var(--rlight); color: var(--rtext); }

/* Muted amount for unconfirmed items */
.pot-muted { opacity: 0.6; }

/* Pending row in child history — slight amber tint */
.pot-row { background: var(--amb); border-radius: var(--rad); padding: 10px 12px; margin-bottom: 4px; }
.pot-row:last-child { border-bottom: none; }

/* Rejected row — red tint, fades after session */
.pot-rejected { background: var(--rlight); }

.pot-pending-note  { font-size: 12px; color: var(--ambt);  margin-top: 2px; }
.pot-rejected-note { font-size: 12px; color: var(--rtext); margin-top: 2px; }

/* ── Parent review cards ──────────────────────────────────────── */
.pot-review-card { margin-bottom: 14px; }

.pot-review-header {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 10px;
}
.pot-ch-icon  { font-size: 28px; flex-shrink: 0; }
.pot-ch-name  { font-size: 15px; font-weight: 600; }
.pot-meta     { font-size: 12px; color: var(--text2); margin-top: 2px; }

.pot-amount-row {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 8px;
}
.pot-amount-row .tx-amt { font-size: 22px; font-weight: 700; }
.pot-dir-badge {
  font-size: 12px;
  color: var(--text2);
  background: var(--card2);
  border-radius: 20px;
  padding: 3px 10px;
}

.pot-desc {
  font-size: 14px;
  color: var(--text);
  margin-bottom: 8px;
}

.pot-balance-row {
  font-size: 13px;
  color: var(--text2);
  margin-bottom: 10px;
}
.pot-warn {
  font-size: 13px;
  color: var(--rtext);
  margin-top: 4px;
  font-weight: 600;
}

/* Amend form spacing */
.pot-amend-form {
  border-top: 1px solid var(--blight);
  padding-top: 12px;
  margin-top: 8px;
}

/* Action button row */
.pot-actions {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  margin-top: 12px;
  padding-top: 10px;
  border-top: 1px solid var(--blight);
}
.pot-actions .btn { margin-bottom: 0; }

/* Amber button variant for offline warnings */
.btn-amber {
  background: var(--amb);
  color: var(--ambt);
  border-color: var(--ambt);
}
.btn-amber:active { filter: brightness(0.92); }

/* ── Offline banner layout compensation ───────────────────────────── */
/* When the offline banner is visible the body gains .offline-active.
   #app shifts down by the banner height so the topbar back button
   remains fully tappable.  44px matches the banner's padding (10px
   top+bottom) + font-size (13px) + line-height slack — adjust if the
   banner copy changes.                                                 */
body.offline-active #app {
  padding-top: 44px;
}

/* ── Date input fallback widget (Android Chrome) ──────────────────── */
/* Three-select widget rendered by date-input.js when the native
   <input type="date"> shows US format regardless of device locale.    */
.date-input-fallback {
  display: flex;
  gap: 6px;
  align-items: center;
}
.date-input-sel {
  flex: 1;
  min-width: 0;
  padding: 8px 6px;
  border: 1px solid var(--blight);
  border-radius: var(--rad);
  background: var(--card);
  color: var(--text);
  font-size: 14px;
  appearance: auto;
}
.date-input-native {
  width: 100%;
  padding: 8px 10px;
  border: 1px solid var(--blight);
  border-radius: var(--rad);
  background: var(--card);
  color: var(--text);
  font-size: 14px;
}

/* ── Maintenance mode overlay ───────────────────────────────────────── */
#maintenance-overlay {
  position: fixed;
  inset: 0;
  background: var(--bg, #f5f7fa);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 9999;
  padding: 24px;
}
.maint-box {
  max-width: 360px;
  width: 100%;
  text-align: center;
  background: var(--card, #fff);
  border-radius: 16px;
  padding: 40px 32px;
  box-shadow: 0 4px 24px rgba(0,0,0,.10);
}
.maint-icon { font-size: 48px; margin-bottom: 16px; }
.maint-title { font-size: 1.3rem; font-weight: 700; margin: 0 0 12px; color: var(--text, #1a1a2e); }
.maint-msg   { color: var(--text2, #666); margin: 0 0 24px; line-height: 1.5; }
.maint-retry {
  display: inline-block;
  padding: 12px 32px;
  background: var(--accent, #3a7bd5);
  color: #fff;
  border: none;
  border-radius: 24px;
  font-size: 1rem;
  font-weight: 600;
  cursor: pointer;
}

/* ── Update banner ────────────────────────────────────────────────────
   Non-blocking sticky bar at the top of the viewport.  Shown when the
   server reports a newer version than the running client.             ── */
.bpm-update-bar {
  position: fixed;
  top: 0; left: 0; right: 0;
  z-index: 9998;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 10px 16px;
  background: var(--blue, #185FA5);
  color: #fff;
  font-size: 0.9rem;
  box-shadow: 0 2px 8px rgba(0,0,0,0.18);
}
.bpm-update-msg { flex: 1; font-weight: 500; }
.bpm-update-btn {
  flex-shrink: 0;
  padding: 6px 18px;
  background: #fff;
  color: var(--blue, #185FA5);
  border: none;
  border-radius: 20px;
  font-size: 0.85rem;
  font-weight: 700;
  cursor: pointer;
  white-space: nowrap;
}
.bpm-update-btn:active { opacity: 0.8; }

/* ── Maintenance toast ────────────────────────────────────────────────
   Brief friendly heads-up shown for 3 seconds before the blocking
   maintenance overlay locks the screen for active sessions.           ── */
.maint-toast {
  position: fixed;
  bottom: 24px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 9997;
  max-width: 360px;
  width: calc(100% - 32px);
  padding: 14px 18px;
  background: var(--card, #fff);
  color: var(--text, #1a1a18);
  border-left: 4px solid var(--amb, #FAEEDA);
  border-radius: var(--rad, 10px);
  box-shadow: 0 4px 16px rgba(0,0,0,0.15);
  font-size: 0.95rem;
  line-height: 1.4;
  animation: maint-toast-in 0.25s ease;
}
@keyframes maint-toast-in {
  from { opacity: 0; transform: translateX(-50%) translateY(12px); }
  to   { opacity: 1; transform: translateX(-50%) translateY(0); }
}
