Spaces:
Sleeping
Sleeping
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"/> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"/> | |
| <title>Study Zone β Q-Simplified</title> | |
| <link href="https://fonts.googleapis.com/css2?family=Manrope:wght@400;600;700;800&family=Work+Sans:wght@300;400;500;600&display=swap" rel="stylesheet"/> | |
| <style> | |
| *,*::before,*::after{box-sizing:border-box;margin:0;padding:0} | |
| :root{ | |
| --primary:#003465;--primary-mid:#004b8d;--surface:#f8f9fa; | |
| --surface-low:#f3f4f5;--surface-card:#ffffff; | |
| --tertiary:#8d2400;--on-tertiary:#ffdbd1; | |
| --text-primary:#191c1d;--text-secondary:#4e5f7b;--text-muted:#7a8fa6; | |
| --positive:#1a7a4a;--negative:#c0392b; | |
| --radius-sm:0.5rem;--radius-md:1rem;--radius-lg:1.5rem;--radius-xl:3rem;--radius-full:9999px; | |
| --shadow:0 4px 40px rgba(0,52,101,0.06); | |
| } | |
| body{font-family:'Work Sans',sans-serif;background:var(--surface);color:var(--text-primary);min-height:100vh} | |
| /* NAV */ | |
| .nav-wrapper{background:var(--primary);padding:0 2rem} | |
| .nav{max-width:1100px;margin:0 auto;display:flex;align-items:center;gap:2rem;height:64px} | |
| .logo{font-family:'Manrope',sans-serif;font-weight:800;font-size:1.25rem;color:#fff;text-decoration:none;letter-spacing:-0.02em} | |
| .nav-links{display:flex;align-items:center;gap:0.25rem;flex:1;justify-content:center} | |
| .nav-links a{font-size:0.875rem;color:rgba(255,255,255,0.7);text-decoration:none;padding:0.4rem 0.75rem;border-radius:var(--radius-full);transition:all 0.2s} | |
| .nav-links a:hover{color:#fff;background:rgba(255,255,255,0.1)} | |
| .nav-links a.active{color:#fff;font-weight:600} | |
| .btn-login{font-size:0.8125rem;font-weight:600;letter-spacing:0.05em;text-transform:uppercase;color:#fff;background:transparent;border:1.5px solid rgba(255,255,255,0.6);border-radius:var(--radius-full);padding:0.5rem 1.25rem;cursor:pointer;transition:all 0.2s;text-decoration:none;white-space:nowrap} | |
| .btn-login:hover{background:#fff;color:var(--primary)} | |
| /* HERO */ | |
| .hero{background:var(--primary);padding:4rem 2rem 0;position:relative;overflow:hidden} | |
| .hero::after{content:'LEARN';position:absolute;right:2rem;bottom:-1.5rem;font-family:'Manrope',sans-serif;font-size:8rem;font-weight:800;color:rgba(255,255,255,0.03);line-height:1;pointer-events:none} | |
| .hero-inner{max-width:1100px;margin:0 auto;display:grid;grid-template-columns:1fr auto;align-items:end;padding-bottom:0} | |
| .hero-tag{font-size:0.6875rem;font-weight:600;letter-spacing:0.12em;text-transform:uppercase;color:var(--on-tertiary);opacity:0.8;margin-bottom:0.75rem} | |
| .hero-title{font-family:'Manrope',sans-serif;font-weight:800;font-size:2.5rem;color:#fff;letter-spacing:-0.03em;line-height:1.15;margin-bottom:0.75rem} | |
| .hero-title span{color:var(--on-tertiary)} | |
| .hero-desc{font-size:0.9375rem;color:rgba(255,255,255,0.65);max-width:480px;line-height:1.6;margin-bottom:2rem} | |
| .hero-stats{display:flex;gap:2rem} | |
| .hs-num{font-family:'Manrope',sans-serif;font-weight:800;font-size:1.5rem;color:#fff} | |
| .hs-label{font-size:0.75rem;color:rgba(255,255,255,0.5);margin-top:0.125rem} | |
| .hero-cta{background:var(--surface-card);color:var(--primary);border:none;border-radius:var(--radius-full);padding:0.875rem 2rem;font-family:'Work Sans',sans-serif;font-size:0.9375rem;font-weight:600;cursor:pointer;transition:all 0.2s;text-decoration:none;display:inline-block} | |
| .hero-cta:hover{transform:translateY(-2px);box-shadow:0 8px 24px rgba(0,0,0,0.2)} | |
| .hero-right{padding-bottom:2rem;text-align:right} | |
| /* CATEGORY TABS */ | |
| .category-bar{max-width:1100px;margin:2rem auto 0;padding:0 1.5rem} | |
| .cat-tabs{display:flex;gap:0.5rem;background:var(--surface-card);border-radius:var(--radius-full);padding:4px;box-shadow:var(--shadow);width:fit-content} | |
| .cat-tab{padding:0.5rem 1.25rem;border:none;border-radius:var(--radius-full);font-family:'Work Sans',sans-serif;font-size:0.8125rem;font-weight:500;color:var(--text-muted);background:transparent;cursor:pointer;transition:all 0.2s;white-space:nowrap} | |
| .cat-tab.active{background:var(--primary);color:#fff;font-weight:600} | |
| /* MAIN */ | |
| .main{max-width:1100px;margin:0 auto;padding:2rem 1.5rem} | |
| /* SEARCH BAR */ | |
| .search-wrap{position:relative;margin-bottom:2rem} | |
| .search-input{width:100%;padding:0.875rem 1rem 0.875rem 3rem;background:var(--surface-card);border:2px solid transparent;border-radius:var(--radius-full);font-family:'Work Sans',sans-serif;font-size:0.9375rem;color:var(--text-primary);outline:none;box-shadow:var(--shadow);transition:border 0.2s} | |
| .search-input:focus{border-color:var(--primary)} | |
| .search-icon{position:absolute;left:1rem;top:50%;transform:translateY(-50%);color:var(--text-muted)} | |
| /* FEATURED COURSE */ | |
| .featured-course{background:linear-gradient(135deg,var(--primary) 0%,#00214a 100%);border-radius:var(--radius-xl);padding:2.5rem;margin-bottom:2rem;display:grid;grid-template-columns:1fr auto;gap:2rem;align-items:center;box-shadow:var(--shadow);position:relative;overflow:hidden} | |
| .featured-course::before{content:'';position:absolute;top:-60px;right:-60px;width:240px;height:240px;border-radius:50%;background:rgba(255,255,255,0.04)} | |
| .fc-tag{font-size:0.6875rem;font-weight:600;letter-spacing:0.1em;text-transform:uppercase;background:var(--tertiary);color:var(--on-tertiary);padding:0.25rem 0.75rem;border-radius:var(--radius-full);width:fit-content;margin-bottom:0.875rem} | |
| .fc-title{font-family:'Manrope',sans-serif;font-weight:800;font-size:1.625rem;color:#fff;letter-spacing:-0.02em;line-height:1.25;margin-bottom:0.75rem} | |
| .fc-desc{font-size:0.875rem;color:rgba(255,255,255,0.7);line-height:1.6;margin-bottom:1.5rem} | |
| .fc-meta{display:flex;gap:1.5rem} | |
| .fc-meta-item{font-size:0.8125rem;color:rgba(255,255,255,0.6)} | |
| .fc-meta-item strong{color:#fff} | |
| .fc-right{text-align:center;flex-shrink:0} | |
| .fc-price{font-family:'Manrope',sans-serif;font-weight:800;font-size:2rem;color:#fff;margin-bottom:0.25rem} | |
| .fc-price-note{font-size:0.75rem;color:rgba(255,255,255,0.5);margin-bottom:1rem} | |
| .btn-enroll-cta{background:var(--on-tertiary);color:var(--tertiary);border:none;border-radius:var(--radius-full);padding:0.875rem 2rem;font-family:'Work Sans',sans-serif;font-size:0.9375rem;font-weight:700;cursor:pointer;transition:all 0.2s;white-space:nowrap} | |
| .btn-enroll-cta:hover{transform:translateY(-2px);box-shadow:0 8px 20px rgba(0,0,0,0.2)} | |
| /* COURSE GRID */ | |
| .section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.25rem} | |
| .section-title{font-family:'Manrope',sans-serif;font-weight:700;font-size:1.125rem;color:var(--text-primary)} | |
| .course-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1.25rem} | |
| .course-card{background:var(--surface-card);border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow);cursor:pointer;transition:transform 0.2s} | |
| .course-card:hover{transform:translateY(-3px)} | |
| .cc-img{height:140px;position:relative;display:flex;align-items:flex-end;padding:1rem} | |
| .cc-img-0{background:linear-gradient(135deg,#003465 0%,#004b8d 100%)} | |
| .cc-img-1{background:linear-gradient(135deg,#651700 0%,#8d2400 100%)} | |
| .cc-img-2{background:linear-gradient(135deg,#1a5c3a 0%,#1a7a4a 100%)} | |
| .cc-img-3{background:linear-gradient(135deg,#4a1560 0%,#7b21a8 100%)} | |
| .cc-img-4{background:linear-gradient(135deg,#5c3a00 0%,#8c5a00 100%)} | |
| .cc-img-5{background:linear-gradient(135deg,#1a3a5c 0%,#2a5a8c 100%)} | |
| .cc-level{font-size:0.625rem;font-weight:700;letter-spacing:0.08em;text-transform:uppercase;background:rgba(255,255,255,0.2);color:#fff;padding:0.2rem 0.625rem;border-radius:var(--radius-full)} | |
| .cc-body{padding:1.25rem} | |
| .cc-category{font-size:0.625rem;font-weight:600;letter-spacing:0.1em;text-transform:uppercase;color:var(--tertiary);margin-bottom:0.375rem} | |
| .cc-title{font-family:'Manrope',sans-serif;font-weight:700;font-size:0.9375rem;color:var(--text-primary);line-height:1.35;margin-bottom:0.5rem} | |
| .cc-desc{font-size:0.8125rem;color:var(--text-muted);line-height:1.5;margin-bottom:0.875rem} | |
| .cc-footer{display:flex;align-items:center;justify-content:space-between} | |
| .cc-meta{font-size:0.75rem;color:var(--text-muted)} | |
| .cc-price{font-family:'Manrope',sans-serif;font-weight:700;font-size:0.9375rem;color:var(--primary)} | |
| .cc-price.free{color:var(--positive)} | |
| .cc-rating{display:flex;align-items:center;gap:0.25rem;font-size:0.75rem;color:var(--text-muted)} | |
| .stars{color:#f4c430;font-size:0.75rem} | |
| /* FOOTER */ | |
| .footer{background:var(--primary);margin-top:3rem} | |
| .footer-inner{max-width:1100px;margin:0 auto;padding:2rem 1.5rem;display:flex;flex-wrap:wrap;align-items:center;gap:1rem} | |
| .footer-logo{font-family:'Manrope',sans-serif;font-weight:800;font-size:1.125rem;color:#fff;letter-spacing:-0.02em} | |
| .footer-copy{font-size:0.6875rem;color:rgba(255,255,255,0.4);margin-top:0.125rem} | |
| .footer-links{flex:1;display:flex;justify-content:center;gap:1.5rem;flex-wrap:wrap} | |
| .footer-links a{font-size:0.75rem;font-weight:500;letter-spacing:0.04em;text-transform:uppercase;color:rgba(255,255,255,0.5);text-decoration:none;transition:color 0.2s} | |
| .footer-links a:hover{color:#fff} | |
| @media(max-width:900px){.hero-inner{grid-template-columns:1fr}.hero-right{display:none}.course-grid{grid-template-columns:1fr 1fr}} | |
| @media(max-width:600px){.course-grid{grid-template-columns:1fr}.featured-course{grid-template-columns:1fr}} | |
| </style> | |
| </head> | |
| <body> | |
| <div class="nav-wrapper"> | |
| <nav class="nav"> | |
| <a href="/" class="logo">Q-Simplified</a> | |
| <div class="nav-links"> | |
| <a href="/about.html">About</a> | |
| <a href="/trends.html">Trends</a> | |
| <a href="/study-zone.html" class="active">Study Zone</a> | |
| <a href="/test-series.html">Test Series</a> | |
| <a href="/simplified-zone.html">Simplified Zone</a> | |
| <a href="/book-class.html">Book Class</a> | |
| </div> | |
| <a href="/login.html" class="btn-login" id="nav-auth-btn">Login</a> | |
| </nav> | |
| </div> | |
| <!-- HERO --> | |
| <div class="hero"> | |
| <div class="hero-inner"> | |
| <div> | |
| <div class="hero-tag">Study Zone</div> | |
| <h1 class="hero-title">Master your<br/><span>financial future.</span></h1> | |
| <p class="hero-desc">Expert-crafted courses on investing, macroeconomics, personal finance, and the Indian markets β simplified for every level.</p> | |
| <div class="hero-stats"> | |
| <div><div class="hs-num">24+</div><div class="hs-label">Courses</div></div> | |
| <div><div class="hs-num">200+</div><div class="hs-label">Lessons</div></div> | |
| <div><div class="hs-num">12K+</div><div class="hs-label">Students</div></div> | |
| </div> | |
| </div> | |
| <div class="hero-right"> | |
| <a href="/login.html" class="hero-cta">Start Learning Free β</a> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- CATEGORY TABS --> | |
| <div class="category-bar"> | |
| <div class="cat-tabs"> | |
| <button class="cat-tab active" onclick="filterCat('all',this)">All Courses</button> | |
| <button class="cat-tab" onclick="filterCat('investing',this)">Investing</button> | |
| <button class="cat-tab" onclick="filterCat('macro',this)">Macroeconomics</button> | |
| <button class="cat-tab" onclick="filterCat('personal',this)">Personal Finance</button> | |
| <button class="cat-tab" onclick="filterCat('markets',this)">Indian Markets</button> | |
| <button class="cat-tab" onclick="filterCat('advanced',this)">Advanced</button> | |
| </div> | |
| </div> | |
| <!-- MAIN --> | |
| <main class="main"> | |
| <!-- SEARCH --> | |
| <div class="search-wrap"> | |
| <svg class="search-icon" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg> | |
| <input class="search-input" id="search-input" type="text" placeholder="Search courses β e.g. mutual funds, bonds, GST..." oninput="handleSearch(this.value)"/> | |
| </div> | |
| <!-- FEATURED COURSE --> | |
| <div class="featured-course"> | |
| <div> | |
| <div class="fc-tag">β Featured</div> | |
| <h2 class="fc-title">The Complete Indian Stock Market Masterclass</h2> | |
| <p class="fc-desc">From understanding how the NSE and BSE work to building your first equity portfolio β a comprehensive course for the serious Indian investor.</p> | |
| <div class="fc-meta"> | |
| <span class="fc-meta-item"><strong>18</strong> modules</span> | |
| <span class="fc-meta-item"><strong>6</strong> hours</span> | |
| <span class="fc-meta-item"><strong>Beginner</strong> β Advanced</span> | |
| <span class="fc-meta-item">β <strong>4.9</strong> (840 reviews)</span> | |
| </div> | |
| </div> | |
| <div class="fc-right"> | |
| <div class="fc-price">βΉ999</div> | |
| <div class="fc-price-note">One-time Β· Lifetime access</div> | |
| <button class="btn-enroll-cta" onclick="handleEnroll('stock-market-masterclass')">Enroll Now</button> | |
| </div> | |
| </div> | |
| <!-- COURSES GRID --> | |
| <div class="section-header"> | |
| <span class="section-title" id="courses-count">All Courses (6)</span> | |
| <div style="display:flex;align-items:center;gap:0.5rem;font-size:0.8125rem;color:var(--text-muted)"> | |
| Sort by: | |
| <select onchange="sortCourses(this.value)" style="border:none;background:var(--surface-card);border-radius:var(--radius-sm);padding:0.25rem 0.5rem;font-family:'Work Sans',sans-serif;font-size:0.8125rem;color:var(--text-secondary);outline:none"> | |
| <option>Most Popular</option> | |
| <option>Newest</option> | |
| <option>Price: Low to High</option> | |
| <option>Free First</option> | |
| </select> | |
| </div> | |
| </div> | |
| <div class="course-grid" id="course-grid"> | |
| <!-- Populated by JS --> | |
| </div> | |
| </main> | |
| <!-- FOOTER --> | |
| <footer class="footer"> | |
| <div class="footer-inner"> | |
| <div> | |
| <div class="footer-logo">Q-Simplified</div> | |
| <div class="footer-copy">Β© 2024 Q-SIMPLIFIED. THE FINANCIAL ARCHITECT.</div> | |
| </div> | |
| <nav class="footer-links"> | |
| <a href="#">Privacy Policy</a><a href="#">Terms of Service</a> | |
| <a href="#">Contact Us</a><a href="#">Sitemap</a> | |
| </nav> | |
| </div> | |
| </footer> | |
| <script> | |
| const API_BASE = ''; // Same origin β FastAPI serves both frontend and API | |
| const COURSES = [ | |
| {id:'mutual-funds-simplified',title:'Mutual Funds Simplified',desc:'Understand SIPs, NAV, expense ratios, and how to pick the right fund for your goals.',category:'investing',level:'beginner',modules:8,hours:3,price:0,rating:4.8,reviews:1240,color:0}, | |
| {id:'rbi-monetary-policy',title:'RBI & Monetary Policy Decoded',desc:'How the central bank shapes interest rates, inflation, and the entire Indian economy.',category:'macro',level:'intermediate',modules:6,hours:2.5,price:499,rating:4.7,reviews:642,color:1}, | |
| {id:'personal-finance-101',title:'Personal Finance 101',desc:'Budgeting, emergency funds, term insurance, and ELSS β your complete financial toolkit.',category:'personal',level:'beginner',modules:10,hours:4,price:0,rating:4.9,reviews:2150,color:2}, | |
| {id:'options-futures',title:'Options & Futures: A Practical Guide',desc:'Master derivatives trading with real examples from the NSE F&O segment.',category:'advanced',level:'advanced',modules:14,hours:7,price:1499,rating:4.6,reviews:380,color:3}, | |
| {id:'global-macro',title:'Global Macro for Indian Investors',desc:'How Fed rate decisions, China\'s economy, and oil prices affect your Nifty portfolio.',category:'macro',level:'intermediate',modules:9,hours:4,price:799,rating:4.7,reviews:512,color:4}, | |
| {id:'sensex-nifty-explained',title:'Sensex & Nifty β Index Investing',desc:'Passive investing in India: index funds, ETFs, and long-term wealth creation.',category:'markets',level:'beginner',modules:7,hours:2.5,price:0,rating:4.8,reviews:1890,color:5}, | |
| ]; | |
| let filteredCourses = [...COURSES]; | |
| let currentCategory = 'all'; | |
| function renderCourses(courses) { | |
| const grid = document.getElementById('course-grid'); | |
| document.getElementById('courses-count').textContent = `${currentCategory==='all'?'All':'Filtered'} Courses (${courses.length})`; | |
| if (courses.length === 0) { | |
| grid.innerHTML = `<div style="grid-column:1/-1;text-align:center;padding:3rem;color:var(--text-muted)"> | |
| <div style="font-size:2rem;margin-bottom:0.5rem">π</div> | |
| <div style="font-family:'Manrope',sans-serif;font-weight:700;font-size:1rem;margin-bottom:0.5rem">No courses found</div> | |
| <div style="font-size:0.875rem">Try a different search or category</div> | |
| </div>`; | |
| return; | |
| } | |
| grid.innerHTML = courses.map(c => ` | |
| <div class="course-card" onclick="openCourse('${c.id}')"> | |
| <div class="cc-img cc-img-${c.color}"> | |
| <span class="cc-level">${c.level.charAt(0).toUpperCase()+c.level.slice(1)}</span> | |
| </div> | |
| <div class="cc-body"> | |
| <div class="cc-category">${c.category}</div> | |
| <h3 class="cc-title">${c.title}</h3> | |
| <p class="cc-desc">${c.desc}</p> | |
| <div class="cc-footer"> | |
| <div> | |
| <div class="cc-rating"><span class="stars">β β β β β </span> ${c.rating} (${c.reviews.toLocaleString('en-IN')})</div> | |
| <div class="cc-meta">${c.modules} modules Β· ${c.hours}h</div> | |
| </div> | |
| <div class="cc-price ${c.price===0?'free':''}">${c.price===0?'Free':'βΉ'+c.price.toLocaleString('en-IN')}</div> | |
| </div> | |
| </div> | |
| </div> | |
| `).join(''); | |
| } | |
| function filterCat(cat, btn) { | |
| currentCategory = cat; | |
| document.querySelectorAll('.cat-tab').forEach(t=>t.classList.remove('active')); | |
| btn.classList.add('active'); | |
| filteredCourses = cat==='all' ? [...COURSES] : COURSES.filter(c=>c.category===cat||c.level===cat); | |
| renderCourses(filteredCourses); | |
| } | |
| function handleSearch(val) { | |
| const q = val.toLowerCase(); | |
| filteredCourses = COURSES.filter(c=> | |
| c.title.toLowerCase().includes(q)|| | |
| c.desc.toLowerCase().includes(q)|| | |
| c.category.toLowerCase().includes(q) | |
| ); | |
| renderCourses(filteredCourses); | |
| } | |
| function sortCourses(val) { | |
| const arr = [...filteredCourses]; | |
| if (val==='Newest') arr.sort((a,b)=>b.id.localeCompare(a.id)); | |
| if (val==='Price: Low to High') arr.sort((a,b)=>a.price-b.price); | |
| if (val==='Free First') arr.sort((a,b)=>a.price-b.price); | |
| if (val==='Most Popular') arr.sort((a,b)=>b.reviews-a.reviews); | |
| renderCourses(arr); | |
| } | |
| function openCourse(id) { | |
| const token = localStorage.getItem('qs_token'); | |
| if (!token) { | |
| window.location.href = `/login.html?redirect=/course/${id}`; | |
| return; | |
| } | |
| window.location.href = `/course.html?id=${id}`; | |
| } | |
| function handleEnroll(id) { | |
| const token = localStorage.getItem('qs_token'); | |
| if (!token) { window.location.href='/login.html'; return; } | |
| alert('Enrollment flow β integrate Razorpay here for paid courses'); | |
| } | |
| // Auth nav state | |
| function checkAuth() { | |
| const user = JSON.parse(localStorage.getItem('qs_user')||'null'); | |
| if (user) { | |
| const btn=document.getElementById('nav-auth-btn'); | |
| btn.textContent=user.full_name?.split(' ')[0]||'Account'; | |
| btn.href='/profile.html'; | |
| } | |
| } | |
| document.addEventListener('DOMContentLoaded', () => { | |
| renderCourses(COURSES); | |
| checkAuth(); | |
| }); | |
| </script> | |
| </body> | |
| </html> | |