*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;margin:0;padding:0}body{color:#1a1a1a;background:#f5f5f5;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}.dev-stripe{z-index:9999;color:#fff;letter-spacing:.05em;background:#f97316;justify-content:center;align-items:center;height:18px;font-size:13px;font-weight:900;display:flex;position:fixed;top:0;left:0;right:0}.app{background:#fff;flex-direction:column;max-width:480px;height:100dvh;margin:0 auto;display:flex}.content{flex:1;padding:20px 16px 8px;overflow-y:auto}.navbar{background:#fff;border-top:1px solid #e5e5e5;display:flex}.nav-link{text-align:center;color:#aaa;flex:1;padding:14px 0;font-size:13px;font-weight:400;text-decoration:none}.nav-link.active{color:#2563eb;font-size:16px;font-weight:700}.page{min-height:100%}.content--habits,.page--habits{background:#f0fdf4}.page--habits .habit-item{background:#dcfce7;border-color:#bbf7d0}.page--habits .habit-item.done{background:#bbf7d0;border-color:#86efac}.page--habits .habit-item.bad-habit{background:#fff1f2;border-color:#fecdd3}.content--expenses,.page--expenses{background:#eff6ff}.page--expenses .exp-row,.page--expenses .exp-week-row,.page--expenses .exp-cat-row{background:#dbeafe;border-color:#bfdbfe}.page--expenses .exp-row-readonly{background:#e0f2fe;border-color:#bae6fd}.page--expenses .exp-nav-btn{background:#dbeafe;border-color:#bfdbfe}.page--expenses .exp-today-footer{background:#eff6ff;border-color:#bfdbfe}.page--expenses .audit-row{background:#dbeafe;border-color:#bfdbfe}.module-badge{z-index:48;pointer-events:none;font-size:22px;position:fixed;top:6px;left:12px}.module-badge--dev{top:24px}.page h1{margin-bottom:4px;font-size:22px;font-weight:700}.page .date{color:#888;margin-bottom:20px;font-size:13px}.page .muted{color:#888;margin-top:12px;font-size:14px}.page-center{color:#888;justify-content:center;align-items:center;height:100%;display:flex}.page-center.error{color:#dc2626}.habit-header{grid-template-columns:1fr auto 1fr;align-items:center;margin-bottom:12px;display:grid}.habit-header h1{margin-bottom:2px;font-size:18px}.habit-header .date{margin-bottom:0;font-size:12px}.habit-add-btn{color:#fff;cursor:pointer;background:#2563eb;border:none;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:36px;height:36px;margin-top:2px;font-size:22px;line-height:1;display:flex}.add-form{background:#f9f9f9;border:1.5px solid #e5e5e5;border-radius:12px;flex-direction:column;gap:10px;margin-bottom:16px;padding:14px 16px;display:flex}.add-input{box-sizing:border-box;background:#fff;border:1.5px solid #e5e5e5;border-radius:8px;outline:none;width:100%;padding:10px 12px;font-size:15px}.add-input:focus{border-color:#2563eb}.step-input{width:80px;padding:6px 10px;font-size:14px}.add-form-row{gap:8px;display:flex}.option-btn{cursor:pointer;background:#fff;border:1.5px solid #e5e5e5;border-radius:8px;flex:1;padding:6px 0;font-size:14px;transition:border-color .15s,background .15s}.option-btn.selected{color:#2563eb;background:#eff6ff;border-color:#2563eb;font-weight:600}.submit-btn{color:#fff;cursor:pointer;background:#2563eb;border:none;border-radius:8px;padding:10px;font-size:15px;font-weight:600}.habit-list{flex-direction:column;gap:6px;list-style:none;display:flex}.habit-item{-webkit-user-select:none;user-select:none;background:#f9f9f9;border:1.5px solid #e5e5e5;border-radius:10px;transition:background .15s,border-color .15s;position:relative}.habit-item.done{background:#f0fdf4;border-color:#86efac}.habit-main{cursor:pointer;align-items:center;gap:8px;padding:7px 10px;display:flex}.habit-item .check{text-align:center;color:#888;width:20px;font-size:15px}.habit-item.done .check{color:#16a34a;font-weight:700}.habit-item .name{flex:1;font-size:13px;line-height:1.3}.habit-item .tag{font-size:15px}.habit-item.active{background:#eff6ff;border-color:#93c5fd}.habit-menu-wrap{flex-shrink:0;margin-left:4px;position:relative}.habit-menu-btn{cursor:pointer;color:#9ca3af;background:0 0;border:none;border-radius:6px;align-items:center;padding:4px 2px;display:flex}.habit-menu-btn:active{background:#f3f4f6}.habit-dropdown{z-index:100;background:#fff;border:1.5px solid #e5e7eb;border-radius:10px;flex-direction:row;display:flex;position:absolute;top:calc(100% + 2px);right:0;overflow:hidden;box-shadow:0 4px 16px #0000001f}.habit-dropdown button{cursor:pointer;color:#374151;background:0 0;border:none;justify-content:center;align-items:center;padding:10px 14px;display:flex}.habit-dropdown button:active{background:#f3f4f6}.habit-dropdown button+button{border-left:1.5px solid #e5e7eb}.habit-dropdown button.danger{color:#ef4444}.delete-btn{color:#bbb;cursor:pointer;background:0 0;border:none;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;font-size:18px;line-height:1;transition:background .15s,color .15s;display:flex}.delete-btn:hover{color:#ef4444;background:#fee2e2}.modal-actions-gap{margin-top:8px}.modal-delete-btn{color:#dc2626;cursor:pointer;background:0 0;border:1.5px solid #fca5a5;border-radius:8px;width:100%;padding:10px;font-size:14px}.count-picker{flex-wrap:wrap;gap:8px;padding:0 16px 14px;display:flex}.count-btn{cursor:pointer;background:#fff;border:1.5px solid #e5e5e5;border-radius:8px;min-width:40px;padding:8px 10px;font-size:15px;font-weight:600;transition:border-color .15s,background .15s}.count-btn:hover{color:#2563eb;background:#eff6ff;border-color:#2563eb}.modal-backdrop{z-index:100;background:#0006;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.modal{background:#fff;border-radius:16px;flex-direction:column;gap:12px;width:100%;max-width:320px;padding:24px 20px 20px;display:flex}.modal-title{text-align:center;font-size:16px;font-weight:700}.modal-date{color:#999;text-align:center;margin-top:2px;font-size:13px}.modal-sub{color:#555;text-align:center;font-size:14px}.modal-actions{gap:10px;margin-top:4px;display:flex}.modal-cancel{cursor:pointer;background:#fff;border:1.5px solid #e5e5e5;border-radius:8px;flex:1;padding:10px;font-size:15px}.modal-cancel.full{width:100%}.modal-ok{color:#fff;cursor:pointer;background:#2563eb;border:none;border-radius:8px;flex:1;padding:10px;font-size:15px;font-weight:600}.modal-ok.danger{background:#dc2626}.modal-ok.full{width:100%}.remind-list{flex-direction:column;gap:10px;margin:8px 0 12px;padding:0;list-style:none;display:flex}.remind-item label{cursor:pointer;align-items:center;gap:10px;font-size:15px;display:flex}.remind-item input[type=checkbox]{cursor:pointer;accent-color:#2563eb;width:18px;height:18px}.modal-count{padding:0}.week-track{justify-content:space-between;padding:0 10px 6px;display:flex}.week-day{flex-direction:column;align-items:center;gap:2px;display:flex}.week-label{color:#aaa;font-size:9px}.week-dot{background:#e5e5e5;border-radius:2px;width:9px;height:9px}.week-dot.done{background:#22c55e}.week-count{color:#fff;background:#22c55e;border-radius:3px;justify-content:center;align-items:center;min-width:16px;height:14px;padding:0 2px;font-size:9px;font-weight:600;display:flex}.page-tabs{border-bottom:1.5px solid #e5e5e5;margin-bottom:20px;display:flex}.page-tabs--nosep{margin-bottom:0}.page-tab{color:#888;cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;flex:1;margin-bottom:-1.5px;padding:10px 0;font-size:14px;font-weight:500}.page-tab.active{color:#2563eb;border-bottom-color:#2563eb}.sub-tabs{border-bottom:1.5px solid #e5e5e5;margin-bottom:16px;display:flex}.sub-tab{color:#888;cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;flex:1;margin-bottom:-1.5px;padding:8px 0;font-size:13px;font-weight:500}.sub-tab.active{color:#2563eb;border-bottom-color:#2563eb}.earned-banner{color:#fff;z-index:200;text-align:center;background:#16a34a;border-radius:10px;flex-direction:column;gap:4px;max-width:320px;padding:10px 18px;font-size:14px;font-weight:500;display:flex;position:fixed;top:16px;left:50%;transform:translate(-50%);box-shadow:0 4px 12px #0003}.earned-banner--bottom{top:auto;bottom:72px}.rewards-view{flex-direction:column;display:flex}.reward-list{flex-direction:column;gap:10px;list-style:none;display:flex}.reward-item{background:#f9f9f9;border:1.5px solid #e5e5e5;border-radius:12px;transition:border-color .15s;overflow:hidden}.reward-item.expanded{border-color:#93c5fd}.reward-main{cursor:pointer;align-items:center;gap:12px;padding:14px 16px;display:flex}.reward-info{flex-direction:column;flex:1;gap:2px;display:flex}.reward-name{font-size:15px;font-weight:500}.reward-counts{color:#888;font-size:12px}.reward-actions{align-items:center;gap:8px;display:flex}.reward-use-btn{color:#fff;cursor:pointer;background:#2563eb;border:none;border-radius:7px;padding:5px 12px;font-size:13px;font-weight:600}.reward-conditions{background:#fff;border-top:1px solid #e5e5e5;flex-direction:column;gap:6px;padding:10px 16px 12px;display:flex}.cond-empty{color:#aaa;font-size:13px}.cond-row{cursor:pointer;background:#f9f9f9;border:1.5px solid #e5e5e5;border-radius:8px;justify-content:space-between;align-items:center;padding:8px 10px;transition:border-color .15s;display:flex}.cond-row:hover{border-color:#93c5fd}.cond-text{color:#333;font-size:14px}.cond-row-actions{align-items:center;gap:4px;display:flex}.cond-edit-hint{color:#aaa;font-size:16px}.cond-add-form{flex-direction:column;gap:8px;margin-top:2px;display:flex}.cond-add-actions{gap:8px;display:flex}.cond-add-actions .modal-cancel,.cond-add-actions .modal-ok{flex:1;padding:8px;font-size:14px}.cond-add-btn{color:#6b7280;cursor:pointer;text-align:left;background:0 0;border:1.5px dashed #d1d5db;border-radius:8px;margin-top:2px;padding:7px 10px;font-size:13px}.cond-add-btn:hover{color:#2563eb;border-color:#93c5fd}.condition-streak{color:#888;font-size:12px}.cond-and{color:#888;margin:0 2px;font-size:12px}.cond-items-editor{flex-direction:column;gap:8px;display:flex}.cond-item-row{flex-direction:column;gap:6px;display:flex}.cond-and-label{color:#6b7280;text-align:center;letter-spacing:.05em;font-size:11px;font-weight:700}.cond-item-streak-row{align-items:center;gap:6px;display:flex}.cond-item-streak-row .add-input{flex:1}.cond-remove-btn{flex-shrink:0}.exp-fab{color:#fff;cursor:pointer;z-index:50;background:#2563eb;border:none;border-radius:50%;justify-content:center;align-items:center;width:42px;height:42px;font-size:22px;line-height:1;display:flex;position:fixed;bottom:72px;right:16px;box-shadow:0 3px 8px #2563eb59}.exp-today-footer{z-index:49;background:#fff;border-top:1px solid #00000012;flex-direction:row;align-items:flex-start;gap:8px;padding:5px 16px;display:flex;position:fixed;bottom:56px;left:0;right:0}.exp-fab--inline{flex-shrink:0;align-self:center;position:static}.exp-row-readonly{cursor:default;background:#f4fdf9;border-color:#a7f3d0}.exp-row-note{color:#059669;flex-shrink:0;font-size:12px}.exp-day-nav{align-items:center;gap:8px;margin-bottom:12px;display:flex}.exp-day-subtabs{gap:6px;margin-bottom:16px;display:flex}.exp-day-subtab{color:#888;cursor:pointer;background:#fff;border:1.5px solid #e5e5e5;border-radius:8px;flex:1;padding:7px 0;font-size:13px;font-weight:500;transition:all .15s}.exp-day-subtab.active{color:#2563eb;background:#eff6ff;border-color:#3b82f6}.exp-month-nav{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.exp-nav-btn{cursor:pointer;color:#555;background:#fff;border:1.5px solid #e5e5e5;border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;width:36px;height:36px;font-size:20px;display:flex}.exp-nav-btn:disabled{opacity:.3;cursor:default}.exp-day-info{text-align:center;flex:1}.exp-day-label{color:#555;font-size:14px}.exp-day-total{color:#1a1a1a;font-size:22px;font-weight:700}.exp-quick-tags{flex-wrap:nowrap;flex:1;align-items:flex-start;padding-top:2px;line-height:1;display:flex}.exp-quick-tags-items{flex-wrap:wrap;align-items:center;display:flex}.exp-quick-tags-label{color:#555;flex-shrink:0;margin-top:2px;margin-right:6px;font-size:12px;font-weight:700}.exp-quick-tag-wrap{align-items:center;margin-right:4px;display:inline-flex}.exp-quick-tag{color:#2563eb;cursor:pointer;background:0 0;border:none;padding:0;font-size:13px;font-weight:500;line-height:1}.exp-quick-tag:active{color:#1d4ed8}.exp-quick-sep{color:#bbb;margin:0 2px 0 0;line-height:1}.exp-period-group{margin-bottom:16px}.exp-period-header{color:#888;margin-bottom:6px;padding-left:2px;font-size:13px;font-weight:600}.exp-row{cursor:pointer;text-align:left;background:#f9f9f9;border:1.5px solid #e5e5e5;border-radius:10px;align-items:center;gap:8px;width:100%;margin-bottom:6px;padding:11px 14px;display:flex}.exp-row:active{background:#eff6ff;border-color:#93c5fd}@keyframes exp-row-flash{0%{background:#bbf7d0;border-color:#4ade80}60%{background:#bbf7d0;border-color:#4ade80}to{background:#f9f9f9;border-color:#e5e5e5}}.exp-row--new{animation:1.5s ease-out forwards exp-row-flash}.exp-row-item{flex:1;font-size:15px}.exp-row-cat{color:#888;background:#f0f0f0;border-radius:4px;padding:2px 6px;font-size:12px}.exp-row-amount{color:#1a1a1a;flex-shrink:0;font-size:15px;font-weight:600}.modal .exp-row{margin-bottom:2px;padding:3px 10px}.exp-month-label{color:#1a1a1a;font-size:16px;font-weight:600}.exp-month-total{text-align:center;margin:12px 0 20px;font-size:28px;font-weight:700}.exp-section{margin-bottom:20px}.exp-section-title{color:#888;margin-bottom:8px;font-size:13px;font-weight:600}.exp-week-row{background:#f9f9f9;border:1.5px solid #e5e5e5;border-radius:8px;justify-content:space-between;align-items:center;margin-bottom:5px;padding:9px 12px;font-size:14px;display:flex}.exp-week-label{color:#555}.exp-week-amount{font-weight:600}.exp-week-row{cursor:pointer}.week-day-popup{flex-direction:column;height:90vh;padding:14px 14px 10px;display:flex}.week-day-cards{flex-direction:column;flex-shrink:0;gap:5px;padding-bottom:10px;display:flex}.week-day-card{cursor:pointer;background:#f9f9f9;border:1.5px solid #e5e5e5;border-radius:8px;align-items:center;gap:8px;padding:8px 10px;display:flex}.week-day-card-active{background:#eff6ff;border-color:#2563eb}.week-day-card-dow{color:#888;flex-shrink:0;width:22px;font-size:11px}.week-day-card-dm{flex:1;font-size:13px;font-weight:600}.week-day-card-amt{color:#2563eb;font-size:13px;font-weight:500}.week-day-card-active .week-day-card-amt{color:#1d4ed8}.week-popup-detail{border-top:1px solid #eee;flex:1;padding-top:8px;overflow-y:auto}.week-popup-detail-header{justify-content:space-between;align-items:baseline;padding:0 2px 8px;font-size:14px;display:flex}.exp-cat-row{cursor:pointer;text-align:left;background:#f9f9f9;border:1.5px solid #e5e5e5;border-radius:8px;align-items:center;gap:8px;width:100%;margin-bottom:6px;padding:9px 12px;display:flex}.exp-cat-row:active{background:#eff6ff;border-color:#93c5fd}.exp-cat-name{flex:1;font-size:15px;font-weight:500}.exp-cat-over-icon{margin-left:4px;font-size:11px}.exp-cat-pct{color:#888;text-align:right;flex-shrink:0;width:40px;font-size:12px}.exp-cat-amount{text-align:right;flex-shrink:0;min-width:95px;font-size:15px;font-weight:600}.exp-cat-popup-total{margin-bottom:10px;font-size:14px}.exp-cat-popup-quota{border-top:1px solid #eee;margin-top:10px;padding-top:10px;font-size:13px}.exp-today{padding-bottom:160px}.exp-month{padding-bottom:72px}.exp-cat-tab,.exp-audit{padding-bottom:80px}.audit-filter-bar{margin-bottom:12px;display:flex}.audit-filter-btn{color:#888;cursor:pointer;background:0 0;border:1.5px solid #e5e5e5;border-radius:20px;padding:4px 10px;font-size:12px}.audit-filter-btn.active{color:#2563eb;background:#eff6ff;border-color:#2563eb}.audit-row{background:#fff;border:1.5px solid #e5e5e5;border-radius:12px;flex-direction:column;gap:2px;margin-bottom:6px;padding:7px 12px;display:flex}.audit-row-main{align-items:center;gap:6px;display:flex}.audit-type-badge{border-radius:20px;flex-shrink:0;padding:1px 6px;font-size:10px;font-weight:600}.audit-item{color:#1a1a1a;flex:1;font-size:14px;font-weight:500}.audit-amount{color:#1a1a1a;flex-shrink:0;font-size:14px;font-weight:600}.audit-icon-btn{color:#555;cursor:pointer;background:#f9f9f9;border:1.5px solid #e5e5e5;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;width:26px;height:26px;padding:0;font-size:14px;display:flex}.audit-icon-btn--danger{color:#dc2626;background:#fff5f5;border-color:#fca5a5}.audit-source{color:#888;background:#f3f4f6;border-radius:6px;flex-shrink:0;padding:2px 8px;font-size:11px}.audit-period-badge{border-radius:20px;flex-shrink:0;padding:1px 7px;font-size:11px;font-weight:600}.audit-date-highlight{color:#dc2626;background:#fff1f1;border-radius:6px;flex-shrink:0;padding:1px 6px;font-size:11px;font-weight:600}.audit-row-meta{align-items:center;gap:4px;padding-left:2px;display:flex}.audit-meta-text{color:#aaa;font-size:11px}.audit-time{color:#bbb;margin-left:auto;font-size:11px}.exp-cat-grid{grid-template-columns:1fr 1fr;gap:10px;display:grid}.exp-cat-card{cursor:pointer;text-align:left;background:#f9f9f9;border:1.5px solid #e5e5e5;border-radius:12px;flex-direction:column;align-items:flex-start;gap:4px;padding:14px;display:flex}.exp-cat-card:active{background:#eff6ff;border-color:#93c5fd}.exp-cat-card-name{font-size:14px;font-weight:500}.exp-cat-card-quota{color:#888;font-size:12px}.exp-cat-detail{padding-bottom:24px}.exp-detail-header{align-items:center;gap:10px;margin-bottom:4px;display:flex}.exp-detail-title{font-size:18px;font-weight:700}.exp-detail-total{color:#555;margin:12px 0 16px;font-size:15px}.exp-detail-pct{color:#888}.exp-detail-items{border:1.5px solid #e5e5e5;border-radius:10px;margin-bottom:16px;overflow:hidden}.exp-detail-item-row{border-bottom:1px solid #f0f0f0;justify-content:space-between;padding:10px 14px;font-size:14px;display:flex}.exp-detail-item-row:last-child{border-bottom:none}.exp-detail-item-name{color:#333}.exp-detail-item-amount{font-weight:600}.exp-quota-section{background:#f9f9f9;border:1.5px solid #e5e5e5;border-radius:10px;padding:14px}.exp-quota-status{margin-bottom:10px;font-size:14px}.exp-quota-none{color:#888}.exp-quota-ok{color:#16a34a}.exp-quota-over{color:#dc2626}.exp-quota-btn{color:#6b7280;cursor:pointer;background:0 0;border:1.5px dashed #d1d5db;border-radius:8px;padding:7px 12px;font-size:13px}.exp-quota-btn:hover{color:#2563eb;border-color:#93c5fd}.exp-quota-edit{flex-direction:column;gap:0;display:flex}.sheet-backdrop{z-index:100;background:#00000073;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}.sheet{background:#fff;border-radius:20px 20px 0 0;flex-direction:column;gap:8px;width:100%;max-width:480px;max-height:92dvh;padding:16px 16px 0;display:flex;position:relative;overflow-y:auto}.sheet .submit-btn{border-radius:12px;width:100%;margin-top:4px;margin-bottom:16px;padding:12px;font-size:15px;font-weight:700}.sheet-action-row{gap:0;height:32px;margin-top:4px;margin-bottom:16px;display:flex}.sheet-action-row .submit-btn{border-radius:12px 0 0 12px;flex:1;height:100%;margin-top:0;margin-bottom:0;padding:0}.sheet-delete-btn{color:#dc2626;cursor:pointer;background:#fee2e2;border:none;border-left:1.5px solid #fca5a5;border-radius:0 12px 12px 0;flex-shrink:0;width:88px;height:100%;padding:0;font-size:15px;font-weight:700}.sheet-delete-btn:active{background:#fecaca}.sheet-delete-overlay{z-index:10;background:#00000073;border-radius:20px;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.sheet-delete-confirm{text-align:center;background:#fff;border-radius:14px;width:260px;padding:24px 20px 20px;box-shadow:0 8px 32px #0000002e}.sheet-delete-confirm p{color:#111;margin:0 0 6px;font-size:15px;font-weight:600}.sheet-delete-confirm small{color:#6b7280;margin-bottom:20px;font-size:13px;display:block}.sheet-delete-confirm-btns{gap:10px;display:flex}.sheet-delete-confirm-btns .btn-cancel{color:#374151;cursor:pointer;background:#fff;border:1.5px solid #d1d5db;border-radius:10px;flex:1;padding:10px;font-size:14px;font-weight:600}.sheet-delete-confirm-btns .btn-delete{color:#fff;cursor:pointer;background:#dc2626;border:none;border-radius:10px;flex:1;padding:10px;font-size:14px;font-weight:700}.sheet-handle{display:none}.sheet-title{text-align:center;font-size:17px;font-weight:700}.sheet-tabs{border-bottom:1.5px solid #e5e5e5;margin-bottom:16px;display:flex}.sheet-tab{color:#888;cursor:pointer;background:0 0;border:none;border-bottom:2.5px solid #0000;flex:1;margin-bottom:-1.5px;padding:10px 0;font-size:14px;font-weight:600}.sheet-tab.active{color:#2563eb;border-bottom-color:#2563eb}.sheet-date-nav{background:#fff;border:1.5px solid #e5e5e5;border-radius:10px;align-items:center;margin-bottom:12px;display:flex;overflow:hidden}.date-nav-btn{cursor:pointer;color:#555;background:0 0;border:none;flex-shrink:0;width:40px;height:42px;font-size:20px}.date-nav-label{text-align:left;color:#222;cursor:pointer;background:0 0;border:none;border-left:1px solid #e5e5e5;border-right:1px solid #e5e5e5;outline:none;flex:1;padding:10px 12px;font-size:15px;font-weight:400}.date-nav-label:active,.date-nav-label:focus{background:0 0}.datepicker-overlay{z-index:300;background:#0006;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.datepicker{background:#1c1c1e;border-radius:14px;width:320px;max-width:90vw;padding:16px}.datepicker-nav{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.datepicker-nav-btn{color:#fff;cursor:pointer;background:0 0;border:none;padding:4px 12px;font-size:22px}.datepicker-month{color:#fff;font-size:15px;font-weight:600}.datepicker-grid{grid-template-columns:repeat(7,1fr);gap:4px;display:grid}.datepicker-dow{text-align:center;color:#888;padding:4px 0;font-size:11px}.datepicker-day{color:#fff;aspect-ratio:1;cursor:pointer;background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;width:100%;font-size:14px;display:flex}.datepicker-day.today{color:#60a5fa;font-weight:700}.datepicker-day.selected{color:#fff;background:#2563eb}.sheet-type-cat-row{align-items:center;gap:8px;display:flex}.exp-type-toggle{border:1.5px solid #e5e5e5;border-radius:8px;flex-shrink:0;display:flex;overflow:hidden}.exp-type-btn{color:#888;cursor:pointer;background:#f9f9f9;border:none;padding:9px 14px;font-size:13px;font-weight:600}.exp-type-btn+.exp-type-btn{border-left:1.5px solid #e5e5e5}.exp-type-btn.active{color:#fff;background:#2563eb}.cat-inline-select{flex:1;padding:9px 10px;font-size:13px}.sheet-title-row{align-items:center;gap:10px;display:flex}.sheet-title-row .sheet-title{text-align:left;flex:1}.sheet-back{cursor:pointer;color:#555;background:0 0;border:1.5px solid #e5e5e5;border-radius:8px;justify-content:center;align-items:center;width:34px;height:34px;font-size:18px;display:flex}.sheet-field{flex-direction:column;gap:6px;display:flex}.sheet-label{color:#555;font-size:13px;font-weight:600}.item-input-area{flex-direction:column;gap:4px;display:flex}.autocomplete-item{text-align:left;cursor:pointer;color:#1a1a1a;background:0 0;border:none;border-bottom:1px solid #f5f5f5;width:100%;padding:12px 14px;font-size:15px;display:block}.autocomplete-item:last-child{border-bottom:none}.autocomplete-item:active{background:#eff6ff}.suggestion-float-wrap{position:relative}.suggestion-float{z-index:100;background:#fff;border:1.5px solid #e5e5e5;border-radius:8px;position:absolute;top:calc(100% + 2px);left:0;right:0;overflow:hidden;box-shadow:0 4px 16px #0000001f}.sheet-label-row{align-items:center;gap:8px;display:flex}.type-badge{color:#2563eb;background:#eff6ff;border-radius:4px;padding:2px 6px;font-size:12px;font-weight:500}.sheet-label-unit{color:#888;font-size:11px;font-weight:400}.amount-field .add-input{letter-spacing:.02em;height:44px;scroll-margin-top:260px;font-size:17px;font-weight:600}.sheet-amount-preview{color:#2563eb;padding-left:2px;font-size:13px;font-weight:600}.sheet-error{color:#dc2626;padding:4px 0;font-size:13px}.companion-section{border-top:1px solid #f0f0f0;margin:4px 0 12px;padding-top:10px}.companion-title{color:#888;text-transform:uppercase;letter-spacing:.04em;margin-bottom:8px;font-size:12px;font-weight:600}.companion-row{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:8px;display:flex}.companion-name{color:#1a1a1a;flex-shrink:0;min-width:60px;font-size:14px}.companion-controls{gap:4px;display:flex}.companion-btn{color:#555;cursor:pointer;white-space:nowrap;background:#f9f9f9;border:1.5px solid #e5e5e5;border-radius:6px;padding:4px 10px;font-size:12px}.companion-btn.active{color:#2563eb;background:#eff6ff;border-color:#2563eb;font-weight:600}.companion-btn.active.skip{color:#2563eb;background:#eff6ff;border-color:#2563eb}.companion-amount{width:70px;padding:4px 8px;font-size:13px}.credits-view{padding-bottom:24px}.credits-hint{margin:-8px 0 12px;font-size:13px}.credits-row{justify-content:space-between;align-items:center;gap:12px;padding:12px 16px;display:flex}.credits-badge{color:#2563eb;cursor:pointer;text-align:center;background:#eff6ff;border:1.5px solid #bfdbfe;border-radius:20px;min-width:44px;padding:4px 10px;font-size:14px;font-weight:600}.credits-edit{align-items:center;gap:6px;display:flex}.credits-input{text-align:center;border:1.5px solid #93c5fd;border-radius:8px;width:64px;padding:6px 10px;font-size:15px}.credits-cost-row{flex-direction:column;align-items:flex-start;gap:8px}.credits-cost-label{color:#888;font-size:13px;font-weight:500}.credits-balance{color:#555;margin:2px 0 0;font-size:14px}.credits-balance-num{color:#2563eb;margin-right:2px;font-size:22px;font-weight:700}.reward-cards{flex-direction:column;gap:10px;display:flex}.reward-card{cursor:pointer;background:#f9f9f9;border:1.5px solid #e5e5e5;border-radius:12px;justify-content:space-between;align-items:center;gap:12px;padding:14px 16px;transition:border-color .15s;display:flex}.reward-card:hover{border-color:#93c5fd}.reward-card-body{flex-direction:column;flex:1;gap:3px;display:flex}.reward-card-name{font-size:15px;font-weight:500}.reward-card-meta{color:#888;font-size:12px}.reward-card-actions{align-items:center;gap:8px;display:flex}.credit-balance-card{background:#fff;border:1.5px solid #e5e5e5;border-radius:12px;align-items:center;gap:8px;margin-bottom:12px;padding:10px 14px;display:flex}.saving-section{margin-bottom:20px}.saving-section-header{justify-content:space-between;align-items:center;margin-bottom:8px;display:flex}.saving-section-title{color:#444;letter-spacing:.2px;font-size:14px;font-weight:700}.saving-cards-grid{flex-wrap:wrap;gap:8px;display:flex}.saving-mini-card{box-sizing:border-box;background:#fff;border:1.5px solid #e5e5e5;border-radius:10px;flex-direction:column;gap:5px;width:calc(25% - 6px);min-width:64px;padding:10px 8px 8px;display:flex}.saving-mini-name{color:#1a1a1a;text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:600;overflow:hidden}.saving-mini-progress{color:#555;font-size:11px}.saving-mini-bar{background:#e5e7eb;border-radius:2px;height:3px;margin:1px 0;overflow:hidden}.saving-mini-fill{background:#2563eb;border-radius:2px;height:100%}.saving-mini-btns{gap:4px;margin-top:2px;display:flex}.saving-mini-btn{cursor:pointer;background:#f9fafb;border:1px solid #d1d5db;border-radius:5px;flex:1;padding:3px 0;font-size:13px;line-height:1.3}.saving-mini-btn.complete{color:#16a34a;background:#f0fdf4;border-color:#86efac}.saving-mini-btn:disabled{opacity:.35;cursor:default}.credit-card-label{color:#888;text-transform:uppercase;letter-spacing:.5px;font-size:11px;font-weight:600}.saving-add-btn{color:#2563eb;cursor:pointer;background:0 0;border:none;padding:0;font-size:18px;line-height:1}.deposit-row{flex-direction:column;gap:10px;margin-bottom:4px;display:flex}.deposit-input{text-align:center;width:80px;padding:8px}.deposit-quick-btns{justify-content:center;gap:4px;display:flex}.saving-icon-btns{gap:4px;display:flex}.saving-icon-btn{cursor:pointer;background:0 0;border-radius:5px;justify-content:center;align-items:center;width:22px;height:18px;padding:0;font-size:12px;font-weight:700;line-height:1;display:flex}.saving-icon-btn.complete-btn{color:#2563eb;border:1px solid #2563eb}.saving-icon-btn.deposit-btn{color:#16a34a;border:1px solid #16a34a}.saving-icon-btn:disabled{color:#ccc;cursor:default;border-color:#ccc}.credit-card-num{color:#1d4ed8;font-size:18px;font-weight:700}.credit-card-locked{color:#f59e0b;align-self:flex-end;font-size:11px;font-weight:700;line-height:1.2}.credit-card-muted{color:#aaa;margin-top:4px;font-size:12px}.saving-inline-name{color:#222;font-size:13px;font-weight:500}.saving-progress-bar{background:#f0f0f0;border-radius:3px;height:5px;overflow:hidden}.saving-progress-fill{background:#2563eb;border-radius:3px;height:100%;transition:width .3s}.saving-today-deposit{color:#2563eb;margin-top:2px;font-size:12px}.saving-card-actions{gap:6px;display:flex}.rewards-section-header{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.rewards-section-title{color:#555;text-transform:uppercase;letter-spacing:.5px;font-size:14px;font-weight:600}.habit-name-block{flex-direction:column;flex:1;gap:1px;display:flex}.habit-credits{color:#16a34a;font-size:11px;font-weight:500;line-height:1.2}.habit-credits.bad{color:#dc2626}.habit-last-log{color:#999;margin-top:-4px;padding:0 0 0 28px;font-size:11px}.reward-last-log{color:#999;margin-top:2px;font-size:11px}.habit-item.bad-habit{background:#fff8f8;border-color:#fca5a5}.habit-item.bad-habit.done{background:#fef2f2;border-color:#f87171}.habit-item.bad-habit.active{background:#fff1f2;border-color:#f87171}.habit-item.bad-habit .check{color:#dc2626}.habit-item.bad-habit.done .check{color:#b91c1c}.habit-item.bad-habit .week-dot.done,.habit-item.bad-habit .week-count{background:#f87171}.habit-form-row{align-items:center;gap:8px;display:flex}.habit-form-label{color:#888;flex-shrink:0;width:46px;font-size:12px;font-weight:500}.habit-form-btns{flex:1;gap:6px;display:flex}.habit-opt-btn{cursor:pointer;white-space:nowrap;background:#fff;border:1.5px solid #e5e5e5;border-radius:7px;flex:1;padding:5px 2px;font-size:13px;transition:border-color .15s,background .15s}.habit-opt-btn.selected{color:#2563eb;background:#eff6ff;border-color:#2563eb;font-weight:600}.habit-opt-btn.selected.bad-type{color:#dc2626;background:#fff1f2;border-color:#dc2626}.habit-opt-btn.selected.good-type{color:#16a34a;background:#f0fdf4;border-color:#16a34a}.habit-opt-btn.credit-btn{font-size:14px;font-weight:600}.credits-options{gap:8px;width:100%;display:flex}.credits-options .option-btn{border-radius:10px;flex:1;min-width:44px;padding:10px 0;font-size:16px;font-weight:600}.reward-use-btn:disabled{color:#9ca3af;cursor:not-allowed;background:#e5e7eb;border-color:#e5e7eb}.qty-picker{justify-content:center;gap:8px;margin:12px 0 4px;display:flex}.num-btn{color:#374151;cursor:pointer;background:#fff;border:1.5px solid #e5e5e5;border-radius:7px;width:40px;height:40px;font-size:14px;font-weight:600;transition:border-color .15s,background .15s}.num-btn.selected{color:#2563eb;background:#eff6ff;border-color:#2563eb}.num-btn:disabled,.num-btn.disabled{color:#d1d5db;cursor:not-allowed;background:#f3f4f6;border-color:#e5e7eb}.habit-form-btns .num-btn{flex:1;width:auto;height:auto;padding:5px 2px}.credit-toast{color:#15803d;white-space:nowrap;text-align:center;z-index:200;background:#f0fdf4;border:1.5px solid #86efac;border-radius:20px;max-width:90vw;padding:8px 18px;font-size:14px;font-weight:500;animation:.2s fadeInUp;position:fixed;top:16px;left:50%;transform:translate(-50%);box-shadow:0 2px 8px #0000001a}@keyframes fadeInUp{0%{opacity:0;transform:translate(-50%)translateY(-8px)}to{opacity:1;transform:translate(-50%)translateY(0)}}.login-page{background:#f5f5f5;justify-content:center;align-items:center;min-height:100vh;padding:24px;display:flex}.login-card{background:#fff;border-radius:16px;width:100%;max-width:360px;padding:32px 24px;box-shadow:0 2px 16px #00000014}.login-title{text-align:center;color:#1a1a1a;margin:0 0 24px;font-size:28px;font-weight:700}.login-form{flex-direction:column;gap:12px;display:flex}.login-error{color:#dc2626;margin:0;font-size:13px}.login-btn{color:#fff;cursor:pointer;background:#2563eb;border:none;border-radius:10px;margin-top:4px;padding:12px;font-size:15px;font-weight:600}.login-btn:disabled{opacity:.6;cursor:not-allowed}.habit-filter-group{gap:4px;display:flex}.habit-filter-btn{color:#555;cursor:pointer;white-space:nowrap;background:#f9fafb;border:1px solid #e5e7eb;border-radius:6px;padding:4px 8px;font-size:11px;font-weight:500;transition:background .15s,color .15s,border-color .15s}.habit-filter-btn.active{color:#fff;background:#2563eb;border-color:#2563eb}.week-day.today .week-label,.week-day.yesterday .week-label{font-size:10px;font-weight:700}.week-day.today .week-label{color:#2563eb}.week-day.yesterday .week-label{color:#6b7280}.week-day.today .week-dot,.week-day.yesterday .week-dot{width:11px;height:11px}.week-day-annotation{color:#9ca3af;font-size:8px;line-height:1}.week-day.today .week-day-annotation{color:#2563eb}.plans-tab{flex-direction:column;gap:0;padding:0 16px 100px;display:flex}.plans-loading{text-align:center;color:#9ca3af;padding:40px}.plans-section{flex-direction:column;gap:8px;display:flex}.plans-section-header{justify-content:space-between;align-items:center;margin-bottom:4px;display:flex}.plans-section-title{color:#111;font-size:16px;font-weight:700}.plans-empty{color:#9ca3af;padding:8px 0;font-size:13px}.plan-card{background:#fff;border:1.5px solid #e5e7eb;border-radius:12px;flex-direction:column;gap:6px;padding:12px 14px;display:flex}.plan-card--empty{opacity:.6}.plan-card-header{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.plan-card-name{color:#111;flex:1;min-width:0;font-size:15px;font-weight:600}.plan-badge{color:#374151;white-space:nowrap;background:#f3f4f6;border-radius:6px;padding:2px 7px;font-size:11px;font-weight:600}.plan-badge--cat{color:#2563eb;background:#eff6ff}.plan-card-status{color:#6b7280;font-size:13px}.plan-card-status--warn{color:#d97706;font-weight:600}.plan-card-actions{flex-wrap:wrap;gap:6px;margin-top:4px;display:flex}.plan-btn{color:#374151;cursor:pointer;background:#f9fafb;border:1.5px solid #e5e7eb;border-radius:8px;padding:6px 12px;font-size:13px;font-weight:600}.plan-btn--primary{color:#fff;background:#2563eb;border-color:#2563eb}.plan-btn--danger{color:#dc2626;background:#fff;border-color:#fecaca}.plan-btn--add{color:#2563eb;background:#eff6ff;border-color:#bfdbfe}.plan-btn:disabled{opacity:.4;cursor:not-allowed}.sheet-overlay{z-index:200;background:#00000073;justify-content:center;align-items:flex-end;padding:0;display:flex;position:fixed;inset:0}.sheet-panel{background:#fff;border-radius:20px 20px 0 0;flex-direction:column;width:100%;max-width:480px;max-height:90dvh;display:flex;overflow-y:auto}.sheet-header{z-index:1;background:#fff;border-bottom:1px solid #f3f4f6;justify-content:space-between;align-items:center;padding:16px 16px 12px;display:flex;position:sticky;top:0}.sheet-title{color:#111;font-size:16px;font-weight:700}.sheet-close{color:#9ca3af;cursor:pointer;background:0 0;border:none;padding:4px;font-size:18px}.sheet-body{flex-direction:column;gap:12px;padding:16px 16px 32px;display:flex}.form-row{flex-direction:column;gap:4px;display:flex}.form-row label{color:#374151;font-size:13px;font-weight:600}.form-input{color:#111;box-sizing:border-box;background:#fafafa;border:1.5px solid #e5e7eb;border-radius:10px;outline:none;width:100%;padding:10px 12px;font-size:15px}.form-input:focus{background:#fff;border-color:#2563eb}.form-hint{color:#6b7280;font-size:13px}.form-error{color:#dc2626;font-size:13px;font-weight:600}.btn-primary{color:#fff;cursor:pointer;background:#2563eb;border:none;border-radius:12px;width:100%;margin-top:4px;padding:12px;font-size:15px;font-weight:700}.btn-primary:disabled{opacity:.5;cursor:not-allowed}.exp-search-icon-btn{cursor:pointer;color:#888;background:0 0;border:none;flex-shrink:0;margin-bottom:-1.5px;padding:8px 10px;font-size:16px}.exp-search-header{border-bottom:1.5px solid #e5e5e5;flex-shrink:0;align-items:center;gap:8px;padding-bottom:10px;display:flex}.exp-search-input{background:#f9fafb;border:1.5px solid #d1d5db;border-radius:8px;outline:none;flex:1;padding:8px 12px;font-size:15px}.exp-search-input:focus{background:#fff;border-color:#2563eb}.exp-search-clear{color:#aaa;cursor:pointer;background:0 0;border:none;flex-shrink:0;padding:4px 6px;font-size:14px}.exp-search-body{flex:1;min-height:60px;padding:4px 0;overflow-y:auto}.exp-search-hint{text-align:center;color:#aaa;margin-top:40px;font-size:14px}.exp-search-row{cursor:pointer}.exp-search-row--readonly{cursor:default;opacity:.75}.exp-search-date{color:#888;text-align:right;overflow-wrap:break-word;flex-shrink:0;width:76px;margin-left:8px;font-size:12px}.exp-search-row .audit-row-main{align-items:flex-start}.exp-search-row .audit-amount{text-align:right;min-width:90px}
