1
0
mirror of https://github.com/bitwarden/browser synced 2026-01-31 00:33:33 +00:00

[CL-913] add new color palette to theme and tailwind config (#17998)

* add new color palette to theme and tailwind config

* updated docs color names

* remove safelist changes

* add missing accent colors to docs

* updated color mappings

* combined docs in colors.mdx and reference in Claude.md

* add variables for white and black

* updated docs

* updated list rendering style

* more specific docs instructions

* revert to simpler colors docs reference

* remove changes to claude.md

* use rgb color variables to compose semantic
This commit is contained in:
Bryan Cunningham
2025-12-26 16:18:31 -05:00
committed by GitHub
parent 5c13b07366
commit 2da44bb300
4 changed files with 1315 additions and 114 deletions

View File

@@ -13,6 +13,12 @@
@tailwind utilities;
:root {
/* ========================================
* LEGACY COLORS (RGB format)
* These are the original colors used throughout the app.
* Use these for existing components until migration is complete.
* ======================================== */
--color-transparent-hover: rgb(0 0 0 / 0.02);
--color-shadow: 168 179 200;
@@ -74,6 +80,279 @@
--color-illustration-bg-tertiary: 255 255 255;
--color-illustration-tertiary: 255 191 0;
--color-illustration-logo: 23 93 220;
/* ========================================
* NEW COLOR PALETTE (Hex format)
* These colors are from the new Figma design system.
* Use these for new components and features.
* Format: --color-{family}-{shade} where shade ranges from 050 to 950
* ======================================== */
/* Brand Colors */
--color-brand-050: #eef6ff;
--color-brand-100: #dbeafe;
--color-brand-200: #bedbff;
--color-brand-300: #8ec5ff;
--color-brand-400: #6baefa;
--color-brand-500: #418bfb;
--color-brand-600: #2a70f4;
--color-brand-700: #175ddc;
--color-brand-800: #0d43af;
--color-brand-900: #0c3276;
--color-brand-950: #162455;
/* Gray Colors */
--color-gray-050: #f9fafb;
--color-gray-100: #f3f4f6;
--color-gray-200: #e5e7eb;
--color-gray-300: #d1d5dc;
--color-gray-400: #99a1af;
--color-gray-500: #6a7282;
--color-gray-600: #4a5565;
--color-gray-700: #333e4f;
--color-gray-800: #1e2939;
--color-gray-900: #101828;
--color-gray-950: #070b18;
--color-gray-950-rgb: 7, 11, 24;
/* Red Colors */
--color-red-050: #fef2f2;
--color-red-100: #ffe2e2;
--color-red-200: #ffc9c9;
--color-red-300: #ffa2a2;
--color-red-400: #ff6467;
--color-red-500: #fb2c36;
--color-red-600: #e7000b;
--color-red-700: #c10007;
--color-red-800: #9f0712;
--color-red-900: #791112;
--color-red-950: #460809;
/* Orange Colors */
--color-orange-050: #fff8f1;
--color-orange-100: #feecdc;
--color-orange-200: #fcd9bd;
--color-orange-300: #fdba8c;
--color-orange-400: #ff8a4c;
--color-orange-500: #ff5a1f;
--color-orange-600: #d03801;
--color-orange-700: #b43403;
--color-orange-800: #8a2c0d;
--color-orange-900: #70240b;
--color-orange-950: #441306;
/* Yellow Colors */
--color-yellow-050: #fefce8;
--color-yellow-100: #fef9c2;
--color-yellow-200: #fff085;
--color-yellow-300: #ffdf20;
--color-yellow-400: #fdc700;
--color-yellow-500: #f0b100;
--color-yellow-600: #d08700;
--color-yellow-700: #a65f00;
--color-yellow-800: #894b00;
--color-yellow-900: #733e0a;
--color-yellow-950: #432004;
/* Green Colors */
--color-green-050: #f0fdf4;
--color-green-100: #dcfce7;
--color-green-200: #b9f8cf;
--color-green-300: #7bf1a8;
--color-green-400: #18dc7a;
--color-green-500: #0abf52;
--color-green-600: #00a63e;
--color-green-700: #008236;
--color-green-800: #016630;
--color-green-900: #0d542b;
--color-green-950: #032e15;
/* Pink Colors */
--color-pink-050: #fdf2f8;
--color-pink-100: #fce7f3;
--color-pink-200: #fccee8;
--color-pink-300: #fda5d5;
--color-pink-400: #fb64b6;
--color-pink-500: #f6339a;
--color-pink-600: #e60076;
--color-pink-700: #c6005c;
--color-pink-800: #a3004c;
--color-pink-900: #861043;
--color-pink-950: #510424;
/* Coral Colors */
--color-coral-050: #fff2f0;
--color-coral-100: #ffe0dc;
--color-coral-200: #ffc1b9;
--color-coral-300: #ff9585;
--color-coral-400: #ff6550;
--color-coral-500: #ff4026;
--color-coral-600: #e11f05;
--color-coral-700: #c71800;
--color-coral-800: #a81400;
--color-coral-900: #7e0f00;
--color-coral-950: #4d0900;
/* Teal Colors */
--color-teal-050: #ecfeff;
--color-teal-100: #cefafe;
--color-teal-200: #a2f4fd;
--color-teal-300: #70ecf5;
--color-teal-400: #2cdde9;
--color-teal-500: #00c5db;
--color-teal-600: #009cb8;
--color-teal-700: #007c95;
--color-teal-800: #006278;
--color-teal-900: #0f495c;
--color-teal-950: #042e3e;
/* Purple Colors */
--color-purple-050: #faf5ff;
--color-purple-100: #f3e8ff;
--color-purple-200: #e9d4ff;
--color-purple-300: #dab2ff;
--color-purple-400: #c27aff;
--color-purple-500: #ad46ff;
--color-purple-600: #9810fa;
--color-purple-700: #8200db;
--color-purple-800: #6e11b0;
--color-purple-900: #59168b;
--color-purple-950: #3c0366;
/* White and Black */
--color-white: #ffffff;
--color-white-rgb: 255, 255, 255;
--color-black: #000000;
/* ========================================
* SEMANTIC FOREGROUND COLORS (Light Mode)
* These are the tokens that should be exposed to Tailwind
* They reference the primitive colors above
* ======================================== */
/* Neutral Foreground */
--color-fg-white: var(--color-white);
--color-fg-dark: var(--color-gray-900);
--color-fg-contrast: var(--color-white);
--color-fg-heading: var(--color-gray-900);
--color-fg-body: var(--color-gray-600);
--color-fg-body-subtle: var(--color-gray-500);
--color-fg-disabled: var(--color-gray-400);
/* Brand Foreground */
--color-fg-brand-soft: var(--color-brand-200);
--color-fg-brand: var(--color-brand-700);
--color-fg-brand-strong: var(--color-brand-900);
/* Status Foreground */
--color-fg-success: var(--color-green-700);
--color-fg-success-strong: var(--color-green-900);
--color-fg-danger: var(--color-red-700);
--color-fg-danger-strong: var(--color-red-900);
--color-fg-warning: var(--color-orange-600);
--color-fg-warning-strong: var(--color-orange-900);
--color-fg-sensitive: var(--color-pink-600);
/* Accent Foreground */
--color-fg-accent-primary-soft: var(--color-teal-200);
--color-fg-accent-primary: var(--color-teal-400);
--color-fg-accent-primary-strong: var(--color-teal-800);
--color-fg-accent-secondary-soft: var(--color-coral-200);
--color-fg-accent-secondary: var(--color-coral-400);
--color-fg-accent-secondary-strong: var(--color-coral-900);
--color-fg-accent-tertiary-soft: var(--color-purple-200);
--color-fg-accent-tertiary: var(--color-purple-700);
--color-fg-accent-tertiary-strong: var(--color-purple-900);
/* ========================================
* SEMANTIC BACKGROUND COLORS (Light Mode)
* ======================================== */
/* Neutral Background */
--color-bg-white: var(--color-white);
--color-bg-dark: var(--color-gray-800);
--color-bg-contrast: var(--color-gray-800);
--color-bg-contrast-strong: var(--color-gray-950);
--color-bg-primary: var(--color-white);
--color-bg-secondary: var(--color-gray-050);
--color-bg-tertiary: var(--color-gray-050);
--color-bg-quaternary: var(--color-gray-200);
--color-bg-gray: var(--color-gray-300);
--color-bg-disabled: var(--color-gray-100);
/* Brand Background */
--color-bg-brand-softer: var(--color-brand-050);
--color-bg-brand-soft: var(--color-brand-100);
--color-bg-brand-medium: var(--color-brand-200);
--color-bg-brand: var(--color-brand-700);
--color-bg-brand-strong: var(--color-brand-800);
/* Status Background */
--color-bg-success-soft: var(--color-green-050);
--color-bg-success-medium: var(--color-green-100);
--color-bg-success: var(--color-green-700);
--color-bg-success-strong: var(--color-green-800);
--color-bg-danger-soft: var(--color-red-050);
--color-bg-danger-medium: var(--color-red-100);
--color-bg-danger: var(--color-red-700);
--color-bg-danger-strong: var(--color-red-800);
--color-bg-warning-soft: var(--color-orange-050);
--color-bg-warning-medium: var(--color-orange-100);
--color-bg-warning: var(--color-orange-600);
--color-bg-warning-strong: var(--color-orange-700);
/* Accent Background */
--color-bg-accent-primary-soft: var(--color-teal-050);
--color-bg-accent-primary-medium: var(--color-teal-100);
--color-bg-accent-primary: var(--color-teal-400);
--color-bg-accent-secondary-soft: var(--color-coral-050);
--color-bg-accent-secondary-medium: var(--color-coral-100);
--color-bg-accent-secondary: var(--color-coral-400);
--color-bg-accent-tertiary-soft: var(--color-purple-050);
--color-bg-accent-tertiary-medium: var(--color-purple-100);
--color-bg-accent-tertiary: var(--color-purple-600);
/* Hover & Overlay */
--color-bg-hover: rgba(var(--color-gray-950-rgb), 0.05);
--color-bg-overlay: rgba(var(--color-gray-950-rgb), 0.3);
/* ========================================
* SEMANTIC BORDER COLORS (Light Mode)
* ======================================== */
/* Neutral Border */
--color-border-muted: var(--color-gray-050);
--color-border-light: var(--color-gray-100);
--color-border-base: var(--color-gray-200);
--color-border-strong: var(--color-gray-800);
--color-border-buffer: var(--color-white);
/* Brand Border */
--color-border-brand-soft: var(--color-brand-200);
--color-border-brand: var(--color-brand-700);
--color-border-brand-strong: var(--color-brand-900);
/* Status Border */
--color-border-success-soft: var(--color-green-200);
--color-border-success: var(--color-green-700);
--color-border-success-strong: var(--color-green-900);
--color-border-danger-soft: var(--color-red-200);
--color-border-danger: var(--color-red-700);
--color-border-danger-strong: var(--color-red-900);
--color-border-warning-soft: var(--color-orange-200);
--color-border-warning: var(--color-orange-600);
--color-border-warning-strong: var(--color-orange-900);
/* Accent Border */
--color-border-accent-primary-soft: var(--color-teal-200);
--color-border-accent-primary: var(--color-teal-600);
--color-border-accent-secondary-soft: var(--color-coral-200);
--color-border-accent-secondary: var(--color-coral-600);
--color-border-accent-tertiary-soft: var(--color-purple-200);
--color-border-accent-tertiary: var(--color-purple-600);
/* Focus Border */
--color-border-focus: var(--color-black);
}
.theme_light {
@@ -140,6 +419,129 @@
--color-illustration-bg-tertiary: 243 246 249;
--color-illustration-tertiary: 255 191 0;
--color-illustration-logo: 255 255 255;
/* ========================================
* SEMANTIC FOREGROUND COLORS (Dark Mode Overrides)
* ======================================== */
/* Neutral Foreground */
--color-fg-contrast: var(--color-gray-900);
--color-fg-heading: var(--color-gray-050);
--color-fg-body: var(--color-gray-200);
--color-fg-body-subtle: var(--color-gray-400);
--color-fg-disabled: var(--color-gray-600);
/* Brand Foreground */
--color-fg-brand-soft: var(--color-brand-500);
--color-fg-brand: var(--color-brand-400);
--color-fg-brand-strong: var(--color-brand-200);
/* Status Foreground */
--color-fg-success: var(--color-green-400);
--color-fg-success-strong: var(--color-green-100);
--color-fg-danger: var(--color-red-400);
--color-fg-danger-strong: var(--color-red-100);
--color-fg-warning: var(--color-orange-400);
--color-fg-warning-strong: var(--color-orange-100);
--color-fg-sensitive: var(--color-pink-300);
/* Accent Foreground */
--color-fg-accent-primary-soft: var(--color-teal-400);
--color-fg-accent-primary: var(--color-teal-300);
--color-fg-accent-primary-strong: var(--color-teal-100);
--color-fg-accent-secondary-soft: var(--color-coral-500);
--color-fg-accent-secondary: var(--color-coral-400);
--color-fg-accent-secondary-strong: var(--color-coral-100);
--color-fg-accent-tertiary-soft: var(--color-purple-500);
--color-fg-accent-tertiary: var(--color-purple-400);
--color-fg-accent-tertiary-strong: var(--color-purple-100);
/* ========================================
* SEMANTIC BACKGROUND COLORS (Dark Mode Overrides)
* ======================================== */
/* Neutral Background */
--color-bg-contrast: var(--color-gray-050);
--color-bg-contrast-strong: var(--color-gray-050);
--color-bg-primary: var(--color-gray-900);
--color-bg-secondary: var(--color-gray-800);
--color-bg-tertiary: var(--color-gray-950);
--color-bg-quaternary: var(--color-gray-700);
--color-bg-gray: var(--color-gray-600);
--color-bg-disabled: var(--color-gray-950);
/* Brand Background */
--color-bg-brand-softer: var(--color-brand-950);
--color-bg-brand-soft: var(--color-brand-900);
--color-bg-brand-medium: var(--color-brand-800);
--color-bg-brand: var(--color-brand-400);
--color-bg-brand-strong: var(--color-brand-300);
/* Status Background */
--color-bg-success-soft: var(--color-green-950);
--color-bg-success-medium: var(--color-green-900);
--color-bg-success: var(--color-green-400);
--color-bg-success-strong: var(--color-green-300);
--color-bg-danger-soft: var(--color-red-950);
--color-bg-danger-medium: var(--color-red-900);
--color-bg-danger: var(--color-red-400);
--color-bg-danger-strong: var(--color-red-300);
--color-bg-warning-soft: var(--color-orange-950);
--color-bg-warning-medium: var(--color-orange-900);
--color-bg-warning: var(--color-orange-400);
--color-bg-warning-strong: var(--color-orange-300);
/* Accent Background */
--color-bg-accent-primary-soft: var(--color-teal-950);
--color-bg-accent-primary-medium: var(--color-teal-900);
--color-bg-accent-primary: var(--color-teal-400);
--color-bg-accent-secondary-soft: var(--color-coral-950);
--color-bg-accent-secondary-medium: var(--color-coral-900);
--color-bg-accent-secondary: var(--color-coral-400);
--color-bg-accent-tertiary-soft: var(--color-purple-950);
--color-bg-accent-tertiary-medium: var(--color-purple-900);
--color-bg-accent-tertiary: var(--color-purple-600);
/* Hover & Overlay */
--color-bg-hover: rgba(var(--color-white-rgb), 0.05);
--color-bg-overlay: rgba(var(--color-gray-950-rgb), 0.85);
/* ========================================
* SEMANTIC BORDER COLORS (Dark Mode Overrides)
* ======================================== */
/* Neutral Border */
--color-border-muted: var(--color-gray-900);
--color-border-light: var(--color-gray-800);
--color-border-base: var(--color-gray-700);
--color-border-strong: var(--color-gray-400);
--color-border-buffer: var(--color-gray-950);
/* Brand Border */
--color-border-brand-soft: var(--color-brand-800);
--color-border-brand: var(--color-brand-400);
--color-border-brand-strong: var(--color-brand-200);
/* Status Border */
--color-border-success-soft: var(--color-green-800);
--color-border-success: var(--color-green-400);
--color-border-success-strong: var(--color-green-200);
--color-border-danger-soft: var(--color-red-800);
--color-border-danger: var(--color-red-400);
--color-border-danger-strong: var(--color-red-200);
--color-border-warning-soft: var(--color-orange-800);
--color-border-warning: var(--color-orange-400);
--color-border-warning-strong: var(--color-orange-200);
/* Accent Border */
--color-border-accent-primary-soft: var(--color-teal-800);
--color-border-accent-secondary-soft: var(--color-coral-800);
--color-border-accent-secondary: var(--color-coral-500);
--color-border-accent-tertiary-soft: var(--color-purple-800);
--color-border-accent-tertiary: var(--color-purple-500);
/* Focus Border */
--color-border-focus: var(--color-white);
}
@layer components {