Spaces:
Running
Running
| /** | |
| * MorphGuard Theme System | |
| * Base theme styling using CSS variables | |
| */ | |
| :root { | |
| /* Default theme variables (light theme) */ | |
| --bg-primary: #ffffff; | |
| --bg-secondary: #f3f4f6; | |
| --bg-tertiary: #e5e7eb; | |
| --text-primary: #111827; | |
| --text-secondary: #4b5563; | |
| --text-tertiary: #9ca3af; | |
| --accent-primary: #4f46e5; | |
| --accent-secondary: #818cf8; | |
| --accent-tertiary: #c7d2fe; | |
| --success: #10b981; | |
| --warning: #f59e0b; | |
| --error: #ef4444; | |
| --info: #3b82f6; | |
| --border-color: #e5e7eb; | |
| --shadow-color: rgba(0, 0, 0, 0.1); | |
| --shadow-intensity: 0.1; | |
| --card-bg: #ffffff; | |
| --nav-bg: #ffffff; | |
| --header-bg: #ffffff; | |
| --footer-bg: #f9fafb; | |
| --detection-safe: #d1fae5; | |
| --detection-morph: #fee2e2; | |
| --chart-color-1: #4f46e5; | |
| --chart-color-2: #10b981; | |
| --chart-color-3: #f59e0b; | |
| --chart-color-4: #ef4444; | |
| --chart-color-5: #3b82f6; | |
| --chart-grid: #e5e7eb; | |
| /* Derived variables - these are calculated based on the base theme variables */ | |
| --shadow-sm: 0 1px 2px var(--shadow-color); | |
| --shadow-md: 0 4px 6px var(--shadow-color); | |
| --shadow-lg: 0 10px 15px var(--shadow-color); | |
| --shadow-xl: 0 20px 25px var(--shadow-color); | |
| /* Animation durations */ | |
| --transition-fast: 0.15s; | |
| --transition-normal: 0.3s; | |
| --transition-slow: 0.5s; | |
| /* Spacing and sizing variables */ | |
| --spacing-xs: 0.25rem; | |
| --spacing-sm: 0.5rem; | |
| --spacing-md: 1rem; | |
| --spacing-lg: 1.5rem; | |
| --spacing-xl: 2rem; | |
| --spacing-2xl: 3rem; | |
| /* Border radius */ | |
| --radius-sm: 0.125rem; | |
| --radius-md: 0.375rem; | |
| --radius-lg: 0.5rem; | |
| --radius-xl: 0.75rem; | |
| --radius-full: 9999px; | |
| /* Font weights */ | |
| --font-weight-light: 300; | |
| --font-weight-normal: 400; | |
| --font-weight-medium: 500; | |
| --font-weight-semibold: 600; | |
| --font-weight-bold: 700; | |
| /* Font sizes */ | |
| --font-size-xs: 0.75rem; | |
| --font-size-sm: 0.875rem; | |
| --font-size-md: 1rem; | |
| --font-size-lg: 1.125rem; | |
| --font-size-xl: 1.25rem; | |
| --font-size-2xl: 1.5rem; | |
| --font-size-3xl: 1.875rem; | |
| --font-size-4xl: 2.25rem; | |
| } | |
| /* Base styling for the theme system */ | |
| body { | |
| background-color: var(--bg-primary); | |
| color: var(--text-primary); | |
| transition: background-color var(--transition-normal), color var(--transition-normal); | |
| margin: 0; | |
| padding: 0; | |
| font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; | |
| line-height: 1.5; | |
| } | |
| /* Apply theme to common elements */ | |
| /* Headers */ | |
| h1, h2, h3, h4, h5, h6 { | |
| color: var(--text-primary); | |
| margin-top: var(--spacing-lg); | |
| margin-bottom: var(--spacing-md); | |
| } | |
| /* Links */ | |
| a { | |
| color: var(--accent-primary); | |
| text-decoration: none; | |
| transition: color var(--transition-fast); | |
| } | |
| a:hover { | |
| color: var(--accent-secondary); | |
| } | |
| /* Buttons */ | |
| button, | |
| .btn { | |
| background-color: var(--accent-primary); | |
| color: white; | |
| border: none; | |
| border-radius: var(--radius-md); | |
| padding: var(--spacing-sm) var(--spacing-md); | |
| font-size: var(--font-size-md); | |
| font-weight: var(--font-weight-medium); | |
| cursor: pointer; | |
| transition: background-color var(--transition-fast), transform var(--transition-fast); | |
| } | |
| button:hover, | |
| .btn:hover { | |
| background-color: var(--accent-secondary); | |
| transform: translateY(-1px); | |
| } | |
| button:focus, | |
| .btn:focus { | |
| outline: 2px solid var(--accent-tertiary); | |
| outline-offset: 2px; | |
| } | |
| button:active, | |
| .btn:active { | |
| transform: translateY(1px); | |
| } | |
| /* Secondary button */ | |
| button.btn-secondary, | |
| .btn-secondary { | |
| background-color: var(--bg-tertiary); | |
| color: var(--text-primary); | |
| } | |
| button.btn-secondary:hover, | |
| .btn-secondary:hover { | |
| background-color: var(--bg-secondary); | |
| } | |
| /* Inputs */ | |
| input, | |
| select, | |
| textarea { | |
| background-color: var(--bg-secondary); | |
| color: var(--text-primary); | |
| border: 1px solid var(--border-color); | |
| border-radius: var(--radius-md); | |
| padding: var(--spacing-sm) var(--spacing-md); | |
| font-size: var(--font-size-md); | |
| transition: border-color var(--transition-fast), box-shadow var(--transition-fast); | |
| } | |
| input:focus, | |
| select:focus, | |
| textarea:focus { | |
| border-color: var(--accent-primary); | |
| box-shadow: 0 0 0 2px var(--accent-tertiary); | |
| outline: none; | |
| } | |
| /* Cards */ | |
| .card { | |
| background-color: var(--card-bg); | |
| border-radius: var(--radius-lg); | |
| box-shadow: var(--shadow-md); | |
| padding: var(--spacing-lg); | |
| margin-bottom: var(--spacing-lg); | |
| transition: transform var(--transition-normal), box-shadow var(--transition-normal); | |
| } | |
| .card:hover { | |
| transform: translateY(-2px); | |
| box-shadow: var(--shadow-lg); | |
| } | |
| /* Navigation */ | |
| nav, | |
| .nav { | |
| background-color: var(--nav-bg); | |
| padding: var(--spacing-md); | |
| box-shadow: var(--shadow-md); | |
| } | |
| nav a, | |
| .nav a { | |
| color: var(--text-primary); | |
| margin-right: var(--spacing-md); | |
| transition: color var(--transition-fast); | |
| } | |
| nav a:hover, | |
| .nav a:hover { | |
| color: var(--accent-primary); | |
| } | |
| nav a.active, | |
| .nav a.active { | |
| color: var(--accent-primary); | |
| font-weight: var(--font-weight-medium); | |
| } | |
| /* Header */ | |
| header, | |
| .header { | |
| background-color: var(--header-bg); | |
| padding: var(--spacing-lg); | |
| box-shadow: var(--shadow-md); | |
| } | |
| /* Footer */ | |
| footer, | |
| .footer { | |
| background-color: var(--footer-bg); | |
| padding: var(--spacing-lg); | |
| color: var(--text-secondary); | |
| } | |
| /* Tables */ | |
| table { | |
| width: 100%; | |
| border-collapse: collapse; | |
| margin: var(--spacing-md) 0; | |
| } | |
| th { | |
| background-color: var(--bg-secondary); | |
| color: var(--text-primary); | |
| font-weight: var(--font-weight-semibold); | |
| text-align: left; | |
| padding: var(--spacing-sm) var(--spacing-md); | |
| border-bottom: 2px solid var(--border-color); | |
| } | |
| td { | |
| padding: var(--spacing-sm) var(--spacing-md); | |
| border-bottom: 1px solid var(--border-color); | |
| } | |
| tr:hover { | |
| background-color: var(--bg-secondary); | |
| } | |
| /* Status colors */ | |
| .success { | |
| color: var(--success); | |
| } | |
| .warning { | |
| color: var(--warning); | |
| } | |
| .error { | |
| color: var(--error); | |
| } | |
| .info { | |
| color: var(--info); | |
| } | |
| .success-bg { | |
| background-color: var(--success); | |
| color: white; | |
| } | |
| .warning-bg { | |
| background-color: var(--warning); | |
| color: white; | |
| } | |
| .error-bg { | |
| background-color: var(--error); | |
| color: white; | |
| } | |
| .info-bg { | |
| background-color: var(--info); | |
| color: white; | |
| } | |
| /* Detection results styling */ | |
| .detection-safe { | |
| background-color: var(--detection-safe); | |
| padding: var(--spacing-md); | |
| border-radius: var(--radius-md); | |
| border-left: 4px solid var(--success); | |
| } | |
| .detection-morph { | |
| background-color: var(--detection-morph); | |
| padding: var(--spacing-md); | |
| border-radius: var(--radius-md); | |
| border-left: 4px solid var(--error); | |
| } | |
| /* Charts and visualizations */ | |
| .chart-container { | |
| background-color: var(--card-bg); | |
| border-radius: var(--radius-lg); | |
| padding: var(--spacing-lg); | |
| box-shadow: var(--shadow-md); | |
| } | |
| /* Theme toggle button */ | |
| .theme-toggle { | |
| background: none; | |
| border: none; | |
| cursor: pointer; | |
| padding: var(--spacing-sm); | |
| border-radius: var(--radius-full); | |
| display: inline-flex; | |
| align-items: center; | |
| justify-content: center; | |
| transition: background-color var(--transition-fast); | |
| } | |
| .theme-toggle:hover { | |
| background-color: var(--bg-tertiary); | |
| } | |
| .theme-toggle svg { | |
| width: 1.5rem; | |
| height: 1.5rem; | |
| fill: var(--text-primary); | |
| } | |
| /* Theme selector dropdown */ | |
| .theme-selector { | |
| background-color: var(--bg-secondary); | |
| color: var(--text-primary); | |
| border: 1px solid var(--border-color); | |
| border-radius: var(--radius-md); | |
| padding: var(--spacing-sm) var(--spacing-md); | |
| font-size: var(--font-size-sm); | |
| cursor: pointer; | |
| transition: border-color var(--transition-fast); | |
| } | |
| .theme-selector:hover { | |
| border-color: var(--accent-primary); | |
| } | |
| .theme-selector:focus { | |
| border-color: var(--accent-primary); | |
| outline: none; | |
| box-shadow: 0 0 0 2px var(--accent-tertiary); | |
| } | |
| /* Context indicator */ | |
| .context-indicator { | |
| display: inline-flex; | |
| align-items: center; | |
| font-size: var(--font-size-sm); | |
| color: var(--text-tertiary); | |
| margin-left: var(--spacing-md); | |
| } | |
| .context-indicator svg { | |
| width: 1rem; | |
| height: 1rem; | |
| margin-right: var(--spacing-xs); | |
| } | |
| /* High contrast specific adjustments */ | |
| [data-theme="highContrast"] a { | |
| text-decoration: underline; | |
| } | |
| [data-theme="highContrast"] button, | |
| [data-theme="highContrast"] .btn { | |
| border: 2px solid white; | |
| } | |
| [data-theme="highContrast"] input, | |
| [data-theme="highContrast"] select, | |
| [data-theme="highContrast"] textarea { | |
| border: 2px solid var(--border-color); | |
| } | |
| /* Dark theme specific adjustments */ | |
| [data-theme="dark"] .card { | |
| box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); | |
| } | |
| [data-theme="dark"] code { | |
| background-color: rgba(0, 0, 0, 0.3); | |
| padding: var(--spacing-xs) var(--spacing-sm); | |
| border-radius: var(--radius-sm); | |
| } | |
| /* Theme transition helper */ | |
| .theme-transition { | |
| transition: background-color var(--transition-normal), | |
| color var(--transition-normal), | |
| border-color var(--transition-normal), | |
| box-shadow var(--transition-normal); | |
| } | |
| /* Utilities for theme demos */ | |
| .color-swatch { | |
| display: inline-block; | |
| width: 2rem; | |
| height: 2rem; | |
| border-radius: var(--radius-md); | |
| margin-right: var(--spacing-sm); | |
| border: 1px solid var(--border-color); | |
| } | |
| .theme-demo-section { | |
| margin: var(--spacing-xl) 0; | |
| padding: var(--spacing-lg); | |
| border: 1px solid var(--border-color); | |
| border-radius: var(--radius-lg); | |
| } | |
| /* Responsive adjustments */ | |
| @media (max-width: 768px) { | |
| :root { | |
| /* Adjust spacing for mobile */ | |
| --spacing-lg: 1rem; | |
| --spacing-xl: 1.5rem; | |
| --spacing-2xl: 2rem; | |
| } | |
| .card { | |
| padding: var(--spacing-md); | |
| } | |
| header, .header, | |
| footer, .footer { | |
| padding: var(--spacing-md); | |
| } | |
| /* Stack navigation on mobile */ | |
| nav, .nav { | |
| display: flex; | |
| flex-direction: column; | |
| } | |
| nav a, .nav a { | |
| margin-right: 0; | |
| margin-bottom: var(--spacing-sm); | |
| } | |
| } | |
| /* Print styles */ | |
| @media print { | |
| body { | |
| background-color: white ; | |
| color: black ; | |
| } | |
| .card, .nav, header, footer { | |
| box-shadow: none ; | |
| background-color: white ; | |
| } | |
| button, .btn, .theme-toggle, .theme-selector { | |
| display: none ; | |
| } | |
| } | |
| /* Reduced motion preference */ | |
| @media (prefers-reduced-motion: reduce) { | |
| *, *::before, *::after { | |
| animation-duration: 0.01ms ; | |
| animation-iteration-count: 1 ; | |
| transition-duration: 0.01ms ; | |
| scroll-behavior: auto ; | |
| } | |
| .theme-transition { | |
| transition: none ; | |
| } | |
| } |