/** * HVAC Community Events - Design System * Master design tokens and component patterns * * This file establishes the foundation for all HVAC plugin styles * following a systematic design approach with consistent spacing, * typography, colors, and component patterns. * * @version 1.0.0 * @since 2025-08-21 */ /* ===== DESIGN TOKENS ===== */ :root { /* === SPACING SCALE (8px base unit) === */ --hvac-space-0: 0; --hvac-space-1: 0.25rem; /* 4px */ --hvac-space-2: 0.5rem; /* 8px */ --hvac-space-3: 0.75rem; /* 12px */ --hvac-space-4: 1rem; /* 16px */ --hvac-space-5: 1.25rem; /* 20px */ --hvac-space-6: 1.5rem; /* 24px */ --hvac-space-8: 2rem; /* 32px */ --hvac-space-10: 2.5rem; /* 40px */ --hvac-space-12: 3rem; /* 48px */ --hvac-space-16: 4rem; /* 64px */ --hvac-space-20: 5rem; /* 80px */ /* === COLOR SYSTEM === */ /* Primary Blue Scale */ --hvac-primary-50: #e6f3fb; --hvac-primary-100: #cce7f7; --hvac-primary-200: #99cef0; --hvac-primary-300: #66b6e8; --hvac-primary-400: #339de0; --hvac-primary-500: #0274be; /* Main brand color */ --hvac-primary-600: #0264a8; --hvac-primary-700: #005493; --hvac-primary-800: #00437d; --hvac-primary-900: #003368; /* Neutral Gray Scale */ --hvac-neutral-0: #ffffff; --hvac-neutral-50: #f9fafb; --hvac-neutral-100: #f3f4f6; --hvac-neutral-200: #e5e7eb; --hvac-neutral-300: #d1d5db; --hvac-neutral-400: #9ca3af; --hvac-neutral-500: #6b7280; --hvac-neutral-600: #4b5563; --hvac-neutral-700: #374151; --hvac-neutral-800: #1f2937; --hvac-neutral-900: #111827; /* Semantic Colors */ --hvac-success-50: #f0fdf4; --hvac-success-500: #22c55e; --hvac-success-600: #16a34a; --hvac-success-700: #15803d; --hvac-warning-50: #fffbeb; --hvac-warning-500: #f59e0b; --hvac-warning-600: #d97706; --hvac-warning-700: #b45309; --hvac-error-50: #fef2f2; --hvac-error-500: #ef4444; --hvac-error-600: #dc2626; --hvac-error-700: #b91c1c; --hvac-info-50: #eff6ff; --hvac-info-500: #3b82f6; --hvac-info-600: #2563eb; --hvac-info-700: #1d4ed8; /* === TYPOGRAPHY SCALE === */ --hvac-text-xs: 0.75rem; /* 12px */ --hvac-text-sm: 0.875rem; /* 14px */ --hvac-text-base: 1rem; /* 16px */ --hvac-text-lg: 1.125rem; /* 18px */ --hvac-text-xl: 1.25rem; /* 20px */ --hvac-text-2xl: 1.5rem; /* 24px */ --hvac-text-3xl: 1.875rem; /* 30px */ --hvac-text-4xl: 2.25rem; /* 36px */ /* Line Heights */ --hvac-leading-tight: 1.25; --hvac-leading-snug: 1.375; --hvac-leading-normal: 1.5; --hvac-leading-relaxed: 1.625; --hvac-leading-loose: 2; /* Font Weights */ --hvac-font-light: 300; --hvac-font-normal: 400; --hvac-font-medium: 500; --hvac-font-semibold: 600; --hvac-font-bold: 700; /* === BORDER RADIUS === */ --hvac-radius-none: 0; --hvac-radius-sm: 0.25rem; /* 4px */ --hvac-radius-base: 0.5rem; /* 8px */ --hvac-radius-md: 0.75rem; /* 12px */ --hvac-radius-lg: 1rem; /* 16px */ --hvac-radius-xl: 1.5rem; /* 24px */ --hvac-radius-full: 9999px; /* === SHADOWS === */ --hvac-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05); --hvac-shadow-base: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); --hvac-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); --hvac-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); --hvac-shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); /* === TRANSITIONS === */ --hvac-transition-fast: 150ms ease-in-out; --hvac-transition-base: 250ms ease-in-out; --hvac-transition-slow: 350ms ease-in-out; /* === Z-INDEX SCALE === */ --hvac-z-hide: -1; --hvac-z-base: 0; --hvac-z-docked: 10; --hvac-z-dropdown: 1000; --hvac-z-sticky: 1100; --hvac-z-banner: 1200; --hvac-z-overlay: 1300; --hvac-z-modal: 1400; --hvac-z-popover: 1500; --hvac-z-skipnav: 1600; --hvac-z-toast: 1700; --hvac-z-tooltip: 1800; /* === RESPONSIVE BREAKPOINTS === */ --hvac-screen-sm: 640px; --hvac-screen-md: 768px; --hvac-screen-lg: 1024px; --hvac-screen-xl: 1280px; --hvac-screen-2xl: 1536px; /* === COMPONENT TOKENS === */ /* Container */ --hvac-container-max-width: 1200px; --hvac-container-padding: var(--hvac-space-4); /* Cards */ --hvac-card-padding: var(--hvac-space-6); --hvac-card-radius: var(--hvac-radius-base); --hvac-card-shadow: var(--hvac-shadow-base); --hvac-card-border: 1px solid var(--hvac-neutral-200); /* Buttons */ --hvac-button-padding-sm: var(--hvac-space-2) var(--hvac-space-3); --hvac-button-padding-base: var(--hvac-space-3) var(--hvac-space-5); --hvac-button-padding-lg: var(--hvac-space-4) var(--hvac-space-8); --hvac-button-radius: var(--hvac-radius-base); --hvac-button-shadow: var(--hvac-shadow-sm); --hvac-button-transition: var(--hvac-transition-fast); /* Forms */ --hvac-input-padding: var(--hvac-space-3) var(--hvac-space-4); --hvac-input-radius: var(--hvac-radius-base); --hvac-input-border: 1px solid var(--hvac-neutral-300); --hvac-input-shadow: var(--hvac-shadow-sm); --hvac-input-focus-ring: 0 0 0 3px rgba(2, 116, 190, 0.1); /* Navigation */ --hvac-nav-padding: var(--hvac-space-4) var(--hvac-space-6); --hvac-nav-shadow: var(--hvac-shadow-base); /* Tables */ --hvac-table-padding: var(--hvac-space-3) var(--hvac-space-4); --hvac-table-border: 1px solid var(--hvac-neutral-200); /* === ACCESSIBILITY === */ --hvac-focus-ring: 0 0 0 3px rgba(2, 116, 190, 0.5); --hvac-focus-ring-offset: 2px; /* Minimum touch targets */ --hvac-touch-target: 44px; } /* ===== RESET & BASE STYLES ===== */ /* Box sizing for all HVAC components */ .hvac-content, .hvac-content *, .hvac-content *::before, .hvac-content *::after { box-sizing: border-box; } /* Base text styles */ .hvac-content { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; font-size: var(--hvac-text-base); line-height: var(--hvac-leading-normal); color: var(--hvac-neutral-900); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* ===== LAYOUT UTILITIES ===== */ /* Container */ .hvac-container { max-width: var(--hvac-container-max-width); margin: 0 auto; padding: 0 var(--hvac-container-padding); } /* Grid System */ .hvac-grid { display: grid; gap: var(--hvac-space-6); } .hvac-grid-2 { grid-template-columns: repeat(2, 1fr); } .hvac-grid-3 { grid-template-columns: repeat(3, 1fr); } .hvac-grid-4 { grid-template-columns: repeat(4, 1fr); } /* Responsive grid */ @media (max-width: 767px) { .hvac-grid-2, .hvac-grid-3, .hvac-grid-4 { grid-template-columns: 1fr; } } @media (min-width: 768px) and (max-width: 1023px) { .hvac-grid-3, .hvac-grid-4 { grid-template-columns: repeat(2, 1fr); } } /* Flexbox utilities */ .hvac-flex { display: flex; } .hvac-flex-col { flex-direction: column; } .hvac-items-center { align-items: center; } .hvac-justify-center { justify-content: center; } .hvac-justify-between { justify-content: space-between; } .hvac-justify-end { justify-content: flex-end; } .hvac-gap-2 { gap: var(--hvac-space-2); } .hvac-gap-3 { gap: var(--hvac-space-3); } .hvac-gap-4 { gap: var(--hvac-space-4); } .hvac-gap-6 { gap: var(--hvac-space-6); } /* ===== SPACING UTILITIES ===== */ /* Margin */ .hvac-m-0 { margin: 0 !important; } .hvac-m-2 { margin: var(--hvac-space-2); } .hvac-m-4 { margin: var(--hvac-space-4); } .hvac-m-6 { margin: var(--hvac-space-6); } .hvac-mt-0 { margin-top: 0 !important; } .hvac-mt-2 { margin-top: var(--hvac-space-2); } .hvac-mt-4 { margin-top: var(--hvac-space-4); } .hvac-mt-6 { margin-top: var(--hvac-space-6); } .hvac-mt-8 { margin-top: var(--hvac-space-8); } .hvac-mb-0 { margin-bottom: 0 !important; } .hvac-mb-2 { margin-bottom: var(--hvac-space-2); } .hvac-mb-4 { margin-bottom: var(--hvac-space-4); } .hvac-mb-6 { margin-bottom: var(--hvac-space-6); } .hvac-mb-8 { margin-bottom: var(--hvac-space-8); } /* Padding */ .hvac-p-0 { padding: 0 !important; } .hvac-p-2 { padding: var(--hvac-space-2); } .hvac-p-4 { padding: var(--hvac-space-4); } .hvac-p-6 { padding: var(--hvac-space-6); } .hvac-px-2 { padding-left: var(--hvac-space-2); padding-right: var(--hvac-space-2); } .hvac-px-4 { padding-left: var(--hvac-space-4); padding-right: var(--hvac-space-4); } .hvac-px-6 { padding-left: var(--hvac-space-6); padding-right: var(--hvac-space-6); } .hvac-py-2 { padding-top: var(--hvac-space-2); padding-bottom: var(--hvac-space-2); } .hvac-py-4 { padding-top: var(--hvac-space-4); padding-bottom: var(--hvac-space-4); } .hvac-py-6 { padding-top: var(--hvac-space-6); padding-bottom: var(--hvac-space-6); } /* ===== REDUCED MOTION SUPPORT ===== */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } } /* ===== PRINT STYLES ===== */ @media print { .hvac-content { color: black !important; background: white !important; } .hvac-no-print { display: none !important; } }