:root{--bg-primary: #0f172a;--bg-secondary: #1e293b;--bg-tertiary: #334155;--text-primary: #f8fafc;--text-secondary: #94a3b8;--text-muted: #64748b;--border-color: #334155;--accent-primary: #6366f1;--accent-secondary: #8b5cf6;--success: #ef4444;--danger: #22c55e;--warning: #f59e0b;--glass-bg: rgba(30, 41, 59, .8);--glass-border: rgba(148, 163, 184, .1);--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 16px;--spacing-lg: 24px;--spacing-xl: 32px;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 16px;--radius-full: 9999px;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .3);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .3), 0 2px 4px -2px rgba(0, 0, 0, .3);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .3), 0 4px 6px -4px rgba(0, 0, 0, .3);--transition-fast: .15s ease;--transition-normal: .25s ease}[data-theme=light]{--bg-primary: #f8fafc;--bg-secondary: #ffffff;--bg-tertiary: #e2e8f0;--text-primary: #0f172a;--text-secondary: #475569;--text-muted: #64748b;--border-color: #e2e8f0;--glass-bg: rgba(255, 255, 255, .9);--glass-border: rgba(0, 0, 0, .1);--shadow-sm: 0 1px 2px rgba(0, 0, 0, .05);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1)}*{margin:0;padding:0;box-sizing:border-box}body{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:var(--bg-primary);color:var(--text-primary);line-height:1.5;overflow:hidden}.app{display:flex;flex-direction:column;height:100vh}.main-content{flex:1;overflow:auto;padding:var(--spacing-md)}.header{position:relative;z-index:100;display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-sm) var(--spacing-md);background:var(--glass-bg);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid var(--glass-border);gap:var(--spacing-md)}.header-left,.header-right{display:flex;align-items:center;gap:var(--spacing-sm)}.header-center{flex:1;max-width:400px}.logo{display:flex;align-items:center;gap:var(--spacing-sm)}.logo-icon{color:var(--accent-primary)}.logo-text{font-size:1.25rem;font-weight:700;background:linear-gradient(135deg,var(--accent-primary),var(--accent-secondary));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}.search-container{position:relative}.search-input{width:100%;padding:var(--spacing-sm) var(--spacing-md) var(--spacing-sm) 40px;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-full);color:var(--text-primary);font-size:.875rem;outline:none;transition:border-color var(--transition-fast)}.search-input:focus{border-color:var(--accent-primary)}.search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--text-muted)}.search-dropdown{position:absolute;top:100%;left:0;right:0;margin-top:var(--spacing-xs);background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);max-height:300px;overflow-y:auto;z-index:1000}.search-result-item{display:flex;justify-content:space-between;width:100%;padding:var(--spacing-sm) var(--spacing-md);background:none;border:none;color:var(--text-primary);cursor:pointer;transition:background var(--transition-fast)}.search-result-item:hover{background:var(--bg-tertiary)}.search-result-item .symbol{font-weight:600;color:var(--accent-primary)}.search-result-item .name{color:var(--text-secondary)}.quote-display{display:flex;align-items:center;gap:var(--spacing-md);padding:var(--spacing-xs) var(--spacing-md);background:var(--bg-secondary);border-radius:var(--radius-md)}.quote-symbol{display:flex;flex-direction:column}.symbol-name{font-weight:600;font-size:.875rem}.symbol-code{font-size:.75rem;color:var(--text-muted)}.quote-price{display:flex;flex-direction:column;align-items:flex-end}.quote-price .price{font-weight:700;font-size:1rem}.quote-price .change{display:flex;align-items:center;gap:4px;font-size:.75rem}.quote-price.up{color:var(--success)}.quote-price.down{color:var(--danger)}.icon-btn{display:flex;align-items:center;justify-content:center;width:36px;height:36px;background:none;border:none;color:var(--text-secondary);border-radius:var(--radius-md);cursor:pointer;transition:all var(--transition-fast)}.icon-btn:hover{background:var(--bg-tertiary);color:var(--text-primary)}.sidebar-overlay{display:none;position:fixed;inset:0;background:#00000080;z-index:200}.sidebar-overlay.open{display:block}.sidebar{position:fixed;top:0;left:0;bottom:0;width:280px;background:var(--glass-bg);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-right:1px solid var(--glass-border);transform:translate(-100%);transition:transform var(--transition-normal);z-index:300;display:flex;flex-direction:column}.sidebar.open{transform:translate(0)}.sidebar-header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md);border-bottom:1px solid var(--glass-border)}.sidebar-header h2{font-size:1.125rem;font-weight:600}.sidebar-nav{padding:var(--spacing-md)}.nav-item{display:flex;align-items:center;gap:var(--spacing-sm);width:100%;padding:var(--spacing-sm) var(--spacing-md);background:none;border:none;border-radius:var(--radius-md);color:var(--text-secondary);font-size:.875rem;cursor:pointer;transition:all var(--transition-fast)}.nav-item:hover{background:var(--bg-tertiary);color:var(--text-primary)}.nav-item.active{background:var(--accent-primary);color:#fff}.sidebar-watchlist{flex:1;padding:var(--spacing-md);border-top:1px solid var(--glass-border);overflow-y:auto}.sidebar-watchlist h3{font-size:.875rem;color:var(--text-muted);margin-bottom:var(--spacing-sm)}.watchlist-item{display:flex;justify-content:space-between;align-items:center;width:100%;padding:var(--spacing-sm);background:none;border:none;border-radius:var(--radius-md);color:var(--text-primary);cursor:pointer;transition:background var(--transition-fast)}.watchlist-item:hover{background:var(--bg-tertiary)}.watchlist-info{display:flex;flex-direction:column;align-items:flex-start}.watchlist-info .symbol{font-weight:600;font-size:.875rem}.watchlist-info .name{font-size:.75rem;color:var(--text-muted)}.watchlist-price{display:flex;flex-direction:column;align-items:flex-end}.watchlist-price .price{font-weight:600;font-size:.875rem}.watchlist-price .change{display:flex;align-items:center;gap:2px;font-size:.75rem}.watchlist-price.up{color:var(--success)}.watchlist-price.down{color:var(--danger)}.chart-toolbar{display:flex;flex-wrap:wrap;gap:var(--spacing-md);padding:var(--spacing-md);background:var(--glass-bg);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-radius:var(--radius-lg);margin-bottom:var(--spacing-md)}.toolbar-section{display:flex;flex-wrap:wrap;align-items:center;gap:var(--spacing-sm)}.toolbar-label{font-size:.75rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}.interval-buttons{display:flex;gap:2px;background:var(--bg-secondary);padding:2px;border-radius:var(--radius-md)}.interval-btn{padding:var(--spacing-xs) var(--spacing-sm);background:none;border:none;border-radius:var(--radius-sm);color:var(--text-secondary);font-size:.75rem;cursor:pointer;transition:all var(--transition-fast)}.interval-btn:hover{color:var(--text-primary)}.interval-btn.active{background:var(--accent-primary);color:#fff}.indicator-list{display:flex;flex-wrap:wrap;gap:var(--spacing-xs)}.indicator-item{display:flex;align-items:center;gap:4px;padding:2px 8px;background:var(--bg-secondary);border:1px solid;border-radius:var(--radius-full);font-size:.75rem}.indicator-visibility,.indicator-remove{display:flex;align-items:center;justify-content:center;background:none;border:none;color:var(--text-muted);cursor:pointer;padding:2px}.indicator-visibility:hover,.indicator-remove:hover{color:var(--text-primary)}.indicator-select{padding:var(--spacing-xs) var(--spacing-sm);background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md);color:var(--text-primary);font-size:.75rem;cursor:pointer}.sub-chart-buttons{display:flex;gap:4px;background:var(--bg-secondary);padding:2px;border-radius:var(--radius-md)}.sub-chart-btn{display:flex;align-items:center;gap:4px;padding:var(--spacing-xs) var(--spacing-sm);background:none;border:none;border-radius:var(--radius-sm);color:var(--text-secondary);font-size:.75rem;cursor:pointer;transition:all var(--transition-fast)}.sub-chart-btn:hover{color:var(--text-primary);background:var(--bg-tertiary)}.sub-chart-btn.active{background:var(--accent-primary);color:#fff}.chart-view{display:flex;flex-direction:column;gap:var(--spacing-sm)}.stock-info-bar{display:flex;align-items:center;gap:var(--spacing-lg);padding:var(--spacing-md) var(--spacing-lg);background:var(--glass-bg);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-radius:var(--radius-lg);border:1px solid var(--glass-border)}.stock-info-main{display:flex;flex-direction:column;gap:2px}.stock-name{font-size:1.25rem;font-weight:700;color:var(--text-primary)}.stock-code{font-size:.875rem;color:var(--text-muted)}.stock-info-price{display:flex;flex-direction:column;gap:2px;padding-left:var(--spacing-lg);border-left:1px solid var(--border-color)}.stock-info-price .current-price{font-size:1.5rem;font-weight:700}.stock-info-price .price-change{font-size:.875rem}.stock-info-price.up{color:var(--success)}.stock-info-price.down{color:var(--danger)}.stock-info-details{display:flex;gap:var(--spacing-md);margin-left:auto}.stock-info-details .detail-item{display:flex;flex-direction:column;align-items:center;gap:2px;min-width:50px}.stock-info-details .detail-item span:first-child{font-size:.75rem;color:var(--text-muted)}.stock-info-details .detail-item span:last-child{font-size:.875rem;font-weight:500}.stock-info-details .up{color:var(--success)}.stock-info-details .down{color:var(--danger)}@media(max-width:768px){.stock-info-bar{flex-wrap:wrap;gap:var(--spacing-md)}.stock-info-details{width:100%;justify-content:space-between;margin-left:0}}.sub-chart-container{background:var(--bg-secondary);border-radius:var(--radius-lg);overflow:hidden}.stock-chart-container{position:relative;background:var(--bg-secondary);border-radius:var(--radius-lg);overflow:hidden}.chart-canvas{width:100%}.chart-loading{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--bg-secondary);gap:var(--spacing-sm);z-index:10}.spinner{width:32px;height:32px;border:3px solid var(--border-color);border-top-color:var(--accent-primary);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.page-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--spacing-lg)}.page-header h2{margin:0;font-size:1.5rem;font-weight:600}.btn-primary{display:inline-flex;align-items:center;gap:var(--spacing-xs);padding:10px 16px;background:linear-gradient(135deg,var(--accent-primary),var(--accent-secondary));border:none;border-radius:var(--radius-md);color:#fff;font-weight:600;font-size:.875rem;cursor:pointer;transition:all var(--transition-fast)}.btn-primary:hover{transform:translateY(-1px);box-shadow:0 4px 12px #6366f14d}.btn-success{display:inline-flex;align-items:center;gap:var(--spacing-xs);padding:10px 16px;background:var(--success);border:none;border-radius:var(--radius-md);color:#fff;font-weight:600;font-size:.875rem;cursor:pointer;transition:all var(--transition-fast)}.btn-success:hover{opacity:.9}.form-card{margin-bottom:var(--spacing-md)}.form-card h4{margin:0 0 var(--spacing-md) 0;font-size:1rem;font-weight:600}.form-row{display:flex;gap:var(--spacing-md);flex-wrap:wrap;align-items:flex-end}.form-field{display:flex;flex-direction:column;gap:var(--spacing-xs)}.form-field label{font-size:.75rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}.form-field input{padding:10px 12px;background:var(--bg-primary);border:1px solid var(--border-color);border-radius:var(--radius-md);color:var(--text-primary);font-size:.875rem;outline:none;transition:border-color var(--transition-fast)}.form-field input:focus{border-color:var(--accent-primary)}.dashboard-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:var(--spacing-md)}.card{background:var(--glass-bg);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid var(--glass-border);border-radius:var(--radius-lg);padding:var(--spacing-lg)}.card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--spacing-md)}.card-title{font-size:1rem;font-weight:600;color:var(--text-primary)}.view-panel{animation:fadeIn var(--transition-normal)}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.stats-row{display:flex;gap:var(--spacing-md);margin-bottom:var(--spacing-md)}.stat-item{flex:1;padding:var(--spacing-md);background:var(--bg-secondary);border-radius:var(--radius-md)}.stat-label{font-size:.75rem;color:var(--text-muted);margin-bottom:var(--spacing-xs)}.stat-value{font-size:1.25rem;font-weight:700}.stat-value.up{color:var(--success)}.stat-value.down{color:var(--danger)}.info-table{width:100%;border-collapse:collapse}.info-table tr{border-bottom:1px solid var(--border-color)}.info-table td{padding:var(--spacing-sm)}.info-table td:first-child{color:var(--text-muted);font-size:.875rem}.info-table td:last-child{text-align:right;font-weight:500}.watchlist-table{width:100%;border-collapse:collapse;font-size:.875rem}.watchlist-table th{padding:var(--spacing-sm) var(--spacing-md);text-align:left;color:var(--text-muted);font-weight:500;border-bottom:1px solid var(--border-color);white-space:nowrap}.watchlist-table th:nth-child(n+3){text-align:right}.watchlist-table tbody tr{cursor:pointer;transition:background var(--transition-fast)}.watchlist-table tbody tr:hover{background:var(--bg-tertiary)}.watchlist-table td{padding:var(--spacing-sm) var(--spacing-md);border-bottom:1px solid rgba(255,255,255,.05)}.watchlist-table td:nth-child(n+3){text-align:right;font-variant-numeric:tabular-nums}.watchlist-table .stock-name-cell{font-weight:600;color:var(--text-primary)}.watchlist-table .stock-code-cell{color:var(--accent-primary)}.watchlist-table .up{color:var(--success)}.watchlist-table .down{color:var(--danger)}.watchlist-remove-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;background:transparent;border:1px solid transparent;border-radius:var(--radius-md);color:var(--text-muted);cursor:pointer;transition:all var(--transition-fast)}.watchlist-remove-btn:hover{background:#ef44441a;border-color:var(--danger);color:var(--danger)}.drag-handle{cursor:grab;color:var(--text-muted);padding:var(--spacing-xs)!important;text-align:center!important;-webkit-user-select:none;user-select:none}.drag-handle:hover{color:var(--accent-primary)}.drag-handle:active{cursor:grabbing}@media(max-width:1024px){.dashboard-grid{grid-template-columns:1fr}.stock-info-bar{flex-wrap:wrap}.stock-info-details{width:100%;margin-left:0;justify-content:space-between;padding-top:var(--spacing-sm);border-top:1px solid var(--border-color);margin-top:var(--spacing-sm)}}@media(max-width:768px){.header{padding:var(--spacing-xs) var(--spacing-sm)}.header-center,.quote-display{display:none}.header-right{gap:var(--spacing-xs)}.logo-text{display:none}.sidebar{width:100%}.main-content,.view-panel{padding:var(--spacing-sm)}.page-header{flex-direction:column;align-items:flex-start;gap:var(--spacing-sm)}.page-header h2{font-size:1.25rem}.page-header>div{width:100%}.page-header .btn-primary,.page-header .btn-success{flex:1;justify-content:center}.stock-info-bar{flex-direction:column;align-items:flex-start;gap:var(--spacing-sm);padding:var(--spacing-sm)}.stock-info-main{flex-direction:row;align-items:center;gap:var(--spacing-sm)}.stock-name{font-size:1rem}.stock-info-price{flex-direction:row;align-items:center;gap:var(--spacing-sm);padding-left:0;border-left:none}.stock-info-price .current-price{font-size:1.25rem}.stock-info-details{display:grid;grid-template-columns:repeat(5,1fr);width:100%;gap:var(--spacing-xs)}.stock-info-details .detail-item{min-width:auto}.chart-toolbar{flex-direction:column;gap:var(--spacing-sm)}.toolbar-section{width:100%;justify-content:center;flex-wrap:wrap}.watchlist-table{display:block;overflow-x:auto;white-space:nowrap;-webkit-overflow-scrolling:touch}.watchlist-table th,.watchlist-table td{padding:var(--spacing-xs) var(--spacing-sm);font-size:.75rem}.info-table{font-size:.8rem}.info-table td{padding:var(--spacing-xs)}.info-table td:first-child{font-size:.75rem}.card{padding:var(--spacing-md)}.stats-row{flex-direction:column;gap:var(--spacing-sm)}.stat-item{padding:var(--spacing-sm)}.form-row{flex-direction:column}.form-field,.form-field input{width:100%}.btn-primary,.btn-success{width:100%;justify-content:center}}@media(max-width:480px){.stock-info-details{grid-template-columns:repeat(3,1fr)}.stock-info-details .detail-item:nth-child(4),.stock-info-details .detail-item:nth-child(5){display:none}.watchlist-table th:nth-child(n+6),.watchlist-table td:nth-child(n+6){display:none}}.login-page{position:relative;display:flex;align-items:center;justify-content:center;min-height:100vh;background:var(--bg-primary);padding:var(--spacing-md);overflow:hidden}.login-bg-blobs{position:absolute;inset:0;z-index:0}.blob{position:absolute;filter:blur(80px);opacity:.4;border-radius:var(--radius-full);animation:blob-float 20s infinite alternate ease-in-out}.blob-1{width:400px;height:400px;background:var(--accent-primary);top:-100px;right:-100px;animation-delay:0s}.blob-2{width:300px;height:300px;background:var(--accent-secondary);bottom:-50px;left:-50px;animation-delay:-5s}.blob-3{width:250px;height:250px;background:var(--success);top:50%;left:20%;animation-delay:-10s;opacity:.2}@keyframes blob-float{0%{transform:translate(0) scale(1)}33%{transform:translate(30px,-50px) scale(1.1)}66%{transform:translate(-20px,20px) scale(.9)}to{transform:translate(0) scale(1)}}.login-container{position:relative;z-index:1;width:100%;max-width:440px;display:flex;flex-direction:column;gap:var(--spacing-xl)}.login-header{text-align:center}.login-logo{display:flex;align-items:center;justify-content:center;gap:var(--spacing-md);margin-bottom:var(--spacing-sm);color:var(--accent-primary)}.login-logo h1{font-size:2.5rem;font-weight:800;letter-spacing:-.02em;background:linear-gradient(135deg,var(--text-primary),var(--accent-primary));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;margin:0}.login-subtitle{color:var(--text-secondary);font-size:1rem;letter-spacing:.05em}.login-card{background:#1e293bb3;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid rgba(255,255,255,.1);border-radius:var(--radius-lg);padding:var(--spacing-xl);box-shadow:0 25px 50px -12px #00000080;display:flex;flex-direction:column;gap:var(--spacing-lg)}.login-card h2{font-size:1.5rem;font-weight:600;text-align:center;margin:0}.login-form{display:flex;flex-direction:column;gap:var(--spacing-md)}.input-group{position:relative;display:flex;align-items:center}.input-icon{position:absolute;left:var(--spacing-md);color:var(--text-muted);pointer-events:none;transition:color var(--transition-fast)}.input-group input{width:100%;padding:14px var(--spacing-md) 14px 44px;background:#0f172a99;border:1px solid rgba(255,255,255,.1);border-radius:var(--radius-md);color:var(--text-primary);font-size:1rem;outline:none;transition:all var(--transition-fast)}.input-group input:focus{border-color:var(--accent-primary);background:#0f172acc;box-shadow:0 0 0 4px #6366f11a}.input-group input:focus+.input-icon{color:var(--accent-primary)}.login-error{background:#ef44441a;border-left:4px solid var(--danger);color:var(--danger);padding:var(--spacing-md);border-radius:var(--radius-sm);font-size:.875rem}.login-btn{display:flex;align-items:center;justify-content:center;gap:var(--spacing-sm);width:100%;padding:14px;border-radius:var(--radius-md);font-weight:600;font-size:1rem;cursor:pointer;transition:all var(--transition-fast);border:none}.login-btn:disabled{opacity:.6;cursor:not-allowed}.login-btn.primary{background:linear-gradient(135deg,var(--accent-primary),var(--accent-secondary));color:#fff;box-shadow:0 4px 15px #6366f14d}.login-btn.primary:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 6px 20px #6366f166}.login-btn.google{background:#fff;color:#1f2937}.login-btn.google:hover:not(:disabled){background:#f9fafb}.login-btn.skip{background:#ffffff0d;color:var(--text-secondary);border:1px solid rgba(255,255,255,.1)}.login-btn.skip:hover:not(:disabled){background:#ffffff1a;color:var(--text-primary)}.login-divider{display:flex;align-items:center;gap:var(--spacing-md);color:var(--text-muted);font-size:.875rem}.login-divider:before,.login-divider:after{content:"";flex:1;height:1px;background:#ffffff1a}.login-toggle{text-align:center;font-size:.875rem;color:var(--text-secondary)}.login-toggle button{background:none;border:none;color:var(--accent-primary);font-weight:600;margin-left:4px;cursor:pointer;transition:color var(--transition-fast)}.login-toggle button:hover{color:var(--accent-secondary);text-decoration:underline}.dashboard-stats-row,.dashboard-movers-row{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--spacing-md);margin-bottom:var(--spacing-md)}.stat-card{background:var(--glass-bg);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid var(--glass-border);border-radius:var(--radius-lg);overflow:hidden}.stat-card .card-header{padding:var(--spacing-sm) var(--spacing-md);border-bottom:1px solid var(--glass-border)}.stat-card .card-title{display:flex;align-items:center;gap:var(--spacing-sm);font-size:.875rem;font-weight:600;color:var(--text-secondary)}.stat-card .card-body{padding:var(--spacing-md)}.stat-card .loading-state{color:var(--text-muted);font-size:.875rem;text-align:center;padding:var(--spacing-lg)}.index-card .index-price{font-size:2rem;font-weight:700;margin-bottom:var(--spacing-xs)}.index-card .index-change{font-size:1rem;font-weight:500}.index-card .index-change span{opacity:.8}.sentiment-bar{height:8px;border-radius:var(--radius-full);background:var(--bg-tertiary);display:flex;overflow:hidden;margin-bottom:var(--spacing-md)}.sentiment-advance{background:linear-gradient(90deg,#22c55e,#4ade80);transition:width .5s ease}.sentiment-unchanged{background:linear-gradient(90deg,#f59e0b,#fbbf24);transition:width .5s ease}.sentiment-decline{background:linear-gradient(90deg,#f87171,#ef4444);transition:width .5s ease}.sentiment-stats{display:flex;justify-content:space-between;margin-bottom:var(--spacing-sm)}.sentiment-stat{display:flex;flex-direction:column;align-items:center;gap:2px}.sentiment-stat .label{font-size:.75rem;color:var(--text-muted)}.sentiment-stat .value{font-size:1rem;font-weight:600}.sentiment-stat.up .value{color:var(--success)}.sentiment-stat.down .value{color:var(--danger)}.sentiment-stat.flat .value{color:var(--text-secondary)}.volume-stat{display:flex;justify-content:space-between;align-items:center;padding-top:var(--spacing-sm);border-top:1px solid var(--glass-border)}.volume-stat .label{font-size:.75rem;color:var(--text-muted)}.volume-stat .value{font-size:1rem;font-weight:600;color:var(--accent-primary)}.top-movers-list{list-style:none;padding:0;margin:0}.top-mover-item{display:flex;align-items:center;gap:var(--spacing-sm);padding:var(--spacing-sm);border-radius:var(--radius-md);cursor:pointer;transition:background var(--transition-fast)}.top-mover-item:hover{background:var(--bg-tertiary)}.top-mover-item .rank{width:20px;height:20px;display:flex;align-items:center;justify-content:center;font-size:.75rem;font-weight:700;color:var(--text-muted);background:var(--bg-secondary);border-radius:var(--radius-sm)}.top-mover-item .stock-info{flex:1;display:flex;flex-direction:column;min-width:0}.top-mover-item .stock-info .name{font-size:.875rem;font-weight:500;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.top-mover-item .stock-info .code{font-size:.75rem;color:var(--text-muted)}.top-mover-item .value{font-size:.875rem;font-weight:600;text-align:right}.top-mover-item .value.up{color:var(--success)}.top-mover-item .value.down{color:var(--danger)}.portfolio-stats{display:flex;flex-direction:column;gap:var(--spacing-sm);margin-bottom:var(--spacing-md)}.portfolio-stat{display:flex;justify-content:space-between;align-items:center}.portfolio-stat .label{font-size:.75rem;color:var(--text-muted)}.portfolio-stat .value{font-size:1.125rem;font-weight:700}.portfolio-stat .value small{font-size:.75rem;font-weight:500;opacity:.8}.holdings-mini-list{list-style:none;padding:0;margin:0;border-top:1px solid var(--glass-border);padding-top:var(--spacing-sm)}.holdings-mini-item{display:flex;justify-content:space-between;align-items:center;padding:var(--spacing-xs) 0;font-size:.875rem}.holdings-mini-item .name{color:var(--text-secondary)}.holdings-mini-item .pnl{font-weight:600}.holdings-mini-item .pnl.up{color:var(--success)}.holdings-mini-item .pnl.down{color:var(--danger)}.watchlist-card{background:var(--glass-bg);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid var(--glass-border);border-radius:var(--radius-lg)}@media(max-width:1024px){.dashboard-stats-row,.dashboard-movers-row{grid-template-columns:repeat(2,1fr)}}@media(max-width:768px){.dashboard-stats-row,.dashboard-movers-row{grid-template-columns:1fr}.index-card .index-price{font-size:1.5rem}}.portfolio-overview-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:var(--spacing-md);margin-bottom:var(--spacing-md)}.big-stat{text-align:center;margin-bottom:var(--spacing-md)}.big-stat-value{display:block;font-size:2rem;font-weight:700;color:var(--text-primary)}.big-stat-label{font-size:.75rem;color:var(--text-muted);text-transform:uppercase}.stat-row{display:flex;justify-content:space-around;border-top:1px solid var(--glass-border);padding-top:var(--spacing-sm)}.stat-mini{display:flex;flex-direction:column;align-items:center;gap:2px}.stat-mini .label{font-size:.7rem;color:var(--text-muted)}.stat-mini .value{font-size:.875rem;font-weight:600}.performance-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--spacing-sm)}.perf-item{display:flex;flex-direction:column;align-items:center;padding:var(--spacing-sm);background:var(--bg-tertiary);border-radius:var(--radius-md)}.perf-item .label{font-size:.7rem;color:var(--text-muted)}.perf-item .value{font-size:1rem;font-weight:600}.pie-chart-container{display:flex;flex-direction:column;align-items:center;gap:var(--spacing-sm)}.pie-chart-svg{width:140px;height:140px}.pie-chart-legend{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--spacing-xs)}.legend-item{display:flex;align-items:center;gap:4px;font-size:.7rem;color:var(--text-secondary)}.legend-color{width:10px;height:10px;border-radius:2px}.risk-stats{display:flex;justify-content:space-between;margin-bottom:var(--spacing-md)}.risk-stat{display:flex;flex-direction:column;align-items:center;gap:2px}.risk-stat .label{font-size:.7rem;color:var(--text-muted)}.risk-stat .value{font-size:1rem;font-weight:600}.risk-meter{margin-bottom:var(--spacing-sm)}.risk-meter-header{display:flex;justify-content:space-between;margin-bottom:4px}.risk-meter-label{font-size:.75rem;color:var(--text-muted)}.risk-meter-value{font-size:.75rem;font-weight:600;color:var(--text-primary)}.risk-meter-bar{height:6px;background:var(--bg-tertiary);border-radius:var(--radius-full);overflow:hidden}.risk-meter-fill{height:100%;border-radius:var(--radius-full);transition:width .5s ease}.diversification-score{display:flex;justify-content:space-between;align-items:center;padding-top:var(--spacing-sm);border-top:1px solid var(--glass-border);font-size:.85rem}.diversification-score span:first-child{color:var(--text-muted)}.diversification-score span:last-child{font-weight:600}.loss-warning{background:#ef44441a}.loss-icon{color:var(--danger);margin-left:6px;vertical-align:middle}@media(max-width:768px){.portfolio-overview-grid{grid-template-columns:1fr}.big-stat-value{font-size:1.5rem}}.backtest-controls{display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-md);margin-bottom:var(--spacing-md);flex-wrap:wrap}.strategy-select{display:flex;gap:4px;background:var(--bg-secondary);padding:4px;border-radius:var(--radius-md)}.strategy-btn{padding:8px 16px;background:none;border:none;border-radius:var(--radius-sm);color:var(--text-secondary);font-size:.875rem;cursor:pointer;transition:all var(--transition-fast)}.strategy-btn:hover{color:var(--text-primary)}.strategy-btn.active{background:var(--accent-primary);color:#fff}.run-btn{display:flex;align-items:center;gap:var(--spacing-xs);padding:10px 24px;background:linear-gradient(135deg,var(--success),#16a34a);border:none;border-radius:var(--radius-md);color:#fff;font-weight:600;font-size:.875rem;cursor:pointer;transition:all var(--transition-fast)}.run-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 4px 12px #22c55e4d}.run-btn:disabled{opacity:.6;cursor:not-allowed}.settings-card{margin-bottom:var(--spacing-md)}.settings-card h4{display:flex;align-items:center;gap:var(--spacing-sm);margin:0 0 var(--spacing-md) 0;font-size:1rem}.settings-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--spacing-md)}.setting-item{display:flex;flex-direction:column;gap:4px}.setting-item label{font-size:.75rem;color:var(--text-muted)}.setting-item input{padding:8px 12px;background:var(--bg-primary);border:1px solid var(--border-color);border-radius:var(--radius-md);color:var(--text-primary);font-size:.875rem}.setting-item input:focus{outline:none;border-color:var(--accent-primary)}.backtest-stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:var(--spacing-md);margin-bottom:var(--spacing-md)}.stat-mini-row{font-size:.75rem;color:var(--text-muted);margin-top:var(--spacing-xs)}.risk-mini-stats{display:flex;flex-direction:column;gap:var(--spacing-xs)}.risk-mini-stats>div{display:flex;justify-content:space-between;font-size:.875rem}.risk-mini-stats>div span:first-child{color:var(--text-muted)}.risk-mini-stats>div span:last-child{font-weight:600}.equity-chart-container{display:flex;flex-direction:column;gap:var(--spacing-sm)}.equity-chart-svg{width:100%;max-height:200px}.chart-legend{display:flex;justify-content:center;gap:var(--spacing-lg);font-size:.75rem;color:var(--text-muted)}.legend-item{display:flex;align-items:center;gap:6px}.legend-item .marker{width:12px;height:12px;border-radius:50%}.legend-item .marker.buy{background:var(--success)}.legend-item .marker.sell{background:var(--danger)}.trade-table{width:100%;border-collapse:collapse;font-size:.875rem}.trade-table th,.trade-table td{padding:8px 12px;text-align:left;border-bottom:1px solid var(--glass-border)}.trade-table th{font-size:.75rem;color:var(--text-muted);text-transform:uppercase;font-weight:600}.trade-table tbody tr:hover{background:var(--bg-tertiary)}.trade-table .buy{color:var(--success);font-weight:600}.trade-table .sell{color:var(--danger);font-weight:600}@media(max-width:768px){.backtest-controls{flex-direction:column;align-items:stretch}.strategy-select{flex-wrap:wrap}.run-btn{justify-content:center}}.search-result-item.selected{background:var(--accent-primary)!important;color:#fff}.search-result-item.selected .symbol,.search-result-item.selected .name{color:#fff}.dashboard-info-row{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--spacing-md);margin-bottom:var(--spacing-md)}.info-card{min-height:200px}.inst-content{display:flex;flex-direction:column;gap:var(--spacing-sm)}.inst-header-row{display:grid;grid-template-columns:50px 1fr 80px 70px;gap:var(--spacing-xs);font-size:.7rem;color:var(--text-muted);padding-bottom:var(--spacing-xs);border-bottom:1px solid var(--glass-border)}.inst-legend{display:flex;align-items:center;gap:8px}.buy-dot,.sell-dot{width:8px;height:8px;border-radius:50%;display:inline-block}.buy-dot{background:var(--success)}.sell-dot{background:var(--danger)}.inst-row{display:grid;grid-template-columns:50px 1fr 80px 70px;gap:var(--spacing-xs);align-items:center;padding:6px 0}.inst-label{font-weight:600;font-size:.875rem}.inst-bars{display:flex;flex-direction:column;gap:2px}.inst-bar-container{height:6px;background:var(--bg-tertiary);border-radius:3px;overflow:hidden}.inst-bar{height:100%;border-radius:3px}.buy-bar{background:var(--success)}.sell-bar{background:var(--danger)}.inst-net{display:flex;align-items:center;gap:4px;font-size:.8rem;font-weight:600}.inst-days{font-size:.75rem;text-align:right}.inst-total{display:flex;justify-content:space-between;padding-top:var(--spacing-sm);border-top:1px solid var(--glass-border);font-weight:600;margin-top:var(--spacing-xs)}.news-list{display:flex;flex-direction:column;gap:var(--spacing-sm)}.news-item{display:block;padding:var(--spacing-sm);background:var(--bg-tertiary);border-radius:var(--radius-md);text-decoration:none;transition:all var(--transition-fast)}.news-item:hover{background:var(--bg-secondary);transform:translate(4px)}.news-title{font-size:.875rem;color:var(--text-primary);display:flex;align-items:center;gap:6px;margin-bottom:4px}.news-link-icon{opacity:.5}.news-meta{display:flex;gap:var(--spacing-md);font-size:.7rem;color:var(--text-muted)}.news-time{display:flex;align-items:center;gap:4px}.ai-signal-card{min-height:280px}.ai-signal-content{display:flex;flex-direction:column;gap:var(--spacing-md)}.ai-recommendation{display:flex;align-items:center;justify-content:center;gap:8px;padding:10px 16px;border-radius:var(--radius-lg);font-weight:700;font-size:1rem;color:#fff}.ai-scores-row{display:flex;justify-content:space-around}.score-circle-container{display:flex;flex-direction:column;align-items:center;gap:4px}.score-circle{display:block}.score-label{font-size:.7rem;color:var(--text-muted)}.ai-levels{display:flex;justify-content:space-around;padding:var(--spacing-sm);background:var(--bg-tertiary);border-radius:var(--radius-md)}.level-item{display:flex;align-items:center;gap:6px;font-size:.8rem}.level-value{font-weight:600;color:var(--accent-primary)}.ai-reasons{font-size:.8rem;color:var(--text-secondary)}.reason-item{padding:2px 0}.ai-disclaimer{font-size:.65rem;color:var(--text-muted);text-align:center;font-style:italic}@media(max-width:1024px){.dashboard-info-row{grid-template-columns:1fr}}@keyframes skeleton-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.skeleton{background:linear-gradient(90deg,var(--bg-tertiary) 25%,var(--bg-secondary) 50%,var(--bg-tertiary) 75%);background-size:200% 100%;animation:skeleton-shimmer 1.5s infinite}.skeleton-card{min-height:150px}.skeleton-list{display:flex;flex-direction:column;gap:var(--spacing-sm)}.skeleton-list-item{display:flex;align-items:center;gap:var(--spacing-md);padding:var(--spacing-sm) 0}.skeleton-chart{height:200px;display:flex;align-items:flex-end;gap:4px;padding:var(--spacing-md);background:var(--bg-tertiary);border-radius:var(--radius-md)}.skeleton-chart-bars{display:flex;align-items:flex-end;gap:4px;width:100%;height:100%}.skeleton-bar{flex:1;background:linear-gradient(90deg,var(--bg-secondary) 25%,var(--bg-primary) 50%,var(--bg-secondary) 75%);background-size:200% 100%;animation:skeleton-shimmer 1.5s infinite;border-radius:2px 2px 0 0}@media(max-width:768px){.header{padding:var(--spacing-sm) var(--spacing-md)}.header-center{display:none}.sidebar{width:100%;max-width:300px}.sidebar.open{box-shadow:var(--shadow-lg)}.sidebar:after{content:"";position:absolute;top:50%;right:8px;width:4px;height:40px;background:var(--text-muted);border-radius:2px;transform:translateY(-50%);opacity:.3}.main-content{padding:var(--spacing-sm)}.card{padding:var(--spacing-md)}.page-header h2{font-size:1.25rem}.backtest-controls{flex-direction:column}.strategy-select{width:100%;overflow-x:auto}.watchlist-table{font-size:.8rem}.watchlist-table th,.watchlist-table td{padding:8px 6px}.watchlist-table .hide-mobile{display:none}}@media(hover:none){.top-mover-item,.search-result-item,.news-item{-webkit-tap-highlight-color:rgba(99,102,241,.2)}.icon-btn{min-width:44px;min-height:44px}}:focus-visible{outline:2px solid var(--accent-primary);outline-offset:2px}button:focus-visible,input:focus-visible,a:focus-visible{outline:2px solid var(--accent-primary);outline-offset:2px}.stock-detail-view{padding:var(--spacing-lg)}.stock-detail-header{display:flex;align-items:center;gap:var(--spacing-lg);padding-bottom:var(--spacing-lg);border-bottom:1px solid var(--border-color);margin-bottom:var(--spacing-lg);flex-wrap:wrap}.back-btn{display:flex;align-items:center;gap:var(--spacing-xs);padding:var(--spacing-sm) var(--spacing-md);background:var(--bg-tertiary);border:none;border-radius:var(--radius-md);color:var(--text-secondary);cursor:pointer;transition:all .2s ease}.back-btn:hover{background:var(--bg-secondary);color:var(--text-primary)}.stock-info-main{flex:1;min-width:150px}.stock-info-main .stock-name{font-size:1.5rem;font-weight:700;margin:0;line-height:1.2}.stock-info-main .stock-code{font-size:.875rem;color:var(--text-muted)}.stock-price-info{text-align:right}.stock-price-info .current-price{font-size:2rem;font-weight:700;display:block}.stock-price-info .price-change{font-size:.9rem;opacity:.9}.stock-price-info.up{color:var(--success)}.stock-price-info.down{color:var(--danger)}.stock-actions{display:flex;gap:var(--spacing-sm)}.stock-actions .icon-btn.active{color:#fbbf24}.stock-chart-section{margin-bottom:var(--spacing-xl)}.stock-info-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:var(--spacing-lg)}@media(max-width:768px){.stock-detail-header{flex-direction:column;align-items:flex-start}.stock-price-info{text-align:left}.stock-actions{width:100%;justify-content:flex-start}}.toast-container{position:fixed;top:80px;right:20px;z-index:9999;display:flex;flex-direction:column;gap:10px;max-width:400px}.toast{display:flex;align-items:center;gap:12px;padding:14px 16px;border-radius:var(--radius-lg);background:var(--bg-secondary);border:1px solid var(--border-color);box-shadow:var(--shadow-lg);animation:toast-slide-in .3s ease-out;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}@keyframes toast-slide-in{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}.toast-icon{flex-shrink:0}.toast-message{flex:1;font-size:.875rem;line-height:1.4;color:var(--text-primary)}.toast-close{display:flex;align-items:center;justify-content:center;width:24px;height:24px;background:none;border:none;color:var(--text-muted);cursor:pointer;border-radius:var(--radius-sm);transition:all var(--transition-fast)}.toast-close:hover{background:var(--bg-tertiary);color:var(--text-primary)}.toast-success{border-left:4px solid var(--success)}.toast-success .toast-icon{color:var(--success)}.toast-error{border-left:4px solid #ef4444}.toast-error .toast-icon{color:#ef4444}.toast-warning{border-left:4px solid var(--warning)}.toast-warning .toast-icon{color:var(--warning)}.toast-info{border-left:4px solid var(--accent-primary)}.toast-info .toast-icon{color:var(--accent-primary)}@media(max-width:768px){.toast-container{left:10px;right:10px;max-width:unset}}
