:root{--ff-bg: #fdf6ec;--ff-card: #ffffff;--ff-primary: #ff7a59;--ff-primary-dark: #e85f3c;--ff-income: #2fae66;--ff-expense: #ff5a5f;--ff-text: #2c2c2c;--ff-muted: #8a8a8a;--ff-radius: 18px;font-family:-apple-system,BlinkMacSystemFont,PingFang TC,Segoe UI,sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--ff-bg);color:var(--ff-text)}.ff-layout{display:flex;min-height:100vh}.ff-sidebar{width:220px;background:#fff;border-right:1px solid #eee;padding:20px 12px}.ff-sidebar .brand{font-weight:800;font-size:16px;padding:0 10px 20px}.ff-sidebar a{display:block;padding:12px 14px;border-radius:12px;color:var(--ff-text);text-decoration:none;font-weight:600;margin-bottom:4px}.ff-sidebar a.active{background:#fff1ec;color:var(--ff-primary-dark)}.ff-main{flex:1;padding:28px 32px;max-width:960px}.ff-topbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.ff-card{background:var(--ff-card);border-radius:var(--ff-radius);padding:20px;box-shadow:0 4px 14px #0000000d;margin-bottom:16px}.ff-title{font-size:20px;font-weight:700;margin:0 0 12px}.ff-stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.ff-stat-grid .stat{background:#fff;border-radius:var(--ff-radius);padding:18px;box-shadow:0 4px 14px #0000000d}.ff-stat-grid .stat .label{color:var(--ff-muted);font-size:13px;margin-bottom:6px}.ff-stat-grid .stat .value{font-size:26px;font-weight:800}.ff-table{width:100%;border-collapse:collapse}.ff-table th{text-align:left;font-size:12px;color:var(--ff-muted);padding:8px 10px;border-bottom:1px solid #eee}.ff-table td{padding:10px;border-bottom:1px solid #f5f5f5;font-size:14px}.ff-amount.income{color:var(--ff-income);font-weight:700}.ff-amount.expense{color:var(--ff-expense);font-weight:700}.ff-toggle-group{display:flex;gap:8px;margin-bottom:16px}.ff-toggle{padding:8px 16px;border-radius:999px;border:2px solid #eee;background:#fff;font-weight:700;cursor:pointer;font-size:13px}.ff-toggle.active{border-color:var(--ff-primary);background:#fff1ec;color:var(--ff-primary-dark)}.ff-btn{padding:10px 20px;border-radius:999px;border:none;background:var(--ff-primary);color:#fff;font-weight:700;cursor:pointer;font-size:14px}.ff-btn.secondary{background:#fff;color:var(--ff-primary);border:2px solid var(--ff-primary)}.ff-btn.ghost{background:transparent;color:var(--ff-muted)}.ff-input{padding:10px 12px;border-radius:12px;border:2px solid #eee;font-size:14px}.ff-error{color:var(--ff-expense);font-size:13px}.ff-empty{text-align:center;color:var(--ff-muted);padding:30px 0}
