@import "tailwindcss";

/* Use class-based dark mode (matches next-themes attribute="class") */
@custom-variant dark (&:is(.dark *));

/*
 * Map CSS variables to Tailwind 4 theme so that utility classes
 * like bg-primary, text-muted-foreground, border-border work.
 */
@theme inline {
  --color-background: hsl(var(--background));
  --color-foreground: hsl(var(--foreground));
  --color-card: hsl(var(--card));
  --color-card-foreground: hsl(var(--card-foreground));
  --color-popover: hsl(var(--popover));
  --color-popover-foreground: hsl(var(--popover-foreground));
  --color-primary: hsl(var(--primary));
  --color-primary-foreground: hsl(var(--primary-foreground));
  --color-secondary: hsl(var(--secondary));
  --color-secondary-foreground: hsl(var(--secondary-foreground));
  --color-muted: hsl(var(--muted));
  --color-muted-foreground: hsl(var(--muted-foreground));
  --color-accent: hsl(var(--accent));
  --color-accent-foreground: hsl(var(--accent-foreground));
  --color-destructive: hsl(var(--destructive));
  --color-destructive-foreground: hsl(var(--destructive-foreground));
  --color-border: hsl(var(--border));
  --color-input: hsl(var(--input));
  --color-ring: hsl(var(--ring));
  --radius-sm: calc(var(--radius) - 4px);
  --radius-md: calc(var(--radius) - 2px);
  --radius-lg: var(--radius);
  --radius-xl: calc(var(--radius) + 4px);
}

/*
 * shadcn/ui CSS variables — light and dark themes.
 */
@layer base {
  :root {
    --background: 0 0% 100%;
    --foreground: 240 10% 3.9%;
    --card: 0 0% 100%;
    --card-foreground: 240 10% 3.9%;
    --popover: 0 0% 100%;
    --popover-foreground: 240 10% 3.9%;
    --primary: 240 5.9% 10%;
    --primary-foreground: 0 0% 98%;
    --secondary: 240 4.8% 95.9%;
    --secondary-foreground: 240 5.9% 10%;
    --muted: 240 4.8% 95.9%;
    --muted-foreground: 240 3.8% 46.1%;
    --accent: 240 4.8% 95.9%;
    --accent-foreground: 240 5.9% 10%;
    --destructive: 0 84.2% 60.2%;
    --destructive-foreground: 0 0% 98%;
    --border: 240 5.9% 90%;
    --input: 240 5.9% 90%;
    --ring: 240 5.9% 10%;
    --radius: 0.5rem;
  }

  .dark {
    --background: 240 10% 3.9%;
    --foreground: 0 0% 98%;
    --card: 240 10% 3.9%;
    --card-foreground: 0 0% 98%;
    --popover: 240 10% 3.9%;
    --popover-foreground: 0 0% 98%;
    --primary: 0 0% 98%;
    --primary-foreground: 240 5.9% 10%;
    --secondary: 240 3.7% 15.9%;
    --secondary-foreground: 0 0% 98%;
    --muted: 240 3.7% 15.9%;
    --muted-foreground: 240 5% 64.9%;
    --accent: 240 3.7% 15.9%;
    --accent-foreground: 0 0% 98%;
    --destructive: 0 62.8% 30.6%;
    --destructive-foreground: 0 0% 98%;
    --border: 240 3.7% 15.9%;
    --input: 240 3.7% 15.9%;
    --ring: 240 4.9% 83.9%;
  }
}

/* ==========================================================================
 * Agent Tree — ReactFlow node styles.
 * Kept as CSS because ReactFlow custom nodes render outside React's
 * className control and need stable class selectors.
 * ========================================================================== */

.agent-tree {
  background: #fff;
  border: 1px solid hsl(var(--border));
  border-radius: calc(var(--radius) + 2px);
  padding: 0.75rem 1rem;
}

.agent-meta {
  font-size: 0.78rem;
  color: hsl(var(--muted-foreground));
  font-family: monospace;
}

.react-flow-wrapper {
  position: relative;
  height: 400px;
  background: #fff;
  border: 1px solid hsl(var(--border));
  border-radius: calc(var(--radius) + 2px);
}

.tree-reset-btn {
  position: absolute;
  top: 8px;
  right: 8px;
  z-index: 5;
  font-size: 0.78rem;
  padding: 0.2rem 0.6rem;
  border: 1px solid hsl(var(--border));
  border-radius: var(--radius);
  background: hsl(var(--background));
  color: hsl(var(--foreground));
  cursor: pointer;
}

.tree-reset-btn:hover {
  background: hsl(var(--accent));
}

.agent-flow-node {
  background: #fff;
  border: 1px solid hsl(var(--border));
  border-left: 3px solid hsl(var(--border));
  border-radius: var(--radius);
  padding: 0.5rem 0.75rem;
  min-width: 150px;
  font-size: 0.85rem;
}

.agent-flow-node.running {
  border-left-color: #2e7d32;
}

.agent-flow-node.success {
  border-left-color: #2e7d32;
}

.agent-flow-node.error {
  border-left-color: #c62828;
}

.agent-flow-node.warning {
  border-left-color: #e65100;
}

.agent-flow-node.cancelling {
  border-left-color: #e65100;
  animation: pulse 1.5s ease-in-out infinite;
}

.agent-flow-node.cancelled {
  border-left-color: #e65100;
  opacity: 0.6;
}

.agent-flow-node.pending {
  border: 1px dashed hsl(var(--border));
  border-left: 3px dashed hsl(var(--border));
  color: hsl(var(--muted-foreground));
  background: hsl(var(--muted));
}

.agent-flow-role {
  font-weight: 600;
  font-size: 0.9rem;
  margin-bottom: 0.15rem;
}

.agent-flow-meta {
  display: flex;
  align-items: center;
  gap: 0.35rem;
  font-size: 0.78rem;
  color: hsl(var(--muted-foreground));
}

.status-dot {
  display: inline-block;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: hsl(var(--muted-foreground));
}

.status-dot.running {
  background: #2e7d32;
}

.status-dot.success {
  background: #2e7d32;
}

.status-dot.error {
  background: #c62828;
}

.status-dot.warning {
  background: #e65100;
}

.status-dot.cancelling {
  background: #e65100;
  animation: pulse 1.5s ease-in-out infinite;
}

.status-dot.cancelled {
  background: #e65100;
  opacity: 0.6;
}

.denied-list {
  margin-top: 0.5rem;
  font-size: 0.82rem;
  color: hsl(var(--muted-foreground));
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  align-items: center;
}

.denied-item {
  background: #fbe9e7;
  color: #c62828;
  padding: 0.15rem 0.5rem;
  border-radius: 10px;
  font-size: 0.75rem;
}
