/* ============================================
 * [WHO]: Tailwind v4 `@theme` bridge, motion presets, scrollbar helpers — no palette hex here.
 * [FROM]: Runtime vars from scale (`--font-size-*`, `--spacing-*`, `--radius-*`) and themes (`--token-color-*`).
 * [TO]: Any bundle that imports tokens and needs Tailwind utilities resolved from CSS variables.
 * [HERE]: src/tokens/theme-base.css — mapping contract only; literal colors live in `themes/*.css`.
 *
 * [PROTOCOL]:
 * 1. Do not embed theme colors in this file; define `--token-color-*` under `[data-theme]` in theme files.
 * 2. Custom themes: import this for mappings, then add/override `--token-color-*` in your theme layer.
 * ============================================ */

/* ============================================
   Tailwind v4 @theme 映射
   ============================================ */
@custom-variant dark (&:where([data-theme="dark"], [data-theme="dark"] *, [data-theme="forest-dark"], [data-theme="forest-dark"] *, [data-theme="dark-forest"], [data-theme="dark-forest"] *, [data-theme="dark-parchment"], [data-theme="dark-parchment"] *, [data-theme="qoderwork-dark"], [data-theme="qoderwork-dark"] *, [data-theme="dark-glass"], [data-theme="dark-glass"] *, [data-theme="classic-dark"], [data-theme="classic-dark"] *));

/* font-size / radius / spacing 随 data-style 变化，需用 @theme inline 让工具类直接引用运行时变量 */
@theme inline {
  --text-xs: var(--font-size-xs);
  --text-xs--line-height: var(--font-size-xs--line-height);
  --text-sm: var(--font-size-sm);
  --text-sm--line-height: var(--font-size-sm--line-height);
  --text-base: var(--font-size-base);
  --text-base--line-height: var(--font-size-base--line-height);
  --text-lg: var(--font-size-lg);
  --text-lg--line-height: var(--font-size-lg--line-height);
  --text-xl: var(--font-size-xl);
  --text-xl--line-height: var(--font-size-xl--line-height);
  --text-2xl: var(--font-size-2xl);
  --text-2xl--line-height: var(--font-size-2xl--line-height);
  --text-3xl: var(--font-size-3xl);
  --text-3xl--line-height: var(--font-size-3xl--line-height);
  --text-4xl: var(--font-size-4xl);
  --text-4xl--line-height: var(--font-size-4xl--line-height);
  --text-5xl: var(--font-size-5xl);
  --text-5xl--line-height: var(--font-size-5xl--line-height);
  --text-6xl: var(--font-size-6xl);
  --text-6xl--line-height: var(--font-size-6xl--line-height);
  --radius: var(--radius-DEFAULT);
  --radius-none: var(--radius-none);
  --radius-sm: var(--radius-sm);
  --radius-md: var(--radius-md);
  --radius-lg: var(--radius-lg);
  --radius-xl: var(--radius-xl);
  --radius-2xl: var(--radius-2xl);
  --radius-3xl: var(--radius-3xl);
  --radius-full: var(--radius-full);
  --spacing-0: var(--spacing-0);
  --spacing-px: var(--spacing-px);
  --spacing-0\.5: var(--spacing-0\.5);
  --spacing-1: var(--spacing-1);
  --spacing-1\.5: var(--spacing-1\.5);
  --spacing-2: var(--spacing-2);
  --spacing-2\.5: var(--spacing-2\.5);
  --spacing-3: var(--spacing-3);
  --spacing-3\.5: var(--spacing-3\.5);
  --spacing-4: var(--spacing-4);
  --spacing-5: var(--spacing-5);
  --spacing-6: var(--spacing-6);
  --spacing-7: var(--spacing-7);
  --spacing-8: var(--spacing-8);
  --spacing-9: var(--spacing-9);
  --spacing-10: var(--spacing-10);
  --spacing-11: var(--spacing-11);
  --spacing-12: var(--spacing-12);
  --spacing-14: var(--spacing-14);
  --spacing-16: var(--spacing-16);
  --spacing-20: var(--spacing-20);
  --spacing-24: var(--spacing-24);
  --spacing-28: var(--spacing-28);
  --spacing-32: var(--spacing-32);
  --spacing-36: var(--spacing-36);
  --spacing-40: var(--spacing-40);
  --spacing-44: var(--spacing-44);
  --spacing-48: var(--spacing-48);
  --spacing-52: var(--spacing-52);
  --spacing-56: var(--spacing-56);
  --spacing-60: var(--spacing-60);
  --spacing-64: var(--spacing-64);
  --spacing-72: var(--spacing-72);
  --spacing-80: var(--spacing-80);
  --spacing-96: var(--spacing-96);
}

@theme {
  /* Font */
  --font-display: 'Inter var', system-ui, sans-serif;
  /* Primary */
  --color-primary: var(--token-color-primary);
  --color-primary-hover: var(--token-color-primary-hover);
  --color-primary-active: var(--token-color-primary-active);
  --color-primary-bg: var(--token-color-primary-bg);
  --color-primary-bg-hover: var(--token-color-primary-bg-hover);
  --color-primary-border: var(--token-color-primary-border);
  --color-primary-border-hover: var(--token-color-primary-border-hover);
  --color-primary-text: var(--token-color-primary-text);
  --color-primary-text-hover: var(--token-color-primary-text-hover);
  --color-primary-text-active: var(--token-color-primary-text-active);
  --color-text-on-primary: var(--token-color-text-on-primary);

  /* Text */
  --color-text: var(--token-color-text);
  --color-text-secondary: var(--token-color-text-secondary);
  --color-text-tertiary: var(--token-color-text-tertiary);
  --color-text-quaternary: var(--token-color-text-quaternary);
  --color-text-base: var(--token-color-text-base);

  /* Border */
  --color-border: var(--token-color-border);
  /* Select 等 - 映射到现有 token */
  --color-input: var(--token-color-border-tertiary);
  --color-ring: var(--token-color-primary-border);
  --color-popover: var(--token-color-bg-container);
  --color-popover-foreground: var(--token-color-text);
  --color-accent: var(--token-color-fill-secondary);
  --color-accent-foreground: var(--token-color-text);
  --color-muted: var(--token-color-fill-tertiary);
  --color-muted-foreground: var(--token-color-text-secondary);
  --color-background: var(--token-color-bg-base);
  --color-border-secondary: var(--token-color-border-secondary);
  --color-border-tertiary: var(--token-color-border-tertiary);

  /* Fill */
  --color-fill: var(--token-color-fill);
  --color-fill-secondary: var(--token-color-fill-secondary);
  --color-fill-tertiary: var(--token-color-fill-tertiary);
  --color-fill-quaternary: var(--token-color-fill-quaternary);
  --color-fill-disable: var(--token-color-fill-disable);

  /* Background */
  --color-bg-container: var(--token-color-bg-container);
  --color-bg-elevated: var(--token-color-bg-elevated);
  --color-bg-layout: var(--token-color-bg-layout);
  --color-bg-spotlight: var(--token-color-bg-spotlight);
  --color-bg-mask: var(--token-color-bg-mask);
  --color-mask-shimmer-weak: var(--token-color-mask-shimmer-weak);
  --color-mask-shimmer-strong: var(--token-color-mask-shimmer-strong);
  --color-mask-shimmer-full: var(--token-color-mask-shimmer-full);
  --color-bg-base: var(--token-color-bg-base);
  --color-bg-highlight: var(--token-color-bg-highlight);
  --color-bg-highlight-hover: var(--token-color-bg-highlight-hover);

  /* Shadow（1～4 级，与 primary/secondary/tertiary/quaternary 一致） */
  --color-shadow-primary: var(--token-color-shadow-primary);
  --color-shadow-secondary: var(--token-color-shadow-secondary);
  --color-shadow-tertiary: var(--token-color-shadow-tertiary);
  --color-shadow-quaternary: var(--token-color-shadow-quaternary);

  /* Elevation — 完整 box-shadow value token，Tailwind shadow-* 类自动消费 */
  --shadow-xs: 0 1px 2px var(--color-shadow-primary);
  --shadow-sm: 0 1px 3px var(--color-shadow-secondary), 0 1px 2px var(--color-shadow-primary);
  --shadow-md: 0 4px 6px var(--color-shadow-secondary), 0 2px 4px var(--color-shadow-primary);
  --shadow-lg: 0 10px 15px var(--color-shadow-tertiary), 0 4px 6px var(--color-shadow-secondary);
  --shadow-xl: 0 20px 25px var(--color-shadow-tertiary), 0 8px 10px var(--color-shadow-secondary);
  --shadow-2xl: 0 25px 50px var(--color-shadow-quaternary);

  /* Semantic */
  --color-link: var(--token-color-link);
  --color-error: var(--token-color-error);
  --color-error-hover: var(--token-color-error-hover);
  --color-error-bg: var(--token-color-error-bg);
  --color-error-bg-hover: var(--token-color-error-bg-hover);
  --color-error-border: var(--token-color-error-border);
  --color-info: var(--token-color-info);
  --color-info-hover: var(--token-color-info-hover);
  --color-info-bg: var(--token-color-info-bg);
  --color-info-bg-hover: var(--token-color-info-bg-hover);
  --color-info-border: var(--token-color-info-border);
  --color-success: var(--token-color-success);
  --color-success-hover: var(--token-color-success-hover);
  --color-success-bg: var(--token-color-success-bg);
  --color-success-bg-hover: var(--token-color-success-bg-hover);
  --color-success-border: var(--token-color-success-border);
  --color-warning: var(--token-color-warning);
  --color-warning-hover: var(--token-color-warning-hover);
  --color-warning-bg: var(--token-color-warning-bg);
  --color-warning-bg-hover: var(--token-color-warning-bg-hover);
  --color-warning-border: var(--token-color-warning-border);

  /* Accent */
  --color-pink: var(--token-color-pink);
  --color-pink-bg: var(--token-color-pink-bg);
  --color-pink-bg-hover: var(--token-color-pink-bg-hover);
  --color-purple: var(--token-color-purple);
  --color-purple-bg: var(--token-color-purple-bg);
  --color-purple-bg-hover: var(--token-color-purple-bg-hover);
  --color-yellow: var(--token-color-yellow);
  --color-yellow-bg: var(--token-color-yellow-bg);
  --color-yellow-bg-hover: var(--token-color-yellow-bg-hover);
  --color-orange: var(--token-color-orange);
  --color-orange-bg: var(--token-color-orange-bg);
  --color-orange-bg-hover: var(--token-color-orange-bg-hover);
  --color-teal: var(--token-color-teal);
  --color-teal-bg: var(--token-color-teal-bg);
  --color-teal-bg-hover: var(--token-color-teal-bg-hover);
  --color-blue: var(--token-color-blue);
  --color-blue-bg: var(--token-color-blue-bg);
  --color-blue-bg-hover: var(--token-color-blue-bg-hover);
  --color-mauve: var(--token-color-mauve);
  --color-mauve-bg: var(--token-color-mauve-bg);
  --color-mauve-bg-hover: var(--token-color-mauve-bg-hover);
  --color-slate: var(--token-color-slate);
  --color-slate-bg: var(--token-color-slate-bg);
  --color-slate-bg-hover: var(--token-color-slate-bg-hover);
  --color-lavender: var(--token-color-lavender);
  --color-lavender-bg: var(--token-color-lavender-bg);
  --color-lavender-bg-hover: var(--token-color-lavender-bg-hover);
  --color-sage: var(--token-color-sage);
  --color-sage-bg: var(--token-color-sage-bg);
  --color-sage-bg-hover: var(--token-color-sage-bg-hover);

  /* Diff */
  --color-diff-insert: var(--token-color-diff-insert);
  --color-diff-insert-bg: var(--token-color-diff-insert-bg);
  --color-diff-remove: var(--token-color-diff-remove);
  --color-diff-remove-bg: var(--token-color-diff-remove-bg);

  /* Accordion 展开/收起动画（Radix 提供 --radix-accordion-content-height） */
  --animate-accordion-down: accordion-down 0.2s ease-out;
  --animate-accordion-up: accordion-up 0.2s ease-out;
  --animate-accordion-right: accordion-right 0.2s ease-out;
  --animate-accordion-left: accordion-left 0.2s ease-out;
}

/* 行高随 data-style 变化，与 text-xs/text-sm/text-base 等配套使用，避免固定 leading-6 等 */
.leading-xs { line-height: var(--font-size-xs--line-height); }
.leading-sm { line-height: var(--font-size-sm--line-height); }
.leading-base { line-height: var(--font-size-base--line-height); }
.leading-lg { line-height: var(--font-size-lg--line-height); }
.leading-xl { line-height: var(--font-size-xl--line-height); }

@keyframes accordion-down {
  from {
    height: 0;
  }
  to {
    height: var(--radix-accordion-content-height);
  }
}
@keyframes accordion-up {
  from {
    height: var(--radix-accordion-content-height);
  }
  to {
    height: 0;
  }
}
@keyframes accordion-right {
  from {
    width: 0;
  }
  to {
    width: var(--radix-accordion-content-width);
  }
}
@keyframes accordion-left {
  from {
    width: var(--radix-accordion-content-width);
  }
  to {
    width: 0;
  }
}
@keyframes spark-compress-a {
  0%, 100% {
    transform: translateY(-3px) scaleX(1);
    opacity: 0.55;
  }
  50% {
    transform: translateY(0) scaleX(0.7);
    opacity: 1;
  }
}
@keyframes spark-compress-b {
  0%, 100% {
    transform: translateY(3px) scaleX(0.65);
    opacity: 0.75;
  }
  50% {
    transform: translateY(0) scaleX(1);
    opacity: 1;
  }
}

/* ============================================
   Reduced motion — 全局无障碍
   ============================================ */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* ============================================
   Seti 文件图标字体（与 QodeChatPanel 一致；需将 qoder-seti.woff 置于 public/ 或根路径）
   ============================================ */
@font-face {
  font-family: 'Seti';
  src: url('/qoder-seti.woff') format('woff');
  font-weight: normal;
  font-style: normal;
  font-display: swap;
}
.font-seti {
  font-family: 'Seti', sans-serif;
}
