/* Reset and Base Styles */ * { margin: 0; padding: 0; box-sizing: border-box; } :root { /* Colors */ --primary-color: #6366f1; --primary-dark: #4f46e5; --primary-light: #a5b4fc; --secondary-color: #10b981; --accent-color: #f59e0b; --danger-color: #ef4444; /* Neutrals */ --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; /* Spacing */ --spacing-xs: 0.25rem; --spacing-sm: 0.5rem; --spacing-md: 1rem; --spacing-lg: 1.5rem; --spacing-xl: 2rem; --spacing-2xl: 3rem; --spacing-3xl: 4rem; /* Typography */ --font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; --font-size-xs: 0.75rem; --font-size-sm: 0.875rem; --font-size-base: 1rem; --font-size-lg: 1.125rem; --font-size-xl: 1.25rem; --font-size-2xl: 1.5rem; --font-size-3xl: 1.875rem; --font-size-4xl: 2.25rem; /* Shadows */ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05); --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); /* Border Radius */ --radius-sm: 0.375rem; --radius-md: 0.5rem; --radius-lg: 0.75rem; --radius-xl: 1rem; /* Transitions */ --transition-fast: 150ms ease-in-out; --transition-normal: 250ms ease-in-out; --transition-slow: 350ms ease-in-out; } body { font-family: var(--font-family); line-height: 1.6; color: var(--gray-800); background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); min-height: 100vh; } .container { max-width: 1200px; margin: 0 auto; padding: 0 var(--spacing-md); } /* Header */ .header { padding: var(--spacing-2xl) 0; text-align: center; color: white; } .header-content { max-width: 600px; margin: 0 auto; } .logo { display: flex; align-items: center; justify-content: center; gap: var(--spacing-md); margin-bottom: var(--spacing-lg); } .logo i { font-size: var(--font-size-4xl); color: var(--primary-light); } .logo h1 { font-size: var(--font-size-4xl); font-weight: 700; margin: 0; } .subtitle { font-size: var(--font-size-xl); opacity: 0.9; font-weight: 300; } /* Main Content */ .main-content { background: white; border-radius: var(--radius-xl); box-shadow: var(--shadow-xl); margin-bottom: var(--spacing-3xl); overflow: hidden; } .generator-container { display: grid; grid-template-columns: 1fr 1fr; gap: var(--spacing-2xl); padding: var(--spacing-2xl); } /* Section Headers */ .section-header { margin-bottom: var(--spacing-xl); } .section-header h2 { display: flex; align-items: center; gap: var(--spacing-sm); font-size: var(--font-size-2xl); font-weight: 600; color: var(--gray-800); margin-bottom: var(--spacing-xs); } .section-header h2 i { color: var(--primary-color); } .section-header p { color: var(--gray-600); font-size: var(--font-size-sm); } /* Content Tabs */ .content-tabs { display: flex; flex-wrap: wrap; gap: var(--spacing-xs); margin-bottom: var(--spacing-xl); padding: var(--spacing-xs); background: var(--gray-100); border-radius: var(--radius-lg); } .tab-btn { display: flex; align-items: center; gap: var(--spacing-xs); padding: var(--spacing-sm) var(--spacing-md); border: none; background: transparent; border-radius: var(--radius-md); font-size: var(--font-size-sm); font-weight: 500; color: var(--gray-600); cursor: pointer; transition: all var(--transition-fast); white-space: nowrap; } .tab-btn:hover { background: var(--gray-200); color: var(--gray-800); } .tab-btn.active { background: var(--primary-color); color: white; box-shadow: var(--shadow-sm); } /* Content Forms */ .content-forms { position: relative; } .content-form { display: none; } .content-form.active { display: block; } .input-group { margin-bottom: var(--spacing-lg); } .input-group label { display: block; font-weight: 500; color: var(--gray-700); margin-bottom: var(--spacing-sm); font-size: var(--font-size-sm); } .form-input, .form-textarea, .form-select { width: 100%; padding: var(--spacing-md); border: 2px solid var(--gray-200); border-radius: var(--radius-md); font-size: var(--font-size-base); transition: all var(--transition-fast); background: white; } .form-input:focus, .form-textarea:focus, .form-select:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 3px rgb(99 102 241 / 0.1); } .form-textarea { resize: vertical; min-height: 100px; } .checkbox-group { display: flex; align-items: center; gap: var(--spacing-sm); margin-top: var(--spacing-md); } .checkbox-group input[type="checkbox"] { width: auto; margin: 0; } /* Customization Section */ .customization-grid { display: grid; gap: var(--spacing-xl); } .custom-group { display: flex; flex-direction: column; gap: var(--spacing-sm); } .custom-group label { font-weight: 500; color: var(--gray-700); font-size: var(--font-size-sm); } /* Size Control */ .size-control { display: flex; align-items: center; gap: var(--spacing-md); } .range-slider { flex: 1; height: 6px; border-radius: 3px; background: var(--gray-200); outline: none; -webkit-appearance: none; } .range-slider::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 20px; height: 20px; border-radius: 50%; background: var(--primary-color); cursor: pointer; box-shadow: var(--shadow-sm); } .range-slider::-moz-range-thumb { width: 20px; height: 20px; border-radius: 50%; background: var(--primary-color); cursor: pointer; border: none; box-shadow: var(--shadow-sm); } .size-value { font-weight: 600; color: var(--primary-color); min-width: 60px; text-align: right; } /* Color Controls */ .color-controls { display: flex; gap: var(--spacing-lg); } .color-input-group { flex: 1; display: flex; flex-direction: column; gap: var(--spacing-sm); } .color-input-group label { font-size: var(--font-size-xs); text-transform: uppercase; letter-spacing: 0.05em; color: var(--gray-500); } .color-picker { width: 100%; height: 50px; border: 2px solid var(--gray-200); border-radius: var(--radius-md); cursor: pointer; transition: all var(--transition-fast); } .color-picker:hover { border-color: var(--primary-color); } /* Preview Section */ .preview-section { display: flex; flex-direction: column; height: 100%; } .preview-container { flex: 1; display: flex; flex-direction: column; gap: var(--spacing-xl); } .qr-preview { flex: 1; display: flex; align-items: center; justify-content: center; background: var(--gray-50); border: 2px dashed var(--gray-300); border-radius: var(--radius-lg); min-height: 300px; transition: all var(--transition-normal); } .qr-preview.has-qr { border-style: solid; border-color: var(--primary-color); background: white; } .qr-preview .placeholder { text-align: center; color: var(--gray-500); } .qr-preview .placeholder i { font-size: var(--font-size-4xl); margin-bottom: var(--spacing-md); opacity: 0.5; } .qr-preview img { max-width: 100%; max-height: 100%; border-radius: var(--radius-md); } /* Preview Actions */ .preview-actions { display: flex; gap: var(--spacing-md); flex-wrap: wrap; } /* Buttons */ .btn { display: inline-flex; align-items: center; gap: var(--spacing-sm); padding: var(--spacing-md) var(--spacing-lg); border: none; border-radius: var(--radius-md); font-size: var(--font-size-sm); font-weight: 500; text-decoration: none; cursor: pointer; transition: all var(--transition-fast); white-space: nowrap; } .btn:disabled { opacity: 0.5; cursor: not-allowed; } .btn-primary { background: var(--primary-color); color: white; } .btn-primary:hover:not(:disabled) { background: var(--primary-dark); transform: translateY(-1px); box-shadow: var(--shadow-md); } .btn-secondary { background: var(--secondary-color); color: white; } .btn-secondary:hover:not(:disabled) { background: #059669; transform: translateY(-1px); box-shadow: var(--shadow-md); } .btn-outline { background: transparent; color: var(--gray-700); border: 2px solid var(--gray-300); } .btn-outline:hover:not(:disabled) { border-color: var(--primary-color); color: var(--primary-color); } /* Features Section */ .features-section { background: white; border-radius: var(--radius-xl); box-shadow: var(--shadow-xl); margin-bottom: var(--spacing-3xl); padding: var(--spacing-3xl) var(--spacing-2xl); } .features-container h2 { text-align: center; font-size: var(--font-size-3xl); font-weight: 700; color: var(--gray-800); margin-bottom: var(--spacing-2xl); } .features-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: var(--spacing-xl); } .feature-card { text-align: center; padding: var(--spacing-xl); border-radius: var(--radius-lg); background: var(--gray-50); transition: all var(--transition-normal); } .feature-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-lg); } .feature-icon { width: 60px; height: 60px; margin: 0 auto var(--spacing-lg); background: var(--primary-color); border-radius: 50%; display: flex; align-items: center; justify-content: center; color: white; font-size: var(--font-size-xl); } .feature-card h3 { font-size: var(--font-size-xl); font-weight: 600; color: var(--gray-800); margin-bottom: var(--spacing-sm); } .feature-card p { color: var(--gray-600); line-height: 1.6; } /* Footer */ .footer { text-align: center; padding: var(--spacing-2xl) 0; color: white; } .footer-content { display: flex; flex-direction: column; gap: var(--spacing-md); align-items: center; } .footer-links { display: flex; gap: var(--spacing-lg); } .footer-link { color: white; text-decoration: none; opacity: 0.8; transition: opacity var(--transition-fast); } .footer-link:hover { opacity: 1; } /* Loading Overlay */ .loading-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.5); display: none; align-items: center; justify-content: center; z-index: 1000; } .loading-overlay.show { display: flex; } .loading-spinner { background: white; padding: var(--spacing-2xl); border-radius: var(--radius-lg); text-align: center; box-shadow: var(--shadow-xl); } .loading-spinner i { font-size: var(--font-size-3xl); color: var(--primary-color); margin-bottom: var(--spacing-md); } /* Toast Notifications */ .toast-container { position: fixed; top: var(--spacing-xl); right: var(--spacing-xl); z-index: 1001; display: flex; flex-direction: column; gap: var(--spacing-sm); } .toast { background: white; padding: var(--spacing-md) var(--spacing-lg); border-radius: var(--radius-md); box-shadow: var(--shadow-lg); border-left: 4px solid var(--primary-color); display: flex; align-items: center; gap: var(--spacing-sm); min-width: 300px; animation: slideIn 0.3s ease-out; } .toast.success { border-left-color: var(--secondary-color); } .toast.error { border-left-color: var(--danger-color); } .toast i { color: var(--primary-color); } .toast.success i { color: var(--secondary-color); } .toast.error i { color: var(--danger-color); } @keyframes slideIn { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } /* Responsive Design */ @media (max-width: 768px) { .container { padding: 0 var(--spacing-sm); } .generator-container { grid-template-columns: 1fr; gap: var(--spacing-xl); padding: var(--spacing-xl); } .content-tabs { grid-template-columns: repeat(3, 1fr); } .tab-btn { justify-content: center; padding: var(--spacing-sm); } .tab-btn span { display: none; } .features-grid { grid-template-columns: 1fr; } .preview-actions { flex-direction: column; } .btn { justify-content: center; } .color-controls { flex-direction: column; } .footer-content { gap: var(--spacing-sm); } .footer-links { flex-direction: column; gap: var(--spacing-sm); } .toast-container { left: var(--spacing-sm); right: var(--spacing-sm); } .toast { min-width: auto; } } @media (max-width: 480px) { .logo { flex-direction: column; gap: var(--spacing-sm); } .logo h1 { font-size: var(--font-size-3xl); } .subtitle { font-size: var(--font-size-lg); } .content-tabs { grid-template-columns: repeat(2, 1fr); } } /* Print Styles */ @media print { .header, .features-section, .footer, .preview-actions { display: none; } .main-content { box-shadow: none; border: 1px solid var(--gray-300); } .generator-container { grid-template-columns: 1fr; } .qr-preview { border: 1px solid var(--gray-300); background: white; } } /* High Contrast Mode */ @media (prefers-contrast: high) { :root { --gray-100: #e0e0e0; --gray-200: #c0c0c0; --gray-300: #a0a0a0; } .btn-outline { border-width: 3px; } .form-input:focus, .form-textarea:focus, .form-select:focus { border-width: 3px; } } /* Reduced Motion */ @media (prefers-reduced-motion: reduce) { * { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } .loading-spinner i { animation: none; } }