:root{--bg:#fff8f0;--surface:#fff;--surface-2:#fbf1e6;--border:#f0e2d3;--text:#3b2f2f;--text-2:#7a6a62;--text-3:#b3a59c;--primary:#d97b4a;--primary-dark:#b9623a;--primary-soft:#fbe4d6;--income:#5e9c6a;--income-soft:#dff0e2;--expense:#d9534f;--expense-soft:#fadedc;--accent:#f2c14e;--radius:18px;--radius-sm:12px;--shadow:0 6px 20px #7850321a;--font:"Noto Sans Thai", "Sarabun", system-ui, -apple-system, "Segoe UI", sans-serif;--tabbar-h:64px;--fab-overhang:36px;--sat:env(safe-area-inset-top,0px);--sab:env(safe-area-inset-bottom,0px)}*,:before,:after{box-sizing:border-box}html,body{margin:0;padding:0}html{-webkit-text-size-adjust:100%;overscroll-behavior-y:none;overflow-x:hidden}body{background:var(--bg);color:var(--text);font-family:var(--font);-webkit-font-smoothing:antialiased;min-height:100dvh;font-size:16px;line-height:1.5}#root{max-width:100vw;min-height:100dvh;overflow-x:hidden}button,input,select,textarea{color:inherit;font-family:inherit;font-size:16px}button{cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border:0;padding:0}a{color:var(--primary-dark);text-decoration:none}img{max-width:100%;display:block}h1,h2,h3,p{margin:0}.page{padding:calc(var(--sat) + 16px) 16px calc(var(--tabbar-h) + var(--fab-overhang) + var(--sab) + 16px);width:100%;max-width:560px;margin:0 auto}.page--plain{padding-bottom:calc(var(--sab) + 24px)}.page-title{margin-bottom:12px;font-size:22px;font-weight:700}.page-head{align-items:center;gap:8px;min-height:44px;margin-bottom:14px;display:flex}.page-head .page-title{flex:1;margin:0}.stack{flex-direction:column;gap:12px;display:flex}.row{align-items:center;gap:10px;display:flex}.grow{flex:1;min-width:0}.muted{color:var(--text-2)}.small{font-size:13px}.center{text-align:center}.mt8{margin-top:8px}.mt16{margin-top:16px}.mt24{margin-top:24px}.mb8{margin-bottom:8px}.mb16{margin-bottom:16px}.card{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px}.card--soft{background:var(--surface-2);box-shadow:none}.card-title{color:var(--text-2);margin-bottom:10px;font-size:15px;font-weight:700}.btn{-webkit-user-select:none;user-select:none;white-space:nowrap;border-radius:999px;justify-content:center;align-items:center;gap:8px;min-height:48px;padding:0 20px;font-size:16px;font-weight:700;transition:transform 80ms,background .15s;display:inline-flex}.btn:active{transform:scale(.97)}.btn:disabled{opacity:.55;cursor:not-allowed;transform:none}.btn--primary{background:var(--primary);color:#fff;box-shadow:0 6px 16px #d97b4a4d}.btn--primary:hover{background:var(--primary-dark)}.btn--soft{background:var(--primary-soft);color:var(--primary-dark)}.btn--ghost{background:var(--surface);color:var(--text);border:1.5px solid var(--border)}.btn--danger{background:var(--expense-soft);color:var(--expense)}.btn--block{width:100%}.btn--big{border-radius:20px;min-height:60px;font-size:18px}.btn--sm{min-height:40px;padding:0 14px;font-size:14px}.icon-btn{width:44px;height:44px;color:var(--text-2);background:0 0;border-radius:50%;flex:none;justify-content:center;align-items:center;font-size:20px;display:inline-flex}.icon-btn:active{background:var(--surface-2)}.field{flex-direction:column;gap:6px;display:flex}.label{color:var(--text-2);font-size:14px;font-weight:600}.input{border:1.5px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);outline:none;width:100%;min-height:50px;padding:10px 14px;font-size:16px;transition:border-color .15s}.input:focus{border-color:var(--primary)}textarea.input{resize:vertical;min-height:72px}.hint{color:var(--text-3);font-size:13px}.error-text{color:var(--expense);font-size:14px}.avatar{color:#fff;border-radius:50%;flex:none;justify-content:center;align-items:center;width:36px;height:36px;font-size:15px;font-weight:700;display:inline-flex}.chip{background:var(--surface);border:1.5px solid var(--border);min-height:36px;color:var(--text-2);white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:0 14px;font-size:14px;font-weight:600;display:inline-flex}.chip--on{background:var(--primary-soft);color:var(--primary-dark);border-color:var(--primary-soft)}.chips{scrollbar-width:none;-webkit-overflow-scrolling:touch;gap:8px;padding-bottom:4px;display:flex;overflow-x:auto}.chips::-webkit-scrollbar{display:none}.amount-income{color:var(--income)}.amount-expense{color:var(--expense)}.divider{background:var(--border);height:1px;margin:8px 0}.empty{text-align:center;color:var(--text-2);padding:28px 16px}.empty .empty-icon{margin-bottom:8px;font-size:44px}.empty p{margin-bottom:14px}.spinner{border:3px solid var(--primary-soft);border-top-color:var(--primary);border-radius:50%;width:28px;height:28px;margin:24px auto;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.toast-wrap{left:0;right:0;bottom:calc(var(--tabbar-h) + var(--fab-overhang) + var(--sab) + 8px);pointer-events:none;z-index:1000;flex-direction:column;align-items:center;gap:8px;padding:0 16px;display:flex;position:fixed}.toast{background:var(--text);color:#fff;box-shadow:var(--shadow);border-radius:14px;max-width:100%;padding:12px 18px;font-size:15px;animation:.2s ease-out pop}.toast--error{background:var(--expense)}.toast--success{background:var(--income)}@keyframes pop{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.sheet-backdrop{z-index:900;background:#3b2f2f73;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}.sheet{background:var(--surface);width:100%;max-width:560px;padding:16px 16px calc(var(--sab) + 20px);border-radius:24px 24px 0 0;max-height:88dvh;animation:.2s ease-out up;overflow-y:auto}@keyframes up{0%{transform:translateY(40px)}to{transform:none}}.sheet-title{margin-bottom:12px;font-size:18px;font-weight:700}.lightbox{z-index:1100;background:#000000eb;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.lightbox img{object-fit:contain;max-width:100vw;max-height:100dvh}.lightbox .icon-btn{top:calc(var(--sat) + 10px);color:#fff;background:#ffffff26;position:absolute;right:10px}.lightbox .nav{bottom:calc(var(--sab) + 16px);text-align:center;color:#fff;font-size:14px;position:absolute;left:0;right:0}.danger-text{color:var(--expense)}.toast--click{pointer-events:auto;cursor:pointer;font:inherit;text-align:left}.tabbar-wrap{z-index:800;pointer-events:none;position:fixed;bottom:0;left:0;right:0}.tabbar{pointer-events:auto;width:100%;min-height:64px;padding-bottom:var(--sab);-webkit-backdrop-filter:saturate(160%)blur(18px);backdrop-filter:saturate(160%)blur(18px);background:#fffcf8db;border-top:1px solid #f0e2d5e6;border-radius:22px 22px 0 0;grid-template-columns:1fr 1fr 1fr 1fr 1fr;align-items:stretch;display:grid;position:relative;box-shadow:0 -8px 28px #78503224,inset 0 1px #ffffffd9}.tabbar>.tab{height:64px}.tab{color:var(--text-3);-webkit-tap-highlight-color:transparent;flex-direction:column;justify-content:center;align-items:center;gap:3px;min-height:44px;text-decoration:none;transition:color .2s;display:flex;position:relative}.tab-ico{width:24px;height:24px;transition:transform .25s cubic-bezier(.34,1.56,.64,1);display:block}.tab-ico svg{width:100%;height:100%;display:block}.tab-label{letter-spacing:.01em;font-size:11px;font-weight:600;line-height:1;transition:color .2s}.tab-dot{background:var(--primary);opacity:0;border-radius:50%;width:5px;height:5px;transition:opacity .25s,transform .25s cubic-bezier(.34,1.56,.64,1);position:absolute;bottom:6px;transform:scale(.3)}.tab--on{color:var(--primary-dark)}.tab--on .tab-ico{transform:translateY(-2px)}.tab--on .tab-dot{opacity:1;transform:scale(1)}.tab:active .tab-ico{transform:scale(.88)}.tab--center{justify-content:flex-end;padding-bottom:7px}.tab-label--center{color:var(--primary-dark);font-weight:700}.fab{pointer-events:auto;left:50%;bottom:calc(var(--sab) + 30px);color:#fff;background:linear-gradient(145deg, #e8905f 0%, var(--primary) 55%, var(--primary-dark) 100%);-webkit-tap-highlight-color:transparent;border-radius:50%;justify-content:center;align-items:center;width:64px;height:64px;transition:transform .18s cubic-bezier(.34,1.56,.64,1),box-shadow .18s;display:flex;position:absolute;transform:translate(-50%);box-shadow:0 10px 24px #d97b4a73,0 0 0 6px #fff8f0f2,0 0 28px #f2c14e59}.fab:after{content:"";pointer-events:none;background:radial-gradient(circle at 30% 25%,#ffffff59,#0000 55%);border-radius:50%;position:absolute;inset:4px}.fab:hover{transform:translate(-50%)translateY(-2px)}.fab:active{transform:translate(-50%)scale(.9);box-shadow:0 4px 12px #d97b4a66,0 0 0 6px #fff8f0f2}.fab svg{z-index:1;filter:drop-shadow(0 1px 1px #00000026);position:relative}@media (prefers-reduced-motion:reduce){.tab-ico,.tab-dot,.fab{transition:none}}.tab-ico{position:relative}.tab-badge{background:var(--expense);color:#fff;border:2px solid var(--bg);border-radius:999px;justify-content:center;align-items:center;min-width:18px;height:18px;padding:0 5px;font-size:11px;font-weight:800;animation:.3s cubic-bezier(.34,1.56,.64,1) badge-in;display:flex;position:absolute;top:-6px;right:-10px}@keyframes badge-in{0%{transform:scale(.4)}to{transform:scale(1)}}.tabbar-wrap--compact .tabbar{-webkit-mask:none;mask:none}.tab--add{color:#fff}.tab-ico--add{background:linear-gradient(145deg, #e8905f, var(--primary) 60%, var(--primary-dark));border-radius:50%;justify-content:center;align-items:center;width:34px;height:34px;display:flex;box-shadow:0 4px 10px #d97b4a59}.tab-ico--add svg{width:20px;height:20px}.logo{display:block}.logo--animated .logo-bag path{fill-opacity:0;stroke-dasharray:4200;stroke-dashoffset:4200px;animation:1.1s ease-out forwards logo-draw,.5s ease-out 1s forwards logo-fill}.logo--animated .logo-heart{opacity:0;animation:.5s cubic-bezier(.34,1.56,.64,1) 1.2s forwards logo-heart-in,1.1s ease-in-out 1.7s infinite logo-beat}@keyframes logo-draw{to{stroke-dashoffset:0}}@keyframes logo-fill{to{fill-opacity:1}}@keyframes logo-heart-in{0%{opacity:0;transform:scale(.3)}to{opacity:1;transform:scale(1)}}@keyframes logo-beat{0%,to{transform:scale(1)}14%{transform:scale(1.16)}28%{transform:scale(1)}42%{transform:scale(1.1)}56%{transform:scale(1)}}@media (prefers-reduced-motion:reduce){.logo--animated .logo-bag path{fill-opacity:1;stroke-dashoffset:0;animation:none}.logo--animated .logo-heart{opacity:1;animation:none}}.scope{background:var(--surface-2);border-radius:999px;grid-template-columns:1fr 1fr;gap:4px;margin-bottom:12px;padding:4px;display:grid}.scope-btn{min-height:42px;color:var(--text-2);border-radius:999px;font-size:15px;font-weight:700;transition:background .15s,color .15s}.scope-btn--on{background:var(--surface);color:var(--primary-dark);box-shadow:var(--shadow)}.budget--good{background:linear-gradient(160deg, var(--surface), var(--income-soft))}.budget--warn{background:linear-gradient(160deg, var(--surface), #fbf0d0)}.budget--over{background:linear-gradient(160deg, var(--surface), var(--expense-soft))}.budget-nums{justify-content:space-between;align-items:flex-end;display:flex}.budget-nums .right{text-align:right}.budget-big{font-variant-numeric:tabular-nums;font-size:24px}.budget-track{background:#0000000f;border-radius:6px;height:12px;margin:8px 0;overflow:hidden}.budget-track span{background:linear-gradient(90deg, var(--income) 0%, var(--accent) 60%, var(--expense) 100%);background-size:340px 100%;border-radius:6px;height:100%;transition:width .6s cubic-bezier(.34,1.3,.64,1);display:block}.budget-msg{font-size:15px;font-weight:600}.goal{background:var(--surface-2);cursor:pointer;color:var(--text);border-radius:16px;align-items:center;gap:12px;padding:12px;display:flex}.goal--done{background:linear-gradient(135deg,#fff3d6,#dff0e2)}.goal-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.goal-done-tag{color:var(--income);margin-top:4px;font-size:13px;font-weight:700}.goal-ring{flex:none;position:relative}.goal-ring svg{display:block}.goal-ring-ico{justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.streak{color:#b9623a;white-space:nowrap;background:#fff0d6;border-radius:999px;padding:2px 10px;font-size:13px;font-weight:700}.streak--chip{margin-top:2px;display:inline-block}.badge-grid{grid-template-columns:repeat(3,1fr);gap:8px;display:grid}.badge{text-align:center;background:var(--surface-2);opacity:.45;filter:grayscale(.8);border-radius:14px;flex-direction:column;align-items:center;gap:2px;padding:10px 4px;display:flex}.badge--on{opacity:1;filter:none;background:linear-gradient(160deg, #fff3d6, var(--primary-soft));box-shadow:var(--shadow)}.badge-ico{font-size:28px}.badge-name{font-size:12px}.badge-desc{color:var(--text-2);font-size:10.5px;line-height:1.25}.tip{align-items:center;gap:10px;padding:12px 14px;display:flex}.tip-ico{font-size:24px}.confetti{pointer-events:none;z-index:1200;position:fixed;inset:0;overflow:hidden}.confetti span{border-radius:2px;width:9px;height:14px;animation:linear forwards confetti-fall;position:absolute;top:-12px}@keyframes confetti-fall{to{opacity:.7;transform:translateY(105vh)rotate(720deg)}}.txrow{min-height:60px;color:var(--text);border-bottom:1px solid var(--border);align-items:center;gap:12px;padding:10px 4px;display:flex}.txrow:last-child{border-bottom:0}.txrow:active{background:var(--surface-2)}.txrow-ico{border-radius:14px;flex:none;justify-content:center;align-items:center;width:44px;height:44px;font-size:22px;display:flex}.txrow-main{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.txrow-title{align-items:center;gap:6px;font-size:15px;font-weight:700;display:flex}.txrow-clip{font-size:13px}.txrow-sub{color:var(--text-2);align-items:center;gap:6px;min-width:0;font-size:13px;display:flex}.txrow-who{flex:none;font-weight:600}.txrow-note{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.txrow-amt{font-variant-numeric:tabular-nums;flex:none;font-size:16px;font-weight:800}.dash-head{margin-bottom:14px}.dash-greet{font-size:18px;font-weight:700;line-height:1.3}.dash-fam{color:var(--text-2);font-size:13px}.dash-summary{padding:18px 16px}.dash-balance{text-align:center;margin-bottom:14px}.dash-balance-num{font-variant-numeric:tabular-nums;font-size:36px;font-weight:800;line-height:1.2}.dash-sentence{color:var(--text-2);margin-top:4px;font-size:14px}.dash-io{grid-template-columns:1fr 1fr;gap:10px;display:grid}.dash-io-card{text-align:left;color:var(--text-2);border-radius:14px;padding:12px}.dash-io-card--in{background:var(--income-soft)}.dash-io-card--out{background:var(--expense-soft)}.dash-io-num{font-variant-numeric:tabular-nums;overflow-wrap:anywhere;font-size:19px;font-weight:800}.cat-list{flex-direction:column;gap:6px;min-width:0;margin:0;padding:0;list-style:none;display:flex}.cat-item{color:var(--text);align-items:center;gap:6px;min-height:24px;font-size:14px;display:flex}.cat-dot{border-radius:3px;flex:none;width:10px;height:10px}.cat-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.cat-pct{color:var(--text-2);font-weight:700}.cat-amt{color:var(--text-3);margin-top:-4px;padding-left:40px;font-size:12px}.member-row{text-align:left;background:var(--surface-2);width:100%;color:var(--text);border-radius:14px;align-items:center;gap:12px;padding:10px;display:flex}.member-row:active{background:var(--primary-soft)}.member-bars{flex-direction:column;gap:3px;margin:4px 0;display:flex}.member-bar{background:var(--border);border-radius:3px;height:6px;overflow:hidden}.member-bar span{border-radius:3px;min-width:0;height:100%;display:block}.report-cta{color:var(--text);background:linear-gradient(135deg, var(--surface) 0%, var(--primary-soft) 100%);align-items:center;gap:12px;display:flex}.report-cta:active{transform:scale(.985)}.report-cta-ico{background:var(--surface);width:44px;height:44px;box-shadow:var(--shadow);border-radius:14px;justify-content:center;align-items:center;font-size:22px;display:flex}.search{background:var(--surface);border:1.5px solid var(--border);border-radius:999px;align-items:center;gap:8px;min-height:48px;padding:4px 8px 4px 14px;display:flex}.search-input{background:0 0;border:0;outline:none;flex:1;min-width:0;font-size:16px}.tx-summary{flex-direction:column;gap:2px;padding:10px 14px;display:flex}.day-head{justify-content:space-between;align-items:center;padding:6px 4px 4px;display:flex}.txform{padding-bottom:calc(var(--sab) + 100px)}.type-toggle{background:var(--surface-2);border-radius:999px;grid-template-columns:1fr 1fr;gap:4px;padding:4px;display:grid}.type-btn{min-height:44px;color:var(--text-2);border-radius:999px;font-weight:700}.type-btn--expense{background:var(--expense);color:#fff;box-shadow:0 3px 10px #d9534f4d}.type-btn--income{background:var(--income);color:#fff;box-shadow:0 3px 10px #5e9c6a4d}.amount-box{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);border:2px solid #0000;align-items:center;gap:8px;margin-top:16px;padding:10px 18px;display:flex}.amount-box:focus-within{border-color:var(--primary)}.amount-box--income:focus-within{border-color:var(--income)}.amount-cur{color:var(--text-3);font-size:28px;font-weight:800}.amount-input{text-align:right;min-width:0;color:var(--text);font-variant-numeric:tabular-nums;background:0 0;border:0;outline:none;flex:1;padding:0;font-size:40px;font-weight:800}.amount-box--expense .amount-input{color:var(--expense)}.amount-box--income .amount-input{color:var(--income)}.amount-input::placeholder{color:var(--text-3)}.cat-grid{grid-template-columns:repeat(4,1fr);gap:8px;display:grid}.cat-btn{background:var(--surface);border:2px solid var(--border);min-height:72px;color:var(--text-2);border-radius:14px;flex-direction:column;justify-content:center;align-items:center;gap:2px;padding:6px 2px;display:flex}.cat-btn--on{color:var(--text);font-weight:700}.cat-btn-ico{font-size:26px;line-height:1.2}.cat-btn-name{text-align:center;text-overflow:ellipsis;max-width:100%;font-size:11.5px;line-height:1.2;overflow:hidden}.thumbs{flex-wrap:wrap;gap:8px;display:flex}.thumb{background:var(--surface-2);border-radius:12px;width:84px;height:84px;position:relative;overflow:hidden}.thumb img{object-fit:cover;width:100%;height:100%}.thumb-x{color:#fff;background:#0009;border-radius:50%;justify-content:center;align-items:center;width:26px;height:26px;font-size:13px;display:flex;position:absolute;top:4px;right:4px}.thumb-new{color:#fff;text-align:center;background:#5e9c6ad9;font-size:10px;position:absolute;bottom:0;left:0;right:0}.txform-footer{padding:10px 16px calc(var(--sab) + 12px);background:linear-gradient(to top, var(--bg) 70%, transparent);max-width:560px;margin:0 auto;position:fixed;bottom:0;left:0;right:0}.btn--income{background:var(--income);color:#fff;box-shadow:0 6px 16px #5e9c6a4d}.detail-hero{text-align:center;flex-direction:column;align-items:center;gap:4px;padding:22px 16px;display:flex}.detail-hero--income{background:var(--income-soft)}.detail-hero--expense{background:var(--expense-soft)}.detail-ico{background:#fff;border-radius:20px;justify-content:center;align-items:center;width:64px;height:64px;margin-bottom:6px;font-size:34px;display:flex}.detail-amt{font-variant-numeric:tabular-nums;font-size:36px;font-weight:800}.detail-thumbs{grid-template-columns:repeat(3,1fr);gap:8px;display:grid}.detail-thumb{aspect-ratio:1;background:var(--surface-2);border-radius:12px;width:100%;padding:0;display:block;overflow:hidden}.detail-thumb img{object-fit:cover;width:100%;height:100%}.auth{min-height:100dvh;padding:calc(var(--sat) + 24px) 20px calc(var(--sab) + 24px);flex-direction:column;justify-content:center;max-width:480px;margin:0 auto;display:flex}.auth-logo{text-align:center;flex-direction:column;align-items:center;gap:10px;margin-bottom:24px;display:flex}.auth-logo h1{color:var(--primary-dark);font-size:30px;font-weight:800}.auth-logo p{color:var(--text-2);font-size:15px}.auth-card{background:var(--surface);box-shadow:var(--shadow);border-radius:24px;padding:22px 18px}.auth-card h2{margin-bottom:4px;font-size:20px;font-weight:700}.auth-card .sub{color:var(--text-2);margin-bottom:16px;font-size:14px}.auth-links{text-align:center;color:var(--text-2);margin-top:18px;font-size:15px}.auth-links a{font-weight:700}.big-choice{text-align:left;background:var(--surface);width:100%;box-shadow:var(--shadow);border:2px solid #0000;border-radius:20px;align-items:center;gap:14px;padding:18px 16px;transition:border-color .15s,transform 80ms;display:flex}.big-choice:active{transform:scale(.98)}.big-choice--primary{background:var(--primary);color:#fff}.big-choice--primary .bc-sub{color:#ffffffd9}.bc-ico{background:#ffffff40;border-radius:16px;flex:none;justify-content:center;align-items:center;width:52px;height:52px;font-size:34px;display:flex}.big-choice:not(.big-choice--primary) .bc-ico{background:var(--primary-soft)}.bc-title{font-size:18px;font-weight:700}.bc-sub{color:var(--text-2);font-size:14px}.code-input{text-align:center;letter-spacing:.35em;text-transform:uppercase;min-height:64px;font-family:ui-monospace,Menlo,monospace;font-size:30px;font-weight:800}.invite-box{background:var(--primary-soft);text-align:center;border-radius:16px;padding:14px}.invite-code{letter-spacing:.3em;color:var(--primary-dark);font-family:ui-monospace,Menlo,monospace;font-size:34px;font-weight:800}.fam-name{font-size:20px;font-weight:800}.member{border-bottom:1px solid var(--border);cursor:pointer;min-height:56px;padding:8px 0}.member:last-child{border-bottom:0}.tag{background:var(--surface-2);color:var(--text-2);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:600}.tag--owner{background:var(--accent);color:var(--text)}.cat-rows{flex-direction:column;display:flex}.cat-row{border-bottom:1px solid var(--border);min-height:52px;color:var(--text);align-items:center;gap:12px;width:100%;padding:6px 0;font-size:15px;display:flex}.cat-row:last-of-type{border-bottom:0}.cat-row--off{opacity:.5}.cat-row-ico{border-radius:12px;flex:none;justify-content:center;align-items:center;width:40px;height:40px;font-size:22px;display:inline-flex}.emoji-grid{grid-template-columns:repeat(8,1fr);gap:6px;display:grid}.emoji-btn{background:var(--surface-2);border-radius:10px;min-height:40px;font-size:22px}.emoji-btn--on{background:var(--primary-soft);outline:2px solid var(--primary)}.emoji-free{text-align:center;grid-column:span 2;min-height:40px;padding:4px;font-size:22px}.color-row{flex-wrap:wrap;gap:10px;display:flex}.color-dot{border:3px solid #0000;border-radius:50%;width:36px;height:36px}.color-dot--on{border-color:var(--text);transform:scale(1.1)}.tag--kid{color:#3e7a4b;background:#dff0e2}.kid-row{background:var(--surface-2);border-radius:14px;padding:10px 12px}.trend{grid-template-columns:repeat(6,1fr);align-items:end;gap:6px;height:150px;display:grid}.trend-col{border-radius:10px;flex-direction:column;align-items:center;gap:4px;height:100%;padding:4px 2px 2px;transition:background .2s;display:flex}.trend-col--on{background:var(--primary-soft)}.trend-bars{flex:1;justify-content:center;align-items:flex-end;gap:3px;width:100%;display:flex}.trend-bar{border-radius:4px 4px 2px 2px;width:38%;max-width:14px;min-height:2px;transition:height .4s cubic-bezier(.34,1.3,.64,1)}.trend-bar--in{background:var(--income)}.trend-bar--out{background:var(--expense)}.trend-label{color:var(--text-2);font-size:11px;font-weight:600}.trend-col--on .trend-label{color:var(--primary-dark)}.legend-dot{vertical-align:-1px;border-radius:3px;width:10px;height:10px;margin-right:4px;display:inline-block}.trend-sum{border-top:1px solid var(--border);font-variant-numeric:tabular-nums;grid-template-columns:1fr 1fr 1fr;gap:8px;margin-top:12px;padding-top:12px;display:grid}.trend-sum b{overflow-wrap:anywhere;font-size:14px}.stat-row{grid-template-columns:1fr 1fr;gap:10px;display:grid}.stat{background:var(--surface-2);border-radius:14px;padding:12px}.stat-num{font-variant-numeric:tabular-nums;overflow-wrap:anywhere;font-size:22px;font-weight:800}.catbar-list{flex-direction:column;gap:12px;display:flex}.catbar{color:var(--text);align-items:flex-start;gap:10px;display:flex}.catbar-ico{border-radius:12px;flex:none;justify-content:center;align-items:center;width:38px;height:38px;font-size:20px;display:flex}.catbar-main{flex-direction:column;flex:1;gap:4px;min-width:0;font-size:14px;display:flex}.catbar-track{background:var(--border);border-radius:4px;height:8px;display:block;overflow:hidden}.catbar-track span{border-radius:4px;height:100%;transition:width .4s;display:block}.member-line{text-align:left;background:var(--surface-2);width:100%;color:var(--text);border-radius:14px;align-items:center;gap:12px;padding:10px;display:flex}.member-line .grow{flex-direction:column;gap:4px;display:flex}.chat{padding-top:var(--sat);width:100%;max-width:560px;padding-bottom:calc(var(--tabbar-h) + var(--sab));flex-direction:column;margin:0 auto;display:flex;position:fixed;inset:0}.chat-head{flex-direction:column;gap:2px;padding:14px 16px 8px;display:flex}.chat-list{-webkit-overflow-scrolling:touch;flex-direction:column;flex:1;gap:4px;min-height:0;padding:6px 12px 12px;display:flex;overflow-y:auto}.chat-day{justify-content:center;margin:10px 0 6px;display:flex}.chat-day span{background:var(--surface-2);color:var(--text-2);border-radius:999px;padding:3px 12px;font-size:12px;font-weight:600}.msg{align-items:flex-end;gap:8px;max-width:86%;display:flex}.msg--first{margin-top:8px}.msg--mine{flex-direction:row-reverse;align-self:flex-end}.msg-avatar{flex:none;width:30px}.msg-body{flex-direction:column;gap:2px;min-width:0;display:flex}.msg-name{color:var(--text-2);margin-left:4px;font-size:12px;font-weight:600}.msg-bubble{background:var(--surface);border-radius:18px 18px 18px 6px;flex-direction:column;gap:6px;min-width:0;padding:8px 12px;animation:.2s ease-out bubble-in;display:flex;box-shadow:0 2px 8px #78503214}.msg--mine .msg-bubble{background:var(--primary-soft);border-radius:18px 18px 6px}@keyframes bubble-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.msg-text{white-space:pre-wrap;overflow-wrap:anywhere;font-size:15px}.msg-meta{color:var(--text-3);align-items:center;gap:10px;font-size:11px;display:flex}.msg--mine .msg-meta{justify-content:flex-end}.msg-act{color:var(--text-3);min-height:20px;font-size:11px}.msg-act:active{color:var(--primary-dark)}.msg-media{object-fit:cover;background:var(--surface-2);border-radius:12px;max-width:min(240px,60vw);max-height:300px;display:block}.msg-media-btn{padding:0;display:block}.msg-expired{color:var(--text-3);background:var(--surface-2);border-radius:12px;padding:10px 12px;font-size:13px}.msg-tx{background:var(--surface-2);color:var(--text);text-align:left;border-radius:12px;align-items:center;gap:10px;min-width:200px;padding:8px 10px;display:flex}.msg--mine .msg-tx{background:#ffffffb3}.msg-tx-ico{border-radius:10px;flex:none;justify-content:center;align-items:center;width:34px;height:34px;font-size:18px;display:flex}.chat-quote{border-left:3px solid var(--primary);color:var(--text-2);background:#00000008;border-radius:6px;min-width:0;padding:2px 8px;font-size:13px}.chat-quote-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.chat-quote--compose{align-items:center;gap:6px;margin:0 0 6px;display:flex}.chat-compose{background:var(--bg);border-top:1px solid var(--border);margin-bottom:0;padding:8px 12px 10px}.chat-row{align-items:center;gap:4px;display:flex}.chat-ico{width:40px;height:40px;font-size:22px}.chat-input{border:1.5px solid var(--border);background:var(--surface);border-radius:999px;outline:none;flex:1;min-width:0;min-height:44px;padding:0 16px;font-size:16px}.chat-input:focus{border-color:var(--primary)}.chat-send{background:var(--primary);color:#fff;border-radius:50%;flex:none;justify-content:center;align-items:center;width:44px;height:44px;transition:transform .12s;display:flex;box-shadow:0 4px 12px #d97b4a59}.chat-send:active{transform:scale(.9)}.chat-send:disabled{opacity:.4;box-shadow:none}.chat-attach{align-items:center;gap:10px;margin-bottom:6px;display:flex}.chat-attach img,.chat-attach video{object-fit:cover;background:var(--surface-2);border-radius:10px;width:56px;height:56px}.chat-hint{color:var(--text-3);text-align:center;overflow-wrap:anywhere;padding:6px 4px 0;font-size:11.5px;line-height:1.4}.intro{z-index:2000;opacity:1;background:linear-gradient(170deg,#fff8f0 0%,#fdeedf 55%,#fbe4d6 100%);justify-content:center;align-items:center;transition:opacity .55s,transform .55s;display:flex;position:fixed;inset:0;overflow:hidden}.intro--leave{opacity:0;pointer-events:none;transform:scale(1.04)}.intro-blob{filter:blur(40px);opacity:.55;will-change:transform;border-radius:50%;animation:9s ease-in-out infinite alternate blob-float;position:absolute}.intro-blob--a{background:radial-gradient(circle,#fbe4d6,#f7c9b2 60%,#0000 72%);width:60vmax;height:60vmax;top:-18vmax;left:-20vmax}.intro-blob--b{background:radial-gradient(circle,#f9dcc8,#f2c14e55 60%,#0000 72%);width:50vmax;height:50vmax;animation-duration:11s;animation-delay:-3s;bottom:-14vmax;right:-18vmax}.intro-blob--c{opacity:.45;background:radial-gradient(circle,#ffd9b8aa,#0000 70%);width:36vmax;height:36vmax;animation-duration:13s;animation-delay:-6s;bottom:10%;left:30%}@keyframes blob-float{0%{transform:translate(0)scale(1)}to{transform:translate(6vmax,-4vmax)scale(1.12)}}.intro-particles{pointer-events:none;position:absolute;inset:0}.intro-p{opacity:0;background:radial-gradient(circle,#fff,#f2c14e 60%,#0000 70%);border-radius:50%;animation:linear infinite p-rise;position:absolute;bottom:-24px}.intro-p--heart{color:#f3654a;text-align:center;background:0 0;font-size:16px;line-height:1}@keyframes p-rise{0%{opacity:0;transform:translateY(0)translate(0)scale(.6)}12%{opacity:.9}70%{opacity:.6}to{opacity:0;transform:translateY(-105vh)translate(18px)scale(1.1)}}.intro-center{flex-direction:column;align-items:center;gap:14px;padding:24px;display:flex;position:relative}.intro-logo{animation:.9s cubic-bezier(.34,1.56,.64,1) both logo-pop;position:relative}.intro-glow{filter:blur(16px);z-index:-1;background:radial-gradient(circle,#07595447,#f3654a2e 45%,#0000 70%);border-radius:50%;animation:2.4s ease-in-out infinite glow-pulse;position:absolute;inset:-30px}.intro-logo .logo{border-radius:28px;box-shadow:0 18px 40px #07595447}@keyframes logo-pop{0%{opacity:0;transform:scale(.6)}to{opacity:1;transform:scale(1)}}@keyframes glow-pulse{0%,to{opacity:.7;transform:scale(1)}50%{opacity:1;transform:scale(1.08)}}.intro-title{color:#b8582a;letter-spacing:.01em;font-size:44px;font-weight:800;line-height:1.2;display:flex}.intro-title span{opacity:0;animation:.5s cubic-bezier(.34,1.3,.64,1) forwards ch-in;display:inline-block;transform:translateY(18px)}@keyframes ch-in{to{opacity:1;transform:none}}.intro-tagline{color:var(--text-2);opacity:0;font-size:15px;animation:.6s ease-out 1.5s forwards ch-in;transform:translateY(10px)}@media (prefers-reduced-motion:reduce){.intro-blob,.intro-p,.intro-glow,.intro-logo{animation:none}.intro-title span,.intro-tagline{opacity:1;animation:none;transform:none}.intro{transition:opacity .3s}}.legal-viewer{z-index:1200;background:var(--bg,#fff8f0);flex-direction:column;display:flex;position:fixed;inset:0}.legal-viewer__bar{padding:calc(env(safe-area-inset-top) + 8px) 12px 8px;background:#fff8f0;border-bottom:1px solid #f3dcc8;align-items:center;gap:8px;display:flex}.legal-viewer__close{color:#b8582a;text-align:left;background:0 0;border:0;min-width:72px;padding:6px 8px;font-family:inherit;font-size:17px;font-weight:700}.legal-viewer__title{text-align:center;color:#3b2f2f;flex:1;font-size:16px;font-weight:700}.legal-viewer__spacer{min-width:72px}.legal-viewer__frame{background:#fff8f0;border:0;flex:1;width:100%}
