* {
  box-sizing: border-box;
}

body {
  margin: 0;
  font-family: -apple-system, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
  background: #0f1117;
  color: #e6e8ef;
}

.app {
  width: 100%;
  max-width: none;
  margin: 0;
  padding: 24px clamp(16px, 2.5vw, 40px) 60px;
}

.back-to-top {
  position: fixed;
  right: clamp(16px, 2.5vw, 40px);
  bottom: clamp(18px, 3vw, 34px);
  z-index: 90;
  display: grid;
  place-items: center;
  width: 46px;
  height: 46px;
  padding: 0;
  border: 1px solid rgba(143, 176, 255, 0.55);
  border-radius: 50%;
  color: #fff;
  background: rgba(76, 124, 240, 0.92);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.35);
  font-size: 25px;
  line-height: 1;
  cursor: pointer;
  opacity: 0;
  visibility: hidden;
  transform: translateY(12px);
  transition: opacity 0.2s ease, transform 0.2s ease, visibility 0.2s;
}

.back-to-top.is-visible {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}

.back-to-top:hover {
  background: #5d89f5;
  transform: translateY(-2px);
}

.back-to-top:focus-visible {
  outline: 3px solid rgba(143, 176, 255, 0.55);
  outline-offset: 3px;
}

@media (max-width: 640px) {
  .back-to-top {
    right: 14px;
    bottom: 16px;
    width: 42px;
    height: 42px;
    font-size: 23px;
  }
}

@media (prefers-reduced-motion: reduce) {
  .back-to-top {
    transition: none;
  }
}

.site-top-row {
  display: flex;
  align-items: flex-start;
  gap: 14px;
  margin-bottom: 18px;
}

.top-nav {
  display: flex;
  flex: 1 1 auto;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 0;
}

.site-stats {
  display: flex;
  flex: 0 0 auto;
  align-items: center;
  gap: 10px;
  min-height: 36px;
  padding: 7px 12px;
  border: 1px solid #2a2e3a;
  border-radius: 9px;
  color: #9aa1b2;
  background: #171a22;
  font-size: 13px;
  white-space: nowrap;
}

.site-stats strong {
  margin-left: 4px;
  color: #8fb0ff;
  font-size: 15px;
}

.site-stats i {
  width: 1px;
  height: 16px;
  background: #343947;
}

.site-stats.is-error strong {
  color: #7f8799;
}

@media (max-width: 980px) {
  .site-top-row {
    flex-direction: column;
  }

  .site-stats {
    align-self: flex-end;
  }
}

@media (max-width: 640px) {
  .site-stats {
    align-self: stretch;
    justify-content: center;
  }
}

.nav-link {
  padding: 8px 16px;
  border-radius: 8px;
  font-size: 14px;
  color: #9aa1b2;
  text-decoration: none;
  border: 1px solid #2a2e3a;
  transition: border-color 0.2s, color 0.2s;
}

.nav-link:hover {
  color: #c7cbdb;
  border-color: #4c7cf0;
}

.nav-link.active {
  background: #4c7cf0;
  color: #fff;
  border-color: #4c7cf0;
}

.quant-sub-nav {
  display: flex;
  gap: 8px;
  margin-bottom: 14px;
}

.quant-sub-nav-btn {
  padding: 7px 14px;
  border-radius: 8px;
  font-size: 13px;
  color: #9aa1b2;
  background: #171a22;
  border: 1px solid #2a2e3a;
  cursor: pointer;
}

.quant-sub-nav-btn:hover {
  color: #c7cbdb;
  border-color: #4c7cf0;
}

.quant-sub-nav-btn.active {
  background: rgba(76, 124, 240, 0.15);
  color: #8fb0ff;
  border-color: #4c7cf0;
}

#view-quant > .quant-sub-nav {
  flex-wrap: wrap;
}

#view-quant > .quant-sub-nav .quant-sub-nav-btn {
  flex: 0 0 auto;
  min-width: 132px;
  white-space: nowrap;
}

.quant-toolbar-right {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
}

.quant-date-range {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  color: #9aa1b2;
  position: relative;
  z-index: 2;
}

.quant-date-range input[type="date"] {
  background: #171a22;
  border: 1px solid #2a2e3a;
  color: #e6e8ef;
  border-radius: 6px;
  padding: 6px 10px;
  font-size: 13px;
  min-width: 150px;
  color-scheme: dark;
  cursor: pointer;
}

.quant-date-range input[type="date"]::-webkit-calendar-picker-indicator {
  cursor: pointer;
  opacity: 0.9;
  filter: invert(0.85);
}

.quant-date-range input[type="date"]::-webkit-datetime-edit-fields-wrapper {
  color: #e6e8ef;
}

.quant-date-range select {
  background: #171a22;
  border: 1px solid #2a2e3a;
  color: #e6e8ef;
  border-radius: 6px;
  padding: 6px 10px;
  font-size: 13px;
  min-width: 200px;
}

#quantIntradayResilienceHistoryBar,
#quantBearLiveHistoryBar,
#quantBullLiveHistoryBar {
  margin-bottom: 10px;
}

#quantRangeQueryBtn {
  padding: 6px 12px;
  border-radius: 6px;
  font-size: 12px;
  color: #e6e8ef;
  background: rgba(76, 124, 240, 0.18);
  border: 1px solid #4c7cf0;
  cursor: pointer;
}

#quantRangeQueryBtn:hover:not(:disabled) {
  background: rgba(76, 124, 240, 0.28);
}

#quantRangeQueryBtn:disabled {
  opacity: 0.45;
  cursor: not-allowed;
}

.quant-date-sep {
  color: #6b7280;
}

.quant-date-clear {
  padding: 6px 10px;
  border-radius: 6px;
  font-size: 12px;
  color: #9aa1b2;
  background: transparent;
  border: 1px solid #2a2e3a;
  cursor: pointer;
}

.quant-date-clear:hover {
  border-color: #4c7cf0;
  color: #c7cbdb;
}

.quant-index-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 12px;
}

.quant-index-tag {
  font-size: 12px;
}

#quantIntradayResiliencePanel .quant-metric-note,
#quantBearLivePanel .quant-metric-note,
#quantBullLivePanel .quant-metric-note {
  margin-top: 3px;
  color: #6b7280;
  font-size: 11px;
  white-space: nowrap;
}

#quantIntradayResiliencePanel td {
  vertical-align: middle;
}

#quantIntradayResiliencePanel table {
  min-width: 1900px;
}

#quantIntradayResiliencePanel th:nth-child(3),
#quantIntradayResiliencePanel td:nth-child(3),
#quantIntradayResiliencePanel th:nth-child(4),
#quantIntradayResiliencePanel td:nth-child(4) {
  min-width: 86px;
  white-space: nowrap;
}

#quantIntradayResiliencePanel th:nth-child(7),
#quantIntradayResiliencePanel td:nth-child(7) {
  min-width: 170px;
}

#quantIntradayResiliencePanel th:nth-child(5),
#quantIntradayResiliencePanel td:nth-child(5) {
  min-width: 130px;
  white-space: nowrap;
}

#quantIntradayResiliencePanel td:nth-child(7) .tag {
  display: inline-block;
  margin: 2px 3px 2px 0;
  white-space: nowrap;
}

.quant-board-tag {
  font-size: 11px;
  color: #6b7280;
  margin-left: 4px;
}

#quantGainPanel.quant-loading,
#quantDeclinePanel.quant-loading {
  position: relative;
}

#quantGainPanel.quant-loading::after,
#quantDeclinePanel.quant-loading::after {
  content: "加载中…";
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(15, 17, 23, 0.62);
  color: #c7cbdb;
  font-size: 15px;
  z-index: 5;
  pointer-events: none;
}

#view-quant .quant-stock-meta-cell {
  min-width: 200px;
  max-width: 280px;
}

#view-quant .quant-stock-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  margin-bottom: 6px;
}

#view-quant .quant-stock-tags .tag {
  font-size: 11px;
  padding: 2px 6px;
}

#view-quant .quant-stock-business {
  font-size: 12px;
  line-height: 1.45;
  color: #a8adb8;
}

#view-quant .quant-stock-highlight {
  font-size: 12px;
  line-height: 1.45;
  color: #b8c4d9;
}

#view-quant .quant-stock-meta-label {
  display: inline-block;
  margin-right: 4px;
  padding: 0 4px;
  border-radius: 3px;
  font-size: 10px;
  line-height: 1.5;
  color: #8ea6cc;
  background: rgba(88, 126, 180, 0.18);
}

#view-quant .quant-stock-business-muted {
  opacity: 0.65;
}

#view-quant .quant-stock-tags .tag.tag-muted {
  opacity: 0.55;
  border-style: dashed;
}

#quantAntiFallPanel.quant-loading {
  position: relative;
}

#quantAntiFallPanel.quant-loading::after {
  content: "加载中…";
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(15, 17, 23, 0.62);
  color: #c7cbdb;
  font-size: 15px;
  z-index: 5;
  pointer-events: none;
}

#quantAntiFallPanel.quant-loading tbody::after,
#quantGainPanel.quant-loading tbody::after,
#quantDeclinePanel.quant-loading tbody::after {
  content: none;
  display: none;
}

#view-quant .quant-chart-col {
  min-width: 320px;
  width: 340px;
}

#view-quant .quant-chart-cell {
  min-width: 300px;
}

#view-quant .quant-inline-tabs {
  margin: 0 0 8px;
}

#view-quant .quant-inline-tabs .tab-btn {
  padding: 4px 10px;
  font-size: 12px;
}

#view-quant .quant-inline-chart {
  height: 120px;
  min-width: 280px;
  background: #0f1117;
  border: 1px solid #23262f;
  border-radius: 4px;
  cursor: pointer;
}

#view-quant .quant-inline-chart:hover {
  border-color: #4c7cf0;
}

#quantStatus.is-loading {
  color: #c7cbdb;
}

.quant-spinner {
  display: inline-block;
  width: 14px;
  height: 14px;
  margin-right: 8px;
  border: 2px solid rgba(154, 161, 178, 0.35);
  border-top-color: #4c7cf0;
  border-radius: 50%;
  animation: quant-spin 0.8s linear infinite;
  vertical-align: -2px;
}

@keyframes quant-spin {
  to {
    transform: rotate(360deg);
  }
}

.topbar h1 {
  margin: 0 0 4px;
  font-size: 26px;
}

.subtitle {
  margin: 0 0 20px;
  color: #9aa1b2;
  font-size: 15px;
}

.search-bar {
  display: flex;
  gap: 12px;
  margin-bottom: 16px;
}

.input-wrap {
  position: relative;
  flex: 1;
}

.search-bar input[type="text"] {
  width: 100%;
  padding: 14px 18px;
  font-size: 17px;
  border-radius: 8px;
  border: 1px solid #2a2e3a;
  background: #171923;
  color: #e6e8ef;
  outline: none;
  box-sizing: border-box;
}

.suggest-list {
  position: absolute;
  top: calc(100% + 6px);
  left: 0;
  right: 0;
  margin: 0;
  padding: 6px;
  list-style: none;
  background: #1b1f2b;
  border: 1px solid #2a2e3a;
  border-radius: 8px;
  z-index: 20;
  max-height: 280px;
  overflow-y: auto;
}

.suggest-list li {
  padding: 10px 14px;
  border-radius: 6px;
  cursor: pointer;
  display: flex;
  justify-content: space-between;
  font-size: 15px;
}

.suggest-list li:hover,
.suggest-list li.active {
  background: #2a3350;
}

.suggest-list .suggest-code {
  color: #9aa1b2;
  font-size: 13px;
}

.search-bar input[type="text"]:focus {
  border-color: #4c7cf0;
}

.material-search-hero {
  margin-bottom: 20px;
  padding: 24px 28px;
  border-radius: 16px;
  border: 1px solid #2d3348;
  background:
    linear-gradient(135deg, rgba(76, 124, 240, 0.12) 0%, rgba(76, 124, 240, 0.03) 42%, rgba(23, 25, 35, 0.9) 100%),
    #151821;
  box-shadow:
    0 12px 40px rgba(0, 0, 0, 0.28),
    inset 0 1px 0 rgba(255, 255, 255, 0.04);
}

.material-search-hero-inner {
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.material-search-label {
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: #8b93a7;
}

.material-search-controls {
  display: flex;
  align-items: stretch;
  gap: 14px;
}

.material-search-input-wrap {
  position: relative;
  flex: 1;
  min-width: 0;
}

.material-search-icon {
  position: absolute;
  left: 22px;
  top: 50%;
  transform: translateY(-50%);
  font-size: 24px;
  line-height: 1;
  color: #6f7890;
  pointer-events: none;
}

#materialSearchInput {
  width: 100%;
  min-height: 72px;
  padding: 22px 24px 22px 58px;
  font-size: 24px;
  line-height: 1.3;
  border-radius: 14px;
  border: 1px solid #343a4f;
  background: rgba(10, 12, 18, 0.72);
  color: #f3f4f8;
  outline: none;
  transition: border-color 0.2s, box-shadow 0.2s, background 0.2s;
}

#materialSearchInput:focus {
  border-color: #5b86ff;
  background: rgba(10, 12, 18, 0.92);
  box-shadow:
    0 0 0 4px rgba(76, 124, 240, 0.18),
    0 8px 24px rgba(76, 124, 240, 0.12);
}

#materialSearchInput::placeholder {
  color: #667085;
  font-size: 20px;
}

.material-search-actions {
  display: flex;
  align-items: stretch;
  gap: 12px;
  flex-shrink: 0;
}

.material-search-days {
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 8px;
  min-width: 112px;
  padding: 12px 14px;
  border-radius: 14px;
  border: 1px solid #343a4f;
  background: rgba(10, 12, 18, 0.55);
}

.material-search-days-label {
  font-size: 12px;
  color: #8b93a7;
  letter-spacing: 0.04em;
}

#materialSearchDays {
  width: 100%;
  min-height: 44px;
  padding: 0 12px;
  font-size: 16px;
  border-radius: 10px;
  border: 1px solid #2a3144;
  background: #171923;
  color: #e6e8ef;
  outline: none;
  cursor: pointer;
}

#materialSearchDays:focus {
  border-color: #5b86ff;
}

#materialSearchBtn {
  min-width: 120px;
  min-height: 72px;
  padding: 0 32px;
  font-size: 18px;
  font-weight: 600;
  letter-spacing: 0.04em;
  border-radius: 14px;
  border: 1px solid rgba(255, 255, 255, 0.08);
  background: linear-gradient(180deg, #5b86ff 0%, #4c7cf0 100%);
  color: #fff;
  cursor: pointer;
  transition: transform 0.15s, box-shadow 0.2s, background 0.2s;
  box-shadow: 0 10px 24px rgba(76, 124, 240, 0.28);
  white-space: nowrap;
}

#materialSearchBtn:hover:not(:disabled) {
  transform: translateY(-1px);
  background: linear-gradient(180deg, #6b92ff 0%, #567fe8 100%);
  box-shadow: 0 14px 28px rgba(76, 124, 240, 0.34);
}

#materialSearchBtn:active:not(:disabled) {
  transform: translateY(0);
}

#materialSearchBtn:disabled {
  opacity: 0.6;
  cursor: not-allowed;
  transform: none;
  box-shadow: none;
}

.linkage-search-card {
  margin-bottom: 20px;
  padding: 24px 28px;
  border: 1px solid #2d3348;
  border-radius: 16px;
  background: linear-gradient(135deg, rgba(76, 124, 240, 0.12), rgba(23, 25, 35, 0.94));
}

.intraday-mode-tabs {
  display: flex;
  gap: 8px;
  margin-bottom: 18px;
}

.intraday-mode-tabs .tab-btn {
  min-width: 108px;
}

.linkage-search-row {
  display: flex;
  gap: 12px;
  margin-top: 12px;
}

#intradayLinkageInput {
  width: 100%;
  min-height: 58px;
  padding: 0 20px;
  color: #f3f4f8;
  font-size: 18px;
  background: rgba(10, 12, 18, 0.78);
  border: 1px solid #343a4f;
  border-radius: 12px;
  outline: none;
}

#intradayLinkageInput:focus {
  border-color: #5b86ff;
  box-shadow: 0 0 0 4px rgba(76, 124, 240, 0.18);
}

#intradayLinkageBtn {
  min-width: 160px;
  padding: 0 24px;
  color: #fff;
  font-size: 16px;
  font-weight: 600;
  background: #4c7cf0;
  border: 0;
  border-radius: 12px;
  cursor: pointer;
}

#intradayLinkageBtn:disabled {
  opacity: 0.6;
  cursor: wait;
}

.linkage-method-note,
.linkage-chart-note {
  margin: 12px 0 0;
  color: #7f8799;
  font-size: 13px;
}

.linkage-summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 14px;
}

.linkage-scan-meta {
  color: #8b93a7;
  font-size: 13px;
}

.linkage-chart {
  width: 100%;
  height: 440px;
}

.linkage-chart-tabs {
  display: flex;
  gap: 8px;
  margin: 4px 0 12px;
}

.linkage-score {
  display: inline-block;
  min-width: 64px;
  padding: 4px 8px;
  color: #aeb5c5;
  text-align: center;
  background: rgba(154, 161, 178, 0.12);
  border-radius: 999px;
}

.linkage-score--medium {
  color: #8fb0ff;
  background: rgba(76, 124, 240, 0.16);
}

.linkage-score--strong {
  color: #6ee7b7;
  background: rgba(16, 185, 129, 0.16);
}

.linkage-relations {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  min-width: 180px;
}

.linkage-relations .tag {
  padding: 3px 7px;
  font-size: 11px;
  white-space: nowrap;
}

.linkage-relations .tag-muted {
  color: #8b93a7;
  background: rgba(139, 147, 167, 0.1);
}

.linkage-behavior {
  margin-top: 8px;
  color: #aeb9d0;
  font-size: 13px;
}

.linkage-behavior strong {
  color: #f3f6ff;
}

.linkage-behavior small {
  color: #8b93a7;
}

.opposition-events {
  min-width: 190px;
}

.opposition-events .tag {
  display: inline-block;
  margin: 0 4px 4px 0;
  padding: 3px 7px;
  font-size: 11px;
  white-space: nowrap;
}

.opposition-events .opposition-board-tag {
  color: #fda4af;
  background: rgba(244, 63, 94, 0.14);
}

.opposition-events .opposition-evidence-strong {
  color: #6ee7b7;
  background: rgba(16, 185, 129, 0.16);
}

.opposition-events .opposition-evidence-medium {
  color: #fcd34d;
  background: rgba(245, 158, 11, 0.14);
}

.linkage-relations .opposition-cross-sector {
  color: #c4b5fd;
  background: rgba(139, 92, 246, 0.14);
}

.opposition-event-detail {
  color: #8b93a7;
  font-size: 11px;
  line-height: 1.5;
  white-space: nowrap;
}

.linkage-table .linkage-chart-col {
  min-width: 260px;
  width: 280px;
}

.linkage-chart-cell {
  min-width: 240px;
}

.linkage-inline-tabs {
  margin: 0 0 8px;
}

.linkage-inline-tabs .tab-btn {
  padding: 4px 10px;
  font-size: 12px;
}

.linkage-inline-chart {
  height: 120px;
  min-width: 220px;
  background: #0f1117;
  border: 1px solid #23262f;
  border-radius: 4px;
  cursor: pointer;
}

.linkage-inline-chart:hover {
  border-color: #4c7cf0;
}

@media (max-width: 700px) {
  .linkage-search-row,
  .linkage-summary {
    align-items: stretch;
    flex-direction: column;
  }

  #intradayLinkageBtn {
    min-height: 52px;
  }

  .linkage-chart {
    height: 360px;
  }
}

@media (max-width: 900px) {
  .material-search-controls {
    flex-direction: column;
  }

  .material-search-actions {
    width: 100%;
  }

  .material-search-days {
    flex: 1;
  }

  #materialSearchBtn {
    flex: 1;
  }
}

.search-bar > button {
  flex-shrink: 0;
  padding: 14px 30px;
  font-size: 16px;
  border-radius: 8px;
  border: none;
  background: #4c7cf0;
  color: #fff;
  cursor: pointer;
  transition: background 0.2s;
}

.search-bar > button:hover {
  background: #3d68d8;
}

.search-bar > button:disabled {
  background: #2a2e3a;
  cursor: not-allowed;
}

.status-bar {
  margin-bottom: 16px;
  padding: 12px 18px;
  border-radius: 8px;
  background: #1b1f2b;
  color: #9aa1b2;
  font-size: 15px;
}

.status-bar.error {
  background: #3a1d1f;
  color: #f28b8b;
}

.hidden {
  display: none !important;
}

.card {
  background: #171923;
  border: 1px solid #23262f;
  border-radius: 12px;
  padding: 20px 22px;
  margin-bottom: 18px;
}

.card h2 {
  margin: 0 0 14px;
  font-size: 18px;
  color: #c7cbdb;
}

.overview-header {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 8px;
}

.stock-name {
  font-size: 24px;
  font-weight: 600;
  margin-right: 8px;
}

.stock-code {
  color: #9aa1b2;
  font-size: 15px;
}

.price-block {
  text-align: right;
}

.stock-price {
  font-size: 24px;
  font-weight: 600;
  margin-right: 10px;
}

.stock-change {
  font-size: 17px;
  font-weight: 600;
}

.stock-change.up {
  color: #e5484d;
}

.stock-change.down {
  color: #2eb872;
}

.overview-meta {
  margin: 10px 0;
}

.tag {
  display: inline-block;
  background: #232a3d;
  color: #8fb3ff;
  padding: 4px 12px;
  border-radius: 999px;
  font-size: 14px;
}

.tag.tag-warn {
  background: #3a2e1a;
  color: #e0b34c;
}

.tag.tag-danger {
  background: #3a1f22;
  color: #e5534b;
}

.kline-chart {
  height: 320px;
  margin-top: 10px;
}

.overview-charts {
  margin-top: 10px;
}

.chart-inline-cell {
  width: 100%;
}

.chart-inline-tabs {
  margin: 0 0 8px;
}

.chart-inline-tabs .tab-btn {
  padding: 4px 10px;
  font-size: 12px;
}

.overview-charts .chart-inline-mini {
  height: 220px;
  background: #0f1117;
  border: 1px solid #23262f;
  border-radius: 4px;
  cursor: pointer;
}

.overview-charts .chart-inline-mini:hover {
  border-color: #4c7cf0;
}

.overview-charts .mini-chart {
  height: 220px;
}

.chart-loading,
.peer-mini-chart.chart-loading,
.mini-chart.chart-loading {
  display: flex;
  align-items: center;
  justify-content: center;
  color: #6b7280;
  font-size: 12px;
  user-select: none;
}

.reason-summary {
  font-size: 17px;
  line-height: 1.65;
  margin-bottom: 12px;
}

.reason-list {
  margin: 0 0 14px;
  padding-left: 20px;
  color: #c7cbdb;
  font-size: 16px;
  line-height: 1.75;
}

.theme-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 14px;
}

.theme-tag {
  background: #2a3350;
  color: #a9c1ff;
  padding: 5px 14px;
  border-radius: 999px;
  font-size: 14px;
}

.confidence-row {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 15px;
  color: #9aa1b2;
}

.confidence-bar {
  flex: 1;
  max-width: 200px;
  height: 6px;
  background: #23262f;
  border-radius: 999px;
  overflow: hidden;
}

.confidence-fill {
  height: 100%;
  background: linear-gradient(90deg, #4c7cf0, #7fd3ff);
}

.news-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.news-list li {
  border-bottom: 1px solid #23262f;
  padding-bottom: 12px;
  font-size: 16px;
  line-height: 1.6;
}

.news-list .news-source {
  color: #8fb3ff;
  font-size: 13px;
  margin-right: 8px;
}

.news-list .news-title {
  font-weight: 600;
}

.news-list .news-content {
  color: #9aa1b2;
  margin-top: 6px;
  font-size: 15px;
  line-height: 1.65;
}

.tabs {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 14px;
}

.tab-btn {
  padding: 9px 20px;
  border-radius: 999px;
  border: 1px solid #2a2e3a;
  background: transparent;
  color: #9aa1b2;
  cursor: pointer;
  font-size: 15px;
}

.tab-btn.active {
  background: #4c7cf0;
  color: #fff;
  border-color: #4c7cf0;
}

.dim-warning {
  color: #f2c94c;
  font-size: 14px;
  margin-bottom: 10px;
}

.peers-table-wrap {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}

.peers-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 15px;
}

.peers-table.peers-table--hot-reason {
  min-width: 980px;
  table-layout: fixed;
}

.peers-table th {
  text-align: left;
  color: #9aa1b2;
  font-weight: 500;
  padding: 12px 14px;
  border-bottom: 1px solid #23262f;
  font-size: 14px;
}

.peers-table td {
  padding: 16px 14px;
  border-bottom: 1px solid #1c1f28;
  vertical-align: top;
  line-height: 1.6;
}

.peers-table .stock-change {
  font-size: 17px;
}

.peers-table.peers-table--hot-reason .hot-reason-col,
.peers-table.peers-table--hot-reason .hot-reason-cell {
  width: 46%;
  min-width: 480px;
}

.peers-table .hot-reason-col,
.peers-table .hot-reason-cell {
  min-width: 480px;
  font-size: 17px;
  line-height: 1.7;
}

.peers-table tr:hover {
  background: #1b1f2b;
}

.peer-code {
  color: #8fb3ff;
  font-size: 15px;
  font-weight: 500;
}

.compare-btn {
  background: transparent;
  border: 1px solid #2a2e3a;
  color: #9aa1b2;
  border-radius: 6px;
  padding: 5px 12px;
  cursor: pointer;
  font-size: 13px;
}

.compare-btn:hover {
  color: #fff;
  border-color: #4c7cf0;
}

.source-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  font-size: 15px;
}

.source-list li {
  padding: 5px 12px;
  border-radius: 999px;
  background: #1b1f2b;
  color: #9aa1b2;
}

.source-list li.ok::before {
  content: "● ";
  color: #2eb872;
}

.source-list li.fail::before {
  content: "● ";
  color: #e5484d;
}

.modal {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.6);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 100;
}

.modal-content {
  background: #171923;
  border-radius: 12px;
  padding: 24px;
  width: 90%;
  max-width: 640px;
  position: relative;
}

.modal-content:has(.compare-chart) {
  width: min(96vw, 1400px);
  max-width: 1400px;
}

.modal-close {
  position: absolute;
  top: 14px;
  right: 16px;
  background: none;
  border: none;
  color: #9aa1b2;
  font-size: 22px;
  cursor: pointer;
}

.compare-chart {
  height: 360px;
  margin-top: 10px;
}

@media (max-width: 640px) {
  .limitup-toolbar-right {
    width: 100%;
  }

  .limitup-search {
    width: 100%;
    min-width: 0;
  }

  #limitupSearchInput {
    min-width: 0;
    font-size: 16px;
    padding: 14px 16px;
  }

  .peers-table {
    font-size: 14px;
  }

  .peers-table td {
    padding: 14px 10px;
  }
}

/* ---------------- 涨停原因分析页面 ---------------- */

.limitup-toolbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 12px;
  margin-bottom: 16px;
}

.limitup-toolbar-right {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 12px;
}

.toolbar-action-btn {
  min-height: 38px;
  padding: 8px 18px;
  border: 1px solid #4c7cf0;
  border-radius: 8px;
  color: #fff;
  background: #4c7cf0;
  font: inherit;
  font-weight: 600;
  cursor: pointer;
  transition: background 0.2s, border-color 0.2s, box-shadow 0.2s, transform 0.2s;
}

.toolbar-action-btn:hover:not(:disabled) {
  border-color: #5f8cff;
  background: #3d68d8;
  box-shadow: 0 6px 18px rgba(76, 124, 240, 0.24);
  transform: translateY(-1px);
}

.toolbar-action-btn:focus-visible {
  outline: 2px solid rgba(142, 182, 255, 0.9);
  outline-offset: 2px;
}

.toolbar-action-btn:disabled {
  border-color: #343846;
  color: #8f96a8;
  background: #292d38;
  box-shadow: none;
  cursor: not-allowed;
  transform: none;
}

.limitup-search {
  position: relative;
  min-width: 360px;
}

#limitupSearchInput {
  width: 100%;
  min-width: 360px;
  padding: 16px 20px;
  font-size: 18px;
  border-radius: 8px;
  border: 1px solid #2a2e3a;
  background: #171923;
  color: #e6e8ef;
  outline: none;
}

#limitupSearchInput:focus {
  border-color: #4c7cf0;
}

.limitup-search .suggest-list li {
  padding: 11px 16px;
  font-size: 16px;
}

.limitup-status {
  display: flex;
  align-items: center;
  gap: 16px;
  flex-wrap: wrap;
  font-size: 13px;
  color: #9aa1b2;
}

.limitup-status .status-dot {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 999px;
  margin-right: 6px;
  background: #6b7280;
}

.limitup-status .status-dot.on {
  background: #2eb872;
}

.linkage-date-field {
  display: flex;
  min-width: 160px;
  padding: 7px 12px;
  flex-direction: column;
  justify-content: center;
  gap: 3px;
  color: #8b93a7;
  font-size: 11px;
  background: rgba(10, 12, 18, 0.78);
  border: 1px solid #343a4f;
  border-radius: 12px;
}

.linkage-date-field input[type="date"] {
  padding: 0;
  color: #f3f4f8;
  font: inherit;
  font-size: 14px;
  color-scheme: dark;
  background: transparent;
  border: 0;
  outline: 0;
  cursor: pointer;
}

/* 统一异步加载反馈：高对比度卡片、旋转标识和轻微呼吸光。 */
.async-loading:not(button) {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 12px;
  width: 100%;
  min-height: 52px;
  padding: 13px 18px;
  border: 1px solid rgba(110, 160, 255, 0.72);
  border-radius: 10px;
  color: #f7f9ff;
  background:
    linear-gradient(110deg, rgba(76, 124, 240, 0.28), rgba(34, 45, 75, 0.92)),
    #171b27;
  box-shadow:
    0 0 0 1px rgba(76, 124, 240, 0.12),
    0 8px 26px rgba(22, 54, 126, 0.28),
    inset 0 1px 0 rgba(255, 255, 255, 0.06);
  font-size: 15px;
  font-weight: 650;
  letter-spacing: 0.01em;
  animation: async-loading-glow 1.8s ease-in-out infinite;
}

.limitup-status.async-loading,
.limitup-summary.async-loading,
.sentiment-operability-summary.async-loading,
.sentiment-market-stats.async-loading,
.strategy-advice-action.async-loading,
.strategy-advice-summary.async-loading,
.linkage-summary.async-loading {
  margin: 8px 0 14px;
}

.status-bar.async-loading {
  color: #f7f9ff;
}

.chart-loading.async-loading {
  min-height: 100%;
  margin: 0;
  border-radius: inherit;
  font-size: 13px;
}

.suggest-list.async-loading {
  display: flex;
  min-height: 68px;
  padding: 14px 18px;
  overflow: hidden;
  z-index: 40;
  font-size: 14px;
}

.suggest-list.async-loading .async-loading__spinner {
  width: 21px;
  height: 21px;
}

.async-loading__spinner {
  flex: 0 0 auto;
  width: 24px;
  height: 24px;
  border: 3px solid rgba(255, 255, 255, 0.24);
  border-top-color: #8fb0ff;
  border-right-color: #5f8eff;
  border-radius: 50%;
  filter: drop-shadow(0 0 5px rgba(110, 160, 255, 0.58));
  animation: async-loading-spin 0.72s linear infinite;
}

.async-loading__label {
  min-width: 0;
  line-height: 1.45;
}

button.async-loading {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  color: #fff;
  background: #315fce;
  box-shadow: 0 0 0 3px rgba(76, 124, 240, 0.2);
}

button.async-loading .async-loading__spinner {
  width: 16px;
  height: 16px;
  border-width: 2px;
}

/* 空图表在异步数据返回前也显示占位，避免出现无反馈的空白区域。 */
[data-chart-id]:empty,
.mini-chart:empty,
.compare-chart:empty,
.linkage-chart:empty,
.strategy-performance-chart:empty,
.strategy-equity-chart:empty {
  position: relative;
}

[data-chart-id]:empty::before,
.mini-chart:empty::before,
.compare-chart:empty::before,
.linkage-chart:empty::before,
.strategy-performance-chart:empty::before,
.strategy-equity-chart:empty::before {
  content: "";
  position: absolute;
  top: calc(50% - 30px);
  left: calc(50% - 14px);
  width: 28px;
  height: 28px;
  border: 3px solid rgba(143, 176, 255, 0.22);
  border-top-color: #6e9fff;
  border-right-color: #4c7cf0;
  border-radius: 50%;
  filter: drop-shadow(0 0 7px rgba(76, 124, 240, 0.55));
  animation: async-loading-spin 0.72s linear infinite;
}

[data-chart-id]:empty::after,
.mini-chart:empty::after,
.compare-chart:empty::after,
.linkage-chart:empty::after,
.strategy-performance-chart:empty::after,
.strategy-equity-chart:empty::after {
  content: "正在加载图表…";
  position: absolute;
  top: calc(50% + 12px);
  left: 12px;
  right: 12px;
  color: #dbe5ff;
  font-size: 14px;
  font-weight: 600;
  text-align: center;
}

#quantAntiFallPanel.quant-loading::after,
#quantGainPanel.quant-loading::after,
#quantDeclinePanel.quant-loading::after {
  content: "正在加载数据…";
  color: #fff;
  background: rgba(12, 17, 31, 0.84);
  border: 1px solid rgba(110, 160, 255, 0.52);
  font-size: 17px;
  font-weight: 650;
  letter-spacing: 0.04em;
  backdrop-filter: blur(3px);
  animation: async-loading-glow 1.8s ease-in-out infinite;
}

@keyframes async-loading-spin {
  to { transform: rotate(360deg); }
}

@keyframes async-loading-glow {
  0%, 100% { box-shadow: 0 8px 24px rgba(22, 54, 126, 0.2); }
  50% { box-shadow: 0 8px 30px rgba(76, 124, 240, 0.42); }
}

@media (max-width: 640px) {
  .async-loading:not(button) {
    min-height: 48px;
    padding: 11px 13px;
    font-size: 14px;
  }

  .async-loading__spinner {
    width: 21px;
    height: 21px;
  }
}

/* ============ 题材轮动 ============ */

.theme-rotation-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 20px;
}

.theme-rotation-refresh {
  flex: 0 0 auto;
  padding: 10px 18px;
  border: 1px solid #3558aa;
  border-radius: 8px;
  color: #dbe6ff;
  background: #243b75;
  cursor: pointer;
}

.theme-rotation-refresh:hover {
  background: #2f4b91;
}

.theme-rotation-refresh:disabled {
  cursor: wait;
  opacity: 0.6;
}

.theme-rotation-date-tabs {
  display: flex;
  gap: 8px;
  margin-bottom: 14px;
  padding-bottom: 6px;
  overflow-x: auto;
}

.theme-rotation-date-tab {
  display: flex;
  flex: 0 0 auto;
  flex-direction: column;
  align-items: flex-start;
  gap: 4px;
  min-width: 112px;
  padding: 9px 12px;
  border: 1px solid #282d3a;
  border-radius: 8px;
  color: #aeb5c7;
  background: #171a23;
  cursor: pointer;
}

.theme-rotation-date-tab:hover,
.theme-rotation-date-tab.active {
  border-color: #4c7cf0;
  color: #edf2ff;
  background: rgba(76, 124, 240, 0.13);
}

.theme-rotation-date-tab small {
  font-size: 11px;
}

.snapshot-live {
  color: #ff9a9f;
}

.snapshot-final {
  color: #7fd6a8;
}

.snapshot-backfill {
  color: #d6ad67;
}

.theme-rotation-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 16px;
  margin-bottom: 14px;
  padding: 10px 14px;
  border: 1px solid #262b37;
  border-radius: 8px;
  color: #8f97aa;
  background: #141720;
  font-size: 12px;
}

.theme-rotation-meta p {
  flex-basis: 100%;
  margin: 0;
  color: #c5a468;
}

.theme-rotation-badge {
  padding: 3px 8px;
  border-radius: 999px;
  background: rgba(154, 161, 178, 0.12);
  font-weight: 600;
}

.theme-rotation-boards {
  display: flex;
  flex-direction: column;
  gap: 20px;
}

.theme-rotation-board-group {
  min-width: 0;
}

.theme-rotation-board-group-title {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 9px;
  padding: 0 2px;
}

.theme-rotation-board-group-title h2 {
  margin: 0;
  color: #e3e7f1;
  font-size: 16px;
  font-weight: 650;
}

.theme-rotation-board-group-title span {
  color: #737c91;
  font-size: 12px;
}

.theme-rotation-board-list {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.theme-rotation-board {
  overflow: hidden;
  border: 1px solid #262b37;
  border-radius: 10px;
  background: #171a23;
}

.theme-rotation-board.is-expanded {
  border-color: #3558aa;
}

.theme-rotation-board-toggle {
  display: grid;
  grid-template-columns: 42px minmax(160px, 1fr) 100px 24px;
  align-items: center;
  width: 100%;
  padding: 13px 15px;
  border: 0;
  color: #e3e7f1;
  background: transparent;
  text-align: left;
  cursor: pointer;
}

.theme-rotation-board-toggle:hover {
  background: #1d212c;
}

.theme-rotation-board-rank {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 27px;
  height: 27px;
  border-radius: 7px;
  color: #b9caff;
  background: rgba(76, 124, 240, 0.16);
  font-weight: 700;
}

.theme-rotation-board-name,
.theme-rotation-stock-table td:nth-child(2) {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.theme-rotation-board-name small,
.theme-rotation-stock-table td:nth-child(2) small {
  color: #6f788c;
  font-size: 11px;
}

.theme-rotation-board-change {
  justify-self: end;
  font-size: 16px;
  font-weight: 700;
}

.theme-rotation-chevron {
  justify-self: end;
  color: #6f788c;
  font-size: 20px;
  transition: transform 0.2s ease;
}

.theme-rotation-board.is-expanded .theme-rotation-chevron {
  transform: rotate(180deg);
}

.theme-rotation-board-body {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(460px, 1fr);
  gap: 16px;
  padding: 16px;
  border-top: 1px solid #262b37;
  background: #12151d;
}

.theme-rotation-kline-section,
.theme-rotation-stock-section {
  min-width: 0;
  padding: 12px;
  border: 1px solid #232834;
  border-radius: 8px;
  background: #151821;
}

.theme-rotation-section-title {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
  margin-bottom: 9px;
  color: #d7dce8;
  font-size: 13px;
}

.theme-rotation-section-title span {
  color: #6f788c;
  font-size: 11px;
}

.theme-rotation-kline {
  width: 100%;
  height: 320px;
}

.theme-rotation-stock-table-wrap {
  overflow-x: auto;
}

.theme-rotation-stock-table {
  width: 100%;
  border-collapse: collapse;
  color: #b9c0cf;
  font-size: 13px;
}

.theme-rotation-stock-table th,
.theme-rotation-stock-table td {
  padding: 7px 8px;
  border-bottom: 1px solid #242936;
  text-align: right;
  white-space: nowrap;
}

.theme-rotation-stock-table th:first-child,
.theme-rotation-stock-table td:first-child,
.theme-rotation-stock-table th:nth-child(2),
.theme-rotation-stock-table td:nth-child(2) {
  text-align: left;
}

.theme-rotation-stock-table tbody tr:last-child td {
  border-bottom: 0;
}

.theme-rotation-stock-rank {
  color: #788298;
  font-weight: 700;
}

.theme-rotation-stock-row.is-expanded td {
  background: rgba(76, 124, 240, 0.07);
}

.theme-rotation-stock-toggle {
  padding: 5px 8px;
  border: 1px solid #334363;
  border-radius: 5px;
  color: #9eb7f4;
  background: #1a2130;
  font-size: 11px;
  white-space: nowrap;
  cursor: pointer;
}

.theme-rotation-stock-toggle:hover {
  border-color: #5274c7;
  color: #d3def8;
}

.theme-rotation-stock-detail-row > td {
  padding: 12px !important;
  border-bottom: 1px solid #30384a !important;
  background: #10131b;
  text-align: left !important;
  white-space: normal !important;
  font-size: 14px;
}

.theme-rotation-stock-detail-loading {
  min-height: 180px;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #7f899e;
}

.theme-rotation-stock-charts {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
}

.theme-rotation-stock-charts section {
  min-width: 0;
  padding: 9px;
  border: 1px solid #262d3b;
  border-radius: 7px;
  background: #151923;
}

.theme-rotation-stock-charts h4 {
  margin: 0 0 6px;
  color: #cbd2e1;
  font-size: 12px;
}

.theme-rotation-stock-chart {
  width: 100%;
  height: 220px;
}

.theme-rotation-stock-info {
  margin-top: 10px;
  padding: 10px 12px;
  border: 1px solid #262d3b;
  border-radius: 7px;
  color: #aeb7c8;
  background: #151923;
  font-size: 14px;
  line-height: 1.65;
}

.theme-rotation-stock-info p {
  margin: 8px 0 0;
}

.theme-rotation-stock-info b,
.theme-rotation-stock-facts b {
  margin-right: 7px;
  color: #d8deea;
}

.theme-rotation-stock-sources {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
  color: #727d92;
  font-size: 11px;
}

.theme-rotation-stock-sources span {
  padding: 2px 6px;
  border-radius: 999px;
  color: #b6c8f4;
  background: rgba(76, 124, 240, 0.14);
}

.theme-rotation-stock-facts {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 18px;
  margin-top: 8px;
  font-size: 13px;
}

.theme-rotation-stock-info details {
  margin-top: 8px;
  color: #8f9aaf;
}

.theme-rotation-stock-info summary {
  color: #aebce0;
  cursor: pointer;
}

.theme-rotation-stock-warning {
  color: #d0a96b;
}

.theme-rotation-no-stocks {
  padding: 24px !important;
  color: #777f91;
  text-align: center !important;
}

.theme-rotation-board .is-up {
  color: #ff6b72;
}

.theme-rotation-board .is-down {
  color: #4ec9a0;
}

.theme-rotation-board .is-flat {
  color: #a7adba;
}

@media (max-width: 980px) {
  .theme-rotation-board-body {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 640px) {
  .theme-rotation-header {
    flex-direction: column;
  }

  .theme-rotation-refresh {
    width: 100%;
  }

  .theme-rotation-board-toggle {
    grid-template-columns: 36px minmax(0, 1fr) 82px 18px;
    padding: 11px 10px;
  }

  .theme-rotation-board-body {
    padding: 10px;
  }

  .theme-rotation-kline {
    height: 260px;
  }

  .theme-rotation-stock-charts {
    grid-template-columns: 1fr;
  }

  .theme-rotation-stock-chart {
    height: 240px;
  }

  .theme-rotation-section-title {
    align-items: flex-start;
    flex-direction: column;
  }
}

@media (prefers-reduced-motion: reduce) {
  .async-loading,
  .async-loading__spinner,
  [data-chart-id]:empty::before,
  .mini-chart:empty::before,
  .compare-chart:empty::before,
  .linkage-chart:empty::before,
  .strategy-performance-chart:empty::before,
  .strategy-equity-chart:empty::before,
  #quantAntiFallPanel.quant-loading::after,
  #quantGainPanel.quant-loading::after,
  #quantDeclinePanel.quant-loading::after {
    animation: none;
  }
}

.limitup-date-picker {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  color: #9aa1b2;
}

#limitupDateSelect {
  padding: 6px 10px;
  border-radius: 6px;
  border: 1px solid #2a2e3a;
  background: #171923;
  color: #e6e8ef;
  font-size: 13px;
}

.limitup-summary {
  color: #9aa1b2;
  font-size: 13px;
  margin-bottom: 12px;
}

.limitup-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 15px;
}

.limitup-table th {
  text-align: left;
  color: #9aa1b2;
  font-weight: 500;
  padding: 12px 14px;
  border-bottom: 1px solid #23262f;
  font-size: 14px;
  white-space: nowrap;
}

.limitup-table td {
  padding: 16px 14px;
  border-bottom: 1px solid #1c1f28;
  vertical-align: top;
  line-height: 1.6;
}

.limitup-table .stock-change {
  font-size: 17px;
  font-weight: 600;
}

.limitup-table .peer-code {
  font-size: 15px;
  font-weight: 500;
}

.limitup-row {
  cursor: pointer;
}

.limitup-row:hover {
  background: #1b1f2b;
}

.limitup-row.expanded {
  background: #1b1f2b;
}

.lian-ban-badge {
  display: inline-block;
  background: #3a1d1f;
  color: #ff8f8f;
  padding: 4px 10px;
  border-radius: 999px;
  font-size: 14px;
  font-weight: 600;
}

.summary-cell {
  min-width: 240px;
  color: #c7cbdb;
  font-size: 15px;
  line-height: 1.65;
}

.confidence-inline {
  color: #9aa1b2;
  font-size: 14px;
}

.detail-row td {
  background: #12141c;
  padding: 16px 18px;
}

.limitup-detail .card {
  margin-bottom: 14px;
}

.limitup-detail .card:last-child {
  margin-bottom: 0;
}

.detail-section {
  margin-bottom: 14px;
}

.detail-section h4 {
  margin: 0 0 8px;
  font-size: 13px;
  color: #9aa1b2;
  font-weight: 500;
}

.detail-reason-list {
  margin: 0;
  padding-left: 18px;
  color: #c7cbdb;
  font-size: 13px;
  line-height: 1.7;
}

.linked-peers-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 12px;
  table-layout: fixed;
  min-width: 980px;
}

.linked-peers-table-wrap {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}

.linked-peers-table .hot-reason-col,
.linked-peers-table .hot-reason-cell {
  width: 46%;
  min-width: 480px;
}

.linked-peers-table th {
  text-align: left;
  color: #9aa1b2;
  font-weight: 500;
  padding: 6px 8px;
  border-bottom: 1px solid #23262f;
}

#view-quant .quant-inline-chart.quant-inline-chart--dual {
  height: 240px;
}

.linked-peers-table td {
  padding: 8px 8px;
  border-bottom: 1px solid #1c1f28;
}

.linked-peers-table tr:hover {
  background: #1b1f2b;
}

.empty-state {
  color: #9aa1b2;
  font-size: 14px;
  text-align: center;
  padding: 30px 0;
}

.chart-preview-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
}

.chart-preview-item {
  background: #0f1117;
  border: 1px solid #23262f;
  border-radius: 8px;
  overflow: hidden;
}

.chart-preview-label {
  padding: 8px 12px;
  font-size: 14px;
  color: #9aa1b2;
  border-bottom: 1px solid #23262f;
}

.mini-chart {
  height: 180px;
  width: 100%;
}

.peers-table .preview-col {
  width: 140px;
  min-width: 140px;
}

.peer-preview-single {
  min-width: 120px;
}

.peer-mini-chart {
  height: 72px;
  min-width: 90px;
  background: #0f1117;
  border: 1px solid #23262f;
  border-radius: 4px;
  cursor: pointer;
}

.peer-mini-chart--single {
  width: 120px;
  min-width: 120px;
}

.peer-mini-chart:hover {
  border-color: #4c7cf0;
}

.chart-preview-tabs {
  display: flex;
  gap: 8px;
  margin: 0 0 14px;
}

.chart-preview-tabs .tab-btn {
  padding: 7px 16px;
  font-size: 14px;
}

.hot-reason-cell {
  min-width: 480px;
  line-height: 1.7;
  color: #c7cbdb;
  font-size: 17px;
  white-space: normal;
  word-break: break-word;
}

@media (max-width: 720px) {
  .limitup-table {
    font-size: 14px;
  }
  .limitup-table td {
    padding: 14px 10px;
  }
  .limitup-table .stock-change {
    font-size: 16px;
  }
  .summary-cell {
    min-width: 160px;
    font-size: 14px;
  }
  .chart-preview-row {
    grid-template-columns: 1fr;
  }
}

.etf-table .etf-chart-col {
  min-width: 260px;
  width: 280px;
}

.etf-volume-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 12px;
}

.etf-volume-header h2 {
  margin-bottom: 6px;
}

.etf-volume-header .subtitle {
  margin: 0;
}

.etf-volume-table {
  min-width: 1380px;
}

.etf-industry-weights {
  min-width: 220px;
  max-width: 320px;
  color: #aeb4c5;
  font-size: 12px;
  line-height: 1.45;
  white-space: normal;
}

.etf-style-tag {
  display: inline-block;
  min-width: 64px;
  padding: 3px 8px;
  border-radius: 999px;
  font-size: 12px;
  font-weight: 700;
  text-align: center;
  white-space: nowrap;
}

.etf-style-tag--large {
  color: #ffd180;
  border: 1px solid rgba(255, 209, 128, 0.35);
  background: rgba(255, 209, 128, 0.1);
}

.etf-style-tag--mid {
  color: #82b1ff;
  border: 1px solid rgba(130, 177, 255, 0.35);
  background: rgba(130, 177, 255, 0.1);
}

.etf-style-tag--small {
  color: #80cbc4;
  border: 1px solid rgba(128, 203, 196, 0.35);
  background: rgba(128, 203, 196, 0.1);
}

.etf-style-tag--growth {
  color: #ce93d8;
  border: 1px solid rgba(206, 147, 216, 0.35);
  background: rgba(206, 147, 216, 0.1);
}

.etf-volume-time {
  min-width: 110px;
  color: #c7cbdb;
  font-weight: 600;
  white-space: nowrap;
  vertical-align: top;
}

.etf-volume-active-row {
  background: rgba(255, 138, 128, 0.035);
}

.etf-volume-ratio {
  display: inline-block;
  min-width: 58px;
  padding: 3px 8px;
  border: 1px solid rgba(255, 138, 128, 0.38);
  border-radius: 999px;
  color: #ff8a80;
  background: rgba(255, 138, 128, 0.09);
  font-weight: 700;
  text-align: center;
}

.etf-volume-quiet-row td {
  color: #6f7687;
}

.etf-volume-direction {
  display: inline-block;
  min-width: 72px;
  padding: 3px 8px;
  border-radius: 999px;
  font-weight: 700;
  text-align: center;
  white-space: nowrap;
}

.etf-volume-direction--up {
  color: #ff8a80;
  border: 1px solid rgba(255, 138, 128, 0.38);
  background: rgba(255, 138, 128, 0.09);
}

.etf-volume-direction--down {
  color: #69f0ae;
  border: 1px solid rgba(105, 240, 174, 0.38);
  background: rgba(105, 240, 174, 0.09);
}

.etf-volume-direction--flat {
  color: #c7cbdb;
  border: 1px solid rgba(199, 203, 219, 0.28);
  background: rgba(199, 203, 219, 0.08);
}

.etf-chart-cell {
  min-width: 240px;
}

.etf-inline-tabs {
  margin: 0 0 8px;
}

.etf-inline-tabs .tab-btn {
  padding: 4px 10px;
  font-size: 12px;
}

.etf-inline-chart {
  height: 120px;
  min-width: 220px;
  background: #0f1117;
  border: 1px solid #23262f;
  border-radius: 4px;
  cursor: pointer;
}

.etf-inline-chart:hover {
  border-color: #4c7cf0;
}

/* ---------------- 竞价异动 · 机会 ---------------- */

.auction-opp-block {
  border: 1px solid #23262f;
  border-radius: 8px;
  margin-bottom: 10px;
  overflow: hidden;
}

/* 一字涨停组置顶，用红色左边框和标题色和题材标签组区分开 */
.auction-opp-block--limit-up {
  border-color: #4a2730;
  border-left: 3px solid #e05561;
}

.auction-opp-block--limit-up .auction-opp-header .stock-name {
  color: #f28b8b;
}

.auction-opp-header {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 12px 16px;
  cursor: pointer;
  background: #151821;
  user-select: none;
}

.auction-opp-header:hover {
  background: #1b1f2b;
}

.auction-opp-toggle {
  color: #9aa1b2;
  font-size: 12px;
  width: 14px;
  flex-shrink: 0;
  transition: transform 0.15s ease;
}

.auction-opp-block.expanded .auction-opp-toggle {
  transform: rotate(90deg);
}

.auction-opp-body {
  padding: 0 12px 12px;
}

.auction-opp-block:not(.expanded) .auction-opp-body {
  display: none;
}

.auction-opportunity-table th.stock-name-col,
.auction-opportunity-table td.stock-name-col {
  min-width: 140px;
  width: 140px;
  white-space: nowrap;
}

.auction-opportunity-table .summary-cell {
  min-width: 160px;
  max-width: 200px;
  font-size: 14px;
}

.auction-opportunity-table .chart-col {
  min-width: 340px;
  width: 360px;
}

.fupan-solo-table th.stock-name-col,
.fupan-solo-table td.stock-name-col {
  min-width: 200px;
  width: 220px;
  white-space: normal;
  line-height: 1.5;
}

#view-material-search .material-search-table .hit-dates-col {
  width: 108px;
  min-width: 96px;
  max-width: 120px;
  white-space: nowrap;
  font-size: 13px;
  color: #9aa1b2;
}

#view-material-search .material-search-table .hit-dates-col.hit-dates-multiline {
  white-space: normal;
  line-height: 1.5;
  vertical-align: top;
}

#view-material-search .material-search-table .source-col {
  width: 84px;
  min-width: 76px;
  max-width: 92px;
  padding-right: 10px;
  vertical-align: top;
}

#view-material-search .material-search-table .source-tag {
  display: block;
  margin-bottom: 4px;
  font-size: 12px;
  line-height: 1.35;
  color: #9aa1b2;
  word-break: break-all;
}

#view-material-search .material-search-table .source-tag:last-child {
  margin-bottom: 0;
}

#view-material-search .material-search-table .summary-col {
  min-width: 360px;
  width: 38%;
  max-width: none;
}

#view-material-search .material-search-table .summary-cell {
  min-width: 360px;
  max-width: none;
  width: 38%;
  font-size: 14px;
  line-height: 1.6;
  word-break: break-word;
}

#view-material-search .ms-stock-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  margin-bottom: 6px;
}

#view-material-search .ms-stock-tags .tag {
  font-size: 11px;
  padding: 2px 6px;
}

#view-material-search .ms-stock-tags .tag.tag-muted {
  opacity: 0.55;
  border-style: dashed;
}

#view-material-search .ms-stock-business {
  font-size: 12px;
  line-height: 1.45;
  color: #a8adb8;
}

#view-material-search .ms-stock-highlight {
  font-size: 12px;
  line-height: 1.45;
  color: #b8c4d9;
}

#view-material-search .ms-stock-meta-label {
  display: inline-block;
  margin-right: 4px;
  padding: 0 4px;
  border-radius: 3px;
  font-size: 10px;
  line-height: 1.5;
  color: #8ea6cc;
  background: rgba(88, 126, 180, 0.18);
}

#view-material-search .ms-stock-business-muted {
  opacity: 0.65;
}

#view-material-search .ms-stock-reason {
  margin-top: 6px;
  font-size: 12px;
  line-height: 1.45;
  color: #c5cad3;
}

.auction-opp-chart-cell {
  min-width: 320px;
}

.auction-opp-inline-tabs {
  margin: 0 0 8px;
}

.auction-opp-inline-tabs .tab-btn {
  padding: 4px 10px;
  font-size: 12px;
}

.auction-opp-inline-chart {
  height: 140px;
  min-width: 300px;
  background: #0f1117;
  border: 1px solid #23262f;
  border-radius: 4px;
  cursor: pointer;
}

.auction-opp-inline-chart:hover {
  border-color: #4c7cf0;
}

/* ---------------- 情绪分析页面 ---------------- */

.sentiment-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 18px;
}

.sentiment-card--wide {
  grid-column: 1 / -1;
}

.sentiment-us-overnight-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 14px;
  margin-top: 14px;
}

.sentiment-us-overnight-rank {
  min-width: 0;
  overflow: hidden;
  border: 1px solid #23262f;
  border-radius: 10px;
  background: #12141c;
}

.sentiment-us-overnight-rank-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
  padding: 12px 14px;
  border-bottom: 1px solid #23262f;
}

.sentiment-us-overnight-rank-head h3 {
  margin: 0;
  font-size: 18px;
}

.sentiment-us-overnight-rank-head span {
  color: #777f91;
  font-size: 14px;
}

.sentiment-us-overnight-table {
  min-width: 1200px;
  font-size: 14px;
}

.sentiment-us-overnight-table th {
  padding: 10px;
  font-size: 14px;
}

.sentiment-us-overnight-table td {
  padding: 10px;
  line-height: 1.45;
}

.sentiment-us-overnight-table .stock-change,
.sentiment-us-overnight-table .peer-code {
  font-size: 14px;
}

.sentiment-us-overnight-table .peer-code small {
  display: block;
  max-width: 130px;
  margin-top: 3px;
  overflow: hidden;
  color: #777f91;
  font-size: 13px;
  font-weight: 400;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.sentiment-us-overnight-industry {
  min-width: 110px;
  max-width: 160px;
  white-space: normal;
}

.sentiment-us-overnight-business {
  min-width: 260px;
  max-width: 380px;
  white-space: normal;
}

.sentiment-us-overnight-business span {
  display: -webkit-box;
  overflow: hidden;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
}

.sentiment-us-overnight-table a {
  color: #8eb6ff;
  text-decoration: none;
}

.sentiment-us-overnight-no-row {
  color: #777f91;
  text-align: center;
}

.sentiment-operability-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 18px;
}

.sentiment-operability-head h2 {
  margin: 0 0 6px;
}

.sentiment-operability-summary {
  margin: 0;
  color: #9aa1b2;
  font-size: 14px;
}

.sentiment-operability-score {
  width: 86px;
  height: 86px;
  flex: 0 0 86px;
  border-radius: 50%;
  border: 5px solid #f2c94c;
  background: rgba(242, 201, 76, 0.08);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}

.sentiment-operability-score b {
  font-size: 28px;
  line-height: 1;
}

.sentiment-operability-score span {
  margin-top: 5px;
  color: #9aa1b2;
  font-size: 12px;
}

.sentiment-operability-score.very_strong,
.sentiment-operability-score.strong {
  border-color: #e5484d;
  background: rgba(229, 72, 77, 0.09);
}

.sentiment-operability-score.weak,
.sentiment-operability-score.very_weak {
  border-color: #2eb872;
  background: rgba(46, 184, 114, 0.09);
}

.sentiment-operability-warnings {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: 12px 0 0;
}

.sentiment-operability-warnings span {
  color: #ff9b9f;
  background: rgba(229, 72, 77, 0.1);
  border: 1px solid rgba(229, 72, 77, 0.28);
  border-radius: 999px;
  padding: 4px 10px;
  font-size: 12px;
}

.sentiment-factor-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 12px;
  margin-top: 16px;
}

.sentiment-factor-item {
  padding: 12px;
  border: 1px solid #23262f;
  border-radius: 9px;
  background: #12141c;
}

.sentiment-factor-item.unavailable {
  opacity: 0.55;
}

.sentiment-factor-head,
.sentiment-factor-meta {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}

.sentiment-style-badge {
  border: 1px solid #34394a;
  border-radius: 999px;
  padding: 7px 14px;
  color: #c7cbdb;
  background: #171a23;
  font-weight: 700;
}

.sentiment-style-badge.small_cap {
  color: #ff9b9f;
  border-color: rgba(229, 72, 77, 0.45);
  background: rgba(229, 72, 77, 0.1);
}

.sentiment-style-badge.large_cap {
  color: #70a1ff;
  border-color: rgba(76, 124, 240, 0.45);
  background: rgba(76, 124, 240, 0.1);
}

.sentiment-style-signals {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: 10px;
  margin-top: 16px;
}

.sentiment-style-signal {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 12px;
  border: 1px solid #23262f;
  border-radius: 9px;
  background: #12141c;
}

.sentiment-style-signal.unavailable {
  opacity: 0.5;
}

.sentiment-style-signal span {
  color: #c7cbdb;
  font-size: 13px;
}

.sentiment-style-signal small {
  display: block;
  margin-top: 3px;
  color: #737b8f;
}

.sentiment-style-signal b {
  font-size: 16px;
}

.sentiment-style-advice {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 18px;
  margin-top: 12px;
  color: #9aa1b2;
  font-size: 13px;
}

.sentiment-style-advice b {
  color: #f2c94c;
}

@media (max-width: 900px) {
  .sentiment-style-signals {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

.sentiment-factor-head {
  color: #c7cbdb;
  font-size: 14px;
}

.sentiment-factor-head b {
  font-size: 17px;
}

.sentiment-factor-bar {
  height: 7px;
  margin: 10px 0 8px;
  border-radius: 999px;
  background: #1c1f28;
  overflow: hidden;
}

.sentiment-factor-bar i {
  display: block;
  height: 100%;
  border-radius: inherit;
  background: #f2c94c;
}

.sentiment-factor-item.positive .sentiment-factor-bar i {
  background: #e5484d;
}

.sentiment-factor-item.negative .sentiment-factor-bar i {
  background: #2eb872;
}

.sentiment-factor-meta {
  color: #737b8f;
  font-size: 11px;
}

.sentiment-market-card h2 {
  margin: 0;
  font-size: 16px;
}

.sentiment-market-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 10px;
  margin-bottom: 8px;
}

.sentiment-market-stats {
  display: flex;
  align-items: center;
  gap: 14px;
  font-size: 14px;
  color: #c7cbdb;
}

.sentiment-market-stat {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.sentiment-market-stat b {
  font-size: 18px;
  font-weight: 700;
}

.sentiment-market-stat.up b {
  color: #e5484d;
}

.sentiment-market-stat.down b {
  color: #2eb872;
}

.sentiment-market-stat.flat b {
  color: #f2c94c;
}

.sentiment-market-chart {
  width: 100%;
  height: 220px;
}

.sentiment-red-heat-chart {
  height: 260px;
}

.sentiment-seal-rate-chart {
  height: 260px;
  min-width: 0;
}

.sentiment-seal-rate-body {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
  align-items: stretch;
}

.sentiment-seal-rate-panel {
  min-width: 0;
}

.sentiment-seal-rate-panel h3 {
  margin: 0 0 8px;
  color: #9aa1b2;
  font-size: 13px;
  font-weight: 600;
}

.sentiment-red-heat-body {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
  align-items: stretch;
}

.sentiment-red-heat-main {
  min-width: 0;
}

.sentiment-red-heat-daily {
  min-width: 0;
  display: flex;
  flex-direction: column;
}

.sentiment-red-heat-daily h3 {
  margin: 0 0 8px;
  font-size: 13px;
  color: #9aa1b2;
  font-weight: 600;
}

.sentiment-red-heat-daily-chart {
  height: 260px;
  min-width: 0;
}

.sentiment-index-sr-body {
  display: grid;
  grid-template-columns: minmax(220px, 280px) 1fr;
  gap: 16px;
  align-items: stretch;
}

.sentiment-index-sr-zones {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
}

.sentiment-index-sr-col h3 {
  margin: 0 0 8px;
  font-size: 13px;
  color: #9aa1b2;
  font-weight: 600;
}

.sentiment-index-sr-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.sentiment-index-sr-list li {
  background: #12141c;
  border: 1px solid #23262f;
  border-radius: 8px;
  padding: 8px 10px;
  font-size: 13px;
  line-height: 1.4;
}

.sentiment-index-sr-list li.support {
  border-color: rgba(46, 184, 114, 0.35);
}

.sentiment-index-sr-list li.resistance {
  border-color: rgba(229, 72, 77, 0.35);
}

.sentiment-index-sr-list .zone-range {
  font-weight: 600;
  color: #c7cbdb;
}

.sentiment-index-sr-list .zone-meta {
  color: #9aa1b2;
  font-size: 12px;
  margin-top: 2px;
}

.sentiment-index-sr-chart {
  height: 280px;
  min-width: 0;
}

.sentiment-red-heat-legend {
  display: flex;
  flex-wrap: wrap;
  gap: 10px 16px;
  margin-bottom: 8px;
  font-size: 12px;
  color: #9aa1b2;
}

.sentiment-red-heat-legend-item {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.sentiment-red-heat-legend-item i {
  width: 10px;
  height: 10px;
  border-radius: 2px;
  display: inline-block;
}

.sentiment-heat-badge {
  display: inline-flex;
  align-items: center;
  padding: 2px 10px;
  border-radius: 999px;
  font-size: 13px;
  font-weight: 600;
  border: 1px solid transparent;
}

.sentiment-heat-badge.cold { color: #8eb6ff; background: rgba(76, 124, 240, 0.12); border-color: rgba(76, 124, 240, 0.35); }
.sentiment-heat-badge.slightly_cold { color: #9ec5ef; background: rgba(107, 155, 209, 0.12); border-color: rgba(107, 155, 209, 0.35); }
.sentiment-heat-badge.medium { color: #f2c94c; background: rgba(242, 201, 76, 0.12); border-color: rgba(242, 201, 76, 0.35); }
.sentiment-heat-badge.hot { color: #f2994a; background: rgba(242, 153, 74, 0.12); border-color: rgba(242, 153, 74, 0.35); }
.sentiment-heat-badge.very_hot { color: #ff8a8f; background: rgba(229, 72, 77, 0.12); border-color: rgba(229, 72, 77, 0.35); }

@media (max-width: 900px) {
  .sentiment-grid {
    grid-template-columns: 1fr;
  }
  .sentiment-us-overnight-grid {
    grid-template-columns: 1fr;
  }
  .sentiment-index-sr-body {
    grid-template-columns: 1fr;
  }
  .sentiment-red-heat-body {
    grid-template-columns: 1fr;
  }
  .sentiment-seal-rate-body {
    grid-template-columns: 1fr;
  }
}

.sentiment-candidate-list {
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.sentiment-candidate {
  background: #12141c;
  border: 1px solid #23262f;
  border-radius: 10px;
  padding: 14px 16px;
}

.sentiment-candidate-head {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 10px;
  margin-bottom: 10px;
}

.sentiment-candidate-name {
  font-size: 17px;
  font-weight: 600;
}

.sentiment-candidate-body {
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
  color: #9aa1b2;
  font-size: 14px;
}

.sentiment-candidate-item b {
  color: #e6e8ef;
  font-weight: 600;
  margin-left: 4px;
}

.sentiment-candidate-chart {
  margin-top: 12px;
}

.sentiment-candidate-chart .overview-charts {
  min-height: 180px;
}

.sentiment-sector-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.sentiment-sector-row {
  cursor: pointer;
  padding: 6px 0;
}

.sentiment-sector-bar-row {
  display: flex;
  align-items: center;
  gap: 10px;
}

.sentiment-sector-name {
  min-width: 110px;
  font-size: 14px;
  color: #c7cbdb;
}

.sentiment-sector-bar-track {
  flex: 1;
  height: 14px;
  background: #1c1f28;
  border-radius: 999px;
  overflow: hidden;
}

.sentiment-sector-bar-fill {
  height: 100%;
  background: linear-gradient(90deg, #4c7cf0, #ff8f8f);
  border-radius: 999px;
}

.sentiment-sector-count {
  min-width: 48px;
  text-align: right;
  font-size: 13px;
  color: #9aa1b2;
}

.sentiment-sector-score {
  min-width: 48px;
  text-align: right;
  color: #f2c94c;
  font-size: 13px;
  font-weight: 600;
}

.sentiment-sector-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 14px;
  margin: 5px 0 0 120px;
  color: #737b8f;
  font-size: 11px;
}

.sentiment-sector-stocks {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: 10px 0 4px 120px;
}

.sentiment-sector-row:hover .sentiment-sector-name {
  color: #8fb3ff;
}

.sentiment-stock-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: #1b1f2b;
  color: #c7cbdb;
  padding: 4px 10px;
  border-radius: 999px;
  font-size: 13px;
}

.sentiment-stock-chip .peer-code {
  font-size: 12px;
}

.sentiment-stock-chip .tag {
  padding: 2px 8px;
  font-size: 12px;
}

@media (max-width: 900px) {
  .sentiment-factor-grid {
    grid-template-columns: 1fr 1fr;
  }
}

@media (max-width: 600px) {
  .sentiment-operability-head {
    align-items: flex-start;
  }
  .sentiment-factor-grid {
    grid-template-columns: 1fr;
  }
  .sentiment-sector-meta,
  .sentiment-sector-stocks {
    margin-left: 0;
  }
}

/* ============ 策略信号与回测 ============ */

.strategy-toolbar {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  align-items: center;
  margin-bottom: 14px;
}

.strategy-toolbar label {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 13px;
  color: #9aa1b2;
}

.strategy-toolbar select,
.strategy-toolbar input[type="text"],
.strategy-toolbar input[type="date"],
.strategy-toolbar input[type="number"] {
  background: #171a22;
  border: 1px solid #2a2e3a;
  color: #e6e8ef;
  border-radius: 6px;
  padding: 6px 10px;
  font-size: 13px;
}

.strategy-toolbar input[type="date"] {
  min-width: 150px;
  color-scheme: dark;
  cursor: pointer;
}

.strategy-toolbar input[type="date"]::-webkit-calendar-picker-indicator {
  cursor: pointer;
  opacity: 0.9;
  filter: invert(0.85);
}

.strategy-toolbar input[type="date"]::-webkit-datetime-edit-fields-wrapper {
  color: #e6e8ef;
}

.strategy-backtest-form label {
  flex-direction: column;
  align-items: flex-start;
}

.strategy-factor-row,
.strategy-factor-grid {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}

.strategy-factor-chip {
  background: #171a22;
  border: 1px solid #2a2e3a;
  border-radius: 8px;
  padding: 8px 12px;
  min-width: 120px;
}

.strategy-factor-chip .label {
  display: block;
  font-size: 12px;
  color: #9aa1b2;
  margin-bottom: 4px;
}

.strategy-factor-chip .value {
  font-size: 14px;
  color: #e6e8ef;
  font-weight: 600;
}

.strategy-signal-badge {
  display: inline-block;
  padding: 2px 10px;
  border-radius: 999px;
  font-size: 12px;
  font-weight: 600;
}

.strategy-signal-buy {
  background: rgba(239, 83, 80, 0.15);
  color: #ff8a80;
}

.strategy-signal-sell {
  background: rgba(76, 175, 80, 0.15);
  color: #81c784;
}

.strategy-signal-hold {
  background: rgba(158, 158, 158, 0.15);
  color: #bdbdbd;
}

.strategy-metrics {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap: 12px;
}

.strategy-metric-card {
  background: #171a22;
  border: 1px solid #2a2e3a;
  border-radius: 8px;
  padding: 12px;
}

.strategy-metric-card .label {
  display: block;
  font-size: 12px;
  color: #9aa1b2;
  margin-bottom: 6px;
}

.strategy-metric-card .value {
  font-size: 20px;
  font-weight: 700;
  color: #8fb0ff;
}

.strategy-equity-chart {
  width: 100%;
  height: 360px;
}

.strategy-triggers {
  max-width: 280px;
  font-size: 12px;
  color: #9aa1b2;
}

.strategy-signal-detail {
  margin-top: 12px;
}

.strategy-signal-header {
  font-size: 18px;
  margin-bottom: 12px;
}

.strategy-triggers-text {
  font-size: 13px;
  color: #9aa1b2;
  margin: 8px 0 0;
}

.strategy-buy-panel {
  border-color: rgba(255, 138, 128, 0.35);
}

.strategy-performance-panel {
  border-color: rgba(83, 205, 143, 0.35);
  margin-bottom: 18px;
}

.strategy-optimizer-panel {
  border-color: rgba(143, 176, 255, 0.42);
  margin-bottom: 18px;
}

.strategy-optimizer-table {
  min-width: 720px;
}

.strategy-ai-review {
  min-width: 180px;
  max-width: 260px;
  white-space: normal !important;
}

.strategy-ai-review span {
  display: inline-block;
  padding: 3px 8px;
  border-radius: 999px;
  font-size: 12px;
  font-weight: 700;
}

.strategy-ai-review small {
  display: block;
  margin-top: 6px;
  color: #9aa1b2;
  line-height: 1.45;
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
}

.strategy-review-good,
.strategy-version-active {
  color: #53cd8f;
  background: rgba(83, 205, 143, 0.14);
}

.strategy-review-mid,
.strategy-review-pending {
  color: #f1c75b;
  background: rgba(241, 199, 91, 0.14);
}

.strategy-review-risk,
.strategy-version-rolled_back {
  color: #ff8a80;
  background: rgba(255, 138, 128, 0.14);
}

.strategy-version-superseded {
  color: #9aa1b2;
  background: rgba(154, 161, 178, 0.12);
}

.strategy-performance-metrics {
  display: grid;
  grid-template-columns: repeat(4, minmax(130px, 1fr));
  gap: 10px;
  margin-bottom: 16px;
}

.strategy-performance-metric {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
  padding: 12px 14px;
  border: 1px solid #2a2e3a;
  border-radius: 8px;
  background: #141720;
  color: #9aa1b2;
  font-size: 13px;
}

.strategy-performance-metric strong {
  color: #e6e8ef;
  font-size: 18px;
}

.strategy-performance-chart-card {
  margin-bottom: 18px;
  padding: 14px 14px 8px;
  border: 1px solid #2a2e3a;
  border-radius: 10px;
  background: #141720;
}

.strategy-performance-chart-header {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
}

.strategy-performance-chart-header .strategy-regime-subtitle {
  margin: 0;
}

.strategy-performance-chart-header span {
  color: #7f8799;
  font-size: 12px;
}

.strategy-performance-chart {
  width: 100%;
  height: 320px;
}

.strategy-performance-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr);
  gap: 18px;
}

.strategy-performance-table,
.strategy-profile-table {
  min-width: 680px;
}

.strategy-performance-return {
  font-weight: 700;
  white-space: nowrap;
}

.strategy-profile-score {
  display: inline-block;
  min-width: 38px;
  padding: 3px 8px;
  border-radius: 999px;
  color: #8fb0ff;
  background: rgba(76, 124, 240, 0.15);
  text-align: center;
  font-weight: 700;
}

.strategy-profile-note {
  min-width: 260px;
  color: #9aa1b2;
  line-height: 1.5;
  white-space: normal !important;
}

@media (max-width: 1100px) {
  .strategy-performance-grid {
    grid-template-columns: 1fr;
  }

  .strategy-performance-metrics {
    grid-template-columns: repeat(2, minmax(130px, 1fr));
  }
}

@media (max-width: 640px) {
  .strategy-performance-chart-header {
    align-items: flex-start;
    flex-direction: column;
    gap: 4px;
  }

  .strategy-performance-chart {
    height: 290px;
  }
}

.strategy-advice-panel {
  border-color: rgba(76, 124, 240, 0.45);
  margin-bottom: 16px;
}

.strategy-advice-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 12px;
}

.strategy-advice-header h2 {
  margin: 0;
}

.strategy-advice-score {
  font-size: 13px;
  color: #9aa1b2;
  padding: 4px 10px;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.04);
}

.strategy-advice-hero {
  margin-bottom: 14px;
}

.strategy-advice-action {
  font-size: 28px;
  font-weight: 700;
  margin-bottom: 6px;
}

.strategy-action-buy {
  color: #ff8a80;
}

.strategy-action-hold {
  color: #ffb74d;
}

.strategy-action-avoid {
  color: #90a4ae;
}

.strategy-advice-summary {
  font-size: 15px;
  color: #c5cad6;
  margin: 0 0 4px;
}

.strategy-advice-position {
  font-size: 13px;
  color: #9aa1b2;
  margin: 0;
}

.strategy-advice-indicators {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 14px;
}

.strategy-advice-ind {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 8px 12px;
  border-radius: 8px;
  border: 1px solid rgba(255, 255, 255, 0.08);
  min-width: 100px;
}

.strategy-advice-ind .label {
  font-size: 11px;
  color: #9aa1b2;
}

.strategy-advice-ind .value {
  font-size: 14px;
  font-weight: 600;
}

.strategy-ind-good {
  border-color: rgba(129, 199, 132, 0.45);
  background: rgba(129, 199, 132, 0.08);
}

.strategy-ind-good .value {
  color: #81c784;
}

.strategy-ind-neutral {
  border-color: rgba(255, 183, 77, 0.35);
}

.strategy-ind-bad {
  border-color: rgba(239, 83, 80, 0.4);
  background: rgba(239, 83, 80, 0.06);
}

.strategy-ind-bad .value {
  color: #ef5350;
}

.strategy-advice-rec {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 12px;
  margin-bottom: 10px;
}

.strategy-advice-rec .label {
  font-size: 12px;
  color: #9aa1b2;
}

.strategy-advice-rec strong {
  color: #4c7cf0;
  font-size: 16px;
}

.strategy-advice-rec-desc {
  flex: 1 1 100%;
  font-size: 13px;
  color: #9aa1b2;
}

.strategy-advice-apply {
  font-size: 12px;
  padding: 4px 10px;
}

.strategy-advice-reasons,
.strategy-advice-blockers {
  margin: 8px 0 0;
  padding-left: 18px;
  font-size: 13px;
}

.strategy-advice-ok {
  color: #a5d6a7;
}

.strategy-advice-warn {
  color: #ef9a9a;
}

.strategy-advice-alts {
  margin-top: 10px;
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  align-items: center;
}

.strategy-advice-alts .label {
  font-size: 12px;
  color: #9aa1b2;
  margin-right: 4px;
}

.strategy-advice-alt-chip {
  font-size: 12px;
  padding: 3px 8px;
  border-radius: 999px;
  border: 1px solid rgba(255, 255, 255, 0.12);
  color: #b0b8c8;
}

.strategy-regime-panel {
  border-color: rgba(129, 199, 132, 0.4);
  margin-bottom: 16px;
}

.strategy-regime-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 8px;
}

.strategy-regime-header h2 {
  margin: 0;
}

.strategy-regime-subtitle {
  font-size: 14px;
  color: #9aa1b2;
  margin: 0 0 8px;
}

.strategy-regime-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
  margin-top: 12px;
}

.strategy-regime-grid--4 {
  grid-template-columns: 1fr 1fr;
}

@media (max-width: 960px) {
  .strategy-regime-grid,
  .strategy-regime-grid--4 {
    grid-template-columns: 1fr;
  }
}

.strategy-buy-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
  margin-bottom: 4px;
}

.strategy-buy-header h2 {
  margin: 0;
}

.strategy-auto-tag {
  font-size: 12px;
  font-weight: normal;
  color: #ff8a80;
  border: 1px solid rgba(255, 138, 128, 0.4);
  border-radius: 999px;
  padding: 2px 8px;
  margin-left: 8px;
}

.strategy-buy-actions {
  display: flex;
  align-items: center;
  gap: 10px;
}

.strategy-buy-meta {
  font-size: 12px;
  color: #9aa1b2;
}

.strategy-buy-row td:first-child {
  color: #ff8a80;
  font-weight: 600;
}

.strategy-market-col,
.strategy-market-cell {
  min-width: 320px;
  width: 320px;
}

.strategy-market-cell {
  padding: 10px 12px !important;
}

.strategy-market-cell .chart-inline-tabs {
  display: flex;
  gap: 6px;
  margin-bottom: 6px;
}

.strategy-market-cell .strategy-buy-mini-chart {
  width: 100%;
  height: 180px;
  background: #0f1117;
  border: 1px solid #23262f;
  border-radius: 6px;
  cursor: pointer;
}

.strategy-market-cell .strategy-buy-mini-chart:hover {
  border-color: #4c7cf0;
}

/* ============ 账号体系：账号区、弹窗、后台管理 ============ */

.auth-account {
  display: flex;
  flex: 0 0 auto;
  align-items: center;
  gap: 8px;
  min-height: 36px;
  padding: 5px 10px;
  border: 1px solid #2a2e3a;
  border-radius: 9px;
  background: #171a22;
  font-size: 13px;
  white-space: nowrap;
}

.auth-account__email {
  max-width: 220px;
  overflow: hidden;
  color: #cfd5e4;
  text-overflow: ellipsis;
}

.auth-badge {
  padding: 2px 8px;
  border: 1px solid rgba(143, 176, 255, 0.4);
  border-radius: 999px;
  color: #8fb0ff;
  background: rgba(76, 124, 240, 0.12);
  font-size: 12px;
}

.auth-btn {
  padding: 6px 14px;
  border: 1px solid #2a2e3a;
  border-radius: 8px;
  color: #9aa1b2;
  background: #1b1f29;
  font-size: 13px;
  font-family: inherit;
  cursor: pointer;
  transition: color 0.15s ease, border-color 0.15s ease, background 0.15s ease;
}

.auth-btn:hover {
  border-color: #4c7cf0;
  color: #e6e8ef;
}

.auth-btn:disabled {
  opacity: 0.6;
  cursor: not-allowed;
}

.auth-btn--primary {
  border-color: rgba(143, 176, 255, 0.55);
  color: #fff;
  background: #4c7cf0;
}

.auth-btn--primary:hover {
  background: #5d89f5;
  color: #fff;
}

.auth-btn--danger {
  border-color: rgba(240, 108, 108, 0.5);
  color: #ff9b9b;
}

.auth-btn--danger:hover {
  border-color: #f06c6c;
  color: #fff;
  background: rgba(240, 108, 108, 0.18);
}

.auth-btn--mini {
  padding: 3px 10px;
  font-size: 12px;
}

.auth-btn--block {
  width: 100%;
  padding: 10px 14px;
  font-size: 14px;
}

.auth-modal {
  position: fixed;
  inset: 0;
  z-index: 200;
  display: flex;
  align-items: flex-start;
  justify-content: center;
  padding: 8vh 16px 40px;
  background: rgba(6, 8, 13, 0.72);
  overflow-y: auto;
}

.auth-modal[hidden] {
  display: none;
}

.auth-modal__panel {
  position: relative;
  width: 100%;
  max-width: 400px;
  padding: 26px 26px 22px;
  border: 1px solid #2a2e3a;
  border-radius: 14px;
  background: #171a22;
  box-shadow: 0 24px 60px rgba(0, 0, 0, 0.55);
}

.auth-modal__panel--wide {
  max-width: 1080px;
}

.auth-modal__close {
  position: absolute;
  top: 10px;
  right: 12px;
  padding: 0 6px;
  border: 0;
  color: #79808f;
  background: transparent;
  font-size: 24px;
  line-height: 1.2;
  cursor: pointer;
}

.auth-modal__close:hover {
  color: #e6e8ef;
}

.auth-modal__title {
  margin: 0 0 18px;
  color: #e6e8ef;
  font-size: 18px;
}

.auth-form {
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.auth-field {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.auth-field__label {
  color: #9aa1b2;
  font-size: 13px;
}

.auth-input {
  width: 100%;
  padding: 9px 12px;
  border: 1px solid #2a2e3a;
  border-radius: 8px;
  color: #e6e8ef;
  background: #0f1117;
  font-size: 14px;
  font-family: inherit;
}

.auth-input:focus {
  border-color: #4c7cf0;
  outline: none;
}

.auth-input--mini {
  width: auto;
  min-width: 130px;
  padding: 6px 10px;
  font-size: 13px;
}

.auth-actions {
  margin-top: 4px;
}

.auth-extra {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 8px;
}

.auth-link {
  padding: 0;
  border: 0;
  color: #8fb0ff;
  background: transparent;
  font-size: 13px;
  font-family: inherit;
  cursor: pointer;
}

.auth-link:hover {
  text-decoration: underline;
}

.auth-hint,
.auth-tip {
  margin: 0;
  color: #79808f;
  font-size: 12px;
  line-height: 1.6;
}

.auth-hint.is-ok {
  color: #57c98b;
}

.auth-hint.is-bad {
  color: #e6a552;
}

.auth-message {
  margin: 0;
  padding: 9px 12px;
  border: 1px solid #2a2e3a;
  border-radius: 8px;
  background: #0f1117;
  font-size: 13px;
  line-height: 1.6;
}

.auth-message.is-ok {
  border-color: rgba(87, 201, 139, 0.45);
  color: #57c98b;
}

.auth-message.is-bad {
  border-color: rgba(240, 108, 108, 0.45);
  color: #ff9b9b;
}

.auth-message.is-info {
  color: #9aa1b2;
}

.auth-tabs {
  display: flex;
  gap: 8px;
  margin-bottom: 16px;
}

.auth-tab {
  padding: 7px 16px;
  border: 1px solid #2a2e3a;
  border-radius: 8px;
  color: #9aa1b2;
  background: #1b1f29;
  font-size: 13px;
  font-family: inherit;
  cursor: pointer;
}

.auth-tab.is-active {
  border-color: #4c7cf0;
  color: #fff;
  background: rgba(76, 124, 240, 0.18);
}

.auth-toolbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  margin-bottom: 14px;
}

.auth-toolbar__label {
  color: #9aa1b2;
  font-size: 13px;
}

.auth-subtitle {
  margin: 18px 0 8px;
  color: #cfd5e4;
  font-size: 14px;
}

.auth-table-host {
  max-height: 46vh;
  overflow: auto;
}

.auth-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
}

.auth-table th,
.auth-table td {
  padding: 8px 10px;
  border-bottom: 1px solid #23262f;
  text-align: left;
  white-space: nowrap;
}

.auth-table th {
  position: sticky;
  top: 0;
  z-index: 1;
  color: #9aa1b2;
  background: #1b1f29;
  font-weight: 500;
}

.auth-table td {
  color: #cfd5e4;
}

.auth-table__empty {
  padding: 20px;
  color: #79808f;
  text-align: center;
}

.auth-state {
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 12px;
}

.auth-state--available,
.auth-state--active {
  color: #57c98b;
  background: rgba(87, 201, 139, 0.14);
}

.auth-state--used,
.auth-state--pending {
  color: #e6a552;
  background: rgba(230, 165, 82, 0.14);
}

.auth-state--expired,
.auth-state--disabled {
  color: #ff9b9b;
  background: rgba(240, 108, 108, 0.14);
}

.auth-state--deleted {
  color: #9aa5b8;
  background: rgba(154, 165, 184, 0.16);
}

.auth-row-actions {
  display: flex;
  gap: 6px;
}

.auth-codes {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 8px;
  margin-bottom: 12px;
}

.auth-code-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  max-width: 100%;
}

.auth-copy-proxy {
  position: fixed;
  top: -1000px;
  left: -1000px;
  width: 1px;
  height: 1px;
  opacity: 0;
  pointer-events: none;
}

.auth-code--link {
  letter-spacing: 0;
  word-break: break-all;
  text-align: left;
}

.auth-code {
  padding: 4px 10px;
  border: 1px dashed rgba(143, 176, 255, 0.5);
  border-radius: 6px;
  color: #8fb0ff;
  background: rgba(76, 124, 240, 0.1);
  font-size: 13px;
  letter-spacing: 1px;
  cursor: pointer;
}

.auth-toast-host {
  position: fixed;
  top: 18px;
  left: 50%;
  z-index: 300;
  display: flex;
  flex-direction: column;
  gap: 8px;
  transform: translateX(-50%);
  pointer-events: none;
}

.auth-toast {
  padding: 9px 18px;
  border: 1px solid #2a2e3a;
  border-radius: 8px;
  color: #e6e8ef;
  background: #1b1f29;
  box-shadow: 0 10px 28px rgba(0, 0, 0, 0.45);
  font-size: 13px;
  opacity: 1;
  transition: opacity 0.3s ease, transform 0.3s ease;
}

.auth-toast.is-out {
  opacity: 0;
  transform: translateY(-8px);
}

.auth-toast--ok {
  border-color: rgba(87, 201, 139, 0.5);
}

.auth-toast--warn {
  border-color: rgba(240, 108, 108, 0.5);
}

@media (max-width: 980px) {
  .auth-account {
    align-self: flex-end;
  }
}

@media (max-width: 640px) {
  .auth-account {
    align-self: stretch;
    justify-content: center;
    flex-wrap: wrap;
  }

  .auth-modal {
    padding: 4vh 10px 30px;
  }
}

/* ============ 个股分析 ============ */

.stock-analysis-search-note {
  margin: -4px 0 16px;
}

#view-stock-analysis .linkage-scan-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 18px;
  margin-top: 10px;
}

.stock-analysis-stats {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  gap: 12px;
  margin-bottom: 16px;
}

.stock-analysis-stat {
  background: #12141c;
  border: 1px solid #23262f;
  border-radius: 8px;
  padding: 12px;
}

.stock-analysis-stat-value {
  font-size: 20px;
  font-weight: 600;
  color: #e6e8ef;
}

.stock-analysis-stat-label {
  margin-top: 4px;
  font-size: 13px;
  color: #9aa1b2;
}

.stock-analysis-stat-extra {
  margin-top: 2px;
  font-size: 12px;
  color: #6b7280;
}

#view-stock-analysis .tag.tag-up {
  background: rgba(229, 72, 77, 0.16);
  color: #ff8a8f;
}

#view-stock-analysis .tag.tag-down {
  background: rgba(46, 184, 114, 0.16);
  color: #57c98b;
}

#view-stock-analysis .tag.tag-muted {
  background: rgba(139, 147, 167, 0.12);
  color: #8b93a7;
}

#view-stock-analysis .stock-analysis-reason {
  max-width: 380px;
  font-size: 13px;
  color: #a8adb8;
}

.stock-analysis-sub {
  font-size: 12px;
  color: #6b7280;
}

.stock-analysis-sr-windows {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 12px;
  margin-top: 16px;
}

.stock-analysis-sr-window {
  background: #12141c;
  border: 1px solid #23262f;
  border-radius: 8px;
  padding: 12px;
}

.stock-analysis-sr-window-head {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 8px 12px;
  margin-bottom: 10px;
}

.stock-analysis-sr-window-head h3 {
  margin: 0;
  font-size: 13px;
  color: #c7cbdb;
  font-weight: 600;
}

.stock-analysis-sr-window-meta {
  font-size: 12px;
  color: #6b7280;
}

.stock-analysis-sr-window-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
  margin-top: 6px;
}

.stock-analysis-sr-window-label {
  min-width: 32px;
  font-size: 12px;
  color: #9aa1b2;
}

.stock-analysis-boards {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}

.stock-analysis-board {
  display: flex;
  align-items: center;
  gap: 8px;
  background: #12141c;
  border: 1px solid #23262f;
  border-radius: 8px;
  padding: 8px 12px;
}

.stock-analysis-board.up {
  border-color: rgba(229, 72, 77, 0.35);
}

.stock-analysis-board.down {
  border-color: rgba(46, 184, 114, 0.35);
}

.stock-analysis-board-name {
  font-size: 14px;
  color: #e6e8ef;
}

.stock-analysis-board .stock-change {
  font-size: 14px;
}

#stockAnalysisTrendChart {
  height: 360px;
}

@media (max-width: 900px) {
  #view-stock-analysis .sentiment-index-sr-body {
    grid-template-columns: 1fr;
  }
}

.hot-page .top-nav {
  margin-bottom: 18px;
}

.hot-page .card {
  margin-top: 16px;
  padding: 18px 20px;
  border: 1px solid #2a2e3a;
  border-radius: 12px;
  background: #171a22;
}

.hot-page .card h2 {
  margin: 0 0 10px;
  font-size: 18px;
}

.hot-day-index,
.hot-list {
  margin: 0;
  padding-left: 22px;
  line-height: 1.7;
}

.hot-day-index li,
.hot-list li {
  margin: 8px 0;
}

.hot-day-index a,
.hot-list a,
.hot-page a {
  color: #8fb0ff;
}

.hot-meta,
.hot-source,
.hot-foot,
.hot-empty,
.hot-heat {
  color: #9aa1b2;
  font-size: 13px;
}

.hot-heat {
  margin-left: 8px;
}

.hot-comment p {
  margin: 0;
  line-height: 1.7;
  color: #e6e8ef;
}

.hot-foot {
  margin-top: 28px;
}

/* ============ 盘前资讯 ============ */

.premarket-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 18px;
  margin-bottom: 16px;
}

.premarket-header .subtitle {
  margin-bottom: 0;
}

.premarket-refresh {
  flex: 0 0 auto;
  padding: 10px 18px;
  border: 1px solid #4c7cf0;
  border-radius: 8px;
  color: #fff;
  background: #4c7cf0;
  font-size: 14px;
  cursor: pointer;
}

.premarket-refresh:hover {
  background: #5d89f5;
}

.premarket-refresh:disabled {
  border-color: #343947;
  color: #7f8799;
  background: #23262f;
  cursor: wait;
}

.premarket-summary {
  display: grid;
  grid-template-columns: repeat(3, minmax(140px, 190px)) 1fr;
  gap: 12px;
  align-items: stretch;
  margin-bottom: 14px;
}

.premarket-summary > div,
.premarket-session-note {
  margin: 0;
  padding: 12px 14px;
  border: 1px solid #23262f;
  border-radius: 9px;
  background: #171923;
}

.premarket-summary > div {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.premarket-summary strong {
  color: #e6e8ef;
  font-size: 16px;
}

.premarket-summary-label {
  color: #6b7280;
  font-size: 12px;
}

.premarket-session-note {
  display: flex;
  align-items: center;
  color: #9aa1b2;
  font-size: 13px;
  line-height: 1.5;
}

.premarket-source-nav {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 18px;
}

.premarket-source-nav a {
  padding: 6px 10px;
  border: 1px solid #2a2e3a;
  border-radius: 999px;
  color: #9aa1b2;
  background: #171923;
  font-size: 12px;
  text-decoration: none;
}

.premarket-source-nav a.is-ok::before,
.premarket-source-nav a.is-error::before {
  content: "";
  display: inline-block;
  width: 7px;
  height: 7px;
  margin-right: 6px;
  border-radius: 50%;
  background: #41b879;
}

.premarket-source-nav a.is-error::before {
  background: #e5484d;
}

.premarket-sections {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 18px;
}

.premarket-section {
  min-width: 0;
  margin-bottom: 0;
  scroll-margin-top: 18px;
}

.premarket-section-us_gainers {
  grid-column: 1 / -1;
}

.premarket-section-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 10px;
  padding-bottom: 12px;
  border-bottom: 1px solid #23262f;
}

.premarket-section-header h2 {
  margin-bottom: 4px;
}

.premarket-section-header p {
  margin: 0;
  color: #6b7280;
  font-size: 12px;
  line-height: 1.45;
}

.premarket-source-link {
  flex: 0 0 auto;
  color: #8fb0ff;
  font-size: 12px;
  text-decoration: none;
}

.premarket-news-list {
  display: flex;
  flex-direction: column;
}

.premarket-news-item {
  padding: 13px 0;
  border-bottom: 1px solid rgba(42, 46, 58, 0.7);
}

.premarket-news-item:last-child {
  padding-bottom: 0;
  border-bottom: 0;
}

.premarket-news-top {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px;
  min-height: 18px;
  margin-bottom: 5px;
}

.premarket-news-top time {
  color: #6b7280;
  font-size: 11px;
}

.premarket-important-badge,
.premarket-stock-badge {
  padding: 2px 6px;
  border-radius: 4px;
  font-size: 11px;
}

.premarket-important-badge {
  color: #ff8a8f;
  background: rgba(229, 72, 77, 0.16);
}

.premarket-stock-badge {
  padding: 4px 8px;
  color: #8fb0ff;
  background: rgba(76, 124, 240, 0.14);
  font-size: 14px;
  font-weight: 600;
  line-height: 1.25;
}

.premarket-news-title {
  color: #e6e8ef;
  font-size: 15px;
  font-weight: 600;
  line-height: 1.5;
  text-decoration: none;
}

.premarket-news-title:hover,
.premarket-news-actions a:hover,
.premarket-source-link:hover {
  color: #abc2ff;
}

.premarket-news-cls .premarket-news-title {
  color: #ff7c82;
}

.premarket-news-cls.level-a .premarket-news-title {
  color: #ff626a;
  font-weight: 700;
}

.premarket-news-summary {
  display: -webkit-box;
  margin: 5px 0 0;
  overflow: hidden;
  color: #9aa1b2;
  font-size: 12px;
  line-height: 1.6;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
}

.premarket-news-actions {
  display: flex;
  gap: 12px;
  margin-top: 8px;
}

.premarket-news-actions a {
  color: #8fb0ff;
  font-size: 12px;
  text-decoration: none;
}

.premarket-news-actions a.is-disabled {
  color: #545b6b;
  pointer-events: none;
}

.premarket-empty {
  padding: 28px 10px;
  color: #6b7280;
  font-size: 13px;
  text-align: center;
}

.premarket-us-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(290px, 1fr));
  gap: 12px;
}

.premarket-us-card {
  min-width: 0;
  padding: 14px;
  border: 1px solid #2a2e3a;
  border-radius: 9px;
  background: #12141c;
}

.premarket-us-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
}

.premarket-us-symbol {
  color: #e6e8ef;
  font-size: 20px;
  font-weight: 700;
  text-decoration: none;
}

.premarket-us-name {
  max-width: 210px;
  margin-top: 4px;
  overflow: hidden;
  color: #9aa1b2;
  font-size: 14px;
  font-weight: 600;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.premarket-us-quote {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  flex: 0 0 auto;
}

.premarket-us-quote strong {
  color: #ff6b72;
  font-size: 18px;
}

.premarket-us-quote span {
  margin-top: 2px;
  color: #a8adb8;
  font-size: 12px;
}

.premarket-us-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
  margin-top: 12px;
}

.premarket-us-tags span {
  padding: 3px 7px;
  border-radius: 5px;
  color: #8fb0ff;
  background: rgba(76, 124, 240, 0.14);
  font-size: 11px;
}

.premarket-us-metrics {
  margin-top: 9px;
  color: #6b7280;
  font-size: 11px;
}

.premarket-us-business {
  margin-top: 10px;
  color: #9aa1b2;
  font-size: 12px;
}

.premarket-us-business-title {
  display: flex;
  align-items: center;
  gap: 6px;
  color: #c7cbdb;
  font-weight: 600;
}

.premarket-us-untranslated {
  padding: 2px 6px;
  border-radius: 4px;
  color: #d8a657;
  background: rgba(216, 166, 87, 0.14);
  font-size: 10px;
  font-weight: 400;
}

.premarket-us-business p {
  margin: 8px 0 0;
  line-height: 1.55;
}

.premarket-us-business-original {
  margin-top: 10px;
  padding-top: 8px;
  border-top: 1px dashed #2a2e3a;
  color: #6b7280;
}

.premarket-us-business-original summary {
  color: #7f8799;
  font-size: 11px;
}

.premarket-us-business-original p {
  font-size: 11px;
}

.premarket-ashare {
  margin-top: 12px;
  padding-top: 10px;
  border-top: 1px solid #2a2e3a;
}

.premarket-ashare-title {
  color: #c7cbdb;
  font-size: 12px;
  font-weight: 600;
}

.premarket-ashare-boards {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
  margin-top: 8px;
}

.premarket-ashare-boards span {
  padding: 3px 7px;
  border-radius: 5px;
  font-size: 11px;
}

.premarket-ashare-boards .is-concept {
  color: #ffc46b;
  background: rgba(240, 168, 76, 0.14);
}

.premarket-ashare-boards .is-industry {
  color: #7fd6a8;
  background: rgba(76, 214, 143, 0.14);
}

.premarket-ashare-peers {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: 9px;
}

.premarket-ashare-peer {
  padding: 9px 10px;
  border: 1px solid #262a35;
  border-radius: 7px;
  background: #171a23;
}

.premarket-ashare-peer-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
}

.premarket-ashare-peer-name {
  color: #dfe3ee;
  font-size: 13px;
  font-weight: 600;
  text-decoration: none;
}

.premarket-ashare-peer-name:hover {
  text-decoration: underline;
}

.premarket-ashare-peer-change {
  flex: 0 0 auto;
  font-size: 13px;
  font-weight: 600;
}

.premarket-ashare-peer-change.is-up {
  color: #ff6b72;
}

.premarket-ashare-peer-change.is-down {
  color: #4ec9a0;
}

.premarket-ashare-peer-flags {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
  margin-top: 7px;
}

.premarket-ashare-flag {
  padding: 2px 6px;
  border-radius: 4px;
  font-size: 10px;
}

.premarket-ashare-flag.is-limitup {
  color: #ff9aa0;
  background: rgba(255, 107, 114, 0.15);
}

.premarket-ashare-flag.is-active {
  color: #8fb0ff;
  background: rgba(76, 124, 240, 0.14);
}

.premarket-ashare-flag.is-relevance {
  color: #9aa1b2;
  background: rgba(154, 161, 178, 0.12);
}

.premarket-ashare-peer-business,
.premarket-ashare-peer-reason {
  margin: 7px 0 0;
  color: #8f96a8;
  font-size: 11px;
  line-height: 1.55;
}

.premarket-ashare-peer-reason {
  color: #a9b1c6;
}

.premarket-ashare-note {
  margin: 8px 0 0;
  color: #6b7280;
  font-size: 11px;
}

@media (max-width: 980px) {
  .premarket-summary {
    grid-template-columns: repeat(3, minmax(120px, 1fr));
  }

  .premarket-session-note {
    grid-column: 1 / -1;
  }

  .premarket-sections {
    grid-template-columns: 1fr;
  }

  .premarket-section-us_gainers {
    grid-column: auto;
  }
}

@media (max-width: 640px) {
  .premarket-header {
    flex-direction: column;
  }

  .premarket-refresh {
    width: 100%;
  }

  .premarket-summary {
    grid-template-columns: 1fr;
  }

  .premarket-session-note {
    grid-column: auto;
  }

  .premarket-section-header {
    flex-direction: column;
  }

  .premarket-us-grid {
    grid-template-columns: 1fr;
  }
}


