xtrace 0.0.15

An AI observability service for collecting, storing, and querying traces, spans, and metrics across LLM and agent workflows.
Documentation
@tailwind base;
@tailwind components;
@tailwind utilities;

/* XTrace Design System - LLM Observability Platform
   Colors derived from favicon: orange-pink gradient + purple gradient
*/

@layer base {
  :root {
    --background: 0 0% 99%;
    --foreground: 220 20% 10%;

    --card: 0 0% 100%;
    --card-foreground: 220 20% 10%;

    --popover: 0 0% 100%;
    --popover-foreground: 220 20% 10%;

    /* Purple from favicon gradient */
    --primary: 266 92% 50%;
    --primary-foreground: 0 0% 100%;

    --secondary: 220 14% 96%;
    --secondary-foreground: 220 20% 20%;

    --muted: 220 14% 96%;
    --muted-foreground: 220 10% 46%;

    --accent: 266 70% 96%;
    --accent-foreground: 266 92% 40%;

    --destructive: 0 84% 60%;
    --destructive-foreground: 0 0% 100%;

    --border: 220 13% 91%;
    --input: 220 13% 91%;
    --ring: 266 92% 50%;

    --radius: 0.5rem;

    /* Sidebar */
    --sidebar-background: 0 0% 100%;
    --sidebar-foreground: 220 10% 40%;
    --sidebar-primary: 266 92% 50%;
    --sidebar-primary-foreground: 0 0% 100%;
    --sidebar-accent: 266 70% 97%;
    --sidebar-accent-foreground: 266 92% 40%;
    --sidebar-border: 220 13% 93%;
    --sidebar-ring: 266 92% 50%;

    /* XTrace custom colors */
    --xtrace-purple: 266 92% 50%;
    --xtrace-purple-light: 270 80% 65%;
    --xtrace-orange: 32 82% 64%;
    --xtrace-pink: 340 90% 55%;
    --xtrace-success: 142 70% 45%;
    --xtrace-warning: 38 92% 50%;
    --xtrace-info: 200 90% 50%;

    /* Gradients */
    --gradient-brand: linear-gradient(135deg, hsl(32 82% 64%) 0%, hsl(340 90% 55%) 100%);
    --gradient-purple: linear-gradient(135deg, hsl(266 92% 50%) 0%, hsl(270 80% 65%) 100%);
    --gradient-subtle: linear-gradient(135deg, hsl(266 70% 97%) 0%, hsl(340 50% 97%) 100%);
  }

  .dark {
    --background: 220 25% 6%;
    --foreground: 210 40% 98%;

    --card: 220 25% 8%;
    --card-foreground: 210 40% 98%;

    --popover: 220 25% 8%;
    --popover-foreground: 210 40% 98%;

    --primary: 266 85% 60%;
    --primary-foreground: 0 0% 100%;

    --secondary: 220 20% 14%;
    --secondary-foreground: 210 40% 98%;

    --muted: 220 20% 14%;
    --muted-foreground: 215 20% 65%;

    --accent: 266 50% 20%;
    --accent-foreground: 266 85% 75%;

    --destructive: 0 62% 40%;
    --destructive-foreground: 210 40% 98%;

    --border: 220 20% 18%;
    --input: 220 20% 18%;
    --ring: 266 85% 60%;

    --sidebar-background: 220 25% 7%;
    --sidebar-foreground: 220 10% 70%;
    --sidebar-primary: 266 85% 60%;
    --sidebar-primary-foreground: 0 0% 100%;
    --sidebar-accent: 266 40% 15%;
    --sidebar-accent-foreground: 266 85% 75%;
    --sidebar-border: 220 20% 15%;
    --sidebar-ring: 266 85% 60%;
  }
}

@layer base {
  * {
    @apply border-border;
  }

  body {
    @apply bg-background text-foreground font-sans antialiased;
    font-family: 'Inter', system-ui, -apple-system, sans-serif;
  }
}

@layer components {
  .gradient-brand {
    background: var(--gradient-brand);
  }

  .gradient-purple {
    background: var(--gradient-purple);
  }

  .gradient-subtle {
    background: var(--gradient-subtle);
  }

  .text-gradient-brand {
    background: var(--gradient-brand);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
  }

  .text-gradient-purple {
    background: var(--gradient-purple);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
  }
}

@layer utilities {
  .scrollbar-thin {
    scrollbar-width: thin;
  }

  .scrollbar-thin::-webkit-scrollbar {
    width: 6px;
    height: 6px;
  }

  .scrollbar-thin::-webkit-scrollbar-track {
    background: transparent;
  }

  .scrollbar-thin::-webkit-scrollbar-thumb {
    background: hsl(var(--muted-foreground) / 0.3);
    border-radius: 3px;
  }

  .scrollbar-thin::-webkit-scrollbar-thumb:hover {
    background: hsl(var(--muted-foreground) / 0.5);
  }
}