/* R25 type system. All UI sizes live here; modules consume semantic tokens.
 * Do not add page-local pixel font sizes. Brand graphics are independent.
 * Numeric highlights may use the 24–32px metric tier. */
:root {
  --type-page-size: 24px;
  --type-page-line: 32px;
  --type-section-size: 16px;
  --type-section-line: 24px;
  --type-body-size: 14px;
  --type-body-line: 22px;
  --type-caption-size: 12px;
  --type-caption-line: 18px;
  --type-metric-size: 32px;
  --type-metric-line: 40px;
  --type-text: #302c38;
  --type-muted: #706978;
  --am-font-size-xs: var(--type-caption-size);
  --am-font-size-sm: var(--type-caption-size);
  --am-font-size-body: var(--type-body-size);
  --am-font-size-md: var(--type-section-size);
  --am-font-size-lg: var(--type-section-size);
  --am-font-size-xl: var(--type-section-size);
  --am-font-size-2xl: var(--type-page-size);
  --am-line-height-heading: var(--type-section-line);
  --am-line-height-paragraph: var(--type-body-line);
  --mb-muted: var(--type-muted);
  --mb-faint: var(--type-muted);
}
body { font-size: var(--type-body-size); line-height: var(--type-body-line); }
/* Controls share one size even inside more-specific legacy component rules. */
.app :is(button, input, textarea, select), .fm-dialog :is(button, input, textarea, select) {
  font-size: var(--type-body-size) !important; line-height: var(--type-body-line) !important;
}
.app :is(button, input, textarea, select), .fm-dialog :is(button, input, textarea, select),
.welcome-actions a, .fm-page, .fm-dialog, .fm-page p, .fm-dialog p,
.fm-definition dd, .fm-checklist > div, .fm-record b, .fm-account-info b,
.fm-name-link, .ai-msg, .ai-welcome, .ai-guide, .sc-field-label,
.mb-table, .mb-table.mb-sec-tbl td, .mb-sec-sym, .mb-table.mb-sec-tbl .mb-sec-sym,
.sc-table, .md-p-table, .mb-kalshi-q, .mb-tok-name, .mb-tok-price {
  font-size: var(--type-body-size); line-height: var(--type-body-line);
}
.app :is(input, textarea, select) { font-weight: 400; }
.app button, .fm-dialog button, .welcome-actions a { font-weight: 500; }
.app :is(h1, .mb-page-title, .ss-page-header h1, .sc-editor-title, .sc-editor-hero h1),
.fm-page .fm-page-head h1, .welcome-hero__greeting {
  font-size: var(--type-page-size); line-height: var(--type-page-line); font-weight: 600;
}
.app :is(h2, h3, .mb-sec-title, .sp-sec-title, .md-chart-title, .md-p-title,
  .sc-bt-title, .sc-side-title, .ai-side-name, .mb-etf-name),
.fm-page :is(h2, h3), .fm-dialog :is(h2, h3), .sc-page-editor .sc-form-heading h2 {
  font-size: var(--type-section-size); line-height: var(--type-section-line); font-weight: 600;
}
.main .hdr-title { font-size: var(--type-section-size); line-height: var(--type-section-line); font-weight: 600; color: var(--type-text); }
/* Business titles now live in the desktop toolbar, not a page hero. */
.main.with-ai-side .fm-page .fm-page-head h1,
.main.with-ai-side .mb-page-title,
.main.with-ai-side .ss-page-header h1 {
  font-size: var(--type-section-size); line-height: var(--type-section-line); font-weight: 600; letter-spacing: normal;
}
#sidebar .sb-tab { font-size: var(--type-body-size); line-height: var(--type-body-line); font-weight: 500; }
#sidebar .sb-tab.active { font-weight: 600; }
#sidebar :is(.proj-row, .task-row, .task-row.placeholder) {
  font-size: var(--type-body-size); line-height: var(--type-body-line); font-weight: 400; color: #514b5c;
}
#sidebar :is(.proj-row.selected, .proj-row[aria-selected="true"], .task-row.selected) { font-weight: 500; color: #6844a4; }
#sidebar .sb-section-title {
  font-size: var(--type-caption-size); line-height: var(--type-caption-line); font-weight: 500;
  color: var(--type-muted); height: auto; min-height: var(--type-caption-line);
}
#sidebar .collapse-row { font-size: var(--type-caption-size); line-height: var(--type-caption-line); color: var(--type-muted); height: auto; }
#sidebar .sb-user-name { font-size: var(--type-body-size); line-height: var(--type-body-line); font-weight: 500; }
#sidebar .sb-user-caption { font-size: var(--type-caption-size); line-height: var(--type-caption-line); font-weight: 400; color: var(--type-muted); }
#sidebar .sb-user { gap: 0; min-width: 0; }
#sidebar .sb-user-name { overflow: hidden; text-overflow: ellipsis; }
.app :is(small, time, .ai-note, .ai-err, .ai-msg-meta, .mb-page-time, .mb-sec-sub,
  .mb-sec-time, .mb-etf-code, .mb-focus-co, .sc-data-state, .sc-stat-label,
  .sp-sec-sub, .sp-sec-time, .fm-event-meta, .fm-fund-state, .fm-muted,
  .fm-inline-note, .fm-footnote, .fm-table th, .fm-table td small),
.fm-page small, .fm-dialog small, .fm-badge, .fm-page .badge, .fm-dialog .badge {
  font-size: var(--type-caption-size); line-height: var(--type-caption-line); font-weight: 400;
}
.app :is(.ai-note, .sc-data-state, .sc-window-note, .sc-editor-disclaimer, .fm-footnote) { color: var(--type-muted); }
.fm-stats strong, .fm-dialog .fm-stats strong, .mb-etf-price, .md-p-price, .sc-stat-big {
  font-size: var(--type-page-size); line-height: var(--type-page-line); font-weight: 600;
  font-variant-numeric: tabular-nums;
}
.msg.assistant, .msg.user, .ai-msg, .msg.assistant .md-root { font-size: var(--type-body-size); line-height: var(--type-body-line); }
.msg.assistant .md-h1 { line-height: var(--type-page-line); }
.msg.assistant :is(.md-h2, .md-h3, .md-h4) { font-size: var(--type-section-size); line-height: var(--type-section-line); font-weight: 600; }
/* Accommodate the type scale without shrinking text at narrow widths. */
.app :is(.sc-btn, .sc-type-btn, .sc-btn-small, .manager-header-btn) { min-height: 34px; height: auto; }
.app .mb-table td { line-height: var(--type-body-line); }
.app .welcome-actions { gap: 10px; }
#sidebar .collapse-row { font-size: var(--type-caption-size) !important; line-height: var(--type-caption-line) !important; }
