slideshare/src/components/ui/buttons/Button.css
Michael Mainguy 04d9487501 Implement global color system and optimize CSS architecture
- Create comprehensive global color system with semantic variables in src/styles/colors.css
- Replace all hardcoded colors across components with CSS custom properties
- Establish semantic color mappings for consistent theming (--text-primary, --bg-secondary, etc.)
- Add complete color scales for gray, slate, blue, red, green, yellow, purple, pink
- Include dark mode color overrides for automatic theme switching
- Update PresentationEditor.css to use global color variables throughout
- Consolidate SlideThumbnail.css styles and optimize using CSS cascades
- Move SlideThumbnail-specific styles from PresentationEditor.css to component file
- Update all UI button components (Button, ActionButton, BackButton) to use color variables
- Modernize Modal, AlertDialog, and ConfirmDialog components with global colors
- Optimize App.css, index.css, and PresentationsList.css color usage
- Reduce CSS bundle size through consolidation and elimination of duplicate styles

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-21 13:06:34 -05:00

144 lines
2.9 KiB
CSS

/* Base Button Styles */
.button {
/* Layout */
display: inline-flex;
align-items: center;
justify-content: center;
gap: 0.5rem;
/* Typography */
font-family: inherit;
font-weight: 500;
text-decoration: none;
white-space: nowrap;
/* Interaction */
cursor: pointer;
transition: all 0.2s ease;
border: 1px solid transparent;
/* Appearance */
border-radius: 0.375rem;
outline: none;
}
.button:focus-visible {
outline: 2px solid var(--focus-ring);
outline-offset: var(--focus-ring-offset);
}
.button:disabled {
opacity: 0.6;
cursor: not-allowed;
pointer-events: none;
}
/* Size Variants */
.button-small {
padding: 0.375rem 0.75rem;
font-size: 0.75rem;
border-radius: 0.25rem;
}
.button-medium {
padding: 0.5rem 1rem;
font-size: 0.875rem;
}
.button-large {
padding: 0.75rem 1.5rem;
font-size: 1rem;
font-weight: 600;
}
/* Primary Variant */
.button-primary {
background: var(--btn-primary-bg);
color: var(--btn-primary-text);
border-color: var(--btn-primary-border);
}
.button-primary:hover:not(:disabled) {
background: var(--btn-primary-bg-hover);
border-color: var(--btn-primary-border-hover);
}
.button-primary:active:not(:disabled) {
background: var(--btn-primary-bg-active);
border-color: var(--btn-primary-bg-active);
}
/* Secondary Variant */
.button-secondary {
background: var(--btn-secondary-bg);
color: var(--btn-secondary-text);
border-color: var(--btn-secondary-border);
}
.button-secondary:hover:not(:disabled) {
background: var(--btn-secondary-bg-hover);
color: var(--btn-secondary-text-hover);
border-color: var(--btn-secondary-border-hover);
}
.button-secondary:active:not(:disabled) {
background: var(--btn-secondary-bg-active);
color: var(--btn-secondary-text-active);
}
/* Danger Variant */
.button-danger {
background: var(--btn-danger-bg);
color: var(--btn-danger-text);
border-color: var(--btn-danger-border);
}
.button-danger:hover:not(:disabled) {
background: var(--btn-danger-bg-hover);
border-color: var(--btn-danger-border-hover);
}
.button-danger:active:not(:disabled) {
background: var(--btn-danger-bg-active);
border-color: var(--btn-danger-bg-active);
}
/* Link Variant */
.button-link {
background: none;
color: var(--text-secondary);
border: none;
text-decoration: underline;
padding: 0.25rem 0.5rem;
}
.button-link:hover:not(:disabled) {
color: var(--text-primary);
}
.button-link:active:not(:disabled) {
color: var(--text-primary);
}
/* Loading State */
.button-loading {
position: relative;
color: transparent;
}
.button-loading::after {
content: '';
position: absolute;
width: 1rem;
height: 1rem;
border: 2px solid transparent;
border-top: 2px solid currentColor;
border-radius: 50%;
animation: button-spin 1s linear infinite;
color: inherit;
}
@keyframes button-spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}