.cash-container{display:flex;gap:var(--spacing-md);animation:fadeIn var(--transition-normal);flex-direction:column}.cash-header{display:flex;justify-content:space-between;align-items: center;gap:var(--spacing-md);border-bottom:var(--border-width)solid var(--border-color);padding-bottom:var(--spacing-sm)}.cash-header h2{margin:0}.cash-stats{display:flex;align-items: center;gap:1vw}.cash-stats .stat{background:var(--bg-secondary);border:.1vh solid var(--border-color);border-radius:var(--border-radius);display:flex;flex-direction:column;gap:.3vh;padding:.7vh 1vw}.cash-stats .stat span{color:var(--text-secondary);font-size:.8rem}.cash-stats .stat strong{color:var(--text-primary);font-size:1rem}.cash-stats .positive strong{color:var(--positive-color)}.cash-stats .negative strong{color:var(--negative-color);font-size:var(--font-size-xl)}.cash-stats .spending strong{color:var(--negative-color);font-size:var(--font-size-xl)}.chart-section{background:var(--bg-secondary);border-radius:var(--border-radius);padding:var(--spacing-md);display:flex;height:var(--chart-height-md);flex-direction:column}.chart-section h3{margin:0 0 var(--spacing-sm)0}.chart-section .chart-wrapper{min-height:var(--chart-height-sm);flex:1;width:100%}.pie-chart-section{height:var(--chart-height-pie)}.pie-chart-section .pie-slice-label-text{fill:var(--text-secondary);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium)}.expense-pie-tooltip{padding:var(--spacing-sm);border-radius:var(--border-radius);color:var(--text-primary);font-size:var(--font-size-sm)}.expense-pie-tooltip .tooltip-label{margin:var(--margin-tooltip-label);font-weight:var(--font-weight-semibold)}.expense-pie-tooltip .tooltip-entry{display:flex;margin:var(--margin-tooltip-entry);align-items: center}.expense-pie-tooltip .tooltip-dot{margin:var(--margin-tooltip-dot)}.expense-pie-tooltip .tooltip-grouped{margin-top:var(--spacing-sm);padding-top:var(--spacing-sm);border-top:var(--border-width)solid var(--border-color);color:var(--text-secondary)}.cash-balance-section{min-height:var(--chart-height-income)}.cash-empty{color:var(--text-secondary);margin:0}.table-section{background:var(--bg-secondary);border-radius:var(--border-radius);padding:var(--spacing-md);display:flex;flex-direction:column;flex:1;min-height:0}.table-section h3{margin:0 0 var(--spacing-sm)0}.merchant-cell{display:flex;align-items: center;gap:var(--gap-md)}.merchant-cell .logo-container{width:var(--logo-size);height:var(--logo-size);overflow:hidden;display:flex;background-color:var(--bg-primary);border-radius:50%;flex-shrink:0;justify-content:center;align-items: center}.merchant-cell .logo-container img{object-fit:contain;background-color:var(--color-white);width:100%;height:100%}.merchant-cell .logo-container .logo-fallback{display:flex;color:var(--color-white);font-weight:700;font-size:var(--font-size-sm);justify-content:center;align-items: center;width:100%;height:100%}.category-badge{padding:var(--padding-badge-y)var(--padding-badge-x);border-radius:var(--border-radius-badge);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold)}.amount-cell{font-weight:700}.amount-cell.positive{color:var(--positive-color)}.amount-cell.negative{color:var(--negative-color)}@media (max-width:800px){.cash-header{flex-direction:column;align-items: flex-start}.cash-stats{flex-direction:column;align-items:stretch;width:100%}}.expense-month-section{flex:none;min-height:0}.expense-month-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--expense-month-card-min),1fr));gap:var(--gap-md)}.expense-month-card{background:var(--bg-primary);border:var(--border-width)solid var(--border-color);border-radius:var(--border-radius);cursor:pointer;display:flex;gap:var(--gap-md);padding:var(--spacing-sm)var(--gap-md);text-align:left;transition:border-color var(--transition-normal),background-color var(--transition-normal);flex-direction:column;width:100%}.expense-month-card:hover{background:var(--bg-secondary);border-color:var(--text-secondary)}.expense-month-card-title{color:var(--text-primary);font-size:var(--font-size-root);margin:0}.expense-month-stats{display:grid;grid-template-columns:1fr 1fr;gap:var(--gap-sm)}.expense-month-stat{display:flex;gap:var(--gap-xs);flex-direction:column}.expense-month-stat span{color:var(--text-secondary);font-size:var(--font-size-xs)}.expense-month-stat strong{color:var(--text-primary);font-size:var(--font-size-sm)}.expense-month-stat.spending strong{color:var(--negative-color)}.expense-month-stat.positive strong{color:var(--positive-color)}.expense-month-top{border-top:var(--border-width)solid var(--border-color);padding-top:var(--spacing-sm)}.expense-month-top ul{list-style:none;margin:var(--gap-xs)0 0;padding:0}.expense-month-top li{color:var(--text-secondary);display:flex;font-size:var(--font-size-xs);margin-bottom:var(--gap-xs);justify-content:space-between}.expense-month-top li span:last-child{color:var(--text-primary);font-weight:var(--font-weight-semibold)}.expense-month-top-label{color:var(--text-secondary);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold)}.expense-month-detail{display:flex;gap:var(--spacing-md);animation:fadeIn var(--transition-normal);flex-direction:column;flex:1;min-height:0}.expense-month-detail-title{margin:0}.expense-month-detail-header{display:flex;margin-bottom:var(--spacing-sm);justify-content:space-between;align-items: center}.expense-month-detail-header h3{margin:0}.expense-month-sort{display:flex;align-items: center;gap:var(--gap-sm)}.expense-month-sort span{color:var(--text-secondary);font-size:var(--font-size-xs)}.sort-toggle{border:var(--border-width)solid var(--border-color);color:var(--text-secondary);font-size:var(--font-size-xs);padding:var(--padding-toggle-y)var(--padding-toggle-x);background-color:#0000}.sort-toggle.active{background-color:var(--bg-primary);border-color:var(--text-secondary);color:var(--text-primary)}.sort-toggle:hover{background-color:var(--bg-primary)}@media (max-width:800px){.expense-month-stats{grid-template-columns:1fr}.expense-month-detail-header{align-items: flex-start;gap:var(--gap-sm);flex-direction:column}}.uploader-container{display:flex;height:var(--layout-uploader-height);justify-content:center;align-items: center}.upload-box{border:var(--border-width-dashed)dashed var(--border-color);padding:var(--spacing-lg)var(--padding-upload-x);border-radius:var(--border-radius);background-color:var(--bg-secondary);cursor:pointer;font-size:var(--font-size-2xl);color:var(--accent-color);transition:all var(--transition-fast)}.upload-box:hover{border-color:var(--accent-color);background-color:var(--accent-color-alpha-10)}.transaction-table-wrapper{display:flex;height:var(--layout-table-height);flex-direction:column}.transaction-table-wrapper h2{margin:0 0 var(--spacing-md)0}.table-scroll{overflow-y:auto;background-color:var(--bg-secondary);border-radius:var(--border-radius);padding:var(--spacing-md);flex:1}.distribution-section{background:var(--bg-secondary);border-radius:var(--border-radius);padding:var(--spacing-md);display:flex;gap:var(--spacing-sm);flex-direction:column}.pie-wrapper{height:var(--chart-height-pie);display:flex;justify-content:center;align-items: center}.pie-slice-label-text,.recharts-pie-label-text{fill:var(--text-secondary);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium)}.analysis-container{display:flex;gap:var(--spacing-md);height:var(--layout-analysis-height);flex-direction:column}.back-btn{border:var(--border-width)solid var(--border-color);background:0 0;align-self: flex-start}.back-btn:hover{background:var(--bg-secondary)}.analysis-header{display:flex;justify-content:space-between;align-items: center;gap:var(--spacing-md)}.analysis-header select{padding:var(--spacing-sm)var(--gap-md);background:var(--bg-secondary);color:var(--text-primary);border:var(--border-width)solid var(--border-color);border-radius:var(--border-radius)}.analysis-title{display:flex;flex-wrap:wrap;align-items: center;gap:1vw}.analysis-title h2{margin:0}.analysis-title .back-btn{padding:.6vh 1vw}.analysis-title .xirr{background:var(--bg-secondary);border:.1vh solid var(--border-color);border-radius:var(--border-radius);padding:.5vh .8vw;font-size:.85rem;font-weight:700}.analysis-title .xirr.pos{color:var(--positive-color)}.analysis-title .xirr.neg{color:var(--negative-color)}.analysis-title .cash-balance{background:var(--bg-secondary);border:.1vh solid var(--border-color);border-radius:var(--border-radius);padding:.5vh .8vw;font-size:.85rem;font-weight:700}.analysis-title .cash-balance.pos{color:var(--positive-color)}.analysis-title .cash-balance.neg{color:var(--negative-color)}.positions-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--grid-min-col-width),1fr));gap:var(--gap-lg);padding-bottom:var(--spacing-lg)}.position-card{background:var(--bg-secondary);padding:var(--spacing-md);border-radius:var(--border-radius);cursor:pointer;border:var(--border-width)solid transparent;transition:all var(--transition-fast)}.position-card:hover{border-color:var(--accent-color);transform:translateY(calc(-1*var(--gap-xs)))}.position-card .card-top{display:flex;font-size:var(--font-size-sm);color:var(--text-secondary);justify-content:space-between}.position-card .name{margin:var(--spacing-sm)0;font-size:var(--font-size-lg);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.position-card .card-metrics{display:flex;gap:var(--gap-xs);font-size:var(--font-size-base);flex-direction:column}.position-card .card-metrics .total{color:var(--accent-color);margin-top:var(--gap-xs);font-weight:700}.position-card .card-yearly-metrics{margin-top:var(--spacing-sm);padding-top:var(--spacing-sm);border-top:var(--border-width)solid var(--border-color);display:flex;gap:var(--gap-xs);font-size:var(--font-size-sm);flex-direction:column}.position-card .card-yearly-metrics .pos{color:var(--positive-color)}.position-card .card-yearly-metrics .neg{color:var(--negative-color)}.position-card .card-yearly-metrics .avg-roi{font-weight:var(--font-weight-semibold)}.position-card .card-yearly-metrics .roi-badges{display:flex;gap:var(--gap-sm);margin-top:var(--gap-xs);flex-wrap:wrap}.position-card .card-yearly-metrics .roi-badges .roi-badge{background:var(--bg-primary);padding:var(--padding-badge-sm-y)var(--padding-badge-sm-x);border-radius:var(--border-radius-sm);font-size:var(--font-size-xs)}.global-chart-section{background:var(--bg-secondary);border-radius:var(--border-radius);padding:var(--spacing-md);display:flex;gap:var(--spacing-sm);flex-direction:column}.chart-header{display:flex;justify-content:space-between;align-items: center}.chart-header h3{margin:0}.chart-toggles{display:flex;gap:var(--gap-md)}.chart-toggles button{border:var(--border-width)solid var(--border-color);color:var(--text-secondary);font-size:var(--font-size-sm);padding:var(--padding-toggle-y)var(--padding-toggle-x);background-color:#0000}.chart-toggles button.active{background-color:var(--accent-color);color:var(--text-primary);border-color:var(--accent-color)}.chart-toggles button:hover:not(.active){background-color:var(--bg-secondary)}.chart-wrapper{height:var(--chart-height-sm);display:flex;justify-content:center;align-items: center}.yearly-roi-section{background:var(--bg-secondary);border-radius:var(--border-radius);padding:var(--spacing-md);display:flex;gap:var(--spacing-sm);margin-bottom:var(--spacing-lg);flex-direction:column}.yearly-roi-section .roi-note{font-size:var(--font-size-md);color:var(--text-secondary);margin:0;font-style:italic}.yearly-roi-section table .pos{color:var(--positive-color)}.yearly-roi-section table .neg{color:var(--negative-color)}.income-container{display:flex;gap:var(--spacing-md);animation:fadeIn var(--transition-normal);flex-direction:column}.income-header{display:flex;justify-content:space-between;align-items: flex-start;gap:var(--spacing-md);border-bottom:var(--border-width)solid var(--border-color);padding-bottom:var(--spacing-sm)}.income-header h2{margin:0}.income-summary{display:grid;grid-template-columns:repeat(3,minmax(var(--income-summary-min-col),1fr));gap:var(--gap-md);width:min(var(--income-summary-width),var(--income-summary-max-width))}.income-metric{background:var(--bg-secondary);border:var(--border-width)solid var(--border-color);border-radius:var(--border-radius);padding:var(--spacing-sm)var(--gap-md);display:flex;gap:var(--gap-xs);flex-direction:column}.income-metric span{color:var(--text-secondary);font-size:var(--font-size-sm)}.income-metric strong{color:var(--text-primary);font-size:var(--font-size-root)}.income-metric.dividend strong{color:var(--positive-color)}.income-metric.interest strong{color:var(--info-color)}.income-chart-section{background:var(--bg-secondary);border-radius:var(--border-radius);padding:var(--spacing-md);display:flex;gap:var(--spacing-sm);flex-direction:column}.income-chart-section h3{margin:0}.income-chart-header{display:flex;justify-content:space-between;align-items: flex-start;gap:var(--spacing-md);margin-bottom:var(--spacing-sm)}.income-chart-controls{display:flex;justify-content:flex-end;align-items: flex-end;gap:var(--gap-md);flex-wrap:wrap}.income-series-controls{display:flex;gap:.7vw}.income-control{display:flex;gap:var(--gap-xs);color:var(--text-secondary);font-size:var(--font-size-xs);flex-direction:column}.income-control select{background:var(--bg-primary);border:var(--border-width)solid var(--border-color);border-radius:var(--border-radius);color:var(--text-primary);padding:var(--padding-toggle-y)var(--padding-toggle-x);font-size:var(--font-size-md);min-height:2rem}.income-control input{background:var(--bg-primary);border:var(--border-width)solid var(--border-color);border-radius:var(--border-radius);color:var(--text-primary);padding:var(--padding-toggle-y)var(--padding-toggle-x);font-size:var(--font-size-md);min-height:2rem}.series-toggle{border:var(--border-width)solid var(--border-color);color:var(--text-secondary);font-size:var(--font-size-md);padding:var(--padding-toggle-y)var(--gap-md);background-color:#0000}.series-toggle.active{color:var(--text-primary)}.series-toggle.dividend.active{background-color:var(--positive-color);border-color:var(--positive-color)}.series-toggle.interest.active{background-color:var(--info-color-hover);border-color:var(--info-color-hover)}.series-toggle:hover{background-color:var(--bg-primary)}.range-reset{border:var(--border-width)solid var(--border-color);color:var(--text-secondary);font-size:var(--font-size-md);padding:var(--padding-toggle-y)var(--gap-md);background-color:#0000;min-height:2rem}.range-reset:hover{background-color:var(--bg-primary)}.income-chart-wrapper{height:var(--chart-height-income);min-height:var(--chart-height-sm);width:100%}.income-empty{color:var(--text-secondary);margin:0}.income-tooltip{background-color:var(--bg-secondary);border:var(--border-width)solid var(--border-color);border-radius:var(--border-radius);padding:var(--spacing-sm)var(--gap-md);box-shadow:var(--shadow-md)}.income-tooltip .tooltip-label{color:var(--text-secondary);font-size:var(--font-size-sm);margin-bottom:.6vh}.income-tooltip .tooltip-entry{color:var(--text-primary);font-size:var(--font-size-base);white-space:nowrap}.income-tooltip .tooltip-total{color:var(--text-primary);font-size:var(--font-size-base);white-space:nowrap}.income-tooltip .tooltip-entry{margin-bottom:.4vh}.income-tooltip .tooltip-dot{margin-right:var(--gap-sm)}.income-tooltip .tooltip-total{border-top:var(--border-width)solid var(--border-color);font-weight:var(--font-weight-semibold);margin-top:.6vh;padding-top:.6vh}@media (max-width:800px){.income-header{flex-direction:column}.income-summary{grid-template-columns:1fr;width:100%}.income-chart-header{flex-direction:column;align-items: flex-start}.income-chart-controls{justify-content:flex-start}}.detail-container{display:flex;gap:var(--spacing-md);flex-direction:column;height:100%}.back-btn{border:var(--border-width)solid var(--border-color);background:0 0;align-self: flex-start}.back-btn:hover{background:var(--bg-secondary)}.detail-header{display:flex;border-bottom:var(--border-width)solid var(--border-color);padding-bottom:var(--spacing-sm);justify-content:space-between;align-items: center}.detail-header h2{margin:0}.detail-header .stats{color:var(--accent-color);font-weight:700}.chart-section{height:var(--chart-height-md);background:var(--bg-secondary);border-radius:var(--border-radius);padding:var(--spacing-md);display:flex;justify-content:center;align-items: center}.roi-section{overflow-y:auto;flex:1}.roi-section h3{margin-top:0}.roi-section .pos{color:var(--positive-color)}.roi-section .neg{color:var(--negative-color)}.app-container{padding:var(--spacing-md)var(--padding-page-x);display:flex;box-sizing:border-box;gap:var(--spacing-sm);flex-direction:column;height:100vh}.market-data-controls{display:flex;background:var(--bg-secondary);border:.1vh solid var(--border-color);border-radius:var(--border-radius);color:var(--text-secondary);align-self: flex-end;align-items: center;gap:1vw;padding:.7vh 1vw;font-size:.85rem}.market-data-toggle{display:flex;cursor:pointer;align-items: center;gap:.6vw}.market-data-toggle input{accent-color:var(--positive-color);width:1rem;height:1rem}.mode-online{color:var(--positive-color);font-weight:600}.mode-offline{color:var(--warning-color);font-weight:600}.view-wrapper{display:flex;gap:var(--spacing-md);animation:fadeIn var(--transition-normal);flex-direction:column}.view-wrapper .action-buttons{display:flex;gap:var(--gap-md)}.view-wrapper .btn-secondary{background-color:var(--secondary-accent)}.view-wrapper .btn-secondary:hover{background-color:var(--secondary-accent-hover)}.view-wrapper .btn-income{background-color:var(--positive-color)}.view-wrapper .btn-income:hover{background-color:var(--positive-hover)}.view-wrapper .back-btn{width:-moz-fit-content;width:fit-content}@keyframes fadeIn{0%{opacity:0;transform:translateY(1vh)}to{opacity:1;transform:translateY(0)}}.recharts-default-tooltip{box-shadow:var(--shadow-md);background-color:var(--bg-secondary)!important;border-radius:var(--border-radius)!important;border:none!important}.recharts-tooltip-item{color:var(--text-primary)!important}.custom-tooltip{background-color:var(--bg-secondary);padding:var(--padding-tooltip);border-radius:var(--border-radius);box-shadow:var(--shadow-md)}.custom-tooltip .tooltip-label{margin:var(--margin-tooltip-label);color:var(--text-secondary);font-size:var(--font-size-sm)}.custom-tooltip .tooltip-entry{color:var(--text-primary);margin:var(--margin-tooltip-entry);font-size:var(--font-size-base)}.custom-tooltip .tooltip-entry .tooltip-dot{margin:var(--margin-tooltip-dot)}@media (max-width:800px){.market-data-controls{justify-content:space-between;align-self:stretch}}:root{--bg-primary:#0f172a;--bg-secondary:#1e293b;--text-primary:#f8fafc;--text-secondary:#94a3b8;--accent-color:#3b82f6;--accent-hover:#2563eb;--secondary-accent:#8b5cf6;--secondary-accent-hover:#7c3aed;--positive-color:#22c55e;--positive-hover:#16a34a;--negative-color:#ef4444;--warning-color:#f59e0b;--info-color:#38bdf8;--info-color-hover:#0284c7;--border-color:#334155;--color-white:#fff;--chart-fallback-color:#8884d8;--accent-color-alpha-10:#3b82f61a;--chart-color-1:#3b82f6;--chart-color-2:#8b5cf6;--chart-color-3:#10b981;--chart-color-4:#f59e0b;--chart-color-5:#ef4444;--chart-color-6:#ec4899;--chart-color-7:#06b6d4;--chart-color-8:#84cc16;--chart-color-9:#f43f5e;--chart-color-10:#6366f1;--font-size-xs:.75rem;--font-size-sm:.8rem;--font-size-md:.85rem;--font-size-base:.9rem;--font-size-lg:1.1rem;--font-size-xl:1.2rem;--font-size-root:1rem;--font-size-2xl:1.5rem;--font-weight-medium:500;--font-weight-semibold:600;--border-radius:.5vw;--border-radius-sm:.3vw;--border-radius-badge:1vw;--spacing-sm:1vh;--spacing-md:2vh;--spacing-lg:4vh;--gap-xs:.5vh;--gap-sm:.5vw;--gap-md:1vw;--gap-lg:2vw;--padding-page-x:4vw;--padding-button-x:1.5vw;--padding-table-x:1vw;--padding-upload-x:6vw;--padding-badge-y:.3vh;--padding-badge-x:.6vw;--padding-toggle-y:.5vh;--padding-toggle-x:1vw;--padding-badge-sm-y:.2vh;--padding-badge-sm-x:.5vw;--padding-tooltip:.6rem;--margin-tooltip-label:0 0 .3rem 0;--margin-tooltip-entry:0 0 .15rem 0;--margin-tooltip-dot:0 .5rem 0 0;--border-width:.1vh;--border-width-dashed:.2vh;--layout-uploader-height:80vh;--layout-table-height:85vh;--layout-analysis-height:90vh;--chart-height-sm:30vh;--chart-height-md:40vh;--chart-height-pie:45vh;--chart-height-income:42vh;--income-summary-min-col:9rem;--expense-month-card-min:16rem;--income-summary-max-width:48rem;--income-summary-width:54vw;--breakpoint-md:800px;--grid-min-col-width:20vw;--logo-size:2vw;--shadow-md:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--transition-fast:.2s ease;--transition-normal:.3s ease}body{background-color:var(--bg-primary);color:var(--text-primary);overflow-x:hidden;width:100vw;height:100vh;margin:0;padding:0;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif}button{background-color:var(--accent-color);color:var(--text-primary);padding:var(--spacing-sm)var(--padding-button-x);border-radius:var(--border-radius);cursor:pointer;font-size:var(--font-size-root);transition:background-color var(--transition-fast);border:none}button:hover{background-color:var(--accent-hover)}table{border-collapse:collapse;margin-top:var(--spacing-md);width:100%}table th{text-align:left;padding:var(--spacing-sm)var(--padding-table-x);border-bottom:var(--border-width)solid var(--border-color)}table td{text-align:left;padding:var(--spacing-sm)var(--padding-table-x);border-bottom:var(--border-width)solid var(--border-color)}table th{color:var(--text-secondary);font-weight:var(--font-weight-semibold)}
