1154 lines
40 KiB
PHP
1154 lines
40 KiB
PHP
@extends('layouts.app')
|
|
|
|
@section('title', 'Student Portal')
|
|
|
|
@section('content')
|
|
|
|
<style>
|
|
:root {
|
|
/* Premium Modern Automotive & Academic Palette */
|
|
--primary: #3E51B8; /* Tech Sapphire */
|
|
--primary-light: #0a67df; /* Vibrant Electric Blue */
|
|
--secondary: #BC1A1A; /* Deep Racing Red */
|
|
--secondary-hover: #822424; /* Dark Burnt Red */
|
|
--accent-orange: #e36414; /* Warning/Industrial Orange */
|
|
--accent-yellow: #FFE618; /* High-Visibility Electric Yellow */
|
|
--bg-light: #F8FAFC; /* Soft slate light gray */
|
|
|
|
--text-main: #0F172A; /* Slate dark grey */
|
|
--text-muted: #64748B; /* Neutral gray */
|
|
--card-border: rgba(226, 232, 240, 0.8);
|
|
--shadow-soft: 0 10px 30px -5px rgba(15, 23, 42, 0.05);
|
|
--shadow-hover: 0 22px 45px -10px rgba(62, 81, 184, 0.18);
|
|
}
|
|
|
|
body {
|
|
font-family: 'Inter', 'Segoe UI', Arial, sans-serif;
|
|
color: var(--text-main);
|
|
background-color: #F8FAFC;
|
|
}
|
|
|
|
h1, h2, h3, h4, h5, h6 {
|
|
font-family: 'Poppins', 'Segoe UI', Arial, sans-serif;
|
|
}
|
|
|
|
/* ===== HERO SECTION ===== */
|
|
.hero {
|
|
position: relative;
|
|
overflow: hidden;
|
|
color: #fff;
|
|
padding: 85px 0 75px;
|
|
text-align: center;
|
|
min-height: 460px;
|
|
display: flex;
|
|
align-items: center;
|
|
background: #0f172a;
|
|
}
|
|
|
|
.hero-slideshow {
|
|
position: absolute;
|
|
inset: 0;
|
|
z-index: 0;
|
|
}
|
|
|
|
.hero-slide {
|
|
position: absolute;
|
|
inset: 0;
|
|
background-position: center;
|
|
background-size: cover;
|
|
opacity: 0;
|
|
transform: scale(1);
|
|
transition: opacity 2s ease-in-out, transform 7s ease-out;
|
|
}
|
|
|
|
.hero-slide.active {
|
|
opacity: 1;
|
|
transform: scale(1.08);
|
|
}
|
|
|
|
.hero-overlay {
|
|
position: absolute;
|
|
inset: 0;
|
|
z-index: 1;
|
|
background: linear-gradient(135deg, rgba(15, 23, 42, 0.92) 0%, rgba(30, 41, 59, 0.85) 50%, rgba(15, 23, 42, 0.94) 100%);
|
|
pointer-events: none;
|
|
}
|
|
|
|
.hero > .container {
|
|
position: relative;
|
|
z-index: 2;
|
|
}
|
|
|
|
.hero-dots {
|
|
position: absolute;
|
|
left: 0;
|
|
right: 0;
|
|
bottom: 20px;
|
|
z-index: 3;
|
|
display: flex;
|
|
justify-content: center;
|
|
gap: 10px;
|
|
}
|
|
|
|
.hero-dot {
|
|
width: 10px;
|
|
height: 10px;
|
|
border-radius: 50%;
|
|
border: 2px solid rgba(255, 255, 255, 0.5);
|
|
background: rgba(255, 255, 255, 0.2);
|
|
padding: 0;
|
|
cursor: pointer;
|
|
transition: all 0.3s ease;
|
|
}
|
|
|
|
.hero-dot:hover {
|
|
background: rgba(255, 255, 255, 0.6);
|
|
}
|
|
|
|
.hero-dot.active {
|
|
background: #FFE618;
|
|
border-color: #FFE618;
|
|
width: 28px;
|
|
border-radius: 999px;
|
|
box-shadow: 0 0 10px rgba(255, 230, 24, 0.6);
|
|
}
|
|
|
|
.hero-badge {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
background: linear-gradient(135deg, rgba(255, 230, 24, 0.18) 0%, rgba(227, 100, 20, 0.22) 100%);
|
|
border: 1px solid rgba(255, 230, 24, 0.4);
|
|
backdrop-filter: blur(12px);
|
|
-webkit-backdrop-filter: blur(12px);
|
|
color: #FFE618;
|
|
font-size: 13px;
|
|
font-weight: 700;
|
|
letter-spacing: 0.1em;
|
|
text-transform: uppercase;
|
|
padding: 8px 22px;
|
|
border-radius: 999px;
|
|
margin-bottom: 20px;
|
|
box-shadow: 0 4px 15px rgba(255, 230, 24, 0.15);
|
|
}
|
|
|
|
.hero h1 {
|
|
font-size: clamp(2.2rem, 4.5vw, 3.4rem);
|
|
font-weight: 800;
|
|
letter-spacing: -0.02em;
|
|
text-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);
|
|
}
|
|
|
|
.hero p {
|
|
max-width: 720px;
|
|
margin: 16px auto 0;
|
|
color: #CBD5E1;
|
|
font-size: 1.1rem;
|
|
line-height: 1.6;
|
|
}
|
|
|
|
.btn-portal {
|
|
background: linear-gradient(135deg, var(--secondary) 0%, var(--secondary-hover) 100%);
|
|
color: #fff;
|
|
padding: 14px 36px;
|
|
border-radius: 999px;
|
|
font-weight: 700;
|
|
font-size: 15px;
|
|
border: 2px solid rgba(255, 255, 255, 0.9);
|
|
transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
|
box-shadow: 0 8px 20px rgba(188, 26, 26, 0.35);
|
|
}
|
|
|
|
.btn-portal:hover {
|
|
background: linear-gradient(135deg, var(--secondary-hover) 0%, var(--secondary) 100%);
|
|
color: #fff;
|
|
transform: translateY(-3px) scale(1.02);
|
|
box-shadow: 0 14px 28px rgba(188, 26, 26, 0.45);
|
|
}
|
|
|
|
.btn-hero-outline {
|
|
background: rgba(255, 255, 255, 0.1);
|
|
color: #fff;
|
|
border: 2px solid rgba(255, 255, 255, 0.6);
|
|
padding: 14px 36px;
|
|
border-radius: 999px;
|
|
font-weight: 700;
|
|
font-size: 15px;
|
|
backdrop-filter: blur(10px);
|
|
-webkit-backdrop-filter: blur(10px);
|
|
transition: all 0.3s ease;
|
|
text-decoration: none;
|
|
}
|
|
|
|
.btn-hero-outline:hover {
|
|
background: rgba(255, 255, 255, 0.95);
|
|
color: var(--secondary-hover);
|
|
border-color: #fff;
|
|
transform: translateY(-3px);
|
|
box-shadow: 0 10px 25px rgba(255, 255, 255, 0.2);
|
|
}
|
|
|
|
.hero-quick-stats {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
justify-content: center;
|
|
gap: 14px;
|
|
margin-top: 40px;
|
|
}
|
|
|
|
.hero-quick-stat {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 9px;
|
|
background: rgba(255, 255, 255, 0.08);
|
|
border: 1px solid rgba(255, 255, 255, 0.18);
|
|
backdrop-filter: blur(12px);
|
|
-webkit-backdrop-filter: blur(12px);
|
|
color: #F1F5F9;
|
|
font-size: 13.5px;
|
|
font-weight: 600;
|
|
padding: 9px 20px;
|
|
border-radius: 999px;
|
|
transition: transform 0.3s ease, background-color 0.3s ease;
|
|
}
|
|
|
|
.hero-quick-stat:hover {
|
|
transform: translateY(-3px);
|
|
background: rgba(255, 255, 255, 0.16);
|
|
color: #fff;
|
|
}
|
|
|
|
.hero-quick-stat i {
|
|
color: #FFE618;
|
|
}
|
|
|
|
/* ===== FILTER TABS & SEARCH SECTION ===== */
|
|
.services-header {
|
|
margin-bottom: 48px;
|
|
}
|
|
|
|
.services-eyebrow {
|
|
color: var(--primary-light);
|
|
font-weight: 700;
|
|
font-size: 13px;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.1em;
|
|
margin-bottom: 8px;
|
|
display: block;
|
|
}
|
|
|
|
.filter-pills {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
justify-content: center;
|
|
gap: 10px;
|
|
margin-top: 24px;
|
|
}
|
|
|
|
.filter-btn {
|
|
background: #ffffff;
|
|
border: 1px solid #E2E8F0;
|
|
color: #64748B;
|
|
font-weight: 600;
|
|
font-size: 14px;
|
|
padding: 8px 22px;
|
|
border-radius: 999px;
|
|
cursor: pointer;
|
|
transition: all 0.3s ease;
|
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.03);
|
|
}
|
|
|
|
.filter-btn:hover {
|
|
border-color: var(--primary);
|
|
color: var(--primary);
|
|
transform: translateY(-2px);
|
|
}
|
|
|
|
.filter-btn.active {
|
|
background: linear-gradient(135deg, var(--primary) 0%, var(--primary-light) 100%);
|
|
color: #ffffff;
|
|
border-color: transparent;
|
|
box-shadow: 0 6px 18px rgba(62, 81, 184, 0.25);
|
|
}
|
|
|
|
/* ===== PORTAL CARDS GRID ===== */
|
|
.portal-card {
|
|
position: relative;
|
|
display: flex;
|
|
flex-direction: column;
|
|
background: #ffffff;
|
|
border-radius: 26px;
|
|
padding: 38px 28px 32px;
|
|
transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
|
box-shadow: var(--shadow-soft);
|
|
border: 1px solid var(--card-border);
|
|
cursor: pointer;
|
|
overflow: hidden;
|
|
height: 100%;
|
|
}
|
|
|
|
.portal-card::before {
|
|
content: '';
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
height: 4px;
|
|
background: linear-gradient(90deg, var(--primary) 0%, var(--accent-orange) 50%, var(--secondary) 100%);
|
|
opacity: 0.3;
|
|
transition: opacity 0.4s ease, height 0.4s ease;
|
|
}
|
|
|
|
.portal-card:hover::before {
|
|
opacity: 1;
|
|
height: 5px;
|
|
}
|
|
|
|
.portal-card:hover {
|
|
transform: translateY(-10px);
|
|
box-shadow: var(--shadow-hover);
|
|
border-color: rgba(62, 81, 184, 0.25);
|
|
}
|
|
|
|
.portal-card-tag {
|
|
position: absolute;
|
|
top: 18px;
|
|
right: 20px;
|
|
font-size: 11px;
|
|
font-weight: 800;
|
|
letter-spacing: 0.08em;
|
|
text-transform: uppercase;
|
|
padding: 4px 12px;
|
|
border-radius: 20px;
|
|
background: #F1F5F9;
|
|
color: #64748B;
|
|
transition: all 0.3s ease;
|
|
}
|
|
|
|
.portal-card:hover .portal-card-tag {
|
|
background: rgba(62, 81, 184, 0.1);
|
|
color: var(--primary);
|
|
}
|
|
|
|
.portal-icon-wrapper {
|
|
width: 68px;
|
|
height: 68px;
|
|
border-radius: 22px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 26px;
|
|
margin: 0 auto 24px;
|
|
color: #ffffff;
|
|
box-shadow: 0 10px 22px rgba(0, 0, 0, 0.12);
|
|
transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
|
}
|
|
|
|
/* Distinct Card Icon Gradient Themes */
|
|
.icon-theme-courses { background: linear-gradient(135deg, #3E51B8 0%, #0a67df 100%); }
|
|
.icon-theme-schedule { background: linear-gradient(135deg, #0D9488 0%, #14B8A6 100%); }
|
|
.icon-theme-assignments { background: linear-gradient(135deg, #EA580C 0%, #F97316 100%); }
|
|
.icon-theme-results { background: linear-gradient(135deg, #7C3AED 0%, #8B5CF6 100%); }
|
|
.icon-theme-payments { background: linear-gradient(135deg, #059669 0%, #10B981 100%); }
|
|
.icon-theme-profile { background: linear-gradient(135deg, #BC1A1A 0%, #E11D48 100%); }
|
|
|
|
.portal-card:hover .portal-icon-wrapper {
|
|
transform: scale(1.1) rotate(5deg);
|
|
box-shadow: 0 15px 30px rgba(0, 0, 0, 0.22);
|
|
}
|
|
|
|
.portal-card h4 {
|
|
font-size: 20px;
|
|
font-weight: 750;
|
|
color: #0F172A;
|
|
margin-bottom: 10px;
|
|
transition: color 0.3s ease;
|
|
}
|
|
|
|
.portal-card:hover h4 {
|
|
color: var(--primary);
|
|
}
|
|
|
|
.portal-card p {
|
|
font-size: 14.5px;
|
|
color: var(--text-muted);
|
|
line-height: 1.6;
|
|
margin-bottom: 24px;
|
|
}
|
|
|
|
.portal-access-hint {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 8px;
|
|
margin-top: auto;
|
|
padding-top: 16px;
|
|
border-top: 1px dashed #E2E8F0;
|
|
font-size: 13.5px;
|
|
font-weight: 700;
|
|
color: var(--primary);
|
|
transition: all 0.3s ease;
|
|
}
|
|
|
|
.portal-card:hover .portal-access-hint {
|
|
color: var(--secondary);
|
|
}
|
|
|
|
.portal-access-hint i {
|
|
transition: transform 0.3s ease;
|
|
}
|
|
|
|
.portal-card:hover .portal-access-hint i {
|
|
transform: translateX(6px);
|
|
}
|
|
|
|
/* ===== ANNOUNCEMENTS & QUICK LINKS DUAL SECTION ===== */
|
|
.dual-section {
|
|
background: #ffffff;
|
|
border-top: 1px solid #E2E8F0;
|
|
border-bottom: 1px solid #E2E8F0;
|
|
}
|
|
|
|
.notice-card {
|
|
background: #F8FAFC;
|
|
border: 1px solid #E2E8F0;
|
|
border-radius: 18px;
|
|
padding: 20px;
|
|
transition: all 0.3s ease;
|
|
}
|
|
|
|
.notice-card:hover {
|
|
background: #ffffff;
|
|
border-color: rgba(62, 81, 184, 0.25);
|
|
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.05);
|
|
transform: translateX(4px);
|
|
}
|
|
|
|
.notice-badge {
|
|
font-size: 11px;
|
|
font-weight: 800;
|
|
padding: 4px 10px;
|
|
border-radius: 6px;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.05em;
|
|
}
|
|
|
|
.badge-exam { background: rgba(188, 26, 26, 0.1); color: #BC1A1A; }
|
|
.badge-assignment { background: rgba(234, 88, 12, 0.1); color: #EA580C; }
|
|
.badge-event { background: rgba(62, 81, 184, 0.1); color: #3E51B8; }
|
|
|
|
.quick-link-box {
|
|
background: #ffffff;
|
|
border: 1px solid #E2E8F0;
|
|
border-radius: 20px;
|
|
padding: 28px;
|
|
box-shadow: var(--shadow-soft);
|
|
}
|
|
|
|
.quick-list-item {
|
|
background: #F8FAFC;
|
|
border: 1px solid #E2E8F0;
|
|
border-radius: 16px;
|
|
padding: 16px 20px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
text-decoration: none;
|
|
color: #0F172A;
|
|
transition: all 0.3s ease;
|
|
}
|
|
|
|
.quick-list-item:hover {
|
|
background: #ffffff;
|
|
border-color: var(--primary-light);
|
|
transform: translateX(6px);
|
|
box-shadow: 0 8px 20px rgba(62, 81, 184, 0.12);
|
|
color: var(--primary);
|
|
}
|
|
|
|
.quick-link-icon-circle {
|
|
width: 46px;
|
|
height: 46px;
|
|
border-radius: 14px;
|
|
background: rgba(62, 81, 184, 0.08);
|
|
color: var(--primary);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 20px;
|
|
transition: all 0.3s ease;
|
|
}
|
|
|
|
.quick-list-item:hover .quick-link-icon-circle {
|
|
background: var(--primary);
|
|
color: #ffffff;
|
|
transform: rotate(-6deg);
|
|
}
|
|
|
|
/* ===== BOTTOM CTA ===== */
|
|
.cta-banner {
|
|
background: linear-gradient(135deg, #0F172A 0%, #1E293B 100%);
|
|
border-radius: 30px;
|
|
padding: 60px 30px;
|
|
color: #ffffff;
|
|
position: relative;
|
|
overflow: hidden;
|
|
box-shadow: 0 25px 50px -12px rgba(15, 23, 42, 0.35);
|
|
}
|
|
|
|
.cta-banner::after {
|
|
content: '';
|
|
position: absolute;
|
|
top: -50%;
|
|
right: -20%;
|
|
width: 400px;
|
|
height: 400px;
|
|
background: radial-gradient(circle, rgba(62, 81, 184, 0.3) 0%, transparent 70%);
|
|
pointer-events: none;
|
|
}
|
|
|
|
/* ===== LOGIN MODAL ===== */
|
|
.modal-content {
|
|
border: none;
|
|
border-radius: 28px;
|
|
box-shadow: 0 25px 60px rgba(0, 0, 0, 0.3);
|
|
overflow: hidden;
|
|
}
|
|
|
|
.modal-header {
|
|
background: linear-gradient(135deg, #0F172A 0%, #1E293B 100%);
|
|
color: #ffffff;
|
|
border-bottom: none;
|
|
padding: 35px 30px 25px;
|
|
}
|
|
|
|
.modal-login-icon {
|
|
width: 72px;
|
|
height: 72px;
|
|
border-radius: 24px;
|
|
background: linear-gradient(135deg, var(--secondary) 0%, var(--secondary-hover) 100%);
|
|
color: #FFE618;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 28px;
|
|
box-shadow: 0 12px 28px rgba(188, 26, 26, 0.35);
|
|
margin-bottom: 16px;
|
|
}
|
|
|
|
.modal-body {
|
|
padding: 30px;
|
|
}
|
|
|
|
.form-label {
|
|
color: #334155;
|
|
font-weight: 600;
|
|
font-size: 0.9rem;
|
|
margin-bottom: 6px;
|
|
}
|
|
|
|
.input-group-text {
|
|
background-color: #F8FAFC;
|
|
border-color: #CBD5E1;
|
|
color: #64748B;
|
|
border-top-left-radius: 12px;
|
|
border-bottom-left-radius: 12px;
|
|
padding-left: 16px;
|
|
padding-right: 16px;
|
|
}
|
|
|
|
.form-control {
|
|
border: 1px solid #CBD5E1;
|
|
padding: 0.75rem 1rem;
|
|
font-size: 0.95rem;
|
|
border-top-right-radius: 12px;
|
|
border-bottom-right-radius: 12px;
|
|
transition: all 0.2s ease;
|
|
}
|
|
|
|
.form-control:focus {
|
|
border-color: var(--primary-light);
|
|
box-shadow: 0 0 0 4px rgba(10, 103, 223, 0.15);
|
|
outline: 0;
|
|
}
|
|
|
|
.input-group:focus-within .input-group-text {
|
|
border-color: var(--primary-light);
|
|
color: var(--primary-light);
|
|
background-color: #ffffff;
|
|
}
|
|
|
|
.input-group .form-control:not(:last-child) {
|
|
border-top-right-radius: 0 !important;
|
|
border-bottom-right-radius: 0 !important;
|
|
}
|
|
|
|
.toggle-password-btn {
|
|
background-color: #F8FAFC;
|
|
border: 1px solid #CBD5E1;
|
|
border-left: none;
|
|
color: #64748B;
|
|
border-top-right-radius: 12px !important;
|
|
border-bottom-right-radius: 12px !important;
|
|
padding-left: 14px;
|
|
padding-right: 14px;
|
|
cursor: pointer;
|
|
transition: all 0.2s ease;
|
|
}
|
|
|
|
.toggle-password-btn:hover {
|
|
background-color: #E2E8F0;
|
|
color: #1E293B;
|
|
border-color: #CBD5E1;
|
|
}
|
|
|
|
.input-group:focus-within .toggle-password-btn {
|
|
border-color: var(--primary-light);
|
|
}
|
|
|
|
.modal-footer {
|
|
border-top: none;
|
|
padding: 0 30px 35px;
|
|
}
|
|
|
|
.btn-modal-cancel {
|
|
background: #F1F5F9;
|
|
border: 1px solid #CBD5E1;
|
|
color: #475569;
|
|
font-weight: 700;
|
|
padding: 12px 0;
|
|
border-radius: 12px;
|
|
transition: all 0.2s;
|
|
}
|
|
|
|
.btn-modal-cancel:hover {
|
|
background: #E2E8F0;
|
|
color: #1E293B;
|
|
}
|
|
|
|
.btn-modal-login {
|
|
background: linear-gradient(135deg, var(--secondary) 0%, var(--secondary-hover) 100%);
|
|
color: #ffffff;
|
|
border: none;
|
|
font-weight: 700;
|
|
padding: 12px 0;
|
|
border-radius: 12px;
|
|
box-shadow: 0 6px 18px rgba(188, 26, 26, 0.3);
|
|
transition: all 0.2s ease;
|
|
}
|
|
|
|
.btn-modal-login:hover {
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 10px 24px rgba(188, 26, 26, 0.45);
|
|
color: #ffffff;
|
|
}
|
|
|
|
/* Animations */
|
|
.animate-item {
|
|
opacity: 0;
|
|
will-change: transform, opacity;
|
|
transition: all 0.7s cubic-bezier(0.25, 1, 0.5, 1);
|
|
}
|
|
|
|
.fade-up-init { transform: translateY(30px); }
|
|
.fade-in-init { transform: scale(0.98); }
|
|
.animate-item.animated { opacity: 1; transform: translate(0) scale(1); }
|
|
</style>
|
|
|
|
<!-- HERO SECTION -->
|
|
@php
|
|
$studentHeroSlides = [
|
|
'https://images.pexels.com/photos/3802510/pexels-photo-3802510.jpeg',
|
|
'https://images.unsplash.com/photo-1517524206127-48bbd363f3d7?auto=format&fit=crop&w=1600&q=80',
|
|
'https://images.unsplash.com/photo-1553440569-bcc63803a83d?auto=format&fit=crop&w=1600&q=80',
|
|
'https://images.unsplash.com/photo-1503376780353-7e6692767b70?auto=format&fit=crop&w=1600&q=80',
|
|
'https://images.unsplash.com/photo-1581093803931-46e730e7622e?auto=format&fit=crop&w=1600&q=80',
|
|
];
|
|
@endphp
|
|
<section class="hero">
|
|
<div class="hero-slideshow" aria-hidden="true">
|
|
@foreach($studentHeroSlides as $index => $slideImage)
|
|
<div class="hero-slide {{ $index === 0 ? 'active' : '' }}" style="background-image: url('{{ $slideImage }}');"></div>
|
|
@endforeach
|
|
</div>
|
|
<div class="hero-overlay" aria-hidden="true"></div>
|
|
<div class="hero-dots" aria-hidden="true">
|
|
@foreach($studentHeroSlides as $index => $slideImage)
|
|
<button type="button" class="hero-dot {{ $index === 0 ? 'active' : '' }}" data-slide-index="{{ $index }}" aria-label="Show slide {{ $index + 1 }}"></button>
|
|
@endforeach
|
|
</div>
|
|
<div class="container py-4">
|
|
<div class="animate-item animated fade-up-init">
|
|
<span class="hero-badge"><i class="fa-solid fa-graduation-cap"></i> Student Academic Portal</span>
|
|
<h1 class="fw-bold">Student Portal & Learning Hub</h1>
|
|
<p>
|
|
Your central gateway to enrolled courses, lecture timetables, assignment submissions,
|
|
examination results, and academic services.
|
|
</p>
|
|
|
|
<div class="d-flex flex-wrap justify-content-center gap-3 mt-4">
|
|
<button onclick="studentlogin()" class="btn btn-portal">
|
|
<i class="fa-solid fa-right-to-bracket me-2"></i>Login to Portal
|
|
</button>
|
|
<a href="#student-services" class="btn btn-hero-outline">
|
|
<i class="fa-solid fa-compass me-2"></i>Explore Services
|
|
</a>
|
|
</div>
|
|
|
|
<div class="hero-quick-stats">
|
|
<span class="hero-quick-stat"><i class="fa-solid fa-circle-check"></i> 24/7 Portal Access</span>
|
|
<span class="hero-quick-stat"><i class="fa-solid fa-shield-halved"></i> Encrypted SSL Auth</span>
|
|
<span class="hero-quick-stat"><i class="fa-solid fa-grid-2"></i> 6 Core Services</span>
|
|
<span class="hero-quick-stat"><i class="fa-solid fa-bell"></i> Real-Time Notices</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- SERVICES SECTION -->
|
|
<section id="student-services" class="py-5 overflow-hidden">
|
|
<div class="container py-3">
|
|
|
|
<!-- Header & Category Filters -->
|
|
<div class="text-center services-header animate-item fade-up-init">
|
|
<span class="services-eyebrow">Academic Gateway</span>
|
|
<h2 class="fw-bold display-6">Student Services</h2>
|
|
<p class="text-muted fs-6 max-width-600 mx-auto">
|
|
Everything you need to navigate your studies, track progress, and manage academic records.
|
|
</p>
|
|
|
|
<div class="filter-pills">
|
|
<button type="button" class="filter-btn active" data-filter="all">All Services</button>
|
|
<button type="button" class="filter-btn" data-filter="academics">Academics & Modules</button>
|
|
<button type="button" class="filter-btn" data-filter="schedule">Schedule & Exams</button>
|
|
<button type="button" class="filter-btn" data-filter="finance">Finances & Profile</button>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Services Grid Cards -->
|
|
<div class="row g-4 animate-item fade-in-init" id="servicesGrid">
|
|
|
|
<!-- 1. My Courses -->
|
|
<div class="col-lg-4 col-md-6 service-item" data-category="academics">
|
|
<div class="portal-card" onclick="studentlogin()">
|
|
<span class="portal-card-tag">Academic</span>
|
|
<div class="portal-icon-wrapper icon-theme-courses">
|
|
<i class="fa-solid fa-book-open-reader"></i>
|
|
</div>
|
|
<h4 class="text-center">My Courses</h4>
|
|
<p class="text-center">Access enrolled course modules, lecture slides, video tutorials, and study resources.</p>
|
|
<span class="portal-access-hint">Open Course Dashboard <i class="fa-solid fa-arrow-right"></i></span>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 2. Class Timetable -->
|
|
<div class="col-lg-4 col-md-6 service-item" data-category="schedule">
|
|
<div class="portal-card" onclick="studentlogin()">
|
|
<span class="portal-card-tag">Schedule</span>
|
|
<div class="portal-icon-wrapper icon-theme-schedule">
|
|
<i class="fa-solid fa-calendar-week"></i>
|
|
</div>
|
|
<h4 class="text-center">Class Timetable</h4>
|
|
<p class="text-center">Check weekly lecture schedules, lab practical sessions, and room allocation updates.</p>
|
|
<span class="portal-access-hint">View Weekly Schedule <i class="fa-solid fa-arrow-right"></i></span>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 3. Assignments -->
|
|
<div class="col-lg-4 col-md-6 service-item" data-category="academics">
|
|
<div class="portal-card" onclick="studentlogin()">
|
|
<span class="portal-card-tag">Tasks</span>
|
|
<div class="portal-icon-wrapper icon-theme-assignments">
|
|
<i class="fa-solid fa-list-check"></i>
|
|
</div>
|
|
<h4 class="text-center">Assignments</h4>
|
|
<p class="text-center">Submit coursework online, check upcoming submission deadlines, and review lecturer feedback.</p>
|
|
<span class="portal-access-hint">Manage Submissions <i class="fa-solid fa-arrow-right"></i></span>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 4. Exam Results -->
|
|
<div class="col-lg-4 col-md-6 service-item" data-category="schedule">
|
|
<div class="portal-card" onclick="studentlogin()">
|
|
<span class="portal-card-tag">Grades</span>
|
|
<div class="portal-icon-wrapper icon-theme-results">
|
|
<i class="fa-solid fa-award"></i>
|
|
</div>
|
|
<h4 class="text-center">Exam Results</h4>
|
|
<p class="text-center">View semester GPA, final examination marks, and official academic transcript summaries.</p>
|
|
<span class="portal-access-hint">Check Exam Marks <i class="fa-solid fa-arrow-right"></i></span>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 5. Fee Payments -->
|
|
<div class="col-lg-4 col-md-6 service-item" data-category="finance">
|
|
<div class="portal-card" onclick="studentlogin()">
|
|
<span class="portal-card-tag">Finance</span>
|
|
<div class="portal-icon-wrapper icon-theme-payments">
|
|
<i class="fa-solid fa-wallet"></i>
|
|
</div>
|
|
<h4 class="text-center">Fee Payments</h4>
|
|
<p class="text-center">Review tuition fee balances, complete online payments securely, and download official receipts.</p>
|
|
<span class="portal-access-hint">Payment Portal <i class="fa-solid fa-arrow-right"></i></span>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 6. Student Profile -->
|
|
<div class="col-lg-4 col-md-6 service-item" data-category="finance">
|
|
<div class="portal-card" onclick="studentlogin()">
|
|
<span class="portal-card-tag">Account</span>
|
|
<div class="portal-icon-wrapper icon-theme-profile">
|
|
<i class="fa-solid fa-user-gear"></i>
|
|
</div>
|
|
<h4 class="text-center">Student Profile</h4>
|
|
<p class="text-center">Update personal contact info, change password credentials, and manage security PIN settings.</p>
|
|
<span class="portal-access-hint">Manage Account <i class="fa-solid fa-arrow-right"></i></span>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- ANNOUNCEMENTS & QUICK DOWNLOADS DUAL SECTION -->
|
|
<section class="py-5 dual-section">
|
|
<div class="container py-3">
|
|
<div class="row g-4">
|
|
|
|
<!-- Left Column: Announcements & Notices -->
|
|
<div class="col-lg-7 animate-item fade-up-init">
|
|
<div class="d-flex align-items-center justify-content-between mb-4">
|
|
<div>
|
|
<span class="text-primary fw-bold small text-uppercase tracking-wider">Updates Feed</span>
|
|
<h3 class="fw-bold m-0">Campus Announcements</h3>
|
|
</div>
|
|
<span class="badge bg-danger rounded-pill px-3 py-2"><i class="fa-solid fa-bolt me-1"></i> Live</span>
|
|
</div>
|
|
|
|
<div class="d-flex flex-column gap-3">
|
|
|
|
<div class="notice-card d-flex align-items-start gap-3">
|
|
<div class="flex-shrink-0">
|
|
<span class="notice-badge badge-exam">Exam</span>
|
|
</div>
|
|
<div>
|
|
<div class="d-flex align-items-center gap-2 mb-1">
|
|
<h6 class="fw-bold mb-0">Final Semester Examination Timetable Published</h6>
|
|
<small class="text-muted ms-auto">Today</small>
|
|
</div>
|
|
<p class="text-muted small mb-0">The final examination schedule for the current semester is now available. Log in to your portal to check your assigned exam hall and seats.</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="notice-card d-flex align-items-start gap-3">
|
|
<div class="flex-shrink-0">
|
|
<span class="notice-badge badge-assignment">Task</span>
|
|
</div>
|
|
<div>
|
|
<div class="d-flex align-items-center gap-2 mb-1">
|
|
<h6 class="fw-bold mb-0">Automotive Diagnostics Project Submission Deadline</h6>
|
|
<small class="text-muted ms-auto">2 Days Left</small>
|
|
</div>
|
|
<p class="text-muted small mb-0">All year 2 students must upload their practical diagnostic reports before 11:59 PM via the Assignments portal.</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="notice-card d-flex align-items-start gap-3">
|
|
<div class="flex-shrink-0">
|
|
<span class="notice-badge badge-event">Workshop</span>
|
|
</div>
|
|
<div>
|
|
<div class="d-flex align-items-center gap-2 mb-1">
|
|
<h6 class="fw-bold mb-0">Hybrid & EV High Voltage Safety Seminar</h6>
|
|
<small class="text-muted ms-auto">Aug 18</small>
|
|
</div>
|
|
<p class="text-muted small mb-0">Special guest lecture by senior EV powertrain engineers. Attendance is mandatory for advanced diploma students.</p>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Right Column: Quick Downloads & Resources -->
|
|
@php
|
|
$isStudentLoggedIn = session()->has('student_id') || session()->has('student_log_id') || Auth::check();
|
|
@endphp
|
|
<div class="col-lg-5 animate-item fade-up-init">
|
|
<div class="quick-link-box">
|
|
<div class="mb-4 pb-2 border-bottom d-flex align-items-center justify-content-between">
|
|
<div>
|
|
<span class="text-primary fw-bold small text-uppercase tracking-wider">Fast Access</span>
|
|
<h3 class="fw-bold m-0 text-dark">Quick Downloads</h3>
|
|
</div>
|
|
@if($isStudentLoggedIn)
|
|
<span class="badge bg-success rounded-pill px-3 py-2"><i class="fa-solid fa-circle-check me-1"></i> Access Granted</span>
|
|
@else
|
|
<span class="badge bg-secondary rounded-pill px-3 py-2"><i class="fa-solid fa-lock me-1"></i> Login Required</span>
|
|
@endif
|
|
</div>
|
|
|
|
<div class="d-flex flex-column gap-3">
|
|
|
|
<!-- Item 1: Academic Calendar PDF -->
|
|
<a href="{{ $isStudentLoggedIn ? route('student.download.calendar') : '#' }}"
|
|
class="quick-list-item"
|
|
@if(!$isStudentLoggedIn) onclick="studentlogin('Please log in to your student portal account to download the Academic Calendar PDF.'); return false;" @endif
|
|
title="Download Academic Calendar PDF">
|
|
<div class="d-flex align-items-center gap-3">
|
|
<div class="quick-link-icon-circle">
|
|
<i class="fa-solid fa-calendar-days"></i>
|
|
</div>
|
|
<div>
|
|
<h6 class="fw-bold mb-0">Academic Calendar</h6>
|
|
<small class="text-muted">Semester dates & holidays (PDF)</small>
|
|
</div>
|
|
</div>
|
|
<span class="btn btn-sm btn-outline-primary rounded-pill px-3"><i class="fa-solid fa-file-pdf me-1"></i> PDF</span>
|
|
</a>
|
|
|
|
<!-- Item 2: Student Handbook PDF -->
|
|
<a href="{{ $isStudentLoggedIn ? route('student.download.handbook') : '#' }}"
|
|
class="quick-list-item"
|
|
@if(!$isStudentLoggedIn) onclick="studentlogin('Please log in to your student portal account to download the Student Handbook PDF.'); return false;" @endif
|
|
title="Download Student Handbook PDF">
|
|
<div class="d-flex align-items-center gap-3">
|
|
<div class="quick-link-icon-circle">
|
|
<i class="fa-solid fa-book-bookmark"></i>
|
|
</div>
|
|
<div>
|
|
<h6 class="fw-bold mb-0">Student Handbook</h6>
|
|
<small class="text-muted">Rules & academic policies (PDF)</small>
|
|
</div>
|
|
</div>
|
|
<span class="btn btn-sm btn-outline-primary rounded-pill px-3"><i class="fa-solid fa-file-pdf me-1"></i> PDF</span>
|
|
</a>
|
|
|
|
<!-- Item 3: Exam Code of Conduct PDF -->
|
|
<a href="{{ $isStudentLoggedIn ? route('student.download.examcode') : '#' }}"
|
|
class="quick-list-item"
|
|
@if(!$isStudentLoggedIn) onclick="studentlogin('Please log in to your student portal account to download the Exam Regulations PDF.'); return false;" @endif
|
|
title="Download Exam Code of Conduct PDF">
|
|
<div class="d-flex align-items-center gap-3">
|
|
<div class="quick-link-icon-circle">
|
|
<i class="fa-solid fa-file-shield"></i>
|
|
</div>
|
|
<div>
|
|
<h6 class="fw-bold mb-0">Exam Code of Conduct</h6>
|
|
<small class="text-muted">Rules & exam guidelines (PDF)</small>
|
|
</div>
|
|
</div>
|
|
<span class="btn btn-sm btn-outline-primary rounded-pill px-3"><i class="fa-solid fa-file-pdf me-1"></i> PDF</span>
|
|
</a>
|
|
|
|
<!-- Item 4: Student Helpdesk Support Guide PDF -->
|
|
<a href="{{ $isStudentLoggedIn ? route('student.download.helpdesk') : '#' }}"
|
|
class="quick-list-item"
|
|
@if(!$isStudentLoggedIn) onclick="studentlogin('Please log in to your student portal account to download the Support Guide PDF.'); return false;" @endif
|
|
title="Download Support Guide PDF">
|
|
<div class="d-flex align-items-center gap-3">
|
|
<div class="quick-link-icon-circle">
|
|
<i class="fa-solid fa-headset"></i>
|
|
</div>
|
|
<div>
|
|
<h6 class="fw-bold mb-0">Student Helpdesk Support</h6>
|
|
<small class="text-muted">Technical & support guide (PDF)</small>
|
|
</div>
|
|
</div>
|
|
<span class="btn btn-sm btn-outline-primary rounded-pill px-3"><i class="fa-solid fa-file-pdf me-1"></i> PDF</span>
|
|
</a>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- BOTTOM CTA BANNER -->
|
|
<section class="py-5 bg-light">
|
|
<div class="container py-2 animate-item fade-up-init">
|
|
<div class="cta-banner text-center">
|
|
<span class="badge bg-warning text-dark px-3 py-2 rounded-pill mb-3 font-weight-bold text-uppercase"><i class="fa-solid fa-lock me-1"></i> Authorized Access Only</span>
|
|
<h2 class="fw-bold display-6 mb-3">Ready to Access Your Student Account?</h2>
|
|
<p class="text-light fs-5 max-width-600 mx-auto mb-4" style="opacity: 0.85;">
|
|
Log in to view your courses, check schedules, submit assignments, and track exam results.
|
|
</p>
|
|
<button onclick="studentlogin()" class="btn btn-portal">
|
|
<i class="fa-solid fa-right-to-bracket me-2"></i>Login to Student Portal
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- LOGIN MODAL -->
|
|
<div class="modal fade" id="studentLoginModal" tabindex="-1" aria-labelledby="studentLoginModalLabel" aria-hidden="true">
|
|
<div class="modal-dialog modal-dialog-centered">
|
|
<div class="modal-content">
|
|
<div class="modal-header d-flex flex-column align-items-center position-relative text-center">
|
|
<button type="button" class="btn-close btn-close-white position-absolute top-0 end-0 m-3" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
<div class="modal-login-icon">
|
|
<i class="fa-solid fa-lock"></i>
|
|
</div>
|
|
<h4 class="fw-bold text-white mb-1" id="studentLoginModalLabel">
|
|
Student Portal Login
|
|
</h4>
|
|
<p class="text-light small mb-0" style="opacity: 0.75;">Enter your institutional credentials to authenticate</p>
|
|
</div>
|
|
<form action="{{ route('student.login.submit') }}" method="POST" id="studentLoginForm">
|
|
@csrf
|
|
|
|
<div class="modal-body">
|
|
<div class="mb-3">
|
|
<label for="username" class="form-label">Username / Student ID</label>
|
|
<div class="input-group">
|
|
<span class="input-group-text"><i class="fa-solid fa-user-graduate"></i></span>
|
|
<input type="text" name="username" id="username" class="form-control" placeholder="e.g. STU-2026-0042" required>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="mb-3">
|
|
<label for="password" class="form-label">Password</label>
|
|
<div class="input-group">
|
|
<span class="input-group-text"><i class="fa-solid fa-key"></i></span>
|
|
<input type="password" name="password" id="password" class="form-control" placeholder="Enter your password" required>
|
|
<button class="btn toggle-password-btn" type="button" onclick="togglePasswordVisibility('password', 'togglePasswordIcon')">
|
|
<i class="fa-solid fa-eye" id="togglePasswordIcon"></i>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="mb-3">
|
|
<label for="pin" class="form-label">Security PIN</label>
|
|
<div class="input-group">
|
|
<span class="input-group-text"><i class="fa-solid fa-shield-halved"></i></span>
|
|
<input type="password" name="pin" id="pin" class="form-control" maxlength="6" placeholder="Enter 4-6 digit PIN" required>
|
|
<button class="btn toggle-password-btn" type="button" onclick="togglePasswordVisibility('pin', 'togglePinIcon')">
|
|
<i class="fa-solid fa-eye" id="togglePinIcon"></i>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="modal-footer">
|
|
<button type="submit" class="btn btn-modal-login w-100"> Authenticate & Login </button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
function togglePasswordVisibility(inputId, iconId) {
|
|
const input = document.getElementById(inputId);
|
|
const icon = document.getElementById(iconId);
|
|
if (!input || !icon) return;
|
|
|
|
if (input.type === 'password') {
|
|
input.type = 'text';
|
|
icon.classList.remove('fa-eye');
|
|
icon.classList.add('fa-eye-slash');
|
|
} else {
|
|
input.type = 'password';
|
|
icon.classList.remove('fa-eye-slash');
|
|
icon.classList.add('fa-eye');
|
|
}
|
|
}
|
|
|
|
function studentlogin(customMsg) {
|
|
const subTitle = document.querySelector('#studentLoginModal .modal-header p');
|
|
if (subTitle) {
|
|
if (customMsg) {
|
|
subTitle.textContent = customMsg;
|
|
subTitle.classList.add('text-warning');
|
|
subTitle.style.fontWeight = '600';
|
|
} else {
|
|
subTitle.textContent = 'Enter your institutional credentials to authenticate';
|
|
subTitle.classList.remove('text-warning');
|
|
subTitle.style.fontWeight = 'normal';
|
|
}
|
|
}
|
|
var myModal = new bootstrap.Modal(document.getElementById('studentLoginModal'));
|
|
myModal.show();
|
|
}
|
|
|
|
document.addEventListener('DOMContentLoaded', function () {
|
|
// 1. Hero Background Slideshow
|
|
const heroSlides = document.querySelectorAll('.hero-slide');
|
|
const heroDots = document.querySelectorAll('.hero-dot');
|
|
if (heroSlides.length > 1) {
|
|
let activeSlide = 0;
|
|
let slideTimer;
|
|
|
|
const goToSlide = (index) => {
|
|
heroSlides[activeSlide].classList.remove('active');
|
|
heroDots[activeSlide]?.classList.remove('active');
|
|
activeSlide = index;
|
|
heroSlides[activeSlide].classList.add('active');
|
|
heroDots[activeSlide]?.classList.add('active');
|
|
};
|
|
|
|
const startSlideTimer = () => {
|
|
clearInterval(slideTimer);
|
|
slideTimer = setInterval(() => {
|
|
goToSlide((activeSlide + 1) % heroSlides.length);
|
|
}, 5500);
|
|
};
|
|
|
|
heroDots.forEach(dot => {
|
|
dot.addEventListener('click', () => {
|
|
goToSlide(parseInt(dot.dataset.slideIndex, 10));
|
|
startSlideTimer();
|
|
});
|
|
});
|
|
|
|
startSlideTimer();
|
|
}
|
|
|
|
// 2. Services Filter Tabs Logic
|
|
const filterBtns = document.querySelectorAll('.filter-btn');
|
|
const serviceItems = document.querySelectorAll('.service-item');
|
|
|
|
filterBtns.forEach(btn => {
|
|
btn.addEventListener('click', function() {
|
|
filterBtns.forEach(b => b.classList.remove('active'));
|
|
this.classList.add('active');
|
|
|
|
const filterValue = this.getAttribute('data-filter');
|
|
|
|
serviceItems.forEach(item => {
|
|
if (filterValue === 'all' || item.getAttribute('data-category') === filterValue) {
|
|
item.style.display = 'block';
|
|
setTimeout(() => {
|
|
item.style.opacity = '1';
|
|
item.style.transform = 'scale(1)';
|
|
}, 50);
|
|
} else {
|
|
item.style.opacity = '0';
|
|
item.style.transform = 'scale(0.95)';
|
|
setTimeout(() => {
|
|
item.style.display = 'none';
|
|
}, 300);
|
|
}
|
|
});
|
|
});
|
|
});
|
|
|
|
// 3. Scroll Reveal Observer
|
|
const animatedElements = document.querySelectorAll('.animate-item');
|
|
const observer = new IntersectionObserver((entries) => {
|
|
entries.forEach(entry => {
|
|
if (entry.isIntersecting) {
|
|
entry.target.classList.add('animated');
|
|
observer.unobserve(entry.target);
|
|
}
|
|
});
|
|
}, {
|
|
threshold: 0.10
|
|
});
|
|
|
|
animatedElements.forEach(el => observer.observe(el));
|
|
});
|
|
</script>
|
|
|
|
@endsection |