UNPKG

maie-ui-library

Version:

Comprehensive UI component library with CSS variables for easy customization

300 lines (257 loc) 8.63 kB
/* ======= UI LIBRARY BASE STYLES ======= */ /* This file contains ONLY base styles and hardcoded values for the UI library */ /* All component-specific styles should be in their respective component CSS files */ :root { /* ======= CORE COLOR SYSTEM ======= */ /* Primary Brand Colors */ --ui-primary: #37ff00; --ui-primary-hover: #1d8200; --ui-primary-light: #f1fcf7; --ui-primary-dark: #0d4d00; /* Secondary Brand Colors */ --ui-secondary: #ff6600; --ui-secondary-hover: #e55a00; --ui-secondary-light: #fff4f0; --ui-secondary-dark: #cc5200; /* Semantic Colors */ --ui-success: #20c997; --ui-success-hover: #1aa179; --ui-success-light: #eafff6; --ui-success-dark: #0f5c3f; --ui-warning: #ffe066; --ui-warning-hover: #ffd633; --ui-warning-light: #fff8e1; --ui-warning-dark: #ccb300; --ui-danger: #e63946; --ui-danger-hover: #d62828; --ui-danger-light: #ffeaea; --ui-danger-dark: #b91c1c; --ui-info: #3b5bdb; --ui-info-hover: #2563eb; --ui-info-light: #f1f5f9; --ui-info-dark: #1e40af; --ui-neutral: #6b7280; --ui-neutral-hover: #4b5563; --ui-neutral-light: #f3f4f6; --ui-neutral-dark: #374151; /* Background Colors */ --ui-bg-primary: #ffffff; --ui-bg-secondary: #f9fafc; --ui-bg-tertiary: #f3f4f6; --ui-bg-hover: #f4fff9; --ui-bg-disabled: #e9ecef; --ui-bg-overlay: rgba(0, 0, 0, 0.5); /* Text Colors */ --ui-text-primary: #202520; --ui-text-secondary: #6b7280; --ui-text-tertiary: #9ca3af; --ui-text-disabled: #d1d5db; --ui-text-inverse: #ffffff; --ui-text-accent: #1d8200; /* Border Colors */ --ui-border-primary: #000000; --ui-border-secondary: #d1d5db; --ui-border-accent: #37ff00; --ui-border-focus: #3b82f6; --ui-border-error: #ef4444; --ui-border-success: #10b981; /* Border Widths */ --ui-border-width: 1px; --ui-border-width-thick: 2px; --ui-border-width-thin: 0.5px; /* Shadow System */ --ui-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05); --ui-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); --ui-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); --ui-shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); --ui-shadow-brand: 0 4px 12px rgba(55, 255, 0, 0.07); --ui-shadow-brand-hover: 0 6px 16px rgba(55, 255, 0, 0.13); /* ======= TYPOGRAPHY SYSTEM ======= */ /* Font Families */ --ui-font-primary: -apple-system, sans-serif; --ui-font-heading: -apple-system, sans-serif; --ui-font-mono: -apple-system, monospace; /* Font Sizes */ --ui-text-xs: 0.75rem; /* 12px */ --ui-text-sm: 0.875rem; /* 14px */ --ui-text-base: 1rem; /* 16px */ --ui-text-lg: 1.125rem; /* 18px */ --ui-text-xl: 1.25rem; /* 20px */ --ui-text-2xl: 1.5rem; /* 24px */ --ui-text-3xl: 1.875rem; /* 30px */ --ui-text-4xl: 2.25rem; /* 36px */ /* Font Weights */ --ui-font-light: 300; --ui-font-normal: 400; --ui-font-medium: 500; --ui-font-semibold: 600; --ui-font-bold: 700; /* Line Heights */ --ui-leading-tight: 1.25; --ui-leading-normal: 1.5; --ui-leading-relaxed: 1.625; /* ======= SPACING SYSTEM ======= */ --ui-space-0: 0; --ui-space-1: 0.25rem; /* 4px */ --ui-space-2: 0.5rem; /* 8px */ --ui-space-3: 0.75rem; /* 12px */ --ui-space-4: 1rem; /* 16px */ --ui-space-5: 1.25rem; /* 20px */ --ui-space-6: 1.5rem; /* 24px */ --ui-space-8: 2rem; /* 32px */ --ui-space-10: 2.5rem; /* 40px */ --ui-space-12: 3rem; /* 48px */ --ui-space-16: 4rem; /* 64px */ --ui-space-20: 5rem; /* 80px */ --ui-space-24: 6rem; /* 96px */ --ui-space-125: 125rem; /* 1000px */ /* ======= BORDER RADIUS SYSTEM ======= */ --ui-radius-none: 0; --ui-radius-sm: 0.25rem; /* 4px */ --ui-radius-md: 0.375rem; /* 6px */ --ui-radius-lg: 0.5rem; /* 8px */ --ui-radius-xl: 0.75rem; /* 12px */ --ui-radius-2xl: 1rem; /* 16px */ --ui-radius-3xl: 1.5rem; /* 24px */ --ui-radius-full: 9999px; /* Component-specific radius */ --ui-radius-button: var(--ui-radius-lg); --ui-radius-input: var(--ui-radius-lg); --ui-radius-card: var(--ui-radius-lg); --ui-radius-modal: var(--ui-radius-xl); --ui-radius-pill: var(--ui-radius-full); /* ======= Z-INDEX SYSTEM ======= */ --ui-z-dropdown: 1000; --ui-z-sticky: 1020; --ui-z-fixed: 1030; --ui-z-modal-backdrop: 1040; --ui-z-modal: 1050; --ui-z-popover: 1060; --ui-z-tooltip: 1070; --ui-z-toast: 1080; /* ======= TRANSITION SYSTEM ======= */ --ui-transition-fast: 150ms ease-in-out; --ui-transition-normal: 250ms ease-in-out; --ui-transition-slow: 350ms ease-in-out; --ui-transition-bounce: 300ms cubic-bezier(0.68, -0.55, 0.265, 1.55); /* ======= COMPONENT-SPECIFIC VARIABLES ======= */ /* Button System */ --ui-button-height-sm: 2rem; /* 32px */ --ui-button-height-md: 2.5rem; /* 40px */ --ui-button-height-lg: 3rem; /* 48px */ --ui-button-padding-x: 1rem; /* 16px */ --ui-button-padding-y: 0.5rem; /* 8px */ /* Input System */ --ui-input-height-sm: 2rem; /* 32px */ --ui-input-height-md: 2.5rem; /* 40px */ --ui-input-height-lg: 3rem; /* 48px */ --ui-input-padding-x: 0.75rem; /* 12px */ --ui-input-padding-y: 0.5rem; /* 8px */ /* Card System */ --ui-card-padding: var(--ui-space-6); --ui-card-padding-sm: var(--ui-space-4); --ui-card-padding-lg: var(--ui-space-8); /* Modal System */ --ui-modal-max-width: 32rem; /* 512px */ --ui-modal-max-width-lg: 48rem; /* 768px */ --ui-modal-max-width-xl: 64rem; /* 1024px */ /* Form System */ --ui-form-gap: var(--ui-space-4); --ui-form-label-margin: var(--ui-space-2); /* Navigation System */ --ui-nav-height: 4rem; /* 64px */ --ui-sidebar-width: 16rem; /* 256px */ --ui-sidebar-width-collapsed: 4rem; /* 64px */ /* ======= LEGACY COMPATIBILITY ======= */ /* These maintain backward compatibility with existing styles */ --ui-primary-bg: var(--ui-primary-light); --ui-secondary-bg: var(--ui-secondary-light); --ui-success-bg: var(--ui-success-light); --ui-warning-bg: var(--ui-warning-light); --ui-danger-bg: var(--ui-danger-light); --ui-info-bg: var(--ui-info-light); --ui-neutral-bg: var(--ui-neutral-light); --ui-bg: var(--ui-bg-primary); --ui-bg-light: var(--ui-bg-secondary); --ui-bg-hover: var(--ui-bg-hover); --ui-bg-contrast: var(--ui-bg-tertiary); --ui-font-main: var(--ui-font-primary); --ui-font-size: var(--ui-text-base); --ui-font-title: var(--ui-text-3xl); --ui-font-label: var(--ui-text-base); --ui-font-small: var(--ui-text-sm); --ui-font-tiny: var(--ui-text-xs); --ui-font-color: var(--ui-text-primary); --ui-font-color-soft: var(--ui-text-secondary); --ui-font-color-strong: var(--ui-text-accent); --ui-font-contrast: var(--ui-text-inverse); --ui-border: var(--ui-border-accent); --ui-border-light: var(--ui-border-primary); --ui-border-strong: var(--ui-border-accent); --ui-shadow: var(--ui-shadow-brand); --ui-shadow-active: var(--ui-shadow-brand-hover); --ui-shadow-btn: var(--ui-shadow-brand); --ui-spacing-xs: var(--ui-space-1); --ui-spacing-sm: var(--ui-space-2); --ui-spacing-md: var(--ui-space-4); --ui-spacing-lg: var(--ui-space-6); --ui-spacing-xl: var(--ui-space-8); --ui-btn-radius: var(--ui-radius-button); --ui-input-radius: var(--ui-radius-input); --ui-card-radius: var(--ui-radius-card); --ui-card-radius-lg: var(--ui-radius-2xl); --ui-card-radius-sm: var(--ui-radius-md); --ui-modal-radius: var(--ui-radius-modal); --ui-panel-radius: var(--ui-radius-card); --ui-footer-radius: var(--ui-radius-card); --ui-pill-radius: var(--ui-radius-pill); } /* ======= BASE RESET & GLOBAL STYLES ======= */ *, *::before, *::after { box-sizing: border-box; } html { line-height: var(--ui-leading-normal); -webkit-text-size-adjust: 100%; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } body { margin: 0; font-family: var(--ui-font-primary); font-size: var(--ui-text-base); font-weight: var(--ui-font-normal); line-height: var(--ui-leading-normal); color: var(--ui-text-primary); background-color: var(--ui-bg-secondary); } /* ======= UTILITY CLASSES ======= */ .ui-list-container { width: inherit; position: relative; } /* Focus management */ *:focus { outline: 2px solid var(--ui-border-focus); outline-offset: 2px; } *:focus:not(:focus-visible) { outline: none; } /* Screen reader only content */ .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }