Barazo default frontend barazo.forum
at main 349 lines 9.9 kB view raw
1@import 'tailwindcss'; 2@plugin '@tailwindcss/typography'; 3 4@custom-variant dark (&:where(.dark, .dark *)); 5 6@import '@radix-ui/colors/gray.css'; 7@import '@radix-ui/colors/gray-dark.css'; 8@import '@radix-ui/colors/sand.css'; 9@import '@radix-ui/colors/sand-dark.css'; 10@import '@radix-ui/colors/cyan.css'; 11@import '@radix-ui/colors/cyan-dark.css'; 12@import '@radix-ui/colors/purple.css'; 13@import '@radix-ui/colors/purple-dark.css'; 14@import '@radix-ui/colors/green.css'; 15@import '@radix-ui/colors/green-dark.css'; 16@import '@radix-ui/colors/orange.css'; 17@import '@radix-ui/colors/orange-dark.css'; 18@import '@radix-ui/colors/red.css'; 19@import '@radix-ui/colors/red-dark.css'; 20 21/** 22 * Barazo Design System 23 * Radix Colors (structural) + Flexoki accent hues 24 * @see decisions/frontend.md 25 */ 26 27@theme inline { 28 /* Typography -- system font stack for body, Source Code Pro for code */ 29 --font-mono: var(--font-source-code); 30 31 /* Radix Color Tokens - mapped to semantic roles */ 32 /* Gray scale (neutral) */ 33 --color-gray-1: var(--gray-1); 34 --color-gray-2: var(--gray-2); 35 --color-gray-3: var(--gray-3); 36 --color-gray-4: var(--gray-4); 37 --color-gray-5: var(--gray-5); 38 --color-gray-6: var(--gray-6); 39 --color-gray-7: var(--gray-7); 40 --color-gray-8: var(--gray-8); 41 --color-gray-9: var(--gray-9); 42 --color-gray-10: var(--gray-10); 43 --color-gray-11: var(--gray-11); 44 --color-gray-12: var(--gray-12); 45 46 /* Sand scale (warm neutral backgrounds) */ 47 --color-sand-1: var(--sand-1); 48 --color-sand-2: var(--sand-2); 49 --color-sand-3: var(--sand-3); 50 --color-sand-4: var(--sand-4); 51 --color-sand-5: var(--sand-5); 52 --color-sand-6: var(--sand-6); 53 --color-sand-7: var(--sand-7); 54 --color-sand-8: var(--sand-8); 55 --color-sand-9: var(--sand-9); 56 --color-sand-10: var(--sand-10); 57 --color-sand-11: var(--sand-11); 58 --color-sand-12: var(--sand-12); 59 60 /* Primary accent - Cyan (Flexoki-inspired) */ 61 --color-cyan-1: var(--cyan-1); 62 --color-cyan-2: var(--cyan-2); 63 --color-cyan-3: var(--cyan-3); 64 --color-cyan-4: var(--cyan-4); 65 --color-cyan-5: var(--cyan-5); 66 --color-cyan-6: var(--cyan-6); 67 --color-cyan-7: var(--cyan-7); 68 --color-cyan-8: var(--cyan-8); 69 --color-cyan-9: var(--cyan-9); 70 --color-cyan-10: var(--cyan-10); 71 --color-cyan-11: var(--cyan-11); 72 --color-cyan-12: var(--cyan-12); 73 74 /* Secondary accent - Purple */ 75 --color-purple-1: var(--purple-1); 76 --color-purple-2: var(--purple-2); 77 --color-purple-3: var(--purple-3); 78 --color-purple-4: var(--purple-4); 79 --color-purple-5: var(--purple-5); 80 --color-purple-6: var(--purple-6); 81 --color-purple-7: var(--purple-7); 82 --color-purple-8: var(--purple-8); 83 --color-purple-9: var(--purple-9); 84 --color-purple-10: var(--purple-10); 85 --color-purple-11: var(--purple-11); 86 --color-purple-12: var(--purple-12); 87 88 /* Semantic colors - Success (Green) */ 89 --color-green-1: var(--green-1); 90 --color-green-2: var(--green-2); 91 --color-green-3: var(--green-3); 92 --color-green-4: var(--green-4); 93 --color-green-5: var(--green-5); 94 --color-green-6: var(--green-6); 95 --color-green-7: var(--green-7); 96 --color-green-8: var(--green-8); 97 --color-green-9: var(--green-9); 98 --color-green-10: var(--green-10); 99 --color-green-11: var(--green-11); 100 --color-green-12: var(--green-12); 101 102 /* Semantic colors - Warning (Orange) */ 103 --color-orange-1: var(--orange-1); 104 --color-orange-2: var(--orange-2); 105 --color-orange-3: var(--orange-3); 106 --color-orange-4: var(--orange-4); 107 --color-orange-5: var(--orange-5); 108 --color-orange-6: var(--orange-6); 109 --color-orange-7: var(--orange-7); 110 --color-orange-8: var(--orange-8); 111 --color-orange-9: var(--orange-9); 112 --color-orange-10: var(--orange-10); 113 --color-orange-11: var(--orange-11); 114 --color-orange-12: var(--orange-12); 115 116 /* Semantic colors - Error (Red) */ 117 --color-red-1: var(--red-1); 118 --color-red-2: var(--red-2); 119 --color-red-3: var(--red-3); 120 --color-red-4: var(--red-4); 121 --color-red-5: var(--red-5); 122 --color-red-6: var(--red-6); 123 --color-red-7: var(--red-7); 124 --color-red-8: var(--red-8); 125 --color-red-9: var(--red-9); 126 --color-red-10: var(--red-10); 127 --color-red-11: var(--red-11); 128 --color-red-12: var(--red-12); 129 130 /* Semantic mapping */ 131 --color-background: var(--sand-1); 132 --color-foreground: var(--sand-12); 133 --color-muted: var(--sand-3); 134 --color-muted-foreground: var(--sand-11); 135 --color-border: var(--sand-6); 136 --color-border-hover: var(--sand-7); 137 --color-input: var(--sand-3); 138 --color-input-focus: var(--sand-4); 139 --color-ring: var(--cyan-8); 140 --color-ring-offset: var(--sand-1); 141 142 /* Primary (Cyan) - cyan-9 is bright, needs dark text for AA contrast 143 Hardcoded from --sand-12 to avoid CSS var resolution issues in a11y tools */ 144 --color-primary: var(--cyan-9); 145 --color-primary-foreground: #21201c; 146 --color-primary-hover: var(--cyan-10); 147 --color-primary-active: var(--cyan-11); 148 --color-primary-muted: var(--cyan-3); 149 150 /* Secondary (Purple) */ 151 --color-secondary: var(--purple-9); 152 --color-secondary-foreground: #fff; 153 --color-secondary-hover: var(--purple-10); 154 --color-secondary-active: var(--purple-11); 155 --color-secondary-muted: var(--purple-3); 156 157 /* Accent (Cyan for interactive highlights) */ 158 --color-accent: var(--cyan-4); 159 --color-accent-foreground: var(--cyan-12); 160 161 /* Destructive (Red) - uses var() refs so Radix dark mode auto-switches. 162 Light: #ce2c31 text (5.21:1 vs white), Dark: #ff9592 text (8.95:1 vs dark bg). 163 Foreground uses --red-1 for AA contrast on destructive backgrounds in both modes. */ 164 --color-destructive: var(--red-11); 165 --color-destructive-foreground: var(--red-1); 166 --color-destructive-hover: var(--red-12); 167 --color-destructive-muted: var(--red-3); 168 169 /* Success (Green) */ 170 --color-success: var(--green-9); 171 --color-success-foreground: var(--sand-12); 172 --color-success-hover: var(--green-10); 173 --color-success-muted: var(--green-3); 174 175 /* Warning (Orange) */ 176 --color-warning: var(--orange-9); 177 --color-warning-foreground: var(--sand-12); 178 --color-warning-hover: var(--orange-10); 179 --color-warning-muted: var(--orange-3); 180 181 /* Info (Purple) */ 182 --color-info: var(--purple-9); 183 --color-info-foreground: #fff; 184 --color-info-hover: var(--purple-10); 185 --color-info-muted: var(--purple-3); 186 187 /* Card/Surface */ 188 --color-card: var(--sand-2); 189 --color-card-foreground: var(--sand-12); 190 --color-card-hover: var(--sand-3); 191 --color-popover: var(--sand-1); 192 --color-popover-foreground: var(--sand-12); 193 194 /* Shadows */ 195 --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05); 196 --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); 197 --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); 198 --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); 199 --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); 200 201 /* Border radius */ 202 --radius-sm: 0.25rem; 203 --radius-md: 0.375rem; 204 --radius-lg: 0.5rem; 205 --radius-xl: 0.75rem; 206 --radius-2xl: 1rem; 207 --radius-full: 9999px; 208} 209 210.dark { 211 /* Dark mode uses Radix dark color scales */ 212 --color-background: var(--sand-dark-1); 213 --color-foreground: var(--sand-dark-12); 214 --color-muted: var(--sand-dark-3); 215 --color-muted-foreground: var(--sand-dark-11); 216 --color-border: var(--sand-dark-6); 217 --color-border-hover: var(--sand-dark-7); 218 --color-input: var(--sand-dark-3); 219 --color-input-focus: var(--sand-dark-4); 220 --color-ring: var(--cyan-dark-8); 221 --color-ring-offset: var(--sand-dark-1); 222 223 --color-card: var(--sand-dark-2); 224 --color-card-foreground: var(--sand-dark-12); 225 --color-card-hover: var(--sand-dark-3); 226 --color-popover: var(--sand-dark-1); 227 --color-popover-foreground: var(--sand-dark-12); 228} 229 230/* Container -- Tailwind v4 no longer includes mx-auto/padding by default */ 231@utility container { 232 margin-inline: auto; 233 padding-inline: 1rem; 234 max-width: 80rem; 235} 236 237/* Restore centering for native <dialog> elements. 238 Tailwind's preflight resets margin to 0, which strips the browser's 239 default margin:auto that centers modal dialogs opened via showModal(). */ 240dialog { 241 margin: auto; 242} 243 244/* Base styles */ 245* { 246 border-color: var(--color-border); 247} 248 249html { 250 scroll-behavior: smooth; 251} 252 253body { 254 background-color: var(--color-background); 255 color: var(--color-foreground); 256 font-feature-settings: 257 'rlig' 1, 258 'calt' 1; 259} 260 261/* Focus visible styles */ 262:focus-visible { 263 outline: 2px solid var(--color-ring); 264 outline-offset: 2px; 265} 266 267/* Reduced motion */ 268@media (prefers-reduced-motion: reduce) { 269 *, 270 *::before, 271 *::after { 272 animation-duration: 0.01ms !important; 273 animation-iteration-count: 1 !important; 274 transition-duration: 0.01ms !important; 275 scroll-behavior: auto !important; 276 } 277} 278 279/* Selection color */ 280::selection { 281 background-color: var(--color-primary-muted); 282 color: var(--color-primary); 283} 284 285/* Drawer animations for admin mobile sidebar */ 286@keyframes slide-in-left { 287 from { 288 transform: translateX(-100%); 289 } 290 to { 291 transform: translateX(0); 292 } 293} 294 295@keyframes slide-out-left { 296 from { 297 transform: translateX(0); 298 } 299 to { 300 transform: translateX(-100%); 301 } 302} 303 304@keyframes fade-in { 305 from { 306 opacity: 0; 307 } 308 to { 309 opacity: 1; 310 } 311} 312 313@keyframes fade-out { 314 from { 315 opacity: 1; 316 } 317 to { 318 opacity: 0; 319 } 320} 321 322@utility animate-slide-in-left { 323 animation: slide-in-left 200ms ease-out; 324} 325 326@utility animate-slide-out-left { 327 animation: slide-out-left 200ms ease-in; 328} 329 330@utility animate-fade-in { 331 animation: fade-in 200ms ease-out; 332} 333 334@utility animate-fade-out { 335 animation: fade-out 200ms ease-in; 336} 337 338/* Component classes */ 339@layer components { 340 .prose-barazo a { 341 color: var(--cyan-11); 342 text-decoration: underline; 343 text-decoration-color: color-mix(in srgb, var(--cyan-11) 40%, transparent); 344 text-underline-offset: 2px; 345 } 346 .prose-barazo a:hover { 347 text-decoration-color: var(--cyan-11); 348 } 349}