/* ============================================================
   InvestResearch Design System v7.1
   精准克制专业 · Bloomberg/雪球参考 · 金融数据终端
   WCAG AA Compliant · Responsive · Performance-Optimized
   ============================================================ */

/* ── CSS Custom Properties (Design Tokens) ───────────────── */
:root {
  /* === Color System — 机构蓝 (Bloomberg参考) === */
  --ir-blue-50:  oklch(0.97 0.008 248);
  --ir-blue-100: oklch(0.90 0.025 248);
  --ir-blue-200: oklch(0.80 0.05 248);
  --ir-blue-300: oklch(0.68 0.08 248);
  --ir-blue-400: oklch(0.56 0.11 248);
  --ir-blue-500: oklch(0.42 0.14 248);
  --ir-blue-600: oklch(0.35 0.12 248);
  --ir-blue-700: oklch(0.28 0.10 248);
  --ir-blue-800: oklch(0.20 0.07 248);
  --ir-blue-900: oklch(0.13 0.05 248);

  --ir-cyan-300: oklch(0.72 0.12 200);
  --ir-cyan-400: oklch(0.65 0.14 200);
  --ir-cyan-500: oklch(0.56 0.16 200);
  --ir-cyan-600: oklch(0.46 0.14 200);

  --ir-green-300: oklch(0.72 0.15 150);
  --ir-green-400: oklch(0.62 0.17 150);

  --ir-success:  oklch(0.45 0.17 150);
  --ir-danger:   oklch(0.48 0.20 28);
  --ir-warning:  oklch(0.47 0.16 83);
  --ir-info:     oklch(0.42 0.14 248);

  --ir-success-bg: oklch(0.90 0.04 160 / 0.5);
  --ir-danger-bg:  oklch(0.90 0.04 25 / 0.4);
  --ir-warning-bg: oklch(0.92 0.06 85 / 0.4);
  --ir-info-bg:    oklch(0.88 0.03 250 / 0.4);

  /* Neutral — 微暖灰 (精准克制) */
  --ir-gray-50:  oklch(0.98 0.002 250);
  --ir-gray-100: oklch(0.94 0.003 250);
  --ir-gray-200: oklch(0.85 0.005 250);
  --ir-gray-300: oklch(0.70 0.005 250);
  --ir-gray-400: oklch(0.48 0.006 250);
  --ir-gray-500: oklch(0.30 0.006 250);
  --ir-gray-600: oklch(0.22 0.006 250);
  --ir-gray-700: oklch(0.15 0.006 250);
  --ir-gray-800: oklch(0.08 0.005 250);
  --ir-gray-900: oklch(0.03 0.005 250);

  --ir-surface-0:  #f7f8fa;
  --ir-surface-1:  #ffffff;
  --ir-surface-2:  #f4f5f7;
  --ir-surface-3:  #eaecf0;

  --ir-border-subtle: #e8ecf0;
  --ir-border-default: #d0d5dd;
  --ir-border-strong: #b0b7c1;

  /* Morningstar 暖金 — 评级/星标 */
  --ir-gold:       #e8a817;
  --ir-gold-light: #fdf3d6;

  /* Typography — 精准克制 (正文+1px微调) */
  --ir-font-sans: 'Plus Jakarta Sans', 'Instrument Sans', system-ui, -apple-system, sans-serif;
  --ir-font-mono: 'JetBrains Mono', 'Cascadia Code', 'Consolas', monospace;

  --ir-text-xs:   clamp(0.6875rem, 0.66rem + 0.1vw, 0.75rem);   /* 11-12px */
  --ir-text-sm:   clamp(0.75rem,   0.73rem + 0.1vw, 0.8125rem); /* 12-13px */
  --ir-text-base: clamp(0.90625rem, 0.88rem + 0.1vw, 0.96875rem); /* 14.5-15.5px */
  --ir-text-lg:   clamp(0.96875rem, 0.94rem + 0.15vw, 1.03125rem);  /* 15.5-16.5px */
  --ir-text-xl:   clamp(1.0625rem, 1.03rem + 0.2vw, 1.1875rem);     /* 17-19px */
  --ir-text-2xl:  clamp(1.0625rem, 1.0rem + 0.3vw, 1.25rem);    /* 17-20px */
  --ir-text-3xl:  clamp(1.25rem,   1.15rem + 0.4vw, 1.5rem);    /* 20-24px */
  --ir-text-4xl:  clamp(1.5rem,    1.35rem + 0.6vw, 1.875rem);  /* 24-30px */
  --ir-text-5xl:  clamp(1.875rem,  1.6rem + 1vw, 2.5rem);       /* 30-40px */

  --ir-leading-tight:  1.25;
  --ir-leading-normal: 1.6;
  --ir-leading-relaxed: 1.75;

  /* === Spacing === */
  --ir-space-1:  0.25rem;
  --ir-space-2:  0.5rem;
  --ir-space-3:  0.75rem;
  --ir-space-4:  1rem;
  --ir-space-5:  1.25rem;
  --ir-space-6:  1.5rem;
  --ir-space-8:  2rem;
  --ir-space-10: 2.5rem;
  --ir-space-12: 3rem;
  --ir-space-16: 4rem;
  --ir-space-20: 5rem;

  /* === Radii — 小圆角稳定感 (雪球参考) === */
  --ir-radius-sm:   0.375rem;
  --ir-radius-md:   0.5rem;
  --ir-radius-lg:   0.5rem;
  --ir-radius-xl:   0.75rem;
  --ir-radius-2xl:  0.875rem;
  --ir-radius-full: 9999px;

  /* === Shadows — Morningstar 克制风格 === */
  --ir-shadow-sm:  0 1px 3px rgba(0,0,0,0.05);
  --ir-shadow-md:  0 1px 4px rgba(0,0,0,0.06), 0 1px 2px rgba(0,0,0,0.04);
  --ir-shadow-lg:  0 4px 16px rgba(0,0,0,0.08), 0 2px 4px rgba(0,0,0,0.04);
  --ir-shadow-xl:  0 8px 24px rgba(0,0,0,0.10), 0 4px 8px rgba(0,0,0,0.06);
  --ir-shadow-glow: 0 0 16px rgba(0,0,0,0.06);

  /* === Transitions === */
  --ir-ease-out-expo: cubic-bezier(0.19, 1, 0.22, 1);
  --ir-ease-out-quart: cubic-bezier(0.25, 1, 0.5, 1);
  --ir-duration-fast: 150ms;
  --ir-duration-normal: 250ms;
  --ir-duration-slow: 400ms;

  /* === Layout === */
  --ir-sidebar-width: 12rem;
  --ir-topbar-height: 3rem;
  --ir-content-max: none;

  /* === Rating Colors — 6级色板 (S=强力买入→E=卖出) === */
  --ir-rating-s: #E53E3E;   /* S级 强力买入 — 浓郁红 */
  --ir-rating-a: #DD6B20;   /* A级 买入 — 暖橙 */
  --ir-rating-b: #D69E2E;   /* B级 持有 — 琥珀金 */
  --ir-rating-c: #A0AEC0;   /* C级 中性 — 灰蓝 */
  --ir-rating-d: #3182CE;   /* D级 减持 — 蓝 */
  --ir-rating-e: #38A169;   /* E级 卖出 — 绿 */

  /* === Chart Palette — 多股票对比6色 === */
  --ir-chart-1: #E53E3E;    /* 红 — 股票A */
  --ir-chart-2: #3182CE;    /* 蓝 — 股票B */
  --ir-chart-3: #38A169;    /* 绿 — 股票C */
  --ir-chart-4: #DD6B20;    /* 橙 — 股票D */
  --ir-chart-5: #805AD5;    /* 紫 — 股票E */
  --ir-chart-6: #D53F8C;    /* 粉 — 股票F */

  /* === Table Freeze === */
  --ir-table-freeze-left: 200px;
  --ir-table-header-sticky-top: 64px;

  /* === Global AI Bar === */
  --ir-global-ai-height: 56px;
  --ir-global-ai-z: 100;
}

/* ── Base / Reset ────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; }

html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
  color-scheme: light;
}

body {
  font-family: var(--ir-font-sans);
  font-size: var(--ir-text-base);
  line-height: var(--ir-leading-normal);
  color: var(--ir-gray-700);
  background: var(--ir-surface-0);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  margin: 0;
}

:focus-visible {
  outline: 2px solid var(--ir-blue-500);
  outline-offset: 2px;
  border-radius: var(--ir-radius-sm);
}

.ir-skip-link {
  position: absolute; top: -100%; left: var(--ir-space-4); z-index: 9999;
  padding: var(--ir-space-3) var(--ir-space-4);
  background: var(--ir-blue-500); color: #fff;
  font-weight: 600; font-size: var(--ir-text-base);
  border-radius: var(--ir-radius-md);
  transition: top var(--ir-duration-fast); text-decoration: none;
}
.ir-skip-link:focus { top: var(--ir-space-4); }

::selection { background: oklch(0.42 0.14 248 / 0.15); color: var(--ir-gray-800); }

/* ── Typography Utilities ────────────────────────────────── */
.ir-heading-1 { font-size: var(--ir-text-5xl); font-weight: 700; line-height: var(--ir-leading-tight); letter-spacing: -0.02em; color: var(--ir-gray-900); }
.ir-heading-2 { font-size: var(--ir-text-4xl); font-weight: 700; line-height: var(--ir-leading-tight); letter-spacing: -0.015em; color: var(--ir-gray-800); }
.ir-heading-3 { font-size: var(--ir-text-3xl); font-weight: 600; line-height: var(--ir-leading-tight); color: var(--ir-gray-800); }
.ir-heading-4 { font-size: var(--ir-text-2xl); font-weight: 600; line-height: var(--ir-leading-tight); color: var(--ir-gray-800); }
.ir-heading-5 { font-size: var(--ir-text-xl);  font-weight: 600; color: var(--ir-gray-700); }
.ir-body-lg   { font-size: var(--ir-text-lg);  line-height: var(--ir-leading-relaxed); }
.ir-body-base { font-size: var(--ir-text-base); line-height: var(--ir-leading-normal); }
.ir-body-sm   { font-size: var(--ir-text-sm);  line-height: var(--ir-leading-normal); }
.ir-caption   { font-size: var(--ir-text-xs); line-height: var(--ir-leading-normal); color: var(--ir-gray-500); }
.ir-mono      { font-family: var(--ir-font-mono); font-variant-numeric: tabular-nums; }

.ir-gradient-text {
  background: linear-gradient(135deg, var(--ir-blue-600), var(--ir-cyan-500));
  -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;
}

/* ── Buttons — 三变体系统 ─────────────────────────────────── */
.ir-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--ir-space-2);
  font-family: var(--ir-font-sans); font-weight: 500; font-size: var(--ir-text-sm); line-height: 1;
  border: 1px solid transparent; border-radius: var(--ir-radius-sm);
  padding: var(--ir-space-2) var(--ir-space-4);
  cursor: pointer; user-select: none; white-space: nowrap;
  transition: all var(--ir-duration-fast) var(--ir-ease-out-quart);
  text-decoration: none;
}
.ir-btn:focus-visible { outline: 2px solid var(--ir-blue-500); outline-offset: 2px; }
.ir-btn:disabled { opacity: 0.5; cursor: not-allowed; pointer-events: none; }

.ir-btn-primary { background: var(--ir-blue-500); color: #fff; border-color: var(--ir-blue-500); }
.ir-btn-primary:hover:not(:disabled) { background: var(--ir-blue-600); }

.ir-btn-secondary { background: var(--ir-surface-1); color: var(--ir-gray-600); border-color: var(--ir-border-default); }
.ir-btn-secondary:hover:not(:disabled) { background: var(--ir-surface-2); border-color: var(--ir-border-strong); }

.ir-btn-success { background: var(--ir-success); color: #fff; }
.ir-btn-success:hover:not(:disabled) { filter: brightness(1.1); }
.ir-btn-danger { background: var(--ir-danger); color: #fff; }
.ir-btn-danger:hover:not(:disabled) { filter: brightness(1.1); }

.ir-btn-ghost { background: transparent; color: var(--ir-gray-500); border-color: transparent; }
.ir-btn-ghost:hover:not(:disabled) { background: var(--ir-surface-2); color: var(--ir-gray-700); }

.ir-btn-sm { padding: var(--ir-space-1) var(--ir-space-3); font-size: var(--ir-text-xs); border-radius: var(--ir-radius-sm); }
.ir-btn-lg { padding: var(--ir-space-3) var(--ir-space-6); font-size: var(--ir-text-base); border-radius: var(--ir-radius-md); }

.ir-btn-icon { width: 2.25rem; height: 2.25rem; padding: 0; border-radius: var(--ir-radius-sm); }
.ir-btn-icon.ir-btn-sm { width: 1.75rem; height: 1.75rem; }

/* ── Form Elements ────────────────────────────────────────── */
.ir-input {
  width: 100%; padding: var(--ir-space-2) var(--ir-space-3);
  font-family: var(--ir-font-sans); font-size: var(--ir-text-sm);
  color: var(--ir-gray-600); background: var(--ir-surface-1);
  border: 1px solid var(--ir-border-default); border-radius: var(--ir-radius-sm);
  transition: all var(--ir-duration-fast);
}
.ir-input::placeholder { color: var(--ir-gray-400); }
.ir-input:focus { outline: none; border-color: var(--ir-blue-500); box-shadow: 0 0 0 2px oklch(0.42 0.14 248 / 0.1); }
.ir-input:disabled { opacity: 0.5; cursor: not-allowed; background: var(--ir-surface-2); }

.ir-input-lg { padding: var(--ir-space-4) var(--ir-space-5); font-size: var(--ir-text-lg); border-radius: var(--ir-radius-md); min-height: 3rem; }

.ir-select {
  appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' fill='%236b7280' viewBox='0 0 16 16'%3E%3Cpath d='M4 6l4 4 4-4'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right var(--ir-space-3) center;
  padding-right: var(--ir-space-8);
}

.ir-label { display: block; font-size: var(--ir-text-sm); font-weight: 500; color: var(--ir-gray-600); margin-bottom: var(--ir-space-1); }
.ir-label-required::after { content: ' *'; color: var(--ir-danger); }

/* ── Cards — 发丝线边框 (Bloomberg风格) ──────────────────── */
.ir-card {
  background: var(--ir-surface-1); border: 0.5px solid var(--ir-border-subtle);
  border-radius: var(--ir-radius-md); overflow: hidden;
  transition: all var(--ir-duration-normal) var(--ir-ease-out-quart);
}
.ir-card:hover { border-color: var(--ir-border-default); }
.ir-card--static:hover { border-color: var(--ir-border-subtle); }
.ir-card-header { padding: var(--ir-space-4) var(--ir-space-4); border-bottom: 0.5px solid var(--ir-border-subtle); }
.ir-card-body { padding: var(--ir-space-4) var(--ir-space-4); }
.ir-card-footer { padding: var(--ir-space-3) var(--ir-space-4); border-top: 0.5px solid var(--ir-border-subtle); }

.ir-metric-card {
  background: var(--ir-surface-1); border: 0.5px solid var(--ir-border-subtle);
  border-radius: var(--ir-radius-md); padding: var(--ir-space-3) var(--ir-space-4);
  transition: all var(--ir-duration-fast);
}
.ir-metric-card:hover { border-color: var(--ir-blue-300); }
.ir-metric-label {
  font-size: var(--ir-text-xs); color: var(--ir-gray-500); font-weight: 500;
  text-transform: uppercase; letter-spacing: 0.04em; margin-bottom: var(--ir-space-1);
}
.ir-metric-value {
  font-size: var(--ir-text-xl); font-weight: 500;
  font-family: var(--ir-font-mono); font-variant-numeric: tabular-nums;
  color: var(--ir-gray-800);
}
.ir-metric-change { display: inline-flex; align-items: center; gap: var(--ir-space-1); font-size: var(--ir-text-sm); font-weight: 700; font-family: var(--ir-font-mono); margin-top: var(--ir-space-1); }
.ir-metric-change--up   { color: var(--ir-rating-s); }
.ir-metric-change--down { color: var(--ir-rating-e); }

/* 数值全局增强 — 加粗+等宽+深色 */
.ir-num { font-family: var(--ir-font-mono); font-weight: 700; color: var(--ir-gray-800); font-variant-numeric: tabular-nums; }
.ir-num-sm { font-family: var(--ir-font-mono); font-weight: 600; font-size: var(--ir-text-sm); color: var(--ir-gray-700); }

/* ── Badges / Tags ───────────────────────────────────────── */
.ir-badge {
  display: inline-flex; align-items: center; gap: var(--ir-space-1);
  padding: 0.125rem var(--ir-space-2); font-size: var(--ir-text-xs); font-weight: 600; line-height: 1.5;
  border-radius: var(--ir-radius-full); white-space: nowrap;
}
.ir-badge--blue   { background: oklch(0.42 0.14 248 / 0.1); color: var(--ir-blue-700); }
.ir-badge--green  { background: var(--ir-success-bg); color: var(--ir-success); }
.ir-badge--red    { background: var(--ir-danger-bg);  color: var(--ir-danger); }
.ir-badge--amber  { background: var(--ir-warning-bg); color: var(--ir-warning); }
.ir-badge--gray   { background: var(--ir-surface-2); color: var(--ir-gray-500); }
.ir-badge--cyan   { background: oklch(0.58 0.16 200 / 0.1); color: var(--ir-cyan-500); }

/* ── Tabs ────────────────────────────────────────────────── */
.ir-tabs {
  display: flex; gap: 0; border-bottom: 2px solid var(--ir-border-default);
  overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none;
}
.ir-tabs::-webkit-scrollbar { display: none; }

.ir-tab {
  flex-shrink: 0; padding: var(--ir-space-2) var(--ir-space-4);
  font-size: var(--ir-text-sm); font-weight: 500; color: var(--ir-gray-500);
  background: transparent; border: none; border-bottom: 2px solid transparent;
  cursor: pointer; transition: all var(--ir-duration-fast); white-space: nowrap;
}
.ir-tab:hover { color: var(--ir-gray-700); background: var(--ir-surface-2); }
.ir-tab--active { color: var(--ir-blue-600); border-bottom-color: var(--ir-blue-500); font-weight: 600; }

/* ── Data Tables — 等宽数字+斑马纹 ───────────────────────── */
.ir-table { width: 100%; border-collapse: collapse; font-size: var(--ir-text-sm); }
.ir-table thead { border-bottom: 1px solid var(--ir-border-default); }
.ir-table th {
  padding: var(--ir-space-2) var(--ir-space-3); text-align: left;
  font-weight: 500; color: var(--ir-gray-500); font-size: var(--ir-text-xs);
  text-transform: uppercase; letter-spacing: 0.04em; white-space: nowrap;
}
.ir-table td {
  padding: var(--ir-space-2) var(--ir-space-3); border-bottom: 0.5px solid var(--ir-border-subtle);
  color: var(--ir-gray-600); white-space: nowrap;
}
.ir-table tbody tr:nth-child(even) { background: oklch(0.97 0.003 250); }
.ir-table td.ir-table--right { text-align: right; font-family: var(--ir-font-mono); font-variant-numeric: tabular-nums; }
.ir-table tbody tr:hover { background: oklch(0.95 0.02 248); }
.ir-table td.ir-up   { color: var(--ir-success); font-weight: 500; }
.ir-table td.ir-down { color: var(--ir-danger);  font-weight: 500; }
.ir-table td.ir-muted { color: var(--ir-gray-400); }

.ir-table-wrapper { overflow-x: auto; -webkit-overflow-scrolling: touch; border-radius: var(--ir-radius-md); border: 0.5px solid var(--ir-border-subtle); }

/* ── Sidebar — 紧凑导航 ──────────────────────────────── */
.ir-layout { display: flex; min-height: 100vh; }
.ir-main { flex: 1; min-width: 0; }
.ir-sidebar {
  position: sticky; top: 0; width: var(--ir-sidebar-width); height: 100vh;
  background: var(--ir-surface-2); border-right: 0.5px solid var(--ir-border-subtle);
  display: flex; flex-direction: column; flex-shrink: 0; overflow-y: auto; z-index: 40;
}
.ir-sidebar-icon { width: 16px; height: 16px; flex-shrink: 0; }
.ir-sidebar-brand {
  padding: var(--ir-space-4) var(--ir-space-4); border-bottom: 1px solid var(--ir-border-subtle);
  display: flex; align-items: center; gap: var(--ir-space-2);
}
.ir-sidebar-brand a {
  font-size: var(--ir-text-lg); font-weight: 700; color: var(--ir-gray-800); text-decoration: none; letter-spacing: -0.01em;
}
.ir-sidebar-nav { flex: 1; padding: var(--ir-space-2); display: flex; flex-direction: column; gap: 0; }
.ir-sidebar-section { font-size: var(--ir-text-sm); font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; color: var(--ir-gray-400); padding: var(--ir-space-3) var(--ir-space-3) var(--ir-space-1); }
.ir-sidebar-section + .ir-sidebar-section {
  border-top: 1px solid var(--ir-border-subtle);
  padding-top: var(--ir-space-4);
  margin-top: var(--ir-space-2);
}
.ir-sidebar-link {
  display: flex; align-items: center; gap: var(--ir-space-3);
  padding: var(--ir-space-3) var(--ir-space-3);
  min-height: 44px;
  font-size: var(--ir-text-base);
  font-weight: 500;
  color: var(--ir-gray-600);
  text-decoration: none;
  border-left: 4px solid transparent;
  border-radius: 0;
  transition: all 0.15s ease;
}
.ir-sidebar-link:hover {
  background: var(--ir-bg-hover, #f3f4f6);
  color: var(--ir-gray-800);
}
.ir-sidebar-link--active,
.ir-sidebar-link.active {
  border-left-color: var(--ir-blue-500);
  background: oklch(0.42 0.14 248 / 0.08);
  color: var(--ir-blue-600);
  font-weight: 600;
}
.ir-sidebar-icon { width: 18px; height: 18px; flex-shrink: 0; }
.ir-sidebar-footer { padding: var(--ir-space-3) var(--ir-space-4); border-top: 1px solid var(--ir-border-subtle); }

/* ── Topbar — 深墨灰顶栏 (Bloomberg参考) ─────────────────── */
.ir-topbar {
  position: sticky; top: 0; height: var(--ir-topbar-height);
  background: oklch(0.15 0.008 250); border-bottom: 0.5px solid oklch(0.25 0.005 250);
  display: flex; align-items: center; padding: 0 var(--ir-space-6); gap: var(--ir-space-4); z-index: 30;
  color: #fff;
}
.ir-topbar-spacer { flex: 1; }
.ir-topbar-user { display: flex; align-items: center; gap: var(--ir-space-3); }
.ir-topbar-avatar {
  width: 2.25rem; height: 2.25rem; border-radius: 50%;
  background: var(--ir-blue-500); color: #fff; font-weight: 700;
  display: flex; align-items: center; justify-content: center; font-size: var(--ir-text-sm);
}

/* ── Content Area ────────────────────────────────────────── */
.ir-content {
  flex: 1; padding: 0.75rem 1rem;
  min-width: 0;
  width: 100%;
  max-width: 100%;
}
@media (min-width: 1200px) {
  .ir-content { padding: 1rem 1.25rem; }
}
.ir-animate-fade-in { animation: irFadeIn 0.4s var(--ir-ease-out-quart); }
@keyframes irFadeIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }
.ir-stagger > * { animation: irFadeIn 0.4s var(--ir-ease-out-quart) both; }
.ir-stagger > *:nth-child(1) { animation-delay: 0ms; }
.ir-stagger > *:nth-child(2) { animation-delay: 60ms; }
.ir-stagger > *:nth-child(3) { animation-delay: 120ms; }
.ir-stagger > *:nth-child(4) { animation-delay: 180ms; }
.ir-stagger > *:nth-child(5) { animation-delay: 240ms; }
.ir-stagger > *:nth-child(6) { animation-delay: 300ms; }

/* ── Rating Badges — 6 级评级徽章 ───────────────── */
.ir-rating-badge {
  display: inline-flex; align-items: center; justify-content: center;
  width: 3rem; height: 3rem; border-radius: var(--ir-radius-lg);
  font-weight: 800; font-size: 1.25rem; color: #fff;
  letter-spacing: -0.02em; flex-shrink: 0;
}
.ir-rating-s { background: var(--ir-rating-s); }
.ir-rating-a { background: var(--ir-rating-a); }
.ir-rating-b { background: var(--ir-rating-b); }
.ir-rating-c { background: var(--ir-rating-c); }
.ir-rating-d { background: var(--ir-rating-d); }
.ir-rating-e { background: var(--ir-rating-e); }

.ir-rating-sm { width: 2rem; height: 2rem; font-size: 0.8125rem; border-radius: var(--ir-radius-md); }

.ir-rating-label {
  display: inline-flex; align-items: center; gap: var(--ir-space-1);
  padding: 0.125rem var(--ir-space-2); font-size: var(--ir-text-xs); font-weight: 600;
  border-radius: var(--ir-radius-full); white-space: nowrap;
}
.ir-rating-label--s { background: oklch(0.48 0.20 28 / 0.1); color: var(--ir-rating-s); }
.ir-rating-label--a { background: oklch(0.55 0.17 45 / 0.1); color: var(--ir-rating-a); }
.ir-rating-label--b { background: oklch(0.58 0.14 80 / 0.1); color: var(--ir-rating-b); }
.ir-rating-label--c { background: oklch(0.40 0.01 250 / 0.1); color: var(--ir-rating-c); }
.ir-rating-label--d { background: oklch(0.42 0.11 250 / 0.1); color: var(--ir-rating-d); }
.ir-rating-label--e { background: oklch(0.45 0.17 150 / 0.1); color: var(--ir-rating-e); }

/* ── Progress Bars — 进度条组件 ──────────────────── */
.ir-progress {
  height: 8px; border-radius: 4px;
  background: var(--ir-surface-3); overflow: hidden;
}
.ir-progress-fill {
  height: 100%; border-radius: 4px;
  transition: width 0.6s var(--ir-ease-out-quart);
}
.ir-progress-fill--s { background: var(--ir-rating-s); }
.ir-progress-fill--a { background: var(--ir-rating-a); }
.ir-progress-fill--b { background: var(--ir-rating-b); }
.ir-progress-fill--c { background: var(--ir-rating-c); }
.ir-progress-fill--d { background: var(--ir-rating-d); }
.ir-progress-fill--e { background: var(--ir-rating-e); }

/* ── A股涨跌 — 红涨绿跌 ──────────────────────────── */
.ir-change-up   { color: var(--ir-rating-s); font-weight: 500; }
.ir-change-down { color: var(--ir-rating-e); font-weight: 500; }

/* ── Compare Table — 行业对标最佳/最差 ────────────── */
.ir-cell-best  { color: var(--ir-rating-e); font-weight: 600; }
.ir-cell-worst { color: var(--ir-rating-s); }
.ir-compare-table th { position: sticky; top: var(--ir-table-header-sticky-top); z-index: 2; }
.ir-compare-table td:first-child,
.ir-compare-table th:first-child { position: sticky; left: 0; min-width: var(--ir-table-freeze-left); z-index: 1; }
.ir-compare-table th:first-child { z-index: 3; }

/* ── Status Dots ─────────────────────────────────────────── */
.ir-status-dot {
  display: inline-block; width: 0.625rem; height: 0.625rem; border-radius: 50%;
}
.ir-status-dot--green  { background: var(--ir-success); }
.ir-status-dot--red    { background: var(--ir-danger); }
.ir-status-dot--amber  { background: var(--ir-warning); }

/* ── Utilities ───────────────────────────────────────────── */
.hidden { display: none !important; }
.flex { display: flex; }
.items-center { align-items: center; }
.gap-2 { gap: var(--ir-space-2); }
.gap-3 { gap: var(--ir-space-3); }

/* ── Responsive: Sidebar mobile ──────────────────────────── */
.ir-sidebar-toggle { display: none; }
.ir-sidebar-overlay { display: none; }

@media (max-width: 1024px) {
  .ir-sidebar {
    position: fixed; top: 0; left: 0; z-index: 200;
    transform: translateX(-100%);
    transition: transform 0.3s cubic-bezier(0.19,1,0.22,1);
    box-shadow: none;
  }
  .ir-sidebar--open { transform: translateX(0); box-shadow: 4px 0 24px rgba(0,0,0,0.15); }
  .ir-sidebar-overlay {
    display: block; position: fixed; inset: 0; z-index: 199;
    background: rgba(0,0,0,0.3); opacity: 0; pointer-events: none;
    transition: opacity 0.3s ease;
  }
  .ir-sidebar-overlay--visible { opacity: 1; pointer-events: auto; }
  .ir-sidebar-toggle { display: flex; align-items: center; justify-content: center; }
  .ir-main { margin-left: 0 !important; }
}

/* ── Responsive: Tables ──────────────────────────────────── */
@media (max-width: 768px) {
  .ir-table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
  .ir-btn { min-height: 40px; min-width: 40px; }
  .ir-btn-sm { min-height: 34px; min-width: 34px; }
}

/* ── Responsive: Tab nav ─────────────────────────────────── */
@media (max-width: 640px) {
  .ir-tabs { gap: 2px; }
  .ir-tab { padding: 6px 10px; font-size: 11px; }
}

/* ── Print ────────────────────────────────────────────────── */
@media print {
  .ir-sidebar, .ir-topbar { display: none; }
  .ir-content { padding: 0; max-width: 100%; }
}

/* ── Reduced Motion ──────────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; }
}
