@import "https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&family=Playfair+Display:wght@700&display=swap";.sidebar-user[data-v-2daee4b8]{background:#ffffff0f;border-radius:8px;justify-content:space-between;align-items:center;gap:8px;margin-bottom:10px;padding:8px 10px;display:flex}.user-name[data-v-2daee4b8]{text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}.logout-btn[data-v-2daee4b8]{width:26px;height:26px;color:inherit;opacity:.7;cursor:pointer;background:0 0;border:none;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.logout-btn[data-v-2daee4b8]:hover{opacity:1;background:#ffffff1a}:root{--bg-body:#f4f1ec;--bg-white:#fff;--bg-warm:#faf8f5;--bg-card:#fff;--bg-gray:#f5f5f5;--accent:#1b4332;--accent-mid:#2d6a4f;--accent-light:#52b788;--accent-lighter:#d8f3dc;--accent-dim:#1b43320f;--green:#1b7a42;--green-bg:#e6f7ed;--red:#c4314b;--red-bg:#fde8ea;--orange:#d4702a;--orange-bg:#fdecd8;--blue:#3a6ea5;--blue-bg:#e3eef9;--purple:#7c3aed;--purple-bg:#f0e8fe;--teal:#0f766e;--teal-bg:#d5f5f0;--amber:#b45309;--amber-bg:#fef3c7;--pink:#db2777;--pink-bg:#fce7f3;--text-primary:#1c1917;--text-secondary:#57534e;--text-tertiary:#a8a29e;--text-faint:#d6d3d1;--text-inverse:#fff;--border:#e7e5e4;--border-light:#f0eeeb;--divider:#f0eeeb;--shadow-xs:0 1px 2px #1c191708;--shadow-sm:0 1px 4px #1c19170a;--shadow-md:0 4px 12px #1c19170d, 0 1px 3px #1c191708;--shadow-lg:0 8px 28px #1c191712, 0 2px 6px #1c191708;--shadow-card:0 1px 3px #1c191705, 0 6px 20px #1c19170a;--radius-xs:6px;--radius-sm:10px;--radius-md:14px;--radius-lg:18px;--radius-xl:24px;--radius-full:999px;--font-sans:"DM Sans", -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif;--font-display:"Playfair Display", Georgia, serif;--sidebar-width:260px}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:14px}body{font-family:var(--font-sans);background-color:var(--bg-body);color:var(--text-primary);background-image:radial-gradient(circle, var(--text-faint) .5px, transparent .5px);background-size:20px 20px;min-height:100vh;line-height:1.6}a{color:var(--accent-mid);text-decoration:none}a:hover{color:var(--accent)}input,select,button,textarea{font-family:inherit;font-size:inherit}#app{min-height:100vh}.main-content{margin-left:var(--sidebar-width);min-height:100vh;width:calc(100vw - var(--sidebar-width));box-sizing:border-box;padding:32px 40px}.page-header{justify-content:space-between;align-items:center;margin-bottom:24px;display:flex}.page-title{color:var(--text-primary);font-size:22px;font-weight:700}.page-subtitle{color:var(--text-tertiary);margin-top:2px;font-size:13px}.form-group{margin-bottom:16px}.form-label{color:var(--text-tertiary);margin-bottom:6px;font-size:13px;font-weight:500;display:block}.form-input,.form-select{border:1px solid var(--border);border-radius:var(--radius-sm);width:100%;height:40px;color:var(--text-primary);background:var(--bg-white);outline:none;padding:0 14px;font-size:14px;transition:border-color .2s,box-shadow .2s}.form-input:focus,.form-select:focus{border-color:var(--accent-mid);box-shadow:0 0 0 3px #2d6a4f14}.form-input::placeholder{color:var(--text-faint)}textarea.form-input{resize:vertical;height:auto;min-height:80px;padding:10px 14px}.tag{border-radius:var(--radius-full);align-items:center;gap:4px;padding:3px 10px;font-size:12px;font-weight:500;display:inline-flex}.tag-green{background:var(--green-bg);color:var(--green)}.tag-red{background:var(--red-bg);color:var(--red)}.tag-orange{background:var(--orange-bg);color:var(--orange)}.tag-blue{background:var(--blue-bg);color:var(--blue)}.text-green{color:var(--green)}.text-red{color:var(--red)}.text-orange{color:var(--orange)}.text-secondary{color:var(--text-secondary)}.text-tertiary{color:var(--text-tertiary)}.text-bold{font-weight:600}.text-sm{font-size:12px}.text-right{text-align:right}.text-center{text-align:center}.flex{display:flex}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.gap-sm{gap:8px}.gap-md{gap:16px}.mt-sm{margin-top:8px}.mt-md{margin-top:16px}.mb-sm{margin-bottom:8px}.mb-md{margin-bottom:16px}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tabular-nums{font-variant-numeric:tabular-nums}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes scaleIn{0%{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}@keyframes fadeUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes logoBreathe{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}@keyframes dotPulse{0%,to{box-shadow:0 0 0 3px #52b78826}50%{box-shadow:0 0 0 6px #52b7880f}}@keyframes fabPulse{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(1.4)}}@keyframes slideInLeft{0%{opacity:0;transform:translate(-16px)}to{opacity:1;transform:translate(0)}}@keyframes dotBlink{0%,to{opacity:1}50%{opacity:.35}}@keyframes badgeBounce{0%,to{transform:scale(1)}50%{transform:scale(1.15)}}@keyframes shimmer{0%{left:-100%}to{left:200%}}@keyframes floatOrb1{0%,to{transform:translate(0)}25%{transform:translate(-20px,15px)}50%{transform:translate(10px,-25px)}75%{transform:translate(-15px,-10px)}}@keyframes floatOrb2{0%,to{transform:translate(0)}25%{transform:translate(15px,-20px)}50%{transform:translate(-25px,10px)}75%{transform:translate(20px,15px)}}@keyframes shineSweep{0%{left:-60%}40%{left:160%}to{left:160%}}@keyframes ringProgress{0%{stroke-dashoffset:282.7px}}@keyframes pctBounce{0%{opacity:0;transform:scale(.5)}60%{transform:scale(1.15)}to{opacity:1;transform:scale(1)}}.anim{animation:.55s cubic-bezier(.16,1,.3,1) both fadeUp}.d1{animation-delay:60ms}.d2{animation-delay:.12s}.d3{animation-delay:.18s}.d4{animation-delay:.24s}.d5{animation-delay:.3s}.d6{animation-delay:.36s}.fade-enter-active,.fade-leave-active{transition:opacity .2s}.fade-enter-from,.fade-leave-to{opacity:0}.slide-enter-active,.slide-leave-active{transition:transform .3s}.slide-enter-from{transform:translate(20px)}.slide-leave-to{transform:translate(-20px)}.scale-enter-active,.scale-leave-active{transition:transform .2s,opacity .2s}.scale-enter-from,.scale-leave-to{opacity:0;transform:scale(.95)}.panel{background:var(--bg-card);border-radius:var(--radius-md);border:1px solid var(--border-light);box-shadow:var(--shadow-card);overflow:hidden}.panel-header{border-bottom:1px solid var(--divider);justify-content:space-between;align-items:center;padding:18px 22px;display:flex}.panel-title{color:var(--text-primary);align-items:center;gap:8px;font-size:15px;font-weight:600;display:flex}.panel-title:before{content:"";background:var(--accent-light);border-radius:50%;width:6px;height:6px;animation:2.2s ease-in-out infinite dotBlink;display:inline-block}.panel-body{padding:20px 22px}.panel-filter{overflow:visible}.panel-tabs{gap:4px;display:flex}.panel-tab{border-radius:var(--radius-xs);color:var(--text-tertiary);cursor:pointer;background:0 0;border:none;padding:4px 12px;font-family:inherit;font-size:13px;transition:all .15s}.panel-tab:hover{background:var(--bg-warm);color:var(--text-secondary)}.panel-tab.active{background:var(--accent-lighter);color:var(--accent-mid);font-weight:500}.stat-card{background:var(--bg-card);border-radius:var(--radius-md);border:1px solid var(--border-light);box-shadow:var(--shadow-card);padding:20px 22px;transition:all .25s cubic-bezier(.16,1,.3,1);position:relative;overflow:hidden}.stat-card:hover{box-shadow:var(--shadow-lg);transform:translateY(-4px)}.stat-card .label{color:var(--text-tertiary);margin-bottom:8px;font-size:13px}.stat-card .value{color:var(--text-primary);font-variant-numeric:tabular-nums;white-space:nowrap;min-width:120px;min-height:36px;font-size:26px;font-weight:700;display:inline-block}.stat-card .trend{align-items:center;gap:4px;margin-top:6px;font-size:12px;display:flex}.stat-card .trend.up{color:var(--green)}.stat-card .trend.down{color:var(--red)}.btn{border-radius:var(--radius-full);cursor:pointer;white-space:nowrap;border:none;justify-content:center;align-items:center;gap:6px;height:40px;padding:0 20px;font-size:14px;font-weight:500;transition:all .2s;display:inline-flex;position:relative;overflow:hidden}.btn:hover{transform:translateY(-2px)}.btn:active{transform:translateY(0)}.btn-primary{background:var(--accent);color:var(--text-inverse)}.btn-primary:hover{background:var(--accent-mid);box-shadow:0 4px 12px #1b433233}.btn-danger{background:var(--red);color:var(--text-inverse)}.btn-danger:hover{box-shadow:0 4px 12px #c4314b33}.btn-ghost{color:var(--text-secondary);border:1px solid var(--border);background:0 0}.btn-ghost:hover{background:var(--bg-warm);border-color:var(--text-tertiary)}.btn-sm{height:32px;padding:0 14px;font-size:13px}.btn:disabled{opacity:.5;cursor:not-allowed;transform:none!important}.empty-state{text-align:center;color:var(--text-tertiary);padding:48px 20px}.empty-state .icon{opacity:.4;margin-bottom:12px;font-size:48px}.empty-state .text{font-size:14px;line-height:1.6}.empty-state .text-sub{color:var(--text-faint);margin-top:4px;font-size:13px}.action-btn{border-radius:var(--radius-xs);cursor:pointer;width:28px;height:28px;color:var(--text-tertiary);background:0 0;border:none;justify-content:center;align-items:center;font-size:14px;transition:all .15s;display:flex}.action-btn:hover{background:var(--bg-warm);color:var(--text-primary)}.action-btn.delete:hover{background:var(--red-bg);color:var(--red)}.fab{background:var(--accent);color:#fff;cursor:pointer;z-index:50;border:none;border-radius:50%;width:56px;height:56px;font-size:28px;transition:all .25s cubic-bezier(.16,1,.3,1);position:fixed;bottom:32px;right:32px;box-shadow:0 4px 16px #1b43324d}.fab:after{content:"";border-radius:50%;animation:2s ease-out infinite fabPulse;position:absolute;inset:0}.fab:hover{background:var(--accent-mid);transform:scale(1.1)rotate(90deg);box-shadow:0 8px 28px #1b433259}.stat-grid{grid-template-columns:repeat(5,1fr);gap:16px;margin-bottom:24px;display:grid}.dashboard-grid{grid-template-columns:3fr 2fr;gap:20px;display:grid}.dashboard-left,.dashboard-right{flex-direction:column;gap:20px;display:flex}.greeting-bar{justify-content:space-between;align-items:center;margin-bottom:24px;display:flex}.greeting-text{font-size:22px;font-weight:700;font-family:var(--font-display);color:var(--accent)}.greeting-date{color:var(--text-tertiary);align-items:center;gap:6px;font-size:14px;display:flex}.tx-item{align-items:center;gap:12px;padding:12px 0;transition:all .15s;display:flex}.tx-item:hover{background:var(--bg-warm);border-radius:var(--radius-xs);margin:0 -22px;padding-left:22px;padding-right:22px}.tx-icon-wrap{border-radius:var(--radius-xs);flex-shrink:0;justify-content:center;align-items:center;width:36px;height:36px;display:flex}.tx-info{flex:1;min-width:0}.tx-category{color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;overflow:hidden}.tx-meta{color:var(--text-tertiary);gap:4px;margin-top:2px;font-size:12px;display:flex}.tx-right{text-align:right;flex-shrink:0}.tx-amount{font-variant-numeric:tabular-nums;font-size:14px;font-weight:600}.tx-amount.income{color:var(--green)}.tx-amount.expense{color:var(--red)}.tx-amount.transfer{color:var(--blue)}.tx-date-group{color:var(--text-secondary);border-top:1px solid var(--divider);align-items:center;gap:12px;margin-top:4px;padding:10px 0 4px;font-size:13px;font-weight:600;display:flex}.budget-item{border-bottom:1px solid var(--border-light);padding:14px 0}.budget-item:last-child{border-bottom:none}.budget-header{justify-content:space-between;align-items:center;margin-bottom:8px;display:flex}.budget-name{align-items:center;gap:6px;font-size:14px;font-weight:500;display:flex}.budget-name-dot{border-radius:50%;width:8px;height:8px;display:inline-block}.budget-percent{font-variant-numeric:tabular-nums;font-size:13px;font-weight:600}.budget-percent.normal{color:var(--green)}.budget-percent.warning{color:var(--orange)}.budget-percent.danger{color:var(--red)}.budget-bar-track{background:var(--bg-gray);border-radius:3px;height:6px;overflow:hidden}.budget-bar-fill{border-radius:3px;height:100%;transition:width .8s cubic-bezier(.16,1,.3,1)}.budget-bar-fill.normal{background:var(--green)}.budget-bar-fill.warning{background:var(--orange)}.budget-bar-fill.danger{background:var(--red)}.budget-detail{color:var(--text-tertiary);justify-content:space-between;margin-top:6px;font-size:12px;display:flex}.account-item{border-bottom:1px solid var(--border-light);align-items:center;gap:10px;padding:10px 0;transition:background .15s;display:flex}.account-item:last-child{border-bottom:none}.account-item:hover{background:var(--bg-warm);border-radius:var(--radius-xs);margin:0 -22px;padding-left:22px;padding-right:22px}.account-icon-sm{border-radius:var(--radius-xs);flex-shrink:0;justify-content:center;align-items:center;width:32px;height:32px;display:flex}.account-detail{flex:1;min-width:0}.account-name{font-size:14px;font-weight:500}.account-type{color:var(--text-tertiary);font-size:12px}.account-balance{font-variant-numeric:tabular-nums;flex-shrink:0;font-size:14px;font-weight:600}.account-footer{border-top:1px solid var(--divider);color:var(--text-tertiary);justify-content:space-between;padding-top:12px;font-size:12px;display:flex}.debt-item{align-items:center;gap:10px;padding:10px 0;display:flex}.debt-dot{border-radius:50%;flex-shrink:0;width:8px;height:8px}.debt-dot.safe{background:var(--green)}.debt-dot.warn{background:var(--orange)}.debt-dot.urgent{background:var(--red);animation:1.5s ease-in-out infinite dotPulse}.debt-info{flex:1}.debt-account{font-size:14px;font-weight:500}.debt-days{color:var(--text-tertiary);font-size:12px}.debt-amount{font-variant-numeric:tabular-nums;flex-shrink:0;font-size:14px;font-weight:600}.debt-empty{text-align:center;color:var(--text-tertiary);padding:24px;font-size:14px}.today-summary{border-bottom:1px solid var(--divider);gap:24px;margin-bottom:12px;padding:12px 0;display:flex}.today-summary .summary-item{align-items:center;gap:6px;font-size:13px;display:flex}.today-summary .summary-label{color:var(--text-tertiary)}.today-summary .summary-value{font-variant-numeric:tabular-nums;font-weight:600}@media (width<=1200px){.stat-grid{grid-template-columns:repeat(3,1fr)}}@media (width<=768px){.stat-grid{grid-template-columns:repeat(2,1fr)}.dashboard-grid{grid-template-columns:1fr}.stat-card .value{font-size:22px}}.app-sidebar{width:var(--sidebar-width);background:var(--bg-white);border-right:1px solid var(--border-light);z-index:100;flex-direction:column;display:flex;position:fixed;top:0;bottom:0;left:0;box-shadow:2px 0 8px #1c191708}.sidebar-logo{border-bottom:1px solid var(--divider);align-items:center;gap:12px;padding:24px 22px 20px;display:flex}.logo-icon{border-radius:var(--radius-sm);background:linear-gradient(135deg, var(--accent), var(--accent-mid));justify-content:center;align-items:center;width:36px;height:36px;animation:4s ease-in-out infinite logoBreathe;display:flex}.logo-icon svg{stroke:#fff}.logo-text{font-family:var(--font-display);color:var(--accent);font-size:20px;font-weight:700}.sidebar-nav{flex:1;padding:12px 10px;overflow-y:auto}.nav-group{margin-bottom:8px}.nav-group-label{color:var(--text-faint);letter-spacing:1px;text-transform:uppercase;padding:8px 12px 6px;font-size:11px;font-weight:600}.nav-item{border-radius:var(--radius-sm);color:var(--text-secondary);cursor:pointer;align-items:center;gap:10px;padding:10px 12px;font-size:14px;font-weight:500;text-decoration:none;transition:all .15s;display:flex}.nav-item:hover{background:var(--accent-dim);color:var(--accent-mid)}.nav-item:hover .nav-icon svg{stroke:var(--accent-mid)}.nav-item.active{background:var(--accent-lighter);color:var(--accent);box-shadow:inset 3px 0 0 var(--accent-light);font-weight:600}.nav-item.active .nav-icon svg{stroke:var(--accent)}.nav-icon{justify-content:center;align-items:center;width:22px;height:22px;display:flex}.nav-icon svg{width:18px;height:18px;stroke:var(--text-tertiary);fill:none;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}.nav-text{flex:1}.nav-anim{animation:.35s cubic-bezier(.16,1,.3,1) both slideInLeft}.sidebar-footer{border-top:1px solid var(--divider);padding:16px 22px}.sidebar-status{color:var(--text-tertiary);align-items:center;gap:8px;font-size:12px;display:flex}.status-dot{background:var(--accent-light);border-radius:50%;width:6px;height:6px;animation:2.5s ease-in-out infinite dotPulse}@media (width<=768px){.main-content{margin-left:0;padding:16px}.app-sidebar{z-index:1000;transition:transform .3s;transform:translate(-100%)}.app-sidebar.open{transform:translate(0)}}
