Generate a modern web app landing + dashboard UI for an app called "PySQL Labs" β a Python + SQL interactive learning platform with hands-on labs and interview-style drills. Create a polished, developer-focused, slightly playful but professional design.
509f3c2
verified
| /* PySQL Labs - Global Styles */ | |
| :root { | |
| --color-primary: #22c55e; | |
| --color-secondary: #d946ef; | |
| --color-dark: #111827; | |
| --color-light: #f9fafb; | |
| } | |
| * { | |
| margin: 0; | |
| padding: 0; | |
| box-sizing: border-box; | |
| } | |
| body { | |
| font-family: 'Inter', system-ui, sans-serif; | |
| background-color: #111827; | |
| color: #f9fafb; | |
| overflow-x: hidden; | |
| } | |
| /* Custom Scrollbar */ | |
| ::-webkit-scrollbar { | |
| width: 10px; | |
| } | |
| ::-webkit-scrollbar-track { | |
| background: #1f2937; | |
| } | |
| ::-webkit-scrollbar-thumb { | |
| background: #374151; | |
| border-radius: 5px; | |
| } | |
| ::-webkit-scrollbar-thumb:hover { | |
| background: #4b5563; | |
| } | |
| /* Code Editor Styling */ | |
| .code-editor { | |
| font-family: 'JetBrains Mono', Monaco, 'Courier New', monospace; | |
| font-size: 14px; | |
| line-height: 1.5; | |
| } | |
| /* Button Animations */ | |
| .btn-pulse { | |
| animation: pulse 2s infinite; | |
| } | |
| @keyframes pulse { | |
| 0% { | |
| box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.7); | |
| } | |
| 70% { | |
| box-shadow: 0 0 0 10px rgba(34, 197, 94, 0); | |
| } | |
| 100% { | |
| box-shadow: 0 0 0 0 rgba(34, 197, 94, 0); | |
| } | |
| } | |
| /* Card Hover Effects */ | |
| .hover-lift { | |
| transition: transform 0.3s ease, box-shadow 0.3s ease; | |
| } | |
| .hover-lift:hover { | |
| transform: translateY(-5px); | |
| box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.3); | |
| } | |
| /* Gradient Text */ | |
| .gradient-text { | |
| background: linear-gradient(135deg, var(--color-primary), var(--color-secondary)); | |
| -webkit-background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| background-clip: text; | |
| } | |
| /* Progress Bar Animation */ | |
| .progress-fill { | |
| transition: width 0.5s ease-in-out; | |
| } | |
| /* Fade In Animation */ | |
| .fade-in { | |
| animation: fadeIn 0.5s ease-out; | |
| } | |
| @keyframes fadeIn { | |
| from { | |
| opacity: 0; | |
| transform: translateY(20px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateY(0); | |
| } | |
| } | |
| /* Typewriter Effect */ | |
| .typewriter { | |
| overflow: hidden; | |
| border-right: .15em solid var(--color-primary); | |
| white-space: nowrap; | |
| animation: typing 3.5s steps(40, end), blink-caret .75s step-end infinite; | |
| } | |
| @keyframes typing { | |
| from { width: 0 } | |
| to { width: 100% } | |
| } | |
| @keyframes blink-caret { | |
| from, to { border-color: transparent } | |
| 50% { border-color: var(--color-primary) } | |
| } | |
| /* Responsive Adjustments */ | |
| @media (max-width: 768px) { | |
| .stack-mobile { | |
| flex-direction: column; | |
| } | |
| .text-mobile-center { | |
| text-align: center; | |
| } | |
| } |