diff --git a/backend/app/Views/StudentPortal.php b/backend/app/Views/StudentPortal.php index cb71370..c83c6a4 100644 --- a/backend/app/Views/StudentPortal.php +++ b/backend/app/Views/StudentPortal.php @@ -35,14 +35,10 @@ class StudentPortal --accent-gold: #FFD166; --accent-red: #EF4444; --accent-green: #10B981; + --accent-purple: #A78BFA; } - * { - box-sizing: border-box; - margin: 0; - padding: 0; - font-family: 'Cairo', system-ui, -apple-system, sans-serif; - } + * { box-sizing: border-box; margin: 0; padding: 0; font-family: 'Cairo', system-ui, -apple-system, sans-serif; } body { background-color: var(--bg-dark); @@ -59,12 +55,7 @@ class StudentPortal background-size: 100% 100%, 100% 100%, 32px 32px, 32px 32px; } - .container { - max-width: 1140px; - margin: 0 auto; - padding: 0 20px; - width: 100%; - } + .container { max-width: 1240px; margin: 0 auto; padding: 0 20px; width: 100%; } /* Header */ header { @@ -76,460 +67,170 @@ class StudentPortal z-index: 50; } - .header-content { - height: 68px; - display: flex; - align-items: center; - justify-content: space-between; - } - - .logo-area { - display: flex; - align-items: center; - gap: 12px; - text-decoration: none; - } - + .header-content { height: 68px; display: flex; align-items: center; justify-content: space-between; } + .logo-area { display: flex; align-items: center; gap: 12px; text-decoration: none; } .logo-badge { - width: 42px; - height: 42px; - border-radius: 12px; + width: 42px; height: 42px; border-radius: 12px; background: linear-gradient(135deg, var(--accent-cyan), var(--accent-cyan-dark)); - display: flex; - align-items: center; - justify-content: center; - color: #0B132B; - font-size: 20px; - font-weight: 900; + display: flex; align-items: center; justify-content: center; + color: #0B132B; font-size: 20px; font-weight: 900; box-shadow: 0 0 20px rgba(0, 245, 212, 0.35); } - - .brand-title { - font-size: 20px; - font-weight: 900; - color: #FFFFFF; - letter-spacing: 0.5px; - } - + .brand-title { font-size: 20px; font-weight: 900; color: #FFFFFF; letter-spacing: 0.5px; } .portal-pill { - font-size: 11px; - font-weight: 700; - padding: 2px 10px; - border-radius: 999px; - background: rgba(0, 245, 212, 0.12); - color: var(--accent-cyan); - border: 1px solid rgba(0, 245, 212, 0.35); - margin-right: 8px; + font-size: 11px; font-weight: 700; padding: 2px 10px; border-radius: 999px; + background: rgba(0, 245, 212, 0.12); color: var(--accent-cyan); + border: 1px solid rgba(0, 245, 212, 0.35); margin-right: 8px; } - .nav-link { - font-size: 13px; - color: var(--text-secondary); - text-decoration: none; - display: flex; - align-items: center; - gap: 6px; - transition: 0.2s; - } + .nav-link { font-size: 13px; color: var(--text-secondary); text-decoration: none; display: flex; align-items: center; gap: 6px; } + .nav-link:hover { color: var(--accent-gold); } + .nav-link-highlight { color: var(--accent-gold); font-weight: 800; text-decoration: underline; } - .nav-link:hover { - color: var(--accent-gold); - } - - .nav-link-highlight { - color: var(--accent-gold); - font-weight: 800; - text-decoration: underline; + /* WS Status Badge */ + .ws-badge { + display: inline-flex; align-items: center; gap: 6px; font-size: 11px; font-weight: 800; + padding: 4px 10px; border-radius: 999px; } + .ws-online { background: rgba(16,185,129,0.15); border: 1px solid rgba(16,185,129,0.4); color: #34D399; } + .ws-offline { background: rgba(239,68,68,0.15); border: 1px solid rgba(239,68,68,0.4); color: #FCA5A5; } + .ws-dot { width: 7px; height: 7px; border-radius: 50%; background: currentColor; } /* Main Content */ - main { - flex: 1; - display: flex; - align-items: center; - justify-content: center; - padding: 40px 0; - } - - /* Auth Card */ - .auth-card-wrapper { - width: 100%; - max-width: 460px; - margin: 0 auto; - } - - .auth-header { - text-align: center; - margin-bottom: 24px; - } + main { flex: 1; display: flex; align-items: center; justify-content: center; padding: 36px 0; } + .auth-card-wrapper { width: 100%; max-width: 480px; margin: 0 auto; } + .auth-header { text-align: center; margin-bottom: 24px; } .icon-box { - width: 64px; - height: 64px; - border-radius: 18px; - background: var(--bg-card); - border: 1px solid rgba(0, 245, 212, 0.4); - display: inline-flex; - align-items: center; - justify-content: center; - color: var(--accent-cyan); - margin-bottom: 16px; - box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3); + width: 64px; height: 64px; border-radius: 18px; + background: var(--bg-card); border: 1px solid rgba(0, 245, 212, 0.4); + display: inline-flex; align-items: center; justify-content: center; + color: var(--accent-cyan); margin-bottom: 16px; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3); } - - .auth-title { - font-size: 24px; - font-weight: 900; - color: #FFFFFF; - margin-bottom: 6px; - } - - .auth-subtitle { - font-size: 13px; - color: var(--text-muted); - line-height: 1.6; - } - + .auth-title { font-size: 24px; font-weight: 900; color: #FFFFFF; margin-bottom: 6px; } + .auth-subtitle { font-size: 13px; color: var(--text-muted); line-height: 1.6; } .auth-box { - background: var(--bg-card); - border: 1px solid var(--border); - border-radius: 20px; - padding: 32px; - box-shadow: 0 16px 40px rgba(0, 0, 0, 0.4); - position: relative; - } - - /* Forms & Inputs */ - .form-group { - margin-bottom: 20px; - } - - .form-label { - display: block; - font-size: 12px; - font-weight: 700; - color: var(--text-secondary); - margin-bottom: 8px; + background: var(--bg-card); border: 1px solid var(--border); border-radius: 20px; + padding: 32px; box-shadow: 0 16px 40px rgba(0, 0, 0, 0.4); position: relative; } + /* Forms */ + .form-group { margin-bottom: 20px; } + .form-label { display: block; font-size: 12px; font-weight: 700; color: var(--text-secondary); margin-bottom: 8px; } .input-text { - width: 100%; - background: var(--bg-input); - border: 1px solid var(--border); - border-radius: 12px; - padding: 12px 16px; - font-size: 14px; - color: #FFFFFF; - outline: none; + width: 100%; background: var(--bg-input); border: 1px solid var(--border); + border-radius: 12px; padding: 12px 16px; font-size: 14px; color: #FFFFFF; outline: none; transition: border-color 0.2s, box-shadow 0.2s; } - - .input-text:focus { - border-color: var(--accent-cyan); - box-shadow: 0 0 0 3px rgba(0, 245, 212, 0.2); - } - - .input-text::placeholder { - color: #52607D; - } - - .phone-input-group { - display: flex; - align-items: center; - direction: ltr; - position: relative; - } - + .input-text:focus { border-color: var(--accent-cyan); box-shadow: 0 0 0 3px rgba(0, 245, 212, 0.2); } + .phone-input-group { display: flex; align-items: center; direction: ltr; position: relative; } .country-badge { - position: absolute; - left: 10px; - background: #121A33; - border: 1px solid var(--border); - border-radius: 8px; - padding: 6px 10px; - font-size: 12px; - font-weight: 700; - color: var(--accent-cyan); - display: flex; - align-items: center; - gap: 4px; + position: absolute; left: 10px; background: #121A33; border: 1px solid var(--border); + border-radius: 8px; padding: 6px 10px; font-size: 12px; font-weight: 700; color: var(--accent-cyan); user-select: none; } + .input-phone { padding-left: 96px !important; font-family: monospace; font-size: 15px; letter-spacing: 1px; } + .form-hint { font-size: 11px; color: var(--text-muted); margin-top: 6px; display: block; } - .input-phone { - padding-left: 96px !important; - font-family: monospace; - font-size: 15px; - letter-spacing: 1px; - } - - .form-hint { - font-size: 11px; - color: var(--text-muted); - margin-top: 6px; - display: block; - } - - /* High Contrast Buttons */ .btn-primary { - width: 100%; - padding: 14px; - background: linear-gradient(135deg, #00F5D4 0%, #00BAA1 100%); - color: #0B132B !important; - border: none; - border-radius: 12px; - font-size: 15px; - font-weight: 900 !important; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - gap: 8px; - box-shadow: 0 8px 24px rgba(0, 245, 212, 0.35); - transition: transform 0.15s, opacity 0.15s; - text-decoration: none; - } - - .btn-primary:hover { - opacity: 0.95; - transform: translateY(-1px); - } - - .btn-primary:active { - transform: translateY(0); - } - - .btn-primary:disabled { - opacity: 0.6; - cursor: not-allowed; - transform: none; - } - - .btn-secondary { - background: none; - border: none; - color: var(--text-muted); - font-size: 12px; - cursor: pointer; - padding: 6px 0; - transition: color 0.2s; - } - - .btn-secondary:hover { - color: #FFFFFF; - } - - .btn-link-cyan { - color: var(--accent-cyan); - font-weight: 700; - text-decoration: underline; - } - - .otp-input { - text-align: center; - font-size: 26px; - font-family: monospace; - letter-spacing: 10px; - font-weight: 900; - color: var(--accent-cyan); - border-color: rgba(0, 245, 212, 0.5); - padding: 14px; + width: 100%; padding: 14px; background: linear-gradient(135deg, #00F5D4 0%, #00BAA1 100%); + color: #0B132B !important; border: none; border-radius: 12px; font-size: 15px; font-weight: 900 !important; + cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 8px; + box-shadow: 0 8px 24px rgba(0, 245, 212, 0.35); transition: transform 0.15s, opacity 0.15s; } + .btn-primary:hover { opacity: 0.95; transform: translateY(-1px); } + .btn-primary:disabled { opacity: 0.6; cursor: not-allowed; transform: none; } + .btn-secondary { background: none; border: none; color: var(--text-muted); font-size: 12px; cursor: pointer; } + .btn-link-cyan { color: var(--accent-cyan); font-weight: 700; text-decoration: underline; } + .otp-input { text-align: center; font-size: 26px; font-family: monospace; letter-spacing: 10px; font-weight: 900; color: var(--accent-cyan); border-color: rgba(0, 245, 212, 0.5); padding: 14px; } /* Alerts */ - .alert { - padding: 12px 16px; - border-radius: 12px; - font-size: 12.5px; - margin-bottom: 20px; - display: flex; - align-items: center; - gap: 8px; - line-height: 1.5; - } + .alert { padding: 12px 16px; border-radius: 12px; font-size: 12.5px; margin-bottom: 20px; display: flex; align-items: center; gap: 8px; } + .alert-error { background: rgba(239, 68, 68, 0.15); border: 1px solid rgba(239, 68, 68, 0.4); color: #FCA5A5; } + .alert-success { background: rgba(0, 245, 212, 0.15); border: 1px solid rgba(0, 245, 212, 0.4); color: var(--accent-cyan); } - .alert-error { - background: rgba(239, 68, 68, 0.15); - border: 1px solid rgba(239, 68, 68, 0.4); - color: #FCA5A5; - } - - .alert-success { - background: rgba(0, 245, 212, 0.15); - border: 1px solid rgba(0, 245, 212, 0.4); - color: var(--accent-cyan); - } - - .auth-footer { - margin-top: 24px; - padding-top: 16px; - border-top: 1px solid rgba(255, 255, 255, 0.08); - text-align: center; - font-size: 11.5px; - color: var(--text-muted); - } - - /* Student Dashboard */ + /* Dashboard & Learning Center */ .dashboard-hero { background: linear-gradient(135deg, var(--bg-card), var(--bg-card-hover)); - border: 1px solid var(--border); - border-radius: 24px; - padding: 32px; - display: flex; - align-items: center; - justify-content: space-between; - gap: 24px; - flex-wrap: wrap; - margin-bottom: 28px; + border: 1px solid var(--border); border-radius: 24px; padding: 28px; + display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap; margin-bottom: 24px; } - .readiness-box { - background: rgba(11, 19, 43, 0.85); - border: 1px solid var(--border); - border-radius: 16px; - padding: 16px 20px; - display: flex; - align-items: center; - gap: 16px; - min-width: 240px; + background: rgba(11, 19, 43, 0.85); border: 1px solid var(--border); + border-radius: 16px; padding: 14px 20px; display: flex; align-items: center; gap: 14px; min-width: 230px; } - .gauge-circle { - width: 56px; - height: 56px; - border-radius: 50%; - border: 4px solid var(--accent-cyan); - display: flex; - align-items: center; - justify-content: center; - font-size: 18px; - font-weight: 900; - color: var(--accent-cyan); - box-shadow: 0 0 20px rgba(0, 245, 212, 0.3); + width: 54px; height: 54px; border-radius: 50%; border: 4px solid var(--accent-cyan); + display: flex; align-items: center; justify-content: center; font-size: 17px; font-weight: 900; + color: var(--accent-cyan); box-shadow: 0 0 16px rgba(0, 245, 212, 0.3); } - .cards-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); - gap: 20px; - margin-bottom: 28px; + .tabs-nav { display: flex; gap: 10px; margin-bottom: 20px; border-bottom: 1px solid var(--border); padding-bottom: 12px; } + .tab-btn { + background: rgba(22, 32, 61, 0.6); border: 1px solid var(--border); + color: var(--text-secondary); font-size: 13px; font-weight: 700; padding: 10px 18px; + border-radius: 12px; cursor: pointer; transition: 0.2s; + } + .tab-btn.active { + background: linear-gradient(135deg, rgba(0,245,212,0.15), rgba(0,186,161,0.15)); + border-color: var(--accent-cyan); color: var(--accent-cyan); font-weight: 900; } - .feature-card { - background: var(--bg-card); - border: 1px solid var(--border); - border-radius: 20px; - padding: 24px; - transition: border-color 0.2s, transform 0.2s; - cursor: pointer; + .studio-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: 20px; padding: 28px; } + + /* Video Interactive Experience */ + .video-player-frame { + position: relative; width: 100%; aspect-ratio: 16/9; background: #000; + border-radius: 16px; overflow: hidden; border: 1px solid var(--border); + display: flex; align-items: center; justify-content: center; } - .feature-card:hover { - border-color: var(--accent-cyan); - transform: translateY(-2px); + .socratic-overlay { + position: absolute; inset: 0; background: rgba(11, 19, 43, 0.95); backdrop-filter: blur(8px); + display: flex; flex-direction: column; justify-content: center; align-items: center; padding: 30px; + z-index: 40; text-align: center; } - .quiz-demo-box { - background: var(--bg-card); - border: 1px solid rgba(0, 245, 212, 0.4); - border-radius: 24px; - padding: 32px; - margin-bottom: 28px; + .quiz-option-btn { + width: 100%; max-width: 500px; text-align: right; padding: 12px 18px; margin-bottom: 10px; + background: #16203D; border: 1px solid var(--border); border-radius: 12px; color: #FFFFFF; + font-size: 14px; font-weight: 700; cursor: pointer; transition: 0.2s; } + .quiz-option-btn:hover { border-color: var(--accent-cyan); } + .quiz-option-btn.correct { background: rgba(16,185,129,0.2); border-color: #10B981; color: #6EE7B7; } + .quiz-option-btn.wrong { background: rgba(239,68,68,0.2); border-color: #EF4444; color: #FCA5A5; } - .interactive-quiz-container { - background: rgba(11, 19, 43, 0.9); - border: 1px solid var(--border); - border-radius: 16px; - padding: 24px; - margin-top: 16px; - } - - .quiz-option { - width: 100%; - text-align: right; - padding: 12px 16px; - border-radius: 12px; - border: 1px solid var(--border); - background: var(--bg-card); - color: var(--text-secondary); - font-size: 13px; - font-weight: 700; - margin-bottom: 10px; - cursor: pointer; - display: flex; - align-items: center; - justify-content: space-between; - transition: border-color 0.2s; - } - - .quiz-option:hover { - border-color: var(--accent-cyan); - } - - .quiz-option.correct { - background: rgba(16, 185, 129, 0.15); - border-color: #10B981; - color: #6EE7B7; - } - - .quiz-option.incorrect { - background: rgba(239, 68, 68, 0.15); - border-color: #EF4444; - color: #FCA5A5; + /* Student Live Chat with Teacher */ + .student-chat-box { + height: 460px; background: rgba(11, 19, 43, 0.85); border: 1px solid var(--border); + border-radius: 16px; display: flex; flex-direction: column; justify-content: space-between; overflow: hidden; } + .chat-messages { padding: 18px; overflow-y: auto; flex: 1; display: flex; flex-direction: column; gap: 12px; } + .chat-msg { max-width: 75%; padding: 10px 14px; border-radius: 14px; font-size: 13px; line-height: 1.5; } + .chat-msg.student { align-self: flex-end; background: linear-gradient(135deg, #00F5D4, #00BAA1); color: #0B132B; font-weight: 700; border-bottom-left-radius: 2px; } + .chat-msg.teacher { align-self: flex-start; background: #1E2D5A; color: #E2E8F0; border-bottom-right-radius: 2px; } + .chat-time { font-size: 9.5px; opacity: 0.7; margin-top: 4px; display: block; text-align: left; } + .chat-input-bar { padding: 12px; border-top: 1px solid var(--border); background: #0E152B; display: flex; gap: 8px; } /* Watermark */ @keyframes bounce-watermark { 0%, 100% { transform: translate(10px, 10px); } - 50% { transform: translate(120px, 60px); } + 50% { transform: translate(140px, 80px); } } .watermark-anim { - position: fixed; - bottom: 20px; - left: 20px; - z-index: 99; - pointer-events: none; - opacity: 0.35; - animation: bounce-watermark 12s infinite ease-in-out; - background: rgba(0, 0, 0, 0.7); - border: 1px solid rgba(255, 255, 255, 0.2); - padding: 4px 10px; - border-radius: 6px; - font-family: monospace; - font-size: 11px; - color: var(--accent-cyan); - } - - /* Footer */ - footer { - border-top: 1px solid rgba(255, 255, 255, 0.08); - padding: 24px 0; - background: var(--bg-dark); - color: var(--text-muted); - font-size: 12px; - } - - .footer-content { - display: flex; - align-items: center; - justify-content: space-between; - flex-wrap: wrap; - gap: 12px; + position: fixed; bottom: 20px; left: 20px; z-index: 99; pointer-events: none; opacity: 0.35; + animation: bounce-watermark 12s infinite ease-in-out; background: rgba(0, 0, 0, 0.75); + border: 1px solid rgba(255, 255, 255, 0.2); padding: 4px 10px; border-radius: 6px; + font-family: monospace; font-size: 11px; color: var(--accent-cyan); } .spinner { - width: 18px; - height: 18px; - border: 3px solid rgba(11, 19, 43, 0.3); - border-top-color: #0B132B; - border-radius: 50%; - animation: spin 0.8s linear infinite; + width: 18px; height: 18px; border: 3px solid rgba(11, 19, 43, 0.3); + border-top-color: #0B132B; border-radius: 50%; animation: spin 0.8s linear infinite; } + @keyframes spin { to { transform: rotate(360deg); } } - @keyframes spin { - to { transform: rotate(360deg); } - } + footer { border-top: 1px solid rgba(255, 255, 255, 0.08); padding: 20px 0; background: var(--bg-dark); color: var(--text-muted); font-size: 12px; } @@ -542,21 +243,25 @@ class StudentPortal
صـ
صَقِل - بوابة الطالب + بوابة الطالب الذكية
- - أنت معلم؟ - بوابة المعلمين ← - + + أنت معلم؟ + استوديو المعلمين ← +
@@ -567,10 +272,9 @@ class StudentPortal
- +
-
@@ -582,22 +286,17 @@ class StudentPortal
- - - - +
- +
@@ -616,7 +315,7 @@ class StudentPortal
- + - - -
-
@@ -653,75 +346,138 @@ class StudentPortal