/*
 * Tailwind CSS v4 shared core for `web/`. CSS-first: no tailwind.config.ts.
 *
 * Layers, JS plugins, project-only design tokens, and app-level CSS are
 * declared here. Environment-specific entry files declare source scanning.
 */

@layer theme, base, components, utilities;

/* Tailwind core — selective layer imports skip preflight; we ship our own
 * (see ./preflight.css) so cross-app baseline stays controlled. */
@import 'tailwindcss/theme.css' layer(theme);
@import 'tailwindcss/utilities.css' layer(utilities);

/* Local preflight keeps the browser baseline controlled across app entries. */
@import './preflight.css' layer(base);

/* Design system: palette overrides, semantic tokens, light/dark themes,
 * project utilities and components. */
@import '@langgenius/dify-ui/styles.css';

/* Project-only runtime CSS variables (gradients and special masks). */
@import '../../themes/manual-light.css' layer(base);
@import '../../themes/manual-dark.css' layer(base);
@import './monaco-sticky-fix.css' layer(base);

/* Component CSS using @apply / @utility. */
@import '../components/base/action-button/index.css';
@import '../components/base/badge/index.css';
@import '../components/base/premium-badge/index.css';

/* ---------- JS plugins ------------------------------------------------ */
@plugin './plugins/icons.ts';
@plugin './plugins/typography.ts';

/* ---------- Project-only theme tokens --------------------------------- */
@theme {
  /* Additional breakpoints layered on top of v4 defaults. */
  --breakpoint-mobile: 100px;
  --breakpoint-tablet: 640px;
  --breakpoint-pc: 769px;
  --breakpoint-2k: 2560px;

  /* Custom animations. */
  --animate-spin-slow: spin 2s linear infinite;
}

/* Background-image / gradient utilities. Values resolve at runtime from
 * manual-light.css / manual-dark.css. Using @theme inline so the variable
 * indirection survives without re-declaring values at :root. */
@theme inline {
  /* Flat color (used as `bg-background-gradient-bg-fill-chat-bubble-bg-3`). */
  --color-background-gradient-bg-fill-chat-bubble-bg-3: var(--color-background-gradient-bg-fill-chat-bubble-bg-3);

  /* Gradients — registered under v4's --background-image-* namespace. */
  --background-image-chatbot-bg: var(--color-chatbot-bg);
  --background-image-chat-bubble-bg: var(--color-chat-bubble-bg);
  --background-image-chat-input-mask: var(--color-chat-input-mask);
  --background-image-workflow-process-bg: var(--color-workflow-process-bg);
  --background-image-workflow-process-paused-bg: var(--color-workflow-process-paused-bg);
  --background-image-workflow-run-failed-bg: var(--color-workflow-run-failed-bg);
  --background-image-workflow-batch-failed-bg: var(--color-workflow-batch-failed-bg);
  --background-image-mask-top2bottom-gray-50-to-transparent: var(--mask-top2bottom-gray-50-to-transparent);
  --background-image-marketplace-divider-bg: var(--color-marketplace-divider-bg);
  --background-image-marketplace-plugin-empty: var(--color-marketplace-plugin-empty);
  --background-image-toast-success-bg: var(--color-toast-success-bg);
  --background-image-toast-warning-bg: var(--color-toast-warning-bg);
  --background-image-toast-error-bg: var(--color-toast-error-bg);
  --background-image-toast-info-bg: var(--color-toast-info-bg);
  --background-image-app-detail-bg: var(--color-app-detail-bg);
  --background-image-app-detail-overlay-bg: var(--color-app-detail-overlay-bg);
  --background-image-dataset-chunk-process-success-bg: var(--color-dataset-chunk-process-success-bg);
  --background-image-dataset-chunk-process-error-bg: var(--color-dataset-chunk-process-error-bg);
  --background-image-dataset-chunk-detail-card-hover-bg: var(--color-dataset-chunk-detail-card-hover-bg);
  --background-image-dataset-child-chunk-expand-btn-bg: var(--color-dataset-child-chunk-expand-btn-bg);
  --background-image-dataset-option-card-blue-gradient: var(--color-dataset-option-card-blue-gradient);
  --background-image-dataset-option-card-purple-gradient: var(--color-dataset-option-card-purple-gradient);
  --background-image-dataset-option-card-orange-gradient: var(--color-dataset-option-card-orange-gradient);
  --background-image-dataset-chunk-list-mask-bg: var(--color-dataset-chunk-list-mask-bg);
  --background-image-line-divider-bg: var(--color-line-divider-bg);
  --background-image-dataset-warning-message-bg: var(--color-dataset-warning-message-bg);
  --background-image-price-premium-badge-background: var(--color-premium-badge-background);
  --background-image-premium-yearly-tip-text-background: var(--color-premium-yearly-tip-text-background);
  --background-image-price-premium-text-background: var(--color-premium-text-background);
  --background-image-price-enterprise-background: var(--color-price-enterprise-background);
  --background-image-grid-mask-background: var(--color-grid-mask-background);
  --background-image-node-data-source-bg: var(--color-node-data-source-bg);
  --background-image-tag-selector-mask-bg: var(--color-tag-selector-mask-bg);
  --background-image-tag-selector-mask-hover-bg: var(--color-tag-selector-mask-hover-bg);
  --background-image-pipeline-template-card-hover-bg: var(--color-pipeline-template-card-hover-bg);
  --background-image-pipeline-add-documents-title-bg: var(--color-pipeline-add-documents-title-bg);
  --background-image-billing-plan-title-bg: var(--color-billing-plan-title-bg);
  --background-image-billing-plan-card-premium-bg: var(--color-billing-plan-card-premium-bg);
  --background-image-billing-plan-card-enterprise-bg: var(--color-billing-plan-card-enterprise-bg);
  --background-image-knowledge-pipeline-creation-footer-bg: var(--color-knowledge-pipeline-creation-footer-bg);
  --background-image-progress-bar-indeterminate-stripe: var(--color-progress-bar-indeterminate-stripe);
  --background-image-chat-answer-human-input-form-divider-bg: var(--color-chat-answer-human-input-form-divider-bg);
}

/* ---------- App-level component CSS ----------------------------------- */
@layer components {
  [class*='code-'] {
    @apply font-mono;
  }

  .text-gradient {
    background: linear-gradient(91.58deg, #2250f2 -29.55%, #0ebcf3 75.22%);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
  }

  /* Shiki code block line numbers */
  .shiki-line-numbers code {
    counter-reset: line;
  }
  .shiki-line-numbers .line::before {
    counter-increment: line;
    content: counter(line);
    display: inline-block;
    width: 1rem;
    margin-right: 0.75rem;
    text-align: right;
    color: var(--color-text-quaternary);
    user-select: none;
  }
}
