@cossistant/next
Version:
Next.js-ready SDK for building AI-powered support/chat widgets. Hooks + primitives, WS-driven, TypeScript-first. Next.js-ready, Tailwind optional.
405 lines (378 loc) • 11.3 kB
CSS
@custom-variant dark (&:is(.dark *));
@layer base {
.cossistant {
@apply border-co-border;
@apply scroll-smooth;
color-scheme: inherit;
/* Typeface tokens */
--co-font-sans: var(
--co-theme-font-sans,
var(--font-sans, "Geist", "Inter", sans-serif)
);
--co-font-mono: var(
--co-theme-font-mono,
var(--font-mono, "Geist Mono", "Inter Mono", monospace)
);
--co-border-color: var(
--co-theme-border-color,
var(--color-border, oklch(92.2% 0 0))
);
/* Core surfaces */
--co-radius: var(--co-theme-radius, var(--radius, 0.625rem));
--co-background-base: var(
--co-theme-background,
var(--background, oklch(99% 0 0))
);
--co-foreground-base: var(
--co-theme-foreground,
var(--foreground, oklch(14.5% 0 0))
);
--co-popover-base: var(
--co-theme-popover,
var(--popover, var(--co-background-base))
);
--co-popover-foreground-base: var(
--co-theme-popover-foreground,
var(--popover-foreground, var(--co-foreground-base))
);
--co-primary-base: var(
--co-theme-primary,
var(--primary, oklch(20.5% 0 0))
);
--co-primary-foreground-base: var(
--co-theme-primary-foreground,
var(--primary-foreground, oklch(98.5% 0 0))
);
--co-secondary-base: var(
--co-theme-secondary,
var(--secondary, oklch(97% 0 0))
);
--co-secondary-foreground-base: var(
--co-theme-secondary-foreground,
var(--secondary-foreground, oklch(20.5% 0 0))
);
--co-border-base: var(--co-theme-border, var(--border, oklch(92.2% 0 0)));
--co-input-base: var(--co-theme-input, var(--input, oklch(92.2% 0 0)));
--co-ring-base: var(--co-theme-ring, var(--ring, var(--co-primary-base)));
--co-accent-base: var(
--co-theme-accent,
var(--accent, var(--co-primary-base))
);
--co-accent-foreground-base: var(
--co-theme-accent-foreground,
var(--accent-foreground, var(--co-primary-foreground-base))
);
/* Neutral shades derived from the background */
--co-background-50-mix: color-mix(
in oklch,
var(--co-background-base) 98%,
var(--co-foreground-base)
);
--co-background-100-mix: color-mix(
in oklch,
var(--co-background-base) 97%,
var(--co-foreground-base)
);
--co-background-200-mix: color-mix(
in oklch,
var(--co-background-base) 96%,
var(--co-foreground-base)
);
--co-background-300-mix: color-mix(
in oklch,
var(--co-background-base) 95%,
var(--co-foreground-base)
);
--co-background-400-mix: color-mix(
in oklch,
var(--co-background-base) 94%,
var(--co-foreground-base)
);
--co-background-500-mix: color-mix(
in oklch,
var(--co-background-base) 93%,
var(--co-foreground-base)
);
--co-background-600-mix: color-mix(
in oklch,
var(--co-background-base) 92%,
var(--co-foreground-base)
);
/* Muted tones */
--co-muted-mix: color-mix(
in oklch,
var(--co-background-base) 85%,
var(--co-foreground-base)
);
--co-muted-foreground-mix: color-mix(
in oklch,
var(--co-foreground-base) 70%,
white
);
/* Public tokens consumed by Tailwind theme */
--co-background: var(--co-background-base);
--co-background-50: var(
--co-theme-background-50,
var(--co-background-50-mix, oklch(92% 0 0))
);
--co-background-100: var(
--co-theme-background-100,
var(--co-background-100-mix, oklch(93% 0 0))
);
--co-background-200: var(
--co-theme-background-200,
var(--co-background-200-mix, oklch(94% 0 0))
);
--co-background-300: var(
--co-theme-background-300,
var(--co-background-300-mix, oklch(95% 0 0))
);
--co-background-400: var(
--co-theme-background-400,
var(--co-background-400-mix, oklch(96% 0 0))
);
--co-background-500: var(
--co-theme-background-500,
var(--co-background-500-mix, oklch(97% 0 0))
);
--co-background-600: var(
--co-theme-background-600,
var(--co-background-600-mix, oklch(98% 0 0))
);
--co-foreground: var(--co-foreground-base);
--co-popover: var(--co-popover-base);
--co-popover-foreground: var(--co-popover-foreground-base);
--co-primary: var(--co-primary-base);
--co-primary-foreground: var(--co-primary-foreground-base);
--co-secondary: var(--co-secondary-base);
--co-secondary-foreground: var(--co-secondary-foreground-base);
--co-muted: var(
--co-theme-muted,
var(--muted, var(--co-muted-mix, oklch(97% 0 0)))
);
--co-muted-foreground: var(
--co-theme-muted-foreground,
var(--muted-foreground, var(--co-muted-foreground-mix, oklch(55.6% 0 0)))
);
--co-border: var(--co-border-base);
--co-input: var(--co-input-base);
--co-ring: var(--co-ring-base);
--co-accent: var(--co-accent-base);
--co-accent-foreground: var(--co-accent-foreground-base);
/* Accent palette */
--co-pink: var(--co-theme-pink, oklch(76.3% 0.152 354));
--co-yellow: var(--co-theme-yellow, oklch(86.4% 0.144 99));
--co-blue: var(--co-theme-blue, oklch(72.5% 0.132 241));
--co-orange: var(--co-theme-orange, oklch(74.5% 0.166 50));
/* Status colors */
--co-destructive: var(--co-theme-destructive, oklch(57.7% 0.245 27.325));
--co-destructive-foreground: var(
--co-theme-destructive-foreground,
oklch(57.7% 0.245 27.325)
);
--co-success: var(--co-theme-success, oklch(71.7% 0.18 142));
--co-success-foreground: var(
--co-theme-success-foreground,
oklch(26.5% 0.052 142.7)
);
--co-neutral: var(--co-theme-neutral, oklch(60.8% 0 0));
--co-neutral-foreground: var(
--co-theme-neutral-foreground,
oklch(25.6% 0 0)
);
--co-warning: var(--co-theme-warning, oklch(86.4% 0.144 99));
--co-warning-foreground: var(
--co-theme-warning-foreground,
oklch(41.4% 0.071 99)
);
}
.dark .cossistant,
.cossistant[data-color-scheme="dark"] {
/* Provide dark defaults without overriding host tokens */
--co-background-base: var(
--co-theme-background,
var(--background, oklch(15.5% 0 0))
);
--co-foreground-base: var(
--co-theme-foreground,
var(--foreground, oklch(98.5% 0 0))
);
--co-border-color: var(
--co-theme-border-color,
var(--color-border, oklch(26.9% 0 0))
);
--co-popover-base: var(
--co-theme-popover,
var(--popover, oklch(14.5% 0 0))
);
--co-popover-foreground-base: var(
--co-theme-popover-foreground,
var(--popover-foreground, oklch(98.5% 0 0))
);
--co-primary-base: var(
--co-theme-primary,
var(--primary, oklch(98.5% 0 0))
);
--co-primary-foreground-base: var(
--co-theme-primary-foreground,
var(--primary-foreground, oklch(20.5% 0 0))
);
--co-secondary-base: var(
--co-theme-secondary,
var(--secondary, oklch(26.9% 0 0))
);
--co-secondary-foreground-base: var(
--co-theme-secondary-foreground,
var(--secondary-foreground, oklch(98.5% 0 0))
);
--co-border-base: var(--co-theme-border, var(--border, oklch(26.9% 0 0)));
--co-input-base: var(--co-theme-input, var(--input, oklch(26.9% 0 0)));
--co-ring-base: var(--co-theme-ring, var(--ring, var(--co-primary-base)));
--co-accent-base: var(
--co-theme-accent,
var(--accent, var(--co-primary-base))
);
--co-accent-foreground-base: var(
--co-theme-accent-foreground,
var(--accent-foreground, var(--co-primary-foreground-base))
);
--co-muted-mix: color-mix(
in oklch,
var(--co-background-base) 55%,
var(--co-foreground-base)
);
--co-muted-foreground-mix: color-mix(
in oklch,
var(--co-foreground-base) 65%,
white
);
--co-background-50-mix: color-mix(
in oklch,
var(--co-background-base) 98%,
var(--co-foreground-base)
);
--co-background-100-mix: color-mix(
in oklch,
var(--co-background-base) 96%,
var(--co-foreground-base)
);
--co-background-200-mix: color-mix(
in oklch,
var(--co-background-base) 94%,
var(--co-foreground-base)
);
--co-background-300-mix: color-mix(
in oklch,
var(--co-background-base) 92%,
var(--co-foreground-base)
);
--co-background-400-mix: color-mix(
in oklch,
var(--co-background-base) 90%,
var(--co-foreground-base)
);
--co-background-500-mix: color-mix(
in oklch,
var(--co-background-base) 88%,
var(--co-foreground-base)
);
--co-background-600-mix: color-mix(
in oklch,
var(--co-background-base) 86%,
var(--co-foreground-base)
);
--co-pink: var(--co-theme-pink, oklch(84.2% 0.109 354));
--co-yellow: var(--co-theme-yellow, oklch(90.3% 0.111 99));
--co-blue: var(--co-theme-blue, oklch(79.8% 0.089 241));
--co-orange: var(--co-theme-orange, oklch(68.2% 0.194 50));
--co-destructive: var(--co-theme-destructive, oklch(39.6% 0.141 25.723));
--co-destructive-foreground: var(
--co-theme-destructive-foreground,
oklch(63.7% 0.237 25.331)
);
--co-success: var(--co-theme-success, oklch(60% 0.15 142));
--co-success-foreground: var(
--co-theme-success-foreground,
oklch(85% 0.12 142)
);
--co-neutral: var(--co-theme-neutral, oklch(50% 0 0));
--co-neutral-foreground: var(--co-theme-neutral-foreground, oklch(85% 0 0));
--co-warning: var(--co-theme-warning, oklch(90.3% 0.111 99));
--co-warning-foreground: var(
--co-theme-warning-foreground,
oklch(85% 0.1 99)
);
}
}
@theme inline {
--font-co-sans: var(--co-font-sans);
--font-co-mono: var(--co-font-mono);
--color-co-background: var(--co-background);
--color-co-background-50: var(--co-background-50);
--color-co-background-100: var(--co-background-100);
--color-co-background-200: var(--co-background-200);
--color-co-background-300: var(--co-background-300);
--color-co-background-400: var(--co-background-400);
--color-co-background-500: var(--co-background-500);
--color-co-background-600: var(--co-background-600);
--color-co-foreground: var(--co-foreground);
--color-co-primary: var(--co-primary);
--color-co-primary-foreground: var(--co-primary-foreground);
--color-co-secondary: var(--co-secondary);
--color-co-secondary-foreground: var(--co-secondary-foreground);
--color-co-muted: var(--co-muted);
--color-co-muted-foreground: var(--co-muted-foreground);
--color-co-border: var(--co-border);
--color-co-input: var(--co-input);
--color-co-ring: var(--co-ring);
--radius-co: var(--co-radius);
/* custom colors */
--color-co-pink: var(--co-pink);
--color-co-yellow: var(--co-yellow);
--color-co-blue: var(--co-blue);
--color-co-orange: var(--co-orange);
/* status colors */
--color-co-destructive: var(--co-destructive);
--color-co-destructive-foreground: var(--co-destructive-foreground);
--color-co-success: var(--co-success);
--color-co-success-foreground: var(--co-success-foreground);
--color-co-neutral: var(--co-neutral);
--color-co-neutral-foreground: var(--co-neutral-foreground);
--color-co-warning: var(--co-warning);
--color-co-warning-foreground: var(--co-warning-foreground);
}
@layer utilities {
.cossistant {
.animation-delay-0 {
animation-delay: 0ms;
}
.animation-delay-200 {
animation-delay: 200ms;
}
.animation-delay-400 {
animation-delay: 400ms;
}
@keyframes bounce-dot {
0%,
80%,
100% {
transform: translateY(0);
}
40% {
transform: translateY(-6px);
}
}
.dot-bounce-1 {
animation: bounce-dot 1.4s infinite;
animation-delay: 0s;
}
.dot-bounce-2 {
animation: bounce-dot 1.4s infinite;
animation-delay: 0.16s;
}
.dot-bounce-3 {
animation: bounce-dot 1.4s infinite;
animation-delay: 0.32s;
}
}
}