/* Masroof 4.0 "Wallet" — one design system. Dark is the default; Day overrides it.
   Ink and paper, with cyan for money in, magenta for money out and alerts, and the gold coin
   (#EDBB00) for primary actions. The older variable names below the new ones map onto them so
   every screen follows the same palette. */
:root{
  --bg:#0B0B0C; --card:#19191B; --card2:#26262A; --ink:#F4F3F1; --ink2:#C9C6C2; --muted:#8E8C8A;
  --line:rgba(255,255,255,.07); --line2:rgba(255,255,255,.18);
  --cyan:#38A6CF; --mag:#FF458E; --yel:#EDBB00; --onyel:#1A1500; --orbInk:#F4F3F1;
  --scrim:rgba(0,0,0,.6); --tab:rgba(28,28,30,.88);
  --fn:ui-rounded,"SF Pro Rounded",system-ui,sans-serif;
  /* older names */
  --surface:var(--card); --sunk:var(--card2); --ink-2:var(--ink2); --line-2:var(--line2);
  --brand:var(--cyan); --brand-ink:#FFFFFF; --brand-soft:rgba(56,166,207,.14); --brand-2:var(--cyan); --brand-3:var(--yel);
  --grad:linear-gradient(135deg,#F3C514 0%,#EDBB00 100%);
  --navy:#19191B;
  --hero:radial-gradient(90% 70% at 50% 0%,rgba(56,166,207,.16) 0%,transparent 60%),var(--bg);
  --spend:var(--mag); --earn:var(--cyan); --save:#6EA0FF; --invest:#A28EFF; --warn:#F2B13A; --gold:#EDBB00;
  --shadow:none;
  --display:var(--fn);
  --body:-apple-system,BlinkMacSystemFont,"SF Pro Text",system-ui,sans-serif;
  --r:22px; --r-sm:14px; --tabh:68px; --spring:cubic-bezier(.2,.9,.25,1.05); --ease:cubic-bezier(.2,.9,.25,1);
  box-sizing:border-box; color-scheme:dark;
}
:root[data-theme="light"]{
  --bg:#F2F1EF; --card:#FFFFFF; --card2:#EAE8E6; --ink:#161514; --ink2:#45423F; --muted:#6E6B68;
  --line:rgba(0,0,0,.07); --line2:rgba(0,0,0,.18);
  --cyan:#0088B0; --mag:#D6006C; --orbInk:#161514; --scrim:rgba(20,18,16,.35); --tab:rgba(255,255,255,.9);
  --brand-soft:rgba(0,136,176,.12); --warn:#B96F00; --save:#2F6FEB; --invest:#7353F0;
  --shadow:0 1px 2px rgba(0,0,0,.04),0 6px 20px rgba(0,0,0,.05);
  color-scheme:light;
}
@media (prefers-color-scheme:light){
  :root[data-theme="auto"]{
    --bg:#F2F1EF; --card:#FFFFFF; --card2:#EAE8E6; --ink:#161514; --ink2:#45423F; --muted:#6E6B68;
    --line:rgba(0,0,0,.07); --line2:rgba(0,0,0,.18);
    --cyan:#0088B0; --mag:#D6006C; --orbInk:#161514; --scrim:rgba(20,18,16,.35); --tab:rgba(255,255,255,.9);
    --brand-soft:rgba(0,136,176,.12); --warn:#B96F00; --save:#2F6FEB; --invest:#7353F0;
    --shadow:0 1px 2px rgba(0,0,0,.04),0 6px 20px rgba(0,0,0,.05);
    color-scheme:light;
  }
}

/* ---------- base ---------- */
*,*::before,*::after{box-sizing:inherit;-webkit-tap-highlight-color:transparent}
html{height:100%;-webkit-text-size-adjust:100%}
body{margin:0;min-height:100%;background:var(--bg);color:var(--ink);font:16px/1.45 var(--body);-webkit-font-smoothing:antialiased;font-variant-numeric:tabular-nums;overscroll-behavior-y:none}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer;touch-action:manipulation;transition:transform .12s ease,background-color .15s,color .15s,opacity .15s}
button:not(:disabled):active{transform:scale(.97)}
:focus-visible{outline:2px solid var(--brand-2);outline-offset:2px}
[hidden]{display:none!important}
svg{flex:none}
.muted{color:var(--muted)}
.hint{font-size:13px;color:var(--muted);margin:0;line-height:1.45}
.err{font-size:14px;color:var(--spend);margin:0;font-weight:600}
.err:empty{display:none}
.spacer{flex:1}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);border:0;padding:0}
.loading{display:grid;place-items:center;min-height:60vh;color:var(--muted)}

.wrap{max-width:1040px;margin:0 auto;padding:calc(env(safe-area-inset-top,0px) + 6px) 16px calc(var(--tabh) + env(safe-area-inset-bottom,0px) + 36px)}

/* ---------- page header ---------- */
.back{display:inline-flex;align-items:center;gap:2px;border:0;background:none;color:var(--brand);font-weight:600;padding:6px 0;font-size:16px}
.back svg{width:20px;height:20px}
.round{width:42px;height:42px;border-radius:50%;border:1px solid var(--line);background:var(--surface);box-shadow:var(--shadow);display:grid;place-items:center;color:var(--ink)}
.round svg{width:21px;height:21px}

/* ---------- surfaces ---------- */
.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:18px;box-shadow:var(--shadow)}
.panel h2{font:700 17px/1.25 var(--display);margin:0 0 12px;letter-spacing:-.01em}
.panel h2 .aside{display:block;font:500 12.5px var(--body);color:var(--muted);margin-top:3px;letter-spacing:0}
.grid{display:grid;grid-template-columns:minmax(0,1fr);gap:16px;align-items:start;margin-top:16px}
.stack{display:flex;flex-direction:column;gap:16px;min-width:0}
.plan{display:grid;grid-template-columns:minmax(0,1fr);gap:12px}
@media (min-width:960px){.grid{grid-template-columns:minmax(0,1.2fr) minmax(0,1fr)}.plan{grid-template-columns:1fr 1fr;align-items:start}}
.empty{text-align:center;padding:28px 12px;color:var(--muted)}

/* ---------- controls ---------- */
.btn{border:0;background:var(--sunk);padding:11px 16px;border-radius:var(--r-sm);font-weight:600;font-size:15px;color:var(--ink);display:inline-flex;align-items:center;justify-content:center;gap:8px}
.btn svg{width:18px;height:18px}
.btn.primary{background:var(--brand);color:var(--brand-ink)}
.btn.danger{color:var(--spend)}
.btn.small{padding:7px 12px;font-size:14px;border-radius:11px}
.btn.link{background:none;padding:6px 0;color:var(--brand)}
.btn:disabled{opacity:.45;cursor:default}
.bar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:4px 0 12px}
.icon-btn{border:0;background:var(--sunk);width:34px;height:34px;border-radius:10px;display:grid;place-items:center;font-size:20px;line-height:1;flex:none;color:var(--ink)}
select.sel,input.inp,textarea.inp{border:1px solid transparent;background:var(--sunk);border-radius:12px;padding:10px 12px;min-width:0;font-size:16px;appearance:none;-webkit-appearance:none;outline:none;transition:border-color .15s,background-color .15s}
input.inp:focus,textarea.inp:focus,select.sel:focus{border-color:var(--brand-2);background:var(--surface)}
select.sel{padding-right:30px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5l5 5 5-5' fill='none' stroke='%23889' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 11px center}
input[type=date].inp{min-height:44px}
textarea.inp{width:100%;resize:vertical;line-height:1.45}
.seg{display:inline-flex;background:var(--sunk);border-radius:12px;padding:3px;gap:2px;overflow-x:auto;scrollbar-width:none;max-width:100%}
.seg::-webkit-scrollbar{display:none}
.seg button{border:0;background:none;padding:7px 14px;font-weight:600;color:var(--muted);border-radius:9px;white-space:nowrap;font-size:14px}
.seg button[aria-pressed="true"]{background:var(--surface);color:var(--ink);box-shadow:0 1px 3px rgba(11,23,40,.14)}
.seg.small button{padding:5px 10px;font-size:13px}
.seg.types{display:flex;width:100%;flex:none}
.seg.types button{flex:1;padding:9px 6px}
.chip{border:0;background:var(--sunk);border-radius:99px;padding:8px 13px;font-size:14px;font-weight:600;display:inline-flex;align-items:center;gap:6px;color:var(--ink)}
.chip[aria-pressed="true"]{background:var(--ink);color:var(--bg)}
.chip .x{border:0;background:none;padding:0;color:inherit;opacity:.5;font-size:17px;line-height:1}
.chips{display:flex;flex-wrap:wrap;gap:7px}
.dot{width:10px;height:10px;border-radius:50%;display:inline-block;flex:none}
.inline-add{display:inline-flex;gap:6px}
.inline-add input{width:140px;padding:7px 12px;border-radius:99px;font-size:14px}
input[type=checkbox]{appearance:none;-webkit-appearance:none;width:51px;height:31px;border-radius:99px;background:var(--line-2);position:relative;flex:none;cursor:pointer;transition:background .2s;margin:0}
input[type=checkbox]::after{content:"";position:absolute;top:2px;left:2px;width:27px;height:27px;border-radius:50%;background:#fff;box-shadow:0 2px 6px rgba(0,0,0,.2);transition:transform .22s var(--spring)}
input[type=checkbox]:checked{background:var(--earn)}
input[type=checkbox]:checked::after{transform:translateX(20px)}
.rv input[type=checkbox]{width:42px;height:26px}.rv input[type=checkbox]::after{width:22px;height:22px}.rv input[type=checkbox]:checked::after{transform:translateX(16px)}
.toggle-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:11px 0;border-top:1px solid var(--line);font-size:15px}
.toggle-row:first-of-type{border-top:0}
.rows .rw{display:grid;grid-template-columns:1fr auto;gap:10px;align-items:center;padding:12px 0;border-top:1px solid var(--line);font-size:15px}
.rows .rw:first-child{border-top:0}
.rows button.rw{width:100%;background:none;border-left:0;border-right:0;border-bottom:0;text-align:left;padding-left:0;padding-right:0}
.rows .rw small{display:block;color:var(--muted);font-size:12.5px}
.rows .rw .sel{max-width:58vw}
.delta{display:inline-flex;align-items:center;gap:3px;font-size:13px;font-weight:700;padding:4px 10px;border-radius:99px;background:var(--sunk);color:var(--muted)}
.delta.up{color:var(--spend);background:color-mix(in srgb,var(--spend) 11%,transparent)}
.delta.down{color:var(--earn);background:color-mix(in srgb,var(--earn) 12%,transparent)}
.tr{display:inline-block;font-size:11px;font-weight:700;padding:1px 7px;border-radius:99px;margin-left:4px}
.tr.up{color:var(--spend);background:color-mix(in srgb,var(--spend) 11%,transparent)}
.tr.down{color:var(--earn);background:color-mix(in srgb,var(--earn) 12%,transparent)}
.amt.expense{color:var(--ink)} .amt.income,.amt.pos{color:var(--earn)} .amt.transfer{color:var(--save)} .amt.invest{color:var(--invest)} .amt.debt{color:var(--warn)} .amt.neg{color:var(--spend)}

/* ---------- bottom tab bar ---------- */
.tabbar{position:fixed;left:0;right:0;bottom:0;z-index:40;background:color-mix(in srgb,var(--surface) 84%,transparent);-webkit-backdrop-filter:blur(24px) saturate(1.6);backdrop-filter:blur(24px) saturate(1.6);border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom,0px)}
body.locked .tabbar{display:none}
.tabbar .in{position:relative;display:flex;max-width:560px;height:var(--tabh);margin:0 auto;align-items:stretch}
.tabbar button{position:relative;z-index:1;flex:1;border:0;background:none;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;font-size:10.5px;font-weight:600;color:var(--muted);padding:6px 0 4px;letter-spacing:.01em}
.tabbar button svg{width:24px;height:24px;transition:transform .3s var(--spring)}
.tabbar button[aria-current="page"]{color:var(--brand)}
.tabbar button[aria-current="page"] svg{transform:translateY(-1px)}
.tabbar .addbtn{flex:0 0 72px}
.tabbar .addbtn span{width:52px;height:52px;border-radius:18px;display:grid;place-items:center;background:var(--grad);color:#fff;box-shadow:0 8px 20px rgba(31,162,160,.38),inset 0 1px 0 rgba(255,255,255,.3);transition:transform .3s var(--spring)}
.tabbar .addbtn:active span{transform:rotate(90deg) scale(.92)}
.tabbar .addbtn svg{width:26px;height:26px}

/* ---------- lock screen ---------- */
#lock{position:fixed;inset:0;z-index:60;overflow:auto;background:var(--hero);color:#fff;display:flex;justify-content:center;padding:calc(env(safe-area-inset-top,0px) + 40px) 22px calc(env(safe-area-inset-bottom,0px) + 30px)}
.lockbox{width:100%;max-width:400px;display:flex;flex-direction:column;gap:12px;margin:auto 0;animation:up .5s var(--ease) both}
.lockbox .shield{font-size:44px;line-height:1;margin-bottom:6px}
.lockbox h1{margin:0;font:800 30px/1.1 var(--display);letter-spacing:-.02em}
.lockbox p{margin:0 0 6px;color:rgba(255,255,255,.78);font-size:15.5px}
.lockbox .inp{background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.18);color:#fff;padding:14px 16px;font-size:17px;border-radius:14px}
.lockbox .inp::placeholder{color:rgba(255,255,255,.55)}
.lockbox .inp:focus{background:rgba(255,255,255,.18);border-color:rgba(60,203,110,.8)}
.lockbox .btn{padding:14px 18px;font-size:16.5px;border-radius:14px}
.lockbox .btn.primary{background:var(--grad);color:#fff;box-shadow:0 10px 24px rgba(31,162,160,.35)}
.lockbox .btn:not(.primary):not(.link){background:rgba(255,255,255,.14);color:#fff}
.lockbox .btn.danger{background:rgba(255,107,112,.18)!important;color:#FFB4B6!important}
.lockbox .btn.link{color:#9BE7C4;align-self:center}
.lockbox .hint{color:rgba(255,255,255,.62)}
.lockbox .err{color:#FFB4B6}
.strength{height:5px;border-radius:5px;background:rgba(255,255,255,.14);overflow:hidden}
.strength i{display:block;height:100%;border-radius:5px;transition:width .25s,background .25s}
.check{display:flex;gap:12px;align-items:flex-start;font-size:14.5px;color:rgba(255,255,255,.85);margin:4px 0}
.check input.tick{width:24px;height:24px;border-radius:7px;background:rgba(255,255,255,.14);border:1.5px solid rgba(255,255,255,.4);margin-top:1px}
.check input.tick::after{display:none}
.check input.tick:checked{background:var(--brand-3) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7.5'/%3E%3C/svg%3E") center/16px no-repeat;border-color:var(--brand-3)}

/* ---------- splash ---------- */
#splash{position:fixed;inset:0;z-index:100;background:var(--hero);display:grid;place-items:center;transition:opacity .5s ease,visibility .5s}
#splash img{width:min(88vw,460px);height:auto;animation:splashIn .9s var(--spring) both;-webkit-mask-image:radial-gradient(closest-side,#000 62%,transparent 100%);mask-image:radial-gradient(closest-side,#000 62%,transparent 100%)}
#splash .ld{position:absolute;bottom:calc(env(safe-area-inset-bottom,0px) + 48px);width:110px;height:4px;border-radius:4px;background:rgba(255,255,255,.15);overflow:hidden}
#splash .ld i{display:block;height:100%;width:40%;border-radius:4px;background:var(--grad);animation:ld 1s ease-in-out infinite}
#splash.gone{opacity:0;visibility:hidden;pointer-events:none}
@keyframes ld{from{transform:translateX(-100%)}to{transform:translateX(260%)}}
@keyframes splashIn{from{opacity:0;transform:scale(.94)}to{opacity:1;transform:none}}

/* ---------- home: header, wallet card, actions ---------- */
@property --glow{syntax:'<color>';inherits:true;initial-value:#1FA2A0}
.stage{position:relative;display:grid;place-items:center;padding:14px 0 4px;perspective:1200px;touch-action:pan-y;user-select:none;-webkit-user-select:none}
.stage .glow{position:absolute;left:12%;right:12%;top:30%;bottom:-4%;border-radius:50%;background:radial-gradient(closest-side,color-mix(in srgb,var(--glow) 50%,transparent),transparent);filter:blur(20px);opacity:.7;pointer-events:none}
@keyframes sheen{0%,72%{left:-60%}100%{left:130%}}
.bc-top{position:relative;display:flex;justify-content:space-between;align-items:center}
.bc-chip{position:relative;margin-top:14px;width:44px;height:32px;border-radius:8px;background:linear-gradient(135deg,#F9DD8B 0%,#D4A53C 45%,#F3D27C 70%,#B8862A 100%);box-shadow:inset 0 0 0 1px rgba(0,0,0,.18);display:flex;flex-direction:column;justify-content:space-evenly;padding:0 6px}
.bc-chip i{display:block;height:1px;background:rgba(0,0,0,.28)}
.qa{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;margin:12px 0 0;padding:10px 6px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow)}
.qa button{border:0;background:none;display:flex;flex-direction:column;align-items:center;gap:6px;font-size:12px;font-weight:600;color:var(--ink-2);padding:2px 0}
.qa span{width:46px;height:46px;border-radius:15px;display:grid;place-items:center;background:var(--sunk);color:var(--ink)}
.qa span svg{width:22px;height:22px}
.qa button:first-child span{background:var(--grad);color:#fff;box-shadow:0 6px 16px rgba(31,162,160,.32)}

/* ---------- home: spending summary ---------- */
.sum{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);padding:14px 16px 16px;margin-top:16px;position:relative;touch-action:pan-y;user-select:none;-webkit-user-select:none}
.sum .seg.period{display:flex;width:100%}
.sum .seg.period button{flex:1;padding:7px 4px}
.now{margin-left:auto;border:0;background:var(--brand-soft);color:var(--brand);font-weight:700;font-size:13px;padding:5px 12px;border-radius:99px}
.st{min-width:0;padding:0 10px;border-left:1px solid var(--line)}
.st:first-child{border-left:0;padding-left:2px}
.st span{display:flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600;color:var(--muted);white-space:nowrap}
.st span i{width:7px;height:7px;border-radius:50%;background:var(--muted);flex:none}
.st b{display:block;font:700 clamp(14px,4.3vw,18px)/1.3 var(--display);letter-spacing:-.01em;margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.st b.neg{color:var(--spend)}

/* welcome */
.welcome{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);padding:22px;margin:16px 0 0}
.welcome h2{font:800 23px/1.15 var(--display);margin:12px 0 6px;letter-spacing:-.02em}
.welcome p{margin:0 0 16px;color:var(--muted)}
.welcome .bar{margin:0}

/* quick add */
.quick{margin-top:16px;padding:12px}

/* budgets */
.rings{display:flex;gap:10px;overflow-x:auto;scrollbar-width:none;padding:2px 2px 6px;margin:0 -2px}
.rings::-webkit-scrollbar{display:none}
.bring{width:60px;height:60px}
@keyframes ringin{from{stroke-dasharray:0 var(--c)}}

/* categories */
@keyframes arc{from{stroke-dasharray:0 var(--c)}}
.cats{list-style:none;margin:6px 0 0;padding:0}
.share,.budget{display:block;height:5px;border-radius:5px;background:var(--sunk);overflow:hidden}
.share i,.budget i{display:block;height:100%;border-radius:5px;animation:grow .9s var(--spring) both;transform-origin:left}
.items{padding:2px 0 14px 54px;animation:up .3s both}
.item{display:grid;grid-template-columns:1fr auto;gap:3px 10px;padding:7px 0;font-size:15px}
.item .n{color:var(--muted);font-size:12.5px}
.item .names{grid-column:1/-1;color:var(--muted);font-size:12.5px}

/* "For you" cards */
.fy{display:flex;gap:12px;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;padding:2px 2px 8px;margin:0 -16px;padding-left:16px;padding-right:16px;scroll-padding:0 16px}
@media (min-width:960px){.fy{margin:0;padding-left:2px;padding-right:2px}}
.fy::-webkit-scrollbar{display:none}
.rows .rw:has(.dchip){grid-template-columns:auto 1fr auto;gap:12px}
.nw-parts{display:flex;flex-wrap:wrap;gap:8px}
.nw-parts span{background:var(--sunk);border-radius:11px;padding:7px 11px;font-size:13.5px}
.nw-parts b{font-weight:700}

/* week bars */
.wk{display:flex;flex-direction:column}
@keyframes rise{from{transform:scaleY(0)}to{transform:scaleY(1)}}

/* area chart */
.tip{display:flex;justify-content:space-between;align-items:baseline;gap:10px;min-height:44px;margin-bottom:6px}
.tip b{font:800 24px var(--display);letter-spacing:-.02em}
.tip span{font-size:13px;color:var(--muted);text-align:right}
.chart svg{width:100%;height:auto;display:block}
.chart .cap{font-size:13.5px;color:var(--muted);margin-top:8px;min-height:20px}

/* ---------- activity ---------- */
.months{margin:0 -2px 10px}
.months .chip{background:var(--surface);border:1px solid var(--line)}
.months .chip[aria-pressed="true"]{background:var(--ink);color:var(--bg);border-color:var(--ink)}
.tx-group{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);overflow:hidden;box-shadow:var(--shadow)}
.tx{width:100%;border:0;background:var(--surface);display:grid;grid-template-columns:42px 1fr auto;gap:12px;align-items:center;padding:11px 14px;text-align:left;position:relative}
.tx:active{background:var(--sunk)}
.tx>span:nth-child(2){min-width:0}
.tx .t1{font-weight:600;font-size:15.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tx .t2{font-size:13px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tx .amt{font:700 16px var(--display);text-align:right;white-space:nowrap}
.tx .amt small{display:block;font:500 11.5px var(--body);color:var(--muted)}
.swipe{position:relative;overflow:hidden;transition:height .3s ease,opacity .3s}
.swipe+.swipe .tx::before{content:"";position:absolute;left:68px;right:0;top:0;height:1px;background:var(--line)}
.swipe .acts{position:absolute;inset:0;display:flex;justify-content:space-between;visibility:hidden}
.swipe:has(.tx[style*="translate"]) .acts{visibility:visible}
.swipe .acts>div{display:flex}
.swipe .acts button{border:0;color:#fff;font-weight:700;font-size:12.5px;width:78px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px}
.swipe .acts .dup{background:var(--brand-2)} .swipe .acts .edit{background:#6B7A90} .swipe .acts .del{background:var(--spend)}
.swipe .tx{z-index:1;touch-action:pan-y;will-change:transform}
.swipe .tx.snap{transition:transform .32s var(--spring)}

/* ---------- friends & wealth heroes ---------- */
.btn.light{background:#fff;color:var(--navy)}
.goal{padding:12px 0;border-top:1px solid var(--line)}
.goal:first-child{border-top:0}
.prog{height:9px;background:var(--sunk);border-radius:9px;overflow:hidden;margin:8px 0 5px}
.prog i{display:block;height:100%;background:var(--grad);border-radius:9px;animation:grow 1s var(--spring) both;transform-origin:left}
.wallet{display:flex;gap:12px;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;padding:4px 2px 10px;margin:0 -2px}
.wallet::-webkit-scrollbar{display:none}
.swatches{display:grid;grid-template-columns:repeat(7,1fr);gap:8px}
.swatches button,.swatch-custom{aspect-ratio:1;border-radius:13px;border:0;position:relative;display:grid;place-items:center;font-size:18px}
.swatches button[aria-pressed="true"]{box-shadow:0 0 0 3px var(--bg),0 0 0 5px var(--ink)}
.swatch-custom{background:conic-gradient(red,yellow,lime,cyan,blue,magenta,red);cursor:pointer;overflow:hidden}
.swatch-custom input{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%}

/* ---------- settings ---------- */
details.acc{padding:0;overflow:hidden}
details.acc>summary{list-style:none;cursor:pointer;padding:16px 18px;font:700 16.5px var(--display);display:flex;align-items:center;justify-content:space-between;gap:10px}
details.acc>summary::-webkit-details-marker{display:none}
details.acc>summary::after{content:"";width:8px;height:8px;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);transform:rotate(45deg);transition:transform .25s;opacity:.6;margin-right:4px}
details.acc[open]>summary::after{transform:rotate(-135deg)}
.catblock{padding:14px 0;border-top:1px solid var(--line)}
.catblock .hd{display:flex;align-items:center;gap:8px;margin-bottom:10px;flex-wrap:wrap}
.catblock .hd input.nm{flex:1;min-width:120px;font-weight:600}
.catblock .hd input.ic{width:50px;text-align:center;font-size:20px;padding:6px}
.catblock .hd input[type=color]{width:40px;height:40px;padding:3px;border:0;border-radius:12px;background:var(--sunk)}

/* ---------- sheets ---------- */
dialog{border:0;padding:0;background:var(--bg);color:var(--ink);border-radius:24px;width:min(600px,calc(100vw - 24px));max-height:calc(100dvh - 40px);box-shadow:0 30px 80px rgba(0,0,0,.35)}
dialog[open]{animation:sheet .34s cubic-bezier(.2,.9,.25,1)}
dialog::backdrop{background:rgba(6,21,41,.5);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);animation:fade .25s}
@media (max-width:640px){dialog{margin:auto 0 0;width:100vw;max-width:100vw;border-radius:24px 24px 0 0;max-height:94dvh}}
.dlg{display:flex;flex-direction:column;max-height:inherit}
.dlg-h{display:flex;align-items:center;gap:10px;padding:22px 18px 10px;position:relative}
.dlg-h::before{content:"";position:absolute;top:8px;left:50%;transform:translateX(-50%);width:36px;height:5px;border-radius:5px;background:var(--line-2)}
.dlg-h h3{margin:0;font:800 22px var(--display);flex:1;letter-spacing:-.015em}
.dlg-h .icon-btn{border-radius:50%;width:32px;height:32px;font-size:18px;color:var(--muted)}
.dlg-b{padding:4px 18px 18px;overflow:auto;display:flex;flex-direction:column;gap:16px;-webkit-overflow-scrolling:touch}
.dlg-b>*{flex-shrink:0}
.dlg-f{display:flex;gap:10px;padding:12px 18px calc(14px + env(safe-area-inset-bottom,0px));background:var(--bg);border-top:1px solid var(--line);flex-wrap:wrap}
.dlg-f .btn{padding:13px 18px;font-size:16px}
.dlg-f .btn.primary{flex:1;max-width:320px}
.dlg-b .panel{box-shadow:none}
.field{display:flex;flex-direction:column;gap:7px}
.field>label,.field>.lab{font-size:12.5px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}
.two{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.three{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px}
.two>*,.three>*{min-width:0}
.two .inp,.two .sel,.three .inp,.three .sel{width:100%}
.dlg-b .inp,.dlg-b .sel{background:var(--surface);border-color:var(--line)}
.dlg-b .inp:focus,.dlg-b .sel:focus{border-color:var(--brand-2)}
.dlg-b .chip{background:var(--surface);border:1px solid var(--line)}
.dlg-b .chip[aria-pressed="true"],.datechip.on{background:var(--ink)!important;color:var(--bg)!important;border-color:var(--ink)!important}
.datechip{position:relative;overflow:hidden}
.datechip input{position:absolute;inset:0;opacity:0;width:100%;height:100%;cursor:pointer}
.more-body{display:flex;flex-direction:column;gap:12px;animation:up .3s var(--spring) both}
.switch{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:15px;font-weight:600;background:var(--surface);border:1px solid var(--line);padding:10px 14px;border-radius:14px;flex-direction:row-reverse}
.sect{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:14px;display:flex;flex-direction:column;gap:12px}
.sect .inp,.sect .sel{background:var(--sunk);border-color:transparent}
.sect .chip{background:var(--sunk);border-color:transparent}
.opts{display:flex;flex-direction:column;gap:8px}
.scan{display:flex;align-items:center;gap:12px;flex-wrap:wrap;background:var(--brand-soft);border-radius:16px;padding:12px 14px}
.scan .btn{background:var(--brand);color:var(--brand-ink)}
.scan .btn+.hint+.btn{background:var(--surface);color:var(--ink)}
.ln{display:grid;grid-template-columns:minmax(0,1fr) 48px 74px 62px 26px;gap:6px;align-items:center;padding:10px 0;border-top:1px solid var(--line)}
.ln:first-child{border-top:0}
.ln .inp{padding:8px;font-size:15px;width:100%}
.ln .lt{text-align:right;font-weight:700;font-size:14px}
.ln .ln2{grid-column:1/-1;display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.ln .ln2 select,.ln .ln2 input{padding:6px 10px;font-size:14px}
.ln .x{border:0;background:none;font-size:20px;color:var(--muted)}
.tot{display:grid;grid-template-columns:1fr auto;gap:8px 12px;font-size:15px;align-items:center}
.tot .inp{width:90px;padding:6px 10px;text-align:right}
.tot .grand{font:800 22px var(--display)}
.rv{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:12px;display:grid;grid-template-columns:auto 1fr auto;gap:8px 10px;align-items:center}
.rv .sub{grid-column:1/-1;display:flex;gap:6px;flex-wrap:wrap}
.rv .sub select,.rv .sub input{font-size:14px;padding:6px 10px}
.alert-big{font:800 32px/1.1 var(--display);color:var(--spend);letter-spacing:-.02em}

/* ---------- toast, success, stories ---------- */
.toast{position:fixed;left:50%;top:calc(env(safe-area-inset-top,0px) + 10px);transform:translate(-50%,-20px);background:var(--ink);color:var(--bg);padding:12px 16px;border-radius:16px;font-weight:600;font-size:14.5px;z-index:70;opacity:0;pointer-events:none;transition:opacity .25s,transform .3s var(--spring);display:flex;gap:14px;align-items:center;max-width:calc(100vw - 24px);box-shadow:0 10px 30px rgba(0,0,0,.25)}
.toast.on{opacity:1;pointer-events:auto;transform:translate(-50%,0)}
.toast button{background:none;border:0;color:var(--brand-3);font-weight:800;padding:0}
.toast.bad{background:var(--spend);color:#fff}
.toast.bad button{color:#fff;text-decoration:underline}
#done{position:fixed;inset:0;display:grid;place-items:center;z-index:80;pointer-events:none}
#done .ok{width:104px;height:104px;border-radius:30px;background:color-mix(in srgb,var(--surface) 92%,transparent);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);box-shadow:0 20px 50px rgba(0,0,0,.2);display:grid;place-items:center;animation:pop .45s var(--spring) both}
#done svg{width:56px;height:56px}
#done circle,#done path{stroke:var(--brand-2);stroke-dasharray:1;stroke-dashoffset:1}
#done circle{animation:draw .5s .05s ease-out forwards}
#done path{animation:draw .35s .4s ease-out forwards}
#done.out .ok{transition:opacity .3s,transform .3s;opacity:0;transform:scale(.9)}
#story{position:fixed;inset:0;z-index:90;color:#fff;display:flex;flex-direction:column;padding:calc(env(safe-area-inset-top,0px) + 10px) 20px calc(env(safe-area-inset-bottom,0px) + 24px);touch-action:none;user-select:none;-webkit-user-select:none;animation:fade .25s}
#story .bars{display:flex;gap:4px}
#story .bars i{flex:1;height:3px;border-radius:3px;background:rgba(255,255,255,.3);overflow:hidden}
#story .bars i b{display:block;height:100%;background:#fff;width:0}
#story .bars i.done b{width:100%}
#story .bars i.cur b{animation:storybar var(--dur,6s) linear forwards}
#story .top{display:flex;justify-content:space-between;align-items:center;margin-top:12px;font-weight:700;opacity:.9}
#story .top button{border:0;background:rgba(255,255,255,.18);color:#fff;width:34px;height:34px;border-radius:50%;font-size:18px}
#story p{font-size:18px;line-height:1.45;margin:0;opacity:.92}
#story .emoji{font-size:60px;animation:pop .6s var(--spring) both}
@keyframes storybar{to{width:100%}}

/* ---------- rolling numbers ---------- */
.od{display:inline-block;height:1em;overflow:hidden;line-height:1;vertical-align:baseline}

/* ---------- motion ---------- */
@keyframes up{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@keyframes fade{from{opacity:0}to{opacity:1}}
@keyframes sheet{from{transform:translateY(60px);opacity:0}to{transform:none;opacity:1}}
@keyframes grow{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes draw{from{stroke-dashoffset:1}to{stroke-dashoffset:0}}
@keyframes pop{0%{transform:scale(.6);opacity:0}60%{transform:scale(1.06);opacity:1}100%{transform:scale(1)}}
@keyframes slideL{from{transform:translateX(40px);opacity:0}to{transform:none;opacity:1}}
@keyframes slideR{from{transform:translateX(-40px);opacity:0}to{transform:none;opacity:1}}
@keyframes inR{from{opacity:0;transform:translateX(22px)}to{opacity:1;transform:none}}
@keyframes inL{from{opacity:0;transform:translateX(-22px)}to{opacity:1;transform:none}}
.anim .panel,.anim .tx-group,.anim .welcome,.anim .sum,.anim .qa{animation:up .42s var(--ease) both}
.anim .swipe{animation:up .42s var(--spring) both}
.anim .swipe:nth-child(2){animation-delay:.04s}
.anim .swipe:nth-child(3){animation-delay:.08s}
.anim .swipe:nth-child(n+4){animation-delay:.12s}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}

/* ---------- refinements ---------- */
.panel .tx-group{border:0;box-shadow:none;border-radius:0;margin:0 -18px;background:none}
.panel .tx-group .tx{padding-left:18px;padding-right:18px}
.panel .tx-group .swipe+.swipe .tx::before{left:76px}
.wallet{padding-bottom:26px;margin-bottom:-14px}
.rows .rw>span:first-child{min-width:104px}
.fy{padding-bottom:18px;margin-bottom:-10px}
.rings{padding-bottom:14px;margin-bottom:-8px}
.st b.sm{font-size:clamp(12.5px,3.7vw,15px)}
.inp[list]::-webkit-calendar-picker-indicator{opacity:0;width:0}

/* ===== v12: privacy, forecast, calendar, loans ===== */
.round[aria-pressed="true"]{background:var(--ink);color:var(--bg);border-color:var(--ink)}
.tx .amt small{text-transform:none}
.filters{display:flex;gap:8px;margin-bottom:6px;align-items:stretch}
.filters .chip{flex:none;white-space:nowrap}
.filters .sel{flex:1 1 0;min-width:0;background-color:var(--surface);border-color:var(--line);font-size:14.5px;font-weight:600;text-overflow:ellipsis}
/* month-end forecast */
/* activity calendar */
.cal{padding:14px 12px 12px}
.cal-g{display:grid;grid-template-columns:repeat(7,1fr);gap:5px}
.cal-h{margin-bottom:6px}
.cal-h span{text-align:center;font-size:11px;font-weight:700;color:var(--muted)}
.cd{position:relative;aspect-ratio:1/1.05;border:0;border-radius:11px;padding:4px 2px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;
  background:color-mix(in srgb,var(--brand-2) calc(var(--h,0)*100%),var(--sunk));color:var(--ink);font:inherit;transition:transform .12s}
.cd:active{transform:scale(.94)}
.cd b{font:700 14px/1 var(--display)}
.cd small{font-size:9.5px;font-weight:700;opacity:.85;font-variant-numeric:tabular-nums}
.cd.future{opacity:.45}
.cd.today{box-shadow:inset 0 0 0 2px var(--brand)}
.cd.over::after{content:'';position:absolute;top:5px;right:5px;width:6px;height:6px;border-radius:50%;background:var(--spend)}
.cd.sel{background:var(--ink);color:var(--bg)}
.cal-f{display:flex;justify-content:space-between;gap:8px;margin-top:10px;font-size:12.5px;color:var(--muted);font-weight:600}

/* ===== v13: bank SMS, accounts ===== */
.btn.wide{width:100%;padding:14px 16px;font-size:16px}
.btn svg{width:19px;height:19px}
.or{display:flex;align-items:center;gap:10px;color:var(--muted);font-size:12.5px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;margin:4px 0 10px}
.or::before,.or::after{content:'';flex:1;height:1px;background:var(--line)}
.rv.off{opacity:.6}
.rv .sel.ask{border-color:var(--warn);box-shadow:0 0 0 3px color-mix(in srgb,var(--warn) 18%,transparent)}
.steps{list-style:none;margin:6px 0 10px;padding:0;display:flex;flex-direction:column;gap:12px}
.steps li{display:flex;gap:12px;align-items:flex-start}
.steps .stepn{flex:none;width:28px;height:28px;border-radius:50%;display:grid;place-items:center;font:800 14px var(--display);color:#fff;background:linear-gradient(135deg,var(--brand-2),var(--brand-3))}
.steps b{font-size:15.5px}
.steps p{margin:3px 0 0;font-size:14.5px;line-height:1.5;color:var(--ink-2)}
.codechip{display:inline-flex;align-items:center;gap:6px;border:1px dashed var(--brand-2);background:var(--brand-soft);color:var(--ink);font:700 14px ui-monospace,SFMono-Regular,Menlo,monospace;padding:2px 4px 2px 8px;border-radius:8px;vertical-align:1px}
.codechip span{font:700 10px var(--body);text-transform:uppercase;letter-spacing:.05em;background:var(--brand);color:#fff;padding:2px 5px;border-radius:5px}
/* Home: bank SMS nudge */
/* accounts */
.bulk{display:flex;flex-direction:column;gap:10px}

/* ===== v13: design ===== */
/* soft aurora behind the top of every screen */
body::before{content:'';position:fixed;left:-10%;right:-10%;top:-12vh;height:62vh;z-index:-1;pointer-events:none;
  background:radial-gradient(38% 48% at 12% 22%,color-mix(in srgb,var(--brand-2) 20%,transparent),transparent 70%),
    radial-gradient(34% 42% at 88% 8%,color-mix(in srgb,var(--brand-3) 16%,transparent),transparent 70%),
    radial-gradient(46% 40% at 55% 62%,color-mix(in srgb,var(--save) 9%,transparent),transparent 72%)}
/* floating glass tab bar */
.tabbar{left:12px;right:12px;bottom:calc(env(safe-area-inset-bottom,0px) + 8px);max-width:560px;margin:0 auto;padding-bottom:0;border:1px solid color-mix(in srgb,var(--line) 80%,transparent);border-radius:26px;
  background:color-mix(in srgb,var(--surface) 70%,transparent);box-shadow:0 20px 40px -20px rgba(6,21,41,.5),0 2px 8px rgba(6,21,41,.06)}
.tabbar .in{height:64px;padding:0 4px}
.tabbar .addbtn span{width:50px;height:50px;border-radius:17px}
.wrap{padding-bottom:calc(var(--tabh) + env(safe-area-inset-bottom,0px) + 44px)}
/* Wealth: cards stacked like Apple Wallet */
.wallet.stack{display:block;overflow:visible;padding:4px 0 0;margin:0}

/* ===== v14 ===== */
.carry{display:inline-block;margin-left:6px;font-size:11.5px;font-weight:700;color:var(--earn);background:color-mix(in srgb,var(--earn) 12%,transparent);padding:1px 7px;border-radius:99px}
.carry.neg{color:var(--spend);background:color-mix(in srgb,var(--spend) 12%,transparent)}
.util{height:10px;border-radius:99px;background:var(--sunk);overflow:hidden;margin-top:14px}
.util i{display:block;height:100%;border-radius:99px}
.rem-list{margin:12px 0 4px;border-radius:14px;background:var(--sunk);padding:4px 12px}
.rem-list>div{display:flex;justify-content:space-between;gap:10px;padding:8px 0;border-top:1px solid var(--line);font-size:13.5px}
.rem-list>div:first-child{border-top:0}
.rem-list>div span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rem-list>div span:last-child{flex:none}
.lockbox .or{color:rgba(255,255,255,.6);margin:6px 0 0}
.lockbox .or::before,.lockbox .or::after{background:rgba(255,255,255,.2)}

/* ===== Arabic, right to left ===== */
[dir=rtl] body{font-family:-apple-system,BlinkMacSystemFont,"SF Arabic","Geeza Pro","Noto Sans Arabic","Segoe UI",Tahoma,sans-serif;letter-spacing:0}
[dir=rtl] *{letter-spacing:0!important}
/* numbers and amounts read left to right, minus sign first */
[dir=rtl] .codechip{direction:ltr}
[dir=rtl] span,[dir=rtl] b,[dir=rtl] strong,[dir=rtl] small,[dir=rtl] .amt,[dir=rtl] .alert-big,[dir=rtl] .bal{unicode-bidi:plaintext}
[dir=rtl] .tx .amt,[dir=rtl] .rows .rw>b:last-child{text-align:left}
[dir=rtl] .back svg,[dir=rtl] .go{transform:scaleX(-1)}
[dir=rtl] .lang-link{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}

/* ===== v15: quick settings, what's new, update bar ===== */
.qs{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:0 0 14px}
.wn{display:flex;gap:12px;align-items:flex-start;padding:12px 0;border-top:1px solid var(--line)}
.wn:first-of-type{border-top:0}
.wn b{font-size:15.5px}
.wn p{margin:2px 0 8px;font-size:14px;color:var(--ink-2);line-height:1.45}
#updbar{position:fixed;left:12px;right:12px;top:calc(env(safe-area-inset-top,0px) + 8px);z-index:90;max-width:560px;margin:0 auto;display:flex;align-items:center;gap:10px;padding:10px 10px 10px 16px;border-radius:18px;color:#fff;
  background:linear-gradient(135deg,#0B2545,#0E6B66);box-shadow:0 14px 30px -12px rgba(6,21,41,.6);font-size:14px}
#updbar span{flex:1}
#updbar button{flex:none;border:0;background:#fff;color:#0B2545;font-weight:800;padding:9px 16px;border-radius:99px;font-size:14px}
.lock-ver{margin:6px 0 0;text-align:center;font-size:12px;color:rgba(255,255,255,.45)}

/* ===== v17: spending map — full-screen 3D globe with floating glass panels ===== */
body.map-open{overflow:hidden}
body.map-open .tabbar{display:none}
.mapv{position:fixed;inset:0;z-index:80;overflow:hidden;color:#EAF2FA;opacity:0;transition:opacity .45s;
  background:radial-gradient(90% 60% at 50% 42%,#0B2747 0%,#040B17 60%,#010307 100%)}
.mapv.in{opacity:1}
.mapv::before{content:'';position:absolute;inset:0;pointer-events:none;opacity:.75;
  background-image:radial-gradient(1px 1px at 12% 18%,#fff9,transparent),radial-gradient(1px 1px at 78% 12%,#fff7,transparent),radial-gradient(1.5px 1.5px at 62% 74%,#fff6,transparent),radial-gradient(1px 1px at 30% 64%,#fff7,transparent),radial-gradient(1px 1px at 88% 52%,#fff6,transparent),radial-gradient(1px 1px at 8% 80%,#fff5,transparent),radial-gradient(1.5px 1.5px at 44% 8%,#fff7,transparent),radial-gradient(1px 1px at 92% 30%,#fff6,transparent),radial-gradient(1px 1px at 20% 40%,#fff5,transparent),radial-gradient(1px 1px at 70% 90%,#fff5,transparent)}
.mv-globe{position:absolute;inset:0;z-index:0;isolation:isolate;direction:ltr}
#mvGlobe .gl-label{position:absolute;left:0;top:0}
[dir=rtl] .gl-label{direction:rtl}
.mv-globe canvas{display:block;touch-action:none}
#mvGlobe .scene-nav-info{display:none}
#globeC{position:absolute;inset:0;width:100%;height:100%}
.mv-top{position:absolute;left:0;right:0;top:0;z-index:2;display:flex;align-items:center;gap:12px;padding:calc(env(safe-area-inset-top,0px) + 10px) 14px 26px;
  background:linear-gradient(180deg,rgba(2,6,13,.85),rgba(2,6,13,0));pointer-events:none}
.mv-top>*{pointer-events:auto}
.mv-x{width:40px;height:40px;flex:none;border-radius:50%;border:1px solid rgba(255,255,255,.18);background:rgba(255,255,255,.1);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);color:#fff;font-size:22px;line-height:1}
.mv-x.sm{width:32px;height:32px;font-size:18px}
.mv-h{flex:1;min-width:0}
.mv-h h2{margin:0;font:800 19px/1.15 var(--display);text-shadow:0 2px 12px rgba(0,0,0,.6)}
.mv-h small{color:rgba(234,242,250,.72);font-size:13px}
.mv-style{display:flex;padding:3px;border-radius:99px;background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.16);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}
.mv-style button{border:0;background:none;width:36px;height:30px;border-radius:99px;font-size:15px;opacity:.55}
.mv-style button[aria-pressed="true"]{background:rgba(255,255,255,.22);opacity:1}
.mv-bottom{position:absolute;left:0;right:0;bottom:0;z-index:2;display:flex;flex-direction:column;gap:10px;padding:30px 0 calc(env(safe-area-inset-bottom,0px) + 12px);
  background:linear-gradient(0deg,rgba(2,6,13,.92) 40%,rgba(2,6,13,0));pointer-events:none}
.mv-bottom>*{pointer-events:auto}
.mv-time,.mv-card,.mv-detail{background:rgba(16,30,50,.55);border:1px solid rgba(255,255,255,.12);-webkit-backdrop-filter:blur(18px) saturate(1.4);backdrop-filter:blur(18px) saturate(1.4)}
.mv-time{display:flex;align-items:center;gap:12px;margin:0 14px;padding:10px 12px;border-radius:20px}
.mv-play{width:40px;height:40px;flex:none;border:0;border-radius:50%;background:linear-gradient(135deg,#1FA2A0,#3CCB6E);color:#fff;font-size:14px;box-shadow:0 6px 18px rgba(60,203,110,.45)}
.mv-track{position:relative;flex:1;min-width:0}
.mv-track input[type=range]{width:100%;accent-color:#4fe3c4;position:relative;z-index:1}
.mv-ticks{position:absolute;left:8px;right:8px;top:50%;display:flex;justify-content:space-between;pointer-events:none}
.mv-ticks i{width:2px;height:8px;margin-top:-4px;border-radius:2px;background:rgba(255,255,255,.25)}
#mvWhen{flex:none;display:flex;flex-direction:column;align-items:flex-end;min-width:92px;font-size:12px;color:rgba(234,242,250,.7)}
#mvWhen b{font-size:14px;color:#fff}
.mv-cards{display:flex;gap:10px;overflow-x:auto;scroll-snap-type:x mandatory;padding:2px 14px;scrollbar-width:none}
.mv-cards::-webkit-scrollbar{display:none}
.mv-card{flex:0 0 148px;scroll-snap-align:center;display:flex;flex-direction:column;align-items:flex-start;gap:3px;padding:12px;border-radius:18px;color:#fff;text-align:start;font:inherit;transition:transform .25s var(--spring),border-color .2s}
.mv-card b{font:800 15.5px/1.2 var(--display);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mv-card small{font-size:11.5px;color:rgba(234,242,250,.65)}
.mv-card .mc-top{display:flex;justify-content:space-between;width:100%;margin-bottom:2px}
.mv-card .mc-rank{font:800 12px var(--display);color:rgba(234,242,250,.55)}
.mv-card .mc-dot{width:10px;height:10px;border-radius:50%;background:var(--c);box-shadow:0 0 10px var(--c),0 0 2px #fff}
.mv-card .mc-amt{font:800 18px var(--display);font-variant-numeric:tabular-nums}
.mv-card .mc-bar{width:100%;height:4px;border-radius:4px;background:rgba(255,255,255,.12);overflow:hidden;margin:2px 0}
.mv-card .mc-bar i{display:block;height:100%;border-radius:4px;background:var(--c)}
.mv-card.on{border-color:var(--c);box-shadow:0 0 0 1px var(--c),0 10px 30px -8px var(--c);transform:translateY(-3px)}
.mv-card.geo{flex-basis:170px;background:linear-gradient(135deg,rgba(31,162,160,.45),rgba(60,203,110,.3))}
.mv-card .mc-ic{font-size:20px}
.mv-detail{margin:0 14px;padding:14px;border-radius:22px;max-height:31vh;overflow:auto;animation:up .35s var(--ease) both}
.mvd-h{display:flex;align-items:center;gap:10px}
.mvd-h>div{flex:1;min-width:0;display:flex;flex-direction:column}
.mvd-h>div b{font:800 19px var(--display)}
.mvd-h small{color:rgba(234,242,250,.7);font-size:12.5px}
.mvd-dot{width:14px;height:14px;border-radius:50%;flex:none;box-shadow:0 0 12px currentColor}
.mvd-amt{font:800 18px var(--display)}
.mv-months{display:flex;align-items:flex-end;gap:6px;height:70px;margin:12px 0 8px;padding:8px;border-radius:14px;background:rgba(0,0,0,.25);overflow-x:auto}
.mv-m{flex:1 0 24px;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:4px;height:100%;border:0;background:none;padding:0;color:rgba(234,242,250,.55);font:600 10.5px var(--body)}
.mv-m i{display:block;width:12px;border-radius:4px}
.mv-m.on{color:#fff}
.mv-m.on i{box-shadow:0 0 0 2px #fff}
.mvd-list{display:flex;flex-direction:column}
.mvd-row{display:flex;align-items:center;gap:10px;padding:9px 2px;border:0;border-top:1px solid rgba(255,255,255,.08);background:none;color:#fff;font:inherit;text-align:start}
.mvd-row:first-child{border-top:0}
.mvd-n{flex:1;min-width:0;display:flex;flex-direction:column}
.mvd-n b{font-size:14.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mvd-n small{color:rgba(234,242,250,.6);font-size:12px}
.mvd-more{margin:6px 0 0;text-align:center;font-size:12.5px;color:rgba(234,242,250,.6)}
/* labels on the 3D globe */
.gl-label{display:flex;align-items:center;gap:6px;transform:translate(-50%,-130%);padding:5px 10px 5px 7px;border-radius:99px;border:1px solid rgba(255,255,255,.22);
  background:rgba(8,20,38,.72);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);color:#fff;font:700 12px/1 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;white-space:nowrap;pointer-events:auto;cursor:pointer}
.gl-label i{width:8px;height:8px;border-radius:50%;box-shadow:0 0 8px currentColor}
.gl-label span{color:rgba(234,242,250,.7);font-weight:600}
.gl-label{transition:opacity .2s}
.gl-label.hid{opacity:0;pointer-events:none}
.gl-label.on{background:rgba(31,162,160,.85);border-color:#fff;transform:translate(-50%,-130%) scale(1.08)}
/* Home card: a turning night Earth */
@keyframes spinEarth{to{background-position:-264px 0}}
/* exchange rates */
.linkbtn{border:0;background:none;padding:0;color:var(--brand);font:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px}
.fxhint{margin:4px 0 0}
.fxsrc{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:16px;background:color-mix(in srgb,var(--brand) 10%,transparent);margin-bottom:8px}
.fxsrc>div{flex:1;min-width:0}
.fxlist .fxr{gap:8px}
.fxr>span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fxf{font-size:18px}
.fxv{display:flex;align-items:center;gap:6px;flex:none;font-size:13px;direction:ltr}
.fxv .inp{width:104px;padding:6px 8px;text-align:end;direction:ltr}
/* accounts & cards hub */
.acc-list{display:flex;flex-direction:column;gap:8px}
.acc-mini{display:flex;align-items:center;gap:12px;width:100%;padding:10px 12px;border-radius:16px;border:1px solid var(--line);background:var(--surface);color:var(--ink);text-align:start;font:inherit}
.am-chip{width:38px;height:26px;border-radius:7px;flex:none;box-shadow:inset 0 0 0 1px rgba(255,255,255,.15)}
.am-t{flex:1;min-width:0;display:flex;flex-direction:column}
.am-t b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.am-t small{color:var(--muted);font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.am-bal{font:700 14px var(--display);font-variant-numeric:tabular-nums}
.am-go{font-size:12.5px;color:var(--brand);font-weight:700}
.bulk-card{padding:12px;border-radius:18px;border:1px solid var(--line);background:color-mix(in srgb,var(--brand) 5%,var(--surface))}
.bc-h{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.bc-h .bulk-n{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;font-size:16px}
.bc-types{margin-bottom:8px}
.bulk-card .field{margin-bottom:8px}
.bulk-card .three{display:grid;grid-template-columns:1.3fr 1fr 1fr;gap:8px}
.bulk-card .two,.bulk-card .three{align-items:end}
.bc-types .chip{padding:6px 11px;font-size:13.5px}
/* goals */
.goal-top{padding:12px 14px;border-radius:16px;background:var(--sunk);margin-bottom:12px}
.gt-amt{display:flex;align-items:baseline;gap:8px;margin-bottom:6px}.gt-amt b{font:800 24px var(--display)}.gt-amt span{color:var(--muted)}
.acc-mini.on{border-color:var(--brand);box-shadow:0 0 0 2px color-mix(in srgb,var(--brand) 35%,transparent)}
.am-chip.cash{display:grid;place-items:center;background:var(--sunk);font-size:15px}
.goal-hint{padding:10px 12px;border-radius:12px;background:color-mix(in srgb,var(--brand) 8%,transparent);line-height:1.5}
.goalseg{flex-wrap:wrap}
.field>label.toggle-row{font-size:15px;font-weight:500;color:var(--ink);text-transform:none;letter-spacing:0}
/* bill text box */
.bb-msg{color:var(--warn);font-weight:600}
/* one activity in detail */
.bd{display:flex;flex-direction:column;gap:10px;margin-bottom:12px}
