.app-container{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;min-height:100vh;padding:16px;max-width:500px;margin:0 auto;position:relative}.app-header{width:100%;display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;padding:4px 8px}.logo{display:flex;align-items:center;gap:8px;font-size:24px;font-weight:700;color:var(--text-primary);letter-spacing:.5px}.logo-icon{font-size:28px}.settings-btn{background:#ffffff0d;border:1px solid rgba(255,255,255,.1);color:var(--text-secondary);width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:var(--transition-fast)}.settings-btn:hover,.settings-btn:active{background:#ffffff26;color:var(--text-primary);transform:scale(1.05)}.amount-display-container{width:100%;padding:16px 20px;margin-bottom:16px;display:flex;flex-direction:column;align-items:flex-end;position:relative;overflow:hidden}.amount-label{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:1px;color:var(--primary);margin-bottom:4px}.amount-value-wrapper{display:flex;align-items:baseline;max-width:100%}.amount-currency{font-size:24px;font-weight:600;color:var(--text-secondary);margin-right:4px}.amount-input-field{font-size:48px;font-weight:700;color:var(--text-primary);font-family:Outfit,sans-serif;letter-spacing:-.5px;text-align:right;line-height:1.1;background:transparent;border:none;outline:none;width:100%;padding:0;margin:0}.amount-input-field::placeholder{color:var(--text-secondary);opacity:.4}.main-card{width:100%;padding:20px;display:flex;flex-direction:column;gap:20px;margin-bottom:24px}.section-title{font-size:14px;font-weight:600;color:var(--text-secondary);margin-bottom:8px;display:flex;align-items:center;gap:6px}.date-selector-row{display:flex;gap:8px;width:100%}.date-pill{flex:1;background:#ffffff0a;border:1px solid rgba(255,255,255,.08);color:var(--text-secondary);padding:10px;border-radius:var(--radius-sm);font-size:14px;font-weight:500;cursor:pointer;transition:var(--transition-fast);text-align:center;display:flex;align-items:center;justify-content:center;gap:4px}.date-pill:hover,.date-pill:active{background:#ffffff14;color:var(--text-primary)}.date-pill.active{background:#06b6d426;border-color:var(--primary);color:var(--primary);font-weight:600}.custom-date-picker{background:#111827cc;border:1px solid rgba(255,255,255,.08);color:var(--text-primary);padding:8px 12px;border-radius:var(--radius-sm);font-family:var(--font-sans);font-size:14px;outline:none;width:100%;transition:var(--transition-fast)}.custom-date-picker:focus{border-color:var(--primary);box-shadow:0 0 0 2px #06b6d426}.category-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;max-height:200px;overflow-y:auto;padding-right:4px}.category-card{background:#ffffff08;border:1px solid rgba(255,255,255,.06);border-radius:var(--radius-sm);padding:12px 6px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;cursor:pointer;transition:var(--transition-fast);text-align:center;-webkit-user-select:none;user-select:none}.category-card:hover,.category-card:active{background:#ffffff14;transform:translateY(-1px)}.category-card.active{background:#6366f126;border-color:var(--secondary);box-shadow:0 0 12px #6366f133}.category-emoji{font-size:20px;filter:drop-shadow(0 2px 4px rgba(0,0,0,.2))}.category-name{font-size:12px;font-weight:500;color:var(--text-secondary)}.category-card.active .category-name{color:var(--text-primary);font-weight:600}.remarks-input{width:100%;background:#ffffff08;border:1px solid rgba(255,255,255,.06);color:var(--text-primary);padding:12px 14px;border-radius:var(--radius-sm);font-family:var(--font-sans);font-size:14px;outline:none;transition:var(--transition-fast)}.remarks-input:focus{background:#ffffff0d;border-color:var(--secondary);box-shadow:0 0 0 2px #6366f126}.submit-btn{width:100%;background:linear-gradient(135deg,#06b6d4,#3b82f6);border:none;color:#fff;padding:16px;font-size:16px;font-weight:600;border-radius:var(--radius-md);cursor:pointer;transition:var(--transition-fast);box-shadow:0 4px 15px #06b6d44d;display:flex;align-items:center;justify-content:center;gap:8px;margin-top:10px}.submit-btn:hover{filter:brightness(1.1);box-shadow:0 6px 20px #06b6d466}.submit-btn:active{transform:scale(.98)}.submit-btn:disabled{background:#ffffff1a;color:var(--text-muted);box-shadow:none;cursor:not-allowed;filter:none}.spinner{width:20px;height:20px;border:3px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.settings-overlay{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#000000b3;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);display:flex;align-items:center;justify-content:center;z-index:1000;padding:20px;animation:fadeIn .2s ease-out}.settings-modal{width:100%;max-width:400px;padding:24px;display:flex;flex-direction:column;gap:16px;position:relative;animation:popIn .3s cubic-bezier(.34,1.56,.64,1) forwards}.settings-title{font-size:20px;font-weight:700;color:var(--text-primary);display:flex;align-items:center;gap:8px}.settings-close{position:absolute;top:16px;right:16px;background:none;border:none;color:var(--text-secondary);font-size:20px;cursor:pointer;width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center}.settings-close:hover{background:#ffffff0d;color:var(--text-primary)}.form-group{display:flex;flex-direction:column;gap:6px}.form-label{font-size:13px;font-weight:600;color:var(--text-secondary)}.form-input{width:100%;background:#0003;border:1px solid rgba(255,255,255,.1);color:var(--text-primary);padding:10px 12px;border-radius:var(--radius-sm);font-family:var(--font-sans);font-size:14px;outline:none;transition:var(--transition-fast)}.form-input:focus{border-color:var(--primary);box-shadow:0 0 0 2px #06b6d426}.save-settings-btn{background:var(--primary);border:none;color:#000;font-weight:700;padding:12px;font-size:14px;border-radius:var(--radius-sm);cursor:pointer;transition:var(--transition-fast);margin-top:8px}.save-settings-btn:hover{background:var(--primary-hover)}.settings-description{font-size:12px;color:var(--text-muted);line-height:1.4}.toast-container{position:fixed;top:24px;left:50%;transform:translate(-50%);z-index:2000;width:90%;max-width:380px}.toast{padding:14px 18px;border-radius:var(--radius-md);display:flex;align-items:center;gap:10px;box-shadow:var(--shadow-lg);font-size:14px;font-weight:500;animation:slideDown .3s cubic-bezier(.18,.89,.32,1.28) forwards}.toast.success{background:#10b98126;border:1px solid rgba(16,185,129,.3);color:#34d399}.toast.error{background:#ef444426;border:1px solid rgba(239,68,68,.3);color:#f87171}.toast-icon{font-size:18px}@keyframes slideDown{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}.transactions-card{width:100%;padding:20px;display:flex;flex-direction:column;gap:16px;margin-bottom:30px}.transactions-header{display:flex;justify-content:space-between;align-items:center;width:100%;gap:12px}.month-dropdown{background:#0000004d;border:1px solid rgba(255,255,255,.1);color:var(--text-primary);padding:6px 12px;border-radius:var(--radius-sm);font-family:var(--font-sans);font-size:14px;font-weight:600;outline:none;cursor:pointer;transition:var(--transition-fast)}.month-dropdown:focus{border-color:var(--primary);box-shadow:0 0 0 2px #06b6d426}.monthly-total-summary{display:flex;justify-content:space-between;align-items:center;background:#ffffff08;border:1px solid rgba(255,255,255,.05);border-radius:var(--radius-sm);padding:12px 16px;margin-bottom:4px}.total-label{font-size:14px;font-weight:600;color:var(--text-secondary)}.total-amount{font-size:20px;font-weight:700;color:var(--primary);font-family:Outfit,sans-serif;text-shadow:0 0 8px rgba(6,182,212,.3)}.transactions-list-wrapper{width:100%;max-height:280px;overflow-y:auto;border-radius:var(--radius-sm);border:1px solid rgba(255,255,255,.05)}.transactions-table{width:100%;border-collapse:collapse;font-size:13px;text-align:left}.transactions-table th{background:#111827;color:var(--text-secondary);font-weight:600;padding:10px 12px;position:sticky;top:0;z-index:10;border-bottom:1px solid rgba(255,255,255,.08)}.transactions-table td{padding:10px 12px;border-bottom:1px solid rgba(255,255,255,.04);color:var(--text-primary);vertical-align:middle}.transaction-row:last-child td{border-bottom:none}.transaction-row:hover{background:#ffffff05}.tx-date{color:var(--text-secondary);white-space:nowrap}.tx-category{font-weight:500;white-space:nowrap}.tx-amount{font-weight:600;color:var(--text-primary);text-align:right;font-family:Outfit,sans-serif}.transactions-table th:nth-child(3){text-align:right}.tx-remarks{color:var(--text-secondary);max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-loading,.list-error,.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:30px 20px;text-align:center;color:var(--text-secondary);font-size:14px}.list-error{color:#f87171;background:#ef44440d;border:1px dashed rgba(239,68,68,.2);border-radius:var(--radius-sm);gap:12px}.retry-btn{background:#ef444426;border:1px solid rgba(239,68,68,.3);color:#f87171;padding:6px 12px;border-radius:var(--radius-sm);font-size:12px;font-weight:600;cursor:pointer;transition:var(--transition-fast)}.retry-btn:hover{background:#ef444440}.empty-state{border:1px dashed rgba(255,255,255,.05);border-radius:var(--radius-sm);background:#ffffff03}.tab-navigation{position:fixed;bottom:0;left:50%;transform:translate(-50%);width:100%;max-width:500px;background:#111827d9;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-top:1px solid rgba(255,255,255,.08);display:flex;justify-content:space-around;padding:10px 0;z-index:100;box-shadow:0 -8px 32px #0006}.nav-tab{background:transparent;border:none;color:var(--text-secondary);display:flex;flex-direction:column;align-items:center;gap:4px;cursor:pointer;padding:6px 20px;border-radius:var(--radius-sm);transition:var(--transition-fast)}.nav-tab:hover,.nav-tab:active{color:var(--text-primary)}.nav-tab.active{color:var(--primary)}.nav-icon{font-size:20px}.nav-label{font-size:11px;font-weight:600}.app-container{padding-bottom:90px}.list-inline-error{display:flex;justify-content:space-between;align-items:center;background:#ef44441a;border:1px solid rgba(239,68,68,.2);color:#f87171;padding:8px 12px;border-radius:var(--radius-sm);font-size:13px;margin-bottom:12px;animation:fadeIn var(--transition-fast) forwards}.retry-btn-inline{background:#ef444433;border:1px solid rgba(239,68,68,.4);color:#f87171;padding:4px 8px;border-radius:4px;font-size:11px;font-weight:600;cursor:pointer;transition:var(--transition-fast)}.retry-btn-inline:hover{background:#ef444459}.analytics-section{display:flex;flex-direction:column;align-items:center;gap:16px;background:#ffffff05;border:1px solid rgba(255,255,255,.06);border-radius:var(--radius-md);padding:18px 14px;width:100%}.donut-chart-container{display:flex;justify-content:center;align-items:center;position:relative;width:100%;padding:4px 0}.donut-chart-svg-wrapper{position:relative;width:180px;height:180px;display:flex;justify-content:center;align-items:center}.donut-chart-svg{filter:drop-shadow(0 4px 14px rgba(0,0,0,.35))}.donut-segment{cursor:pointer;transform-origin:50% 50%;transition:opacity .25s ease,stroke-width .25s cubic-bezier(.18,.89,.32,1.28),filter .25s ease}.donut-segment:hover{opacity:.95}.donut-segment.active{opacity:1;filter:drop-shadow(0 0 8px rgba(255,255,255,.4))}.donut-segment.dimmed{opacity:.3}.donut-center-content{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;width:120px;pointer-events:auto;-webkit-user-select:none;user-select:none;border-radius:50%;transition:var(--transition-fast)}.donut-center-content.has-active:hover{transform:translate(-50%,-50%) scale(1.04)}.donut-center-label{font-size:11px;font-weight:600;color:var(--text-muted);letter-spacing:.5px}.donut-center-amount{font-size:18px;font-weight:700;color:var(--primary);font-family:Outfit,sans-serif;text-shadow:0 0 8px rgba(6,182,212,.3);margin:2px 0;white-space:nowrap}.donut-center-count{font-size:11px;color:var(--text-secondary)}.donut-center-emoji{font-size:20px;line-height:1;margin-bottom:2px}.donut-center-name{font-size:12px;font-weight:600;color:var(--text-primary);max-width:100px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.donut-center-percentage{font-size:11px;font-weight:700;color:var(--text-secondary);background:#ffffff14;padding:1px 6px;border-radius:10px;margin-top:2px}.category-breakdown-list{display:flex;flex-direction:column;gap:8px;width:100%}.breakdown-item{display:flex;flex-direction:column;gap:6px;padding:8px 12px;background:#ffffff08;border:1px solid rgba(255,255,255,.05);border-radius:var(--radius-sm);cursor:pointer;transition:all var(--transition-fast);-webkit-user-select:none;user-select:none}.breakdown-item:hover{background:#ffffff0f;border-color:#ffffff1f;transform:translateY(-1px)}.breakdown-item.active{background:#06b6d414;border-color:#06b6d459;box-shadow:0 0 12px #06b6d426}.breakdown-item-main{display:flex;justify-content:space-between;align-items:center}.breakdown-item-left{display:flex;align-items:center;gap:8px}.breakdown-color-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.breakdown-emoji{font-size:14px;line-height:1}.breakdown-name{font-size:13px;font-weight:600;color:var(--text-primary)}.breakdown-count{font-size:11px;color:var(--text-muted)}.breakdown-item-right{display:flex;align-items:center;gap:8px}.breakdown-amount{font-size:13px;font-weight:700;font-family:Outfit,sans-serif;color:var(--text-primary)}.breakdown-percentage{font-size:11px;font-weight:700;font-family:Outfit,sans-serif;padding:2px 6px;border-radius:6px;border:1px solid}.breakdown-progress-track{width:100%;height:4px;background:#ffffff0f;border-radius:2px;overflow:hidden}.breakdown-progress-fill{height:100%;border-radius:2px;transition:width .4s cubic-bezier(.18,.89,.32,1.28)}.tx-list-header{display:flex;justify-content:space-between;align-items:center;width:100%;padding:4px 2px;margin-top:4px}.tx-list-title{font-size:13px;font-weight:600;color:var(--text-secondary)}.clear-filter-btn{background:#06b6d426;border:1px solid rgba(6,182,212,.3);color:var(--primary);font-size:11px;font-weight:600;padding:3px 8px;border-radius:4px;cursor:pointer;transition:var(--transition-fast)}.clear-filter-btn:hover{background:#06b6d440}.transaction-row.filtered-highlight{background:#06b6d414}:root{--font-sans: "Outfit", "Noto Sans TC", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--bg-gradient: linear-gradient(135deg, #0b0f19 0%, #111827 50%, #1e1b4b 100%);--panel-bg: rgba(17, 24, 39, .75);--panel-border: rgba(255, 255, 255, .08);--panel-glow: rgba(99, 102, 241, .15);--primary: #06b6d4;--primary-hover: #0891b2;--secondary: #6366f1;--success: #10b981;--warning: #f59e0b;--danger: #ef4444;--text-primary: #f8fafc;--text-secondary: #94a3b8;--text-muted: #64748b;--radius-sm: 8px;--radius-md: 16px;--radius-lg: 24px;--radius-xl: 32px;--shadow-sm: 0 2px 8px rgba(0, 0, 0, .15);--shadow-md: 0 8px 32px rgba(0, 0, 0, .3);--shadow-lg: 0 16px 48px rgba(0, 0, 0, .5);--transition-fast: .15s cubic-bezier(.4, 0, .2, 1);--transition-smooth: .3s cubic-bezier(.4, 0, .2, 1)}*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}body{font-family:var(--font-sans);background:var(--bg-gradient);color:var(--text-primary);min-height:100vh;min-height:-webkit-fill-available;overflow-x:hidden;line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html{height:-webkit-fill-available}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:#0000001a}::-webkit-scrollbar-thumb{background:#ffffff1a;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#fff3}.glass-panel{background:var(--panel-bg);border:1px solid var(--panel-border);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border-radius:var(--radius-md);box-shadow:var(--shadow-md)}@keyframes pulseGlow{0%,to{box-shadow:0 0 15px #06b6d433}50%{box-shadow:0 0 30px #06b6d466}}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes popIn{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}.animate-slide-up{animation:slideUp var(--transition-smooth) forwards}.animate-fade-in{animation:fadeIn var(--transition-smooth) forwards}.animate-pop-in{animation:popIn var(--transition-smooth) forwards}
