:root{--bg: #F9FAFB;--surface: #FFFFFF;--surface-alt: #F2F4F6;--border: #F2F4F6;--border-strong: #E5E8EB;--text: #191F28;--text-2: #4E5968;--text-3: #8B95A1;--text-4: #B0B8C1;--accent: #3182F6;--accent-soft: #E8F3FF;--accent-strong: #1B64DA;--danger: #F04452;--danger-soft: #FFE9EC;--success: #00BE40;--success-soft: #E6F7EC;--warning: #FF9500;--radius: 16px;--radius-sm: 10px;--radius-pill: 999px;--shadow-sm: 0 1px 2px rgba(17, 24, 39, .04);--shadow: 0 4px 16px rgba(17, 24, 39, .06);--tap: 44px;--safe-top: env(safe-area-inset-top, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px);--bottom-nav-h: 64px;font-family:Pretendard,-apple-system,BlinkMacSystemFont,Apple SD Gothic Neo,Noto Sans KR,sans-serif;color-scheme:light}*{box-sizing:border-box}html,body{background:var(--bg);color:var(--text);margin:0}body{-webkit-font-smoothing:antialiased;font-size:15px;line-height:1.5;overscroll-behavior-y:contain}button{font:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent}input,select,textarea{font:inherit;color:inherit;font-size:16px}code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;background:var(--surface-alt);padding:1px 6px;border-radius:6px;font-size:.9em}.app{max-width:720px;margin:0 auto;padding:calc(8px + var(--safe-top)) 16px calc(96px + var(--safe-bottom));min-height:100vh}.page{padding-bottom:24px}.appbar{display:flex;align-items:center;justify-content:space-between;padding:8px 4px 12px;position:sticky;top:var(--safe-top);background:var(--bg);z-index:10}.appbar h1{margin:0;font-size:20px;font-weight:800;letter-spacing:-.02em}.top-tabs{display:flex;gap:4px;background:var(--surface);border-radius:var(--radius);padding:4px;box-shadow:var(--shadow-sm);margin-bottom:20px;overflow-x:auto}.tab{flex:1;min-width:0;background:transparent;border:0;color:var(--text-3);padding:12px;border-radius:12px;font-size:13px;font-weight:600;white-space:nowrap;transition:background .15s,color .15s}.tab:hover{color:var(--text-2)}.tab.on{color:var(--accent);background:var(--accent-soft)}.tab-badge{display:inline-block;margin-left:4px;background:var(--danger);color:#fff;font-size:10px;border-radius:999px;padding:1px 6px;font-weight:700}.bottom-nav{display:none;position:fixed;left:0;right:0;bottom:0;background:#fffffff0;backdrop-filter:saturate(180%) blur(20px);-webkit-backdrop-filter:saturate(180%) blur(20px);border-top:1px solid var(--border-strong);padding-bottom:var(--safe-bottom);z-index:100}.bnav-item{flex:1;background:transparent;border:0;padding:8px 4px 6px;display:flex;flex-direction:column;align-items:center;gap:2px;color:var(--text-3);position:relative;min-height:var(--tap)}.bnav-item.on{color:var(--accent)}.bnav-icon{font-size:20px;line-height:1}.bnav-label{font-size:10px;font-weight:600}.bnav-badge{position:absolute;top:4px;right:22%;background:var(--danger);color:#fff;font-size:9px;font-weight:700;padding:1px 5px;border-radius:999px;min-width:16px;text-align:center}.header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;flex-wrap:wrap;gap:8px}.header h2{margin:0;font-size:18px;font-weight:700;letter-spacing:-.01em}.header-controls{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.month-input{background:var(--surface);border:1px solid var(--border-strong);padding:8px 12px;border-radius:var(--radius-pill);font-size:14px;font-weight:600;color:var(--text-2);min-height:36px}.month-input::-webkit-calendar-picker-indicator{opacity:.5;cursor:pointer}.hero{background:var(--surface);border-radius:var(--radius);padding:24px 20px;box-shadow:var(--shadow-sm);margin-bottom:16px}.hero-label{font-size:13px;color:var(--text-3);font-weight:600;margin-bottom:8px}.hero-amount{font-size:32px;font-weight:800;letter-spacing:-.03em;color:var(--text);font-variant-numeric:tabular-nums;line-height:1.1}.hero-amount .won{font-size:18px;font-weight:700;color:var(--text-2);margin-left:4px}.hero-meta{display:flex;gap:16px;margin-top:12px;font-size:12px;color:var(--text-3);flex-wrap:wrap}.hero-meta span strong{color:var(--text-2);font-weight:600}.card{background:var(--surface);border-radius:var(--radius);padding:16px 18px;box-shadow:var(--shadow-sm)}.card+.card{margin-top:12px}.card-title{font-size:13px;color:var(--text-3);font-weight:600;margin-bottom:8px}.section-label{font-size:12px;color:var(--text-3);font-weight:600;text-transform:uppercase;letter-spacing:.05em;margin:20px 4px 8px}.cat-bars{background:var(--surface);border-radius:var(--radius);padding:12px 18px;box-shadow:var(--shadow-sm);margin-bottom:16px}.cat-bar{padding:10px 0;border-bottom:1px solid var(--border)}.cat-bar:last-child{border-bottom:0}.cat-bar-row{display:flex;justify-content:space-between;align-items:baseline;gap:8px}.cat-bar-name{font-size:14px;font-weight:600;color:var(--text);display:flex;align-items:center;gap:6px}.cat-bar-amount{font-size:14px;font-weight:700;font-variant-numeric:tabular-nums}.cat-bar-meta{font-size:11px;color:var(--text-3);margin-top:2px}.cat-bar-track{background:var(--surface-alt);height:4px;border-radius:999px;margin-top:6px;overflow:hidden}.cat-bar-fill{background:var(--accent);height:100%;border-radius:999px;transition:width .3s}.day-group{background:var(--surface);border-radius:var(--radius);padding:4px;box-shadow:var(--shadow-sm);margin-bottom:10px}.day-header{display:flex;justify-content:space-between;align-items:baseline;padding:10px 14px 6px}.day-header-date{font-size:13px;font-weight:700;color:var(--text)}.day-header-meta{font-size:12px;color:var(--text-3);font-variant-numeric:tabular-nums}.txn{display:grid;grid-template-columns:1fr auto;gap:4px 12px;padding:12px 14px;border-top:1px solid var(--border);align-items:start}.txn:nth-child(2){border-top:0}.txn.excluded{opacity:.5}.txn.excluded .txn-amount{text-decoration:line-through}.txn-main{display:flex;flex-direction:column;min-width:0;gap:4px}.txn-merchant{font-size:15px;font-weight:600;color:var(--text);display:flex;align-items:center;gap:6px;line-height:1.3}.txn-meta{font-size:12px;color:var(--text-3);display:flex;flex-wrap:wrap;gap:8px;align-items:center;line-height:1.4}.txn-meta .dot{color:var(--text-4)}.txn-raw{font-size:11px;color:var(--text-4);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.txn-amount-wrap{text-align:right;display:flex;flex-direction:column;align-items:flex-end;gap:2px}.txn-amount{font-size:16px;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums;letter-spacing:-.01em}.txn-amount.negative{color:var(--danger)}.txn-running{font-size:11px;color:var(--text-3);font-variant-numeric:tabular-nums}.txn-actions{display:flex;gap:6px}.icon-btn{background:transparent;border:1px solid transparent;color:var(--text-3);height:34px;min-width:34px;padding:0 10px;border-radius:10px;display:inline-flex;align-items:center;justify-content:center;font-size:13px;font-weight:500;transition:background .15s,color .15s}.icon-btn:hover,.icon-btn:active{background:var(--surface-alt);color:var(--text)}.icon-btn.danger:hover,.icon-btn.danger:active,.icon-btn.active{background:var(--danger-soft);color:var(--danger)}.status-pill{display:inline-block;padding:1px 6px;border-radius:999px;font-size:10px;font-weight:600}.status-pill.partial,.status-pill.failed,.status-pill.unmatched{background:var(--danger-soft);color:var(--danger)}.status-pill.ok{display:none}.empty-state{padding:48px 24px;text-align:center;color:var(--text-3);font-size:13px;background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow-sm)}.empty-state .icon{font-size:32px;margin-bottom:12px;opacity:.5}.cat-select{background:var(--accent-soft);border:0;color:var(--accent);font-size:11px;font-weight:600;padding:4px 22px 4px 10px;border-radius:var(--radius-pill);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 10 10'%3E%3Cpath d='M2 4l3 3 3-3' stroke='%233182F6' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 8px center;cursor:pointer;max-width:180px;text-overflow:ellipsis;overflow:hidden;min-height:24px}.cat-select:focus{outline:2px solid var(--accent);outline-offset:1px}.cat-select.empty{background-color:var(--surface-alt);color:var(--text-3);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 10 10'%3E%3Cpath d='M2 4l3 3 3-3' stroke='%238B95A1' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")}.chart-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.chart-wrap{margin-top:12px}.chart-wrap .recharts-wrapper{font-size:11px}@media (max-width: 700px){.chart-grid{grid-template-columns:1fr}}.kpi-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:16px}.kpi{background:var(--surface);border-radius:var(--radius);padding:14px;box-shadow:var(--shadow-sm)}.kpi-label{font-size:11px;color:var(--text-3);font-weight:600}.kpi-value{font-size:18px;font-weight:800;letter-spacing:-.02em;margin-top:4px;font-variant-numeric:tabular-nums;line-height:1.2}.kpi-sub{font-size:11px;color:var(--text-3);margin-top:6px;display:flex;gap:4px;align-items:center;flex-wrap:wrap}@media (max-width: 640px){.kpi-grid{grid-template-columns:1fr 1fr}.kpi-grid>.kpi:nth-child(3){grid-column:1 / -1}.kpi-value{font-size:20px}}.delta-pill{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:700;background:var(--surface-alt);color:var(--text-2)}.delta-pill.up{background:var(--danger-soft);color:var(--danger)}.delta-pill.down{background:var(--success-soft);color:var(--success)}.rank-list{list-style:none;margin:8px 0 0;padding:0}.rank-row{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;padding:10px 4px;border-bottom:1px solid var(--border)}.rank-row:last-child{border-bottom:0}.rank-num{width:22px;height:22px;border-radius:50%;background:var(--surface-alt);color:var(--text-2);font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}.rank-body{min-width:0}.rank-name{font-size:13px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rank-bar{background:var(--surface-alt);height:3px;border-radius:999px;margin-top:4px;overflow:hidden}.rank-bar>div{height:100%;border-radius:999px;background:var(--accent);transition:width .3s}.rank-right{text-align:right}.rank-total{font-size:13px;font-weight:700;font-variant-numeric:tabular-nums}.rank-meta{font-size:10px;color:var(--text-3);margin-top:1px}.filter-bar{margin-bottom:16px;padding:12px 14px}.filter-row{display:flex;gap:8px;margin-top:8px;flex-wrap:wrap}.filter-row:first-child{margin-top:0}.filter-row .input,.filter-row .select{flex:1;min-width:0}.filter-meta{margin-top:8px;font-size:11px;color:var(--text-3)}.budget-card{margin-bottom:16px}.budget-row{padding:8px 0;border-bottom:1px solid var(--border)}.budget-row:last-child{border-bottom:0}.budget-row-top{display:flex;justify-content:space-between;align-items:baseline;gap:8px}.budget-name{font-size:14px;font-weight:600}.budget-amounts{font-size:13px;font-weight:700;font-variant-numeric:tabular-nums}.budget-amounts.over{color:var(--danger)}.budget-of{color:var(--text-3);font-weight:500;font-size:11px}.budget-track{background:var(--surface-alt);height:6px;border-radius:999px;margin-top:6px;overflow:hidden}.budget-fill{background:var(--success);height:100%;border-radius:999px;transition:width .3s}.budget-fill.warn{background:var(--warning)}.budget-fill.over{background:var(--danger)}.budget-meta{font-size:11px;color:var(--text-3);margin-top:4px}.cat-budget{display:inline-flex;align-items:center;gap:4px}.cat-budget-input{width:100px;padding:6px 8px;font-size:13px;text-align:right;font-variant-numeric:tabular-nums}.cat-budget-unit{font-size:11px;color:var(--text-3)}.budget-summary-list{list-style:none;margin:8px 0 0;padding:0}.budget-summary-row{display:flex;justify-content:space-between;padding:6px 0;border-bottom:1px dashed var(--border);font-size:13px}.budget-summary-row:last-child{border-bottom:0}.input{background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-sm);padding:10px 14px;font-size:14px;color:var(--text);width:100%;min-height:var(--tap)}.input:focus{outline:2px solid var(--accent);outline-offset:0;border-color:var(--accent)}.select{background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-sm);padding:10px 14px;font-size:14px;color:var(--text);min-height:var(--tap)}.btn{background:var(--accent);color:#fff;border:0;padding:10px 20px;border-radius:var(--radius-sm);font-weight:600;font-size:14px;min-height:var(--tap)}.btn:hover{background:var(--accent-strong)}.btn:disabled{opacity:.4;cursor:not-allowed}.btn-ghost{background:var(--surface);color:var(--text-2);border:1px solid var(--border-strong)}.btn-ghost:hover{background:var(--surface-alt)}.btn-danger{background:var(--danger)}.btn-danger:hover{background:#d63548}.cat-new-row{display:grid;grid-template-columns:minmax(140px,1fr) 2fr auto;gap:8px;margin-top:12px}.cat-tree{list-style:none;margin:0;padding:0}.cat-tree-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:12px 0;border-bottom:1px solid var(--border)}.cat-tree-row:last-child{border-bottom:0}.cat-tree-name{flex:1 1 100%;display:flex;align-items:center;gap:8px;min-width:0;font-size:14px}.cat-tree-name strong{color:var(--text);font-weight:600}.cat-tree-actions{display:flex;align-items:center;gap:4px;flex-shrink:0}.cat-tree-actions select{padding:6px 10px;font-size:12px;max-width:160px;border-radius:var(--radius-sm);border:1px solid var(--border-strong);background:var(--surface);min-height:34px}.cat-dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex-shrink:0;background:var(--accent)}.cat-path{color:var(--text-3);font-size:11px;margin-left:4px}.cat-swatch-wrap{position:relative}.cat-swatch-wrap summary{list-style:none;-webkit-user-select:none;user-select:none}.cat-swatch-wrap summary::-webkit-details-marker{display:none}.cat-swatch-pop{position:absolute;top:100%;right:0;margin-top:4px;display:flex;flex-wrap:wrap;gap:4px;background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-sm);padding:8px;z-index:50;width:168px;box-shadow:var(--shadow)}.cat-swatch{width:26px;height:26px;border-radius:50%;border:1px solid var(--border-strong);cursor:pointer;color:var(--text-3);font-size:11px}.alias-new-row{display:grid;grid-template-columns:1fr auto 1fr auto;gap:8px;align-items:center;margin-top:12px}.alias-list{list-style:none;padding:0;margin:0}.alias-row{display:grid;grid-template-columns:1fr auto 1fr auto;gap:8px;align-items:center;padding:10px 0;border-bottom:1px solid var(--border)}.alias-row:last-child{border-bottom:0}.alias-cell{background:transparent;border:0;color:inherit;text-align:left;padding:6px 8px;border-radius:var(--radius-sm);cursor:pointer;font-size:14px;min-height:34px}.alias-cell:hover{background:var(--surface-alt)}.alias-arrow{color:var(--text-3);font-size:14px}.trash-row{padding:14px}.trash-deleted-at{font-size:11px;color:var(--text-3);margin-top:2px}.fab{position:fixed;right:20px;bottom:calc(20px + var(--bottom-nav-h) + var(--safe-bottom));width:56px;height:56px;border-radius:50%;background:var(--accent);color:#fff;border:0;font-size:28px;font-weight:400;box-shadow:0 8px 20px #3182f659;z-index:90;display:flex;align-items:center;justify-content:center;transition:transform .15s,background .15s}.fab:hover{background:var(--accent-strong);transform:scale(1.05)}.fab:active{transform:scale(.95)}@media (min-width: 641px){.fab{bottom:calc(20px + var(--safe-bottom));right:max(20px,calc((100vw - 720px)/2 - 60px))}}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#11182766;display:flex;align-items:flex-end;justify-content:center;z-index:200;padding:16px;padding-bottom:max(16px,var(--safe-bottom));animation:fade-in .15s ease-out}.modal{background:var(--surface);border-radius:20px 20px 0 0;width:100%;max-width:540px;max-height:92vh;overflow-y:auto;display:flex;flex-direction:column;animation:slide-up .2s ease-out}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes slide-up{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--surface);z-index:1}.modal-header h3{margin:0;font-size:18px;font-weight:700}.modal-body{padding:16px 20px;display:flex;flex-direction:column;gap:14px}.modal-actions{display:flex;gap:8px;padding:12px 20px 16px;justify-content:flex-end;border-top:1px solid var(--border);position:sticky;bottom:0;background:var(--surface)}.modal-actions .btn{flex:1}@media (min-width: 641px){.modal-backdrop{align-items:center}.modal{border-radius:20px;max-height:90vh}.modal-actions .btn{flex:0;min-width:100px}}.field{display:flex;flex-direction:column;gap:6px}.field-label{font-size:12px;color:var(--text-3);font-weight:600}.field-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}.field-error{color:var(--danger);font-size:12px;padding:8px 10px;background:var(--danger-soft);border-radius:8px}.rule-new-row{display:grid;grid-template-columns:auto 1fr auto 1fr auto;gap:8px;align-items:center;margin-top:8px}@media (max-width: 640px){.rule-new-row{grid-template-columns:1fr 1fr}.rule-new-row .rule-arrow{display:none}.rule-new-row .btn{grid-column:1 / -1}}.rule-arrow{color:var(--text-3)}.rule-list{list-style:none;margin:8px 0 0;padding:0}.rule-row{display:grid;grid-template-columns:auto 1fr auto 1fr auto;gap:8px;align-items:center;padding:10px 0;border-bottom:1px solid var(--border)}.rule-row:last-child{border-bottom:0}.rule-pattern{background:var(--surface-alt);padding:4px 8px;border-radius:6px;font-size:13px}.rule-category{font-size:14px}@media (max-width: 640px){.rule-row{grid-template-columns:auto 1fr 1fr auto}.rule-row .rule-arrow{display:none}}.splash{display:flex;align-items:center;justify-content:center;min-height:100vh;color:var(--text-3);font-size:14px}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;padding-top:calc(24px + var(--safe-top));padding-bottom:calc(24px + var(--safe-bottom));background:linear-gradient(180deg,#f9fafb,#eef4ff)}.login-card{background:var(--surface);border-radius:24px;box-shadow:var(--shadow);padding:40px 28px 28px;width:100%;max-width:360px;display:flex;flex-direction:column;align-items:center}.login-logo{width:64px;height:64px;border-radius:18px;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:36px;font-weight:800;margin-bottom:16px;box-shadow:0 8px 20px #3182f64d}.login-title{margin:0;font-size:22px;font-weight:800;letter-spacing:-.02em}.login-subtitle{margin:6px 0 24px;color:var(--text-3);font-size:13px}.login-input{text-align:center;font-size:16px;padding:14px;margin-bottom:12px}.login-error{color:var(--danger);font-size:13px;padding:8px 12px;background:var(--danger-soft);border-radius:8px;margin-bottom:12px;width:100%;text-align:center}.login-btn{width:100%;padding:14px;font-size:15px}.backup-list{list-style:none;margin:0;padding:0}.backup-row{display:flex;justify-content:space-between;align-items:center;padding:10px 0;border-bottom:1px solid var(--border);gap:8px}.backup-row:last-child{border-bottom:0}.backup-info{min-width:0;flex:1}.backup-info strong{font-size:13px;font-family:ui-monospace,monospace}.backup-meta{font-size:11px;color:var(--text-3);margin-top:2px}.backup-actions{display:flex;gap:4px}.backup-actions a.icon-btn{text-decoration:none}@media (max-width: 640px){.app{padding:calc(8px + var(--safe-top)) 12px calc(calc(var(--bottom-nav-h) + 16px) + var(--safe-bottom))}.top-tabs{display:none}.bottom-nav{display:flex}.appbar{padding:4px 0 10px;margin-bottom:4px}.appbar h1{font-size:18px}.hero{padding:20px 16px}.hero-amount{font-size:28px}.header h2{font-size:16px}.header{gap:6px}.header-controls .icon-btn{height:36px;min-width:36px}.cat-new-row{grid-template-columns:1fr}.alias-new-row{grid-template-columns:1fr 1fr}.alias-new-row .alias-arrow{display:none}.alias-row{grid-template-columns:1fr auto auto}.alias-row .alias-arrow,.cat-tree-actions select{display:none}.filter-row{gap:6px}.filter-row .input,.filter-row .select{flex-basis:calc(50% - 3px)}.txn-actions{flex-wrap:wrap}.chart-wrap .recharts-legend-wrapper{font-size:10px}}@media (min-width: 641px){.bottom-nav{display:none}}
