clinicpal / src /app /globals.css
Vrda's picture
Deploy ClinIcPal frontend
9bc2f29 verified
@import "tailwindcss";
/* ============================================
LIQUID GLASS DESIGN SYSTEM
Inspired by Apple's WWDC 2025 Liquid Glass
============================================ */
:root {
/* ---- Base Colors ---- */
--background: #f5f5f7;
--foreground: #1d1d1f;
/* ---- Glass Material Properties ---- */
--glass-blur: 24px;
--glass-saturation: 180%;
--glass-brightness: 105%;
/* Glass Backgrounds */
--glass-bg: rgba(255, 255, 255, 0.72);
--glass-bg-elevated: rgba(255, 255, 255, 0.85);
--glass-bg-muted: rgba(255, 255, 255, 0.45);
--glass-bg-strong: rgba(255, 255, 255, 0.92);
/* Glass Borders */
--glass-border: rgba(255, 255, 255, 0.5);
--glass-border-subtle: rgba(255, 255, 255, 0.3);
--glass-border-strong: rgba(255, 255, 255, 0.7);
/* Specular Highlights */
--specular-light: rgba(255, 255, 255, 0.8);
--specular-medium: rgba(255, 255, 255, 0.5);
--specular-subtle: rgba(255, 255, 255, 0.25);
/* Inner Shadows for Depth */
--inner-shadow-light: inset 0 1px 1px rgba(255, 255, 255, 0.6);
--inner-shadow-dark: inset 0 -1px 1px rgba(0, 0, 0, 0.05);
/* ---- Severity Colors ---- */
/* Critical (Red) */
--critical-bg: rgba(255, 59, 48, 0.12);
--critical-bg-glass: rgba(255, 59, 48, 0.08);
--critical-border: rgba(255, 59, 48, 0.3);
--critical-text: #c41e3a;
--critical-accent: #ff3b30;
--critical-glow: rgba(255, 59, 48, 0.4);
/* Warning (Amber) */
--warning-bg: rgba(255, 159, 10, 0.12);
--warning-bg-glass: rgba(255, 159, 10, 0.08);
--warning-border: rgba(255, 159, 10, 0.3);
--warning-text: #996300;
--warning-accent: #ff9f0a;
--warning-glow: rgba(255, 159, 10, 0.4);
/* Suggestion (Blue) */
--suggestion-bg: rgba(0, 122, 255, 0.12);
--suggestion-bg-glass: rgba(0, 122, 255, 0.08);
--suggestion-border: rgba(0, 122, 255, 0.3);
--suggestion-text: #0066cc;
--suggestion-accent: #007aff;
--suggestion-glow: rgba(0, 122, 255, 0.4);
/* Success (Green) */
--success-bg: rgba(52, 199, 89, 0.12);
--success-bg-glass: rgba(52, 199, 89, 0.08);
--success-border: rgba(52, 199, 89, 0.3);
--success-text: #248a3d;
--success-accent: #34c759;
--success-glow: rgba(52, 199, 89, 0.4);
/* ---- Surface Colors ---- */
--surface-base: linear-gradient(135deg, #f5f5f7 0%, #e8e8ed 50%, #f0f0f5 100%);
--surface-elevated: rgba(255, 255, 255, 0.9);
--surface-canvas: rgba(255, 255, 255, 0.6);
/* Ambient Orbs for Background */
--ambient-blue: rgba(59, 130, 246, 0.15);
--ambient-purple: rgba(139, 92, 246, 0.12);
--ambient-pink: rgba(236, 72, 153, 0.1);
--ambient-cyan: rgba(34, 211, 238, 0.1);
/* ---- Typography ---- */
--font-sans: -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
--font-mono: "SF Mono", ui-monospace, Menlo, Monaco, "Cascadia Mono", "Consolas", monospace;
/* ---- Shadows ---- */
--shadow-glass-sm: 0 2px 8px rgba(0, 0, 0, 0.04), 0 1px 2px rgba(0, 0, 0, 0.06);
--shadow-glass-md: 0 4px 16px rgba(0, 0, 0, 0.06), 0 2px 4px rgba(0, 0, 0, 0.04);
--shadow-glass-lg: 0 8px 32px rgba(0, 0, 0, 0.08), 0 4px 8px rgba(0, 0, 0, 0.04);
--shadow-glass-xl: 0 16px 48px rgba(0, 0, 0, 0.1), 0 8px 16px rgba(0, 0, 0, 0.06);
/* ---- Motion ---- */
--duration-fast: 150ms;
--duration-normal: 250ms;
--duration-slow: 400ms;
--duration-slower: 600ms;
--ease-smooth: cubic-bezier(0.4, 0, 0.2, 1);
--ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);
--ease-out: cubic-bezier(0, 0, 0.2, 1);
/* Spring Presets */
--spring-bounce: cubic-bezier(0.68, -0.55, 0.265, 1.55);
--spring-smooth: cubic-bezier(0.25, 0.46, 0.45, 0.94);
/* ---- Radius ---- */
--radius-sm: 8px;
--radius-md: 12px;
--radius-lg: 16px;
--radius-xl: 20px;
--radius-2xl: 24px;
--radius-3xl: 32px;
--radius-full: 9999px;
/* ---- Spacing ---- */
--spacing-xs: 4px;
--spacing-sm: 8px;
--spacing-md: 12px;
--spacing-lg: 16px;
--spacing-xl: 24px;
--spacing-2xl: 32px;
--spacing-3xl: 48px;
}
/* ---- Dark Mode ---- */
/* Manual dark mode override */
.dark {
--background: #0a0a0c;
--foreground: #f5f5f7;
/* Glass Backgrounds - Dark */
--glass-bg: rgba(30, 30, 35, 0.75);
--glass-bg-elevated: rgba(45, 45, 50, 0.85);
--glass-bg-muted: rgba(25, 25, 30, 0.6);
--glass-bg-strong: rgba(40, 40, 45, 0.92);
/* Glass Borders - Dark */
--glass-border: rgba(255, 255, 255, 0.12);
--glass-border-subtle: rgba(255, 255, 255, 0.08);
--glass-border-strong: rgba(255, 255, 255, 0.18);
/* Specular Highlights - Dark (subtle luminosity) */
--specular-light: rgba(255, 255, 255, 0.15);
--specular-medium: rgba(255, 255, 255, 0.1);
--specular-subtle: rgba(255, 255, 255, 0.05);
/* Inner Shadows - Dark */
--inner-shadow-light: inset 0 1px 1px rgba(255, 255, 255, 0.08);
--inner-shadow-dark: inset 0 -1px 1px rgba(0, 0, 0, 0.2);
/* Severity Colors - Dark Mode */
--critical-bg: rgba(255, 69, 58, 0.15);
--critical-bg-glass: rgba(255, 69, 58, 0.1);
--critical-border: rgba(255, 69, 58, 0.35);
--critical-text: #ff6961;
--critical-accent: #ff453a;
--warning-bg: rgba(255, 159, 10, 0.15);
--warning-bg-glass: rgba(255, 159, 10, 0.1);
--warning-border: rgba(255, 159, 10, 0.35);
--warning-text: #ffc04d;
--warning-accent: #ff9f0a;
--suggestion-bg: rgba(10, 132, 255, 0.15);
--suggestion-bg-glass: rgba(10, 132, 255, 0.1);
--suggestion-border: rgba(10, 132, 255, 0.35);
--suggestion-text: #64b5f6;
--suggestion-accent: #0a84ff;
--success-bg: rgba(48, 209, 88, 0.15);
--success-bg-glass: rgba(48, 209, 88, 0.1);
--success-border: rgba(48, 209, 88, 0.35);
--success-text: #6ee7a0;
--success-accent: #30d158;
/* Surface Colors - Dark */
--surface-base: linear-gradient(135deg, #0a0a0c 0%, #121216 50%, #0e0e12 100%);
--surface-elevated: rgba(35, 35, 40, 0.9);
--surface-canvas: rgba(20, 20, 25, 0.6);
/* Ambient Orbs - Dark */
--ambient-blue: rgba(59, 130, 246, 0.1);
--ambient-purple: rgba(139, 92, 246, 0.08);
--ambient-pink: rgba(236, 72, 153, 0.06);
--ambient-cyan: rgba(34, 211, 238, 0.06);
/* Shadows - Dark */
--shadow-glass-sm: 0 2px 8px rgba(0, 0, 0, 0.2), 0 1px 2px rgba(0, 0, 0, 0.3);
--shadow-glass-md: 0 4px 16px rgba(0, 0, 0, 0.25), 0 2px 4px rgba(0, 0, 0, 0.2);
--shadow-glass-lg: 0 8px 32px rgba(0, 0, 0, 0.3), 0 4px 8px rgba(0, 0, 0, 0.2);
--shadow-glass-xl: 0 16px 48px rgba(0, 0, 0, 0.4), 0 8px 16px rgba(0, 0, 0, 0.25);
}
/* Manual light mode override */
.light {
--background: #f5f5f7;
--foreground: #1d1d1f;
/* Glass Backgrounds */
--glass-bg: rgba(255, 255, 255, 0.72);
--glass-bg-elevated: rgba(255, 255, 255, 0.85);
--glass-bg-muted: rgba(255, 255, 255, 0.45);
--glass-bg-strong: rgba(255, 255, 255, 0.92);
/* Glass Borders */
--glass-border: rgba(255, 255, 255, 0.5);
--glass-border-subtle: rgba(255, 255, 255, 0.3);
--glass-border-strong: rgba(255, 255, 255, 0.7);
/* Specular Highlights */
--specular-light: rgba(255, 255, 255, 0.8);
--specular-medium: rgba(255, 255, 255, 0.5);
--specular-subtle: rgba(255, 255, 255, 0.25);
/* Inner Shadows for Depth */
--inner-shadow-light: inset 0 1px 1px rgba(255, 255, 255, 0.6);
--inner-shadow-dark: inset 0 -1px 1px rgba(0, 0, 0, 0.05);
/* Severity Colors */
--critical-bg: rgba(255, 59, 48, 0.12);
--critical-bg-glass: rgba(255, 59, 48, 0.08);
--critical-border: rgba(255, 59, 48, 0.3);
--critical-text: #c41e3a;
--critical-accent: #ff3b30;
--critical-glow: rgba(255, 59, 48, 0.4);
--warning-bg: rgba(255, 159, 10, 0.12);
--warning-bg-glass: rgba(255, 159, 10, 0.08);
--warning-border: rgba(255, 159, 10, 0.3);
--warning-text: #996300;
--warning-accent: #ff9f0a;
--warning-glow: rgba(255, 159, 10, 0.4);
--suggestion-bg: rgba(0, 122, 255, 0.12);
--suggestion-bg-glass: rgba(0, 122, 255, 0.08);
--suggestion-border: rgba(0, 122, 255, 0.3);
--suggestion-text: #0066cc;
--suggestion-accent: #007aff;
--suggestion-glow: rgba(0, 122, 255, 0.4);
--success-bg: rgba(52, 199, 89, 0.12);
--success-bg-glass: rgba(52, 199, 89, 0.08);
--success-border: rgba(52, 199, 89, 0.3);
--success-text: #248a3d;
--success-accent: #34c759;
--success-glow: rgba(52, 199, 89, 0.4);
/* Surface Colors */
--surface-base: linear-gradient(135deg, #f5f5f7 0%, #e8e8ed 50%, #f0f0f5 100%);
--surface-elevated: rgba(255, 255, 255, 0.9);
--surface-canvas: rgba(255, 255, 255, 0.6);
/* Ambient Orbs for Background */
--ambient-blue: rgba(59, 130, 246, 0.15);
--ambient-purple: rgba(139, 92, 246, 0.12);
--ambient-pink: rgba(236, 72, 153, 0.1);
--ambient-cyan: rgba(34, 211, 238, 0.1);
/* Shadows */
--shadow-glass-sm: 0 2px 8px rgba(0, 0, 0, 0.04), 0 1px 2px rgba(0, 0, 0, 0.06);
--shadow-glass-md: 0 4px 16px rgba(0, 0, 0, 0.06), 0 2px 4px rgba(0, 0, 0, 0.04);
--shadow-glass-lg: 0 8px 32px rgba(0, 0, 0, 0.08), 0 4px 8px rgba(0, 0, 0, 0.04);
--shadow-glass-xl: 0 16px 48px rgba(0, 0, 0, 0.1), 0 8px 16px rgba(0, 0, 0, 0.06);
}
/* System preference (when no manual override) */
@media (prefers-color-scheme: dark) {
:root:not(.light):not(.dark) {
--background: #0a0a0c;
--foreground: #f5f5f7;
/* Glass Backgrounds - Dark */
--glass-bg: rgba(30, 30, 35, 0.75);
--glass-bg-elevated: rgba(45, 45, 50, 0.85);
--glass-bg-muted: rgba(25, 25, 30, 0.6);
--glass-bg-strong: rgba(40, 40, 45, 0.92);
/* Glass Borders - Dark */
--glass-border: rgba(255, 255, 255, 0.12);
--glass-border-subtle: rgba(255, 255, 255, 0.08);
--glass-border-strong: rgba(255, 255, 255, 0.18);
/* Specular Highlights - Dark (subtle luminosity) */
--specular-light: rgba(255, 255, 255, 0.15);
--specular-medium: rgba(255, 255, 255, 0.1);
--specular-subtle: rgba(255, 255, 255, 0.05);
/* Inner Shadows - Dark */
--inner-shadow-light: inset 0 1px 1px rgba(255, 255, 255, 0.08);
--inner-shadow-dark: inset 0 -1px 1px rgba(0, 0, 0, 0.2);
/* Severity Colors - Dark Mode */
--critical-bg: rgba(255, 69, 58, 0.15);
--critical-bg-glass: rgba(255, 69, 58, 0.1);
--critical-border: rgba(255, 69, 58, 0.35);
--critical-text: #ff6961;
--critical-accent: #ff453a;
--warning-bg: rgba(255, 159, 10, 0.15);
--warning-bg-glass: rgba(255, 159, 10, 0.1);
--warning-border: rgba(255, 159, 10, 0.35);
--warning-text: #ffc04d;
--warning-accent: #ff9f0a;
--suggestion-bg: rgba(10, 132, 255, 0.15);
--suggestion-bg-glass: rgba(10, 132, 255, 0.1);
--suggestion-border: rgba(10, 132, 255, 0.35);
--suggestion-text: #64b5f6;
--suggestion-accent: #0a84ff;
--success-bg: rgba(48, 209, 88, 0.15);
--success-bg-glass: rgba(48, 209, 88, 0.1);
--success-border: rgba(48, 209, 88, 0.35);
--success-text: #6ee7a0;
--success-accent: #30d158;
/* Surface Colors - Dark */
--surface-base: linear-gradient(135deg, #0a0a0c 0%, #121216 50%, #0e0e12 100%);
--surface-elevated: rgba(35, 35, 40, 0.9);
--surface-canvas: rgba(20, 20, 25, 0.6);
/* Ambient Orbs - Dark */
--ambient-blue: rgba(59, 130, 246, 0.1);
--ambient-purple: rgba(139, 92, 246, 0.08);
--ambient-pink: rgba(236, 72, 153, 0.06);
--ambient-cyan: rgba(34, 211, 238, 0.06);
/* Shadows - Dark */
--shadow-glass-sm: 0 2px 8px rgba(0, 0, 0, 0.2), 0 1px 2px rgba(0, 0, 0, 0.3);
--shadow-glass-md: 0 4px 16px rgba(0, 0, 0, 0.25), 0 2px 4px rgba(0, 0, 0, 0.2);
--shadow-glass-lg: 0 8px 32px rgba(0, 0, 0, 0.3), 0 4px 8px rgba(0, 0, 0, 0.2);
--shadow-glass-xl: 0 16px 48px rgba(0, 0, 0, 0.4), 0 8px 16px rgba(0, 0, 0, 0.25);
}
}
/* Smooth transitions */
* {
transition: background-color 0.3s ease, border-color 0.3s ease, color 0.3s ease;
}
/* ---- Tailwind Theme Extension ---- */
@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
--font-sans: var(--font-sans);
--font-mono: var(--font-mono);
/* Glass Colors */
--color-glass-bg: var(--glass-bg);
--color-glass-border: var(--glass-border);
/* Severity Colors */
--color-critical: var(--critical-accent);
--color-warning: var(--warning-accent);
--color-suggestion: var(--suggestion-accent);
--color-success: var(--success-accent);
}
/* ============================================
BASE STYLES
============================================ */
html {
scroll-behavior: smooth;
}
body {
background: var(--background);
color: var(--foreground);
font-family: var(--font-sans);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
overflow-x: hidden;
}
/* ============================================
GLASS UTILITY CLASSES
============================================ */
/* Base Glass Effect */
.glass {
background: var(--glass-bg);
backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-saturation)) brightness(var(--glass-brightness));
-webkit-backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-saturation)) brightness(var(--glass-brightness));
border: 1px solid var(--glass-border);
box-shadow: var(--shadow-glass-md), var(--inner-shadow-light), var(--inner-shadow-dark);
}
/* Elevated Glass (stronger effect) */
.glass-elevated {
background: var(--glass-bg-elevated);
backdrop-filter: blur(32px) saturate(200%) brightness(108%);
-webkit-backdrop-filter: blur(32px) saturate(200%) brightness(108%);
border: 1px solid var(--glass-border-strong);
box-shadow: var(--shadow-glass-lg), var(--inner-shadow-light), var(--inner-shadow-dark);
}
/* Muted Glass (subtle effect) */
.glass-muted {
background: var(--glass-bg-muted);
backdrop-filter: blur(16px) saturate(150%);
-webkit-backdrop-filter: blur(16px) saturate(150%);
border: 1px solid var(--glass-border-subtle);
box-shadow: var(--shadow-glass-sm);
}
/* Specular Highlight Overlay */
.glass-specular {
position: relative;
}
.glass-specular::before {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(
135deg,
var(--specular-light) 0%,
var(--specular-medium) 10%,
transparent 40%
);
border-radius: inherit;
pointer-events: none;
}
/* Severity-Tinted Glass */
.glass-critical {
background: var(--critical-bg-glass);
border-color: var(--critical-border);
}
.glass-warning {
background: var(--warning-bg-glass);
border-color: var(--warning-border);
}
.glass-suggestion {
background: var(--suggestion-bg-glass);
border-color: var(--suggestion-border);
}
.glass-success {
background: var(--success-bg-glass);
border-color: var(--success-border);
}
/* ============================================
ANIMATION UTILITIES
============================================ */
/* Shimmer Loading Effect */
@keyframes shimmer {
0% {
background-position: -200% 0;
}
100% {
background-position: 200% 0;
}
}
.shimmer {
background: linear-gradient(
90deg,
transparent 0%,
var(--specular-subtle) 50%,
transparent 100%
);
background-size: 200% 100%;
animation: shimmer 2s ease-in-out infinite;
}
/* Pulse Glow Effect */
@keyframes pulse-glow {
0%, 100% {
opacity: 1;
box-shadow: 0 0 0 0 var(--success-glow);
}
50% {
opacity: 0.8;
box-shadow: 0 0 16px 4px var(--success-glow);
}
}
.pulse-glow-success {
animation: pulse-glow 2s ease-in-out infinite;
}
@keyframes pulse-glow-critical {
0%, 100% {
opacity: 1;
box-shadow: 0 0 0 0 var(--critical-glow);
}
50% {
opacity: 0.9;
box-shadow: 0 0 12px 3px var(--critical-glow);
}
}
.pulse-glow-critical {
animation: pulse-glow-critical 2s ease-in-out infinite;
}
@keyframes pulse-glow-warning {
0%, 100% {
box-shadow: 0 0 0 0 var(--warning-glow);
}
50% {
box-shadow: 0 0 10px 2px var(--warning-glow);
}
}
.pulse-glow-warning {
animation: pulse-glow-warning 2.5s ease-in-out infinite;
}
/* Gradient Flow Animation */
@keyframes gradient-flow {
0% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
100% {
background-position: 0% 50%;
}
}
.gradient-animate {
background-size: 200% 200%;
animation: gradient-flow 8s ease infinite;
}
/* Float Animation for Ambient Orbs */
@keyframes float {
0%, 100% {
transform: translateY(0) rotate(0deg);
}
33% {
transform: translateY(-15px) rotate(1deg);
}
66% {
transform: translateY(10px) rotate(-1deg);
}
}
.float-slow {
animation: float 20s ease-in-out infinite;
}
.float-medium {
animation: float 15s ease-in-out infinite;
}
/* ============================================
REDUCED MOTION
============================================ */
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
.shimmer,
.pulse-glow-success,
.pulse-glow-critical,
.pulse-glow-warning,
.gradient-animate,
.float-slow,
.float-medium {
animation: none !important;
}
}
/* ============================================
SCROLLBAR STYLING
============================================ */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-thumb {
background: var(--glass-border);
border-radius: var(--radius-full);
}
::-webkit-scrollbar-thumb:hover {
background: var(--glass-border-strong);
}
/* Firefox */
* {
scrollbar-width: thin;
scrollbar-color: var(--glass-border) transparent;
}
/* ============================================
FOCUS STYLES
============================================ */
.focus-ring {
outline: none;
}
.focus-ring:focus-visible {
outline: none;
box-shadow:
0 0 0 2px var(--background),
0 0 0 4px var(--suggestion-accent),
var(--shadow-glass-md);
}
/* ============================================
SELECTION STYLES
============================================ */
::selection {
background: var(--suggestion-bg);
color: var(--suggestion-text);
}