From bfb3bafab2478432106188c3a8f412e471ddd00b Mon Sep 17 00:00:00 2001 From: Lucien Cartier-Tilet Date: Sun, 7 Dec 2025 21:27:23 +0100 Subject: [PATCH] feat(css): set up theme --- app/assets/css/colors.css | 84 +++++++++++++++++++++++++++++++ app/assets/css/main.css | 22 ++------- app/assets/css/tailwind.css | 85 ++++++++++++++++++++++++++++++++ app/assets/css/ui/background.css | 14 ++++++ app/assets/css/ui/border.css | 12 +++++ app/assets/css/ui/colors.css | 8 +++ app/assets/css/ui/index.css | 4 ++ app/assets/css/ui/text.css | 16 ++++++ 8 files changed, 228 insertions(+), 17 deletions(-) create mode 100644 app/assets/css/colors.css create mode 100644 app/assets/css/tailwind.css create mode 100644 app/assets/css/ui/background.css create mode 100644 app/assets/css/ui/border.css create mode 100644 app/assets/css/ui/colors.css create mode 100644 app/assets/css/ui/index.css create mode 100644 app/assets/css/ui/text.css diff --git a/app/assets/css/colors.css b/app/assets/css/colors.css new file mode 100644 index 0000000..d91ee5e --- /dev/null +++ b/app/assets/css/colors.css @@ -0,0 +1,84 @@ +:root { + /* Polar Night */ + --nord0: #2E3440; /* Darkest - base background (dark mode) */ + --nord1: #3B4252; /* Dark - elevated surfaces (cards, panels) */ + --nord2: #434C5E; /* Medium - selections, highlights */ + --nord3: #4C566A; /* Light - borders, disabled states */ + /* Snow Storm */ + --nord4: #D8DEE9; /* Dark - elevated (light mode) */ + --nord5: #E5E9F0; /* Medium - selections (light mode) */ + --nord6: #ECEFF4; /* Lightest - base background (light mode) */ + /* Frost (Blues) */ + --nord7: #8FBCBB; /* Calm accent */ + --nord8: #88C0D0; /* PRIMARY brand color */ + --nord9: #81A1C1; /* Secondary accent */ + --nord10: #5E81AC; /* Deep accent, links */ + /* Aurora (Status colors) */ + --nord11: #BF616A; /* Error, danger (red) */ + --nord12: #D08770; /* Orange accent */ + --nord13: #EBCB8B; /* Warning (yellow) */ + --nord14: #A3BE8C; /* Success (green) */ + --nord15: #B48EAD; /* Uncommon (purple) */ + + --primary-50: #f0f9ff; + --primary-100: #e0f2fe; + --primary-200: #b9e6fe; + --primary-300: #7dd3fc; + --primary-400: #88C0D0; /* nord8 */ + --primary-500: #88C0D0; /* nord8 - main */ + --primary-600: #5E81AC; /* nord10 */ + --PRIMARY-700: #5E81AC; + --primary-800: #434C5E; /* nord2 */ + --primary-900: #2E3440; /* nord0 */ + --primary-950: #1a1f2e; + + --success-50: #f0fdf4; + --success-100: #dcfce7; + --success-200: #bbf7d0; + --success-300: #86efac; + --success-400: #A3BE8C; /* nord14 */ + --success-500: #A3BE8C; /* nord14 - main */ + --success-600: #8a9f75; + --success-700: #71805e; + --success-800: #586047; + --success-900: #3f4030; + + --warning-50: #fefce8; + --warning-100: #fef9c3; + --warning-200: #fef08a; + --warning-300: #fde047; + --warning-400: #EBCB8B; /* nord13 */ + --warning-500: #EBCB8B; /* nord13 - main */ + --warning-600: #c8ac76; + --warning-700: #a58d61; + --warning-800: #826e4c; + --warning-900: #5f4f37; + + --error-50: #fef2f2; + --error-100: #fee2e2; + --error-200: #fecaca; + --error-300: #fca5a5; + --error-400: #BF616A; /* nord11 */ + --error-500: #BF616A; /* nord11 - main */ + --error-600: #a2525a; + --error-700: #85434a; + --error-800: #68343a; + --error-900: #4b252a; + + --category-issue: #BF616A; /* nord11 (red) */ + --category-feature: #81A1C1; /* nord9 (blue) */ + --category-assistance: #B48EAD; /* nord15 (purple) */ + --category-other: #4C566A; /* nord3 (gray) */ + + --text: var(--nord0); + --background: var(--nord6); + --primary: var(--nord8); + --secondary: var(--nord9); + --accent: var(--nord7); +} +.dark { + --text: var(--nord6); + --background: var(--nord0); + --background-elevated: var(--nord1); + --background-hover: var(--nord2); +} diff --git a/app/assets/css/main.css b/app/assets/css/main.css index 170d84f..6bd75a9 100644 --- a/app/assets/css/main.css +++ b/app/assets/css/main.css @@ -1,18 +1,6 @@ -@import "tailwindcss"; -@import "@nuxt/ui"; +@import '@nuxt/ui'; +@import './colors.css'; +@import './ui/index.css'; +@import './tailwind.css'; -@theme static { - --font-sans: 'Public Sans', sans-serif; - - --color-green-50: #EFFDF5; - --color-green-100: #D9FBE8; - --color-green-200: #B3F5D1; - --color-green-300: #75EDAE; - --color-green-400: #00DC82; - --color-green-500: #00C16A; - --color-green-600: #00A155; - --color-green-700: #007F45; - --color-green-800: #016538; - --color-green-900: #0A5331; - --color-green-950: #052E16; -} +@source "../../../content/**/*"; diff --git a/app/assets/css/tailwind.css b/app/assets/css/tailwind.css new file mode 100644 index 0000000..c3d3117 --- /dev/null +++ b/app/assets/css/tailwind.css @@ -0,0 +1,85 @@ +@import 'tailwindcss'; +@theme { + --color-text-50: var(--text-50); + --color-text: var(--text); + --color-text-100: var(--text-100); + --color-text-200: var(--text-200); + --color-text-300: var(--text-300); + --color-text-400: var(--text-400); + --color-text-500: var(--text-500); + --color-text-600: var(--text-600); + --color-text-700: var(--text-700); + --color-text-800: var(--text-800); + --color-text-900: var(--text-900); + --color-text-950: var(--text-950); + + --color-background-50: var(--background-50); + --color-background-100: var(--background-100); + --color-background-200: var(--background-200); + --color-background-300: var(--background-300); + --color-background-400: var(--background-400); + --color-background-500: var(--background-500); + --color-background-600: var(--background-600); + --color-background-700: var(--background-700); + --color-background-800: var(--background-800); + --color-background-900: var(--background-900); + --color-background-950: var(--background-950); + --color-background: var(--background); + + --color-primary-50: var(--primary-50); + --color-primary-100: var(--primary-100); + --color-primary-200: var(--primary-200); + --color-primary-300: var(--primary-300); + --color-primary-400: var(--primary-400); + --color-primary: var(--primary); + --color-primary-500: var(--primary-500); + --color-primary-600: var(--primary-600); + --color-primary-700: var(--primary-700); + --color-primary-800: var(--primary-800); + --color-primary-900: var(--primary-900); + --color-primary-950: var(--primary-950); + + --color-secondary-50: var(--secondary-50); + --color-secondary-100: var(--secondary-100); + --color-secondary-200: var(--secondary-200); + --color-secondary-300: var(--secondary-300); + --color-secondary: var(--secondary); + --color-secondary-400: var(--secondary-400); + --color-secondary-500: var(--secondary-500); + --color-secondary-600: var(--secondary-600); + --color-secondary-700: var(--secondary-700); + --color-secondary-800: var(--secondary-800); + --color-secondary-900: var(--secondary-900); + --color-secondary-950: var(--secondary-950); + + --color-accent-50: var(--accent-50); + --color-accent-100: var(--accent-100); + --color-accent-200: var(--accent-200); + --color-accent-300: var(--accent-300); + --color-accent: var(--accent); + --color-accent-400: var(--accent-400); + --color-accent-500: var(--accent-500); + --color-accent-600: var(--accent-600); + --color-accent-700: var(--accent-700); + --color-accent-800: var(--accent-800); + --color-accent-900: var(--accent-900); + --color-accent-950: var(--accent-950); + + --text-sm: 0.75rem; + --text-base: 1rem; + --text-xl: 1.333rem; + --text-2xl: 1.777rem; + --text-3xl: 2.369rem; + --text-4xl: 3.158rem; + --text-5xl: 4.21rem; + + --text-weight-normal: 400; + --text-weight-bold: 700; + + --font-sans: + Noto Sans, ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', + 'Noto Color Emoji'; + --font-title: + Wittgenstein, ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', + 'Noto Color Emoji'; +} diff --git a/app/assets/css/ui/background.css b/app/assets/css/ui/background.css new file mode 100644 index 0000000..34e7bb0 --- /dev/null +++ b/app/assets/css/ui/background.css @@ -0,0 +1,14 @@ +:root { + --ui-bg: var(--nord6); + --ui-bg-muted: var(--nord5); + --ui-bg-elevated: var(--nord5); + --ui-bg-accented: var(--nord4); + --ui-bg-inverted: var(--nord0); +} +.dark { + --ui-bg: var(--nord0); + --ui-bg-muted: var(--nord1); + --ui-bg-elevated: var(--nord1); + --ui-bg-accented: var(--nord2); + --ui-bg-inverted: var(--nord6); +} diff --git a/app/assets/css/ui/border.css b/app/assets/css/ui/border.css new file mode 100644 index 0000000..46d1ccc --- /dev/null +++ b/app/assets/css/ui/border.css @@ -0,0 +1,12 @@ +:root { + --ui-border: var(--nord5); + --ui-border-muted: var(--nord6); + --ui-border-accented: var(--nord4); + --ui-border-inverted: var(--nord0); +} +.dark { + --ui-border: var(--nord3); + --ui-border-muted: var(--nord2); + --ui-border-accented: var(--nord4); + --ui-border-inverted: var(--nord6); +} diff --git a/app/assets/css/ui/colors.css b/app/assets/css/ui/colors.css new file mode 100644 index 0000000..4746098 --- /dev/null +++ b/app/assets/css/ui/colors.css @@ -0,0 +1,8 @@ +:root { + --ui-primary: var(--nord8); + --ui-secondary: var(--nord9); + --ui-success: var(--nord14); + --ui-info: var(--nord9); + --ui-warning: var(--nord13); + --ui-error: var(--nord11); +} diff --git a/app/assets/css/ui/index.css b/app/assets/css/ui/index.css new file mode 100644 index 0000000..0f421a3 --- /dev/null +++ b/app/assets/css/ui/index.css @@ -0,0 +1,4 @@ +@import './colors.css'; +@import './text.css'; +@import './background.css'; +@import './border.css'; diff --git a/app/assets/css/ui/text.css b/app/assets/css/ui/text.css new file mode 100644 index 0000000..f69e286 --- /dev/null +++ b/app/assets/css/ui/text.css @@ -0,0 +1,16 @@ +:root { + --ui-text-dimmed: var(--nord3); + --ui-text-muted: var(--nord3); + --ui-text-toned: var(--nord2); + --ui-text: var(--nord0); + --ui-text-highlighted: var(--nord0); + --ui-text-inverted: var(--nord6); +} +.dark { + --ui-text-dimmed: var(--nord3); + --ui-text-muted: var(--nord4); + --ui-text-toned: var(--nord4); + --ui-text: var(--nord6); + --ui-text-highlighted: var(--nord6); + --ui-text-inverted: var(--nord0); +}