*,*:before,*:after{box-sizing:border-box}body{margin:0;font-family:var(--font-family);color:var(--color-text-primary);background:var(--color-bg-secondary);line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,input,select{font-family:inherit}:root{--color-bg-primary: #ffffff;--color-bg-secondary: #f7f8fa;--color-bg-tertiary: #edf0f4;--color-text-primary: #1a1d23;--color-text-secondary: #5a6069;--color-text-muted: #8b919a;--color-border: #e2e5ea;--color-border-light: #f0f1f3;--color-buy: #0d8a4a;--color-buy-bg: #e8f5ee;--color-buy-light: rgba(13, 138, 74, .12);--color-sell: #d32f2f;--color-sell-bg: #fdeaea;--color-sell-light: rgba(211, 47, 47, .12);--color-hold: #757575;--color-hold-bg: #f5f5f5;--color-hold-light: rgba(117, 117, 117, .12);--color-accent: #1565c0;--color-accent-hover: #0d47a1;--color-focus-ring: rgba(21, 101, 192, .3);--font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;--font-size-xs: .6875rem;--font-size-sm: .75rem;--font-size-base: .8125rem;--font-size-md: .875rem;--font-size-lg: 1rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.5rem;--space-1: .25rem;--space-2: .5rem;--space-3: .75rem;--space-4: 1rem;--space-5: 1.25rem;--space-6: 1.5rem;--space-8: 2rem;--radius-sm: 4px;--radius-md: 6px;--radius-lg: 8px;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .06);--shadow-md: 0 2px 8px rgba(0, 0, 0, .08);--shadow-lg: 0 4px 16px rgba(0, 0, 0, .1)}.app{max-width:1440px;margin:0 auto;padding:var(--space-4) var(--space-6)}.app__error{padding:var(--space-3) var(--space-4);background:var(--color-sell-bg);color:var(--color-sell);border-radius:var(--radius-md);font-size:var(--font-size-base);font-weight:500;margin-bottom:var(--space-4);border:1px solid var(--color-sell-light)}.app__loading{text-align:center;padding:var(--space-8);color:var(--color-text-muted);font-size:var(--font-size-md)}@media (max-width: 768px){.app{padding:var(--space-3)}}.header{display:flex;justify-content:space-between;align-items:center;padding:var(--space-4) 0;margin-bottom:var(--space-4);border-bottom:1px solid var(--color-border)}.header__left{display:flex;align-items:baseline;gap:var(--space-4)}.header__title{font-size:var(--font-size-2xl);font-weight:700;color:var(--color-text-primary);margin:0;letter-spacing:-.02em}.header__updated{font-size:var(--font-size-sm);color:var(--color-text-muted)}.header__refresh{padding:var(--space-2) var(--space-4);font-size:var(--font-size-base);font-weight:500;font-family:var(--font-family);background:var(--color-accent);color:#fff;border:none;border-radius:var(--radius-md);cursor:pointer;transition:background .15s}.header__refresh:hover:not(:disabled){background:var(--color-accent-hover)}.header__refresh:disabled{opacity:.5;cursor:not-allowed}@media (max-width: 640px){.header{flex-direction:column;align-items:flex-start;gap:var(--space-2)}.header__left{flex-direction:column;gap:var(--space-1)}}.screener{display:grid;grid-template-columns:280px 1fr 1fr;gap:var(--space-4);margin-bottom:var(--space-6)}.market-overview{background:var(--color-bg-primary);border-radius:var(--radius-lg);border:1px solid var(--color-border-light);padding:var(--space-4);box-shadow:var(--shadow-sm)}.market-overview__title{font-size:var(--font-size-sm);font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-muted);margin:0 0 var(--space-3) 0}.market-overview__stats{display:flex;gap:var(--space-4);margin-bottom:var(--space-4)}.market-overview__stat{display:flex;flex-direction:column}.market-overview__stat-value{font-size:var(--font-size-2xl);font-weight:700;color:var(--color-text-primary);line-height:1}.market-overview__stat-label{font-size:var(--font-size-xs);color:var(--color-text-muted);margin-top:2px}.market-overview__bar-section{margin-bottom:var(--space-4)}.market-overview__bar{display:flex;height:8px;border-radius:4px;overflow:hidden;background:var(--color-bg-tertiary);margin-bottom:var(--space-2)}.market-overview__bar-segment{transition:width .3s ease}.market-overview__bar-segment--buy{background:var(--color-buy)}.market-overview__bar-segment--sell{background:var(--color-sell)}.market-overview__bar-segment--hold{background:#bdbdbd}.market-overview__bar-labels{display:flex;flex-direction:column;gap:2px}.market-overview__bar-label{font-size:var(--font-size-xs);font-weight:500}.market-overview__bar-label--buy{color:var(--color-buy)}.market-overview__bar-label--sell{color:var(--color-sell)}.market-overview__bar-label--hold{color:var(--color-hold)}.market-overview__highlights{display:flex;flex-direction:column;gap:var(--space-2)}.market-overview__highlight{padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);display:flex;align-items:baseline;gap:var(--space-2)}.market-overview__highlight--buy{background:var(--color-buy-bg)}.market-overview__highlight--sell{background:var(--color-sell-bg)}.market-overview__highlight-value{font-size:var(--font-size-lg);font-weight:700}.market-overview__highlight--buy .market-overview__highlight-value{color:var(--color-buy)}.market-overview__highlight--sell .market-overview__highlight-value{color:var(--color-sell)}.market-overview__highlight-label{font-size:var(--font-size-xs);color:var(--color-text-secondary)}.top-signals{background:var(--color-bg-primary);border-radius:var(--radius-lg);border:1px solid var(--color-border-light);padding:var(--space-4);box-shadow:var(--shadow-sm)}.top-signals__title{font-size:var(--font-size-sm);font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-muted);margin:0 0 var(--space-3) 0;padding-bottom:var(--space-2)}.top-signals--buy .top-signals__title{border-bottom:2px solid var(--color-buy)}.top-signals--sell .top-signals__title{border-bottom:2px solid var(--color-sell)}.top-signals__list{display:flex;flex-direction:column;gap:var(--space-2)}.top-signals__empty{text-align:center;padding:var(--space-4);color:var(--color-text-muted);font-size:var(--font-size-sm)}.signal-card{padding:var(--space-3);border-radius:var(--radius-md);border:1px solid var(--color-border-light);transition:background .15s,box-shadow .15s}.signal-card:hover{box-shadow:var(--shadow-sm)}.signal-card--buy:hover{background:var(--color-buy-bg)}.signal-card--sell:hover{background:var(--color-sell-bg)}.signal-card__header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:var(--space-2)}.signal-card__company{display:flex;flex-direction:column;min-width:0}.signal-card__name{font-size:var(--font-size-base);font-weight:600;color:var(--color-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.signal-card__symbol{font-size:var(--font-size-xs);color:var(--color-text-muted)}.signal-card__score{display:flex;align-items:baseline;gap:3px;flex-shrink:0}.signal-card__count{font-size:var(--font-size-md);font-weight:700}.signal-card--buy .signal-card__count{color:var(--color-buy)}.signal-card--sell .signal-card__count{color:var(--color-sell)}.signal-card__label{font-size:var(--font-size-xs);color:var(--color-text-muted)}.signal-card__confidence{display:flex;align-items:center;gap:var(--space-2);margin-bottom:var(--space-2)}.signal-card__conf-bar{flex:1;height:4px;background:var(--color-bg-tertiary);border-radius:2px;overflow:hidden}.signal-card__conf-fill{height:100%;border-radius:2px;transition:width .3s ease}.signal-card--buy .signal-card__conf-fill{background:var(--color-buy)}.signal-card--sell .signal-card__conf-fill{background:var(--color-sell)}.signal-card__conf-text{font-size:var(--font-size-xs);font-weight:600;color:var(--color-text-secondary);min-width:28px;text-align:right}.signal-card__dots{display:flex;gap:4px}.signal-card__dot{width:8px;height:8px;border-radius:50%}.signal-card__dot--buy{background:var(--color-buy)}.signal-card__dot--sell{background:var(--color-sell)}.signal-card__dot--hold{background:#d0d0d0}.recent-changes{grid-column:1 / -1;background:var(--color-bg-primary);border-radius:var(--radius-lg);border:1px solid var(--color-border-light);padding:var(--space-4);box-shadow:var(--shadow-sm)}.recent-changes__title{font-size:var(--font-size-sm);font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--color-warning, #f59e0b);margin:0 0 var(--space-3) 0;padding-bottom:var(--space-2);border-bottom:2px solid var(--color-warning, #f59e0b)}.recent-changes__list{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:var(--space-2)}.recent-changes__item{display:flex;flex-direction:column;gap:var(--space-1);padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);border:1px solid var(--color-border-light)}.recent-changes__item--consensus{border-color:var(--color-warning, #f59e0b);background:color-mix(in srgb,var(--color-warning, #f59e0b) 5%,transparent)}.recent-changes__stock{display:flex;align-items:baseline;gap:var(--space-2)}.recent-changes__name{font-size:var(--font-size-sm);font-weight:600;color:var(--color-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.recent-changes__symbol{font-size:var(--font-size-xs);color:var(--color-text-muted)}.recent-changes__details{display:flex;flex-wrap:wrap;gap:var(--space-2)}.recent-changes__consensus-change{font-size:var(--font-size-sm);font-weight:600;color:var(--color-text-primary)}.recent-changes__strategy-change{font-size:var(--font-size-xs);color:var(--color-text-secondary)}.recent-changes__action--buy{color:var(--color-buy);font-weight:600}.recent-changes__action--sell{color:var(--color-sell);font-weight:600}.recent-changes__action--hold{color:var(--color-text-muted)}@media (max-width: 1024px){.screener{grid-template-columns:1fr 1fr}.market-overview{grid-column:1 / -1}.market-overview__stats{flex-direction:row;gap:var(--space-8)}.market-overview__highlights{flex-direction:row}}@media (max-width: 640px){.screener{grid-template-columns:1fr}.market-overview__highlights{flex-direction:column}}.filters{display:flex;justify-content:space-between;align-items:center;gap:var(--space-4);margin-bottom:var(--space-4)}.filters__left,.filters__right{display:flex;align-items:center;gap:var(--space-3)}.filters__search-wrapper{position:relative}.filters__search-icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--color-text-muted);pointer-events:none}.filters__search{padding:var(--space-2) var(--space-3) var(--space-2) 32px;border:1px solid var(--color-border);border-radius:var(--radius-md);font-size:var(--font-size-base);font-family:var(--font-family);color:var(--color-text-primary);background:var(--color-bg-primary);width:220px;transition:border-color .15s}.filters__search:focus{outline:none;border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-focus-ring)}.filters__search::placeholder{color:var(--color-text-muted)}.filters__select{padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);font-size:var(--font-size-base);font-family:var(--font-family);color:var(--color-text-primary);background:var(--color-bg-primary);cursor:pointer}.filters__select:focus{outline:none;border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-focus-ring)}.filters__count{font-size:var(--font-size-sm);color:var(--color-text-muted);white-space:nowrap}@media (max-width: 640px){.filters{flex-direction:column;align-items:stretch}.filters__left,.filters__right{width:100%}.filters__search{width:100%;flex:1}}.filter-chips{display:flex;gap:var(--space-2)}.filter-chip{display:inline-flex;align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-3);border-radius:999px;border:1px solid var(--color-border);font-size:var(--font-size-sm);font-weight:500;font-family:var(--font-family);cursor:pointer;background:var(--color-bg-primary);color:var(--color-text-secondary);transition:all .15s}.filter-chip:hover{border-color:var(--color-text-muted);background:var(--color-bg-secondary)}.filter-chip__count{font-size:var(--font-size-xs);color:var(--color-text-muted)}.filter-chip--all.filter-chip--active{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.filter-chip--all.filter-chip--active .filter-chip__count{color:#ffffffb3}.filter-chip--buy.filter-chip--active{background:var(--color-buy-light);border-color:var(--color-buy);color:var(--color-buy)}.filter-chip--buy.filter-chip--active .filter-chip__count{color:var(--color-buy);opacity:.7}.filter-chip--sell.filter-chip--active{background:var(--color-sell-light);border-color:var(--color-sell);color:var(--color-sell)}.filter-chip--sell.filter-chip--active .filter-chip__count{color:var(--color-sell);opacity:.7}.filter-chip--hold.filter-chip--active{background:var(--color-hold-light);border-color:var(--color-hold);color:var(--color-hold)}.filter-chip--hold.filter-chip--active .filter-chip__count{color:var(--color-hold);opacity:.7}.filter-chip--changed.filter-chip--active{background:color-mix(in srgb,var(--color-warning, #f59e0b) 15%,transparent);border-color:var(--color-warning, #f59e0b);color:var(--color-warning, #f59e0b)}.filter-chip--changed.filter-chip--active .filter-chip__count{color:var(--color-warning, #f59e0b);opacity:.7}.stock-table__container{background:var(--color-bg-primary);border-radius:var(--radius-lg);box-shadow:var(--shadow-md);border:1px solid var(--color-border-light);overflow:hidden}.stock-table__info{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-3) var(--space-4);background:var(--color-bg-secondary);border-bottom:1px solid var(--color-border-light);font-size:var(--font-size-sm);color:var(--color-text-muted)}.stock-table__info-icon{flex-shrink:0;color:var(--color-accent)}.stock-table__info-text{line-height:1.4}.stock-table{width:100%;border-collapse:collapse;table-layout:fixed;font-size:var(--font-size-base)}.th--company{width:36%}.th--consensus{width:20%}.th--signals{width:26%}.th--confidence{width:18%}.th{padding:var(--space-3);text-align:left;font-weight:600;font-size:var(--font-size-sm);color:var(--color-text-secondary);background:var(--color-bg-secondary);border-bottom:2px solid var(--color-border);cursor:pointer;-webkit-user-select:none;user-select:none;text-transform:uppercase;letter-spacing:.04em;transition:background .15s;white-space:nowrap}.th:hover{background:var(--color-bg-tertiary)}.th--consensus,.th--signals,.th--confidence{text-align:center}.th-sort{font-size:var(--font-size-xs);margin-left:2px}.th-sort--inactive{opacity:.3}.stock-row{cursor:pointer;transition:background .1s}.stock-row td{padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--color-border-light);vertical-align:middle}.stock-row:hover td{background:var(--color-bg-secondary)}.stock-row--expanded td{background:var(--color-bg-secondary);border-bottom-color:transparent}.stock-row--buy-accent{border-left:3px solid var(--color-buy)}.stock-row--sell-accent{border-left:3px solid var(--color-sell)}.stock-row__company{display:flex;align-items:center;gap:var(--space-2)}.stock-row__chevron{font-size:var(--font-size-lg);color:var(--color-text-muted);transition:transform .15s;flex-shrink:0;width:12px}.stock-row__chevron--open{transform:rotate(90deg)}.stock-row__name{font-weight:600;font-size:var(--font-size-base);color:var(--color-text-primary);line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stock-row__symbol{font-size:var(--font-size-xs);color:var(--color-text-muted)}.stock-row__consensus{text-align:center}.consensus{display:inline-flex;align-items:center;gap:var(--space-1);padding:2px 8px;border-radius:3px;font-size:var(--font-size-xs);font-weight:600;white-space:nowrap}.consensus__detail{font-weight:500;opacity:.7}.consensus--strong-buy{background:var(--color-buy-light);color:var(--color-buy)}.consensus--buy{background:var(--color-buy-bg);color:var(--color-buy)}.consensus--neutral{background:var(--color-hold-light);color:var(--color-hold)}.consensus--sell{background:var(--color-sell-bg);color:var(--color-sell)}.consensus--strong-sell{background:var(--color-sell-light);color:var(--color-sell)}.stock-row__signals{text-align:center}.signal-dots{display:flex;flex-direction:column;align-items:center;gap:3px}.signal-dots__row{display:flex;gap:4px}.signal-dots__dot{width:10px;height:10px;border-radius:50%}.signal-dots__dot--buy{background:var(--color-buy)}.signal-dots__dot--sell{background:var(--color-sell)}.signal-dots__dot--hold{background:#d0d0d0}.signal-dots__count{font-size:var(--font-size-xs);color:var(--color-text-muted);white-space:nowrap}.stock-row__conf{text-align:center;font-size:var(--font-size-sm);font-weight:500;color:var(--color-text-secondary)}.stock-row__detail-row td{padding:0!important;border-bottom:2px solid var(--color-border)}.stock-row__detail-cell{background:var(--color-bg-secondary)}.strategy-detail{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-3);padding:var(--space-3) var(--space-4)}.strategy-detail__item{display:flex;flex-direction:column;align-items:center;gap:var(--space-1);padding:var(--space-2);background:var(--color-bg-primary);border-radius:var(--radius-md);border:1px solid var(--color-border-light)}.strategy-detail__name{font-size:var(--font-size-xs);font-weight:600;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.03em}.strategy-detail__conf{width:100%;display:flex;flex-direction:column;align-items:center;gap:2px}.strategy-detail__pct{font-size:var(--font-size-xs);color:var(--color-text-muted)}.stock-row__changed{display:inline-block;margin-left:6px;font-size:8px;color:var(--color-warning, #f59e0b);vertical-align:middle}.signal-changes{display:flex;align-items:flex-start;gap:var(--space-2);padding:var(--space-2) var(--space-4);background:color-mix(in srgb,var(--color-warning, #f59e0b) 8%,transparent);border-radius:var(--radius-md);margin:0 var(--space-4)}.signal-changes__label{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--color-warning, #f59e0b);white-space:nowrap;padding-top:2px}.signal-changes__list{display:flex;flex-wrap:wrap;gap:var(--space-2)}.signal-changes__item{display:flex;align-items:center;gap:4px;font-size:var(--font-size-sm)}.signal-changes__strategy{font-weight:600;color:var(--color-text-muted)}.signal-changes__arrow{color:var(--color-text-muted)}.signal-changes__action--buy{color:var(--color-buy)}.signal-changes__action--sell{color:var(--color-sell)}.signal-changes__action--hold{color:var(--color-text-muted)}.signal-changes__consensus{font-size:var(--font-size-xs);color:var(--color-text-muted);font-style:italic}.strategy-detail__item--changed{box-shadow:inset 0 0 0 1px var(--color-warning, #f59e0b)}.strategy-detail-wrapper{display:flex;flex-direction:column;gap:var(--space-3)}.indicator-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:var(--space-2);padding:0 var(--space-4) var(--space-3)}.indicator-grid__item{display:flex;flex-direction:column;align-items:center;gap:2px;padding:var(--space-1)}.indicator-grid__label{font-size:10px;font-weight:600;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.05em}.indicator-grid__value{font-size:var(--font-size-sm);font-weight:500;color:var(--color-text-primary);font-variant-numeric:tabular-nums}.indicator-grid__sub{font-size:10px;font-weight:400;color:var(--color-text-muted)}.indicator-value--trending{color:var(--color-buy)}.indicator-value--ranging{color:var(--color-sell)}.indicator-value--transitioning{color:var(--color-text-muted)}.stock-table__empty{text-align:center;padding:var(--space-8);color:var(--color-text-muted);font-size:var(--font-size-md);background:var(--color-bg-primary);border-radius:var(--radius-lg);border:1px solid var(--color-border-light)}@media (max-width: 768px){.th--company{width:35%}.th--consensus{width:20%}.th--signals{width:25%}.th--confidence{width:20%}.strategy-detail{grid-template-columns:repeat(auto-fit,minmax(100px,1fr))}.stock-row__name{font-size:var(--font-size-sm)}.stock-table__info{font-size:var(--font-size-xs)}.indicator-grid{grid-template-columns:repeat(3,1fr)}}.signal-badge{display:inline-block;padding:2px 8px;border-radius:3px;font-size:var(--font-size-xs);font-weight:600;text-transform:uppercase;letter-spacing:.03em;line-height:1.4}.signal-badge--buy{background:var(--color-buy-light);color:var(--color-buy)}.signal-badge--sell{background:var(--color-sell-light);color:var(--color-sell)}.signal-badge--hold{background:var(--color-hold-light);color:var(--color-hold)}.confidence-bar{width:100%;height:4px;background:var(--color-bg-tertiary);border-radius:2px;overflow:hidden;margin-top:4px}.confidence-bar__fill{height:100%;border-radius:2px;transition:width .3s ease}.confidence-bar__fill--buy{background:var(--color-buy)}.confidence-bar__fill--sell{background:var(--color-sell)}.confidence-bar__fill--hold{background:var(--color-hold)}.pagination{display:flex;justify-content:center;align-items:center;gap:var(--space-2);padding:var(--space-4) 0}.pagination__pages{display:flex;align-items:center;gap:var(--space-1)}.pagination__btn,.pagination__page{padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);font-size:var(--font-size-sm);font-family:var(--font-family);font-weight:500;color:var(--color-text-secondary);background:var(--color-bg-primary);cursor:pointer;transition:all .15s}.pagination__btn:hover:not(:disabled),.pagination__page:hover{background:var(--color-bg-secondary);border-color:var(--color-text-muted)}.pagination__btn:disabled{opacity:.4;cursor:not-allowed}.pagination__page{min-width:36px;text-align:center;padding:var(--space-2)}.pagination__page--active{background:var(--color-accent);color:#fff;border-color:var(--color-accent)}.pagination__page--active:hover{background:var(--color-accent-hover);border-color:var(--color-accent-hover)}.pagination__ellipsis{padding:var(--space-2);color:var(--color-text-muted);font-size:var(--font-size-sm)}
