Skip to content
Israel Agyeman-Prempeh edited this page Feb 16, 2026 · 1 revision

Welcome to the credopass wiki!

Credopass Palette

@import "tailwindcss";
@import "tw-animate-css";

@source "../../../apps/**/*.{ts,tsx}";
@source "../../../components/**/*.{ts,tsx}";
@source "../**/*.{ts,tsx}";

@custom-variant dark (&:is(.dark *));

/* ================================================================
   CREDOPASS DESIGN SYSTEM
   Premium dark-first theme with lime #d4ff00 accent
   ================================================================ */

:root {
  /* Core surfaces - light mode */
  --background: oklch(0.985 0 0);
  --foreground: oklch(0.145 0 0);
  --card: oklch(1 0 0);
  --card-foreground: oklch(0.145 0 0);
  --popover: oklch(1 0 0);
  --popover-foreground: oklch(0.145 0 0);

  /* Brand - lime accent */
  --primary: oklch(93.604% 0.22511 121.257);
  --primary-foreground: oklch(0.18 0.04 120);

  /* Neutrals */
  --secondary: oklch(0.967 0.001 286.375);
  --secondary-foreground: oklch(0.21 0.006 285.885);
  --muted: oklch(0.96 0 0);
  --muted-foreground: oklch(0.50 0 0);
  --accent: oklch(0.96 0 0);
  --accent-foreground: oklch(0.205 0 0);

  /* Functional */
  --destructive: oklch(0.58 0.22 27);
  --success: oklch(0.72 0.19 142);
  --warning: oklch(0.80 0.15 75);
  --info: oklch(0.68 0.15 240);

  /* Borders & inputs */
  --border: oklch(0.91 0 0);
  --border-strong: oklch(0.82 0 0);
  --input: oklch(0.91 0 0);
  --ring: oklch(93.604% 0.22511 121.257);

  /* Charts - expanded palette for data viz */
  --chart-1: oklch(0.88 0.15 92);
  --chart-2: oklch(93.604% 0.22511 121.257);
  --chart-3: oklch(0.67 0.16 58);
  --chart-4: oklch(0.56 0.15 49);
  --chart-5: oklch(0.47 0.12 46);

  /* Radius */
  --radius: 0.625rem;

  /* Sidebar */
  --sidebar: oklch(0.98 0 0);
  --sidebar-foreground: oklch(0.145 0 0);
  --sidebar-primary: oklch(93.604% 0.22511 121.257);
  --sidebar-primary-foreground: oklch(0.18 0.04 120);
  --sidebar-accent: oklch(0.96 0 0);
  --sidebar-accent-foreground: oklch(0.205 0 0);
  --sidebar-border: oklch(0.91 0 0);
  --sidebar-ring: oklch(93.604% 0.22511 121.257);

  /* Glass effects */
  --glass-bg: oklch(1 0 0 / 60%);
  --glass-border: oklch(0 0 0 / 8%);
  --glass-blur: 16px;

  /* Glow effects */
  --glow-primary: oklch(93.604% 0.22511 121.257 / 25%);
  --glow-primary-intense: oklch(93.604% 0.22511 121.257 / 50%);
}

.dark {
  /* Core surfaces - layered depth, not flat black */
  --background: oklch(0.13 0.005 260);
  --foreground: oklch(0.96 0 0);
  --card: oklch(0.17 0.005 260);
  --card-foreground: oklch(0.96 0 0);
  --popover: oklch(0.17 0.005 260);
  --popover-foreground: oklch(0.96 0 0);

  /* Brand - lime accent on dark */
  --primary: oklch(93.604% 0.22511 121.257);
  --primary-foreground: oklch(0.18 0.04 120);

  /* Neutrals - richer, not pure gray */
  --secondary: oklch(0.22 0.005 260);
  --secondary-foreground: oklch(0.96 0 0);
  --muted: oklch(0.22 0.005 260);
  --muted-foreground: oklch(0.60 0 0);
  --accent: oklch(0.22 0.005 260);
  --accent-foreground: oklch(0.96 0 0);

  /* Functional */
  --destructive: oklch(0.704 0.191 22.216);
  --success: oklch(0.72 0.19 142);
  --warning: oklch(0.80 0.15 75);
  --info: oklch(0.68 0.15 240);

  /* Borders - subtle translucent for depth */
  --border: oklch(1 0 0 / 8%);
  --border-strong: oklch(1 0 0 / 15%);
  --input: oklch(1 0 0 / 10%);
  --ring: oklch(93.604% 0.22511 121.257);

  /* Charts */
  --chart-1: oklch(0.88 0.15 92);
  --chart-2: oklch(93.604% 0.22511 121.257);
  --chart-3: oklch(0.67 0.16 58);
  --chart-4: oklch(0.56 0.15 49);
  --chart-5: oklch(0.47 0.12 46);

  /* Sidebar */
  --sidebar: oklch(0.15 0.005 260);
  --sidebar-foreground: oklch(0.96 0 0);
  --sidebar-primary: oklch(93.604% 0.22511 121.257);
  --sidebar-primary-foreground: oklch(0.18 0.04 120);
  --sidebar-accent: oklch(0.20 0.005 260);
  --sidebar-accent-foreground: oklch(0.96 0 0);
  --sidebar-border: oklch(1 0 0 / 8%);
  --sidebar-ring: oklch(93.604% 0.22511 121.257);

  /* Glass effects */
  --glass-bg: oklch(0.17 0.005 260 / 70%);
  --glass-border: oklch(1 0 0 / 8%);
  --glass-blur: 20px;

  /* Glow effects */
  --glow-primary: oklch(93.604% 0.22511 121.257 / 20%);
  --glow-primary-intense: oklch(93.604% 0.22511 121.257 / 40%);
}

@theme inline {
  /* Typography */
  --font-sans: 'Inter Variable', ui-sans-serif, system-ui, sans-serif;

  /* Color tokens */
  --color-sidebar-ring: var(--sidebar-ring);
  --color-sidebar-border: var(--sidebar-border);
  --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
  --color-sidebar-accent: var(--sidebar-accent);
  --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
  --color-sidebar-primary: var(--sidebar-primary);
  --color-sidebar-foreground: var(--sidebar-foreground);
  --color-sidebar: var(--sidebar);
  --color-chart-5: var(--chart-5);
  --color-chart-4: var(--chart-4);
  --color-chart-3: var(--chart-3);
  --color-chart-2: var(--chart-2);
  --color-chart-1: var(--chart-1);
  --color-ring: var(--ring);
  --color-input: var(--input);
  --color-border: var(--border);
  --color-border-strong: var(--border-strong);
  --color-destructive: var(--destructive);
  --color-success: var(--success);
  --color-warning: var(--warning);
  --color-info: var(--info);
  --color-accent-foreground: var(--accent-foreground);
  --color-accent: var(--accent);
  --color-muted-foreground: var(--muted-foreground);
  --color-muted: var(--muted);
  --color-secondary-foreground: var(--secondary-foreground);
  --color-secondary: var(--secondary);
  --color-primary-foreground: var(--primary-foreground);
  --color-primary: var(--primary);
  --color-popover-foreground: var(--popover-foreground);
  --color-popover: var(--popover);
  --color-card-foreground: var(--card-foreground);
  --color-card: var(--card);
  --color-foreground: var(--foreground);
  --color-background: var(--background);

  /* Radius scale */
  --radius-sm: calc(var(--radius) - 4px);
  --radius-md: calc(var(--radius) - 2px);
  --radius-lg: var(--radius);
  --radius-xl: calc(var(--radius) + 4px);
  --radius-2xl: calc(var(--radius) + 8px);
  --radius-3xl: calc(var(--radius) + 12px);
  --radius-4xl: calc(var(--radius) + 16px);

  /* Animation tokens */
  --animate-fade-in: fade-in 0.4s ease-out;
  --animate-fade-up: fade-up 0.5s ease-out;
  --animate-slide-in-right: slide-in-right 0.3s ease-out;
  --animate-scale-in: scale-in 0.2s ease-out;
  --animate-glow-pulse: glow-pulse 2s ease-in-out infinite;
  --animate-shimmer: shimmer 2s linear infinite;
  --animate-float: float 6s ease-in-out infinite;
  --animate-counter: counter 0.6s ease-out;
}

/* ================================================================
   KEYFRAME ANIMATIONS
   ================================================================ */

@keyframes fade-in {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes fade-up {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes slide-in-right {
  from { opacity: 0; transform: translateX(12px); }
  to { opacity: 1; transform: translateX(0); }
}

@keyframes scale-in {
  from { opacity: 0; transform: scale(0.95); }
  to { opacity: 1; transform: scale(1); }
}

@keyframes glow-pulse {
  0%, 100% { box-shadow: 0 0 8px var(--glow-primary); }
  50% { box-shadow: 0 0 24px var(--glow-primary-intense); }
}

@keyframes shimmer {
  0% { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}

@keyframes float {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-8px); }
}

@keyframes counter {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes gradient-shift {
  0% { background-position: 0% 50%; }
  50% { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}

/* ================================================================
   BASE STYLES
   ================================================================ */

@layer base {
  * {
    @apply border-border outline-ring/50;
  }

  body {
    @apply font-sans bg-background text-foreground antialiased;
  }

  html {
    @apply font-sans scroll-smooth;
  }
}

/* ================================================================
   UTILITY CLASSES
   ================================================================ */

@layer utilities {
  /* Glass-morphism panels */
  .glass {
    background: var(--glass-bg);
    backdrop-filter: blur(var(--glass-blur));
    -webkit-backdrop-filter: blur(var(--glass-blur));
    border: 1px solid var(--glass-border);
  }

  /* Subtle gradient borders using pseudo-element technique */
  .gradient-border {
    position: relative;
    border: 1px solid transparent;
    background-clip: padding-box;
  }

  .gradient-border::before {
    content: '';
    position: absolute;
    inset: -1px;
    border-radius: inherit;
    padding: 1px;
    background: linear-gradient(
      135deg,
      oklch(93.604% 0.22511 121.257 / 30%),
      oklch(93.604% 0.22511 121.257 / 5%),
      oklch(93.604% 0.22511 121.257 / 15%)
    );
    mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
    mask-composite: exclude;
    pointer-events: none;
  }

  /* Primary glow on hover */
  .glow-hover {
    transition: box-shadow 0.3s ease;
  }

  .glow-hover:hover {
    box-shadow: 0 0 20px var(--glow-primary), 0 0 60px var(--glow-primary);
  }

  /* Subtle noise texture overlay */
  .noise-texture::after {
    content: '';
    position: absolute;
    inset: 0;
    opacity: 0.03;
    background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
    pointer-events: none;
    border-radius: inherit;
  }

  /* Animated gradient mesh background */
  .gradient-mesh {
    background:
      radial-gradient(ellipse at 20% 50%, oklch(93.604% 0.22511 121.257 / 8%) 0%, transparent 50%),
      radial-gradient(ellipse at 80% 20%, oklch(0.68 0.15 240 / 5%) 0%, transparent 50%),
      radial-gradient(ellipse at 50% 80%, oklch(93.604% 0.22511 121.257 / 4%) 0%, transparent 50%);
    background-size: 200% 200%;
    animation: gradient-shift 15s ease infinite;
  }

  /* Smooth page transition wrapper */
  .page-transition {
    animation: fade-up 0.35s ease-out;
  }

  /* Shimmer loading effect */
  .shimmer {
    background: linear-gradient(
      90deg,
      var(--muted) 25%,
      oklch(1 0 0 / 5%) 50%,
      var(--muted) 75%
    );
    background-size: 200% 100%;
    animation: shimmer 2s linear infinite;
  }
}

Clone this wiki locally