UNPKG

create-bablojs

Version:

CLI tool to quickly scaffold a new BABLOJS project. BABLOJS is a lightweight, fast, and scalable Single Page Application framework built with vanilla JavaScript, providing React-like features including Virtual DOM, hooks, routing, and component-based arch

2,305 lines (1,948 loc) 86.5 kB
/* ============================================ MODERN DESIGN SYSTEM - CONSISTENT UI/UX ============================================ */ /* ============================================ RESET & BASE ============================================ */ * { margin: 0; padding: 0; box-sizing: border-box; } /* ============================================ ROOT VARIABLES - DESIGN TOKENS ============================================ */ :root { /* ============================================ TYPOGRAPHY SYSTEM ============================================ */ /* Font Families */ --font-primary: 'Inter', -apple-system, 'Segoe UI', Roboto, sans-serif; --font-mono: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace; /* Font Sizes - Consistent Scale (1.250 - Major Third) */ --text-xs: 0.64rem; /* 10.24px */ --text-sm: 0.8rem; /* 12.8px */ --text-base: 1rem; /* 16px - base */ --text-lg: 1.25rem; /* 20px */ --text-xl: 1.563rem; /* 25px */ --text-2xl: 1.953rem; /* 31.25px */ --text-3xl: 2.441rem; /* 39px */ --text-4xl: 3.052rem; /* 48.83px */ --text-5xl: 3.815rem; /* 61px */ --text-6xl: 4.768rem; /* 76.29px */ --text-7xl: 5.96rem; /* 95.36px */ /* Font Weights */ --font-light: 300; --font-normal: 400; --font-medium: 500; --font-semibold: 600; --font-bold: 700; --font-extrabold: 800; /* 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: 0em; --tracking-wide: 0.025em; --tracking-wider: 0.05em; --tracking-widest: 0.1em; /* ============================================ SPACING SYSTEM - 8px Base ============================================ */ --space-0: 0; --space-1: 0.25rem; /* 4px */ --space-2: 0.5rem; /* 8px */ --space-3: 0.75rem; /* 12px */ --space-4: 1rem; /* 16px */ --space-5: 1.25rem; /* 20px */ --space-6: 1.5rem; /* 24px */ --space-8: 2rem; /* 32px */ --space-10: 2.5rem; /* 40px */ --space-12: 3rem; /* 48px */ --space-16: 4rem; /* 64px */ --space-20: 5rem; /* 80px */ --space-24: 6rem; /* 96px */ --space-32: 8rem; /* 128px */ /* ============================================ COLOR SYSTEM ============================================ */ /* Primary Colors - Charcoal Gray (No Black) */ --color-white: #ffffff; --color-primary-50: #f8fafc; --color-primary-100: #f1f5f9; --color-primary-200: #e2e8f0; --color-primary-300: #cbd5e1; --color-primary-400: #94a3b8; --color-primary-500: #64748b; --color-primary-600: #475569; --color-primary-700: #334155; --color-primary-800: #1e293b; --color-primary-900: #0f172a; /* Secondary Colors - Purple to Pink Gradient */ --color-secondary-50: #faf5ff; --color-secondary-100: #f3e8ff; --color-secondary-200: #e9d5ff; --color-secondary-300: #d8b4fe; --color-secondary-400: #c084fc; --color-secondary-500: #a855f7; --color-secondary-600: #9333ea; --color-secondary-700: #7c3aed; --color-secondary-800: #6b21a8; --color-secondary-900: #581c87; /* Accent Colors - Pink */ --color-accent-50: #fdf2f8; --color-accent-100: #fce7f3; --color-accent-200: #fbcfe8; --color-accent-300: #f9a8d4; --color-accent-400: #f472b6; --color-accent-500: #ec4899; --color-accent-600: #db2777; --color-accent-700: #be185d; --color-accent-800: #9d174d; --color-accent-900: #831843; /* Neutral Colors */ --color-neutral-50: #f8fafc; --color-neutral-100: #f1f5f9; --color-neutral-200: #e2e8f0; --color-neutral-300: #cbd5e1; --color-neutral-400: #94a3b8; --color-neutral-500: #64748b; --color-neutral-600: #475569; --color-neutral-700: #334155; --color-neutral-800: #1e293b; --color-neutral-900: #0f172a; /* Semantic Colors */ --color-success: #10b981; --color-warning: #f59e0b; --color-error: #ef4444; --color-info: #06b6d4; /* Surface Colors */ --color-background: var(--color-neutral-50); --color-surface: #ffffff; --color-surface-elevated: #ffffff; /* Text Colors */ --color-text-primary: #1a202c; --color-text-secondary: var(--color-primary-600); --color-text-tertiary: var(--color-primary-400); --color-text-inverse: #ffffff; /* Border Colors */ --color-border-primary: var(--color-neutral-200); --color-border-secondary: var(--color-neutral-100); /* ============================================ BORDER RADIUS ============================================ */ --radius-none: 0; --radius-sm: 0.25rem; /* 4px */ --radius-base: 0.5rem; /* 8px */ --radius-md: 0.75rem; /* 12px */ --radius-lg: 1rem; /* 16px */ --radius-xl: 1.5rem; /* 24px */ --radius-2xl: 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 -1px rgba(0, 0, 0, 0.1); --shadow-base: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); --shadow-md: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1); --shadow-lg: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1); --shadow-xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25); /* ============================================ TRANSITIONS & ANIMATIONS ============================================ */ --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1); --transition-base: 300ms cubic-bezier(0.4, 0, 0.2, 1); --transition-slow: 500ms cubic-bezier(0.4, 0, 0.2, 1); /* ============================================ LAYOUT ============================================ */ --container-max-width: 1280px; --container-padding: var(--space-4); --header-height: 4rem; /* ============================================ Z-INDEX SCALE ============================================ */ --z-dropdown: 1000; --z-sticky: 1020; --z-fixed: 1030; --z-modal-backdrop: 1040; --z-modal: 1050; --z-popover: 1060; --z-tooltip: 1070; } /* ============================================ BASE STYLES ============================================ */ html { font-size: 16px; scroll-behavior: smooth; } body { width: 100%; min-height: 100vh; overflow-x: hidden; overflow-y: scroll; font-family: var(--font-primary); font-size: var(--text-base); font-weight: var(--font-normal); line-height: var(--leading-normal); color: var(--color-text-primary); background-color: var(--color-background); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* ============================================ TYPOGRAPHY ============================================ */ h1, h2, h3, h4, h5, h6 { font-weight: var(--font-bold); line-height: var(--leading-tight); margin-bottom: var(--space-4); color: var(--color-text-primary); } h1 { font-size: var(--text-4xl); } h2 { font-size: var(--text-3xl); } h3 { font-size: var(--text-2xl); } h4 { font-size: var(--text-xl); } h5 { font-size: var(--text-lg); } h6 { font-size: var(--text-base); } /* Gradient Text Classes */ .heading-gradient-purple-pink { background: linear-gradient(90deg, var(--color-secondary-600) 0%, var(--color-secondary-700) 50%, var(--color-accent-500) 100%); background-clip: text; -webkit-background-clip: text; -webkit-text-fill-color: transparent; } .heading-gradient-primary { background: linear-gradient(135deg, var(--color-primary-600) 0%, var(--color-primary-800) 100%); background-clip: text; -webkit-background-clip: text; -webkit-text-fill-color: transparent; } .heading-gradient-secondary { background: linear-gradient(135deg, var(--color-secondary-500) 0%, var(--color-secondary-700) 100%); background-clip: text; -webkit-background-clip: text; -webkit-text-fill-color: transparent; } .heading-gradient-accent { background: linear-gradient(135deg, var(--color-accent-500) 0%, var(--color-accent-700) 100%); background-clip: text; -webkit-background-clip: text; -webkit-text-fill-color: transparent; } @keyframes gradientText { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } } p { margin-bottom: var(--space-4); color: var(--color-text-secondary); line-height: var(--leading-relaxed); } a { color: var(--color-primary-600); text-decoration: none; transition: color var(--transition-fast); } a:hover { color: var(--color-primary-700); } a:focus-visible { outline: 2px solid var(--color-primary-500); outline-offset: 2px; border-radius: var(--radius-sm); } /* ============================================ LOADING STATE ============================================ */ .bablo-loader { min-height: 100vh; display: flex; flex-direction: column; justify-content: center; align-items: center; background: radial-gradient(ellipse at center top, #ffffff 0%, #faf5ff 40%, #fce7f3 100%); font-family: var(--font-primary); position: relative; animation: bablo-loader-fade-in 0.6s ease-out; } .bablo-loader-hamburger { position: absolute; top: 1.5rem; right: 1.5rem; width: 24px; height: 18px; display: flex; flex-direction: column; justify-content: space-between; opacity: 0.3; transition: opacity var(--transition-fast); } .bablo-loader-hamburger:hover { opacity: 0.5; } .bablo-loader-hamburger-line { width: 100%; height: 2px; background-color: var(--color-primary-400); border-radius: 1px; transition: background-color var(--transition-fast); } .bablo-loader-logo-container { display: flex; align-items: center; gap: var(--space-4); margin-top: calc(var(--space-8) * -1); animation: bablo-loader-slide-up 0.8s ease-out; } .bablo-loader-rocket { width: 48px; height: 48px; display: flex; align-items: center; justify-content: center; animation: bablo-loader-rocket-float 2s ease-in-out infinite; } .bablo-loader-rocket svg { width: 100%; height: 100%; } .bablo-loader-text { font-size: var(--text-5xl); font-weight: var(--font-extrabold); letter-spacing: var(--tracking-tighter); display: flex; align-items: baseline; } .bablo-loader-text-bablo { background: linear-gradient(135deg, var(--color-secondary-600) 0%, var(--color-secondary-700) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; animation: bablo-loader-text-fade-in 0.8s ease-out 0.2s both; } .bablo-loader-text-js { background: linear-gradient(135deg, var(--color-accent-500) 0%, var(--color-accent-600) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; animation: bablo-loader-text-fade-in 0.8s ease-out 0.4s both; } @keyframes bablo-loader-fade-in { from { opacity: 0; } to { opacity: 1; } } @keyframes bablo-loader-slide-up { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes bablo-loader-rocket-float { 0%, 100% { transform: translateY(0) scale(1); } 50% { transform: translateY(-8px) scale(1.05); } } @keyframes bablo-loader-text-fade-in { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } @media (max-width: 768px) { .bablo-loader-text { font-size: var(--text-4xl); } .bablo-loader-rocket { width: 40px; height: 40px; } .bablo-loader-logo-container { gap: var(--space-3); } } /* ============================================ BUTTON SYSTEM ============================================ */ .btn { display: inline-flex; align-items: center; justify-content: center; gap: var(--space-2); padding: var(--space-3) var(--space-6); font-size: var(--text-base); font-weight: var(--font-medium); line-height: var(--leading-none); border-radius: var(--radius-base); border: none; cursor: pointer; transition: all var(--transition-fast); white-space: nowrap; font-family: var(--font-primary); } /* Button Sizes */ /* Button Sizes - Consistent Scaling */ .btn-xs { padding: var(--space-1) var(--space-3); font-size: var(--text-xs); font-weight: var(--font-medium); } .btn-sm { padding: var(--space-2) var(--space-4); font-size: var(--text-sm); font-weight: var(--font-medium); } .btn-md { padding: var(--space-3) var(--space-6); font-size: var(--text-base); font-weight: var(--font-semibold); } .btn-lg { padding: var(--space-4) var(--space-8); font-size: var(--text-lg); font-weight: var(--font-semibold); } .btn-xl { padding: var(--space-5) var(--space-10); font-size: var(--text-xl); font-weight: var(--font-bold); } /* Button Variants */ .btn-primary { background: linear-gradient(135deg, var(--color-secondary-600) 0%, var(--color-accent-500) 100%); color: var(--color-text-inverse); border: none; position: relative; overflow: hidden; } .btn-primary::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent); transition: left 0.5s; } .btn-primary:hover { background: linear-gradient(135deg, var(--color-secondary-700) 0%, var(--color-accent-600) 100%); transform: translateY(-1px); } .btn-primary:hover::before { left: 100%; } .btn-primary:active { transform: translateY(0); } .btn-secondary { background-color: var(--color-neutral-100); color: var(--color-text-primary); border: 1px solid var(--color-border-primary); } .btn-secondary:hover { background-color: var(--color-neutral-200); } .btn-outline { background-color: transparent; color: var(--color-secondary-600); border: 2px solid var(--color-secondary-600); position: relative; overflow: hidden; } .btn-outline:hover { background-color: var(--color-secondary-600); color: var(--color-text-inverse); border-color: var(--color-secondary-600); } .btn-ghost { background-color: transparent; color: var(--color-text-secondary); } .btn-ghost:hover { background-color: var(--color-neutral-100); color: var(--color-text-primary); } .btn-gradient { background: linear-gradient(135deg, var(--color-secondary-600) 0%, var(--color-accent-500) 100%); color: var(--color-text-inverse); border: none; position: relative; overflow: hidden; } .btn-gradient::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent); transition: left 0.6s; } .btn-gradient:hover { transform: translateY(-1px); } .btn-gradient:hover::before { left: 100%; } .btn-gradient:active { transform: translateY(0); } @keyframes gradientShift { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } } .btn:disabled { opacity: 0.5; cursor: not-allowed; pointer-events: none; } .btn:focus-visible { outline: 2px solid var(--color-primary-500); outline-offset: 2px; } /* ============================================ FORM SYSTEM ============================================ */ .form-group { margin-bottom: var(--space-6); } .form-label { display: block; margin-bottom: var(--space-2); font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-text-primary); } .form-input, .form-textarea, .form-select { width: 100%; padding: var(--space-3) var(--space-4); font-size: var(--text-base); font-family: var(--font-primary); line-height: var(--leading-normal); color: var(--color-text-primary); background-color: var(--color-surface); border: 1px solid var(--color-border-primary); border-radius: var(--radius-base); transition: all var(--transition-fast); } .form-input:focus, .form-textarea:focus, .form-select:focus { outline: none; border-color: var(--color-primary-500); } .form-textarea { resize: vertical; min-height: 120px; } /* ============================================ CARD SYSTEM ============================================ */ .card { background-color: var(--color-white); border-radius: var(--radius-lg); border: 1px solid var(--color-border-primary); padding: var(--space-6); transition: all var(--transition-base); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05); } .card:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); } /* Card variants */ .card-sm { padding: var(--space-4); } .card-md { padding: var(--space-6); } .card-lg { padding: var(--space-8); } .card-header { margin-bottom: var(--space-4); } .card-title { font-size: var(--text-xl); font-weight: var(--font-semibold); margin-bottom: var(--space-2); } .card-body { margin-bottom: var(--space-4); } .card-footer { padding-top: var(--space-4); border-top: 1px solid var(--color-border-secondary); } /* Section Header Badge - Consistent styling */ .section-badge { display: inline-block; padding: var(--space-2) var(--space-4); margin-bottom: var(--space-4); font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-primary-700); background-color: var(--color-primary-100); border-radius: var(--radius-full); text-transform: uppercase; letter-spacing: 0.05em; } /* Consistent section header spacing */ /* Page Hero Section */ .page-hero { background: linear-gradient(135deg, rgba(139, 92, 246, 0.05) 0%, rgba(236, 72, 153, 0.05) 100%); padding: var(--space-16) 0 var(--space-12) 0; border-bottom: 1px solid var(--color-border-primary); } .page-hero .section-header { text-align: center; max-width: 900px; margin: 0 auto; margin-bottom: 0; } .page-hero .section-header h1 { margin-bottom: var(--space-4); } .page-hero .section-header p { color: var(--color-text-secondary); margin-top: var(--space-4); } .section-header { text-align: center; margin-bottom: var(--space-12); } @media (min-width: 768px) { .section-header { margin-bottom: var(--space-16); } .page-hero { padding: var(--space-20) 0 var(--space-16) 0; } } /* ============================================ LAYOUT COMPONENTS ============================================ */ .container { width: 100%; max-width: var(--container-max-width); margin: 0 auto; padding: 0 var(--container-padding); } .section { padding: var(--space-12); } .section:first-child { padding: 0px; } .section:nth-child(even) { background-color: var(--color-white); } .section-sm { padding: var(--space-16) 0; } .section-lg { padding: var(--space-24) 0; } .card-sm { padding: var(--space-4); } .card-md { padding: var(--space-6); } .card-lg { padding: var(--space-8); } .grid { display: grid; gap: var(--space-6); } .grid-2 { grid-template-columns: repeat(2, 1fr); } .grid-3 { grid-template-columns: repeat(3, 1fr); } .grid-4 { grid-template-columns: repeat(4, 1fr); } /* ============================================ HEADER ============================================ */ .header { position: sticky; top: 0; z-index: var(--z-sticky); background-color: rgba(255, 255, 255, 0.95); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); border-bottom: 1px solid var(--color-border-primary); height: var(--header-height); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05); transition: all var(--transition-base); } .header-container { display: flex; align-items: center; justify-content: space-between; height: 100%; max-width: var(--container-max-width); margin: 0 auto; padding: 0 var(--container-padding); position: relative; } /* Enhanced Logo Styling */ .logo { display: flex; align-items: center; gap: var(--space-2); text-decoration: none; transition: transform var(--transition-fast); padding: var(--space-1) 0; } .logo:hover { transform: translateY(-1px); } .logo-icon { font-size: var(--text-2xl); display: inline-block; animation: float 3s ease-in-out infinite; filter: drop-shadow(0 2px 4px rgba(139, 92, 246, 0.3)); } @keyframes float { 0%, 100% { transform: translateY(0px); } 50% { transform: translateY(-5px); } } .logo-text { font-size: var(--text-xl); font-weight: 800; background: linear-gradient(135deg, var(--color-secondary-600) 0%, var(--color-accent-500) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; letter-spacing: -0.02em; transition: all var(--transition-fast); font-family: var(--font-primary); display: inline-block; line-height: 1.2; } .logo:hover .logo-text { background: linear-gradient(135deg, var(--color-secondary-700) 0%, var(--color-accent-600) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .nav { display: flex; align-items: center; gap: var(--space-1); } .nav-link { padding: var(--space-2) var(--space-4); font-size: var(--text-base); font-weight: var(--font-medium); color: var(--color-text-secondary); border-radius: var(--radius-base); transition: all var(--transition-fast); position: relative; text-decoration: none; white-space: nowrap; border: 1px solid transparent; } .nav-link::before { content: ''; position: absolute; bottom: 0; left: 50%; transform: translateX(-50%); width: 0; height: 2px; background: linear-gradient(90deg, var(--color-secondary-600), var(--color-accent-500)); transition: width var(--transition-fast), left var(--transition-fast); border-radius: var(--radius-full); } .nav-link:hover { background: linear-gradient(135deg, rgba(139, 92, 246, 0.08) 0%, rgba(236, 72, 153, 0.08) 100%); color: var(--color-secondary-700); border-color: var(--color-secondary-300); font-weight: var(--font-semibold); } .nav-link:hover::before { width: 80%; background: linear-gradient(90deg, var(--color-secondary-600), var(--color-accent-500)); } .nav-link.active { background: linear-gradient(135deg, rgba(139, 92, 246, 0.1) 0%, rgba(236, 72, 153, 0.1) 100%); color: var(--color-secondary-700); border-color: var(--color-secondary-500); font-weight: var(--font-semibold); } .nav-link.active::before { width: 80%; background: linear-gradient(90deg, var(--color-secondary-600), var(--color-accent-500)); } .nav-link-demo { background: linear-gradient(135deg, var(--color-secondary-600) 0%, var(--color-accent-500) 100%); color: var(--color-text-inverse) !important; font-weight: var(--font-semibold); padding: var(--space-2) var(--space-5); box-shadow: 0 2px 8px rgba(139, 92, 246, 0.3); position: relative; overflow: hidden; border: none; } .nav-link-demo::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent 0%, rgba(255, 255, 255, 0.2) 50%, transparent 100%); transition: left 0.6s; pointer-events: none; } .nav-link-demo:hover { transform: translateY(-1px); box-shadow: 0 4px 16px rgba(139, 92, 246, 0.5); background: linear-gradient(135deg, var(--color-secondary-600) 0%, var(--color-accent-500) 100%) !important; color: var(--color-text-inverse) !important; } .nav-link-demo:hover::before { left: 100%; } .nav-link-demo.active { background: linear-gradient(135deg, var(--color-secondary-700) 0%, var(--color-accent-600) 100%); box-shadow: 0 4px 16px rgba(139, 92, 246, 0.5); } /* ============================================ FOOTER ============================================ */ .footer { background-color: var(--color-neutral-900); color: var(--color-text-inverse); padding: var(--space-16) 0 var(--space-8) 0; } .footer-content { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: var(--space-8); margin-bottom: var(--space-8); } .footer-section-title { font-size: var(--text-lg); font-weight: var(--font-semibold); margin-bottom: var(--space-4); } .footer-link { display: block; color: var(--color-neutral-400); margin-bottom: var(--space-2); transition: color var(--transition-fast); } .footer-link:hover { color: var(--color-text-inverse); } .footer-bottom { padding-top: var(--space-8); border-top: 1px solid var(--color-neutral-800); text-align: center; color: var(--color-neutral-400); font-size: var(--text-sm); } /* ============================================ UTILITY CLASSES ============================================ */ /* Spacing */ .m-0 { margin: var(--space-0); } .m-2 { margin: var(--space-2); } .m-4 { margin: var(--space-4); } .m-6 { margin: var(--space-6); } .m-8 { margin: var(--space-8); } .mt-0 { margin-top: var(--space-0); } .mt-2 { margin-top: var(--space-2); } .mt-4 { margin-top: var(--space-4); } .mt-6 { margin-top: var(--space-6); } .mt-8 { margin-top: var(--space-8); } .mb-0 { margin-bottom: var(--space-0); } .mb-2 { margin-bottom: var(--space-2); } .mb-4 { margin-bottom: var(--space-4); } .mb-6 { margin-bottom: var(--space-6); } .mb-8 { margin-bottom: var(--space-8); } .p-0 { padding: var(--space-0); } .p-2 { padding: var(--space-2); } .p-4 { padding: var(--space-4); } .p-6 { padding: var(--space-6); } .p-8 { padding: var(--space-8); } /* Text Alignment */ .text-left { text-align: left; } .text-center { text-align: center; } .text-right { text-align: right; } /* Text Colors */ .text-primary { color: var(--color-primary-600); } .text-secondary { color: var(--color-text-secondary); } .text-primary-600 { color: var(--color-primary-600); } .text-neutral-100 { color: var(--color-neutral-100); } .text-neutral-900 { color: var(--color-neutral-900); } /* Background Colors */ .bg-neutral-900 { background-color: var(--color-neutral-900); } .bg-neutral-100 { background-color: var(--color-neutral-100); } /* Border Colors */ .border-border-primary { border-color: var(--color-border-primary); } .border-primary-600 { border-color: var(--color-primary-600); } .border-transparent { border-color: transparent; } /* Border Width */ .border-b { border-bottom-width: 1px; } .border-b-2 { border-bottom-width: 2px; } /* Max Width */ .max-w-3xl { max-width: 48rem; } .max-w-4xl { max-width: 56rem; } /* Margin Bottom */ .mb-4 { margin-bottom: var(--space-4); } .mb-6 { margin-bottom: var(--space-6); } .mb-8 { margin-bottom: var(--space-8); } .mb-12 { margin-bottom: var(--space-12); } .mb-16 { margin-bottom: var(--space-16); } /* Margin Top */ .mt-16 { margin-top: var(--space-16); } /* Padding */ .p-4 { padding: var(--space-4); } .p-6 { padding: var(--space-6); } .p-8 { padding: var(--space-8); } /* Padding X */ .px-6 { padding-left: var(--space-6); padding-right: var(--space-6); } .px-8 { padding-left: var(--space-8); padding-right: var(--space-8); } /* Padding Y */ .py-3 { padding-top: var(--space-3); padding-bottom: var(--space-3); } /* Font Weight */ .font-semibold { font-weight: var(--font-semibold); } /* Transition */ .transition-all { transition: all var(--transition-fast); } /* Rounded */ .rounded-none { border-radius: 0; } .rounded-lg { border-radius: var(--radius-lg); } /* Text Size */ .text-sm { font-size: var(--text-sm); } .text-xl { font-size: var(--text-xl); } .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); } /* Display */ .block { display: block; } /* Height Utilities */ .min-h-screen { min-height: 100vh; } /* Grid Utilities */ .grid-2 { grid-template-columns: repeat(2, 1fr); } /* Items Center */ .items-center { align-items: center; } /* ============================================ GRADIENT UTILITIES ============================================ */ .text-gradient-primary { background: linear-gradient(135deg, var(--color-primary-600) 0%, var(--color-primary-800) 100%); background-clip: text; -webkit-background-clip: text; -webkit-text-fill-color: transparent; } .text-gradient-secondary { background: linear-gradient(135deg, var(--color-secondary-500) 0%, var(--color-secondary-700) 100%); background-clip: text; -webkit-background-clip: text; -webkit-text-fill-color: transparent; } .text-gradient-purple-pink { background: linear-gradient(135deg, var(--color-secondary-600) 0%, var(--color-accent-500) 100%); background-clip: text; -webkit-background-clip: text; -webkit-text-fill-color: transparent; } .bg-gradient-primary { background: linear-gradient(135deg, var(--color-primary-600) 0%, var(--color-primary-800) 100%); } .bg-gradient-secondary { background: linear-gradient(135deg, var(--color-secondary-500) 0%, var(--color-secondary-700) 100%); } .bg-gradient-purple-pink { background: linear-gradient(135deg, var(--color-secondary-600) 0%, var(--color-accent-500) 100%); } /* Flex Utilities */ .flex { display: flex; } .flex-col { flex-direction: column; } .items-center { align-items: center; } .justify-center { justify-content: center; } .justify-between { justify-content: space-between; } .gap-2 { gap: var(--space-2); } .gap-4 { gap: var(--space-4); } .gap-6 { gap: var(--space-6); } /* ============================================ RESPONSIVE DESIGN ============================================ */ @media (max-width: 768px) { :root { --text-4xl: 2.441rem; --text-3xl: 1.953rem; --container-padding: var(--space-4); } .grid-2, .grid-3, .grid-4 { grid-template-columns: 1fr; } .btn-lg { padding: var(--space-3) var(--space-6); font-size: var(--text-base); } .btn-xl { padding: var(--space-4) var(--space-8); font-size: var(--text-lg); } .nav { flex-direction: column; width: 100%; } } @media (max-width: 480px) { :root { --text-4xl: 1.953rem; --text-3xl: 1.563rem; } } /* ============================================ MODAL SYSTEM ============================================ */ .modal-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.7); backdrop-filter: blur(4px); z-index: var(--z-modal); display: flex; align-items: center; justify-content: center; padding: var(--space-4); animation: modalFadeIn 0.3s ease-out; } .modal-container { background-color: var(--color-surface); border-radius: var(--radius-xl); max-width: 90vw; max-height: 90vh; width: 100%; max-width: 900px; display: flex; flex-direction: column; animation: modalSlideIn 0.3s ease-out; overflow: hidden; box-shadow: var(--shadow-xl); margin: auto; } .modal-header { display: flex; justify-content: space-between; align-items: center; padding: var(--space-6); border-bottom: 1px solid var(--color-border-primary); background-color: var(--color-surface-elevated); } .modal-title-section { flex: 1; } .modal-title { font-size: var(--text-xl); font-weight: var(--font-semibold); color: var(--color-text-primary); margin: 0 0 var(--space-1) 0; } .modal-subtitle { font-size: var(--text-sm); color: var(--color-text-secondary); margin: 0; text-transform: uppercase; letter-spacing: var(--tracking-wide); } .modal-actions { display: flex; gap: var(--space-2); align-items: center; } .close-btn { width: 32px; height: 32px; border-radius: var(--radius-full); display: flex; align-items: center; justify-content: center; font-size: var(--text-lg); font-weight: var(--font-bold); transition: all var(--transition-fast); } .close-btn:hover { background-color: var(--color-error); color: var(--color-text-inverse); transform: scale(1.1); } .modal-body { padding: var(--space-6); overflow: auto; flex: 1; display: flex; flex-direction: column; min-height: 0; } .modal-body .code-block { background-color: var(--color-neutral-900); color: var(--color-neutral-100); padding: var(--space-6); border-radius: var(--radius-lg); overflow-x: auto; overflow-y: auto; font-family: var(--font-mono); font-size: var(--text-sm); line-height: var(--leading-relaxed); margin: 0; border: 1px solid var(--color-neutral-800); max-height: calc(90vh - 200px); flex: 1; min-height: 0; } .modal-body .code-block code { color: inherit; background: none; padding: 0; border-radius: 0; font-size: inherit; font-family: inherit; } .copy-icon, .copied-icon { margin-right: var(--space-1); } .modal-footer { height: 40px; width: 100%; background-color: var(--color-white); } .btn-success { background: linear-gradient(135deg, var(--color-success) 0%, #059669 100%); color: var(--color-text-inverse); border: none; } .btn-success:hover { background: linear-gradient(135deg, #059669 0%, #047857 100%); transform: translateY(-1px); } @keyframes modalFadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes modalSlideIn { from { opacity: 0; transform: scale(0.9) translateY(-20px); } to { opacity: 1; transform: scale(1) translateY(0); } } /* Modal Responsive */ @media (max-width: 768px) { .modal-overlay { padding: var(--space-2); } .modal-container { max-width: 95vw; max-height: 95vh; } .modal-header { padding: var(--space-4); flex-direction: column; gap: var(--space-4); align-items: stretch; } .modal-title-section { text-align: center; } .modal-actions { justify-content: center; } .modal-body { padding: var(--space-4); } .modal-body .code-block { padding: var(--space-4); font-size: var(--text-xs); } } /* ============================================ MAIN LAYOUT ENHANCEMENTS ============================================ */ /* Layout Container */ .layout-container { min-height: 100vh; display: flex; flex-direction: column; } /* Header Enhancements */ .header.scrolled { backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); background-color: rgba(255, 255, 255, 0.98); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); } .header-container { position: relative; } /* Navigation Enhancements */ .nav { position: relative; } .nav-link.active { background-color: var(--color-primary-50); color: var(--color-primary-600); font-weight: var(--font-semibold); } /* Mobile Menu Styles */ .hamburger { display: none; flex-direction: column; justify-content: space-around; width: 28px; height: 28px; background: transparent; border: none; cursor: pointer; padding: 0; z-index: var(--z-dropdown); position: relative; transition: all var(--transition-fast); } .hamburger:hover { opacity: 0.8; } .hamburger-line { width: 100%; height: 3px; background: linear-gradient(90deg, var(--color-primary-600), var(--color-secondary-600)); border-radius: var(--radius-full); transition: all var(--transition-base); transform-origin: center; } .hamburger.active .hamburger-line:nth-child(1) { transform: rotate(45deg) translate(8px, 8px); } .hamburger.active .hamburger-line:nth-child(2) { opacity: 0; transform: translateX(-10px); } .hamburger.active .hamburger-line:nth-child(3) { transform: rotate(-45deg) translate(8px, -8px); } /* Mobile Menu Overlay */ .mobile-menu-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.5); z-index: calc(var(--z-dropdown) - 1); animation: fadeIn 0.3s ease-out; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } /* Header Actions */ .header-actions { display: flex; gap: var(--space-2); align-items: center; } /* Demo Link Special Styling */ .nav-link.demo-link { background-color: var(--color-primary-600); color: var(--color-text-inverse); border-radius: var(--radius-base); transition: all var(--transition-fast); } .nav-link.demo-link:hover { background-color: var(--color-primary-700); transform: translateY(-1px); } .nav-link.demo-link.active { background-color: var(--color-primary-700); } /* Footer Enhancements */ .footer-section { display: flex; flex-direction: column; text-align: center; max-width: 300px; margin: 0 auto; } @media (min-width: 768px) { .footer-section { text-align: left; margin: 0; } } .footer-section-title { font-size: var(--text-lg); font-weight: var(--font-semibold); margin-bottom: var(--space-4); color: var(--color-text-inverse); } .footer-links { list-style: none; padding: 0; margin: 0; } .footer-item { margin-bottom: var(--space-2); } .footer-link { color: var(--color-neutral-400); transition: color var(--transition-fast); display: inline-flex; align-items: center; } .footer-link:hover { color: var(--color-text-inverse); } /* Social Links */ .social-links { display: flex; gap: var(--space-4); flex-wrap: wrap; } .footer-community { margin-top: var(--space-6); } /* Community Stats Styling */ .footer-community-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--space-4); margin-top: var(--space-4); } .community-stat-item { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: var(--space-4); background-color: rgba(255, 255, 255, 0.05); border-radius: var(--radius-base); border: 1px solid rgba(255, 255, 255, 0.1); transition: all var(--transition-fast); } .community-stat-item:hover { background-color: rgba(255, 255, 255, 0.08); border-color: rgba(255, 255, 255, 0.2); transform: translateY(-2px); } .community-stat-value { font-size: var(--text-2xl); font-weight: var(--font-bold); color: var(--color-text-inverse); margin-bottom: var(--space-1); background: linear-gradient(135deg, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0.8) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; line-height: 1.2; } .community-stat-label { font-size: var(--text-sm); color: var(--color-neutral-400); text-transform: uppercase; letter-spacing: var(--tracking-wide); font-weight: var(--font-medium); } .community-stat-item:hover .community-stat-label { color: var(--color-neutral-300); } .footer-social { margin-top: var(--space-4); } .social-item { list-style: none; } .social-item a { display: inline-flex; align-items: center; gap: var(--space-2); padding: var(--space-2) var(--space-3); border-radius: var(--radius-base); transition: all var(--transition-fast); color: var(--color-neutral-400); text-decoration: none; } .social-item a:hover { color: var(--color-text-inverse); background-color: rgba(255, 255, 255, 0.1); transform: translateY(-2px); } .social-item a i { font-size: 1.25rem; } /* X (Twitter) Icon Special Styling */ .social-item a .x-icon, .social-item a .fa-x-twitter { font-weight: 900; font-size: 1.1rem; line-height: 1; display: inline-block; width: 1.25rem; text-align: center; } .social-item a:hover .x-icon, .social-item a:hover .fa-x-twitter { color: var(--color-text-inverse); } .social-name { font-size: var(--text-sm); } /* Newsletter Form */ .newsletter { margin-top: var(--space-6); } .newsletter-title { font-size: var(--text-base); font-weight: var(--font-semibold); margin-bottom: var(--space-2); color: var(--color-text-inverse); } .newsletter-description { font-size: var(--text-sm); margin-bottom: var(--space-4); color: var(--color-neutral-400); } /* Footer Bottom */ .footer-bottom { margin-top: var(--space-8); padding-top: var(--space-8); border-top: 1px solid var(--color-neutral-800); } .footer-bottom-content { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: var(--space-4); } .copyright { font-size: var(--text-sm); color: var(--color-neutral-400); margin: 0; } .footer-bottom-links { display: flex; gap: var(--space-4); flex-wrap: wrap; } .footer-bottom-link { font-size: var(--text-sm); color: var(--color-neutral-400); transition: color var(--transition-fast); } .footer-bottom-link:hover { color: var(--color-text-inverse); } /* Community Stats */ .community-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--space-4); margin-bottom: var(--space-6); } .stat-item { text-align: center; padding: var(--space-4); background-color: var(--color-neutral-800); border-radius: var(--radius-base); } .stat-number { display: block; font-size: var(--text-2xl); font-weight: var(--font-bold); color: var(--color-text-inverse); margin-bottom: var(--space-1); } .stat-label { font-size: var(--text-sm); color: var(--color-neutral-400); } /* Mobile Responsive Enhancements */ @media (max-width: 768px) { .header-container { flex-wrap: nowrap; gap: var(--space-4); } /* Hero Section Mobile Layout */ .grid-2 { grid-template-columns: 1fr; gap: var(--space-8); } .min-h-screen { min-height: auto; } .hamburger { display: flex; order: 3; margin-left: auto; } .header-actions { display: none; } /* Side-slide Mobile Menu */ .nav { position: fixed; top: 0; right: -100%; width: 280px; max-width: 85vw; height: 100vh; background-color: var(--color-white); box-shadow: -4px 0 20px rgba(0, 0, 0, 0.15); padding: var(--space-8) var(--space-6); flex-direction: column; align-items: flex-start; gap: var(--space-2); z-index: var(--z-dropdown); transition: right 0.3s cubic-bezier(0.4, 0, 0.2, 1); overflow-y: auto; overflow-x: hidden; } .nav.mobile-open { right: 0; animation: slideInRight 0.3s cubic-bezier(0.4, 0, 0.2, 1); } @keyframes slideInRight { from { right: -100%; } to { right: 0; } } .nav-link { width: 100%; text-align: left; padding: var(--space-4) var(--space-5); font-size: var(--text-base); border-radius: var(--radius-base); position: relative; transition: all var(--transition-fast); margin-bottom: var(--space-1); } .nav-link::before { left: 0; transform: translateX(0); width: 3px; height: 100%; top: 0; bottom: 0; } .nav-link:hover::before, .nav-link.active::before { width: 3px; height: 100%; } .nav-link:hover { background: linear-gradient(135deg, rgba(139, 92, 246, 0.08) 0%, rgba(236, 72, 153, 0.08) 100%); color: var(--color-secondary-700); border-color: var(--color-secondary-300); padding-left: var(--space-6); transform: translateX(4px); font-weight: var(--font-semibold); } .nav-link.active { background: linear-gradient(135deg, rgba(139, 92, 246, 0.1) 0%, rgba(236, 72, 153, 0.1) 100%); color: var(--color-secondary-700); border-color: var(--color-secondary-500); padding-left: var(--space-6); font-weight: var(--font-semibold); } .nav-link-demo { background: linear-gradient(135deg, var(--color-secondary-600) 0%, var(--color-accent-500) 100%); color: var(--color-text-inverse) !important; margin-top: var(--space-4); padding: var(--space-4) var(--space-5); text-align: center; box-shadow: 0 4px 12px rgba(139, 92, 246, 0.3); position: relative; overflow: hidden; border: none; transition: all var(--transition-fast); } .nav-link-demo::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent 0%, rgba(255, 255, 255, 0.2) 50%, transparent 100%); transition: left 0.6s; pointer-events: none; } .nav-link-demo:hover { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(139, 92, 246, 0.5); padding-left: var(--space-5); background: linear-gradient(135deg, var(--color-secondary-600) 0%, var(--color-accent-500) 100%) !important; color: var(--color-text-inverse) !important; background: linear-gradient(135deg, var(--color-secondary-600) 0%, var(--color-accent-500) 100%); color: var(--color-text-inverse) !important; } .nav-link-demo:hover::before { left: 100%; } .nav-link-demo:active { transform: translateY(0); } .nav-link-demo.active { background: linear-gradient(135deg, var(--color-secondary-700) 0%, var(--color-accent-600) 100%); box-shadow: 0 6px 20px rgba(139, 92, 246, 0.5); } /* Logo adjustments for mobile */ .logo-text { font-size: var(--text-lg); font-weight: 800; background: linear-gradient(135deg, var(--color-secondary-600) 0%, var(--color-accent-500) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .logo-icon { font-size: var(--text-xl); } .footer-content { grid-template-columns: 1fr; gap: var(--space-8); } .footer-bottom-content { flex-direction: column; text-align: center; gap: var(--space-4); } .community-stats { grid-template-columns: 1fr; gap: var(--space-4); } .social-links { justify-content: center; } .newsletter .form-group .input-group { flex-direction: column; } .newsletter .form-group .input-group .form-input { margin-bottom: var(--space-2); } } @media (max-width: 480px) { .header-container { padding: 0 var(--space-4); } .logo { font-size: var(--text-lg); } .footer-section { text-align: center; } .footer-section-title { text-align: center; } .footer-community-stats { grid-template-columns: 1fr; gap: var(--space-3); } .community-stat-item { padding: var(--space-3); } /* ============================================ LEGAL PAGES STYLING (Privacy, Terms, License) ============================================ */ .legal-page { padding: var(--space-16) 0; background-color: var(--color-white); } .legal-page .section-header { text-align: center; margin-bottom: var(--space-12); padding-bottom: var(--space-8); border-bottom: 2px solid var(--color-border-primary); } .legal-page .section-header h1 { margin-bottom: var(--space-4); } .legal-page .section-header p { color: var(--color-text-secondary); font-size: var(--text-base); } .legal-content { max-width: 800px; margin: 0 auto; } .legal-section { margin-bottom: var(--space-10); padding: var(--space-6); background-color: var(--color-white); border-radius: var(--radius-lg); border-left: 4px solid var(--color-primary-500); transition: all var(--transition-fast); } .legal-section:hover { box-shadow: 0 4px 12px