.pl-cal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-sm)}.pl-cal-month{font-size:15px;font-weight:var(--fw-bold)}.pl-cal-nav{width:36px;height:36px;border-radius:var(--radius-circle);background:var(--bg);color:var(--text-secondary);font-size:20px;line-height:1;display:flex;align-items:center;justify-content:center;transition:transform .1s ease,background .15s ease}.pl-cal-nav:active{transform:scale(.88)}.pl-cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}.pl-cal-dow{text-align:center;font-size:var(--fs-caption-sm);font-weight:var(--fw-semibold);color:var(--text-tertiary);padding:6px 0 4px}.pl-cal-day{position:relative;min-height:44px;padding:4px 0 6px;border-radius:var(--radius-sm);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;font-size:var(--fs-body-xs);font-weight:var(--fw-medium);color:var(--text-primary);transition:background .15s ease,transform .1s ease}.pl-cal-day:active{transform:scale(.92)}.pl-cal-day.out{color:var(--text-tertiary);opacity:.5}.pl-cal-day.selected{box-shadow:inset 0 0 0 2px var(--primary);font-weight:var(--fw-bold)}.pl-cal-day.today{background:var(--gradient-primary);color:#fff;font-weight:var(--fw-bold);box-shadow:0 3px 12px #e85d7559}.pl-dots{display:flex;gap:3px;height:5px}.pl-dot{width:5px;height:5px;border-radius:50%}.pl-cal-day.today .pl-dot{background:#fffffff2!important}.pl-event{border-left:3px solid var(--border);padding-left:10px}.pl-time{flex-shrink:0;width:44px;font-size:var(--fs-caption);font-weight:var(--fw-bold);color:var(--text-secondary)}.pl-edit{flex:1;min-width:0;text-align:left;padding:0}.pl-del{flex-shrink:0;width:32px;height:32px;border-radius:var(--radius-circle);display:flex;align-items:center;justify-content:center;font-size:14px;opacity:.55;transition:transform .1s ease,opacity .15s ease}.pl-del:active{transform:scale(.88)}@media (hover: hover){.pl-del:hover{opacity:1}}.pl-task-meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:var(--fs-caption);color:var(--text-tertiary);margin-top:2px}.pl-due-late{color:var(--primary-dark);font-weight:var(--fw-semibold)}[data-theme=dark] .pl-due-late{color:var(--primary-light)}.pl-collapse{width:100%;display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);font-size:15px;font-weight:var(--fw-bold);color:var(--text-primary);padding:0}.pl-chevron{font-size:11px;color:var(--text-tertiary);transition:transform .2s ease}.pl-chevron.open{transform:rotate(90deg)}.pl-chips{display:flex;flex-wrap:wrap;gap:8px}.pl-chip{display:inline-flex;align-items:center;gap:6px;min-height:40px;padding:8px 13px;border:1.5px solid var(--border);border-radius:var(--radius-pill);background:var(--surface);font-size:var(--fs-body-xs);font-weight:var(--fw-semibold);color:var(--text-secondary);transition:background .15s ease,color .15s ease,border-color .15s ease,transform .1s ease}.pl-chip:active{transform:scale(.95)}.pl-chip.active{background:var(--gradient-primary);border-color:transparent;color:#fff;box-shadow:0 3px 10px #e85d754d}.pl-row2{display:grid;grid-template-columns:1fr 1fr;gap:12px}.fz-balance{text-align:center;padding:var(--space-lg) var(--space-md)}.fz-balance-label{font-size:var(--fs-body-xs);font-weight:var(--fw-semibold);color:var(--text-secondary)}.fz-balance-amount{font-size:36px;font-weight:var(--fw-extrabold);line-height:1.15;margin:6px 0 4px}.fz-balance-amount.pos{color:var(--accent-green)}.fz-balance-amount.neg{color:var(--accent-orange)}.fz-balance-sub{font-size:var(--fs-caption);color:var(--text-tertiary)}.fz-settled{opacity:.55}.fz-del{flex-shrink:0;width:32px;height:32px;border-radius:var(--radius-circle);display:flex;align-items:center;justify-content:center;font-size:14px;opacity:.55;transition:transform .1s ease,opacity .15s ease}.fz-del:active{transform:scale(.88)}@media (hover: hover){.fz-del:hover{opacity:1}}.fz-debt-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:10px 0;border-bottom:1px solid var(--border);font-size:var(--fs-body-sm)}.fz-debt-row:last-child{border-bottom:none}.fz-debt-amount{font-weight:var(--fw-bold);color:var(--primary-dark);white-space:nowrap}[data-theme=dark] .fz-debt-amount{color:var(--primary-light)}.fz-even{text-align:center;font-size:var(--fs-body-sm);font-weight:var(--fw-semibold);color:var(--accent-green);padding:var(--space-md) 0 var(--space-sm)}.fz-goal-head{display:flex;align-items:center;gap:10px;margin-bottom:12px}.fz-goal-actions{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-sm);margin-top:12px}.fz-chips{display:flex;flex-wrap:wrap;gap:8px}.fz-chip{display:inline-flex;align-items:center;gap:6px;min-height:40px;padding:8px 13px;border:1.5px solid var(--border);border-radius:var(--radius-pill);background:var(--surface);font-size:var(--fs-body-xs);font-weight:var(--fw-semibold);color:var(--text-secondary);transition:background .15s ease,color .15s ease,border-color .15s ease,transform .1s ease}.fz-chip:active{transform:scale(.95)}.fz-chip.active{background:var(--gradient-primary);border-color:transparent;color:#fff;box-shadow:0 3px 10px #e85d754d}.fz-amount-input{font-size:26px;font-weight:var(--fw-extrabold);text-align:center}.fz-split-hint{font-size:var(--fs-caption);color:var(--text-tertiary);margin-top:6px}.fz-row2{display:grid;grid-template-columns:1fr 1fr;gap:12px}.mm-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-sm)}.mm-timeline{position:relative;padding-left:22px}.mm-timeline:before{content:"";position:absolute;left:5px;top:8px;bottom:8px;width:2px;border-radius:1px;background:linear-gradient(180deg,var(--primary-light),var(--secondary-light))}.mm-year{position:relative;font-size:var(--fs-caption);font-weight:var(--fw-extrabold);letter-spacing:2px;color:var(--text-tertiary);margin:var(--space-xs) 0 10px}.mm-year:before{content:"";position:absolute;left:-22px;top:50%;width:12px;height:12px;transform:translateY(-50%);border-radius:50%;background:var(--surface);border:3px solid var(--secondary-light)}.mm-item{position:relative;margin-bottom:var(--space-md)}.mm-node{position:absolute;left:-22px;top:18px;width:12px;height:12px;border-radius:50%;background:var(--gradient-primary);border:2px solid var(--bg);box-shadow:0 0 0 2px var(--primary-light)}.mm-node.fav{background:linear-gradient(135deg,var(--accent-gold),var(--accent-orange));box-shadow:0 0 0 2px var(--accent-gold)}.mm-card{animation:fadeIn .3s ease backwards}.mm-date{font-size:var(--fs-caption);font-weight:var(--fw-bold);color:var(--primary);letter-spacing:.4px}.mm-title{font-size:15px;font-style:italic;font-weight:var(--fw-medium);margin:4px 0 2px}.mm-content{font-size:var(--fs-body-xs);color:var(--text-secondary);margin-top:2px}.mm-card .memory-emojis{flex-wrap:wrap;margin-top:10px}.mm-card .memory-emoji{width:48px;height:48px;font-size:24px}.mm-foot{display:flex;align-items:center;gap:var(--space-sm);margin-top:10px}.mm-spacer{flex:1}.mm-heart{width:40px;height:40px;border-radius:var(--radius-circle);display:flex;align-items:center;justify-content:center;font-size:20px;transition:transform .12s ease,background .15s ease}.mm-heart:active{transform:scale(.88)}.mm-heart.pop{animation:heartbeat 1s ease-in-out}.mm-menu-wrap{position:relative}.mm-menu-btn{width:40px;height:40px;border-radius:var(--radius-circle);display:flex;align-items:center;justify-content:center;font-size:18px;color:var(--text-tertiary);letter-spacing:1px}.mm-menu{position:absolute;right:0;top:42px;z-index:20;min-width:150px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);box-shadow:var(--shadow-modal);overflow:hidden;animation:fadeIn .15s ease}.mm-menu button{display:flex;align-items:center;gap:var(--space-sm);width:100%;text-align:left;padding:11px 14px;font-size:var(--fs-body-sm);font-weight:var(--fw-medium)}.mm-menu button:active{background:var(--bg)}.mm-menu .mm-danger{color:var(--accent-orange)}.mm-chips{display:flex;flex-wrap:wrap;gap:var(--space-sm)}.mm-chip{padding:9px 14px;border-radius:var(--radius-pill);border:1.5px solid var(--border);background:var(--surface);font-size:var(--fs-body-xs);font-weight:var(--fw-semibold);color:var(--text-secondary);transition:border-color .15s ease,background .15s ease,color .15s ease,transform .1s ease}.mm-chip:active{transform:scale(.95)}.mm-chip.sel{border-color:var(--primary);background:var(--red-soft);color:var(--primary-dark)}[data-theme=dark] .mm-chip.sel{color:var(--primary-light)}.mm-emoji-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:var(--space-sm)}.mm-emoji-cell{font-size:22px;padding:9px 0;border-radius:var(--radius-sm);border:1.5px solid transparent;background:var(--bg);transition:border-color .15s ease,background .15s ease,transform .1s ease}.mm-emoji-cell:active{transform:scale(.9)}.mm-emoji-cell.sel{border-color:var(--primary);background:var(--red-soft);transform:scale(1.05)}.mm-emoji-preview{min-height:34px;display:flex;align-items:center;flex-wrap:wrap;gap:6px;font-size:24px;margin-bottom:var(--space-sm)}.mm-emoji-preview .mm-hint{font-size:var(--fs-caption);color:var(--text-tertiary)}.mm-textarea{min-height:80px;resize:vertical;line-height:1.4;padding-top:12px}.lgr-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-sm)}.lgr-hero{background:linear-gradient(135deg,#fdcb6e29,#e85d751a);border:1px solid rgba(253,203,110,.35)}.lgr-hero-top{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);margin-bottom:var(--space-md)}.lgr-streak{display:flex;align-items:center;gap:var(--space-sm)}.lgr-flame{font-size:44px;line-height:1}.lgr-streak-n{font-size:30px;font-weight:var(--fw-extrabold);line-height:1.1}.lgr-streak-label{font-size:var(--fs-caption);color:var(--text-secondary);font-weight:var(--fw-medium)}.lgr-level-circle{width:72px;height:72px;flex-shrink:0;border-radius:var(--radius-circle);background:var(--gradient-primary);color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;box-shadow:0 4px 14px #e85d7559}.lgr-level-n{font-size:26px;font-weight:var(--fw-extrabold);line-height:1}.lgr-level-label{font-size:10px;font-weight:var(--fw-semibold);text-transform:uppercase;letter-spacing:1px;opacity:.9}.lgr-level-name{font-size:var(--fs-body);font-weight:var(--fw-bold);margin-bottom:var(--space-sm)}.lgr-badges{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.lgr-badge{position:relative;display:flex;flex-direction:column;align-items:center;text-align:center;gap:4px;padding:12px 6px 10px;border-radius:var(--radius-md);border:2px solid var(--border);background:var(--surface)}.lgr-badge-icon{font-size:30px;line-height:1.1}.lgr-badge-name{font-size:var(--fs-caption-sm);font-weight:var(--fw-bold);line-height:1.2}.lgr-badge-sub{font-size:10px;color:var(--text-tertiary);line-height:1.25}.lgr-badge.rarity-common{border-color:var(--border)}.lgr-badge.rarity-uncommon{border-color:var(--accent-green)}.lgr-badge.rarity-rare{border-color:var(--accent-blue)}.lgr-badge.rarity-legendary{border-color:var(--accent-gold);animation:lgrGlow 2s ease-in-out infinite}@keyframes lgrGlow{0%,to{box-shadow:0 0 6px #fdcb6e59}50%{box-shadow:0 0 16px #fdcb6eb3}}.lgr-badge.locked{border-color:var(--border);background:var(--bg);animation:none;box-shadow:none}.lgr-badge.locked .lgr-badge-icon{filter:grayscale(1);opacity:.45}.lgr-badge.locked .lgr-badge-name{color:var(--text-tertiary)}.lgr-lock{position:absolute;top:6px;right:8px;font-size:11px}.lgr-badge.new{animation:bounce .5s ease}.lgr-badge.rarity-legendary.new{animation:bounce .5s ease,lgrGlow 2s ease-in-out infinite}.lgr-next-item{display:flex;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--border)}.lgr-next-item:last-child{border-bottom:none;padding-bottom:0}.lgr-next-icon{flex-shrink:0;width:40px;height:40px;border-radius:10px;background:var(--bg);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;font-size:20px;filter:grayscale(.8)}.lgr-next-body{flex:1;min-width:0}.lgr-next-name{font-size:var(--fs-body-sm);font-weight:var(--fw-semibold)}.lgr-next-hint{font-size:var(--fs-caption);color:var(--text-tertiary);margin-bottom:4px}.fam-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-sm)}.fam-invite{text-align:center;padding:var(--space-xl) var(--space-lg)}.fam-invite-emoji{font-size:72px;line-height:1;display:inline-block;animation:float 3s ease-in-out infinite;margin-bottom:var(--space-md)}.fam-invite-title{font-size:var(--fs-h3);font-weight:var(--fw-extrabold);margin-bottom:var(--space-xs)}.fam-invite-sub{font-size:var(--fs-body-xs);color:var(--text-secondary);margin-bottom:var(--space-lg)}.fam-benefits{text-align:left;display:flex;flex-direction:column;gap:12px;margin-bottom:var(--space-lg)}.fam-benefit{display:flex;align-items:center;gap:12px;background:var(--bg);border-radius:var(--radius-sm);padding:12px 14px}.fam-benefit-icon{font-size:22px;flex-shrink:0}.fam-benefit-text{font-size:var(--fs-body-xs);font-weight:var(--fw-medium)}.fam-child{animation:fadeIn .3s ease backwards}.fam-child-top{display:flex;align-items:center;gap:12px}.fam-child-body{flex:1;min-width:0}.fam-child-name{font-size:var(--fs-body);font-weight:var(--fw-bold)}.fam-child-meta{font-size:var(--fs-body-xs);color:var(--text-secondary)}.fam-child-actions{display:flex;gap:4px}.fam-icon-btn{width:36px;height:36px;border-radius:var(--radius-circle);display:flex;align-items:center;justify-content:center;font-size:15px;transition:transform .1s ease,background .15s ease}.fam-icon-btn:active{transform:scale(.9);background:var(--bg)}.fam-status{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-top:12px}.fam-status-btn{min-height:40px;padding:6px 4px;border-radius:var(--radius-sm);border:1.5px solid var(--border);background:var(--surface);font-size:var(--fs-caption-sm);font-weight:var(--fw-semibold);color:var(--text-secondary);display:flex;align-items:center;justify-content:center;gap:4px;transition:border-color .15s ease,background .15s ease,color .15s ease,transform .1s ease}.fam-status-btn:active{transform:scale(.96)}.fam-status-btn.sel-school{border-color:var(--accent-green);background:var(--green-soft);color:var(--accent-green)}.fam-status-btn.sel-home{border-color:var(--primary);background:var(--red-soft);color:var(--primary-dark)}.fam-status-btn.sel-activity{border-color:var(--accent-blue);background:var(--blue-soft);color:#2f7ec7}[data-theme=dark] .fam-status-btn.sel-home{color:var(--primary-light)}[data-theme=dark] .fam-status-btn.sel-activity{color:var(--accent-blue)}.fam-total{display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--border);padding-top:10px;margin-top:10px;font-size:var(--fs-body-sm);font-weight:var(--fw-bold)}.fam-back{text-align:center;margin-top:var(--space-sm)}.fam-back button{font-size:var(--fs-caption);color:var(--text-tertiary);text-decoration:underline;padding:10px}.fam-chips{display:flex;flex-wrap:wrap;gap:var(--space-sm)}.fam-chip{padding:9px 14px;border-radius:var(--radius-pill);border:1.5px solid var(--border);background:var(--surface);font-size:var(--fs-body-xs);font-weight:var(--fw-semibold);color:var(--text-secondary);transition:border-color .15s ease,background .15s ease,color .15s ease}.fam-chip.sel{border-color:var(--accent-blue);background:var(--blue-soft);color:#2f7ec7}[data-theme=dark] .fam-chip.sel{color:var(--accent-blue)}.fam-avatar-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-sm)}.fam-avatar-cell{font-size:28px;padding:10px 0;border-radius:var(--radius-sm);border:1.5px solid transparent;background:var(--bg);transition:border-color .15s ease,background .15s ease,transform .1s ease}.fam-avatar-cell:active{transform:scale(.9)}.fam-avatar-cell.sel{border-color:var(--accent-blue);background:var(--blue-soft);transform:scale(1.05)}.set-profile{display:flex;align-items:center;gap:14px}.set-profile-name{font-size:var(--fs-body);font-weight:var(--fw-bold)}.set-profile-email{font-size:var(--fs-body-xs);color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis}.set-couple{display:flex;align-items:center;gap:14px}.set-couple-names{font-size:var(--fs-body-sm);font-weight:var(--fw-semibold)}.set-couple-status{font-size:var(--fs-caption);color:var(--text-secondary)}.set-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);padding:12px 0;border-bottom:1px solid var(--border)}.set-row:last-child{border-bottom:none;padding-bottom:0}.set-row:first-of-type{padding-top:0}.set-row-label{font-size:var(--fs-body-sm);font-weight:var(--fw-semibold)}.set-row-desc{font-size:var(--fs-caption);color:var(--text-tertiary);margin-top:2px}.set-row .input{max-width:170px;min-height:42px;padding:8px 10px;font-size:var(--fs-body-sm)}.set-row select.input{max-width:190px}.set-switch{position:relative;flex-shrink:0;width:50px;height:30px;border-radius:15px;background:var(--border);transition:background .25s ease;padding:0}.set-switch.on{background:var(--gradient-primary)}.set-switch.on.family{background:var(--gradient-child)}.set-switch-knob{position:absolute;top:3px;left:3px;width:24px;height:24px;border-radius:50%;background:#fff;box-shadow:0 2px 6px #00000040;display:flex;align-items:center;justify-content:center;font-size:13px;transition:transform .25s cubic-bezier(.4,0,.2,1)}.set-switch.on .set-switch-knob{transform:translate(20px)}.set-logout-confirm{display:flex;gap:var(--space-sm);margin-top:var(--space-sm)}.set-logout-confirm .btn{flex:1}.set-version{text-align:center;font-size:var(--fs-caption);color:var(--text-tertiary);margin-top:var(--space-md)}:root{--primary: #2e8b8e;--primary-dark: #1f6b6d;--primary-light: #a8d3d4;--secondary: #3e7ca8;--secondary-light: #8fb8d6;--accent-gold: #e8923a;--accent-green: #8cb544;--accent-blue: #5e9cc7;--accent-orange: #e17055;--accent-pink: #e98a9c;--bg: #faf9f5;--surface: #ffffff;--text-primary: #253c3e;--text-secondary: #5c6e70;--text-tertiary: #a9bbbc;--border: #e2e8e5;--desktop-bg: #e9e5dd;--green-soft: rgba(140, 181, 68, .16);--red-soft: rgba(225, 112, 85, .15);--blue-soft: rgba(94, 156, 199, .18);--gold-soft: rgba(232, 146, 58, .2);--purple-soft: rgba(62, 124, 168, .14);--gradient-primary: linear-gradient(135deg, var(--primary), var(--secondary));--gradient-progress: linear-gradient(90deg, var(--primary), var(--secondary));--gradient-icon: linear-gradient(135deg, var(--primary-light), var(--secondary-light));--gradient-ai: linear-gradient(135deg, rgba(62, 124, 168, .08), rgba(46, 139, 142, .08));--gradient-tip: linear-gradient(135deg, rgba(46, 139, 142, .08), rgba(62, 124, 168, .08));--gradient-flashback: linear-gradient(135deg, rgba(232, 146, 58, .15), rgba(140, 181, 68, .15));--gradient-child: linear-gradient(135deg, var(--accent-blue), var(--accent-green));--font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--fs-h1: 32px;--fs-h2: 24px;--fs-h3: 20px;--fs-body: 16px;--fs-body-sm: 14px;--fs-body-xs: 13px;--fs-caption: 12px;--fs-caption-sm: 11px;--fw-regular: 400;--fw-medium: 500;--fw-semibold: 600;--fw-bold: 700;--fw-extrabold: 800;--radius-lg: 20px;--radius-md: 16px;--radius-sm: 12px;--radius-pill: 30px;--radius-circle: 50%;--space-xs: 4px;--space-sm: 8px;--space-md: 16px;--space-lg: 24px;--space-xl: 32px;--shadow-card: 0 4px 20px rgba(31, 107, 109, .08);--shadow-card-hover: 0 8px 30px rgba(46, 139, 142, .18);--shadow-fab: 0 4px 20px rgba(46, 139, 142, .4);--shadow-modal: 0 20px 60px rgba(0, 0, 0, .15);--phone-max-width: 430px;--tabbar-height: 64px}[data-theme=dark]{--bg: #0d1b1c;--surface: #14282a;--text-primary: #e6ecec;--text-secondary: #9fb3b4;--text-tertiary: #5c7375;--border: #23393b;--desktop-bg: #081112;--primary-light: #3a6e70;--secondary-light: #3e6787;--shadow-card: 0 4px 20px rgba(0, 0, 0, .45);--shadow-card-hover: 0 8px 30px rgba(0, 0, 0, .55);--shadow-fab: 0 4px 20px rgba(46, 139, 142, .3);--shadow-modal: 0 20px 60px rgba(0, 0, 0, .65);--gradient-ai: linear-gradient(135deg, rgba(62, 124, 168, .16), rgba(46, 139, 142, .12));--gradient-tip: linear-gradient(135deg, rgba(46, 139, 142, .12), rgba(62, 124, 168, .16));--gradient-flashback: linear-gradient(135deg, rgba(232, 146, 58, .12), rgba(140, 181, 68, .12))}*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{font-family:var(--font-family);font-size:var(--fs-body);color:var(--text-primary);background:var(--desktop-bg);line-height:1.45;-webkit-font-smoothing:antialiased}img,svg{max-width:100%;display:block}button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}button{cursor:pointer;background:none;border:none}a{color:inherit;text-decoration:none}ul,ol{list-style:none}*:focus-visible{outline:2px solid var(--primary);outline-offset:2px}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.app-frame{position:relative;width:100%;max-width:var(--phone-max-width);min-height:100dvh;margin:0 auto;background:var(--bg)}@media (min-width: 431px){.app-frame{box-shadow:0 0 60px #00000038}}.page{padding:var(--space-md) var(--space-md) calc(var(--tabbar-height) + 40px);animation:fadeIn .3s ease}.page-title{font-size:var(--fs-h2);font-weight:var(--fw-extrabold);margin-bottom:var(--space-xs)}.page-subtitle{font-size:var(--fs-body-xs);color:var(--text-secondary);margin-bottom:var(--space-md)}.stack{display:flex;flex-direction:column;gap:var(--space-md)}.splash{min-height:100dvh;display:flex;align-items:center;justify-content:center;font-size:64px}.card{background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);padding:var(--space-md);transition:transform .2s ease-out,box-shadow .2s ease-out}.card-md{border-radius:var(--radius-md)}@media (hover: hover){.card-hover:hover{transform:translateY(-2px);box-shadow:var(--shadow-card-hover)}}.card-title{display:flex;align-items:center;gap:var(--space-sm);font-size:15px;font-weight:var(--fw-bold);margin-bottom:var(--space-sm)}.ai-card{position:relative;overflow:hidden;background:var(--gradient-ai);border:2px solid var(--secondary-light)}.ai-card:before{content:"";position:absolute;top:-40%;right:-40%;bottom:-40%;left:-40%;background:radial-gradient(circle at 30% 30%,rgba(108,92,231,.14),transparent 60%);animation:pulse 1.5s ease-in-out infinite;pointer-events:none}.ai-card>*{position:relative}.badge-ai{display:inline-flex;align-items:center;gap:var(--space-xs);background:var(--secondary);color:#fff;font-size:var(--fs-caption-sm);font-weight:var(--fw-bold);padding:4px 10px;border-radius:var(--radius-pill)}.ai-text{font-size:15px;font-weight:var(--fw-medium);margin:10px 0}.ai-action{font-size:var(--fs-body-sm);font-weight:var(--fw-bold);color:var(--secondary);background:none;padding:0}.flashback-card{background:var(--gradient-flashback);border:1px solid rgba(253,203,110,.3);box-shadow:none}.flashback-label{font-size:var(--fs-caption);font-weight:var(--fw-bold);color:var(--accent-gold);letter-spacing:.5px}.flashback-text{font-size:15px;font-style:italic;font-weight:var(--fw-medium);margin:8px 0 12px}.memory-emojis{display:flex;gap:var(--space-sm)}.memory-emoji{width:60px;height:60px;border-radius:var(--radius-sm);background:var(--gradient-icon);display:flex;align-items:center;justify-content:center;font-size:28px}.tip-card{background:var(--gradient-tip);border:2px solid var(--primary-light)}.tip-suggestion{background:var(--surface);border-radius:var(--radius-sm);padding:12px;font-size:var(--fs-body-xs);margin-top:10px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-sm);min-height:48px;padding:13px 20px;border:none;border-radius:var(--radius-sm);font-family:inherit;font-size:var(--fs-body);font-weight:var(--fw-bold);cursor:pointer;transition:transform .1s ease,opacity .15s ease,box-shadow .2s ease}.btn:active{transform:scale(.97)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--gradient-primary);color:#fff;box-shadow:0 4px 14px #e85d754d}.btn-secondary{background:var(--surface);color:var(--primary);border:2px solid var(--primary-light)}.btn-ghost{background:transparent;color:var(--text-secondary);min-height:40px}.btn-sm{min-height:40px;padding:8px 14px;font-size:var(--fs-body-sm)}.btn-block{width:100%}.pill{display:inline-flex;align-items:center;gap:var(--space-xs);padding:4px 10px;border-radius:var(--radius-pill);font-size:var(--fs-caption-sm);font-weight:var(--fw-bold);white-space:nowrap}.pill-green{background:var(--green-soft);color:var(--accent-green)}.pill-red{background:var(--red-soft);color:var(--primary-dark)}.pill-blue{background:var(--blue-soft);color:#2f7ec7}.pill-gold{background:var(--gold-soft);color:#b8860b}.pill-purple{background:var(--purple-soft);color:var(--secondary)}.pill-gradient{background:var(--gradient-primary);color:#fff}[data-theme=dark] .pill-blue{color:var(--accent-blue)}[data-theme=dark] .pill-gold{color:var(--accent-gold)}[data-theme=dark] .pill-red{color:var(--primary-light)}.progress-labels{display:flex;justify-content:space-between;align-items:baseline;font-size:var(--fs-body-xs);color:var(--text-secondary);margin-bottom:6px;gap:var(--space-sm)}.progress-labels strong{color:var(--text-primary);font-weight:var(--fw-semibold)}.progress{height:8px;background:var(--border);border-radius:4px;overflow:hidden}.progress-fill{height:100%;border-radius:4px;background:var(--gradient-progress);transition:width 1s ease}.progress-fill.gold{background:linear-gradient(90deg,var(--accent-gold),var(--accent-orange))}.progress-fill.green{background:linear-gradient(90deg,var(--accent-green),var(--accent-blue))}.list-row{display:flex;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--border)}.list-row:last-child{border-bottom:none;padding-bottom:0}.list-row:first-of-type{padding-top:0}.row-icon{flex-shrink:0;width:36px;height:36px;border-radius:10px;background:var(--gradient-icon);display:flex;align-items:center;justify-content:center;font-size:18px}.row-icon.lg{width:40px;height:40px;font-size:20px}.row-body{flex:1;min-width:0}.row-title{font-size:var(--fs-body-sm);font-weight:var(--fw-semibold);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.row-meta{font-size:var(--fs-caption);color:var(--text-tertiary)}.row-amount{font-size:var(--fs-body-sm);font-weight:var(--fw-bold);white-space:nowrap}.check{flex-shrink:0;width:24px;height:24px;border-radius:8px;border:2px solid var(--border);background:transparent;display:flex;align-items:center;justify-content:center;font-size:14px;color:transparent;transition:background .15s ease,border-color .15s ease}.check.done{background:var(--accent-green);border-color:var(--accent-green);color:#fff;animation:checkPop .3s ease}.row-title.done{text-decoration:line-through;color:var(--text-tertiary)}.header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-sm);padding:var(--space-md) var(--space-md) 0}.header-greeting{font-size:var(--fs-body-xs);color:var(--text-secondary)}.header-title{font-size:var(--fs-h2);font-weight:var(--fw-bold);line-height:1.2}.header-right{display:flex;align-items:center;gap:var(--space-sm)}.icon-btn{width:36px;height:36px;border-radius:var(--radius-circle);background:var(--surface);box-shadow:var(--shadow-card);display:flex;align-items:center;justify-content:center;font-size:17px;transition:transform .1s ease}.icon-btn:active{transform:scale(.92)}.couple-badge{display:flex;align-items:center;background:var(--gradient-primary);border-radius:var(--radius-pill);padding:4px 10px 4px 4px;gap:6px}.avatar-stack{display:flex}.avatar{width:36px;height:36px;border-radius:var(--radius-circle);border:3px solid var(--surface);background:var(--gradient-child);color:#fff;font-size:var(--fs-body-sm);font-weight:var(--fw-bold);display:flex;align-items:center;justify-content:center;flex-shrink:0}.avatar+.avatar{margin-left:-8px}.avatar.a1{background:linear-gradient(135deg,var(--primary),var(--primary-dark))}.avatar.a2{background:linear-gradient(135deg,var(--secondary),var(--secondary-light))}.avatar.child{background:var(--gradient-child);font-size:18px}.avatar.lg{width:56px;height:56px;font-size:20px;border-width:4px}.avatar.xl{width:72px;height:72px;font-size:28px;border-width:4px}.stats-row{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.stat-card{background:var(--surface);border-radius:var(--radius-sm);box-shadow:var(--shadow-card);padding:14px 8px;text-align:center}.stat-value{font-size:28px;font-weight:var(--fw-extrabold);background:var(--gradient-primary);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;line-height:1.2}.stat-label{font-size:var(--fs-caption);font-weight:var(--fw-medium);color:var(--text-secondary)}.bottom-dock{position:fixed;left:0;right:0;bottom:0;z-index:40;display:flex;justify-content:center;pointer-events:none}.bottom-dock-inner{position:relative;width:100%;max-width:var(--phone-max-width)}.tabbar{pointer-events:auto;display:flex;background:var(--surface);border-top:1px solid var(--border);padding:6px 0 calc(6px + env(safe-area-inset-bottom))}.tab{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;min-height:44px;font-size:10px;font-weight:var(--fw-semibold);color:var(--text-tertiary);transition:color .15s ease,transform .1s ease}.tab:active{transform:scale(.95)}.tab-icon{font-size:22px;line-height:1;filter:grayscale(.6);opacity:.75;transition:filter .15s ease,opacity .15s ease}.tab.active{color:var(--primary)}.tab.active .tab-icon{filter:none;opacity:1}.tab.active.family{color:var(--accent-blue)}.fab-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:44;background:#0f0f2359;animation:fadeIn .2s ease}.fab-dock{z-index:45}.fab{pointer-events:auto;position:absolute;right:20px;bottom:calc(var(--tabbar-height) + 20px + env(safe-area-inset-bottom));width:56px;height:56px;border-radius:var(--radius-circle);background:var(--gradient-primary);color:#fff;font-size:28px;font-weight:var(--fw-bold);display:flex;align-items:center;justify-content:center;box-shadow:var(--shadow-fab);transition:transform .3s cubic-bezier(.4,0,.2,1)}@media (hover: hover){.fab:hover{transform:scale(1.1) rotate(90deg)}}.fab.open{transform:rotate(45deg)}.fab-menu{pointer-events:auto;position:absolute;right:20px;bottom:calc(var(--tabbar-height) + 88px + env(safe-area-inset-bottom));display:flex;flex-direction:column;align-items:flex-end;gap:10px}.fab-item{display:flex;align-items:center;gap:var(--space-sm);background:var(--surface);border-radius:var(--radius-pill);box-shadow:var(--shadow-card);padding:10px 16px;font-size:var(--fs-body-sm);font-weight:var(--fw-semibold);animation:slideIn .25s cubic-bezier(.4,0,.2,1) backwards;transition:transform .1s ease}.fab-item:active{transform:scale(.96)}.fab-item:nth-child(1){animation-delay:0ms}.fab-item:nth-child(2){animation-delay:40ms}.fab-item:nth-child(3){animation-delay:80ms}.fab-item:nth-child(4){animation-delay:.12s}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;background:#0f0f2373;display:flex;justify-content:center;align-items:flex-end;animation:fadeIn .2s ease}.modal-sheet{width:100%;max-width:var(--phone-max-width);max-height:85dvh;overflow-y:auto;background:var(--surface);border-radius:var(--radius-lg) var(--radius-lg) 0 0;box-shadow:var(--shadow-modal);padding:12px var(--space-md) calc(var(--space-lg) + env(safe-area-inset-bottom));animation:slideUp .3s cubic-bezier(.4,0,.2,1)}.modal-handle{width:40px;height:4px;border-radius:2px;background:var(--border);margin:0 auto var(--space-md)}.modal-title{font-size:var(--fs-h3);font-weight:var(--fw-bold);margin-bottom:var(--space-md)}.field{margin-bottom:var(--space-md)}.label{display:block;font-size:var(--fs-body-xs);font-weight:var(--fw-semibold);color:var(--text-secondary);margin-bottom:6px}.input{width:100%;min-height:48px;padding:12px 14px;border:1.5px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-primary);font-size:15px;transition:border-color .15s ease}.input::placeholder{color:var(--text-tertiary)}.input:focus{outline:none;border-color:var(--primary)}.input.invalid{border-color:var(--accent-orange)}.field-error{font-size:var(--fs-caption);color:var(--accent-orange);margin-top:4px}.form-error{background:var(--red-soft);color:var(--primary-dark);border-radius:var(--radius-sm);padding:10px 14px;font-size:var(--fs-body-xs);font-weight:var(--fw-medium);margin-bottom:var(--space-md);animation:shake .4s ease}[data-theme=dark] .form-error{color:var(--primary-light)}.empty{text-align:center;padding:var(--space-xl) var(--space-md)}.empty-icon{font-size:48px;margin-bottom:var(--space-sm);animation:float 3s ease-in-out infinite;display:inline-block}.empty-title{font-size:var(--fs-body);font-weight:var(--fw-bold);margin-bottom:var(--space-xs)}.empty-subtitle{font-size:var(--fs-body-xs);color:var(--text-secondary);margin-bottom:var(--space-md)}.toast-wrap{position:fixed;top:16px;left:50%;transform:translate(-50%);z-index:300;display:flex;flex-direction:column;align-items:center;gap:var(--space-sm);pointer-events:none;width:max-content;max-width:min(92vw,400px)}.toast{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-pill);box-shadow:var(--shadow-modal);padding:10px 18px;font-size:var(--fs-body-sm);font-weight:var(--fw-semibold);animation:slideDown .3s cubic-bezier(.4,0,.2,1)}.code-box{text-align:center;font-size:32px;font-weight:var(--fw-extrabold);letter-spacing:10px;text-indent:10px;padding:var(--space-lg) var(--space-md);border:2px dashed var(--primary-light);border-radius:var(--radius-md);background:var(--surface);-webkit-user-select:all;user-select:all}.connect-anim{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);margin:var(--space-lg) 0}.connect-line{width:48px;height:3px;border-radius:2px;background:var(--gradient-progress)}.connect-heart{font-size:28px;animation:heartbeat 1s ease-in-out infinite}.divider-or{display:flex;align-items:center;gap:12px;color:var(--text-tertiary);font-size:var(--fs-body-xs);margin:var(--space-lg) 0}.divider-or:before,.divider-or:after{content:"";flex:1;height:1px;background:var(--border)}.onboarding{min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:var(--space-xl);gap:var(--space-md)}.onboarding-logo{font-size:110px;line-height:1;animation:float 3s ease-in-out infinite;margin-bottom:var(--space-md)}.auth-page{min-height:100dvh;display:flex;flex-direction:column;justify-content:center;padding:var(--space-xl) var(--space-lg)}.auth-logo{font-size:56px;text-align:center;margin-bottom:var(--space-sm)}.auth-title{font-size:var(--fs-h2);font-weight:var(--fw-extrabold);text-align:center;margin-bottom:var(--space-xs)}.auth-subtitle{font-size:var(--fs-body-xs);color:var(--text-secondary);text-align:center;margin-bottom:var(--space-lg)}.auth-footer{text-align:center;font-size:var(--fs-body-sm);color:var(--text-secondary);margin-top:var(--space-lg)}.link{color:var(--primary);font-weight:var(--fw-bold);background:none;padding:0;font-size:inherit}.text-secondary{color:var(--text-secondary)}.text-tertiary{color:var(--text-tertiary)}.text-center{text-align:center}.text-sm{font-size:var(--fs-body-sm)}.text-xs{font-size:var(--fs-caption)}.gradient-text{background:var(--gradient-primary);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}.mt-sm{margin-top:var(--space-sm)}.mt-md{margin-top:var(--space-md)}.mt-lg{margin-top:var(--space-lg)}.mb-sm{margin-bottom:var(--space-sm)}.mb-md{margin-bottom:var(--space-md)}.row-between{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes slideIn{0%{opacity:0;transform:translate(32px)}to{opacity:1;transform:translate(0)}}@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown{0%{opacity:0;transform:translateY(-16px)}to{opacity:1;transform:translateY(0)}}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.55;transform:scale(1.04)}}@keyframes heartbeat{0%,to{transform:scale(1)}14%{transform:scale(1.18)}28%{transform:scale(1)}42%{transform:scale(1.18)}70%{transform:scale(1)}}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-14px)}}@keyframes flicker{0%,to{opacity:1;transform:scale(1) rotate(-2deg)}25%{opacity:.85;transform:scale(1.06) rotate(2deg)}50%{opacity:1;transform:scale(.98) rotate(-1deg)}75%{opacity:.9;transform:scale(1.04) rotate(1deg)}}@keyframes bounce{0%,to{transform:translateY(0)}30%{transform:translateY(-10px)}60%{transform:translateY(0)}80%{transform:translateY(-4px)}}@keyframes shake{0%,to{transform:translate(0)}20%{transform:translate(-6px)}40%{transform:translate(6px)}60%{transform:translate(-4px)}80%{transform:translate(4px)}}@keyframes checkPop{0%{transform:scale(1)}50%{transform:scale(1.2)}to{transform:scale(1)}}.anim-fadeIn{animation:fadeIn .3s ease}.anim-slideIn{animation:slideIn .4s cubic-bezier(.4,0,.2,1)}.anim-pulse{animation:pulse 1.5s ease-in-out infinite}.anim-heartbeat{animation:heartbeat 1s ease-in-out infinite}.anim-float{animation:float 3s ease-in-out infinite;display:inline-block}.anim-flicker{animation:flicker 1s ease-in-out infinite;display:inline-block}.anim-bounce{animation:bounce .5s ease}
