:root{--background:#f5f3ef;--surface:#fffefa;--surface-strong:#fff;--text:#1f2933;--muted:#68727d;--line:#dfddd7;--primary:#1f7a6d;--primary-dark:#12594f;--accent:#c25f2d;--danger:#b64040;--shadow:0 18px 42px #302b231f}*{box-sizing:border-box}html{background:var(--background)}body{color:var(--text);background:linear-gradient(180deg, #1f7a6d17, transparent 240px), var(--background);margin:0;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit}button{cursor:pointer}.app-shell{min-height:100dvh;padding-bottom:calc(84px + env(safe-area-inset-bottom))}.app-main{width:min(100%,760px);margin:0 auto;padding:16px 16px 0}.amount-visibility-toggle{border:1px solid var(--line);background:var(--surface);color:var(--muted);border-radius:999px;align-items:center;gap:6px;padding:6px 10px;font-size:.75rem;font-weight:800;line-height:1;display:inline-flex}.amount-visibility-toggle[aria-pressed=true]{border-color:color-mix(in srgb, var(--primary) 35%, var(--line));background:color-mix(in srgb, var(--primary) 10%, var(--surface));color:var(--primary)}.amount-visibility-toggle svg{fill:currentColor;width:16px;height:16px}.auth-page{place-items:center;min-height:100dvh;padding:24px 16px;display:grid}.auth-panel{border:1px solid var(--line);width:min(100%,420px);box-shadow:var(--shadow);background:#fffefaf0;border-radius:8px;gap:18px;padding:24px;display:grid}.auth-panel h1,.auth-panel p{margin:0}.auth-panel p{color:var(--muted);font-size:.95rem;font-weight:700;line-height:1.55}.auth-panel strong{color:var(--text)}.auth-panel form{margin:0}.page-header{padding:12px 2px 16px}.page-title-row{justify-content:space-between;align-items:stretch;gap:12px;display:flex}.page-title-copy{flex-direction:column;justify-content:space-between;min-width:0;display:flex}.page-title-actions{flex-direction:column;flex:none;justify-content:center;align-items:flex-end;display:flex}.page-title-actions.with-trailing{justify-content:space-between}.data-refresh-time{color:var(--muted);white-space:nowrap;flex:none;font-size:.74rem;font-weight:800;line-height:1.5}.refresh-date{display:none}.eyebrow{color:var(--primary);letter-spacing:0;text-transform:uppercase;margin:0 0 6px;font-size:.78rem;font-weight:800}h1,h2,p{margin-top:0}h1{margin-bottom:0;font-size:2rem;line-height:1.15}h2{margin-bottom:0;font-size:1.05rem}.hero-panel,.summary-card,.section,.entry-item,.category-pill{border:1px solid var(--line);box-shadow:var(--shadow);background:#fffefaeb}.hero-panel{border-radius:8px;flex-direction:column;justify-content:space-between;gap:24px;min-height:168px;padding:24px;display:flex}.hero-panel.compact{min-height:132px}.metric-label{color:var(--muted);margin-bottom:10px;font-size:.9rem;font-weight:700}.net-worth{font-size:clamp(2rem,9vw,3.8rem);line-height:1;display:block}.change{width:fit-content;color:var(--muted);background:#ede8df;border-radius:999px;margin-bottom:0;padding:8px 12px;font-size:.9rem;font-weight:800}.change.positive{color:var(--primary-dark);background:#dceee9}.change.negative{color:var(--danger);background:#f2dfdc}.summary-grid{grid-template-columns:1fr 1fr;gap:10px;margin-top:12px;display:grid}.summary-card{border-radius:8px;padding:16px}.summary-card span,.category-pill span{color:var(--muted);margin-bottom:8px;font-size:.82rem;font-weight:700;display:block}.summary-card strong{font-size:1.12rem}.summary-value-with-ratio{flex-wrap:wrap;align-items:baseline;gap:6px;display:flex}.summary-value-with-ratio small{color:var(--muted);font-size:.78rem;font-weight:850}.quick-add,.primary-button,.secondary-button{border:0;border-radius:8px;justify-content:center;align-items:center;min-height:52px;font-weight:850;display:flex}.quick-add,.primary-button{background:var(--primary);color:#fff}.quick-add{appearance:none;cursor:pointer;width:100%;font:inherit;margin:14px 0;font-weight:850;text-decoration:none}.secondary-button{border:1px solid var(--line);background:var(--surface-strong);color:var(--text)}.section{border-radius:8px;margin-top:14px;padding:16px}.section-heading{justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;display:flex}.section-heading a{color:var(--primary);font-size:.9rem;font-weight:800}.section-heading-button{color:var(--primary);background:0 0;border:0;padding:0;font-size:.9rem;font-weight:800}.section-heading-title{align-items:center;gap:8px;min-width:0;display:inline-flex}.section-heading-actions{flex:none;align-items:center;gap:10px;display:inline-flex}.filter-icon-button{border:1px solid var(--line);background:var(--surface-strong);width:30px;height:30px;color:var(--muted);border-radius:8px;place-items:center;display:grid}.filter-icon-button.active{color:var(--primary-dark);background:#eef8f4;border-color:#1f7a6d57}.back-link{width:fit-content;color:var(--primary);margin-bottom:10px;font-size:.86rem;font-weight:850;display:inline-flex}.back-link:before{content:"‹";margin-right:4px}.account-card{border:1px solid var(--line);background:var(--surface-strong);border-radius:8px;justify-content:space-between;align-items:center;gap:12px;padding:12px;display:flex}.account-identity{gap:4px;min-width:0;display:grid}.account-identity span{color:var(--muted);font-size:.78rem;font-weight:800}.account-identity strong{text-overflow:ellipsis;white-space:nowrap;font-size:.94rem;overflow:hidden}.account-card form{flex:none;margin:0}.goal-summary-card{border:1px solid var(--line);background:var(--surface-strong);border-radius:8px;gap:6px;padding:14px;display:grid}.goal-summary-card span{color:var(--muted);font-size:.82rem;font-weight:800}.goal-summary-card strong{color:var(--primary-dark);font-size:1.12rem;line-height:1.15}.goal-setting-list{gap:10px;display:grid}.goal-setting-main{justify-content:space-between;align-items:center;gap:12px;display:flex}.goal-setting-main>div:first-child{gap:6px;min-width:0;display:grid}.goal-setting-main input{border:1px solid var(--line);background:var(--surface);width:min(100%,180px);min-height:44px;color:var(--text);font:inherit;border-radius:8px;outline:none;padding:10px 12px;font-weight:850}.goal-setting-main input:focus{border-color:var(--primary);box-shadow:0 0 0 3px #1f7a6d24}.goal-setting-actions{flex:none;gap:8px;display:flex}.compact-button{white-space:nowrap;min-height:38px;padding:0 14px;font-size:.82rem}.icon-edit-button{width:34px;height:34px;color:var(--primary-dark);background:0 0;border:0;border-radius:8px;flex:none;place-items:center;font-size:1.15rem;font-weight:900;display:grid}.logout-button{min-height:38px;color:var(--danger);background:#fff7f6;border:1px solid #b6404047;border-radius:8px;padding:0 14px;font-size:.86rem;font-weight:850}.settings-menu{gap:10px;display:grid}.settings-menu-item{border:1px solid var(--line);background:var(--surface-strong);border-radius:8px;justify-content:space-between;align-items:center;gap:12px;padding:14px 12px;display:flex}.settings-menu-item div{gap:4px;min-width:0;display:grid}.settings-menu-item strong{font-size:.96rem}.settings-menu-item span{color:var(--muted);font-size:.84rem;font-weight:750}.settings-menu-item>span{color:var(--primary);font-size:1.35rem;font-weight:700}.entry-list{gap:10px;display:grid}.entry-item{box-shadow:none;border-radius:8px;padding:14px}.entry-main{justify-content:space-between;align-items:flex-start;gap:14px;display:flex}.entry-title{margin-bottom:4px;font-weight:850}.entry-meta,.entry-note,.empty-state{color:var(--muted);margin-bottom:0;font-size:.9rem}.entry-note{margin-top:10px}.amount{color:var(--primary-dark);text-align:right;flex:none}.amount.debt{color:var(--danger)}.entry-actions{gap:8px;margin-top:12px;display:flex}.entry-actions button{border:1px solid var(--line);background:var(--surface-strong);min-height:38px;color:var(--text);border-radius:8px;flex:1;font-weight:800}.category-strip{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.category-pill{box-shadow:none;border-radius:8px;padding:14px}.category-pill strong{overflow-wrap:anywhere;display:block}.donut-section{margin-top:0;padding:18px}.donut-layout{justify-items:center;gap:18px;display:grid}.donut-chart{aspect-ratio:1;border-radius:999px;place-items:center;width:min(72vw,280px);display:grid;position:relative;box-shadow:inset 0 0 0 1px #1f29330f}.donut-chart:after{border-radius:inherit;background:var(--surface-strong);box-shadow:inset 0 0 0 1px var(--line);content:"";position:absolute;inset:15%}.donut-center{z-index:1;text-align:center;place-items:center;gap:8px;width:68%;display:grid;position:relative}.donut-center strong{overflow-wrap:anywhere;font-size:clamp(.95rem,4.4vw,1.45rem);line-height:1.1}.donut-change{max-width:100%;font-size:clamp(.66rem,2.7vw,.78rem);font-weight:850;line-height:1.25;display:block}.donut-change.positive{color:var(--primary-dark)}.donut-change.negative{color:var(--danger)}.donut-legend{gap:10px;width:100%;display:grid}.legend-row{grid-template-columns:14px 1fr;align-items:center;gap:10px;display:grid}.legend-swatch{border-radius:999px;width:12px;height:12px}.legend-row div{justify-content:space-between;align-items:center;gap:10px;min-width:0;display:flex}.legend-row strong{font-size:.92rem}.legend-row span:last-child{color:var(--muted);text-align:right;font-size:.84rem;font-weight:750}.monthly-chart-section{overflow:hidden}.dashboard-flow-grid{min-width:0}.chart-period-toggle{background:#e9e4dc;border-radius:7px;flex:none;grid-template-columns:repeat(2,auto);gap:3px;padding:3px;display:grid}.chart-period-toggle button{min-height:28px;color:var(--muted);background:0 0;border:0;border-radius:6px;padding:0 8px;font-size:.75rem;font-weight:850}.chart-period-toggle button.selected{background:var(--surface-strong);color:var(--primary-dark);box-shadow:0 5px 12px #302b2314}.monthly-line-chart{min-height:158px;padding:4px 0 14px;position:relative}.line-chart-svg{width:100%;min-height:138px;display:block;overflow:visible}.line-chart-grid{stroke:var(--line);stroke-width:1px}.line-chart-target{stroke:var(--danger);stroke-dasharray:5 5;stroke-linecap:round;stroke-width:2px}.line-chart-path{fill:none;stroke:var(--primary);stroke-linecap:round;stroke-linejoin:round;stroke-width:3px}.line-chart-path.cash{stroke:#4f6f9f;stroke-width:3px}.line-chart-path.pension{stroke:#7b5ea7;stroke-width:3px}.line-chart-path.cash-flow-income{stroke:#1f8a5b;stroke-width:3px}.line-chart-path.cash-flow-expense{stroke:#c25f2d;stroke-width:3px}.line-chart-path.expense-fixed{stroke:#8a5a2b;stroke-width:3px}.line-chart-path.expense-variable{stroke:#7b5ea7;stroke-width:3px}.line-chart-path.pure-return{stroke:#8a5a2b;stroke-width:3px}.line-chart-path.target-asset{stroke:var(--danger);stroke-dasharray:6 5;stroke-width:2.5px}.line-chart-dot{fill:var(--surface-strong);stroke:var(--primary);stroke-width:3px}.line-chart-dot.cash{stroke:#4f6f9f}.line-chart-dot.pension{stroke:#7b5ea7}.line-chart-dot.cash-flow-income{stroke:#1f8a5b}.line-chart-dot.cash-flow-expense{stroke:#c25f2d}.line-chart-dot.expense-fixed{stroke:#8a5a2b}.line-chart-dot.expense-variable{stroke:#7b5ea7}.line-chart-dot.pure-return{stroke:#8a5a2b;stroke-width:2.5px}.line-chart-dot.target-asset{fill:var(--surface);stroke:var(--danger);stroke-width:2.5px}.line-chart-dot.active{fill:var(--primary)}.line-chart-dot.cash.active{fill:#4f6f9f}.line-chart-dot.pension.active{fill:#7b5ea7}.line-chart-dot.cash-flow-income.active{fill:#1f8a5b}.line-chart-dot.cash-flow-expense.active{fill:#c25f2d}.line-chart-dot.expense-fixed.active{fill:#8a5a2b}.line-chart-dot.expense-variable.active{fill:#7b5ea7}.cash-flow-legend{color:var(--muted);align-items:center;gap:14px;margin:-2px 0 6px;font-size:.78rem;font-weight:850;display:flex}.cash-flow-legend span{align-items:center;gap:6px;display:inline-flex}.cash-flow-legend i{border-radius:999px;width:18px;height:3px}.cash-flow-legend .income{background:#1f8a5b}.cash-flow-legend .expense{background:#c25f2d}.cash-flow-legend .fixed{background:#8a5a2b}.cash-flow-legend .variable{background:#7b5ea7}.expense-detail-panel{gap:10px}.expense-detail-group{gap:8px;display:grid}.expense-detail-summary{border:1px solid var(--line);background:var(--surface-strong);min-height:46px;color:var(--text);border-radius:8px;justify-content:space-between;align-items:center;gap:12px;padding:10px 12px;display:flex}.expense-detail-title{align-items:center;gap:6px;min-width:0;display:inline-flex}.expense-detail-title>span{color:var(--muted);font-size:.82rem;font-weight:850}.expense-detail-summary>strong{font-size:.9rem}.expense-detail-toggle{width:26px;height:26px;color:var(--primary);background:#eef5f3;border:0;border-radius:999px;place-items:center;padding:0;display:grid}.expense-detail-toggle span{color:currentColor;font-size:1.3rem;font-weight:900;line-height:1;transition:transform .16s;display:block;transform:translate(1px)}.expense-detail-toggle.expanded span{transform:rotate(90deg)translate(1px)}.expense-detail-toggle:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.expense-detail-toggle:hover{background:#dceee9}.expense-detail-toggle:disabled{cursor:not-allowed;opacity:.35}.expense-detail-toggle:disabled:hover{background:#eef5f3}.expense-detail-items{gap:6px;padding:0 2px 2px;display:grid}.expense-detail-item{border-bottom:1px solid #dfddd7b3;grid-template-columns:1fr auto auto;align-items:center;gap:10px;padding:7px 4px;display:grid}.expense-detail-item span{color:var(--muted);font-size:.82rem;font-weight:800}.expense-detail-item strong{font-size:.86rem}.expense-detail-item small{min-width:42px;color:var(--muted);text-align:right;font-size:.76rem;font-weight:850}.line-chart-dot.pure-return.active{fill:#8a5a2b}.line-hit-area{position:absolute;inset:4px 0 14px}.line-point-button{background:0 0;border:0;border-radius:999px;width:42px;height:42px;position:absolute;transform:translate(-50%,-50%)}.line-month-labels{color:var(--muted);font-size:.76rem;font-weight:850;position:absolute;bottom:0;left:0;right:0}.line-month-labels span{white-space:nowrap;position:absolute;bottom:0;transform:translate(-50%)}.line-y-axis-labels{color:var(--muted);pointer-events:none;font-size:.76rem;font-weight:850;position:absolute;inset:4px 0 14px}.line-y-axis-labels span{white-space:nowrap;position:absolute;left:0;transform:translateY(-50%)}.line-y-axis-labels .target-label{color:var(--danger)}.monthly-detail{border-top:1px solid var(--line);gap:12px;margin-top:8px;padding-top:14px;display:grid}.monthly-detail-heading,.monthly-detail-row{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.monthly-detail-heading span{color:var(--muted);font-weight:850}.monthly-detail-heading strong{text-align:right;gap:2px;font-size:1.05rem;display:grid}.monthly-detail-heading strong small{font-size:.82rem;font-weight:850;display:block}.monthly-detail-list{grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:10px;display:grid}.monthly-flow-summary{border-top:1px solid var(--line);gap:8px;padding-top:12px;display:grid}.monthly-flow-summary div{justify-content:space-between;align-items:center;gap:12px;display:flex}.monthly-flow-summary span{color:var(--muted);font-size:.84rem;font-weight:850}.monthly-flow-summary strong{text-align:right;white-space:nowrap}.monthly-detail-row{border:1px solid var(--line);background:var(--surface-strong);border-radius:8px;padding:12px}.monthly-detail-row div{gap:4px;min-width:0;display:grid}.monthly-detail-row .monthly-detail-title{align-items:baseline;gap:6px;display:flex}.monthly-detail-row strong{overflow-wrap:anywhere}.monthly-detail-row span,.detail-amount span{color:var(--muted);font-size:.8rem;font-weight:750}.detail-amount{color:var(--primary-dark);text-align:right;white-space:nowrap;gap:4px;margin:0;font-weight:900;display:grid}.detail-amount.debt{color:var(--danger)}.monthly-change.positive{color:#1f8a5b}.monthly-change.negative{color:#c25f2d}.cash-section{gap:18px;margin-top:0;display:grid}.asset-subtabs{margin:0 0 14px}.cash-donut-wrap{justify-items:center;display:grid}.cash-donut{aspect-ratio:1;border-radius:999px;place-items:center;width:min(72vw,280px);display:grid;position:relative;box-shadow:inset 0 0 0 1px #1f29330f}.cash-donut:after{border-radius:inherit;background:var(--surface-strong);box-shadow:inset 0 0 0 1px var(--line);content:"";position:absolute;inset:15%}.cash-donut-center{z-index:1;text-align:center;place-items:center;gap:8px;width:68%;display:grid;position:relative}.cash-donut-center strong{overflow-wrap:anywhere;font-size:clamp(.95rem,4.4vw,1.45rem);line-height:1.1}.cash-donut-center span{color:var(--muted);font-size:.78rem;font-weight:850}.cash-account-list{grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr));gap:10px;display:grid}.cash-account{border:1px solid var(--line);background:var(--surface-strong);border-radius:8px;grid-template-columns:14px minmax(0,1fr) auto;align-items:center;gap:10px;padding:14px;display:grid}.cash-account-side{text-align:right;justify-items:end;gap:4px;min-width:0;display:grid}.cash-account-name{overflow-wrap:anywhere}.pension-account-label{align-items:baseline;gap:6px;min-width:0;display:flex}.pension-account-label .cash-account-name{min-width:0}.pension-account-label .cash-account-meta{white-space:nowrap;flex:none}.cash-account-meta,.cash-change{color:var(--muted);font-size:.84rem;font-weight:800}.deposit-meta{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.deposit-meta span{color:var(--muted);font-size:.76rem;font-weight:850}.bank-balance-list{gap:9px;display:grid}.cash-balance-modal .modal-scroll-body{min-height:0;overflow:hidden}.cash-balance-modal .cash-balance-entry-form{flex-direction:column;height:100%;min-height:0;display:flex}.cash-balance-entry-form .bank-balance-list{overscroll-behavior:contain;scrollbar-gutter:stable;-webkit-overflow-scrolling:touch;flex:auto;min-height:0;max-height:min(42vh,360px);padding-right:3px;overflow-y:auto}.cash-balance-modal .cash-balance-form-bottom{border-top:1px solid var(--line);background:var(--surface);flex:none;margin-top:auto;padding-top:12px}.bank-balance-row{border:1px solid var(--line);background:var(--surface-strong);border-radius:8px;grid-template-columns:minmax(0,1fr) minmax(120px,42%);align-items:center;gap:10px;padding:10px;display:grid}.bank-balance-label{gap:3px;min-width:0;display:grid}.bank-balance-label strong{overflow-wrap:anywhere}.bank-balance-label span{color:var(--muted);font-size:.78rem;font-weight:800}.bank-balance-row input{border:1px solid var(--line);background:var(--background);width:100%;min-height:42px;color:var(--text);text-align:right;border-radius:8px;outline:none;padding:10px 11px}.bank-balance-row input:focus{border-color:var(--primary);box-shadow:0 0 0 3px #1f7a6d24}.cash-account-amount{color:var(--primary-dark);white-space:nowrap;font-size:1rem}.cash-monthly-detail-list{grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr))}.cash-change.positive{color:var(--danger)}.cash-change.negative{color:#2f6fb8}.pension-month-summary{text-align:right;justify-items:end;gap:3px;display:grid}.pension-change{font-size:.78rem;font-weight:850;display:block}.pension-change.positive{color:#1f8a5b}.pension-change.negative{color:#c25f2d}@media (max-width:420px){.cash-account{grid-template-columns:14px minmax(0,1fr)}.cash-account-side{text-align:left;grid-column:2;justify-items:start}.pension-section .cash-account{grid-template-columns:14px minmax(0,1fr) auto;gap:8px;padding:12px}.pension-account-label .cash-account-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.pension-section .cash-account-side{text-align:right;grid-column:auto;justify-items:end}}.stock-section{gap:18px;margin-top:0;display:grid}.stock-tabs{background:#e9e4dc;border-radius:8px;grid-template-columns:1fr 1fr;gap:6px;margin-bottom:-12px;padding:5px;display:grid}.stock-tabs button{min-height:42px;color:var(--muted);background:0 0;border:0;border-radius:7px;font-weight:850}.stock-tabs button.selected{background:var(--surface-strong);color:var(--primary-dark);box-shadow:0 8px 18px #302b231a}.stock-donut-wrap{place-items:center;min-height:min(86vw,330px);display:grid;position:relative}.stock-donut-wrap.with-callouts{min-height:min(86vw,330px);padding-top:56px}.stock-donut{aspect-ratio:1;border-radius:999px;place-items:center;width:min(72vw,280px);display:grid;position:relative;box-shadow:inset 0 0 0 1px #1f29330f}.stock-donut:after{border-radius:inherit;background:var(--surface-strong);box-shadow:inset 0 0 0 1px var(--line);content:"";position:absolute;inset:15%}.stock-donut-center{z-index:1;text-align:center;place-items:center;gap:8px;width:68%;display:grid;position:relative}.stock-donut-center strong{overflow-wrap:anywhere;font-size:clamp(.95rem,4.4vw,1.45rem);line-height:1.1}.stock-donut-center span{color:var(--muted);font-size:.78rem;font-weight:850}.stock-callouts{pointer-events:none;height:100%;position:absolute;top:0;left:0;right:0}.stock-callout-lines{width:100%;height:100%;position:absolute;inset:0;overflow:visible}.stock-callout-lines polyline{fill:none;stroke-linecap:butt;stroke-linejoin:round;stroke-width:1.5px}.stock-callout-label{box-sizing:border-box;border:1px solid var(--line);background:#fffefaf5;border-radius:8px;gap:2px;max-width:104px;padding:6px 7px;display:grid;position:absolute;transform:translateY(-50%);box-shadow:0 8px 18px #302b231a}.stock-callout-label.align-right,.stock-callout-label.align-left{transform:translate(-50%,-50%)}.stock-callout-label.align-left{text-align:right}.stock-callout-label strong{overflow-wrap:anywhere;font-size:.74rem;line-height:1.15}.stock-callout-label span{color:var(--muted);font-size:.68rem;font-weight:800;line-height:1.15}.stock-chart-legend{grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:10px;display:grid}.stock-chart-legend.sector-legend{margin-top:44px}.stock-legend-toggle{width:32px;height:32px;color:var(--primary);background:0 0;border:0;place-items:center;margin:6px auto 0;padding:0;display:grid}.stock-legend-toggle span{color:currentColor;place-items:center;width:1em;height:1em;font-size:1.35rem;font-weight:900;line-height:1;transition:transform .16s;display:grid;transform:rotate(90deg)}.stock-legend-toggle.expanded span{transform:rotate(-90deg)}.stock-legend-toggle:hover{color:var(--primary-dark)}.stock-legend-toggle:focus-visible{outline:2px solid var(--primary);outline-offset:2px}@media (max-width:719px){.stock-legend-toggle{margin:-4px auto -8px}}.stock-holding-pager{cursor:grab;scroll-behavior:smooth;scroll-snap-type:x mandatory;scrollbar-width:none;touch-action:pan-y;-webkit-overflow-scrolling:touch;align-items:flex-start;gap:12px;display:flex;overflow-x:auto}.stock-holding-pager.dragging{cursor:grabbing;scroll-behavior:auto;scroll-snap-type:none;-webkit-user-select:none;user-select:none}.stock-holding-pager::-webkit-scrollbar{display:none}.stock-holding-pager .stock-list{scroll-snap-align:start;flex:0 0 100%}.stock-list{grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),1fr));align-content:start;align-items:start;gap:10px;display:grid}.stock-sector-help{display:inline-flex;position:relative}.stock-sector-help-button{border:1px solid var(--line);background:var(--surface-strong);width:26px;height:26px;color:var(--muted);cursor:pointer;border-radius:50%;place-items:center;font-size:.78rem;font-weight:900;line-height:1;display:inline-grid}.stock-sector-help-button:hover,.stock-sector-help-button:focus-visible,.stock-sector-help[data-open=true] .stock-sector-help-button{border-color:var(--primary);color:var(--primary-dark)}.stock-sector-help-button:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.stock-sector-help-tooltip{z-index:6;border:1px solid var(--line);background:var(--surface-strong);width:min(270px,100vw - 56px);color:var(--ink);opacity:0;pointer-events:none;visibility:hidden;border-radius:8px;padding:10px 12px;font-size:.78rem;font-weight:700;line-height:1.5;transition:opacity .14s,transform .14s,visibility .14s;position:absolute;top:calc(100% + 9px);left:50%;transform:translate(-50%,-4px);box-shadow:0 8px 24px #19161229}.stock-sector-help-tooltip:before{border-top:1px solid var(--line);border-left:1px solid var(--line);background:var(--surface-strong);content:"";width:8px;height:8px;position:absolute;top:-5px;left:50%;transform:translate(-50%)rotate(45deg)}.stock-sector-help:hover .stock-sector-help-tooltip,.stock-sector-help[data-open=true] .stock-sector-help-tooltip{opacity:1;visibility:visible;transform:translate(-50%)}.stock-sector-help:has(.stock-sector-help-button:focus-visible) .stock-sector-help-tooltip{opacity:1;visibility:visible;transform:translate(-50%)}.stock-sector-trend-legend{flex-wrap:wrap;gap:8px 14px;margin-top:14px;display:flex}.stock-sector-trend-legend-item,.stock-sector-trend-detail-list>div>span{align-items:center;gap:7px;font-size:.78rem;font-weight:800;display:inline-flex}.stock-sector-trend-legend-item .legend-swatch,.stock-sector-trend-detail-list .legend-swatch{flex:0 0 10px;width:10px;height:10px}.stock-sector-trend-row{grid-template-columns:42px minmax(0,1fr);align-items:center;gap:8px;display:grid}.stock-sector-trend-rows{gap:3px;display:grid}.stock-sector-trend-row{text-align:left;background:0 0;border:1px solid #0000;border-radius:7px;width:100%;min-height:44px;padding:4px 0}.stock-sector-trend-row.selected{background:#f4faf7;border-color:#1f7a6d3d}.stock-sector-trend-row:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.stock-sector-trend-month{color:var(--muted);text-align:center;white-space:nowrap;font-size:.72rem;font-weight:850}.stock-sector-trend-row.selected .stock-sector-trend-month{color:var(--primary-dark)}.stock-sector-trend-track{background:#ebe8e2;border-radius:5px;min-width:0;height:22px;display:flex;overflow:hidden}.stock-sector-trend-segment{border-right:1px solid #ffffff80;flex:none;height:100%}.stock-sector-trend-empty{width:100%;color:var(--muted);text-align:center;align-self:center;font-size:.7rem;font-weight:750}.stock-sector-trend-detail{border-top:1px solid var(--line);margin-top:16px;padding-top:14px}.stock-sector-trend-detail summary{cursor:pointer;justify-content:space-between;align-items:center;gap:12px;min-height:44px;list-style:none;display:flex}.stock-sector-trend-detail summary::-webkit-details-marker{display:none}.stock-sector-trend-detail summary:focus-visible{outline:2px solid var(--primary);outline-offset:2px;border-radius:6px}.stock-sector-trend-detail summary>strong{font-size:.92rem}.stock-sector-trend-detail summary>span{color:var(--muted);align-items:center;gap:6px;margin-right:8px;font-size:.76rem;font-weight:850;display:inline-flex}.stock-sector-detail-toggle{font-size:1.05rem;line-height:1;transition:transform .16s;transform:rotate(90deg)}.stock-sector-trend-detail[open] .stock-sector-detail-toggle{transform:rotate(-90deg)}.stock-sector-trend-detail-body{padding-top:10px}.stock-sector-trend-detail-list{grid-template-columns:repeat(auto-fit,minmax(min(100%,190px),1fr));gap:9px 18px;display:grid}.stock-sector-trend-detail-list>div{justify-content:space-between;align-items:center;gap:10px;display:flex}.stock-sector-trend-detail-list>div>strong{font-size:.82rem}.stock-page-indicator{justify-content:center;gap:6px;margin-top:12px;display:flex}.stock-page-indicator button{background:#d8d4cd;border:0;border-radius:999px;width:7px;height:7px;padding:0}.stock-page-indicator button.active{background:var(--primary);width:18px}.stock-item{border:1px solid var(--line);background:var(--surface-strong);border-radius:8px;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:12px;padding:14px;display:grid}.stock-item-button{cursor:pointer;transition:border-color .14s,background .14s}.stock-item-button:hover{background:#fbfdfc;border-color:#1f7a6d57}.stock-item-button:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.stock-item-main{grid-template-columns:14px 1fr;align-items:center;gap:10px;min-width:0;display:grid}.stock-item-main div{gap:4px;min-width:0;display:grid}.stock-item-main strong{text-overflow:ellipsis;white-space:nowrap;font-size:clamp(.86rem,3.3vw,1rem);overflow:hidden}.stock-item-main span:last-child{color:var(--muted);font-size:.84rem;font-weight:800}.stock-item-value{text-align:right;justify-items:end;gap:10px;display:grid}.stock-item-value p{color:var(--primary-dark);gap:4px;margin:0;font-weight:900;display:grid}.stock-amount{font-size:1rem;line-height:1.2}.stock-gain{overflow-wrap:anywhere;font-size:.82rem;font-weight:900;line-height:1.2}.stock-gain.positive{color:var(--danger)}.stock-gain.negative{color:#2f6fb0}.stock-item-details{grid-column:1/-1;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:0 0 0 24px;display:grid}@media (max-width:420px){.stock-item-details{margin-left:0}}.stock-item-details div{gap:3px;display:grid}.stock-item-details dt{color:var(--muted);font-size:.75rem;font-weight:800}.stock-item-details dd{margin:0;font-size:.9rem;font-weight:850}@media (max-width:719px){.stock-item-main strong{text-overflow:ellipsis;white-space:nowrap;font-size:clamp(.78rem,.604rem + .882vw,1rem);line-height:1.2;overflow:hidden}.stock-amount{font-size:clamp(.82rem,.675rem + .723vw,1rem)}}.stock-fields{background:#f4faf7;border:1px solid #1f7a6d38;border-radius:8px;gap:14px;padding:14px;display:grid}.field-grid{grid-template-columns:1fr 1fr;gap:10px;display:grid}.entry-form{gap:14px;display:grid}.compact-form{margin-bottom:16px}.trade-form{gap:10px;margin-bottom:4px}.trade-form .field{gap:5px}.trade-form .field input{min-height:44px;padding:9px 11px}.trade-form .field select{min-height:44px;padding-top:9px;padding-bottom:9px}.trade-form .segmented button{min-height:38px}.trade-form-top{flex-wrap:wrap;align-items:end;gap:10px;display:flex}.trade-form-top .field{flex:118px}.trade-form-top .trade-broker-field{flex-basis:108px}.trade-form-top .trade-type-toggle{flex:0 0 112px}.trade-form-top .trade-type-toggle button{padding:0 8px}.trade-form-top .trade-type-toggle button.selected.buy{color:var(--danger)}.trade-form-top .trade-type-toggle button.selected.sell{color:#2f6fb8}.trade-form-bottom{grid-template-columns:1fr 1fr;align-items:center;gap:10px;display:grid}.trade-form-bottom span{color:var(--primary-dark);font-size:.95rem;font-weight:900}.trade-form-bottom .primary-button{justify-content:center;align-items:center;gap:8px;min-height:44px;display:inline-flex}.trade-form-bottom .button-spinner{width:16px;height:16px;color:inherit;border:2px solid #ffffff73;border-top-color:currentColor;border-radius:999px;font-size:0;animation:.7s linear infinite button-spin;display:block}@keyframes button-spin{to{transform:rotate(360deg)}}.trade-history-filters{border:1px solid var(--line);background:var(--surface-strong);border-radius:8px;gap:10px;margin-bottom:12px;padding:12px;display:grid}.trade-filter-primary-row{grid-template-columns:minmax(96px,.55fr) minmax(0,1fr);align-items:end;gap:8px;display:grid}.holding-filter-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px;display:grid}.trade-filter-field{gap:5px;display:grid}.trade-filter-field span,.trade-filter-type>span,.trade-filter-period>span{color:var(--muted);font-size:.76rem;font-weight:850}.trade-filter-field select,.trade-filter-field input{border:1px solid var(--line);background:var(--surface);width:100%;min-height:40px;color:var(--text);font:inherit;border-radius:8px;padding:8px 10px;font-size:.88rem;font-weight:750}.trade-filter-type{gap:5px;display:grid}.trade-type-options{border:1px solid var(--line);background:var(--surface);border-radius:8px;grid-template-columns:repeat(3,minmax(0,1fr));min-height:40px;padding:4px;display:grid}.trade-type-options button{color:var(--muted);background:0 0;border:0;border-radius:7px;padding:0 4px;font-size:.76rem;font-weight:850}.trade-type-options button.selected{color:var(--primary-dark);background:#eef8f4}.trade-type-options button.selected:nth-child(2){color:var(--danger)}.trade-type-options button.selected:nth-child(3){color:#2f6fb8}.trade-filter-period{gap:6px;display:grid}.trade-period-options{flex-wrap:wrap;gap:6px;display:flex}.trade-period-options button{border:1px solid var(--line);background:var(--surface);min-height:34px;color:var(--muted);border-radius:8px;padding:0 10px;font-size:.8rem;font-weight:850}.trade-period-options button.selected{color:var(--primary-dark);background:#eef8f4;border-color:#1f7a6d57}.trade-custom-period{grid-template-columns:1fr 1fr;gap:8px;display:grid}@media (max-width:360px){.trade-filter-primary-row,.holding-filter-row{grid-template-columns:1fr}}.inline-history{gap:10px;display:grid}.inline-history-item{border:1px solid var(--line);background:var(--surface-strong);border-left-width:4px;border-radius:8px;justify-content:space-between;align-items:flex-start;gap:12px;padding:12px;display:flex}.inline-history-item.buy{border-left-color:var(--danger)}.inline-history-item.sell{border-left-color:#2f6fb8}.trade-history-main{gap:4px;min-width:0;display:grid}.trade-history-title{align-items:center;gap:7px;min-width:0;display:flex}.inline-history-item strong{overflow-wrap:anywhere}.trade-type-badge{border-radius:999px;flex:none;padding:3px 7px;font-size:.7rem;font-weight:900;line-height:1}.trade-type-badge.buy{color:var(--danger);background:#b241411f}.trade-type-badge.sell{color:#2f6fb8;background:#2f6fb81f}.inline-history-item span{color:var(--muted);font-size:.82rem;font-weight:750}.inline-history-item p{color:var(--primary-dark);text-align:right;white-space:nowrap;margin:0;font-weight:900}.trade-history-amount.buy{color:var(--danger)}.trade-history-amount.sell{color:#2f6fb8}.stock-master-list{gap:10px;display:grid}.stock-master-item{border:1px solid var(--line);background:var(--surface-strong);border-radius:8px;justify-content:space-between;align-items:flex-start;gap:12px;padding:12px;display:flex}.stock-master-item div{gap:4px;min-width:0;display:grid}.stock-master-item strong{overflow-wrap:anywhere}.stock-master-item span{color:var(--muted);font-size:.82rem;font-weight:750}.stock-master-item p{color:var(--primary-dark);text-align:right;white-space:nowrap;gap:4px;margin:0;font-weight:900;display:grid}.stock-master-item p span{font-size:.75rem;font-weight:800}.portfolio-test-form{gap:16px}.portfolio-target-heading{justify-content:space-between;align-items:center;gap:10px;display:flex}.portfolio-target-heading strong{font-size:.96rem}.portfolio-target-heading span{color:var(--primary-dark);font-size:.86rem;font-weight:900}.portfolio-target-heading span.warn,.form-error{color:var(--danger)}.portfolio-target-list{gap:10px;display:grid}.portfolio-target-row{border:1px solid var(--line);background:var(--surface-strong);border-radius:8px;grid-template-columns:minmax(0,1fr) minmax(86px,.32fr) auto;align-items:start;gap:8px;padding:10px;display:grid}.portfolio-target-row .text-button{align-self:end;min-height:50px}.portfolio-target-row .text-button:disabled{cursor:not-allowed;opacity:.45}.portfolio-result-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.portfolio-table-wrap{overflow-x:auto}.portfolio-result-table{border-collapse:collapse;width:100%;min-width:560px;font-size:.86rem}.portfolio-result-table th,.portfolio-result-table td{border-bottom:1px solid var(--line);text-align:right;white-space:nowrap;padding:10px 8px}.portfolio-result-table th:first-child,.portfolio-result-table td:first-child{text-align:left}.portfolio-result-table th{color:var(--muted);font-size:.78rem;font-weight:850}.portfolio-result-table td{font-weight:800}.portfolio-warning-list{gap:8px;margin:0;padding:0;list-style:none;display:grid}.portfolio-warning-list li{background:#fff7ef;border:1px solid #c25f2d47;border-radius:8px;gap:3px;padding:10px 12px;display:grid}.portfolio-warning-list strong{color:var(--accent);font-size:.78rem;font-weight:900}.portfolio-warning-list span{color:var(--text);font-size:.86rem;font-weight:750;line-height:1.45}.form-error{margin:0;font-size:.86rem;font-weight:850}.sheet-row-preview{overflow-wrap:anywhere}.text-button{border:1px solid var(--line);background:var(--surface);min-height:34px;color:var(--danger);border-radius:8px;padding:0 12px;font-size:.82rem;font-weight:850}.floating-add-button{right:max(12px,50vw - 268px);bottom:calc(92px + env(safe-area-inset-bottom));z-index:20;background:var(--primary);color:#fff;border:0;border-radius:999px;justify-content:center;align-items:center;gap:8px;min-height:52px;padding:0 18px;font-size:.92rem;font-weight:900;display:inline-flex;position:fixed;box-shadow:0 16px 34px #1f7a6d47}.floating-add-button span{font-size:1.25rem;line-height:1}.modal-backdrop{z-index:40;overscroll-behavior:contain;background:#19161261;justify-content:center;align-items:flex-end;padding:18px;display:flex;position:fixed;inset:0}.modal-panel{border:1px solid var(--line);background:var(--surface);border-radius:8px;width:min(100%,430px);max-height:min(86vh,720px);padding:16px;overflow:auto;box-shadow:0 24px 70px #1916123d}.stock-trade-modal,.cash-balance-modal,.deposit-entry-modal{flex-direction:column;width:min(100%,480px);display:flex;overflow:hidden}.stock-holding-detail-modal{flex-direction:column;width:min(100%,560px);display:flex;overflow:hidden}.stock-holding-detail-modal .modal-heading{flex:none}.modal-eyebrow{color:var(--primary);letter-spacing:.08em;text-transform:uppercase;margin-bottom:4px;font-size:.72rem;font-weight:900;display:block}.stock-detail-title-row{flex-wrap:wrap;align-items:baseline;gap:6px 10px;display:flex}.stock-detail-title-row>span{color:var(--primary-dark);white-space:nowrap;font-size:.92rem;font-weight:900}.stock-holding-detail-body{gap:22px;padding:2px 2px 4px;display:grid}.stock-detail-account-filter{z-index:1;border-bottom:1px solid var(--line);background:var(--surface);padding-bottom:12px;position:sticky;top:0}.stock-detail-section{gap:10px;display:grid}.stock-detail-section-heading{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.stock-detail-section-heading h3{margin:0;font-size:1rem}.stock-detail-section-heading>span{color:var(--muted);font-size:.76rem;font-weight:800}.stock-account-holding-list{gap:8px;display:grid}.stock-account-holding{border:1px solid var(--line);background:var(--surface-strong);border-radius:8px;gap:12px;padding:12px;display:grid}.stock-account-holding-heading{justify-content:space-between;align-items:center;gap:12px;display:flex}.stock-account-holding-heading>span{border-radius:999px;padding:4px 7px;font-size:.68rem;font-weight:900}.stock-account-holding-heading>span.open{color:var(--primary-dark);background:#1f7a6d1f}.stock-account-holding-heading>span.closed{color:var(--muted);background:#ece9e3}.stock-account-holding dl{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:0;display:grid}.stock-account-holding dl>div{gap:3px;display:grid}.stock-account-holding dt{color:var(--muted);font-size:.72rem;font-weight:800}.stock-account-holding dd{overflow-wrap:anywhere;margin:0;font-size:.86rem;font-weight:900}.stock-account-holding dd.positive{color:var(--danger)}.stock-account-holding dd.negative{color:#2f6fb0}.modal-heading{background:var(--surface);justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:14px;display:flex}.stock-trade-modal .modal-heading,.cash-balance-modal .modal-heading,.deposit-entry-modal .modal-heading{z-index:1;flex:none;position:sticky;top:0}.modal-heading h2{margin-top:2px}.stock-trade-modal .modal-heading h2,.cash-balance-modal .modal-heading h2,.deposit-entry-modal .modal-heading h2{font-size:1.35rem}.modal-close-button{background:var(--surface-strong);width:38px;height:38px;color:var(--muted);border:0;border-radius:8px;place-items:center;margin-top:-6px;font-size:1.25rem;font-weight:800;display:grid}.modal-close-button:disabled{cursor:not-allowed;opacity:.45}.save-toast{left:50%;bottom:calc(92px + env(safe-area-inset-bottom));z-index:60;background:var(--primary-dark);color:#fff;border:1px solid #1f7a6d47;border-radius:8px;width:max-content;max-width:calc(100vw - 32px);padding:11px 16px;font-size:.88rem;font-weight:850;position:fixed;transform:translate(-50%);box-shadow:0 12px 30px #1916123d}@media (prefers-reduced-motion:reduce){.stock-sector-help-tooltip,.stock-sector-detail-toggle{transition:none}.trade-form-bottom .button-spinner{animation:none}}@media (min-width:720px){.stock-holding-detail-backdrop{align-items:center}.save-toast{bottom:24px}}.modal-scroll-body{overscroll-behavior:contain;-webkit-overflow-scrolling:touch;flex:auto;overflow:auto}@media (max-width:420px){.stock-master-item{display:grid}.stock-master-item p{text-align:left}.portfolio-target-row{grid-template-columns:minmax(0,1fr) minmax(76px,.36fr)}.portfolio-target-row .text-button{grid-column:1/-1;min-height:38px}.floating-add-button{right:8px;bottom:calc(86px + env(safe-area-inset-bottom))}}.field{gap:7px;display:grid}.field span{color:var(--muted);font-size:.86rem;font-weight:800}.field input,.field select,.field textarea{border:1px solid var(--line);background:var(--surface-strong);width:100%;min-height:50px;color:var(--text);border-radius:8px;outline:none;padding:12px 13px}.field textarea{resize:vertical}.field select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 6l4 4 4-4' fill='none' stroke='%23786f61' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-position:right 14px center;background-repeat:no-repeat;background-size:16px 16px;padding-right:42px}.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px #1f7a6d24}.field-help{color:var(--muted);font-size:.78rem;font-weight:750}.segmented{background:#e9e4dc;border-radius:8px;grid-template-columns:1fr 1fr;gap:6px;padding:5px;display:grid}.segmented button{min-height:44px;color:var(--muted);background:0 0;border:0;border-radius:7px;font-weight:850}.segmented button.selected{background:var(--surface-strong);color:var(--primary-dark);box-shadow:0 8px 18px #302b231a}.form-actions{grid-template-columns:1fr;gap:10px;display:grid}.form-actions:has(.secondary-button){grid-template-columns:1fr 1fr}.search-field{margin-bottom:14px}.edit-panel{border-color:#1f7a6d59}.bar-list{gap:14px;display:grid}.bar-row{gap:8px;display:grid}.bar-label{justify-content:space-between;align-items:center;gap:12px;font-size:.92rem;display:flex}.bar-label span{color:var(--muted);font-weight:800}.bar-label strong{text-align:right}.bar-track{background:#e7e2da;border-radius:999px;height:12px;overflow:hidden}.bar-fill{border-radius:inherit;background:var(--primary);height:100%}.bar-fill.debt{background:var(--danger)}.bottom-nav{z-index:10;border-top:1px solid var(--line);background:var(--surface);width:100%;padding:6px 12px calc(6px + env(safe-area-inset-bottom));grid-template-columns:repeat(5,1fr);gap:4px;display:grid;position:fixed;bottom:0;left:0}.nav-item{min-height:56px;color:var(--muted);border-radius:7px;align-content:center;place-items:center;gap:3px;font-size:.68rem;font-weight:850;display:grid}.nav-item.active{color:var(--primary-dark);background:#dceee9}.nav-icon{color:currentColor;border-radius:999px;place-items:center;width:24px;height:24px;display:grid}.nav-icon svg{fill:currentColor;width:22px;height:22px}@media (min-width:720px){.app-shell{padding-bottom:32px}.refresh-date{display:inline}.bottom-nav{-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);background:#fffefaf0;border:1px solid #dfddd7d9;border-radius:8px;grid-template-columns:1fr;width:78px;padding:6px;inset:50% 18px auto auto;transform:translateY(-50%);box-shadow:0 18px 42px #302b232e}.nav-item{min-height:70px;padding:8px 4px}.hero-panel{min-height:190px}.dashboard-flow-grid{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:14px;margin-top:14px;display:grid}.dashboard-flow-grid>.section{min-width:0;margin-top:0}.donut-layout{grid-template-columns:minmax(220px,280px) 1fr;place-items:center stretch}.form-actions{grid-template-columns:1fr 1fr}}
