/* 自动生成，请勿手改。
 * 源文件：03_产品设计/design-tokens/tokens.json
 * 生成器：04_GEO工作台/ui/tools/gen_tokens.py
 * 版本：0.1.0 ｜ 生成日期：2026-10-23
 */
:root {
  /* color */
  --ly-color-brand-primary: #1269e6; /* color.brand.primary */
  --ly-color-brand-primary-hover: #0d59c9; /* color.brand.primary-hover */
  --ly-color-brand-primary-active: #0a4aa6; /* color.brand.primary-active */
  --ly-color-brand-cyan: #12c7e5; /* color.brand.cyan */
  --ly-color-brand-ink: #10284d; /* color.brand.ink */
  --ly-color-brand-copy: #526b8b; /* color.brand.copy */
  --ly-color-surface-background: #f5f9ff; /* color.surface.background */
  --ly-color-surface-surface: #ffffff; /* color.surface.surface */
  --ly-color-surface-surface-subtle: #f8fbff; /* color.surface.surface-subtle */
  --ly-color-surface-surface-selected: #eaf5ff; /* color.surface.surface-selected */
  --ly-color-surface-header: rgba(255, 255, 255, 0.94); /* color.surface.header */
  --ly-color-surface-hero: #f6faff; /* color.surface.hero */
  --ly-color-neutral-text: #10284d; /* color.neutral.text */
  --ly-color-neutral-text-secondary: #526b8b; /* color.neutral.text-secondary */
  --ly-color-neutral-text-muted: #607b99; /* color.neutral.text-muted */
  --ly-color-neutral-text-faint: #8291a5; /* color.neutral.text-faint */
  --ly-color-neutral-border: #d5e7fc; /* color.neutral.border */
  --ly-color-neutral-border-subtle: #e2eefc; /* color.neutral.border-subtle */
  --ly-color-neutral-border-input: #d7e6f8; /* color.neutral.border-input */
  --ly-color-neutral-border-header: #e2eefc; /* color.neutral.border-header */
  --ly-color-status-success-fg: #008e73; /* color.status.success-fg */
  --ly-color-status-success-bg: #ecfff9; /* color.status.success-bg */
  --ly-color-status-success-border: #c0ecdf; /* color.status.success-border */
  --ly-color-status-danger-fg: #a43d29; /* color.status.danger-fg */
  --ly-color-status-danger-bg: #fff1ed; /* color.status.danger-bg */
  --ly-color-status-danger-border: #f6cfc4; /* color.status.danger-border */
  --ly-color-status-warning-fg: #9a6407; /* color.status.warning-fg */
  --ly-color-status-warning-bg: #fff8e8; /* color.status.warning-bg */
  --ly-color-status-warning-border: #f5dfae; /* color.status.warning-border */
  --ly-color-status-info-fg: #1269e6; /* color.status.info-fg */
  --ly-color-status-info-bg: #eaf5ff; /* color.status.info-bg */
  --ly-color-status-info-border: #c6eaff; /* color.status.info-border */
  --ly-color-status-neutral-fg: #607b99; /* color.status.neutral-fg */
  --ly-color-status-neutral-bg: #f1f6fd; /* color.status.neutral-bg */
  --ly-color-status-neutral-border: #dce8f6; /* color.status.neutral-border */
  --ly-color-focus-ring: rgba(18, 105, 230, 0.18); /* color.focus.ring */
  --ly-color-focus-ring-width: 3px; /* color.focus.ring-width */

  /* font */
  --ly-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", Arial, sans-serif; /* font.family */
  --ly-font-family-numeric: "SF Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; /* font.family-numeric */
  --ly-font-weight-regular: 400; /* font.weight.regular */
  --ly-font-weight-medium: 500; /* font.weight.medium */
  --ly-font-weight-semibold: 700; /* font.weight.semibold */
  --ly-font-weight-bold: 800; /* font.weight.bold */
  --ly-font-size-display: 56px; /* font.size.display */
  --ly-font-size-h1: 44px; /* font.size.h1 */
  --ly-font-size-h2: 32px; /* font.size.h2 */
  --ly-font-size-h3: 24px; /* font.size.h3 */
  --ly-font-size-h4: 21px; /* font.size.h4 */
  --ly-font-size-body: 16px; /* font.size.body */
  --ly-font-size-body-sm: 14px; /* font.size.body-sm */
  --ly-font-size-caption: 13px; /* font.size.caption */
  --ly-font-size-micro: 12px; /* font.size.micro */
  --ly-font-size-nano: 11px; /* font.size.nano */
  --ly-font-line-height-tight: 1.2; /* font.line-height.tight */
  --ly-font-line-height-heading: 1.18; /* font.line-height.heading */
  --ly-font-line-height-body: 1.7; /* font.line-height.body */
  --ly-font-line-height-app: 1.6; /* font.line-height.app */
  --ly-font-app-base: 14px; /* font.app.base */
  --ly-font-app-page-title: 22px; /* font.app.page-title */
  --ly-font-app-section-title: 16px; /* font.app.section-title */
  --ly-font-app-table: 13px; /* font.app.table */
  --ly-font-app-label: 13px; /* font.app.label */
  --ly-font-app-note: 备注/说明用 12px; /* font.app.note */

  /* space */
  --ly-space-1: 4px; /* space.1 */
  --ly-space-2: 8px; /* space.2 */
  --ly-space-3: 12px; /* space.3 */
  --ly-space-4: 16px; /* space.4 */
  --ly-space-5: 20px; /* space.5 */
  --ly-space-6: 24px; /* space.6 */
  --ly-space-7: 28px; /* space.7 */
  --ly-space-8: 32px; /* space.8 */
  --ly-space-10: 40px; /* space.10 */
  --ly-space-12: 48px; /* space.12 */
  --ly-space-14: 56px; /* space.14 */
  --ly-space-16: 64px; /* space.16 */

  /* radius */
  --ly-radius-sm: 6px; /* radius.sm */
  --ly-radius-base: 8px; /* radius.base */
  --ly-radius-lg: 12px; /* radius.lg */
  --ly-radius-pill: 999px; /* radius.pill */

  /* shadow */
  --ly-shadow-card: 0 10px 25px rgba(18, 78, 147, 0.04); /* shadow.card */
  --ly-shadow-panel: 0 24px 52px rgba(17, 76, 151, 0.09); /* shadow.panel */
  --ly-shadow-raised: 0 14px 34px rgba(27, 91, 175, 0.07); /* shadow.raised */
  --ly-shadow-primary: 0 10px 24px rgba(18, 105, 230, 0.18); /* shadow.primary */
  --ly-shadow-focus: 0 0 0 3px rgba(18, 105, 230, 0.18); /* shadow.focus */

  /* layout */
  --ly-layout-site-container: 1180px; /* layout.site-container */
  --ly-layout-app-topbar-height: 56px; /* layout.app-topbar-height */
  --ly-layout-app-sidebar-width: 232px; /* layout.app-sidebar-width */
  --ly-layout-app-content-max: 1360px; /* layout.app-content-max */
  --ly-layout-app-gutter: 24px; /* layout.app-gutter */
  --ly-layout-app-card-gap: 16px; /* layout.app-card-gap */
  --ly-layout-table-row-height: 44px; /* layout.table-row-height */
  --ly-layout-control-height: 36px; /* layout.control-height */
  --ly-layout-control-height-lg: 44px; /* layout.control-height-lg */

  /* gradient */
  --ly-gradient-primary: linear-gradient(110deg, #1269e6, #12c7e5); /* gradient.primary */
  --ly-gradient-primary-soft: linear-gradient(135deg, #ffffff, #eef6ff); /* gradient.primary-soft */
  --ly-gradient-progress: linear-gradient(90deg, #176bff, #00c7e8); /* gradient.progress */
  --ly-gradient-brand-text: linear-gradient(90deg, #1269e6, #12c7e5); /* gradient.brand-text */

  /* breakpoint */
  --ly-bp-xl: 1280px; /* breakpoint.xl */
  --ly-bp-lg: 1080px; /* breakpoint.lg */
  --ly-bp-md: 820px; /* breakpoint.md */
  --ly-bp-sm: 560px; /* breakpoint.sm */
  --ly-bp-xs: 390px; /* breakpoint.xs */

  /* 语义别名（工作台组件只使用这一层） */
  --ly-bg-page: #f5f9ff;
  --ly-bg-surface: #ffffff;
  --ly-bg-subtle: #f8fbff;
  --ly-bg-selected: #eaf5ff;
  --ly-text-primary: #10284d;
  --ly-text-secondary: #526b8b;
  --ly-text-muted: #607b99;
  --ly-text-faint: #8291a5;
  --ly-border: #d5e7fc;
  --ly-border-subtle: #e2eefc;
  --ly-border-input: #d7e6f8;
  --ly-accent: #1269e6;
  --ly-accent-hover: #0d59c9;
  --ly-accent-cyan: #12c7e5;
}

/* 状态色（成功/失败/告警/信息/中性）—— 组件用 data-status 选择，不直接写颜色 */
.ly-status--success {
  --ly-status-fg: #008e73;
  --ly-status-bg: #ecfff9;
  --ly-status-border: #c0ecdf;
}
.ly-status--danger {
  --ly-status-fg: #a43d29;
  --ly-status-bg: #fff1ed;
  --ly-status-border: #f6cfc4;
}
.ly-status--warning {
  --ly-status-fg: #9a6407;
  --ly-status-bg: #fff8e8;
  --ly-status-border: #f5dfae;
}
.ly-status--info {
  --ly-status-fg: #1269e6;
  --ly-status-bg: #eaf5ff;
  --ly-status-border: #c6eaff;
}
.ly-status--neutral {
  --ly-status-fg: #607b99;
  --ly-status-bg: #f1f6fd;
  --ly-status-border: #dce8f6;
}
