:root{--accent: #da7756;--accent-dim: rgba(218, 119, 86, .1);--accent-hover: #c4684a;--success: #5a9a6e;--danger: #c75450;--bg: #f5f0e8;--bg-card: #ffffff;--bg-elevated: #faf7f2;--bg-input: #ffffff;--text: #2d2a26;--text-secondary: #6b6560;--text-muted: #9c9590;--border: rgba(0, 0, 0, .07);--shadow: 0 1px 3px rgba(0, 0, 0, .04);--shadow-lg: 0 4px 16px rgba(0, 0, 0, .06);--radius: 16px;--radius-sm: 10px;--warning-bg: #fdf6ec;--warning-border: #e8d5a8;--warning-text: #8a6d2b;--safe-top: env(safe-area-inset-top, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px);--safe-left: env(safe-area-inset-left, 0px);--safe-right: env(safe-area-inset-right, 0px)}*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}body{font-family:Söhne,Inter,-apple-system,BlinkMacSystemFont,SF Pro Display,Helvetica Neue,Arial,sans-serif;background-color:var(--bg);color:var(--text);line-height:1.55;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;padding-bottom:var(--safe-bottom)}.container{max-width:560px;margin:0 auto;padding:0 20px;padding-left:calc(20px + var(--safe-left));padding-right:calc(20px + var(--safe-right))}header{background:var(--bg);padding-top:calc(16px + var(--safe-top));padding-bottom:12px;position:sticky;top:0;z-index:100}.header-inner{display:flex;justify-content:space-between;align-items:center}header h1{font-size:22px;font-weight:600;letter-spacing:-.3px;color:var(--text)}.header-actions{display:flex;gap:4px}.btn-icon{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:50%;border:none;background:transparent;color:var(--text-secondary);cursor:pointer;transition:background .15s}.btn-icon:active{background:var(--border)}.fab{position:fixed;bottom:calc(24px + var(--safe-bottom));right:20px;width:56px;height:56px;border-radius:50%;border:none;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 4px 16px #da775659;z-index:99;transition:transform .15s,box-shadow .15s}.fab:active{transform:scale(.92);box-shadow:0 2px 8px #da77564d}.offline-banner{text-align:center;padding:6px;font-size:12px;color:var(--text-muted);background:var(--warning-bg);border-bottom:1px solid var(--warning-border)}.card{background:var(--bg-card);border-radius:var(--radius);padding:20px;margin-bottom:12px;border:1px solid var(--border)}.card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.card-header h2{font-size:12px;font-weight:500;text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted)}.btn{padding:10px 18px;border:none;border-radius:var(--radius-sm);cursor:pointer;font-size:15px;font-weight:500;transition:all .15s;text-decoration:none;display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:44px;font-family:inherit}.btn:active{opacity:.8;transform:scale(.98)}.btn-primary{background:var(--accent);color:#fff}.btn-primary:active{background:var(--accent-hover)}.btn-success{background:var(--accent);color:#fff}.btn-danger{background:var(--danger);color:#fff}.btn-secondary{background:var(--bg-elevated);color:var(--text-secondary);border:1px solid var(--border)}.btn-ghost{background:transparent;color:var(--text-muted);font-size:13px;min-height:36px;padding:6px 12px}.btn-ghost:active{background:var(--bg-elevated)}.btn-danger-outline{background:transparent;color:var(--danger);font-size:13px;min-height:36px;padding:6px 12px}.btn-danger-outline:active{background:#c7545014}.btn-small{padding:6px 14px;font-size:13px;min-height:34px;border-radius:17px}.btn-large{padding:14px 32px;font-size:17px;font-weight:600;width:100%;border-radius:14px}.btn:disabled{opacity:.35;pointer-events:none}.empty-state{text-align:center;padding:60px 20px 48px;background:none;border:none;box-shadow:none}.empty-state h2{font-size:28px;font-weight:600;margin-bottom:10px;letter-spacing:-.5px;color:var(--text)}.empty-state>p{color:var(--text-secondary);max-width:260px;margin:0 auto 44px;font-size:16px;line-height:1.6}.onboard-brand{width:56px;height:56px;border-radius:16px;background:var(--bg-card);color:var(--accent);font-size:32px;font-weight:700;display:flex;align-items:center;justify-content:center;margin:0 auto 20px;box-shadow:var(--shadow)}.onboard-features{text-align:left;max-width:300px;margin:0 auto 32px;display:flex;flex-direction:column;gap:16px}.onboard-feature{display:flex;gap:12px;align-items:flex-start}.onboard-icon{width:22px;height:22px;flex-shrink:0;color:var(--accent);margin-top:2px}.onboard-feature-title{font-size:14px;font-weight:600;color:var(--text)}.onboard-feature-desc{font-size:13px;color:var(--text-secondary);line-height:1.4;margin-top:1px}.empty-buttons{display:flex;flex-direction:column;gap:10px;max-width:280px;margin:0 auto}.onboard-hint{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 16px;margin-bottom:12px;background:var(--bg-card);border-left:3px solid var(--accent);border-radius:var(--radius-sm);font-size:13px;color:var(--text-secondary)}.onboard-hint-dismiss{background:none;border:none;color:var(--accent);font-weight:600;font-size:13px;cursor:pointer;font-family:inherit;padding:4px 8px;flex-shrink:0}.summary-hero{text-align:center;padding:28px 16px 12px}.summary-hero .label{font-size:13px;color:var(--text-muted);letter-spacing:.3px;margin-bottom:6px;font-weight:500}.summary-hero .value{font-size:38px;font-weight:600;letter-spacing:-1.5px;font-variant-numeric:tabular-nums;color:var(--text)}.summary-hero .sub-value{font-size:15px;font-weight:600;margin-top:4px}.period-selector{display:flex;justify-content:center;gap:4px;margin-top:12px}.period-pill{font-family:inherit;font-size:12px;font-weight:500;padding:5px 12px;border-radius:20px;border:none;background:transparent;color:var(--text-muted);cursor:pointer;transition:color .2s,background .2s;-webkit-tap-highlight-color:transparent;min-height:30px}.period-pill:hover{color:var(--text-secondary);background:var(--accent-dim)}.period-pill.active{color:var(--text);background:var(--accent-dim);font-weight:600}.period-tabs{display:flex;justify-content:center;gap:4px;padding:4px 16px 8px}.period-tab{background:none;border:1px solid transparent;border-radius:6px;padding:3px 10px;font-size:12px;font-family:inherit;color:var(--text-muted);cursor:pointer;font-weight:400}.period-tab.active{color:var(--text);background:var(--bg-elevated);border-color:var(--border);font-weight:500}.hero-return{font-size:17px;font-weight:600;margin-top:4px;font-variant-numeric:tabular-nums}.hero-return-pct{font-weight:500;opacity:.8}.return-breakdown{padding:10px 16px 4px;border-top:1px solid var(--border);margin-top:8px}.breakdown-row{display:flex;justify-content:space-between;align-items:center;padding:5px 0}.breakdown-label{font-size:13px;color:var(--text-secondary)}.breakdown-val{font-size:13px;font-weight:600;font-variant-numeric:tabular-nums}.breakdown-total{border-top:1px solid var(--border);margin-top:4px;padding-top:8px}.breakdown-total .breakdown-label{font-weight:500;color:var(--text)}.breakdown-total .breakdown-val{font-size:14px}.breakdown-sub{font-size:11px!important;color:var(--text-muted)!important;font-weight:400!important}.performers-row{display:flex;gap:12px;padding:8px 16px;border-top:1px solid var(--border);flex-wrap:wrap}.performer{font-size:12px;display:flex;gap:4px;align-items:baseline}.performer-name{color:var(--text-secondary)}.alloc-compact{padding:10px 16px 8px}.alloc-inline-labels{display:flex;flex-wrap:wrap;gap:6px 12px;margin-top:6px;font-size:11px;color:var(--text-muted)}.alloc-inline-labels span{display:flex;align-items:center;gap:4px}.summary-grid{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--border);border-radius:var(--radius-sm);overflow:hidden;margin-top:16px}.summary-item{background:var(--bg-card);padding:14px 16px}.summary-item .label{font-size:12px;color:var(--text-muted);margin-bottom:3px;font-weight:500}.summary-item .value{font-size:17px;font-weight:600;font-variant-numeric:tabular-nums}.warning-card{background-color:var(--warning-bg);border:1px solid var(--warning-border)}.warning-card h3{color:var(--warning-text);font-size:14px;margin-bottom:6px}.warning-card ul{padding-left:18px;color:var(--warning-text);font-size:13px}.holdings-list{display:flex;flex-direction:column;gap:8px}.holding-period-label{font-size:10px;font-weight:400;color:var(--text-muted)}.holding-daily{font-size:11px;text-align:right}.holding-color{width:3px;border-radius:1.5px;align-self:stretch;flex-shrink:0;opacity:.7}.holding-card{display:flex;align-items:center;gap:14px;padding:18px;background:var(--bg-card);border-radius:var(--radius);border:1px solid var(--border);cursor:pointer;transition:background .15s;-webkit-user-select:none;user-select:none;min-height:64px}.holding-card:active{background:var(--bg-elevated);transition-duration:0s}.holding-info{flex:1;min-width:0}.holding-ticker{font-size:16px;font-weight:600;letter-spacing:-.2px;color:var(--text)}.holding-name{font-size:13px;color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px}.holding-values{text-align:right;flex-shrink:0}.holding-market-value{font-size:16px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--text)}.holding-gain{font-size:13px;font-weight:600;font-variant-numeric:tabular-nums;margin-top:1px}.holding-details{display:none;grid-template-columns:1fr 1fr;gap:1px;background:var(--border);border-radius:var(--radius-sm);overflow:hidden;margin-top:10px}.holding-details.active{display:grid}.holding-detail{background:var(--bg-elevated);padding:12px 14px}.holding-detail .label{font-size:10px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.4px;font-weight:500}.holding-detail .value{font-size:14px;font-weight:600;font-variant-numeric:tabular-nums;margin-top:2px}.holding-detail .price-input{width:100%;margin-top:2px}.price-input{width:100%;text-align:right;padding:6px 10px;border:1px solid var(--border);border-radius:8px;font-size:14px;font-family:inherit;background:var(--bg-input);color:var(--text);min-height:34px;-webkit-appearance:none;-moz-appearance:none;appearance:none;font-variant-numeric:tabular-nums}.price-input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-dim)}.price-input::placeholder{color:var(--text-muted)}.price-input::-webkit-inner-spin-button,.price-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.price-hint{font-size:12px;color:var(--text-muted);margin-top:8px;text-align:center}.portfolio-chart-container{padding:0 12px;min-height:160px}.chart-placeholder{font-size:12px;color:var(--text-muted);text-align:center;padding:50px 0}.portfolio-chart-wrap{position:relative}.chart-return{font-weight:600;font-size:14px}.chart-area{position:relative;height:140px;cursor:crosshair;touch-action:none;border-radius:var(--radius-sm);overflow:hidden}.chart-area canvas{position:absolute;top:0;left:0;width:100%;height:100%}.chart-crosshair{display:none;position:absolute;top:0;bottom:0;width:1.5px;background:var(--text);opacity:.15;pointer-events:none;border-radius:1px}.chart-scrubber{text-align:center;padding:8px 4px 4px;min-height:28px;font-size:15px}.chart-scrubber-active{display:flex;justify-content:center;gap:8px;align-items:baseline;font-size:13px}.scrub-date{color:var(--text-muted);font-size:12px}.scrub-value{font-weight:700;font-variant-numeric:tabular-nums}.scrub-event{font-size:11px;color:var(--text-secondary)}.chart-dates{display:flex;justify-content:space-between;padding:6px 4px 0;font-size:11px;color:var(--text-muted);font-weight:500}.chart-legend{display:flex;justify-content:center;gap:14px;padding:6px 0 2px;font-size:11px;color:var(--text-muted)}.legend-item{display:flex;align-items:center;gap:3px}.benchmark-compare{text-align:center;font-size:12px;padding:4px 0 0;display:flex;align-items:center;justify-content:center;gap:6px}.bench-line{display:inline-block;width:16px;height:0;border-top:2px dashed #9c959080}.scrub-bench{color:var(--text-muted);font-size:12px}.chart-legend-inline{display:inline-flex;gap:6px;align-items:center;font-size:10px;color:var(--text-muted)}.legend-dot{width:7px;height:7px;border-radius:50%;display:inline-block}.legend-buy{background:#5a9a6e}.legend-sell{background:#c75450}.legend-div{background:#da7756}.best-worst{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--border);overflow:hidden;border-radius:var(--radius-sm);margin-top:1px}.bw-item{background:var(--bg-card);padding:10px 16px}.bw-item .label{font-size:10px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.4px;font-weight:500}.bw-value{font-size:13px;font-weight:600;margin-top:2px}.allocation{padding:12px 16px 8px}.alloc-bar{display:flex;height:8px;border-radius:4px;overflow:hidden;gap:2px}.alloc-segment{min-width:4px;border-radius:3px}.alloc-labels{display:flex;flex-wrap:wrap;gap:8px 12px;margin-top:8px;font-size:11px;color:var(--text-secondary)}.alloc-label{display:flex;align-items:center;gap:4px}.alloc-dot{width:6px;height:6px;border-radius:50%;display:inline-block}.section-group{margin-top:8px}.section-market{margin-top:28px;padding-top:20px;border-top:1.5px solid rgba(0,0,0,.06)}.section-market .card-header h2{font-size:11px;font-weight:400;color:var(--text-muted)}.section-market .card{box-shadow:none;border:1px solid rgba(0,0,0,.05);background:var(--bg-elevated)}.market-card{padding:14px 16px}.market-row{display:flex;align-items:center;gap:8px}.market-ticker{font-weight:600;font-size:14px;min-width:40px}.market-name{color:var(--text-muted);font-size:12px;flex:1}.market-price{font-weight:500;font-size:14px;font-variant-numeric:tabular-nums;color:var(--text-secondary)}.watchlist-header{margin-top:8px}.watchlist-list{padding:0}.watchlist-empty{padding:20px 16px;text-align:center}.watchlist-item{display:flex;align-items:center;padding:12px 16px;border-bottom:1px solid var(--border);gap:8px}.obx-item{border-bottom:1.5px solid var(--border)!important}.watchlist-item:last-child{border-bottom:none}.watchlist-info{flex:1;min-width:0}.watchlist-ticker{font-weight:500;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.watchlist-name{font-size:11px;color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.watchlist-values{text-align:right}.watchlist-price{font-weight:500;font-size:13px;font-variant-numeric:tabular-nums;color:var(--text-secondary)}.watchlist-remove{background:none;border:none;color:var(--text-muted);font-size:20px;padding:4px 8px;cursor:pointer;line-height:1;border-radius:50%;min-width:32px;min-height:32px;display:flex;align-items:center;justify-content:center}.watchlist-remove:active{background:var(--accent-dim);color:var(--danger)}.watchlist-card{cursor:pointer}.watchlist-empty-hint{padding:16px;text-align:center;font-size:13px;color:var(--text-muted)}.watchlist-suggestions{padding:12px 0 4px}.suggestions-label{font-size:11px;color:var(--text-muted);margin-bottom:8px}.suggestions-chips{display:flex;flex-wrap:wrap;gap:6px}.suggestion-chip{background:var(--bg-card);border:1px solid var(--border);border-radius:16px;padding:6px 14px;font-size:13px;font-family:inherit;color:var(--text-secondary);cursor:pointer;font-weight:500}.suggestion-chip:active{background:var(--accent-dim);border-color:var(--accent);color:var(--accent)}.market-stats{grid-column:1 / -1;padding:6px 14px 10px;background:var(--bg-elevated);border-top:1px solid var(--border)}.market-stats .holding-detail{display:flex;justify-content:space-between;align-items:baseline;padding:3px 0;background:none}.market-stats .holding-detail .label{font-size:12px}.market-stats .holding-detail .value{font-size:13px}.market-stats-link{grid-column:1 / -1;background:var(--bg-elevated);padding:10px 14px;text-align:center}.market-stats-link a{color:var(--accent);text-decoration:none;font-size:13px;font-weight:500}.market-stats-link a:active{opacity:.7}.watchlist-remove-link{background:none!important;border:none!important;color:var(--text-muted)!important;font-size:12px;font-weight:400;cursor:pointer;padding:4px 0}.watchlist-remove-link:active{color:var(--danger)!important}.watchlist-search{padding:8px 16px 12px}.watchlist-search .search-wrapper{position:relative}.dividend-list{padding:8px 16px 12px;border-top:1px solid var(--border)}.div-year-chart{display:flex;flex-direction:column;gap:6px;margin:8px 0 12px}.div-year-row{display:flex;align-items:center;gap:8px}.div-year-label{font-size:12px;font-variant-numeric:tabular-nums;color:var(--text-secondary);min-width:36px}.div-year-bar-bg{flex:1;height:8px;background:var(--border);border-radius:4px;overflow:hidden}.div-year-bar{height:100%;background:var(--accent);border-radius:4px;transition:width .3s ease}.div-year-amount{font-size:12px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--text);min-width:72px;text-align:right}.div-by-holding{margin:4px 0 8px}.div-holding-header{display:flex;font-size:10px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.3px;font-weight:500;padding-bottom:4px;border-bottom:1px solid var(--border)}.div-holding-header span:first-child{flex:1}.div-holding-header span:nth-child(2){min-width:44px;text-align:right}.div-holding-header span:last-child{min-width:72px;text-align:right}.div-holding-row{display:flex;align-items:center;padding:5px 0;font-size:13px;border-bottom:1px solid var(--border)}.div-holding-row:last-child{border-bottom:none}.div-holding-name{flex:1;color:var(--text);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.div-holding-yoc{min-width:44px;text-align:right;font-size:12px;color:var(--text-muted);font-variant-numeric:tabular-nums}.div-holding-amount{min-width:72px;text-align:right;font-weight:600;font-variant-numeric:tabular-nums}.div-txn-toggle{font-size:12px;color:var(--text-muted);text-align:center;padding:8px 0 4px;cursor:pointer;transition:color .2s}.div-txn-toggle:hover{color:var(--text-secondary)}.div-txn-list{display:none}.div-txn-list.active{display:block}.holding-chart-wrap{grid-column:1 / -1;background:var(--bg-elevated);padding:8px 14px 4px}.holding-chart-info{display:flex;gap:8px;align-items:baseline;font-size:13px;min-height:20px;padding-bottom:4px}.holding-chart-area{position:relative;height:100px;cursor:crosshair;touch-action:none;border-radius:8px;overflow:hidden}.holding-chart-area canvas{position:absolute;top:0;left:0;width:100%;height:100%}.sparkline-placeholder{font-size:11px;color:var(--text-muted);text-align:center;padding:35px 0}.holding-transactions{grid-column:1 / -1;background:var(--bg-elevated);padding:12px 14px}.txn-header{font-size:10px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.4px;font-weight:500;margin-bottom:6px}.txn-row{display:flex;align-items:center;gap:8px;padding:5px 0;font-size:13px;border-top:1px solid var(--border)}.txn-row{display:flex;align-items:center;justify-content:space-between;gap:4px}.txn-row:first-of-type{border-top:none}.txn-main{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.txn-right{display:flex;align-items:center;gap:4px;flex-shrink:0}.txn-date{color:var(--text-muted);font-variant-numeric:tabular-nums;font-size:12px}.txn-type{font-weight:600}.txn-detail{color:var(--text-muted);font-size:11px;white-space:nowrap}.txn-type-trade_buy{color:var(--success)}.txn-type-trade_sell{color:var(--danger)}.txn-type-dividend{color:var(--accent)}.txn-amount{font-weight:600;font-variant-numeric:tabular-nums;font-size:13px}.txn-edit,.txn-delete{background:none;border:none;color:var(--text-muted);font-size:14px;padding:4px;cursor:pointer;line-height:1;border-radius:4px;min-width:28px;min-height:28px;display:flex;align-items:center;justify-content:center}.txn-edit:active{color:var(--accent)}.txn-delete:active{color:var(--danger)}.holding-stats{grid-column:1 / -1;background:var(--bg-elevated);padding:10px 14px}.hstat{display:flex;justify-content:space-between;align-items:baseline;padding:4px 0}.hstat-label{font-size:13px;color:var(--text-secondary)}.hstat-val{font-size:14px;font-weight:600;font-variant-numeric:tabular-nums}.hstat-sub{font-weight:400;font-size:12px;color:var(--text-muted)}.detail-section{grid-column:1 / -1;background:var(--bg-elevated)}.detail-section-toggle{display:block;width:100%;background:none;border:none;padding:10px 14px;font-size:13px;font-weight:500;color:var(--accent);text-align:left;cursor:pointer;font-family:inherit}.detail-section-toggle.open{color:var(--text-secondary)}.detail-section-body{display:none}.detail-section-body.active{display:contents}.holding-actions{grid-column:1 / -1;padding:12px 14px;background:var(--bg-elevated);display:flex;justify-content:center}.holding-add-trade{background:none!important;border:none!important;color:var(--accent)!important;font-weight:500}.holding-add-trade:active{opacity:.7}.btn-outline{background:transparent;border:1px solid rgba(0,0,0,.1);color:var(--text-secondary);font-weight:500}.btn-outline:active{background:var(--accent-dim);color:var(--accent)}.text-success{color:var(--success)}.text-danger{color:var(--danger)}.text-muted{color:var(--text-muted)}.text-right{text-align:right}.text-small{font-size:12px}.footer-actions{display:flex;justify-content:space-between;align-items:center;padding:20px 4px;padding-bottom:calc(90px + var(--safe-bottom));flex-wrap:wrap;gap:8px}.footer-links{display:flex;gap:16px}.footer-txn-link{background:none;border:none;color:var(--accent);font-size:13px;font-family:inherit;font-weight:500;cursor:pointer;padding:4px 0}.footer-txn-link:active{opacity:.7}.gains-year{padding:16px 20px;border-bottom:1px solid var(--border)}.gains-year:last-child{border-bottom:none}.gains-year-header{display:flex;justify-content:space-between;align-items:baseline}.gains-year-label{font-size:18px;font-weight:600}.gains-year-net{font-size:16px;font-weight:600;font-variant-numeric:tabular-nums}.gains-year-breakdown{margin-top:8px}.gains-row{display:flex;justify-content:space-between;padding:3px 0;font-size:13px;color:var(--text-secondary)}.gains-row span:last-child{font-weight:600;font-variant-numeric:tabular-nums}.gains-trades{margin-top:10px;border-top:1px solid var(--border);padding-top:8px}.gains-trade{display:flex;flex-wrap:wrap;gap:4px 8px;padding:6px 0;font-size:13px;align-items:baseline}.gains-trade-name{font-weight:500}.gains-trade-detail{color:var(--text-muted);font-size:12px}.gains-trade-amount{margin-left:auto;font-weight:600;font-variant-numeric:tabular-nums}.txn-log-sheet{background:var(--bg-card);border-radius:24px 24px 0 0;padding:0;padding-bottom:calc(20px + var(--safe-bottom));width:100%;max-width:520px;height:55vh;max-height:95vh;display:flex;flex-direction:column;overflow:hidden;transition:height .3s ease}.txn-log-sheet.fullscreen{height:95vh;border-radius:0}.txn-log-sheet .modal-handle{width:40px;height:5px;background:var(--text-muted);border-radius:3px;margin:12px auto 6px;opacity:.35;cursor:grab}.txnlog-header{display:flex;justify-content:space-between;align-items:center;padding:4px 20px 12px;flex-shrink:0}.txnlog-header h3{margin:0;font-size:18px;font-weight:600}.txnlog-list{overflow-y:auto;-webkit-overflow-scrolling:touch;flex:1;padding:0}.txnlog-card{display:flex;align-items:center;flex-wrap:wrap;gap:10px;padding:14px 20px;border-bottom:1px solid var(--border);cursor:pointer}.txnlog-card:active{background:var(--bg-elevated)}.txnlog-card:last-child{border-bottom:none}.txnlog-body{flex:1;min-width:0}.txnlog-line1{display:flex;align-items:baseline;gap:6px}.txnlog-label{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.3px}.txnlog-label.txnlog-buy{color:var(--success)}.txnlog-label.txnlog-sell{color:var(--danger)}.txnlog-label.txnlog-div{color:var(--accent)}.txnlog-name{font-size:15px;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.txnlog-line2{display:flex;gap:8px;margin-top:2px}.txnlog-date,.txnlog-detail{font-size:13px;color:var(--text-secondary)}.txnlog-amount{font-size:16px;font-weight:600;font-variant-numeric:tabular-nums;flex-shrink:0;color:var(--text)}.txnlog-expand{display:none;gap:10px;padding:10px 0 2px;width:100%}.txnlog-expand.active{display:flex}.txnlog-expand .btn{flex:1}.txn-source-tag{font-size:9px;color:var(--text-muted);background:var(--bg-elevated);padding:1px 5px;border-radius:4px;margin-left:4px;font-weight:400;vertical-align:middle}.footer-buttons{display:flex;gap:4px}.modal{display:none;position:fixed;top:0;left:0;width:100%;height:100%;background-color:#2d2a264d;z-index:1000;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.modal.active{display:flex;align-items:flex-end;justify-content:center}.modal-content{background:var(--bg-card);border-radius:24px 24px 0 0;padding:28px 20px;padding-bottom:calc(28px + var(--safe-bottom));width:100%;max-width:520px;max-height:92vh;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}.modal-content:before{content:"";display:block;width:36px;height:4px;background:var(--text-muted);border-radius:2px;margin:0 auto 20px;opacity:.3}.modal-header{margin-bottom:20px}.modal-header h3{font-size:22px;font-weight:600;margin-bottom:4px;letter-spacing:-.3px;color:var(--text)}.modal-header p{font-size:14px;color:var(--text-secondary)}.modal-footer{margin-top:24px;display:flex;gap:10px}.modal-footer .btn{flex:1}.modal-footer .btn:first-child{background:var(--bg-elevated);color:var(--text-secondary);border:1px solid var(--border)}.import-vps{text-align:center;padding:8px 0 16px}.import-vps-btn{display:block;margin-bottom:8px}.file-upload{display:flex;align-items:center;justify-content:center;padding:36px 20px;border:2px dashed var(--border);border-radius:var(--radius);cursor:pointer;transition:border-color .2s,background .2s}.file-upload:active{border-color:var(--accent);background:var(--accent-dim)}.file-upload input[type=file]{display:none}.file-upload-text{color:var(--text-muted);font-size:15px}.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin:10px 0}.stat{text-align:center;padding:10px 2px;background:var(--bg-elevated);border-radius:var(--radius-sm)}.stat-value{display:block;font-size:18px;font-weight:600;color:var(--text)}.stat-label{display:block;font-size:10px;color:var(--text-muted);text-transform:uppercase}.import-warnings{background:var(--warning-bg);border:1px solid var(--warning-border);border-radius:var(--radius-sm);padding:10px 12px;margin-top:8px}.import-warnings p{font-size:13px;color:var(--warning-text)}.search-wrapper{position:relative}.search-suggestions{display:none;position:absolute;top:100%;left:0;right:0;z-index:1010;background:var(--bg-card);border:1px solid var(--border);border-top:none;border-radius:0 0 14px 14px;box-shadow:var(--shadow-lg);max-height:280px;overflow-y:auto;-webkit-overflow-scrolling:touch}.search-suggestions.active{display:block}.suggestion-item{display:flex;align-items:center;gap:10px;width:100%;padding:12px 14px;border:none;background:none;cursor:pointer;font-family:inherit;font-size:15px;text-align:left;color:var(--text);border-bottom:1px solid var(--border);min-height:44px}.suggestion-item:last-child{border-bottom:none}.suggestion-item:active,.suggestion-item.selected{background:var(--bg-elevated)}.suggestion-ticker{font-weight:600;color:var(--text);min-width:48px;font-size:15px}.suggestion-name{flex:1;color:var(--text-muted);font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.suggestion-price{font-weight:600;color:var(--accent);font-size:14px;font-variant-numeric:tabular-nums}.suggestion-badge{display:inline-block;padding:2px 7px;border-radius:5px;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.3px;background:var(--accent-dim);color:var(--accent);flex-shrink:0}.suggestion-empty{padding:14px;color:var(--text-muted);font-size:13px;text-align:center}.price-date-hint{display:block;font-size:12px;color:var(--accent);margin-top:3px;min-height:16px}.trade-type-tabs{display:flex;gap:0;margin-bottom:20px;background:var(--bg);border-radius:var(--radius-sm);padding:3px}.trade-tab{flex:1;padding:8px;border:none;border-radius:8px;font-size:14px;font-weight:500;cursor:pointer;background:transparent;color:var(--text-muted);transition:all .2s;min-height:36px;font-family:inherit}.trade-tab.active{background:var(--bg-card);color:var(--text);box-shadow:var(--shadow)}.modal-mode-toggle{text-align:center;margin-top:16px;padding-top:16px;border-top:1px solid var(--border)}.btn-link{background:none;border:none;color:var(--accent);font-size:13px;cursor:pointer;padding:4px 0;font-family:inherit;text-decoration:none}.btn-link:active{opacity:.6}.trade-total{font-size:15px;font-weight:600;color:var(--text);text-align:right;min-height:22px;font-variant-numeric:tabular-nums}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}.form-group{margin-bottom:16px}.form-group label{display:block;margin-bottom:6px;font-weight:500;font-size:13px;color:var(--text-secondary)}.form-control{width:100%;padding:12px 14px;border:1px solid var(--border);border-radius:var(--radius-sm);font-size:16px;min-height:44px;font-family:inherit;background:var(--bg-input);color:var(--text);transition:border-color .15s,box-shadow .15s}.form-control:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-dim)}.form-control[readonly]{background:var(--bg);color:var(--text-muted)}select.form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%239c9590' d='M6 8L1 3h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 14px center;padding-right:34px}.loading{display:inline-block;width:14px;height:14px;border:2px solid var(--accent-dim);border-top-color:var(--accent);border-radius:50%;animation:spin .7s linear infinite;vertical-align:middle}@keyframes spin{to{transform:rotate(360deg)}}@media (min-width: 768px){.container{max-width:640px;padding:0 24px}.summary-grid{grid-template-columns:repeat(4,1fr)}.modal.active{align-items:center}.modal-content{border-radius:24px;padding:28px;max-width:520px;width:90%}.modal-content:before{display:none}.btn-large{width:auto}.fab{bottom:32px;right:calc(50% - 296px)}.footer-actions{padding-bottom:28px}}
