/** * SaralStudy Design System * Version: 1.0 * Description: Core design tokens, variables, and utility classes * Mobile-first, modern, and accessible design system */ /* ============================================ CSS CUSTOM PROPERTIES (Design Tokens) ============================================ */ :root { /* ===== Primary Colors ===== */ --primary: #f77112; --primary-dark: #d65e0a; --primary-light: #ff8c3a; --primary-lighter: #ffb366; --primary-lightest: #ffe6d5; /* ===== Secondary Colors ===== */ --secondary: #2c3e50; --secondary-dark: #1a252f; --secondary-light: #34495e; --secondary-lighter: #546e7a; --secondary-lightest: #eceff1; /* ===== Accent Colors ===== */ --accent-blue: #3498db; --accent-blue-dark: #2980b9; --accent-blue-light: #5dade2; --accent-green: #27ae60; --accent-green-dark: #229954; --accent-green-light: #52be80; --accent-red: #e74c3c; --accent-red-dark: #c0392b; --accent-red-light: #ec7063; --accent-yellow: #f39c12; --accent-yellow-dark: #d68910; --accent-yellow-light: #f5b041; --accent-purple: #9b59b6; --accent-purple-dark: #8e44ad; --accent-purple-light: #af7ac5; /* ===== Neutral Colors (Gray Scale) ===== */ --white: #ffffff; --gray-50: #f9fafb; --gray-100: #f3f4f6; --gray-200: #e5e7eb; --gray-300: #d1d5db; --gray-400: #9ca3af; --gray-500: #6b7280; --gray-600: #4b5563; --gray-700: #374151; --gray-800: #1f2937; --gray-900: #111827; --black: #000000; /* ===== Semantic Colors ===== */ --success: #10b981; --success-dark: #059669; --success-light: #34d399; --success-bg: #d1fae5; --warning: #f59e0b; --warning-dark: #d97706; --warning-light: #fbbf24; --warning-bg: #fef3c7; --error: #ef4444; --error-dark: #dc2626; --error-light: #f87171; --error-bg: #fee2e2; --info: #3b82f6; --info-dark: #2563eb; --info-light: #60a5fa; --info-bg: #dbeafe; /* ===== Background Colors ===== */ --bg-primary: #ffffff; --bg-secondary: #f9fafb; --bg-tertiary: #f3f4f6; --bg-dark: #1f2937; --bg-darker: #111827; /* ===== Text Colors ===== */ --text-primary: #111827; --text-secondary: #6b7280; --text-tertiary: #9ca3af; --text-inverse: #ffffff; --text-muted: #d1d5db; /* ===== Border Colors ===== */ --border-light: #f3f4f6; --border-default: #e5e7eb; --border-medium: #d1d5db; --border-dark: #9ca3af; /* ===== Font Families ===== */ --font-primary: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; --font-heading: 'Poppins', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; --font-mono: 'Fira Code', 'SF Mono', Monaco, 'Cascadia Code', 'Courier New', monospace; /* ===== Font Sizes ===== */ --text-xs: 0.75rem; /* 12px */ --text-sm: 0.875rem; /* 14px */ --text-base: 1rem; /* 16px */ --text-lg: 1.125rem; /* 18px */ --text-xl: 1.25rem; /* 20px */ --text-2xl: 1.5rem; /* 24px */ --text-3xl: 1.875rem; /* 30px */ --text-4xl: 2.25rem; /* 36px */ --text-5xl: 3rem; /* 48px */ --text-6xl: 3.75rem; /* 60px */ --text-7xl: 4.5rem; /* 72px */ /* ===== Font Weights ===== */ --font-thin: 100; --font-extralight: 200; --font-light: 300; --font-normal: 400; --font-medium: 500; --font-semibold: 600; --font-bold: 700; --font-extrabold: 800; --font-black: 900; /* ===== Line Heights ===== */ --leading-none: 1; --leading-tight: 1.25; --leading-snug: 1.375; --leading-normal: 1.5; --leading-relaxed: 1.625; --leading-loose: 2; /* ===== Letter Spacing ===== */ --tracking-tighter: -0.05em; --tracking-tight: -0.025em; --tracking-normal: 0; --tracking-wide: 0.025em; --tracking-wider: 0.05em; --tracking-widest: 0.1em; /* ===== Spacing Scale ===== */ --spacing-0: 0; --spacing-px: 1px; --spacing-0-5: 0.125rem; /* 2px */ --spacing-1: 0.25rem; /* 4px */ --spacing-1-5: 0.375rem; /* 6px */ --spacing-2: 0.5rem; /* 8px */ --spacing-2-5: 0.625rem; /* 10px */ --spacing-3: 0.75rem; /* 12px */ --spacing-3-5: 0.875rem; /* 14px */ --spacing-4: 1rem; /* 16px */ --spacing-5: 1.25rem; /* 20px */ --spacing-6: 1.5rem; /* 24px */ --spacing-7: 1.75rem; /* 28px */ --spacing-8: 2rem; /* 32px */ --spacing-9: 2.25rem; /* 36px */ --spacing-10: 2.5rem; /* 40px */ --spacing-11: 2.75rem; /* 44px */ --spacing-12: 3rem; /* 48px */ --spacing-14: 3.5rem; /* 56px */ --spacing-16: 4rem; /* 64px */ --spacing-20: 5rem; /* 80px */ --spacing-24: 6rem; /* 96px */ --spacing-28: 7rem; /* 112px */ --spacing-32: 8rem; /* 128px */ /* ===== Border Radius ===== */ --radius-none: 0; --radius-sm: 0.25rem; /* 4px */ --radius: 0.375rem; /* 6px */ --radius-md: 0.5rem; /* 8px */ --radius-lg: 0.75rem; /* 12px */ --radius-xl: 1rem; /* 16px */ --radius-2xl: 1.5rem; /* 24px */ --radius-3xl: 2rem; /* 32px */ --radius-full: 9999px; /* ===== Shadows ===== */ --shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, 0.05); --shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); --shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); --shadow-md: 0 6px 12px -2px rgba(0, 0, 0, 0.1), 0 3px 6px -2px rgba(0, 0, 0, 0.05); --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); --shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25); --shadow-inner: inset 0 2px 4px 0 rgba(0, 0, 0, 0.06); /* ===== Transitions ===== */ --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1); --transition-base: 200ms cubic-bezier(0.4, 0, 0.2, 1); --transition-medium: 300ms cubic-bezier(0.4, 0, 0.2, 1); --transition-slow: 500ms cubic-bezier(0.4, 0, 0.2, 1); --transition-slower: 700ms cubic-bezier(0.4, 0, 0.2, 1); /* ===== Z-Index Scale ===== */ --z-0: 0; --z-10: 10; --z-20: 20; --z-30: 30; --z-40: 40; --z-50: 50; --z-dropdown: 1000; --z-sticky: 1020; --z-fixed: 1030; --z-modal-backdrop: 1040; --z-modal: 1050; --z-popover: 1060; --z-tooltip: 1070; /* ===== Breakpoints ===== */ --breakpoint-xs: 0; --breakpoint-sm: 576px; --breakpoint-md: 768px; --breakpoint-lg: 992px; --breakpoint-xl: 1200px; --breakpoint-xxl: 1400px; /* ===== Container Max Widths ===== */ --container-sm: 540px; --container-md: 720px; --container-lg: 960px; --container-xl: 1140px; --container-xxl: 1320px; } /* ============================================ GLOBAL RESETS & BASE STYLES ============================================ */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { font-size: 16px; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; scroll-behavior: smooth; } body { font-family: var(--font-primary); font-size: var(--text-base); font-weight: var(--font-normal); line-height: var(--leading-normal); color: var(--text-primary); background-color: var(--bg-primary); overflow-x: hidden; } /* ============================================ TYPOGRAPHY UTILITIES ============================================ */ /* Font Families */ .font-primary { font-family: var(--font-primary); } .font-heading { font-family: var(--font-heading); } .font-mono { font-family: var(--font-mono); } /* Font Sizes */ .text-xs { font-size: var(--text-xs); } .text-sm { font-size: var(--text-sm); } .text-base { font-size: var(--text-base); } .text-lg { font-size: var(--text-lg); } .text-xl { font-size: var(--text-xl); } .text-2xl { font-size: var(--text-2xl); } .text-3xl { font-size: var(--text-3xl); } .text-4xl { font-size: var(--text-4xl); } .text-5xl { font-size: var(--text-5xl); } .text-6xl { font-size: var(--text-6xl); } .text-7xl { font-size: var(--text-7xl); } /* Font Weights */ .font-thin { font-weight: var(--font-thin); } .font-extralight { font-weight: var(--font-extralight); } .font-light { font-weight: var(--font-light); } .font-normal { font-weight: var(--font-normal); } .font-medium { font-weight: var(--font-medium); } .font-semibold { font-weight: var(--font-semibold); } .font-bold { font-weight: var(--font-bold); } .font-extrabold { font-weight: var(--font-extrabold); } .font-black { font-weight: var(--font-black); } /* Text Colors */ .text-primary { color: var(--text-primary); } .text-secondary { color: var(--text-secondary); } .text-tertiary { color: var(--text-tertiary); } .text-inverse { color: var(--text-inverse); } .text-muted { color: var(--text-muted); } .text-brand { color: var(--primary); } .text-success { color: var(--success); } .text-warning { color: var(--warning); } .text-error { color: var(--error); } .text-info { color: var(--info); } /* Text Alignment */ .text-left { text-align: left; } .text-center { text-align: center; } .text-right { text-align: right; } .text-justify { text-align: justify; } /* Text Transform */ .uppercase { text-transform: uppercase; } .lowercase { text-transform: lowercase; } .capitalize { text-transform: capitalize; } .normal-case { text-transform: none; } /* Text Decoration */ .underline { text-decoration: underline; } .line-through { text-decoration: line-through; } .no-underline { text-decoration: none; } /* Line Height */ .leading-none { line-height: var(--leading-none); } .leading-tight { line-height: var(--leading-tight); } .leading-snug { line-height: var(--leading-snug); } .leading-normal { line-height: var(--leading-normal); } .leading-relaxed { line-height: var(--leading-relaxed); } .leading-loose { line-height: var(--leading-loose); } /* Letter Spacing */ .tracking-tighter { letter-spacing: var(--tracking-tighter); } .tracking-tight { letter-spacing: var(--tracking-tight); } .tracking-normal { letter-spacing: var(--tracking-normal); } .tracking-wide { letter-spacing: var(--tracking-wide); } .tracking-wider { letter-spacing: var(--tracking-wider); } .tracking-widest { letter-spacing: var(--tracking-widest); } /* ============================================ SPACING UTILITIES ============================================ */ /* Margin */ .m-0 { margin: var(--spacing-0); } .m-1 { margin: var(--spacing-1); } .m-2 { margin: var(--spacing-2); } .m-3 { margin: var(--spacing-3); } .m-4 { margin: var(--spacing-4); } .m-5 { margin: var(--spacing-5); } .m-6 { margin: var(--spacing-6); } .m-8 { margin: var(--spacing-8); } .m-10 { margin: var(--spacing-10); } .m-12 { margin: var(--spacing-12); } .m-16 { margin: var(--spacing-16); } .m-auto { margin: auto; } /* Margin Top */ .mt-0 { margin-top: var(--spacing-0); } .mt-1 { margin-top: var(--spacing-1); } .mt-2 { margin-top: var(--spacing-2); } .mt-3 { margin-top: var(--spacing-3); } .mt-4 { margin-top: var(--spacing-4); } .mt-5 { margin-top: var(--spacing-5); } .mt-6 { margin-top: var(--spacing-6); } .mt-8 { margin-top: var(--spacing-8); } .mt-10 { margin-top: var(--spacing-10); } .mt-12 { margin-top: var(--spacing-12); } .mt-16 { margin-top: var(--spacing-16); } /* Margin Bottom */ .mb-0 { margin-bottom: var(--spacing-0); } .mb-1 { margin-bottom: var(--spacing-1); } .mb-2 { margin-bottom: var(--spacing-2); } .mb-3 { margin-bottom: var(--spacing-3); } .mb-4 { margin-bottom: var(--spacing-4); } .mb-5 { margin-bottom: var(--spacing-5); } .mb-6 { margin-bottom: var(--spacing-6); } .mb-8 { margin-bottom: var(--spacing-8); } .mb-10 { margin-bottom: var(--spacing-10); } .mb-12 { margin-bottom: var(--spacing-12); } .mb-16 { margin-bottom: var(--spacing-16); } /* Margin Left */ .ml-0 { margin-left: var(--spacing-0); } .ml-1 { margin-left: var(--spacing-1); } .ml-2 { margin-left: var(--spacing-2); } .ml-3 { margin-left: var(--spacing-3); } .ml-4 { margin-left: var(--spacing-4); } .ml-5 { margin-left: var(--spacing-5); } .ml-6 { margin-left: var(--spacing-6); } .ml-auto { margin-left: auto; } /* Margin Right */ .mr-0 { margin-right: var(--spacing-0); } .mr-1 { margin-right: var(--spacing-1); } .mr-2 { margin-right: var(--spacing-2); } .mr-3 { margin-right: var(--spacing-3); } .mr-4 { margin-right: var(--spacing-4); } .mr-5 { margin-right: var(--spacing-5); } .mr-6 { margin-right: var(--spacing-6); } .mr-auto { margin-right: auto; } /* Margin X (horizontal) */ .mx-0 { margin-left: var(--spacing-0); margin-right: var(--spacing-0); } .mx-1 { margin-left: var(--spacing-1); margin-right: var(--spacing-1); } .mx-2 { margin-left: var(--spacing-2); margin-right: var(--spacing-2); } .mx-3 { margin-left: var(--spacing-3); margin-right: var(--spacing-3); } .mx-4 { margin-left: var(--spacing-4); margin-right: var(--spacing-4); } .mx-auto { margin-left: auto; margin-right: auto; } /* Margin Y (vertical) */ .my-0 { margin-top: var(--spacing-0); margin-bottom: var(--spacing-0); } .my-1 { margin-top: var(--spacing-1); margin-bottom: var(--spacing-1); } .my-2 { margin-top: var(--spacing-2); margin-bottom: var(--spacing-2); } .my-3 { margin-top: var(--spacing-3); margin-bottom: var(--spacing-3); } .my-4 { margin-top: var(--spacing-4); margin-bottom: var(--spacing-4); } .my-6 { margin-top: var(--spacing-6); margin-bottom: var(--spacing-6); } .my-8 { margin-top: var(--spacing-8); margin-bottom: var(--spacing-8); } /* Padding */ .p-0 { padding: var(--spacing-0); } .p-1 { padding: var(--spacing-1); } .p-2 { padding: var(--spacing-2); } .p-3 { padding: var(--spacing-3); } .p-4 { padding: var(--spacing-4); } .p-5 { padding: var(--spacing-5); } .p-6 { padding: var(--spacing-6); } .p-8 { padding: var(--spacing-8); } .p-10 { padding: var(--spacing-10); } .p-12 { padding: var(--spacing-12); } /* Padding Top */ .pt-0 { padding-top: var(--spacing-0); } .pt-1 { padding-top: var(--spacing-1); } .pt-2 { padding-top: var(--spacing-2); } .pt-3 { padding-top: var(--spacing-3); } .pt-4 { padding-top: var(--spacing-4); } .pt-5 { padding-top: var(--spacing-5); } .pt-6 { padding-top: var(--spacing-6); } .pt-8 { padding-top: var(--spacing-8); } .pt-10 { padding-top: var(--spacing-10); } .pt-12 { padding-top: var(--spacing-12); } /* Padding Bottom */ .pb-0 { padding-bottom: var(--spacing-0); } .pb-1 { padding-bottom: var(--spacing-1); } .pb-2 { padding-bottom: var(--spacing-2); } .pb-3 { padding-bottom: var(--spacing-3); } .pb-4 { padding-bottom: var(--spacing-4); } .pb-5 { padding-bottom: var(--spacing-5); } .pb-6 { padding-bottom: var(--spacing-6); } .pb-8 { padding-bottom: var(--spacing-8); } .pb-10 { padding-bottom: var(--spacing-10); } .pb-12 { padding-bottom: var(--spacing-12); } /* Padding X (horizontal) */ .px-0 { padding-left: var(--spacing-0); padding-right: var(--spacing-0); } .px-1 { padding-left: var(--spacing-1); padding-right: var(--spacing-1); } .px-2 { padding-left: var(--spacing-2); padding-right: var(--spacing-2); } .px-3 { padding-left: var(--spacing-3); padding-right: var(--spacing-3); } .px-4 { padding-left: var(--spacing-4); padding-right: var(--spacing-4); } .px-5 { padding-left: var(--spacing-5); padding-right: var(--spacing-5); } .px-6 { padding-left: var(--spacing-6); padding-right: var(--spacing-6); } .px-8 { padding-left: var(--spacing-8); padding-right: var(--spacing-8); } /* Padding Y (vertical) */ .py-0 { padding-top: var(--spacing-0); padding-bottom: var(--spacing-0); } .py-1 { padding-top: var(--spacing-1); padding-bottom: var(--spacing-1); } .py-2 { padding-top: var(--spacing-2); padding-bottom: var(--spacing-2); } .py-3 { padding-top: var(--spacing-3); padding-bottom: var(--spacing-3); } .py-4 { padding-top: var(--spacing-4); padding-bottom: var(--spacing-4); } .py-5 { padding-top: var(--spacing-5); padding-bottom: var(--spacing-5); } .py-6 { padding-top: var(--spacing-6); padding-bottom: var(--spacing-6); } .py-8 { padding-top: var(--spacing-8); padding-bottom: var(--spacing-8); } /* ============================================ DISPLAY UTILITIES ============================================ */ .block { display: block; } .inline-block { display: inline-block; } .inline { display: inline; } .flex { display: flex; } .inline-flex { display: inline-flex; } .grid { display: grid; } .inline-grid { display: inline-grid; } .hidden { display: none; } /* ============================================ FLEXBOX UTILITIES ============================================ */ /* Flex Direction */ .flex-row { flex-direction: row; } .flex-row-reverse { flex-direction: row-reverse; } .flex-col { flex-direction: column; } .flex-col-reverse { flex-direction: column-reverse; } /* Flex Wrap */ .flex-wrap { flex-wrap: wrap; } .flex-nowrap { flex-wrap: nowrap; } .flex-wrap-reverse { flex-wrap: wrap-reverse; } /* Justify Content */ .justify-start { justify-content: flex-start; } .justify-end { justify-content: flex-end; } .justify-center { justify-content: center; } .justify-between { justify-content: space-between; } .justify-around { justify-content: space-around; } .justify-evenly { justify-content: space-evenly; } /* Align Items */ .items-start { align-items: flex-start; } .items-end { align-items: flex-end; } .items-center { align-items: center; } .items-baseline { align-items: baseline; } .items-stretch { align-items: stretch; } /* Align Content */ .content-start { align-content: flex-start; } .content-end { align-content: flex-end; } .content-center { align-content: center; } .content-between { align-content: space-between; } .content-around { align-content: space-around; } .content-evenly { align-content: space-evenly; } /* Flex Grow & Shrink */ .flex-1 { flex: 1 1 0%; } .flex-auto { flex: 1 1 auto; } .flex-initial { flex: 0 1 auto; } .flex-none { flex: none; } .flex-grow { flex-grow: 1; } .flex-shrink { flex-shrink: 1; } /* Gap */ .gap-0 { gap: var(--spacing-0); } .gap-1 { gap: var(--spacing-1); } .gap-2 { gap: var(--spacing-2); } .gap-3 { gap: var(--spacing-3); } .gap-4 { gap: var(--spacing-4); } .gap-5 { gap: var(--spacing-5); } .gap-6 { gap: var(--spacing-6); } .gap-8 { gap: var(--spacing-8); } /* ============================================ BORDER UTILITIES ============================================ */ /* Border Width */ .border-0 { border-width: 0; } .border { border-width: 1px; } .border-2 { border-width: 2px; } /** * SaralStudy UI Components * * Specialized component styles for enhanced user interface * * @package SaralStudy\Frontend * @version 1.0 */ /* ============================================= HEADER COMPONENTS ============================================= */ .saral-header { background: white; box-shadow: var(--saral-shadow-sm); position: sticky; top: 0; z-index: var(--saral-z-sticky); transition: all var(--saral-transition-normal); } .saral-header-container { display: flex; align-items: center; justify-content: space-between; padding: var(--saral-space-4) var(--saral-space-3); max-width: var(--saral-container-2xl); margin: 0 auto; } .saral-logo { display: flex; align-items: center; text-decoration: none; font-weight: 700; font-size: var(--saral-font-size-xl); color: var(--saral-primary); transition: all var(--saral-transition-fast); } .saral-logo:hover { transform: scale(1.05); } .saral-logo-icon { width: 40px; height: 40px; background: var(--saral-primary); color: white; border-radius: var(--saral-radius-lg); display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: var(--saral-font-size-lg); margin-right: var(--saral-space-3); } .saral-logo-text { font-size: var(--saral-font-size-2xl); font-weight: 800; background: linear-gradient(135deg, var(--saral-primary), var(--saral-secondary)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } /* ============================================= SEARCH COMPONENTS ============================================= */ .saral-search-container { position: relative; flex: 1; max-width: 600px; } .saral-search-input { width: 100%; padding: var(--saral-space-3) var(--saral-space-4) var(--saral-space-3) var(--saral-space-12); font-size: var(--saral-font-size-base); border: 2px solid var(--saral-gray-200); border-radius: var(--saral-radius-xl); background-color: var(--saral-gray-50); transition: all var(--saral-transition-fast); } .saral-search-input:focus { border-color: var(--saral-primary); box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1); background-color: white; } .saral-search-icon { position: absolute; left: var(--saral-space-4); top: 50%; transform: translateY(-50%); color: var(--saral-gray-400); font-size: var(--saral-font-size-lg); pointer-events: none; transition: color var(--saral-transition-fast); } .saral-search-input:focus + .saral-search-icon { color: var(--saral-primary); } .saral-search-suggestions { position: absolute; top: 100%; left: 0; right: 0; background: white; border: 1px solid var(--saral-gray-200); border-top: none; border-radius: var(--saral-radius-lg); box-shadow: var(--saral-shadow-lg); max-height: 300px; overflow-y: auto; z-index: var(--saral-z-dropdown); opacity: 0; visibility: hidden; transform: translateY(-10px); transition: all var(--saral-transition-fast); } .saral-search-suggestions.active { opacity: 1; visibility: visible; transform: translateY(0); } .saral-search-suggestion { padding: var(--saral-space-3) var(--saral-space-4); border-bottom: 1px solid var(--saral-gray-100); cursor: pointer; transition: all var(--saral-transition-fast); display: flex; align-items: center; gap: var(--saral-space-3); } .saral-search-suggestion:hover { background-color: var(--saral-gray-50); } .saral-search-suggestion:last-child { border-bottom: none; } .saral-search-suggestion-icon { color: var(--saral-gray-400); font-size: var(--saral-font-size-sm); } .saral-search-suggestion-text { flex: 1; font-size: var(--saral-font-size-sm); color: var(--saral-gray-700); } .saral-search-suggestion-type { font-size: var(--saral-font-size-xs); color: var(--saral-gray-400); text-transform: uppercase; letter-spacing: var(--saral-letter-spacing-wide); } /* ============================================= HERO SECTION ============================================= */ .saral-hero { background: linear-gradient(135deg, var(--saral-primary) 0%, var(--saral-secondary) 100%); color: white; padding: var(--saral-space-20) 0; position: relative; overflow: hidden; } .saral-hero::before { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: url('data:image/svg+xml,'); opacity: 0.3; } .saral-hero-content { position: relative; z-index: 1; max-width: var(--saral-container-xl); margin: 0 auto; text-align: center; } .saral-hero-title { font-size: var(--saral-font-size-5xl); font-weight: 800; line-height: var(--saral-line-height-tight); margin-bottom: var(--saral-space-6); text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); } .saral-hero-subtitle { font-size: var(--saral-font-size-xl); line-height: var(--saral-line-height-normal); margin-bottom: var(--saral-space-8); opacity: 0.9; max-width: 600px; } .saral-hero-search { max-width: 600px; margin: 0 auto var(--saral-space-8); } .saral-hero-search-input { padding: var(--saral-space-6) var(--saral-space-8); font-size: var(--saral-font-size-lg); border: none; border-radius: var(--saral-radius-2xl); background: rgba(255, 255, 255, 0.1); backdrop-filter: blur(10px); color: white; text-align: center; } .saral-hero-search-input::placeholder { color: rgba(255, 255, 255, 0.7); } .saral-hero-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: var(--saral-space-6); margin-top: var(--saral-space-12); } .saral-hero-stat { text-align: center; padding: var(--saral-space-4); background: rgba(255, 255, 255, 0.1); border-radius: var(--saral-radius-lg); backdrop-filter: blur(10px); } .saral-hero-stat-number { display: block; font-size: var(--saral-font-size-3xl); font-weight: 700; margin-bottom: var(--saral-space-2); } .saral-hero-stat-label { font-size: var(--saral-font-size-sm); opacity: 0.8; text-transform: uppercase; letter-spacing: var(--saral-letter-spacing-wide); } /* ============================================= SUBJECT CARDS ============================================= */ .saral-subject-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: var(--saral-space-6); margin: var(--saral-space-8) 0; } .saral-subject-card { background: white; border-radius: var(--saral-radius-xl); padding: var(--saral-space-6); box-shadow: var(--saral-shadow-md); transition: all var(--saral-transition-normal); position: relative; overflow: hidden; cursor: pointer; border: 2px solid transparent; } .saral-subject-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 4px; background: var(--subject-color, var(--saral-primary)); transition: all var(--saral-transition-fast); } .saral-subject-card:hover { transform: translateY(-4px); box-shadow: var(--saral-shadow-xl); } .saral-subject-card:hover::before { height: 8px; } .saral-subject-icon { width: 60px; height: 60px; background: linear-gradient(135deg, var(--subject-color, var(--saral-primary)), var(--subject-color, var(--saral-secondary))); color: white; border-radius: var(--saral-radius-xl); display: flex; align-items: center; justify-content: center; font-size: var(--saral-font-size-2xl); margin-bottom: var(--saral-space-4); transition: all var(--saral-transition-fast); } .saral-subject-card:hover .saral-subject-icon { transform: scale(1.1) rotate(5deg); } .saral-subject-title { font-size: var(--saral-font-size-xl); font-weight: 700; color: var(--saral-gray-900); margin-bottom: var(--saral-space-3); } .saral-subject-description { font-size: var(--saral-font-size-sm); color: var(--saral-gray-600); line-height: var(--saral-line-height-normal); margin-bottom: var(--saral-space-4); } .saral-subject-stats { display: flex; justify-content: space-between; align-items: center; gap: var(--saral-space-4); } .saral-subject-stat { display: flex; align-items: center; gap: var(--saral-space-2); font-size: var(--saral-font-size-xs); color: var(--saral-gray-500); } .saral-subject-stat i { font-size: var(--saral-font-size-sm); } /* ============================================= CLASS NAVIGATION ============================================= */ .saral-class-nav { background: var(--saral-gray-50); padding: var(--saral-space-8) 0; } .saral-class-nav-title { text-align: center; font-size: var(--saral-font-size-3xl); font-weight: 800; color: var(--saral-gray-900); margin-bottom: var(--saral-space-8); } .saral-class-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--saral-space-6); max-width: var(--saral-container-2xl); margin: 0 auto; } .saral-class-item { background: white; border-radius: var(--saral-radius-lg); padding: var(--saral-space-6); box-shadow: var(--saral-shadow-sm); transition: all var(--saral-transition-fast); text-decoration: none; color: var(--saral-gray-900); display: flex; align-items: center; gap: var(--saral-space-4); border: 2px solid var(--saral-gray-200); } .saral-class-item:hover { transform: translateY(-2px); box-shadow: var(--saral-shadow-lg); border-color: var(--saral-primary); } .saral-class-icon { width: 50px; height: 50px; background: var(--saral-primary); color: white; border-radius: var(--saral-radius-lg); display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: var(--saral-font-size-lg); flex-shrink: 0; } .saral-class-info { flex: 1; } .saral-class-name { font-size: var(--saral-font-size-lg); font-weight: 600; color: var(--saral-gray-900); margin-bottom: var(--saral-space-1); } .saral-class-description { font-size: var(--saral-font-size-sm); color: var(--saral-gray-600); } /* ============================================= FEATURE CARDS ============================================= */ .saral-features { padding: var(--saral-space-16) 0; background: var(--saral-gray-50); } .saral-features-container { max-width: var(--saral-container-2xl); margin: 0 auto; } .saral-features-header { text-align: center; margin-bottom: var(--saral-space-12); } .saral-features-title { font-size: var(--saral-font-size-4xl); font-weight: 800; color: var(--saral-gray-900); margin-bottom: var(--saral-space-4); } .saral-features-subtitle { font-size: var(--saral-font-size-xl); color: var(--saral-gray-600); max-width: 600px; margin: 0 auto; } .saral-features-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: var(--saral-space-8); } .saral-feature-card { background: white; border-radius: var(--saral-radius-xl); padding: var(--saral-space-8); box-shadow: var(--saral-shadow-md); transition: all var(--saral-transition-normal); text-align: center; height: 100%; border: 2px solid var(--saral-gray-200); } .saral-feature-card:hover { transform: translateY(-4px); box-shadow: var(--saral-shadow-xl); border-color: var(--feature-color, var(--saral-primary)); } .saral-feature-icon { width: 80px; height: 80px; background: linear-gradient(135deg, var(--feature-color, var(--saral-primary)), var(--feature-color, var(--saral-secondary))); color: white; border-radius: var(--saral-radius-2xl); display: flex; align-items: center; justify-content: center; font-size: var(--saral-font-size-3xl); margin: 0 auto var(--saral-space-6); transition: all var(--saral-transition-fast); } .saral-feature-card:hover .saral-feature-icon { transform: scale(1.1) rotate(5deg); } .saral-feature-title { font-size: var(--saral-font-size-xl); font-weight: 700; color: var(--saral-gray-900); margin-bottom: var(--saral-space-4); } .saral-feature-description { font-size: var(--saral-font-size-base); color: var(--saral-gray-600); line-height: var(--saral-line-height-normal); } /* ============================================= TESTIMONIALS ============================================= */ .saral-testimonials { padding: var(--saral-space-16) 0; background: linear-gradient(135deg, var(--saral-gray-50) 0%, var(--saral-gray-100) 100%); } .saral-testimonials-container { max-width: var(--saral-container-xl); margin: 0 auto; } .saral-testimonials-header { text-align: center; margin-bottom: var(--saral-space-12); } .saral-testimonials-title { font-size: var(--saral-font-size-4xl); font-weight: 800; color: var(--saral-gray-900); margin-bottom: var(--saral-space-4); } .saral-testimonials-subtitle { font-size: var(--saral-font-size-xl); color: var(--saral-gray-600); max-width: 600px; margin: 0 auto; } .saral-testimonials-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); gap: var(--saral-space-8); } .saral-testimonial-card { background: white; border-radius: var(--saral-radius-xl); padding: var(--saral-space-8); box-shadow: var(--saral-shadow-lg); transition: all var(--saral-transition-normal); position: relative; backdrop-filter: blur(10px); border: 1px solid var(--saral-gray-200); } .saral-testimonial-card::before { content: ''; position: absolute; top: -2px; left: -2px; right: -2px; bottom: -2px; background: linear-gradient(45deg, var(--saral-primary), var(--saral-secondary)); border-radius: var(--saral-radius-xl); z-index: -1; opacity: 0; transition: opacity var(--saral-transition-fast); } .saral-testimonial-card:hover::before { opacity: 0.1; } .saral-testimonial-card:hover { transform: translateY(-4px); box-shadow: var(--saral-shadow-2xl); } .saral-testimonial-rating { margin-bottom: var(--saral-space-4); text-align: center; } .saral-testimonial-text { font-size: var(--saral-font-size-base); color: var(--saral-gray-700); line-height: var(--saral-line-height-normal); font-style: italic; margin-bottom: var(--saral-space-6); position: relative; padding: 0 var(--saral-space-4); } .saral-testimonial-text::before, .saral-testimonial-text::after { content: '"'; font-size: var(--saral-font-size-4xl); color: var(--saral-gray-200); position: absolute; font-family: var(--saral-font-mono); } .saral-testimonial-text::before { top: -10px; left: -10px; } .saral-testimonial-text::after { bottom: -20px; right: -10px; } .saral-testimonial-author { display: flex; align-items: center; gap: var(--saral-space-4); } .saral-testimonial-avatar { width: 50px; height: 50px; border-radius: var(--saral-radius-full); background: var(--saral-primary); color: white; display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: var(--saral-font-size-lg); flex-shrink: 0; } .saral-testimonial-info { flex: 1; } .saral-testimonial-name { font-size: var(--saral-font-size-lg); font-weight: 600; color: var(--saral-gray-900); margin-bottom: var(--saral-space-1); } .saral-testimonial-role { font-size: var(--saral-font-size-sm); color: var(--saral-gray-600); } /* ============================================= FOOTER ============================================= */ .saral-footer { background: var(--saral-gray-900); color: var(--saral-gray-300); padding: var(--saral-space-16) 0 var(--saral-space-8); } .saral-footer-container { max-width: var(--saral-container-xl); margin: 0 auto; } .saral-footer-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: var(--saral-space-8); margin-bottom: var(--saral-space-12); } .saral-footer-section h3 { font-size: var(--saral-font-size-lg); font-weight: 600; color: white; margin-bottom: var(--saral-space-4); } .saral-footer-links { list-style: none; } .saral-footer-links li { margin-bottom: var(--saral-space-2); } .saral-footer-links a { color: var(--saral-gray-400); text-decoration: none; font-size: var(--saral-font-size-sm); transition: color var(--saral-transition-fast); } .saral-footer-links a:hover { color: white; } .saral-footer-social { display: flex; gap: var(--saral-space-4); margin-top: var(--saral-space-4); } .saral-footer-social a { width: 40px; height: 40px; background: rgba(255, 255, 255, 0.1); border-radius: var(--saral-radius-full); display: flex; align-items: center; justify-content: center; color: var(--saral-gray-400); text-decoration: none; transition: all var(--saral-transition-fast); } .saral-footer-social a:hover { background: var(--saral-primary); color: white; transform: translateY(-2px); } .saral-footer-bottom { border-top: 1px solid var(--saral-gray-800); padding-top: var(--saral-space-8); display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: var(--saral-space-4); } .saral-footer-copyright { color: var(--saral-gray-500); font-size: var(--saral-font-size-sm); } .saral-footer-made-with { color: var(--saral-gray-400); font-size: var(--saral-font-size-sm); } /* ============================================= MOBILE NAVIGATION ============================================= */ .saral-mobile-menu-toggle { display: none; background: none; border: none; color: var(--saral-gray-700); font-size: var(--saral-font-size-xl); cursor: pointer; padding: var(--saral-space-2); } .saral-mobile-menu { position: fixed; top: 0; left: -100%; width: 280px; height: 100vh; background: white; box-shadow: var(--saral-shadow-2xl); z-index: var(--saral-z-modal); transition: left var(--saral-transition-normal); overflow-y: auto; } .saral-mobile-menu.active { left: 0; } .saral-mobile-menu-header { padding: var(--saral-space-4); border-bottom: 1px solid var(--saral-gray-200); display: flex; justify-content: space-between; align-items: center; } .saral-mobile-menu-close { background: none; border: none; font-size: var(--saral-font-size-xl); color: var(--saral-gray-400); cursor: pointer; padding: var(--saral-space-2); } .saral-mobile-menu-nav { padding: var(--saral-space-4); } .saral-mobile-menu-link { display: block; padding: var(--saral-space-3) var(--saral-space-4); color: var(--saral-gray-700); text-decoration: none; border-radius: var(--saral-radius-md); transition: all var(--saral-transition-fast); margin-bottom: var(--saral-space-2); } .saral-mobile-menu-link:hover { background-color: var(--saral-gray-100); color: var(--saral-primary); } /* ============================================= RESPONSIVE ADJUSTMENTS ============================================= */ @media (max-width: 768px) { .saral-header-container { padding: var(--saral-space-3) var(--saral-space-2); } .saral-nav { display: none; } .saral-mobile-menu-toggle { display: block; } .saral-hero-title { font-size: var(--saral-font-size-3xl); } .saral-hero-subtitle { font-size: var(--saral-font-size-lg); } .saral-hero-stats { grid-template-columns: repeat(2, 1fr); gap: var(--saral-space-4); } .saral-subject-grid { grid-template-columns: 1fr; gap: var(--saral-space-4); } .saral-class-grid { grid-template-columns: repeat(2, 1fr); gap: var(--saral-space-4); } .saral-features-grid { grid-template-columns: 1fr; gap: var(--saral-space-6); } .saral-testimonials-grid { grid-template-columns: 1fr; gap: var(--saral-space-6); } .saral-footer-grid { grid-template-columns: 1fr; gap: var(--saral-space-6); } .saral-footer-bottom { flex-direction: column; text-align: center; gap: var(--saral-space-2); } } @media (max-width: 640px) { .saral-hero-stats { grid-template-columns: 1fr; gap: var(--saral-space-3); } .saral-class-grid { grid-template-columns: 1fr; } .saral-subject-card, .saral-feature-card, .saral-testimonial-card { padding: var(--saral-space-4); } .saral-subject-icon, .saral-feature-icon { width: 50px; height: 50px; font-size: var(--saral-font-size-xl); margin-bottom: var(--saral-space-3); } } /* ============================================= ANIMATION ENHANCEMENTS ============================================= */ .saral-animate-on-scroll { opacity: 0; transform: translateY(30px); transition: all var(--saral-transition-slow); } .saral-animate-on-scroll.visible { opacity: 1; transform: translateY(0); } .saral-stagger-animation > * { opacity: 0; transform: translateY(20px); animation: saral-fadeIn 0.6s ease-out forwards; } .saral-stagger-animation > *:nth-child(1) { animation-delay: 0.1s; } .saral-stagger-animation > *:nth-child(2) { animation-delay: 0.2s; } .saral-stagger-animation > *:nth-child(3) { animation-delay: 0.3s; } .saral-stagger-animation > *:nth-child(4) { animation-delay: 0.4s; } .saral-stagger-animation > *:nth-child(5) { animation-delay: 0.5s; } .saral-stagger-animation > *:nth-child(6) { animation-delay: 0.6s; }