Compare commits

..

No commits in common. "97cf0f72d25b272feabc9dd6cdcf4e2a3510f3d3" and "f5df67c87d7ff6bcbcff2bbe03f03454c1cae485" have entirely different histories.

16 changed files with 1826 additions and 4328 deletions

View File

@ -1,333 +0,0 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Dompdf\Dompdf;
use Dompdf\Options;
class DocumentDownloadController extends Controller
{
/**
* Check if student is authenticated via session or auth guard
*/
private function isAuthenticated(Request $request)
{
return $request->session()->has('student_id') ||
$request->session()->has('student_log_id') ||
auth()->check();
}
/**
* Academic Calendar PDF Download
*/
public function downloadAcademicCalendar(Request $request)
{
if (!$this->isAuthenticated($request)) {
return redirect()->route('students')->with('error', 'Please login first to download official academic documents!');
}
$title = "Official Academic Calendar 2026";
$subtitle = "Semester Schedules, Lecture Weeks, Holidays & Important Deadlines";
$refNo = "REF: AC-2026-CAL";
$tables = [
[
'title' => '1. SEMESTER DATES & LECTURE WEEKS',
'headers' => ['Academic Event / Phase', 'Start Date', 'End Date', 'Status'],
'rows' => [
['Semester 1 Commencement', 'January 15, 2026', 'March 20, 2026', 'Active'],
['Mid-Semester Recess', 'March 21, 2026', 'March 29, 2026', 'Scheduled'],
['Practical Lab Intensive Weeks', 'March 30, 2026', 'May 15, 2026', 'Scheduled'],
['Semester 1 Final Examinations', 'June 01, 2026', 'June 20, 2026', 'Scheduled'],
['Semester 2 Commencement', 'July 15, 2026', 'November 30, 2026', 'Upcoming']
]
],
[
'title' => '2. INSTITUTIONAL & PUBLIC HOLIDAYS',
'headers' => ['Holiday / Event Name', 'Date(s)', 'Impact on Classes'],
'rows' => [
['National Independence Day', 'February 04, 2026', 'Campus Closed'],
['Sinhala & Tamil New Year Vacation', 'April 12 - April 18, 2026', 'No Lectures / Workshops'],
['Vesak Festival Holiday', 'May 23 - May 25, 2026', 'Campus Closed'],
['Annual Automotive Tech Symposium', 'August 20, 2026', 'Special Event (Mandatory Attendance)']
]
],
[
'title' => '3. CRITICAL ACADEMIC DEADLINES',
'headers' => ['Deadline Description', 'Cut-off Date', 'Action Required'],
'rows' => [
['Course Module Drop / Add Period', 'February 10, 2026', 'Submit online form'],
['Mid-Term Assignment 1 Submission', 'March 18, 2026', 'Upload via Portal'],
['Examination Fee Clearance', 'May 15, 2026', 'Settle at Finance Office']
]
]
];
return $this->renderPdf($title, $subtitle, $refNo, $tables, "Academic_Calendar_2026.pdf");
}
/**
* Student Handbook PDF Download
*/
public function downloadStudentHandbook(Request $request)
{
if (!$this->isAuthenticated($request)) {
return redirect()->route('students')->with('error', 'Please login first to download official academic documents!');
}
$title = "Student Handbook & Code of Conduct";
$subtitle = "Academic Regulations, Workshop Safety Rules & Grading Policies";
$refNo = "REF: HB-2026-REG";
$tables = [
[
'title' => '1. ATTENDANCE & ACADEMIC INTEGRITY POLICIES',
'headers' => ['Regulation Category', 'Requirement / Policy Detail', 'Penalty for Violation'],
'rows' => [
['Class Attendance', 'Minimum 80% attendance required for practical labs and lectures.', 'Barred from Final Exams'],
['Academic Honesty', 'Zero tolerance for plagiarism, cheating, or proxy attendance.', 'Disciplinary Hearing & Grade F'],
['Enrollment Status', 'Students must maintain continuous registration every term.', 'De-registration after 30 days']
]
],
[
'title' => '2. WORKSHOP & HIGH-VOLTAGE LAB SAFETY RULES',
'headers' => ['Safety Protocol', 'Required Equipment / PPE', 'Compliance Rule'],
'rows' => [
['General Workshop PPE', 'Safety boots (steel toe), protective eyewear, lab coats', 'Mandatory at all times'],
['Hybrid / EV High Voltage Labs', 'Class 0 rated insulated safety gloves (1000V rated)', 'Strict supervision required'],
['Vehicle Lift Operation', 'Hydraulic lift locks must be verified before underbody work', 'Never operate alone']
]
],
[
'title' => '3. ACADEMIC GRADING SCHEME',
'headers' => ['Grade', 'Percentage Range', 'GPA Value', 'Classification'],
'rows' => [
['A+', '90% - 100%', '4.00', 'High Distinction'],
['A', '80% - 89%', '3.70', 'Distinction'],
['B', '70% - 79%', '3.00', 'Credit Pass'],
['C', '55% - 69%', '2.00', 'Pass'],
['F', 'Below 50%', '0.00', 'Fail (Re-sit Required)']
]
]
];
return $this->renderPdf($title, $subtitle, $refNo, $tables, "Student_Handbook_2026.pdf");
}
/**
* Exam Code of Conduct PDF Download
*/
public function downloadExamCode(Request $request)
{
if (!$this->isAuthenticated($request)) {
return redirect()->route('students')->with('error', 'Please login first to download official academic documents!');
}
$title = "Exam Code of Conduct & Rules";
$subtitle = "Examination Hall Admission, Practical Station Rules & Disciplinary Code";
$refNo = "REF: EX-2026-RULES";
$tables = [
[
'title' => '1. EXAMINATION HALL ADMISSION RULES',
'headers' => ['Rule Item', 'Requirement Detail', 'Enforcement'],
'rows' => [
['Student Identification', 'Valid Student ID Card & Exam Admission Ticket required.', 'Strictly Enforced'],
['Entry Time Limit', 'Candidates admitted up to 30 minutes after commencement.', 'No extra time given'],
['Prohibited Items', 'Mobile phones, smartwatches, programmable notes, bags.', 'Immediate Confiscation']
]
],
[
'title' => '2. PRACTICAL DIAGNOSTIC EXAMINATIONS',
'headers' => ['Station Requirement', 'Procedure Standard', 'Evaluator Note'],
'rows' => [
['Station Attire', 'Clean workshop overall and non-slip safety shoes required.', 'Visual inspection at entry'],
['Tool Calibration', 'Verify diagnostic scan tools before beginning fault-finding.', 'Instructor verification'],
['Safety Shutoff', 'Always disengage high-voltage battery service plug first.', 'Immediate disqualification if missed']
]
]
];
return $this->renderPdf($title, $subtitle, $refNo, $tables, "Exam_Code_of_Conduct_2026.pdf");
}
/**
* Student Helpdesk Guide PDF Download
*/
public function downloadHelpdeskGuide(Request $request)
{
if (!$this->isAuthenticated($request)) {
return redirect()->route('students')->with('error', 'Please login first to download official academic documents!');
}
$title = "Student Helpdesk & Support Directory";
$subtitle = "Portal Assistance, Technical Enquiries & Department Contact List";
$refNo = "REF: HD-2026-SUPP";
$tables = [
[
'title' => '1. PORTAL & IT SUPPORT CHANNELS',
'headers' => ['Support Issue', 'Resolution Method', 'Response Time'],
'rows' => [
['Password & PIN Reset', 'Self-service PIN reset or visit IT Help Desk (Level 2)', 'Instant / 15 Mins'],
['Module Material Access', 'Email portal-support@autoedu.lk with Student ID', 'Within 2 Hours'],
['Wi-Fi & Email Setup', 'Visit Student IT Counter with Student ID Card', 'Immediate']
]
],
[
'title' => '2. DEPARTMENT CONTACT DIRECTORY',
'headers' => ['Department Name', 'Location', 'Extension', 'Official Email'],
'rows' => [
['Student Affairs & Registration', 'Admin Block - Ground Floor', 'Ext. 101', 'students@autoedu.lk'],
['Finance & Tuition Payments', 'Admin Block - Room 104', 'Ext. 104', 'finance@autoedu.lk'],
['Examinations & Results Branch', 'Academic Wing - Room 202', 'Ext. 108', 'exams@autoedu.lk'],
['Automotive Workshop Office', 'Lab Complex - Block B', 'Ext. 112', 'workshop@autoedu.lk']
]
]
];
return $this->renderPdf($title, $subtitle, $refNo, $tables, "Student_Helpdesk_Support_Guide.pdf");
}
/**
* Render HTML to DomPDF output
*/
private function renderPdf($title, $subtitle, $refNo, $tables, $filename)
{
$studentName = session('student_name', 'Authenticated Student');
$studentId = session('student_id', 'STU-2026-0042');
$dateStr = date('F d, Y');
$tablesHtml = '';
foreach ($tables as $table) {
$tablesHtml .= '<div class="section-header">' . htmlspecialchars($table['title']) . '</div>';
$tablesHtml .= '<table class="content-table"><thead><tr>';
foreach ($table['headers'] as $th) {
$tablesHtml .= '<th>' . htmlspecialchars($th) . '</th>';
}
$tablesHtml .= '</tr></thead><tbody>';
foreach ($table['rows'] as $row) {
$tablesHtml .= '<tr>';
foreach ($row as $cell) {
$tablesHtml .= '<td>' . htmlspecialchars($cell) . '</td>';
}
$tablesHtml .= '</tr>';
}
$tablesHtml .= 'tbody></table>';
}
$html = '
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>' . htmlspecialchars($title) . '</title>
<style>
@page { margin: 25px 35px; }
body { font-family: "Helvetica", "Arial", sans-serif; color: #1E293B; font-size: 11px; line-height: 1.5; }
.header-table { width: 100%; border-collapse: collapse; margin-bottom: 15px; border-bottom: 3px solid #3E51B8; padding-bottom: 10px; }
.logo-title { font-size: 20px; font-weight: bold; color: #0F172A; text-transform: uppercase; letter-spacing: 0.5px; }
.logo-sub { font-size: 10px; color: #64748B; margin-top: 3px; font-weight: normal; }
.meta-badge { background: #0F172A; color: #FFE618; font-size: 9.5px; font-weight: bold; padding: 4px 10px; border-radius: 4px; display: inline-block; text-align: right; }
.doc-banner { background: #3E51B8; color: #ffffff; padding: 14px 18px; border-radius: 6px; margin-bottom: 18px; }
.doc-banner h1 { margin: 0; font-size: 16px; font-weight: bold; text-transform: uppercase; }
.doc-banner p { margin: 4px 0 0 0; font-size: 10.5px; color: #E2E8F0; }
.student-info-bar { background: #F8FAFC; border: 1px solid #E2E8F0; border-radius: 6px; padding: 8px 14px; margin-bottom: 18px; width: 100%; border-collapse: collapse; }
.student-info-bar td { font-size: 10px; color: #334155; }
.student-info-bar td strong { color: #0F172A; }
.section-header { background: #F1F5F9; border-left: 4px solid #BC1A1A; padding: 6px 10px; font-size: 11.5px; font-weight: bold; color: #0F172A; margin-top: 16px; margin-bottom: 8px; text-transform: uppercase; }
.content-table { width: 100%; border-collapse: collapse; margin-bottom: 14px; }
.content-table th { background: #3E51B8; color: #ffffff; padding: 7px 10px; text-align: left; font-size: 10px; text-transform: uppercase; font-weight: bold; }
.content-table td { padding: 7px 10px; border-bottom: 1px solid #E2E8F0; font-size: 10.5px; color: #334155; }
.content-table tr:nth-child(even) td { background: #F8FAFC; }
.footer-box { margin-top: 25px; border-top: 1px solid #CBD5E1; padding-top: 10px; width: 100%; border-collapse: collapse; }
.footer-box td { font-size: 9px; color: #64748B; }
.stamp-box { border: 1.5px dashed #94A3B8; border-radius: 6px; padding: 8px; text-align: center; color: #475569; font-size: 8.5px; font-weight: bold; }
</style>
</head>
<body>
<!-- Header -->
<table class="header-table">
<tr>
<td>
<div class="logo-title">AutoEdu Automotive Academy</div>
<div class="logo-sub">Department of Automotive Engineering & Applied Research | ISO 9001 Certified</div>
</td>
<td style="text-align: right;">
<div class="meta-badge">' . htmlspecialchars($refNo) . '</div>
</td>
</tr>
</table>
<!-- Document Banner -->
<div class="doc-banner">
<h1>' . htmlspecialchars($title) . '</h1>
<p>' . htmlspecialchars($subtitle) . '</p>
</div>
<!-- Student Info Bar -->
<table class="student-info-bar">
<tr>
<td>Issued To: <strong>' . htmlspecialchars($studentName) . '</strong></td>
<td>Student ID: <strong>' . htmlspecialchars($studentId) . '</strong></td>
<td style="text-align: right;">Issue Date: <strong>' . htmlspecialchars($dateStr) . '</strong></td>
</tr>
</table>
<!-- Main Content Tables -->
' . $tablesHtml . '
<!-- Footer -->
<table class="footer-box">
<tr>
<td style="vertical-align: top;">
<strong>AutoEdu Automotive Engineering Institute</strong><br>
Main Campus, Academic Complex, Colombo, Sri Lanka<br>
Hotline: +94 11 234 5678 | Email: support@autoedu.lk | Web: www.autoedu.lk<br>
<em>Notice: This is an official computer-generated document verified for active student session.</em>
</td>
<td style="text-align: right; vertical-align: top; width: 150px;">
<div class="stamp-box">
<span style="color: #BC1A1A; font-weight: bold;">[ OFFICIAL SEAL ]</span><br>
AUTHENTICATED DIGITAL COPY
</div>
</td>
</tr>
</table>
</body>
</html>
';
try {
$options = new Options();
$options->set('isHtml5ParserEnabled', true);
$options->set('isRemoteEnabled', true);
$dompdf = new Dompdf($options);
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
return response($dompdf->output(), 200, [
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'attachment; filename="' . $filename . '"',
'Cache-Control' => 'private, max-age=0, must-revalidate',
'Pragma' => 'public'
]);
} catch (\Exception $e) {
// Fallback response if rendering fails
return response($html, 200, [
'Content-Type' => 'text/html',
]);
}
}
}

View File

@ -80,126 +80,14 @@ class StudentPortalController extends Controller
return view('StudentProfile', compact('student')); return view('StudentProfile', compact('student'));
} }
public function updateProfile(Request $request) public function studentlogout(Request $request)
{ {
$log_id = $request->session()->get('student_log_id'); $request->session()->forget(['student_id', 'student_log_id', 'student_name']);
$student_code = $request->session()->get('student_id'); $request->session()->invalidate();
$request->session()->regenerateToken();
if (!$log_id && !$student_code) { return response()->json(['success' => true]);
return redirect('/')->with('error', 'Please login first!');
} }
$request->validate([
'full_name' => 'required|string|max:255',
'nic_passport' => 'nullable|string|max:100',
'date_of_birth' => 'nullable|date',
'gender' => 'nullable|string|max:20',
'email' => 'required|email|max:255',
'phone' => 'nullable|string|max:50',
'qualification' => 'nullable|string|max:255',
'institute' => 'nullable|string|max:255',
'year_completed' => 'nullable|string|max:50',
'profile_image' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:5120',
]);
$student = DB::table('student_details')
->where(function ($query) use ($log_id, $student_code) {
if ($log_id) {
$query->where('student_portal_log_id', $log_id);
}
if ($student_code) {
if ($log_id) {
$query->orWhere('student_id', $student_code);
} else {
$query->where('student_id', $student_code);
}
}
})
->first();
if (!$student) {
return redirect()->back()->with('error', 'Student profile record not found!');
}
$updateData = [
'full_name' => $request->full_name,
'nic_passport' => $request->nic_passport,
'date_of_birth' => $request->date_of_birth,
'gender' => $request->gender,
'email' => $request->email,
'phone' => $request->phone,
'qualification' => $request->qualification,
'institute' => $request->institute,
'year_completed' => $request->year_completed,
'updated_at' => now(),
];
// 1. Check if user requested to REMOVE image
if ($request->input('remove_profile_image') == '1') {
if (!empty($student->image) && file_exists(public_path($student->image))) {
@unlink(public_path($student->image));
}
$updateData['image'] = null;
}
// 2. Check if user provided CROPPED Base64 image
elseif (!empty($request->input('cropped_image_data'))) {
$base64Image = $request->input('cropped_image_data');
if (preg_match('/^data:image\/(\w+);base64,/', $base64Image, $type)) {
$data = substr($base64Image, strpos($base64Image, ',') + 1);
$type = strtolower($type[1]);
if (in_array($type, ['jpg', 'jpeg', 'gif', 'png'])) {
$data = base64_decode($data);
if ($data !== false) {
$filename = time() . '_' . uniqid() . '.png';
$destinationPath = public_path('uploads/student_images');
if (!file_exists($destinationPath)) {
mkdir($destinationPath, 0777, true);
}
file_put_contents($destinationPath . '/' . $filename, $data);
// Delete old image if existed
if (!empty($student->image) && file_exists(public_path($student->image))) {
@unlink(public_path($student->image));
}
$updateData['image'] = 'uploads/student_images/' . $filename;
}
}
}
}
// 3. Fallback to normal direct file upload
elseif ($request->hasFile('profile_image')) {
$file = $request->file('profile_image');
$filename = time() . '_' . uniqid() . '.' . $file->getClientOriginalExtension();
$destinationPath = public_path('uploads/student_images');
if (!file_exists($destinationPath)) {
mkdir($destinationPath, 0777, true);
}
$file->move($destinationPath, $filename);
if (!empty($student->image) && file_exists(public_path($student->image))) {
@unlink(public_path($student->image));
}
$updateData['image'] = 'uploads/student_images/' . $filename;
}
DB::table('student_details')
->where('id', $student->id)
->update($updateData);
if (!empty($student->student_portal_log_id)) {
DB::table('student_portal_logs')
->where('id', $student->student_portal_log_id)
->update([
'email' => $request->email,
'updated_at' => now(),
]);
}
$request->session()->put('student_name', $request->full_name);
$request->session()->put('student_email', $request->email);
return redirect()->back()->with('success', 'Profile updated successfully!');
}
} }

View File

@ -7,7 +7,6 @@
"license": "MIT", "license": "MIT",
"require": { "require": {
"php": "^8.2", "php": "^8.2",
"barryvdh/laravel-dompdf": "^3.1",
"laravel/framework": "^12.0", "laravel/framework": "^12.0",
"laravel/tinker": "^2.10.1" "laravel/tinker": "^2.10.1"
}, },

524
composer.lock generated
View File

@ -4,85 +4,8 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "bf969a713724ba1caaf90ec885c262c2", "content-hash": "53b5d56b3b7e3cbac1713e68c8850f6c",
"packages": [ "packages": [
{
"name": "barryvdh/laravel-dompdf",
"version": "v3.1.2",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-dompdf.git",
"reference": "ee3b72b19ccdf57d0243116ecb2b90261344dedc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/ee3b72b19ccdf57d0243116ecb2b90261344dedc",
"reference": "ee3b72b19ccdf57d0243116ecb2b90261344dedc",
"shasum": ""
},
"require": {
"dompdf/dompdf": "^3.0",
"illuminate/support": "^9|^10|^11|^12|^13.0",
"php": "^8.1"
},
"require-dev": {
"larastan/larastan": "^2.7|^3.0",
"orchestra/testbench": "^7|^8|^9.16|^10|^11.0",
"phpro/grumphp": "^2.5",
"squizlabs/php_codesniffer": "^3.5"
},
"type": "library",
"extra": {
"laravel": {
"aliases": {
"PDF": "Barryvdh\\DomPDF\\Facade\\Pdf",
"Pdf": "Barryvdh\\DomPDF\\Facade\\Pdf"
},
"providers": [
"Barryvdh\\DomPDF\\ServiceProvider"
]
},
"branch-alias": {
"dev-master": "3.0-dev"
}
},
"autoload": {
"psr-4": {
"Barryvdh\\DomPDF\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Barry vd. Heuvel",
"email": "barryvdh@gmail.com"
}
],
"description": "A DOMPDF Wrapper for Laravel",
"keywords": [
"dompdf",
"laravel",
"pdf"
],
"support": {
"issues": "https://github.com/barryvdh/laravel-dompdf/issues",
"source": "https://github.com/barryvdh/laravel-dompdf/tree/v3.1.2"
},
"funding": [
{
"url": "https://fruitcake.nl",
"type": "custom"
},
{
"url": "https://github.com/barryvdh",
"type": "github"
}
],
"time": "2026-02-21T08:51:10+00:00"
},
{ {
"name": "brick/math", "name": "brick/math",
"version": "0.14.8", "version": "0.14.8",
@ -454,161 +377,6 @@
], ],
"time": "2024-02-05T11:56:58+00:00" "time": "2024-02-05T11:56:58+00:00"
}, },
{
"name": "dompdf/dompdf",
"version": "v3.1.6",
"source": {
"type": "git",
"url": "https://github.com/dompdf/dompdf.git",
"reference": "6d4b4eb8500f7a786da8868ba463a71b725a4005"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/dompdf/dompdf/zipball/6d4b4eb8500f7a786da8868ba463a71b725a4005",
"reference": "6d4b4eb8500f7a786da8868ba463a71b725a4005",
"shasum": ""
},
"require": {
"dompdf/php-font-lib": "^1.0.0",
"dompdf/php-svg-lib": "^1.0.0",
"ext-dom": "*",
"ext-mbstring": "*",
"masterminds/html5": "^2.0",
"php": "^7.1 || ^8.0"
},
"require-dev": {
"ext-gd": "*",
"ext-json": "*",
"ext-zip": "*",
"mockery/mockery": "^1.3",
"phpunit/phpunit": "^7.5 || ^8 || ^9 || ^10 || ^11",
"squizlabs/php_codesniffer": "^3.5",
"symfony/process": "^4.4 || ^5.4 || ^6.2 || ^7.0"
},
"suggest": {
"ext-gd": "Needed to process images",
"ext-gmagick": "Improves image processing performance",
"ext-imagick": "Improves image processing performance",
"ext-zlib": "Needed for pdf stream compression"
},
"type": "library",
"autoload": {
"psr-4": {
"Dompdf\\": "src/"
},
"classmap": [
"lib/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"LGPL-2.1"
],
"authors": [
{
"name": "The Dompdf Community",
"homepage": "https://github.com/dompdf/dompdf/blob/master/AUTHORS.md"
}
],
"description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter",
"homepage": "https://github.com/dompdf/dompdf",
"support": {
"issues": "https://github.com/dompdf/dompdf/issues",
"source": "https://github.com/dompdf/dompdf/tree/v3.1.6"
},
"time": "2026-07-20T12:29:38+00:00"
},
{
"name": "dompdf/php-font-lib",
"version": "1.0.2",
"source": {
"type": "git",
"url": "https://github.com/dompdf/php-font-lib.git",
"reference": "a6e9a688a2a80016ac080b97be73d3e10c444c9a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/a6e9a688a2a80016ac080b97be73d3e10c444c9a",
"reference": "a6e9a688a2a80016ac080b97be73d3e10c444c9a",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
"php": "^7.1 || ^8.0"
},
"require-dev": {
"phpunit/phpunit": "^7.5 || ^8 || ^9 || ^10 || ^11 || ^12"
},
"type": "library",
"autoload": {
"psr-4": {
"FontLib\\": "src/FontLib"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"LGPL-2.1-or-later"
],
"authors": [
{
"name": "The FontLib Community",
"homepage": "https://github.com/dompdf/php-font-lib/blob/master/AUTHORS.md"
}
],
"description": "A library to read, parse, export and make subsets of different types of font files.",
"homepage": "https://github.com/dompdf/php-font-lib",
"support": {
"issues": "https://github.com/dompdf/php-font-lib/issues",
"source": "https://github.com/dompdf/php-font-lib/tree/1.0.2"
},
"time": "2026-01-20T14:10:26+00:00"
},
{
"name": "dompdf/php-svg-lib",
"version": "1.0.2",
"source": {
"type": "git",
"url": "https://github.com/dompdf/php-svg-lib.git",
"reference": "8259ffb930817e72b1ff1caef5d226501f3dfeb1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/8259ffb930817e72b1ff1caef5d226501f3dfeb1",
"reference": "8259ffb930817e72b1ff1caef5d226501f3dfeb1",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
"php": "^7.1 || ^8.0",
"sabberworm/php-css-parser": "^8.4 || ^9.0"
},
"require-dev": {
"phpunit/phpunit": "^7.5 || ^8 || ^9 || ^10 || ^11"
},
"type": "library",
"autoload": {
"psr-4": {
"Svg\\": "src/Svg"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"LGPL-3.0-or-later"
],
"authors": [
{
"name": "The SvgLib Community",
"homepage": "https://github.com/dompdf/php-svg-lib/blob/master/AUTHORS.md"
}
],
"description": "A library to read, parse and export to PDF SVG files.",
"homepage": "https://github.com/dompdf/php-svg-lib",
"support": {
"issues": "https://github.com/dompdf/php-svg-lib/issues",
"source": "https://github.com/dompdf/php-svg-lib/tree/1.0.2"
},
"time": "2026-01-02T16:01:13+00:00"
},
{ {
"name": "dragonmantank/cron-expression", "name": "dragonmantank/cron-expression",
"version": "v3.6.0", "version": "v3.6.0",
@ -2257,73 +2025,6 @@
], ],
"time": "2026-03-08T20:05:35+00:00" "time": "2026-03-08T20:05:35+00:00"
}, },
{
"name": "masterminds/html5",
"version": "2.10.1",
"source": {
"type": "git",
"url": "https://github.com/Masterminds/html5-php.git",
"reference": "fd5018f6815fff903946d0564977b44ce8010e29"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fd5018f6815fff903946d0564977b44ce8010e29",
"reference": "fd5018f6815fff903946d0564977b44ce8010e29",
"shasum": ""
},
"require": {
"ext-dom": "*",
"php": ">=5.3.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9 || ^10"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.7-dev"
}
},
"autoload": {
"psr-4": {
"Masterminds\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Matt Butcher",
"email": "technosophos@gmail.com"
},
{
"name": "Matt Farina",
"email": "matt@mattfarina.com"
},
{
"name": "Asmir Mustafic",
"email": "goetas@gmail.com"
}
],
"description": "An HTML5 parser and serializer.",
"homepage": "http://masterminds.github.io/html5-php",
"keywords": [
"HTML5",
"dom",
"html",
"parser",
"querypath",
"serializer",
"xml"
],
"support": {
"issues": "https://github.com/Masterminds/html5-php/issues",
"source": "https://github.com/Masterminds/html5-php/tree/2.10.1"
},
"time": "2026-06-23T18:43:15+00:00"
},
{ {
"name": "monolog/monolog", "name": "monolog/monolog",
"version": "3.10.0", "version": "3.10.0",
@ -3598,86 +3299,6 @@
}, },
"time": "2026-06-18T03:57:49+00:00" "time": "2026-06-18T03:57:49+00:00"
}, },
{
"name": "sabberworm/php-css-parser",
"version": "v9.4.0",
"source": {
"type": "git",
"url": "https://github.com/MyIntervals/PHP-CSS-Parser.git",
"reference": "fd3bf9fb173e0df649bc4e3e0d088a1b2417c08f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/fd3bf9fb173e0df649bc4e3e0d088a1b2417c08f",
"reference": "fd3bf9fb173e0df649bc4e3e0d088a1b2417c08f",
"shasum": ""
},
"require": {
"ext-iconv": "*",
"php": "^7.2.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0",
"thecodingmachine/safe": "^1.3 || ^2.5 || ^3.4"
},
"require-dev": {
"php-parallel-lint/php-parallel-lint": "1.4.0",
"phpstan/extension-installer": "1.4.3",
"phpstan/phpstan": "1.12.33 || 2.2.2",
"phpstan/phpstan-phpunit": "1.4.2 || 2.0.16",
"phpstan/phpstan-strict-rules": "1.6.2 || 2.0.11",
"phpunit/phpunit": "8.5.52",
"rawr/phpunit-data-provider": "3.3.1",
"rector/rector": "1.2.10 || 2.4.6",
"rector/type-perfect": "1.0.0 || 2.1.3",
"squizlabs/php_codesniffer": "4.0.1",
"thecodingmachine/phpstan-safe-rule": "1.2.0 || 1.4.3"
},
"suggest": {
"ext-mbstring": "for parsing UTF-8 CSS"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "9.5.x-dev"
}
},
"autoload": {
"files": [
"src/Rule/Rule.php",
"src/RuleSet/RuleContainer.php"
],
"psr-4": {
"Sabberworm\\CSS\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Raphael Schweikert"
},
{
"name": "Oliver Klee",
"email": "github@oliverklee.de"
},
{
"name": "Jake Hotson",
"email": "jake.github@qzdesign.co.uk"
}
],
"description": "Parser for CSS Files written in PHP",
"homepage": "https://www.sabberworm.com/blog/2010/6/10/php-css-parser",
"keywords": [
"css",
"parser",
"stylesheet"
],
"support": {
"issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues",
"source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v9.4.0"
},
"time": "2026-06-18T15:10:53+00:00"
},
{ {
"name": "symfony/clock", "name": "symfony/clock",
"version": "v7.4.8", "version": "v7.4.8",
@ -6187,149 +5808,6 @@
], ],
"time": "2026-06-08T20:24:16+00:00" "time": "2026-06-08T20:24:16+00:00"
}, },
{
"name": "thecodingmachine/safe",
"version": "v3.4.0",
"source": {
"type": "git",
"url": "https://github.com/thecodingmachine/safe.git",
"reference": "705683a25bacf0d4860c7dea4d7947bfd09eea19"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thecodingmachine/safe/zipball/705683a25bacf0d4860c7dea4d7947bfd09eea19",
"reference": "705683a25bacf0d4860c7dea4d7947bfd09eea19",
"shasum": ""
},
"require": {
"php": "^8.1"
},
"require-dev": {
"php-parallel-lint/php-parallel-lint": "^1.4",
"phpstan/phpstan": "^2",
"phpunit/phpunit": "^10",
"squizlabs/php_codesniffer": "^3.2"
},
"type": "library",
"autoload": {
"files": [
"lib/special_cases.php",
"generated/apache.php",
"generated/apcu.php",
"generated/array.php",
"generated/bzip2.php",
"generated/calendar.php",
"generated/classobj.php",
"generated/com.php",
"generated/cubrid.php",
"generated/curl.php",
"generated/datetime.php",
"generated/dir.php",
"generated/eio.php",
"generated/errorfunc.php",
"generated/exec.php",
"generated/fileinfo.php",
"generated/filesystem.php",
"generated/filter.php",
"generated/fpm.php",
"generated/ftp.php",
"generated/funchand.php",
"generated/gettext.php",
"generated/gmp.php",
"generated/gnupg.php",
"generated/hash.php",
"generated/ibase.php",
"generated/ibmDb2.php",
"generated/iconv.php",
"generated/image.php",
"generated/imap.php",
"generated/info.php",
"generated/inotify.php",
"generated/json.php",
"generated/ldap.php",
"generated/libxml.php",
"generated/lzf.php",
"generated/mailparse.php",
"generated/mbstring.php",
"generated/misc.php",
"generated/mysql.php",
"generated/mysqli.php",
"generated/network.php",
"generated/oci8.php",
"generated/opcache.php",
"generated/openssl.php",
"generated/outcontrol.php",
"generated/pcntl.php",
"generated/pcre.php",
"generated/pgsql.php",
"generated/posix.php",
"generated/ps.php",
"generated/pspell.php",
"generated/readline.php",
"generated/rnp.php",
"generated/rpminfo.php",
"generated/rrd.php",
"generated/sem.php",
"generated/session.php",
"generated/shmop.php",
"generated/sockets.php",
"generated/sodium.php",
"generated/solr.php",
"generated/spl.php",
"generated/sqlsrv.php",
"generated/ssdeep.php",
"generated/ssh2.php",
"generated/stream.php",
"generated/strings.php",
"generated/swoole.php",
"generated/uodbc.php",
"generated/uopz.php",
"generated/url.php",
"generated/var.php",
"generated/xdiff.php",
"generated/xml.php",
"generated/xmlrpc.php",
"generated/yaml.php",
"generated/yaz.php",
"generated/zip.php",
"generated/zlib.php"
],
"classmap": [
"lib/DateTime.php",
"lib/DateTimeImmutable.php",
"lib/Exceptions/",
"generated/Exceptions/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "PHP core functions that throw exceptions instead of returning FALSE on error",
"support": {
"issues": "https://github.com/thecodingmachine/safe/issues",
"source": "https://github.com/thecodingmachine/safe/tree/v3.4.0"
},
"funding": [
{
"url": "https://github.com/OskarStark",
"type": "github"
},
{
"url": "https://github.com/shish",
"type": "github"
},
{
"url": "https://github.com/silasjoisten",
"type": "github"
},
{
"url": "https://github.com/staabm",
"type": "github"
}
],
"time": "2026-02-04T18:08:13+00:00"
},
{ {
"name": "tijsverkoyen/css-to-inline-styles", "name": "tijsverkoyen/css-to-inline-styles",
"version": "v2.4.0", "version": "v2.4.0",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

View File

@ -1,495 +1,295 @@
@extends('layouts.studentportalnav') @extends('layouts.studentportalnav')
@section('title', 'Student Dashboard') @section('title', 'Dashboard')
@section('content') @section('content')
<style> <style>
:root { :root {
--theme-navy: #1E233E; --theme-navy: #2D355B; /* Primary Dark Navy */
--theme-navy-dark: #15182C; --theme-footer-navy: #1F2541; /* Darker Navy */
--theme-red: #822424; --theme-red: #822424; /* Primary Accent Red */
--theme-red-hover: #df2c3e; --theme-red-hover: #df2c3e; /* Red Hover State */
--theme-yellow: #FFEA85; --theme-yellow: #FFEA85; /* Accent Gold/Yellow */
--theme-bg: #F4F6F9; --theme-bg: #F6F6F6; /* Page Background */
--text-dark: #1E293B; --text-dark: #333333;
} }
/* Welcome Banner */ body {
.welcome-banner { background-color: var(--theme-bg);
background: linear-gradient(135deg, #1E233E 0%, #2A1F3B 50%, #4A1A24 100%); color: var(--text-dark);
position: relative;
overflow: hidden;
border: none;
box-shadow: 0 10px 30px rgba(30, 35, 62, 0.15);
} }
.welcome-banner::before { /* Header */
content: ''; .dashboard-header {
position: absolute; display: flex;
top: -50%; justify-content: space-between;
right: -10%; align-items: center;
width: 350px; margin-bottom: 30px;
height: 350px; padding-bottom: 15px;
background: radial-gradient(circle, rgba(255, 234, 133, 0.12) 0%, rgba(255, 234, 133, 0) 70%); border-bottom: 2px solid #e2e8f0;
}
.dashboard-header h2 {
font-weight: 700;
color: var(--theme-navy);
margin-bottom: 5px;
}
.dashboard-header p {
color: #6c757d;
margin: 0;
font-size: 0.95rem;
}
.avatar {
width: 55px;
height: 55px;
border-radius: 50%; border-radius: 50%;
pointer-events: none; background: var(--theme-navy);
} color: var(--theme-yellow);
.user-avatar-badge {
box-shadow: 0 4px 15px rgba(0,0,0,0.15);
}
.avatar-circle {
width: 52px;
height: 52px;
border-radius: 14px;
background: linear-gradient(135deg, #FFEA85 0%, #F59E0B 100%);
color: #1E233E;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
font-weight: 800; font-weight: bold;
font-size: 22px; font-size: 20px;
box-shadow: 0 4px 12px rgba(245, 158, 11, 0.3); box-shadow: 0 4px 10px rgba(0,0,0,0.1);
} }
/* Stat Cards Modern */ /* Statistic Cards */
.stat-card-modern { .stat-card {
background: #ffffff; background: #ffffff;
border-radius: 16px; border-radius: 12px;
padding: 24px; padding: 24px;
border: 1px solid #E2E8F0; box-shadow: 0 4px 12px rgba(0,0,0,0.05);
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.03); transition: all 0.3s ease;
transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);
position: relative;
height: 100%; height: 100%;
display: flex; border: 1px solid #e2e8f0;
flex-direction: column;
justify-content: space-between;
} }
.stat-card-modern:hover { .stat-card:hover {
transform: translateY(-5px); transform: translateY(-5px);
box-shadow: 0 12px 28px rgba(30, 35, 62, 0.1); box-shadow: 0 8px 20px rgba(45, 53, 91, 0.12);
border-color: rgba(30, 35, 62, 0.2); border-color: var(--theme-navy);
} }
.stat-icon-wrapper { .stat-icon {
width: 52px; width: 55px;
height: 52px; height: 55px;
border-radius: 14px; border-radius: 10px;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
color: #ffffff; color: #ffffff;
font-size: 22px; font-size: 22px;
box-shadow: 0 6px 14px rgba(0,0,0,0.12); margin-bottom: 16px;
} }
.stat-number { .stat-card h3 {
font-size: 2.1rem; font-weight: 700;
font-weight: 800; color: var(--theme-navy);
color: #0F172A; margin-bottom: 4px;
line-height: 1.2;
margin-bottom: 2px;
letter-spacing: -0.5px;
} }
.stat-label { .stat-card p {
color: #64748B; color: #6c757d;
font-size: 0.9rem; font-size: 0.9rem;
font-weight: 600; font-weight: 600;
}
/* Section Title Accent */
.title-accent {
width: 6px;
height: 24px;
background: linear-gradient(180deg, var(--theme-red) 0%, var(--theme-red-hover) 100%);
border-radius: 4px;
display: inline-block;
}
/* Modern Service Card */
.service-card-modern {
background: #ffffff;
border-radius: 16px;
padding: 28px 24px;
border: 1px solid #E2E8F0;
box-shadow: 0 4px 16px rgba(0,0,0,0.03);
transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
text-decoration: none !important;
}
.service-card-modern:hover {
transform: translateY(-6px);
box-shadow: 0 16px 32px rgba(130, 36, 36, 0.1);
border-color: rgba(130, 36, 36, 0.3);
}
.service-icon-box {
width: 56px;
height: 56px;
border-radius: 14px;
display: flex;
align-items: center;
justify-content: center;
font-size: 24px;
margin-bottom: 20px;
background: rgba(130, 36, 36, 0.08);
color: var(--theme-red);
transition: all 0.3s ease;
}
.service-card-modern:hover .service-icon-box {
background: var(--theme-red);
color: #ffffff;
transform: scale(1.08);
box-shadow: 0 6px 16px rgba(130, 36, 36, 0.3);
}
.service-card-modern h5 {
font-weight: 700;
color: #0F172A;
font-size: 1.1rem;
margin-bottom: 8px;
}
.service-card-modern p {
color: #64748B;
font-size: 0.88rem;
margin: 0; margin: 0;
line-height: 1.55;
} }
.action-link { /* Services */
.section-title {
font-size: 22px;
font-weight: 700; font-weight: 700;
font-size: 0.85rem; color: var(--theme-navy);
color: var(--theme-red); margin: 40px 0 20px;
display: inline-flex; display: flex;
align-items: center; align-items: center;
gap: 6px; gap: 10px;
margin-top: 18px;
transition: gap 0.2s ease, color 0.2s ease;
} }
.service-card-modern:hover .action-link { .section-title::before {
gap: 10px; content: '';
display: inline-block;
width: 5px;
height: 24px;
background-color: var(--theme-red);
border-radius: 2px;
}
.service-card {
background: #ffffff;
border-radius: 12px;
padding: 30px 20px;
text-align: center;
transition: all 0.3s ease;
box-shadow: 0 4px 12px rgba(0,0,0,0.05);
height: 100%;
border: 1px solid #e2e8f0;
}
.service-card:hover {
transform: translateY(-6px);
box-shadow: 0 8px 22px rgba(0,0,0,0.1);
border-color: var(--theme-red);
}
.service-card i {
font-size: 40px;
color: var(--theme-red);
margin-bottom: 16px;
transition: transform 0.3s ease, color 0.3s ease;
}
.service-card:hover i {
transform: scale(1.1);
color: var(--theme-red-hover); color: var(--theme-red-hover);
} }
/* Document Card */ .service-card h5 {
.doc-card { font-weight: 700;
background: #ffffff; color: var(--theme-navy);
border-radius: 16px; margin-bottom: 10px;
padding: 24px 20px;
border: 1px solid #E2E8F0;
box-shadow: 0 4px 16px rgba(0,0,0,0.03);
transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);
height: 100%;
} }
.doc-card:hover { .service-card p {
transform: translateY(-5px); color: #6c757d;
box-shadow: 0 12px 24px rgba(0,0,0,0.08); font-size: 13.5px;
border-color: #CBD5E1; margin: 0;
} line-height: 1.5;
.doc-icon-badge {
width: 52px;
height: 52px;
border-radius: 14px;
background: #FEF2F2;
color: #DC2626;
display: flex;
align-items: center;
justify-content: center;
font-size: 24px;
margin: 0 auto 16px;
} }
</style> </style>
<div class="portal-content-container"> <div class="container-fluid">
<!-- Welcome Hero Banner --> <!-- Dashboard Header -->
<div class="welcome-banner card rounded-4 mb-4"> <div class="dashboard-header">
<div class="card-body p-4 p-lg-5 d-flex align-items-center justify-content-between flex-wrap gap-3 position-relative" style="z-index: 1;">
<div> <div>
<div class="d-flex align-items-center gap-2 mb-2 flex-wrap"> <h2>Welcome Back, {{ Auth::check() ? Auth::user()->first_name : 'Student' }}!</h2>
<span class="badge bg-success bg-opacity-20 text-success border border-success border-opacity-20 px-3 py-2 rounded-pill fw-semibold" style="font-size: 0.78rem;"> <p>Manage your academic activities and course updates from your dashboard.</p>
<i class="fa-solid fa-circle me-1" style="font-size: 7px; vertical-align: middle;"></i> Active Academic Year 2026
</span>
<span class="text-white-50 small"><i class="fa-regular fa-calendar me-1"></i> {{ date('l, F j, Y') }}</span>
</div>
<h2 class="fw-bold text-white mb-2" style="letter-spacing: -0.5px;">
Welcome Back, {{ Auth::check() ? Auth::user()->first_name : 'Student' }}! 👋
</h2>
<p class="text-white-50 mb-0 fs-6" style="max-width: 580px;">
Manage your academic activities, course schedules, and exam performance directly from your portal dashboard.
</p>
</div> </div>
@if(Auth::check()) @if(Auth::check())
<div class="user-avatar-badge d-flex align-items-center gap-3 bg-white bg-opacity-10 p-3 rounded-4 backdrop-blur border border-white border-opacity-10"> <div class="avatar" title="{{ Auth::user()->first_name }}">
<div class="avatar-circle">
{{ strtoupper(substr(Auth::user()->first_name, 0, 1)) }} {{ strtoupper(substr(Auth::user()->first_name, 0, 1)) }}
</div> </div>
<div class="text-white d-none d-sm-block">
<div class="fw-bold fs-6">{{ Auth::user()->first_name }} {{ Auth::user()->last_name }}</div>
<div class="small fst-italic text-warning opacity-75" style="font-size: 11px;">{{ Auth::user()->email }}</div>
</div>
</div>
@endif @endif
</div> </div>
</div>
<!-- Key Performance Metrics (Stat Cards) --> <!-- Statistics Cards -->
<div class="row g-3 g-lg-4 mb-4"> <div class="row g-4">
<div class="col-xl-3 col-md-6"> <div class="col-lg-3 col-md-6">
<div class="stat-card-modern"> <div class="stat-card">
<div class="d-flex align-items-center justify-content-between mb-3"> <div class="stat-icon" style="background: var(--theme-navy);">
<div class="stat-icon-wrapper" style="background: linear-gradient(135deg, #3B82F6 0%, #1D4ED8 100%);"> <i class="fa-solid fa-book"></i>
<i class="fa-solid fa-book-open-reader"></i>
</div>
<span class="badge bg-primary-subtle text-primary border border-primary-subtle px-2.5 py-1.5 rounded-pill fw-semibold" style="font-size: 0.75rem;">
<i class="fa-solid fa-circle-check me-1"></i> Active
</span>
</div>
<div>
<div class="stat-number">6</div>
<div class="stat-label">Enrolled Courses</div>
</div> </div>
<h3>6</h3>
<p>Enrolled Courses</p>
</div> </div>
</div> </div>
<div class="col-xl-3 col-md-6"> <div class="col-lg-3 col-md-6">
<div class="stat-card-modern"> <div class="stat-card">
<div class="d-flex align-items-center justify-content-between mb-3"> <div class="stat-icon" style="background: #0d9488;">
<div class="stat-icon-wrapper" style="background: linear-gradient(135deg, #10B981 0%, #047857 100%);"> <i class="fa-solid fa-file-lines"></i>
<i class="fa-solid fa-file-signature"></i>
</div>
<span class="badge bg-warning-subtle text-warning border border-warning-subtle px-2.5 py-1.5 rounded-pill fw-semibold" style="font-size: 0.75rem;">
<i class="fa-solid fa-clock me-1"></i> Pending
</span>
</div>
<div>
<div class="stat-number">3</div>
<div class="stat-label">Assignments Due</div>
</div> </div>
<h3>3</h3>
<p>Assignments</p>
</div> </div>
</div> </div>
<div class="col-xl-3 col-md-6"> <div class="col-lg-3 col-md-6">
<div class="stat-card-modern"> <div class="stat-card">
<div class="d-flex align-items-center justify-content-between mb-3"> <div class="stat-icon" style="background: #d97706;">
<div class="stat-icon-wrapper" style="background: linear-gradient(135deg, #F59E0B 0%, #B45309 100%);"> <i class="fa-solid fa-chart-column"></i>
<i class="fa-solid fa-chart-line"></i>
</div>
<span class="badge bg-success-subtle text-success border border-success-subtle px-2.5 py-1.5 rounded-pill fw-semibold" style="font-size: 0.75rem;">
<i class="fa-solid fa-arrow-trend-up me-1"></i> Grade B+
</span>
</div>
<div>
<div class="stat-number">78%</div>
<div class="stat-label">Average Result</div>
</div> </div>
<h3>78%</h3>
<p>Average Result</p>
</div> </div>
</div> </div>
<div class="col-xl-3 col-md-6"> <div class="col-lg-3 col-md-6">
<div class="stat-card-modern"> <div class="stat-card">
<div class="d-flex align-items-center justify-content-between mb-3"> <div class="stat-icon" style="background: var(--theme-red);">
<div class="stat-icon-wrapper" style="background: linear-gradient(135deg, #EF4444 0%, #B91C1C 100%);">
<i class="fa-solid fa-bell"></i> <i class="fa-solid fa-bell"></i>
</div> </div>
<span class="badge bg-danger-subtle text-danger border border-danger-subtle px-2.5 py-1.5 rounded-pill fw-semibold" style="font-size: 0.75rem;"> <h3>2</h3>
<i class="fa-solid fa-bullhorn me-1"></i> Upcoming <p>Exam Notices</p>
</span>
</div>
<div>
<div class="stat-number">2</div>
<div class="stat-label">Exam Notices</div>
</div>
</div> </div>
</div> </div>
</div> </div>
<!-- Student Services Grid --> <!-- Student Services Section -->
<div class="mb-4"> <div class="section-title">
<h5 class="fw-bold text-dark mb-3 d-flex align-items-center gap-2"> Student Services
<span class="title-accent"></span> Student Services & Quick Actions </div>
</h5>
<div class="row g-3 g-lg-4"> <div class="row g-4">
<div class="col-lg-4 col-md-6"> <div class="col-lg-4 col-md-6">
<a href="/mycourse" class="service-card-modern"> <a href="/mycourse" class="text-decoration-none">
<div> <div class="service-card">
<div class="service-icon-box"> <i class="fa-solid fa-book"></i>
<i class="fa-solid fa-book-bookmark"></i>
</div>
<h5>My Courses</h5> <h5>My Courses</h5>
<p>Access all registered learning modules, video lectures, and syllabus materials.</p> <p>Access all learning materials, lectures, and course content.</p>
</div>
<div class="action-link">
Explore Courses <i class="fa-solid fa-arrow-right"></i>
</div> </div>
</a> </a>
</div> </div>
<div class="col-lg-4 col-md-6"> <div class="col-lg-4 col-md-6">
<a href="/timetable" class="service-card-modern"> <a href="/timetable" class="text-decoration-none">
<div> <div class="service-card">
<div class="service-icon-box">
<i class="fa-solid fa-calendar-days"></i> <i class="fa-solid fa-calendar-days"></i>
</div>
<h5>Class Timetable</h5> <h5>Class Timetable</h5>
<p>Check your weekly lecture schedules, classroom locations, and timing updates.</p> <p>View your weekly lecture schedule and upcoming classes.</p>
</div>
<div class="action-link">
View Schedule <i class="fa-solid fa-arrow-right"></i>
</div> </div>
</a> </a>
</div> </div>
<div class="col-lg-4 col-md-6"> <div class="col-lg-4 col-md-6">
<a href="/results" class="service-card-modern"> <a href="/results" class="text-decoration-none">
<div> <div class="service-card">
<div class="service-icon-box"> <i class="fa-solid fa-square-poll-vertical"></i>
<i class="fa-solid fa-award"></i>
</div>
<h5>Exam Results</h5> <h5>Exam Results</h5>
<p>Review semester examination grades, transcript records, and academic progress.</p> <p>Check semester examination marks and performance reports.</p>
</div>
<div class="action-link">
View Marks <i class="fa-solid fa-arrow-right"></i>
</div> </div>
</a> </a>
</div> </div>
<div class="col-lg-4 col-md-6"> <div class="col-lg-4 col-md-6">
<a href="/Studentguidelines" class="service-card-modern"> <a href="/Studentguidelines" class="text-decoration-none">
<div> <div class="service-card">
<div class="service-icon-box">
<i class="fa-solid fa-book-open"></i> <i class="fa-solid fa-book-open"></i>
</div>
<h5>Student Guidelines</h5> <h5>Student Guidelines</h5>
<p>Read campus rules, academic regulations, safety procedures, and code of conduct.</p> <p>Read campus rules, regulations, and academic guidelines.</p>
</div>
<div class="action-link">
Read Guidelines <i class="fa-solid fa-arrow-right"></i>
</div> </div>
</a> </a>
</div> </div>
<div class="col-lg-4 col-md-6"> <div class="col-lg-4 col-md-6">
<a href="/Feedback&Complain" class="service-card-modern"> <a href="/Feedback&Complain" class="text-decoration-none">
<div> <div class="service-card">
<div class="service-icon-box">
<i class="fa-solid fa-comments"></i> <i class="fa-solid fa-comments"></i>
</div> <h5>Feedback & Complaint</h5>
<h5>Feedback & Complaints</h5> <p>Send feedback or submit inquiries directly to administration.</p>
<p>Submit inquiries, suggestions, or complaints directly to the student support team.</p>
</div>
<div class="action-link">
Submit Inquiry <i class="fa-solid fa-arrow-right"></i>
</div> </div>
</a> </a>
</div> </div>
<div class="col-lg-4 col-md-6"> <div class="col-lg-4 col-md-6">
<a href="/StudentProfile" class="service-card-modern"> <a href="/StudentProfile" class="text-decoration-none">
<div> <div class="service-card">
<div class="service-icon-box"> <i class="fa-solid fa-user"></i>
<i class="fa-solid fa-id-card"></i>
</div>
<h5>Student Profile</h5> <h5>Student Profile</h5>
<p>View and update your personal contact details, credentials, and security PIN.</p> <p>Manage and update your personal student profile details.</p>
</div>
<div class="action-link">
Manage Profile <i class="fa-solid fa-arrow-right"></i>
</div> </div>
</a> </a>
</div> </div>
</div> </div>
</div>
<!-- Official Document Downloads Section -->
<div class="mb-5">
<h5 class="fw-bold text-dark mb-3 d-flex align-items-center gap-2">
<span class="title-accent"></span> Official Academic Documents (PDF)
</h5>
<div class="row g-3 g-lg-4">
<div class="col-xl-3 col-md-6">
<a href="{{ route('student.download.calendar') }}" class="text-decoration-none" target="_blank">
<div class="doc-card text-center">
<div class="doc-icon-badge">
<i class="fa-solid fa-file-pdf"></i>
</div>
<h6 class="fw-bold text-dark mb-1">Academic Calendar</h6>
<small class="text-muted d-block mb-3">Semester dates & holidays</small>
<span class="btn btn-sm btn-outline-danger rounded-pill px-3 fw-semibold">
<i class="fa-solid fa-download me-1"></i> Download PDF
</span>
</div>
</a>
</div>
<div class="col-xl-3 col-md-6">
<a href="{{ route('student.download.handbook') }}" class="text-decoration-none" target="_blank">
<div class="doc-card text-center">
<div class="doc-icon-badge">
<i class="fa-solid fa-file-pdf"></i>
</div>
<h6 class="fw-bold text-dark mb-1">Student Handbook</h6>
<small class="text-muted d-block mb-3">Campus rules & policies</small>
<span class="btn btn-sm btn-outline-danger rounded-pill px-3 fw-semibold">
<i class="fa-solid fa-download me-1"></i> Download PDF
</span>
</div>
</a>
</div>
<div class="col-xl-3 col-md-6">
<a href="{{ route('student.download.examcode') }}" class="text-decoration-none" target="_blank">
<div class="doc-card text-center">
<div class="doc-icon-badge">
<i class="fa-solid fa-file-pdf"></i>
</div>
<h6 class="fw-bold text-dark mb-1">Exam Code of Conduct</h6>
<small class="text-muted d-block mb-3">Examination guidelines</small>
<span class="btn btn-sm btn-outline-danger rounded-pill px-3 fw-semibold">
<i class="fa-solid fa-download me-1"></i> Download PDF
</span>
</div>
</a>
</div>
<div class="col-xl-3 col-md-6">
<a href="{{ route('student.download.helpdesk') }}" class="text-decoration-none" target="_blank">
<div class="doc-card text-center">
<div class="doc-icon-badge">
<i class="fa-solid fa-file-pdf"></i>
</div>
<h6 class="fw-bold text-dark mb-1">Helpdesk Support Guide</h6>
<small class="text-muted d-block mb-3">IT & portal assistance</small>
<span class="btn btn-sm btn-outline-danger rounded-pill px-3 fw-semibold">
<i class="fa-solid fa-download me-1"></i> Download PDF
</span>
</div>
</a>
</div>
</div>
</div>
</div> </div>

File diff suppressed because it is too large Load Diff

View File

@ -6,347 +6,433 @@
<style> <style>
:root{ :root{
/* Premium Modern Automotive Palette */
--primary: #3E51B8; /* Tech Blue */ --primary: #3E51B8; /* Tech Blue */
--primary-light: #0a67df; /* Vibrant Electric Blue */ --primary-light: #0a67df; /* Vibrant Electric Blue */
--secondary: #BC1A1A; /* Deep Racing Red */ --secondary: #BC1A1A; /* Deep Racing Red */
--secondary-hover: #822424; /* Dark Burnt Red */ --secondary-hover: #822424; /* Dark Burnt Red */
--accent-dark: #753939; /* Muted Crimson */
--bg-light: #F8FAFC; /* Soft slate light gray */ --bg-light: #F8FAFC; /* Soft slate light gray */
--text-main: #0F172A; /* Slate dark grey */
/* Semantic Adjustments */
--text-main: #1E293B; /* Slate dark grey */
--text-muted: #64748B; /* Neutral gray */ --text-muted: #64748B; /* Neutral gray */
--card-border: rgba(226, 232, 240, 0.9); --card-border: rgba(62, 81, 184, 0.1);
} }
/* ===== HERO SECTION ===== */ body {
.hero-about { font-family: 'Segoe UI', Arial, sans-serif;
position: relative; color: var(--text-main);
min-height: 48vh; }
background: linear-gradient(135deg, rgba(15, 23, 42, 0.88) 0%, rgba(30, 41, 59, 0.82) 50%, rgba(15, 23, 42, 0.92) 100%),
url('https://images.unsplash.com/photo-1617814076367-b759c7d7e738?auto=format&fit=crop&w=1600&q=80'); /* .hero-about{
min-height:60vh;
background:
linear-gradient(rgba(185, 205, 253, 0.31), rgb(0, 0, 0)), url('https://images.pexels.com/photos/1595385/pexels-photo-1595385.jpeg');
background-size:cover; background-size:cover;
background-position:center; background-position:center;
background-attachment: fixed;
display:flex; display:flex;
align-items:center; align-items:center;
justify-content:center; justify-content:center;
text-align:center; text-align:center;
color: #ffffff; color:#fff;
padding: 70px 20px; } */
overflow: hidden; .hero-about {
} min-height: 60vh;
background: linear-gradient(rgba(194, 217, 255, 0.75), rgba(0, 0, 0, 0.85)), url('https://images.unsplash.com/photo-1617814076367-b759c7d7e738?auto=format&fit=crop&w=1600&q=80');
.hero-badge { background-size: cover;
display: inline-flex; background-position: center;
align-items: center;
gap: 8px;
background: rgba(255, 255, 255, 0.12);
border: 1px solid rgba(255, 255, 255, 0.25);
backdrop-filter: blur(14px);
-webkit-backdrop-filter: blur(14px);
color: #FFE618;
font-size: 12px;
font-weight: 750;
letter-spacing: 0.08em;
text-transform: uppercase;
padding: 7px 18px;
border-radius: 999px;
margin-bottom: 18px;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
}
.hero-about h1 {
font-size: clamp(2.3rem, 4vw, 3.6rem);
font-weight: 800;
line-height: 1.15;
letter-spacing: -0.03em;
text-shadow: 0 10px 30px rgba(0, 0, 0, 0.4);
}
.hero-about p.lead {
font-size: clamp(1rem, 1.2vw, 1.25rem);
color: rgba(255, 255, 255, 0.9);
max-width: 700px;
margin: 16px auto 0;
line-height: 1.6;
}
/* ===== STATS BAR ===== */
.stats-container {
margin-top: -38px;
position: relative;
z-index: 10;
}
.stat-glass-card {
background: #ffffff;
border: 1px solid rgba(226, 232, 240, 0.9);
border-radius: 20px;
padding: 20px 16px;
text-align: center;
box-shadow: 0 10px 28px rgba(15, 23, 42, 0.06);
transition: all 0.35s cubic-bezier(0.175, 0.885, 0.32, 1.275);
}
.stat-glass-card:hover {
transform: translateY(-6px);
box-shadow: 0 18px 40px rgba(62, 81, 184, 0.14);
border-color: rgba(62, 81, 184, 0.3);
}
.stat-icon {
width: 44px;
height: 44px;
background: rgba(62, 81, 184, 0.08);
color: var(--primary);
border-radius: 12px;
display: inline-flex;
align-items: center;
justify-content: center;
font-size: 18px;
margin-bottom: 10px;
}
.stat-number {
font-size: 26px;
font-weight: 800;
color: var(--text-main);
line-height: 1;
margin-bottom: 4px;
}
.stat-label {
font-size: 12.5px;
font-weight: 600;
color: var(--text-muted);
}
/* ===== MINIMALIST VISION & MISSION ===== */
.minimal-icon-badge {
width: 52px;
height: 52px;
border-radius: 16px;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
font-size: 24px; text-align: center;
flex-shrink: 0; color: #fff;
transition: transform 0.3s ease;
} }
.animate-item:hover .minimal-icon-badge { .section-title{
transform: scale(1.1) rotate(4deg); text-align:center;
margin-bottom:40px;
} }
@media (min-width: 768px) {
.border-start-md {
border-left: 1px solid rgba(226, 232, 240, 0.9) !important;
}
}
/* ===== FEATURE BOXES ===== */
.about-box { .about-box {
position: relative; background:#fff;
background: #ffffff; border-radius:20px;
border-radius: 22px; padding:35px 25px;
padding: 34px 24px; box-shadow: 0 10px 30px rgba(0,0,0,.04);
box-shadow: 0 8px 24px rgba(15, 23, 42, 0.04); transition: all 0.4s cubic-bezier(0.165, 0.84, 0.44, 1);
transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); border: 1px solid var(--card-border);
border: 1px solid rgba(226, 232, 240, 0.9);
height: 100%;
overflow: hidden;
}
.about-box::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px;
background: linear-gradient(90deg, #3E51B8 0%, #FFE618 50%, #BC1A1A 100%);
opacity: 0.35;
transition: opacity 0.4s ease;
}
.about-box:hover::before {
opacity: 1;
} }
.about-box:hover { .about-box:hover {
transform: translateY(-8px); transform: translateY(-10px) scale(1.02);
box-shadow: 0 20px 45px -10px rgba(62, 81, 184, 0.14); box-shadow: 0 20px 40px rgba(62, 81, 184, 0.12);
border-color: rgba(62, 81, 184, 0.3); border-color: var(--primary-light);
} }
.icon-circle { .icon-circle {
width: 64px; width:75px;
height: 64px; height:75px;
background: linear-gradient(135deg, rgba(62, 81, 184, 0.1) 0%, rgba(10, 103, 223, 0.06) 100%); background: #6e3232;
color: var(--primary); color: #f6e983;
border-radius: 20px; border-radius:50%;
border: 1px solid rgba(62, 81, 184, 0.2);
display:flex; display:flex;
align-items:center; align-items:center;
justify-content:center; justify-content:center;
font-size: 26px; font-size:28px;
margin: 0 auto 20px; margin:auto;
transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); transition: all 0.4s ease;
} }
.about-box:hover .icon-circle { .about-box:hover .icon-circle {
background: linear-gradient(135deg, #0F2C59 0%, #3E51B8 100%); background: linear-gradient(135deg, var(--secondary) 0%, var(--secondary-hover) 100%);
color: #ffffff; transform: rotateY(180deg);
border-color: transparent; box-shadow: 0 5px 15px rgba(188, 26, 26, 0.3);
transform: scale(1.12) rotate(6deg);
box-shadow: 0 10px 25px rgba(62, 81, 184, 0.35);
} }
/* ===== CTA BUTTON ===== */ /* ========================================================
.cta-btn { Advanced CSS Scroll Animations
background: linear-gradient(135deg, #0F2C59 0%, #3E51B8 100%); ======================================================== */
color: #ffffff !important;
padding: 13px 36px;
border-radius: 999px;
font-weight: 750;
font-size: 14.5px;
text-decoration: none;
display: inline-flex;
align-items: center;
gap: 10px;
transition: all 0.35s ease;
box-shadow: 0 8px 24px rgba(62, 81, 184, 0.25);
}
.cta-btn:hover {
background: linear-gradient(135deg, #BC1A1A 0%, #822424 100%);
transform: translateY(-3px) scale(1.02);
box-shadow: 0 12px 30px rgba(188, 26, 26, 0.35);
}
.cta-btn i {
transition: transform 0.3s ease;
}
.cta-btn:hover i {
transform: translateX(6px);
}
/* ===== SCROLL ANIMATIONS ===== */
.animate-item { .animate-item {
opacity: 0; opacity: 0;
will-change: transform, opacity; will-change: transform, opacity;
transition: all 0.8s cubic-bezier(0.25, 1, 0.5, 1); transition: all 0.8s cubic-bezier(0.25, 1, 0.5, 1);
} }
.fade-up-init { transform: translateY(30px); } .fade-up-init {
.slide-left-init { transform: translateX(-40px); } transform: translateY(40px);
.slide-right-init { transform: translateX(40px); } }
.zoom-in-init { transform: scale(0.94); }
.slide-left-init {
transform: translateX(-50px);
}
.slide-right-init {
transform: translateX(50px);
}
.zoom-in-init {
transform: scale(0.85);
}
.animate-item.animated { .animate-item.animated {
opacity: 1; opacity: 1;
transform: translate(0) scale(1); transform: translate(0) scale(1);
} }
/* Automotive Theme Glow Pulse Button */
@keyframes pulse-btn {
0% { box-shadow: 0 0 0 0 rgba(10, 103, 223, 0.4); }
70% { box-shadow: 0 0 0 15px rgba(10, 103, 223, 0); }
100% { box-shadow: 0 0 0 0 rgba(10, 103, 223, 0); }
}
.cta-btn {
background: var(--primary-light);
color: #fff !important;
padding: 14px 35px;
border-radius: 50px;
font-weight: 600;
text-decoration: none;
transition: 0.3s;
animation: pulse-btn 2s infinite;
}
.cta-btn:hover {
background: linear-gradient(135deg, var(--secondary) 0%, var(--secondary-hover) 100%);
transform: scale(1.05);
box-shadow: 0 5px 15px rgba(188, 26, 26, 0.4);
}
/* .btn-view-courses {
background: var(--primary);
color: #fff;
transition: all 0.3s ease;
}
.btn-view-courses:hover {
background: var(--secondary);
color: #fff;
box-shadow: 0 5px 15px rgba(188, 26, 26, 0.2);
} */
.btn-view-courses{
background: #822424;
color: #fff;
/* padding: 14px ; */
border-radius: 40px;
font-weight: 600;
transition: all 0.3s ease;
font-weight: bolder;
}
.btn-view-courses:hover {
background: var(--secondary-hover);
border-color: var(--secondary-hover);
color: #fff;
transform: translateY(-3px);
box-shadow: 0 8px 20px rgba(227, 100, 20, 0.3);
}
</style> </style>
<!-- HERO SECTION --> <!-- HERO -->
<section class="hero-about"> <section class="hero-about">
<div class="container"> <div class="container">
<div class="animate-item animated fade-up-init"> <div class="animate-item animated fade-up-init">
<span class="hero-badge"><i class="fa-solid fa-graduation-cap"></i> Pioneering Automotive Academy</span> <h1 class="fw-bold display-4">About Our Institute</h1>
<h1 class="fw-bold">Empowering Future Mobility Leaders</h1> <p class="mt-3 lead" style="max-width: 700px; margin: auto;">
<p class="lead"> We are committed to delivering high-quality automotive education
We are committed to delivering world-class automotive engineering education with hands-on workshop mastery, TVEC accredited qualifications, and cutting-edge EV technology training. with practical training and industry-focused learning.
</p> </p>
</div> </div>
</div> </div>
</section> </section>
<!-- FLOATING STATS COUNTER --> <!-- ABOUT CONTENT -->
<div class="container stats-container"> <section class="py-5 overflow-hidden">
<div class="row g-3 justify-content-center"> <div class="container">
<div class="col-6 col-md-3 animate-item zoom-in-init" style="transition-delay: 100ms;"> <div class="row align-items-center g-5">
<div class="stat-glass-card">
<div class="stat-icon"><i class="fa-solid fa-user-graduate"></i></div>
<div class="stat-number count-up" data-count-target="2500" data-count-suffix="+">0+</div>
<div class="stat-label">Graduated Technicians</div>
</div>
</div>
<div class="col-6 col-md-3 animate-item zoom-in-init" style="transition-delay: 200ms;">
<div class="stat-glass-card">
<div class="stat-icon"><i class="fa-solid fa-screwdriver-wrench"></i></div>
<div class="stat-number">100%</div>
<div class="stat-label">Practical Lab Mastery</div>
</div>
</div>
<div class="col-6 col-md-3 animate-item zoom-in-init" style="transition-delay: 300ms;">
<div class="stat-glass-card">
<div class="stat-icon"><i class="fa-solid fa-award"></i></div>
<div class="stat-number">15+</div>
<div class="stat-label">Years of Excellence</div>
</div>
</div>
<div class="col-6 col-md-3 animate-item zoom-in-init" style="transition-delay: 400ms;">
<div class="stat-glass-card">
<div class="stat-icon"><i class="fa-solid fa-briefcase"></i></div>
<div class="stat-number">95%</div>
<div class="stat-label">Job Placement Rate</div>
</div>
</div>
</div>
</div>
<!-- VISION & MISSION MINIMALIST 1-ROW SECTION -->
<section class="py-5 bg-white">
<div class="container py-3">
<div class="row g-4 align-items-stretch">
<!-- VISION (LEFT COLUMN) -->
<div class="col-md-6 animate-item slide-left-init"> <div class="col-md-6 animate-item slide-left-init">
<div class="p-4 rounded-4 bg-light border border-light-subtle h-100"> <img src="https://images.pexels.com/photos/3862130/pexels-photo-3862130.jpeg"
<div class="d-flex align-items-center gap-3 mb-3"> class="img-fluid rounded shadow-lg"
<div class="minimal-icon-badge bg-primary-subtle text-primary"> alt="About Image">
<i class="fa-solid fa-lightbulb"></i>
</div> </div>
<div>
<span class="badge bg-primary-subtle text-primary fw-bold text-uppercase px-2 py-1 rounded-2 small mb-1" style="font-size: 11px;">GLOBAL GOAL</span> <div class="col-md-6 animate-item slide-right-init">
<h3 class="fw-bold text-dark mb-0 fs-4">Our Vision</h3> <h2 class="fw-bold mb-3">Who We Are</h2>
</div> <p class="text-muted fs-5">
</div> Our institute specializes in automotive engineering education,
<p class="text-secondary fs-6 lh-base mb-0"> offering hands-on training in modern vehicle technologies,
To be a global leader in automotive education, driving the future of mobility by empowering the next generation of engineers, technicians, and EV innovators. mechanical systems, and electric vehicles.
</p>
<p class="text-muted mb-4">
We focus on building skilled professionals who are ready for
the global automotive industry.
</p>
<a href="/courses" class="btn btn-view-courses btn-lg px-4 rounded-pill shadow-sm">
View Courses@extends('layouts.app')
@section('title','About Us')
@section('content')
<style>
:root {
/* Premium Modern Automotive Palette */
--primary: #3E51B8; /* Tech Blue */
--primary-light: #0a67df; /* Vibrant Electric Blue */
--secondary: #BC1A1A; /* Deep Racing Red */
--secondary-hover: #822424; /* Dark Burnt Red */
--accent-dark: #753939; /* Muted Crimson */
--bg-light: #F8FAFC; /* Soft slate light gray */
/* Semantic Adjustments */
--text-main: #1E293B; /* Slate dark grey */
--text-muted: #64748B; /* Neutral gray */
--card-border: rgba(62, 81, 184, 0.1);
}
body {
font-family: 'Segoe UI', Arial, sans-serif;
color: var(--text-main);
}
.hero-about {
min-height: 60vh;
background: linear-gradient(rgba(194, 217, 255, 0.75), rgba(0, 0, 0, 0.85)),url('https://images.unsplash.com/photo-1552519507-da3b142c6e3d?auto=format&fit=crop&w=1600&q=80');
background-size: cover;
background-position: center;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
color: #fff;
}
.section-title {
text-align: center;
margin-bottom: 40px;
}
.about-box {
background: #fff;
border-radius: 20px;
padding: 35px 25px;
box-shadow: 0 10px 30px rgba(0,0,0,.04);
transition: all 0.4s cubic-bezier(0.165, 0.84, 0.44, 1);
border: 1px solid var(--card-border);
}
.about-box:hover {
transform: translateY(-10px) scale(1.02);
box-shadow: 0 20px 40px rgba(62, 81, 184, 0.12);
border-color: var(--primary-light);
}
.icon-circle {
width: 75px;
height: 75px;
background: #6e3232;
color: #fffefa;;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 28px;
margin: auto;
transition: all 0.4s ease;
}
.about-box:hover .icon-circle {
background: linear-gradient(135deg, var(--secondary) 0%, var(--secondary-hover) 100%);
transform: rotateY(180deg);
box-shadow: 0 5px 15px rgba(188, 26, 26, 0.3);
}
/* ========================================================
Advanced CSS Scroll Animations
======================================================== */
.animate-item {
opacity: 0;
will-change: transform, opacity;
transition: all 0.8s cubic-bezier(0.25, 1, 0.5, 1);
}
.fade-up-init {
transform: translateY(40px);
}
.slide-left-init {
transform: translateX(-50px);
}
.slide-right-init {
transform: translateX(50px);
}
.zoom-in-init {
transform: scale(0.85);
}
.animate-item.animated {
opacity: 1;
transform: translate(0) scale(1);
}
/* Automotive Theme Glow Pulse Button */
@keyframes pulse-btn {
0% { box-shadow: 0 0 0 0 rgba(10, 103, 223, 0.4); }
70% { box-shadow: 0 0 0 15px rgba(10, 103, 223, 0); }
100% { box-shadow: 0 0 0 0 rgba(10, 103, 223, 0); }
}
/* .cta-btn {
background: var(--primary-light);
color: #fff !important;
padding: 14px 35px;
border-radius: 50px;
font-weight: 600;
text-decoration: none;
transition: all 0.3s ease;
animation: pulse-btn 2s infinite;
}
.cta-btn:hover {
background: linear-gradient(135deg, var(--secondary) 0%, var(--secondary-hover) 100%);
transform: scale(1.05);
box-shadow: 0 5px 15px rgba(188, 26, 26, 0.4);
} */
.cta-btn{
background: #822424;
color: #fff;
padding: 14px 35px;
border-radius: 40px;
font-weight: 600;
transition: all 0.3s ease;
font-weight: bolder;
}
.cta-btn:hover {
background: var(--secondary-hover);
border-color: var(--secondary-hover);
color: #fff;
transform: translateY(-3px);
box-shadow: 0 8px 20px rgba(227, 100, 20, 0.3);
}
.btn-view-courses {
background: var(--secondary-hover);
color: #fff;
padding: 14px 35px;
border-radius: 40px;
font-weight: 600;
text-decoration: none;
transition: all 0.3s ease;
/* border: none; */
}
.btn-view-courses:hover {
background: var(--secondary);
color: #fff;
transform: translateY(-3px);
box-shadow: 0 8px 20px rgba(188, 26, 26, 0.3);
}
</style>
<!-- HERO -->
<section class="hero-about">
<div class="container">
<div class="animate-item animated fade-up-init">
<h1 class="fw-bold display-4">About Our Institute</h1>
<p class="mt-3 lead" style="max-width: 700px; margin: auto;">
We are committed to delivering high-quality automotive education
with practical training and industry-focused learning.
</p> </p>
</div> </div>
</div> </div>
</section>
<!-- ABOUT CONTENT function -->
<section class="py-5 overflow-hidden">
<div class="container">
<div class="row align-items-center g-5">
<div class="col-md-6 animate-item slide-left-init">
<img src="https://images.pexels.com/photos/3862130/pexels-photo-3862130.jpeg"
class="img-fluid rounded shadow-lg"
alt="About Image">
</div>
<!-- MISSION (RIGHT COLUMN) -->
<div class="col-md-6 animate-item slide-right-init"> <div class="col-md-6 animate-item slide-right-init">
<div class="p-4 rounded-4 bg-light border border-light-subtle h-100"> <h2 class="fw-bold mb-3">Vision</h2>
<div class="d-flex align-items-center gap-3 mb-3"> <p class="text-muted fs-5" style="justfy-content: justify;">
<div class="minimal-icon-badge bg-danger-subtle text-danger"> To be a global leader in automotive education, driving the future of mobility by empowering the next generation of engineers, technicians, and innovators.
<i class="fa-solid fa-bullseye"></i> </p>
</div> <h2 class="fw-bold mb-3">Mission</h2>
<div> <p class="text-muted fs-5" style="justfy-content: justify;">
<span class="badge bg-danger-subtle text-danger fw-bold text-uppercase px-2 py-1 rounded-2 small mb-1" style="font-size: 11px;">CORE PURPOSE</span>
<h3 class="fw-bold text-dark mb-0 fs-4">Our Mission</h3>
</div>
</div>
<p class="text-secondary fs-6 lh-base mb-0">
To foster technical mastery and critical thinking through immersive, practical learning environments, strong industry partnerships, and a commitment to eco-friendly automotive practices. To foster technical mastery and critical thinking through immersive, practical learning environments, strong industry partnerships, and a commitment to eco-friendly automotive practices.
</p> </p>
</div>
</div>
<!-- <a href="/courses" class="btn btn-view-courses btn-lg px-4 rounded-pill shadow-sm">
View Courses
</a> -->
</div>
</div> </div>
</div> </div>
</section> </section>
<!-- ADVANTAGES / WHY CHOOSE US --> <!-- FEATURES -->
<section class="py-5 bg-light position-relative"> <section class="py-5 bg-light">
<div class="container py-4"> <div class="container">
<div class="text-center mb-5 animate-item fade-up-init">
<span class="text-uppercase fw-bold small text-primary letter-spacing-1"><i class="fa-solid fa-award me-1"></i> Core Advantage</span> <div class="section-title animate-item fade-up-init">
<h2 class="display-6 fw-bold text-dark mt-2">Why Study With AutoEdu?</h2> <h2 class="fw-bold">Why Choose Us</h2>
<p class="text-muted fs-5 max-width-600 mx-auto">We combine academic excellence with real-world workshop diagnostic training.</p> <p class="text-muted">We provide the best learning experience</p>
</div> </div>
<div class="row g-4"> <div class="row g-4">
@ -355,9 +441,9 @@
<div class="icon-circle"> <div class="icon-circle">
<i class="fa-solid fa-chalkboard-user"></i> <i class="fa-solid fa-chalkboard-user"></i>
</div> </div>
<h4 class="fw-bold text-dark mb-3">Expert Lecturers</h4> <h4 class="mt-4 fw-bold">Expert Lecturers</h4>
<p class="text-muted mb-0 lh-base"> <p class="text-muted mb-0">
Learn directly from veteran automotive engineers, diagnostic specialists, and TVEC certified master instructors. Experienced industry professionals guiding your learning journey.
</p> </p>
</div> </div>
</div> </div>
@ -367,9 +453,9 @@
<div class="icon-circle"> <div class="icon-circle">
<i class="fa-solid fa-screwdriver-wrench"></i> <i class="fa-solid fa-screwdriver-wrench"></i>
</div> </div>
<h4 class="fw-bold text-dark mb-3">Practical Training</h4> <h4 class="mt-4 fw-bold">Practical Training</h4>
<p class="text-muted mb-0 lh-base"> <p class="text-muted mb-0">
Hands-on workshop experience working on modern EFI engines, EV battery test bays, and automated gearboxes. Hands-on workshop experience with real vehicles and tools.
</p> </p>
</div> </div>
</div> </div>
@ -379,38 +465,36 @@
<div class="icon-circle"> <div class="icon-circle">
<i class="fa-solid fa-certificate"></i> <i class="fa-solid fa-certificate"></i>
</div> </div>
<h4 class="fw-bold text-dark mb-3">Certified Qualifications</h4> <h4 class="mt-4 fw-bold">Certified Courses</h4>
<p class="text-muted mb-0 lh-base"> <p class="text-muted mb-0">
Earn internationally recognized NVQ Level 4/5 diplomas and certifications that accelerate your global career. Industry-recognized certifications to boost your career.
</p> </p>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</section> </section>
<!-- CALL TO ACTION (CTA) --> <!-- CTA -->
<section class="py-5 text-center bg-white overflow-hidden position-relative"> <section class="py-5 text-center bg-white overflow-hidden">
<div class="container py-4 animate-item fade-up-init"> <div class="container py-4 animate-item fade-up-init">
<div class="p-5 rounded-4 shadow-sm position-relative overflow-hidden" style="background: linear-gradient(135deg, #0F172A 0%, #1E293B 100%);"> <h2 class="fw-bold mb-3">Start Your Automotive Career Today</h2>
<span class="badge bg-warning text-dark font-monospace mb-3 px-3 py-2 rounded-pill"><i class="fa-solid fa-bolt me-1"></i> ADMISSIONS OPEN 2026</span> <p class="text-muted fs-5 mb-5">
<h2 class="display-6 fw-bold text-white mb-3">Start Your Automotive Career Today</h2> Join our institute and become a skilled automotive professional.
<p class="text-white-50 fs-5 mb-4 max-width-600 mx-auto">
Take the first step toward becoming a certified automotive engineer or high-voltage EV specialist.
</p> </p>
<div class="d-flex justify-content-center"> <div class="d-flex justify-content-center">
<a href="/apply" class="cta-btn"> <a href="/apply" class="cta-btn shadow">
Apply For Courses <i class="fa-solid fa-arrow-right"></i> Apply Courses
</a> </a>
</div> </div>
</div> </div>
</div>
</section> </section>
<script> <script>
document.addEventListener('DOMContentLoaded', function () { document.addEventListener('DOMContentLoaded', function () {
// Scroll animations observer
const animatedElements = document.querySelectorAll('.animate-item'); const animatedElements = document.querySelectorAll('.animate-item');
const observer = new IntersectionObserver((entries) => { const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => { entries.forEach(entry => {
if (entry.isIntersecting) { if (entry.isIntersecting) {
@ -423,32 +507,99 @@ document.addEventListener('DOMContentLoaded', function () {
}); });
animatedElements.forEach(el => observer.observe(el)); animatedElements.forEach(el => observer.observe(el));
// Stats Number Counter Animation
const counterElements = document.querySelectorAll('.count-up');
const counterObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const el = entry.target;
const target = parseInt(el.getAttribute('data-count-target') || '0', 10);
const suffix = el.getAttribute('data-count-suffix') || '';
let current = 0;
const increment = Math.ceil(target / 40);
const timer = setInterval(() => {
current += increment;
if (current >= target) {
current = target;
clearInterval(timer);
}
el.textContent = current.toLocaleString() + suffix;
}, 30);
counterObserver.unobserve(el);
}
});
}, { threshold: 0.5 });
counterElements.forEach(el => counterObserver.observe(el));
}); });
</script> </script>
@endsection
</a>
</div>
</div>
</div>
</section>
<!-- FEATURES -->
<section class="py-5 bg-light">
<div class="container">
<div class="section-title animate-item fade-up-init">
<h2 class="fw-bold">Why Choose Us</h2>
<p class="text-muted">We provide the best learning experience</p>
</div>
<div class="row g-4">
<div class="col-md-4 animate-item zoom-in-init" style="transition-delay: 100ms;">
<div class="about-box text-center">
<div class="icon-circle">
<i class="fa-solid fa-chalkboard-user"></i>
</div>
<h4 class="mt-4 fw-bold">Expert Lecturers</h4>
<p class="text-muted mb-0">
Experienced industry professionals guiding your learning journey.
</p>
</div>
</div>
<div class="col-md-4 animate-item zoom-in-init" style="transition-delay: 250ms;">
<div class="about-box text-center">
<div class="icon-circle">
<i class="fa-solid fa-screwdriver-wrench"></i>
</div>
<h4 class="mt-4 fw-bold">Practical Training</h4>
<p class="text-muted mb-0">
Hands-on workshop experience with real vehicles and tools.
</p>
</div>
</div>
<div class="col-md-4 animate-item zoom-in-init" style="transition-delay: 400ms;">
<div class="about-box text-center">
<div class="icon-circle">
<i class="fa-solid fa-certificate"></i>
</div>
<h4 class="mt-4 fw-bold">Certified Courses</h4>
<p class="text-muted mb-0">
Industry-recognized certifications to boost your career.
</p>
</div>
</div>
</div>
</div>
</section>
<!-- CTA -->
<section class="py-5 text-center bg-white overflow-hidden">
<div class="container py-4 animate-item fade-up-init">
<h2 class="fw-bold mb-3">Start Your Automotive Career Today</h2>
<p class="text-muted fs-5 mb-5">
Join our institute and become a skilled automotive professional.
</p>
<div class="d-flex justify-content-center">
<a href="/apply" class="cta-btn shadow">
Apply Courses
</a>
</div>
</div>
</section>
<script>
document.addEventListener('DOMContentLoaded', function () {
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.15
});
animatedElements.forEach(el => observer.observe(el));
});
</script>
@endsection @endsection

View File

@ -154,100 +154,74 @@ h1, h2, h3, h4, h5, h6,
/* ===== HORIZONTAL COURSE CARDS ===== */ /* ===== HORIZONTAL COURSE CARDS ===== */
.course-card { .course-card {
position: relative;
overflow: hidden; overflow: hidden;
background: #ffffff; background: #fff;
border: 1px solid rgba(226, 232, 240, 0.9); border: 1px solid var(--card-border);
border-radius: 26px; border-radius: 22px;
box-shadow: 0 10px 30px -5px rgba(15, 23, 42, 0.06); box-shadow: 0 8px 24px var(--shadow-color);
transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); transition: transform 0.4s cubic-bezier(0.165, 0.84, 0.44, 1), box-shadow 0.4s cubic-bezier(0.165, 0.84, 0.44, 1), border-color 0.4s ease;
}
.course-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px;
background: linear-gradient(90deg, #3E51B8 0%, #FFE618 50%, #BC1A1A 100%);
opacity: 0.35;
transition: opacity 0.4s ease, height 0.4s ease;
z-index: 4;
}
.course-card:hover::before {
opacity: 1;
height: 5px;
} }
.course-card:hover { .course-card:hover {
transform: translateY(-8px); transform: translateY(-7px);
box-shadow: 0 25px 50px -10px rgba(62, 81, 184, 0.18); box-shadow: 0 22px 48px rgba(62, 81, 184, 0.14);
border-color: rgba(62, 81, 184, 0.3); border-color: rgba(62, 81, 184, 0.25);
} }
.course-image-wrapper { .course-image-wrapper {
padding: 16px; padding: 20px;
height: 100%; height: 100%;
position: relative;
overflow: hidden; overflow: hidden;
} }
.course-card img { .course-card img {
height: 240px; height: 220px;
width: 100%; width: 100%;
object-fit: cover; object-fit: cover;
border-radius: 20px; border-radius: 16px;
transition: transform 0.6s cubic-bezier(0.165, 0.84, 0.44, 1); transition: transform 0.6s cubic-bezier(0.165, 0.84, 0.44, 1);
} }
.course-card:hover img { .course-card:hover img {
transform: scale(1.08); transform: scale(1.05);
} }
.course-card .card-body { .course-card .card-body {
padding: 28px 32px 28px 12px; padding: 32px 32px 32px 10px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
@media (max-width: 767px) { @media (max-width: 767px) {
.course-card .card-body { .course-card .card-body {
padding: 16px 24px 24px 24px; padding: 0 24px 24px 24px;
}
.course-image-wrapper {
padding: 16px 16px 0 16px;
} }
} }
.course-title { .course-title {
font-size: 22px; font-size: 23px;
font-weight: 750; font-weight: 750;
line-height: 1.35; line-height: 1.3;
color: #0F172A; color:#2B2B2B;
margin-bottom: 6px; margin-bottom: 8px;
transition: color 0.3s ease; transition: color 0.3s ease;
} }
.course-card:hover .course-title { .course-card:hover .course-title {
color: #3E51B8; color: var(--secondary);
} }
.course-author { .course-author {
font-size: 13.5px; font-size: 14px;
font-weight: 600; font-weight: 600;
color: #3085C3; color: #910909;
margin-bottom: 12px; margin-bottom: 14px;
display: flex;
align-items: center;
gap: 6px;
} }
.course-short-desc { .course-short-desc {
font-size: 14.5px; font-size: 14.5px;
color: #64748B; color: #556575;
margin-bottom: 18px; margin-bottom: 20px;
line-height: 1.6; line-height: 1.6;
} }
@ -260,34 +234,30 @@ h1, h2, h3, h4, h5, h6,
} }
.badge-bestseller { .badge-bestseller {
position: absolute;
top: 28px;
left: 28px;
z-index: 3;
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
gap: 6px; gap: 5px;
background: linear-gradient(135deg, #BC1A1A 0%, #E11D48 100%); background: linear-gradient(135deg, var(--secondary) 0%, var(--accent-orange) 100%);
color: #fff; color: #fff;
font-weight: 800; font-weight: 700;
font-size: 11px; font-size: 10.5px;
padding: 6px 14px; padding: 4px 12px;
border-radius: 999px; border-radius: 30px;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.06em; letter-spacing: 0.05em;
box-shadow: 0 4px 14px rgba(188, 26, 26, 0.4); box-shadow: 0 4px 10px rgba(188, 26, 26, 0.2), 0 0 0 0 rgba(188, 26, 26, 0.4);
animation: badgePulse 2.4s ease-out infinite; animation: badgePulse 2.4s ease-out infinite;
} }
@keyframes badgePulse { @keyframes badgePulse {
0% { box-shadow: 0 4px 14px rgba(188, 26, 26, 0.4), 0 0 0 0 rgba(188, 26, 26, 0.45); } 0% { box-shadow: 0 4px 10px rgba(188, 26, 26, 0.2), 0 0 0 0 rgba(188, 26, 26, 0.4); }
70% { box-shadow: 0 4px 14px rgba(188, 26, 26, 0.4), 0 0 0 8px rgba(188, 26, 26, 0); } 70% { box-shadow: 0 4px 10px rgba(188, 26, 26, 0.2), 0 0 0 7px rgba(188, 26, 26, 0); }
100% { box-shadow: 0 4px 14px rgba(188, 26, 26, 0.4), 0 0 0 0 rgba(188, 26, 26, 0); } 100% { box-shadow: 0 4px 10px rgba(188, 26, 26, 0.2), 0 0 0 0 rgba(188, 26, 26, 0); }
} }
.rating-star { .rating-star {
color: #f59e0b; color: #f39c12;
font-weight: 750; font-weight: 700;
font-size: 14px; font-size: 14px;
display: flex; display: flex;
align-items: center; align-items: center;
@ -313,7 +283,7 @@ h1, h2, h3, h4, h5, h6,
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
width: 0; width: 0;
color: #f59e0b; color: #f39c12;
transition: width 1.4s cubic-bezier(0.16, 1, 0.3, 1); transition: width 1.4s cubic-bezier(0.16, 1, 0.3, 1);
} }
@ -322,7 +292,7 @@ h1, h2, h3, h4, h5, h6,
} }
.rating-count { .rating-count {
color: #64748B; color: var(--text-muted);
font-size: 13.5px; font-size: 13.5px;
font-weight: 500; font-weight: 500;
} }
@ -331,58 +301,49 @@ h1, h2, h3, h4, h5, h6,
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
gap: 10px; gap: 10px;
font-size: 13px; font-size: 12.5px;
margin-bottom: 22px; color: var(--success-green);
margin-bottom: 24px;
font-weight: 600; font-weight: 600;
} }
.course-features span { .course-features span {
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
background: rgba(62, 81, 184, 0.08); background: rgba(16, 185, 129, 0.08);
color: #3E51B8; padding: 5px 12px;
padding: 6px 14px; border-radius: 8px;
border-radius: 10px; transition: transform 0.3s ease, background-color 0.3s ease;
border: 1px solid rgba(62, 81, 184, 0.15);
transition: all 0.3s ease;
} }
.course-card:hover .course-features span { .course-card:hover .course-features span {
background: rgba(62, 81, 184, 0.15); background: rgba(16, 185, 129, 0.14);
transform: translateY(-2px); transform: translateY(-2px);
} }
.course-features span i { .course-features span i {
margin-right: 6px; margin-right: 6px;
color: #3085C3;
} }
.course-footer { .course-footer {
margin-top: auto; margin-top: auto;
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: 14px;
padding-top: 18px;
border-top: 1px dashed #E2E8F0;
} }
.read-btn { .read-btn {
background: linear-gradient(135deg, #0F2C59 0%, #3E51B8 100%); background: #822424;
color: #fff; color: #fff;
padding: 12px 28px; padding: 13px 28px;
font-weight: 700; font-weight: 600;
font-size: 14.5px; font-size: 15px;
border-radius: 999px; border-radius: 14px;
transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1); transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);
border: none; border: 2px solid transparent;
text-decoration: none; text-decoration: none;
display: inline-flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
gap: 8px; gap: 8px;
box-shadow: 0 6px 18px rgba(62, 81, 184, 0.25); box-shadow: 0 4px 12px rgba(10, 103, 223, 0.2);
} }
.read-btn .read-btn-arrow { .read-btn .read-btn-arrow {
@ -390,163 +351,104 @@ h1, h2, h3, h4, h5, h6,
} }
.read-btn:hover { .read-btn:hover {
background: linear-gradient(135deg, #BC1A1A 0%, #822424 100%); background: linear-gradient(135deg, var(--secondary) 0%, var(--secondary-hover) 100%);
color: #fff; color: #fff;
transform: translateY(-2px); transform: translateY(-2px);
box-shadow: 0 10px 24px rgba(188, 26, 26, 0.35); box-shadow: 0 6px 18px rgba(188, 26, 26, 0.3);
} }
.read-btn:hover .read-btn-arrow { .read-btn:hover .read-btn-arrow {
transform: translateX(5px); transform: translateX(4px);
} }
/* --- Features Section --- */ /* --- Features Section --- */
.features-section { .features-section {
position: relative; background-color: var(--bg-light);
border-radius: 32px; padding: 80px 40px;
padding: 85px 40px;
margin-bottom: 40px; margin-bottom: 40px;
overflow: hidden; background-image: radial-gradient(rgba(62, 81, 184, 0.04) 1px, transparent 0);
border: 1px solid rgba(255, 255, 255, 0.15); background-size: 20px 20px;
box-shadow: 0 25px 60px -15px rgba(0, 0, 0, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.2);
} }
.features-eyebrow { .features-eyebrow {
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
gap: 8px; gap: 8px;
background: linear-gradient(135deg, rgba(255, 230, 24, 0.18) 0%, rgba(227, 100, 20, 0.22) 100%); background: rgba(255, 255, 255, 0.12);
border: 1px solid rgba(255, 230, 24, 0.45); border: 1px solid rgba(255, 255, 255, 0.25);
backdrop-filter: blur(12px); backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
color: #FFE618; color: #FFE618;
font-size: 13px; font-size: 12.5px;
font-weight: 700; font-weight: 700;
letter-spacing: 0.12em; letter-spacing: 0.08em;
text-transform: uppercase; text-transform: uppercase;
padding: 8px 22px; padding: 7px 18px;
border-radius: 999px; border-radius: 999px;
margin-bottom: 20px; margin-bottom: 16px;
box-shadow: 0 4px 18px rgba(255, 230, 24, 0.15);
transition: all 0.3s ease;
}
.features-eyebrow i {
animation: starPulse 2s infinite ease-in-out;
}
@keyframes starPulse {
0%, 100% { transform: scale(1); filter: drop-shadow(0 0 2px #FFE618); }
50% { transform: scale(1.25); filter: drop-shadow(0 0 8px #FFE618); }
} }
.features-section h2 { .features-section h2 {
font-size: clamp(2.2rem, 4.2vw, 3.2rem); font-size: 45px;
font-weight: 800; font-weight: 800;
color: #ffffff; color: #ffffff;
letter-spacing: -0.02em;
margin-bottom: 54px; margin-bottom: 54px;
text-shadow: 0 4px 20px rgba(0, 0, 0, 0.5);
position: relative;
display: inline-block;
}
.features-section h2::after {
content: '';
display: block;
width: 60px;
height: 4px;
background: linear-gradient(90deg, #3E51B8, #FFE618, #BC1A1A);
border-radius: 4px;
margin: 16px auto 0;
box-shadow: 0 0 12px rgba(255, 230, 24, 0.6);
} }
.feature-box { .feature-box {
position: relative; position: relative;
background: rgba(255, 255, 255, 0.08); background: #fff;
backdrop-filter: blur(18px); padding: 40px 28px;
-webkit-backdrop-filter: blur(18px); border-radius: 24px;
padding: 44px 28px 38px;
border-radius: 26px;
height: 100%; height: 100%;
transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); transition: all 0.4s cubic-bezier(0.165, 0.84, 0.44, 1);
border: 1px solid rgba(255, 255, 255, 0.14); border: 1px solid var(--card-border);
text-align: center; text-align: center;
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.25); box-shadow: 0 6px 20px rgba(62, 81, 184, 0.02);
overflow: hidden; overflow: hidden;
z-index: 1;
}
.feature-box::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 4px;
background: linear-gradient(90deg, #3E51B8 0%, #FFE618 50%, #BC1A1A 100%);
opacity: 0.35;
transition: opacity 0.4s ease, height 0.4s ease;
}
.feature-box:hover::before {
opacity: 1;
height: 5px;
} }
.feature-index { .feature-index {
position: absolute; position: absolute;
top: 18px; top: 14px;
right: 20px; right: 18px;
font-family: 'Poppins', 'Segoe UI', Arial, sans-serif; font-family: 'Poppins', 'Segoe UI', Arial, sans-serif;
font-size: 13px; font-size: 13px;
font-weight: 800; font-weight: 700;
color: rgba(255, 255, 255, 0.5); color: rgba(62, 81, 184, 0.25);
letter-spacing: 0.08em; letter-spacing: 0.05em;
background: rgba(255, 255, 255, 0.08);
padding: 3px 10px;
border-radius: 12px;
border: 1px solid rgba(255, 255, 255, 0.12);
transition: all 0.4s ease;
}
.feature-box:hover .feature-index {
color: #FFE618;
background: rgba(255, 230, 24, 0.15);
border-color: rgba(255, 230, 24, 0.4);
transform: scale(1.05);
} }
.feature-icon-wrapper { .feature-icon-wrapper {
width: 66px; width: 58px;
height: 66px; height: 58px;
background: linear-gradient(135deg, rgba(62, 81, 184, 0.35) 0%, rgba(10, 103, 223, 0.2) 100%); background-color: rgba(62, 81, 184, 0.08);
color: #60A5FA; color: var(--primary);
border-radius: 20px; border-radius: 16px;
border: 1px solid rgba(96, 165, 250, 0.35);
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
font-size: 26px; font-size: 24px;
margin: 0 auto 26px; margin: 0 auto 24px;
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.2);
transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
} }
.feature-box:hover { .feature-box:hover {
transform: translateY(-12px); transform: translateY(-8px);
background: rgba(255, 255, 255, 0.14); box-shadow: 0 15px 35px rgba(62, 81, 184, 0.12);
border-color: rgba(255, 255, 255, 0.32); border-color: rgba(188, 26, 26, 0.2);
box-shadow: 0 30px 60px rgba(0, 0, 0, 0.45), 0 0 30px rgba(62, 81, 184, 0.3); color:#6a2525 ;
}
.feature-box:hover .feature-index {
color: rgba(188, 26, 26, 0.35);
} }
.feature-box:hover .feature-icon-wrapper { .feature-box:hover .feature-icon-wrapper {
background: linear-gradient(135deg, #3E51B8 0%, #BC1A1A 100%); background: linear-gradient(135deg, var(--secondary) 0%, var(--accent-orange) 100%);
color: #ffffff; color: #fff;
border-color: transparent; transform: rotateY(180deg);
transform: scale(1.12) rotate(6deg); box-shadow: 0 8px 15px rgba(188, 26, 26, 0.25);
box-shadow: 0 15px 30px rgba(188, 26, 26, 0.4), 0 0 20px rgba(62, 81, 184, 0.6);
} }
.feature-icon-wrapper i { .feature-icon-wrapper i {
@ -554,32 +456,25 @@ h1, h2, h3, h4, h5, h6,
} }
.feature-box:hover .feature-icon-wrapper i { .feature-box:hover .feature-icon-wrapper i {
transform: scale(1.15); transform: rotateY(-180deg);
} }
.feature-box h5 { .feature-box h5 {
font-size: 20px; font-size: 19px;
font-weight: 750; font-weight: 700;
color: #ffffff; color: #181818;
margin-bottom: 14px; margin-bottom: 12px;
transition: color 0.3s ease;
} }
.feature-box:hover h5 { .feature-box h5:hover {
color: #ffffff; color: #822424 ;
text-shadow: 0 2px 10px rgba(255, 255, 255, 0.3);
} }
.feature-box p { .feature-box p {
font-size: 14.5px; font-size: 14.5px;
color: #CBD5E1; color: var(--text-muted);
margin-bottom: 0; margin-bottom: 0;
line-height: 1.65; line-height: 1.6;
transition: color 0.3s ease;
}
.feature-box:hover p {
color: #F8FAFC;
} }
#noResults { #noResults {
@ -648,11 +543,8 @@ h1, h2, h3, h4, h5, h6,
<div class="row g-0 align-items-center"> <div class="row g-0 align-items-center">
{{-- Course Image --}} {{-- Course Image --}}
<div class="col-md-4 position-relative"> <div class="col-md-4">
<div class="course-image-wrapper"> <div class="course-image-wrapper">
@if($course->badge)
<span class="badge-bestseller"><i class="fa-solid fa-bolt"></i> {{ $course->badge }}</span>
@endif
<img src="{{ $course->image }}" alt="{{ $course->title }}"> <img src="{{ $course->image }}" alt="{{ $course->title }}">
</div> </div>
</div> </div>
@ -660,30 +552,21 @@ h1, h2, h3, h4, h5, h6,
{{-- Course Details --}} {{-- Course Details --}}
<div class="col-md-8"> <div class="col-md-8">
<div class="card-body"> <div class="card-body">
<div class="d-flex align-items-center justify-content-between flex-wrap gap-2 mb-1"> <h4 class="course-title">{{ $course->title }}</h4>
<h4 class="course-title mb-0">{{ $course->title }}</h4>
@if($course->status)
<span class="small fw-bold status-chip" style="background: rgba(16, 185, 129, 0.1); color: #10B981; padding: 4px 12px; border-radius: 999px;"><i class="fa-solid fa-circle-check"></i> {{ ucfirst($course->status) }}</span>
@endif
</div>
@if($course->author) @if($course->author)
<div class="course-author"> <div class="course-author">
<i class="fa-solid fa-graduation-cap me-1"></i> {{ $course->author }} <i class="fa-solid fa-user-gear me-1"></i> {{ $course->author }}
</div> </div>
@endif @endif
<p class="course-short-desc">{{ $course->desc }}</p> <p class="course-short-desc">{{ $course->desc }}</p>
<div class="course-features"> <div class="course-meta-row">
<span><i class="fa-solid fa-layer-group"></i> Level: {{ $course->level ?? 'General' }}</span> @if($course->badge)
@if($course->duration) <span class="badge-bestseller"><i class="fa-solid fa-bolt"></i> {{ $course->badge }}</span>
<span><i class="fa-solid fa-clock"></i> Duration: {{ $course->duration }}</span>
@endif @endif
</div>
<div class="course-footer">
<div class="d-flex align-items-center gap-2 flex-wrap">
@if($course->rating) @if($course->rating)
<span class="rating-star"> <span class="rating-star">
<span class="star-rating" style="--rating: {{ $course->rating }};"> <span class="star-rating" style="--rating: {{ $course->rating }};">
@ -699,7 +582,15 @@ h1, h2, h3, h4, h5, h6,
@endif @endif
</div> </div>
<a href="/apply" class="read-btn">Apply Course <i class="fa-solid fa-arrow-right read-btn-arrow"></i></a> <div class="course-features">
<span><i class="fas fa-tools"></i> Level: {{ $course->level ?? 'General' }}</span>
@if($course->duration)
<span><i class="fas fa-certificate"></i> Duration: {{ $course->duration }}</span>
@endif
</div>
<div class="course-footer" style="max-width: 200px;">
<a href="/apply" class="read-btn">Apply Course <i class="fa-solid fa-paper-plane read-btn-arrow"></i></a>
</div> </div>
</div> </div>
</div> </div>
@ -721,7 +612,7 @@ h1, h2, h3, h4, h5, h6,
<section class="pb-5 why-study-section"> <section class="pb-5 why-study-section">
<div class="container"> <div class="container">
<div class="features-section text-center animate-on-scroll fade-up-init" <div class="features-section text-center animate-on-scroll fade-up-init"
style="background-image: linear-gradient(135deg, rgba(15, 23, 42, 0.92) 0%, rgba(30, 41, 59, 0.88) 50%, rgba(15, 23, 42, 0.95) 100%), url('https://images.pexels.com/photos/4489749/pexels-photo-4489749.jpeg?auto=compress&cs=tinysrgb&w=1600'); style="background-image: linear-gradient(rgba(77, 103, 169, 0.61), rgba(0, 0, 0, 0.9)), url('https://images.pexels.com/photos/4489749/pexels-photo-4489749.jpeg?auto=compress&cs=tinysrgb&w=1600');
background-size: cover; background-size: cover;
background-position: center; background-position: center;
background-repeat: no-repeat;"> background-repeat: no-repeat;">

View File

@ -231,9 +231,9 @@
<div class="mobile-user-profile"> <div class="mobile-user-profile">
@if(session()->has('admin_id')) @if(session()->has('admin_id'))
<div class="dropdown"> <div class="dropdown">
<a class="text-white text-decoration-none dropdown-toggle d-flex flex-column align-items-center justify-content-center gap-0" href="#" role="button" id="userMenuMobile" data-bs-toggle="dropdown" aria-expanded="false" style="line-height: 1.1;"> <a class="text-white text-decoration-none dropdown-toggle d-flex align-items-center gap-2" href="#" role="button" id="userMenuMobile" data-bs-toggle="dropdown" aria-expanded="false">
<i class="fa-solid fa-circle-user" style="font-size: 24px; color: var(--theme-yellow);"></i> <i class="fa-solid fa-circle-user" style="font-size: 26px; color: var(--theme-yellow);"></i>
<span class="fst-italic" style="font-size: 11px;">{{ session('admin_name', 'Admin') }}</span> <span class="fw-semibold small">{{ session('admin_name', 'Admin') }}</span>
</a> </a>
<ul class="dropdown-menu dropdown-menu-end shadow" aria-labelledby="userMenuMobile"> <ul class="dropdown-menu dropdown-menu-end shadow" aria-labelledby="userMenuMobile">
<li> <li>

View File

@ -178,13 +178,10 @@
cursor: pointer; cursor: pointer;
color: white; color: white;
display: flex; display: flex;
flex-direction: column;
align-items: center; align-items: center;
justify-content: center; gap: 8px;
gap: 2px;
user-select: none; user-select: none;
text-decoration: none !important; text-decoration: none !important;
line-height: 1.1;
} }
.user-dropdown-toggle:hover { .user-dropdown-toggle:hover {
@ -192,14 +189,12 @@
} }
.user-profile-name { .user-profile-name {
font-weight: 500; font-weight: 600;
font-style: italic; font-size: 14px;
font-size: 11px; max-width: 120px;
max-width: 110px;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
text-align: center;
} }
.dropdown-menu { .dropdown-menu {

View File

@ -6,28 +6,27 @@
<meta name="csrf-token" content="{{ csrf_token() }}"> <meta name="csrf-token" content="{{ csrf_token() }}">
<title>@yield('title', 'Student Portal - Automobile Academic')</title> <title>@yield('title', 'Student Portal - Automobile Academic')</title>
<!-- Google Fonts & Font Awesome Icons & Bootstrap 5 --> <!-- Font Awesome Icons & Bootstrap 5 -->
<link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/css/all.min.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/css/all.min.css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<style> <style>
:root { :root {
--theme-navy: #1E233E; --theme-navy: #2D355B;
--theme-footer-navy: #15182C; --theme-footer-navy: #1F2541;
--theme-red: #822424; --theme-red: #822424;
--theme-red-hover: #df2c3e; --theme-red-hover: #df2c3e;
--theme-yellow: #FFEA85; --theme-yellow: #FFEA85;
--theme-bg: #F4F6F9; --theme-bg: #F6F6F6;
--sidebar-width: 260px; --sidebar-width: 260px;
--text-dark: #1E293B; --text-dark: #333333;
} }
* { * {
margin: 0; margin: 0;
padding: 0; padding: 0;
box-sizing: border-box; box-sizing: border-box;
font-family: 'Plus Jakarta Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-family: 'Segoe UI', sans-serif;
} }
body { body {
@ -41,61 +40,28 @@
.sidebar { .sidebar {
width: var(--sidebar-width); width: var(--sidebar-width);
height: 100vh; height: 100vh;
background: linear-gradient(180deg, #1E233E 0%, #15182C 100%); background: var(--theme-navy);
color: #fff; color: #fff;
position: fixed; position: fixed;
top: 0; top: 0;
left: 0; left: 0;
padding: 24px 0; padding: 24px 0;
transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1); transition: all 0.3s ease;
z-index: 1030; z-index: 1030;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
box-shadow: 4px 0 20px rgba(0,0,0,0.08); box-shadow: 2px 0 10px rgba(0,0,0,0.1);
} }
.sidebar .brand { .sidebar .brand {
padding: 0 20px 22px; padding: 0 24px 20px;
display: flex; font-weight: 700;
align-items: center;
gap: 12px;
border-bottom: 1px solid rgba(255,255,255,.08);
margin-bottom: 20px;
}
.brand-logo-icon {
width: 42px;
height: 42px;
border-radius: 12px;
background: linear-gradient(135deg, var(--theme-red) 0%, var(--theme-red-hover) 100%);
color: #ffffff;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.2rem;
box-shadow: 0 6px 16px rgba(130, 36, 36, 0.35);
}
.brand-text {
display: flex;
flex-direction: column;
line-height: 1.1;
}
.brand-text span {
font-weight: 800;
font-size: 1.25rem; font-size: 1.25rem;
color: #ffffff; color: #ffffff;
letter-spacing: -0.5px; border-bottom: 1px solid rgba(255,255,255,.15);
} margin-bottom: 12px;
display: flex;
.brand-sub { align-items: center;
font-size: 0.65rem;
font-weight: 700;
color: var(--theme-yellow);
letter-spacing: 1.5px;
opacity: 0.85;
margin-top: 2px;
} }
.sidebar .nav { .sidebar .nav {
@ -103,196 +69,67 @@
flex-direction: column; flex-direction: column;
flex-grow: 1; flex-grow: 1;
overflow-y: auto; overflow-y: auto;
padding: 0 14px;
gap: 4px;
} }
.sidebar .nav-link { .sidebar .nav-link {
color: rgba(255, 255, 255, 0.75); color: rgba(255, 255, 255, 0.85);
padding: 13px 18px; padding: 14px 24px;
font-size: 0.93rem; font-size: 0.95rem;
font-weight: 600; font-weight: 600;
display: flex; display: flex;
align-items: center; align-items: center;
gap: 14px; gap: 12px;
transition: all 0.25s cubic-bezier(0.16, 1, 0.3, 1); transition: all 0.2s ease;
border-radius: 14px; border-left: 4px solid transparent;
text-decoration: none; text-decoration: none;
position: relative;
} }
.sidebar .nav-link i { .sidebar .nav-link i {
width: 22px; width: 20px;
text-align: center; text-align: center;
font-size: 1.1rem;
transition: transform 0.25s ease, color 0.25s ease;
} }
.sidebar .nav-link:hover { .sidebar .nav-link:hover {
background: rgba(255, 255, 255, 0.08); background: rgba(255, 255, 255, 0.08);
color: var(--theme-yellow) !important; color: var(--theme-yellow) !important;
transform: translateX(4px); padding-left: 28px;
}
.sidebar .nav-link:hover i {
transform: scale(1.15);
color: var(--theme-yellow);
} }
.sidebar .nav-link.active { .sidebar .nav-link.active {
background: linear-gradient(90deg, rgba(255, 234, 133, 0.16) 0%, rgba(255, 234, 133, 0.06) 100%); background: var(--theme-footer-navy);
color: var(--theme-yellow) !important; color: var(--theme-yellow) !important;
border-left: 4px solid #F73F52;
font-weight: 700; font-weight: 700;
border-left: 4px solid var(--theme-yellow);
box-shadow: 0 6px 18px rgba(0, 0, 0, 0.15);
border-radius: 4px 14px 14px 4px;
}
.sidebar .nav-link.active i {
color: var(--theme-yellow);
} }
.sidebar-user-profile { .sidebar-user-profile {
padding: 16px 18px; padding: 15px 24px;
border-top: 1px solid rgba(255,255,255,.08); border-top: 1px solid rgba(255,255,255,.15);
margin-top: auto; margin-top: auto;
background: rgba(0, 0, 0, 0.25); background: var(--theme-footer-navy);
} }
.sidebar-user-profile .user-dropdown-toggle { .sidebar-user-profile .user-dropdown-toggle {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 12px; gap: 10px;
color: #fff; color: #fff;
text-decoration: none; text-decoration: none;
transition: all 0.2s ease; font-size: 0.95rem;
padding: 8px 10px; transition: color 0.2s ease;
border-radius: 12px;
background: rgba(255, 255, 255, 0.05);
border: 1px solid rgba(255, 255, 255, 0.08);
} }
.sidebar-user-profile .user-dropdown-toggle:hover { .sidebar-user-profile .user-dropdown-toggle:hover {
background: rgba(255, 255, 255, 0.12);
border-color: rgba(255, 234, 133, 0.3);
color: #ffffff;
}
.user-avatar-badge-sm {
width: 38px;
height: 38px;
border-radius: 50%;
background: linear-gradient(135deg, var(--theme-navy) 0%, var(--theme-footer-navy) 100%);
border: 2px solid var(--theme-yellow);
color: var(--theme-yellow); color: var(--theme-yellow);
display: flex;
align-items: center;
justify-content: center;
font-weight: 800;
font-size: 0.95rem;
flex-shrink: 0;
box-shadow: 0 4px 10px rgba(0,0,0,0.2);
}
.user-info-text {
display: flex;
flex-direction: column;
overflow: hidden;
text-align: left;
}
.user-name-text {
font-weight: 700;
font-size: 0.88rem;
color: #ffffff;
line-height: 1.2;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.user-email-text {
font-size: 0.72rem;
font-style: italic;
color: rgba(255, 255, 255, 0.7);
line-height: 1.2;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* Dark Glassmorphic User Dropdown Popup */
.user-dropdown-menu {
background: linear-gradient(145deg, #1A1E36 0%, #111428 100%) !important;
border: 1px solid rgba(255, 255, 255, 0.12) !important;
box-shadow: 0 16px 40px rgba(0, 0, 0, 0.5) !important;
border-radius: 16px !important;
margin-bottom: 12px !important;
padding: 8px !important;
width: 220px;
backdrop-filter: blur(16px);
}
.user-dropdown-item {
display: flex;
align-items: center;
gap: 12px;
transition: all 0.25s cubic-bezier(0.16, 1, 0.3, 1);
color: #ffffff !important;
text-decoration: none;
padding: 10px 12px;
border-radius: 12px;
}
.user-dropdown-item:hover {
background: rgba(255, 255, 255, 0.08) !important;
transform: translateX(3px);
}
.dropdown-item-icon-blue {
width: 36px;
height: 36px;
border-radius: 10px;
background: rgba(59, 130, 246, 0.15);
color: #60A5FA;
border: 1px solid rgba(59, 130, 246, 0.3);
display: flex;
align-items: center;
justify-content: center;
font-size: 0.95rem;
flex-shrink: 0;
}
.dropdown-item-icon-red {
width: 36px;
height: 36px;
border-radius: 10px;
background: rgba(239, 68, 68, 0.15);
color: #F87171;
border: 1px solid rgba(239, 68, 68, 0.3);
display: flex;
align-items: center;
justify-content: center;
font-size: 0.95rem;
flex-shrink: 0;
} }
.main { .main {
margin-left: var(--sidebar-width); margin-left: var(--sidebar-width);
width: calc(100% - var(--sidebar-width)); width: calc(100% - var(--sidebar-width));
min-height: 100vh; min-height: 100vh;
padding: 32px 40px; padding: 40px;
background: var(--theme-bg); background: var(--theme-bg);
transition: all 0.3s ease; transition: all 0.3s ease;
display: flex;
flex-direction: column;
align-items: center;
}
.portal-content-container {
width: 100%;
max-width: 1280px;
margin: 0 auto;
} }
.mobile-header { .mobile-header {
@ -384,9 +221,9 @@
<div class="mobile-user-profile"> <div class="mobile-user-profile">
@if(session()->has('student_id')) @if(session()->has('student_id'))
<div class="dropdown"> <div class="dropdown">
<a class="text-white text-decoration-none dropdown-toggle d-flex flex-column align-items-center justify-content-center gap-0" href="#" role="button" id="userMenuMobile" data-bs-toggle="dropdown" aria-expanded="false" style="line-height: 1.1;"> <a class="text-white text-decoration-none dropdown-toggle d-flex align-items-center gap-2" href="#" role="button" id="userMenuMobile" data-bs-toggle="dropdown" aria-expanded="false">
<i class="fa-solid fa-circle-user" style="font-size: 24px; color: var(--theme-yellow);"></i> <i class="fa-solid fa-circle-user" style="font-size: 26px; color: var(--theme-yellow);"></i>
<span class="fst-italic" style="font-size: 11px;">{{ session('student_name') }}</span> <span class="fw-semibold small">{{ session('student_name') }}</span>
</a> </a>
<ul class="dropdown-menu dropdown-menu-end shadow" aria-labelledby="userMenuMobile"> <ul class="dropdown-menu dropdown-menu-end shadow" aria-labelledby="userMenuMobile">
<li> <li>
@ -413,17 +250,11 @@
<!-- Sidebar Navigation --> <!-- Sidebar Navigation -->
<aside class="sidebar" id="sidebar"> <aside class="sidebar" id="sidebar">
<div class="brand"> <div class="brand">
<div class="brand-logo-icon"> <i class="fa-solid fa-car-side me-2"></i> AutoEdu
<i class="fa-solid fa-car-side"></i>
</div>
<div class="brand-text">
<span>AutoEdu</span>
<small class="brand-sub">STUDENT ACADEMY</small>
</div>
</div> </div>
<nav class="nav"> <nav class="nav">
<a href="/student-portal" class="nav-link {{ request()->is('Dashboard*') || request()->is('student-portal*') ? 'active' : '' }}"> <a href="/Dashboard" class="nav-link {{ request()->is('Dashboard*') ? 'active' : '' }}">
<i class="fa-solid fa-gauge"></i> Dashboard <i class="fa-solid fa-gauge"></i> Dashboard
</a> </a>
<a href="/mycourse" class="nav-link {{ request()->is('mycourse*') ? 'active' : '' }}"> <a href="/mycourse" class="nav-link {{ request()->is('mycourse*') ? 'active' : '' }}">
@ -450,44 +281,27 @@
@if(session()->has('student_id')) @if(session()->has('student_id'))
<div class="dropdown dropup"> <div class="dropdown dropup">
<a class="user-dropdown-toggle dropdown-toggle" href="#" role="button" id="userMenuDesktop" data-bs-toggle="dropdown" aria-expanded="false"> <a class="user-dropdown-toggle dropdown-toggle" href="#" role="button" id="userMenuDesktop" data-bs-toggle="dropdown" aria-expanded="false">
<div class="user-avatar-badge-sm"> <i class="fa-solid fa-circle-user" style="font-size: 24px; color: var(--theme-yellow);"></i>
{{ strtoupper(substr(session('student_name', 'S'), 0, 1)) }} <span class="text-truncate" style="max-width: 150px;">{{ session('student_name') }}</span>
</div>
<div class="user-info-text">
<span class="user-name-text">{{ session('student_name', 'Student') }}</span>
<span class="user-email-text">Active Session</span>
</div>
</a> </a>
<ul class="dropdown-menu user-dropdown-menu shadow-lg p-2 animate slideIn" aria-labelledby="userMenuDesktop"> <ul class="dropdown-menu dropdown-menu-start shadow w-100" aria-labelledby="userMenuDesktop">
<li> <li>
<a class="dropdown-item user-dropdown-item py-2.5 px-3 rounded-3" href="{{ route('StudentProfile') }}"> <a class="dropdown-item" href="{{ route('StudentProfile') }}">
<div class="dropdown-item-icon-blue"> <i class="fa-solid fa-user me-2"></i> Profile
<i class="fa-solid fa-user-gear"></i>
</div>
<div>
<span class="fw-bold d-block text-white" style="font-size: 0.88rem;">My Profile</span>
<small class="text-white-50" style="font-size: 0.72rem;">View & edit details</small>
</div>
</a> </a>
</li> </li>
<li><hr class="dropdown-divider border-white opacity-10 my-1"></li> <li><hr class="dropdown-divider"></li>
<li> <li>
<button type="button" onclick="submitLogout()" class="dropdown-item user-dropdown-item py-2.5 px-3 rounded-3 border-0 bg-transparent w-100 text-start"> <button type="button" onclick="submitLogout()" class="dropdown-item text-danger border-0 bg-transparent w-100 text-start">
<div class="dropdown-item-icon-red"> <i class="fa-solid fa-right-from-bracket me-2"></i> Logout
<i class="fa-solid fa-right-from-bracket"></i>
</div>
<div>
<span class="fw-bold d-block text-danger" style="font-size: 0.88rem;">Logout</span>
<small class="text-danger-subtle opacity-75" style="font-size: 0.72rem;">Sign out of session</small>
</div>
</button> </button>
</li> </li>
</ul> </ul>
</div> </div>
@else @else
<div class="d-flex gap-2"> <div class="d-flex gap-2">
<a href="/" class="btn btn-outline-light btn-sm w-100 rounded-pill">Sign In</a> <a href="/" class="btn btn-outline-light btn-sm w-100">Sign In</a>
</div> </div>
@endif @endif
</div> </div>

File diff suppressed because it is too large Load Diff

View File

@ -4,463 +4,281 @@
@section('content') @section('content')
<!-- Bootstrap 5 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Font Awesome -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<!-- Google Font -->
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700&display=swap" rel="stylesheet">
<style> <style>
:root { :root {
--theme-navy: #1E233E; --theme-navy: #2D355B; /* Primary Navy */
--theme-navy-dark: #15182C; --theme-navy-dark: #1F2541; /* Dark Navy */
--theme-red: #822424; --theme-red: #822424; /* Primary Accent Red */
--theme-red-hover: #df2c3e; --theme-red-hover: #df2c3e; /* Red Hover */
--theme-yellow: #FFEA85; --theme-yellow: #FFEA85; /* Accent Yellow/Gold */
--theme-bg: #F4F6F9; --bg-light: #F6F6F6; /* Page Background */
--text-dark: #1E293B; --white: #ffffff;
} }
/* Page Header Hero */ body {
.timetable-hero { font-family: 'Poppins', sans-serif;
background: linear-gradient(135deg, #1E233E 0%, #2A1F3B 50%, #4A1A24 100%); background: var(--bg-light);
border-radius: 20px;
padding: 32px 38px;
margin-bottom: 28px;
box-shadow: 0 12px 32px rgba(30, 35, 62, 0.16);
position: relative;
overflow: hidden;
} }
.timetable-hero::before { /* Page Header Hero Section */
content: ''; .page-header {
position: absolute; background: linear-gradient(135deg, #2B293F 0%, #94A6F959 100%) !important;
top: -50%; color: var(--white);
right: -10%; padding: 35px 30px;
width: 350px; border-radius: 16px;
height: 350px; margin-bottom: 30px;
background: radial-gradient(circle, rgba(255, 234, 133, 0.15) 0%, rgba(255, 234, 133, 0) 70%); box-shadow: 0 8px 25px rgba(31, 37, 65, 0.15);
border-radius: 50%; border-left: 5px solid var(--theme-red);
pointer-events: none;
} }
.btn-print { .page-header h2 {
background: #ffffff;
color: #1E233E;
font-weight: 700; font-weight: 700;
padding: 11px 26px;
border-radius: 50px;
border: none;
box-shadow: 0 6px 18px rgba(0,0,0,0.12);
transition: all 0.25s cubic-bezier(0.16, 1, 0.3, 1);
} }
.btn-print:hover { .page-header p {
background: var(--theme-yellow); opacity: .85;
color: #1E233E;
transform: translateY(-2px);
box-shadow: 0 10px 24px rgba(255, 234, 133, 0.4);
} }
/* Top Cards */ /* Info Cards & Wrapper */
.top-info-card { .info-card {
background: #ffffff; background: var(--white);
border: 1px solid #E2E8F0; border: 1px solid #e2e8f0;
border-radius: 20px; border-radius: 16px;
padding: 26px; box-shadow: 0 4px 15px rgba(0, 0, 0, .04);
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.03); }
.today-card {
background: var(--white);
border: 1px solid #e2e8f0;
border-radius: 16px;
box-shadow: 0 4px 15px rgba(0, 0, 0, .04);
padding: 25px;
height: 100%; height: 100%;
} }
.card-title-heading { .today-card h5,
font-size: 1.05rem; .info-card h5 {
font-weight: 700; font-weight: 600;
color: #0F172A; color: var(--theme-navy);
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 20px;
} }
/* Timeline Item for Today */ /* Timetable Card Section */
.today-class-item { .table-card {
border-radius: 14px; background: var(--white);
padding: 14px 18px; border: 1px solid #e2e8f0;
margin-bottom: 12px; border-radius: 16px;
transition: all 0.25s cubic-bezier(0.16, 1, 0.3, 1); box-shadow: 0 4px 15px rgba(0, 0, 0, .04);
}
.today-class-item:hover {
transform: translateX(4px);
}
.today-class-item.theory {
background: linear-gradient(135deg, #EFF6FF 0%, #E0E7FF 100%);
border: 1px solid #C7D2FE;
}
.today-class-item.practical {
background: linear-gradient(135deg, #FEF2F2 0%, #FEE2E2 100%);
border: 1px solid #FCA5A5;
}
.today-class-item.workshop {
background: linear-gradient(135deg, #FFFBEB 0%, #FEF3C7 100%);
border: 1px solid #FDE68A;
}
/* Legend Badges */
.legend-pill {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 9px 18px;
border-radius: 50px;
font-size: 0.84rem;
font-weight: 700;
margin-right: 10px;
margin-bottom: 12px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.03);
}
.legend-pill.theory {
background: linear-gradient(135deg, #EFF6FF 0%, #DBEAFE 100%);
color: #1E40AF;
border: 1px solid #BFDBFE;
}
.legend-pill.practical {
background: linear-gradient(135deg, #FEF2F2 0%, #FEE2E2 100%);
color: #991B1B;
border: 1px solid #FCA5A5;
}
.legend-pill.workshop {
background: linear-gradient(135deg, #FFFBEB 0%, #FEF3C7 100%);
color: #92400E;
border: 1px solid #FDE68A;
}
.legend-pill.break {
background: linear-gradient(135deg, #FEFCE8 0%, #FEF08A 100%);
color: #713F12;
border: 1px solid #FDE047;
}
/* Timetable Grid Container */
.timetable-wrapper {
background: #ffffff;
border-radius: 20px;
border: 1px solid #E2E8F0;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.04);
overflow: hidden; overflow: hidden;
} }
.table-modern { .table thead {
margin-bottom: 0; background: var(--theme-navy);
border-collapse: separate; color: var(--white);
border-spacing: 0;
} }
.table-modern thead tr { .table thead th {
background: linear-gradient(135deg, #1E233E 0%, #2D355B 100%);
color: #ffffff;
}
.table-modern thead th {
padding: 20px 16px;
font-size: 0.88rem;
font-weight: 800;
text-transform: uppercase;
letter-spacing: 0.6px;
border: none;
text-align: center;
vertical-align: middle;
}
.table-modern thead th.today-header {
background: linear-gradient(180deg, rgba(255, 234, 133, 0.22) 0%, rgba(255, 234, 133, 0.1) 100%);
color: var(--theme-yellow);
border-bottom: 4px solid var(--theme-yellow);
}
.table-modern tbody th.time-column {
background: #F8FAFC;
color: #334155;
font-weight: 700;
font-size: 0.85rem;
padding: 20px 14px;
text-align: center;
vertical-align: middle;
border-right: 1px solid #E2E8F0;
border-bottom: 1px solid #E2E8F0;
width: 150px;
}
.table-modern tbody td {
padding: 14px;
vertical-align: middle;
text-align: center;
border-right: 1px solid #F1F5F9;
border-bottom: 1px solid #E2E8F0;
background: #ffffff;
transition: background 0.2s ease;
min-width: 165px;
}
.table-modern tbody td.today-cell {
background: rgba(255, 234, 133, 0.05);
}
.table-modern tbody tr:hover td {
background: rgba(248, 250, 252, 0.85);
}
/* Vibrant Class Cards inside Cells */
.class-cell-card {
border-radius: 14px;
padding: 12px 14px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.04);
transition: all 0.28s cubic-bezier(0.16, 1, 0.3, 1);
cursor: default;
position: relative;
}
.class-cell-card:hover {
transform: translateY(-4px) scale(1.02);
box-shadow: 0 10px 24px rgba(0, 0, 0, 0.1);
}
.class-cell-card.theory {
background: linear-gradient(135deg, #EFF6FF 0%, #E0E7FF 100%);
border: 1px solid #C7D2FE;
}
.class-cell-card.practical {
background: linear-gradient(135deg, #FEF2F2 0%, #FEE2E2 100%);
border: 1px solid #FCA5A5;
}
.class-cell-card.workshop {
background: linear-gradient(135deg, #FFFBEB 0%, #FEF3C7 100%);
border: 1px solid #FDE68A;
}
/* Badges inside Class Cell */
.type-tag-modern {
font-size: 0.72rem;
font-weight: 800;
padding: 4px 12px;
border-radius: 50px;
display: inline-flex;
align-items: center;
gap: 4px;
margin-bottom: 8px;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.04);
}
.type-tag-modern.theory {
background: #ffffff;
color: #1E40AF;
border: 1px solid #BFDBFE;
}
.type-tag-modern.practical {
background: #ffffff;
color: #991B1B;
border: 1px solid #FCA5A5;
}
.type-tag-modern.workshop {
background: #ffffff;
color: #92400E;
border: 1px solid #FDE68A;
}
.subject-title {
font-weight: 800;
font-size: 0.9rem;
line-height: 1.35;
letter-spacing: -0.2px;
}
.subject-title.theory { color: #1E1B4B; }
.subject-title.practical { color: #822424; }
.subject-title.workshop { color: #78350F; }
.empty-cell-badge {
color: #94A3B8;
font-size: 0.82rem;
font-weight: 600; font-weight: 600;
display: inline-flex; padding: 15px 10px;
align-items: center;
gap: 4px;
opacity: 0.6;
} }
/* Lunch Break Row */ .table td,
.lunch-break-row td { .table th {
background: linear-gradient(90deg, #FEFCE8 0%, #FEF3C7 50%, #FEFCE8 100%) !important; text-align: center;
color: #713F12; vertical-align: middle;
font-weight: 800; min-width: 140px;
font-size: 0.9rem;
padding: 16px !important;
border-bottom: 1px solid #FDE047 !important;
letter-spacing: 0.4px;
} }
/* Print Optimization */ .table tbody th {
@media print { background-color: #f8fafc;
.sidebar, .mobile-header, .btn-print, .title-accent { color: var(--theme-navy);
display: none !important; font-weight: 600;
} }
.main {
margin-left: 0 !important; /* Updated Status Badges */
padding: 0 !important; .badge-theory {
width: 100% !important; background: var(--theme-navy) !important;
color: var(--white) !important;
} }
.portal-content-container {
max-width: 100% !important; .badge-practical {
background: var(--theme-red) !important;
color: var(--white) !important;
} }
.timetable-hero {
background: #1E233E !important; .badge-workshop {
color: #ffffff !important; background: #e67e22 !important; /* Workshop Accent */
-webkit-print-color-adjust: exact; color: var(--white) !important;
}
.badge-break {
background: var(--theme-yellow) !important;
color: var(--theme-navy-dark) !important;
font-weight: 600;
}
.table tbody tr:hover {
background: rgba(45, 53, 91, 0.02);
transition: .3s;
}
.lunch-row {
background-color: rgba(255, 234, 133, 0.25) !important;
color: var(--theme-navy-dark);
font-weight: 600;
}
.legend span {
margin-right: 12px;
display: inline-block;
margin-bottom: 8px;
}
.legend .badge {
padding: 8px 14px;
font-size: 12px;
}
/* Custom Buttons */
.download-btn {
border-radius: 8px;
padding: 10px 22px;
background-color: var(--theme-red) !important;
color: var(--white) !important;
border: none;
font-weight: 500;
transition: all 0.2s ease;
}
.download-btn:hover {
background-color: var(--theme-red-hover) !important;
color: var(--white) !important;
}
@media(max-width:768px) {
.table td,
.table th {
font-size: 13px;
min-width: 120px;
}
.page-header {
padding: 25px;
} }
} }
</style> </style>
<div class="portal-content-container"> <div class="container py-4">
<!-- Hero Header --> <!-- Header -->
<div class="timetable-hero d-flex align-items-center justify-content-between flex-wrap gap-3"> <div class="page-header">
<div class="position-relative" style="z-index: 1;"> <div class="d-flex justify-content-between align-items-center flex-wrap gap-3">
<div class="d-flex align-items-center gap-2 mb-2"> <div>
<span class="badge bg-warning bg-opacity-20 text-warning border border-warning border-opacity-20 px-3 py-1.5 rounded-pill fw-semibold" style="font-size: 0.78rem;"> <h2 class="mb-1"><i class="fas fa-calendar-alt me-2" style="color: var(--theme-yellow);"></i>My Class Timetable</h2>
<i class="fa-solid fa-calendar-days me-1"></i> Weekly Academic Schedule <p class="mb-0">
</span> Automobile Engineering Academy Student Portal
</div>
<h2 class="fw-bold text-white mb-1" style="letter-spacing: -0.5px;">
My Class Timetable
</h2>
<p class="text-white-50 mb-0 fs-6">
Automobile Engineering Academy Student Academic Schedule 2026
</p> </p>
</div> </div>
<button class="btn btn-print shadow-sm" onclick="window.print()"> <button class="btn download-btn shadow-sm" onclick="window.print()">
<i class="fa-solid fa-print me-2"></i>Print Timetable <i class="fas fa-print me-2"></i>Print Timetable
</button> </button>
</div> </div>
</div>
<!-- Top Grid Info Cards --> <!-- Top Grid Info -->
<div class="row g-3 g-lg-4 mb-4"> <div class="row g-4 mb-4">
<!-- Today's Schedule Card --> <!-- Today's Schedule Card -->
<div class="col-lg-5"> <div class="col-lg-4">
<div class="top-info-card"> <div class="today-card">
<div class="card-title-heading"> <h5 class="mb-3">
<div class="rounded-3 bg-danger bg-opacity-10 text-danger p-2.5 d-flex align-items-center justify-content-center" style="width: 40px; height: 40px;"> <i class="fas fa-clock me-2" style="color: var(--theme-red);"></i>
<i class="fa-solid fa-clock-rotate-left fs-5"></i> Today's Schedule ({{ $todayName ?? 'Today' }})
</div> </h5>
<div>
Today's Schedule
<span class="badge bg-danger-subtle text-danger border border-danger-subtle ms-1 fw-bold rounded-pill" style="font-size: 0.72rem;">
{{ $todayName ?? 'Today' }}
</span>
</div>
</div>
@forelse($todaySchedule ?? [] as $todayItem) @forelse($todaySchedule ?? [] as $todayItem)
@php @php
$typeClass = 'theory'; $borderStyle = 'var(--theme-navy)';
$iconClass = 'fa-book-open'; $badgeClass = 'badge-theory';
if(strtolower($todayItem->type) == 'practical') { if(strtolower($todayItem->type) == 'practical') {
$typeClass = 'practical'; $borderStyle = 'var(--theme-red)';
$iconClass = 'fa-flask'; $badgeClass = 'badge-practical';
} elseif(strtolower($todayItem->type) == 'workshop') { } elseif(strtolower($todayItem->type) == 'workshop') {
$typeClass = 'workshop'; $borderStyle = '#e67e22';
$iconClass = 'fa-screwdriver-wrench'; $badgeClass = 'badge-workshop';
} }
@endphp @endphp
<div class="today-class-item {{ $typeClass }}"> <div class="mb-3 p-2 rounded" style="background: #f8fafc; border-left: 3px solid {{ $borderStyle }};">
<div class="d-flex align-items-center justify-content-between mb-1"> <strong>{{ $todayItem->time_slot }}</strong><br>
<span class="fw-bold text-dark small"><i class="fa-regular fa-clock me-1 text-secondary"></i> {{ $todayItem->time_slot }}</span> <span class="badge {{ $badgeClass }} me-1">{{ $todayItem->type }}</span>
<span class="type-tag-modern {{ $typeClass }} mb-0"> <span>{{ $todayItem->subject_name }}</span>
<i class="fa-solid {{ $iconClass }}"></i> {{ $todayItem->type }}
</span>
</div>
<div class="subject-title {{ $typeClass }}">{{ $todayItem->subject_name }}</div>
</div> </div>
@empty @empty
<div class="p-4 text-center border rounded-4 bg-light bg-opacity-50"> <div class="p-3 text-center text-muted border rounded">
<div class="rounded-circle bg-warning bg-opacity-20 text-warning d-inline-flex align-items-center justify-content-center p-3 mb-2" style="width: 54px; height: 54px;"> <i class="fas fa-coffee me-1"></i> No classes scheduled for today!
<i class="fa-solid fa-mug-hot fs-3"></i>
</div>
<h6 class="fw-bold text-dark mb-1">No classes scheduled for today!</h6>
<p class="small text-muted mb-0">Take time to review your course materials or relax.</p>
</div> </div>
@endforelse @endforelse
</div> </div>
</div> </div>
<!-- Timetable Legend & Guidelines Card --> <!-- Legend Card -->
<div class="col-lg-7"> <div class="col-lg-8">
<div class="top-info-card d-flex flex-column justify-content-between"> <div class="info-card p-4 h-100 d-flex flex-column justify-content-between">
<div> <div>
<div class="card-title-heading"> <h5 class="mb-3">
<div class="rounded-3 bg-primary bg-opacity-10 text-primary p-2.5 d-flex align-items-center justify-content-center" style="width: 40px; height: 40px;"> <i class="fas fa-info-circle me-2" style="color: var(--theme-navy);"></i>
<i class="fa-solid fa-sliders fs-5"></i> Timetable Legend
</div> </h5>
<span>Timetable Legend & Session Types</span>
</div>
<div class="mb-3"> <div class="legend mb-2">
<span class="legend-pill theory"> <span>
<i class="fa-solid fa-book-open"></i> Theory Session <span class="badge badge-theory">Theory</span>
</span> </span>
<span class="legend-pill practical"> <span>
<i class="fa-solid fa-flask"></i> Practical Session <span class="badge badge-practical">Practical</span>
</span> </span>
<span class="legend-pill workshop"> <span>
<i class="fa-solid fa-screwdriver-wrench"></i> Workshop Training <span class="badge badge-workshop">Workshop</span>
</span> </span>
<span class="legend-pill break"> <span>
<i class="fa-solid fa-utensils"></i> Rest / Lunch Break <span class="badge badge-break">Break</span>
</span> </span>
</div> </div>
</div> </div>
<div class="pt-3 border-top border-slate-100 mt-2"> <div>
<div class="p-3 rounded-4 bg-danger bg-opacity-10 text-danger border border-danger border-opacity-10 d-flex align-items-center gap-3"> <hr class="text-muted">
<div class="rounded-circle bg-danger text-white p-2 d-flex align-items-center justify-content-center flex-shrink-0" style="width: 32px; height: 32px;"> <p class="mb-0 text-muted small">
<i class="fa-solid fa-exclamation" style="font-size: 14px;"></i> <i class="fas fa-exclamation-circle me-1" style="color: var(--theme-red);"></i>
</div> Please arrive at least 15 minutes before each class. Attendance is compulsory for all practical sessions.
<span class="small fw-semibold"> </p>
Please arrive at least 15 minutes before each session. 100% attendance is mandatory for practical and workshop modules.
</span>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<!-- Main Timetable Grid --> <!-- Timetable Grid -->
<div class="timetable-wrapper mb-5"> <div class="table-card">
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-modern align-middle mb-0"> <table class="table table-bordered align-middle mb-0">
<thead> <thead>
<tr> <tr>
<th style="width: 150px;"> <th>Time</th>
<i class="fa-regular fa-clock me-1"></i> Time
</th>
@foreach($days as $day) @foreach($days as $day)
@php <th class="{{ ($todayName ?? '') == $day ? 'bg-danger text-white' : '' }}">
$isToday = ($todayName ?? '') == $day; {{ $day }} {{ ($todayName ?? '') == $day ? '(Today)' : '' }}
@endphp
<th class="{{ $isToday ? 'today-header' : '' }}">
{{ $day }}
@if($isToday)
<span class="badge bg-warning text-dark px-2 py-1 rounded-pill ms-1 fw-bold" style="font-size: 0.7rem; box-shadow: 0 2px 8px rgba(255, 234, 133, 0.4);">
<i class="fa-solid fa-star me-1"></i>TODAY
</span>
@endif
</th> </th>
@endforeach @endforeach
</tr> </tr>
@ -468,6 +286,7 @@
<tbody> <tbody>
@forelse($timeSlots as $slot) @forelse($timeSlots as $slot)
@php @php
// Lunch/Break Check
$isBreakRow = false; $isBreakRow = false;
foreach($days as $d) { foreach($days as $d) {
if(isset($schedule[$slot][$d]) && strtolower($schedule[$slot][$d]->type) == 'break') { if(isset($schedule[$slot][$d]) && strtolower($schedule[$slot][$d]->type) == 'break') {
@ -478,49 +297,32 @@
@endphp @endphp
@if($isBreakRow) @if($isBreakRow)
<tr class="lunch-break-row"> <tr class="lunch-row">
<th class="time-column">{{ $slot }}</th> <th>{{ $slot }}</th>
<td colspan="5" class="text-center"> <td colspan="5">
<i class="fa-solid fa-mug-hot me-2 text-warning"></i> LUNCH BREAK & REST TIME (12:30 PM - 01:30 PM) 🍴 LUNCH BREAK / REST TIME
</td> </td>
</tr> </tr>
@else @else
<tr> <tr>
<th class="time-column"> <th>{{ $slot }}</th>
<div class="d-flex align-items-center justify-content-center gap-1">
<i class="fa-regular fa-clock text-muted opacity-75" style="font-size: 0.8rem;"></i>
<span>{{ $slot }}</span>
</div>
</th>
@foreach($days as $day) @foreach($days as $day)
@php <td>
$isToday = ($todayName ?? '') == $day;
@endphp
<td class="{{ $isToday ? 'today-cell' : '' }}">
@if(isset($schedule[$slot][$day])) @if(isset($schedule[$slot][$day]))
@php @php
$cell = $schedule[$slot][$day]; $cell = $schedule[$slot][$day];
$typeClass = 'theory'; $typeClass = 'badge-theory';
$iconClass = 'fa-book-open';
if(strtolower($cell->type) == 'practical') { if(strtolower($cell->type) == 'practical') {
$typeClass = 'practical'; $typeClass = 'badge-practical';
$iconClass = 'fa-flask';
} elseif(strtolower($cell->type) == 'workshop') { } elseif(strtolower($cell->type) == 'workshop') {
$typeClass = 'workshop'; $typeClass = 'badge-workshop';
$iconClass = 'fa-screwdriver-wrench';
} }
@endphp @endphp
<div class="class-cell-card {{ $typeClass }}"> <span class="badge {{ $typeClass }} mb-1">{{ $cell->type }}</span><br>
<div class="type-tag-modern {{ $typeClass }}"> {{ $cell->subject_name }}
<i class="fa-solid {{ $iconClass }}"></i> {{ $cell->type }}
</div>
<div class="subject-title {{ $typeClass }}">{{ $cell->subject_name }}</div>
</div>
@else @else
<div class="empty-cell-badge"> <span class="text-muted">-</span>
<i class="fa-solid fa-minus"></i>
</div>
@endif @endif
</td> </td>
@endforeach @endforeach
@ -528,9 +330,8 @@
@endif @endif
@empty @empty
<tr> <tr>
<td colspan="6" class="text-center py-5 text-muted"> <td colspan="6" class="text-center py-4 text-muted">
<i class="fa-solid fa-calendar-xmark text-secondary mb-2 fs-2 d-block"></i> <i class="fas fa-info-circle me-1"></i> No timetable data available right now.
<span class="fw-semibold">No timetable data available for this week.</span>
</td> </td>
</tr> </tr>
@endforelse @endforelse

View File

@ -172,7 +172,7 @@ body {
position: absolute; position: absolute;
inset: 0; inset: 0;
z-index: 1; z-index: 1;
background: linear-gradient(135deg, rgba(30, 35, 62, 0.88) 0%, rgba(21, 24, 44, 0.82) 50%, rgba(15, 18, 35, 0.92) 100%); background: linear-gradient(rgba(207, 226, 255, 0.88), rgba(0, 9, 15, 0.75));
pointer-events: none; pointer-events: none;
} }
@ -181,8 +181,8 @@ body {
position: absolute; position: absolute;
inset: 0; inset: 0;
z-index: 2; z-index: 2;
background: radial-gradient(circle at top right, rgba(255, 234, 133, 0.15), transparent 35%), background: radial-gradient(circle at top right, rgba(255, 255, 255, 0.12), transparent 28%),
radial-gradient(circle at bottom left, rgba(130, 36, 36, 0.2), transparent 40%); radial-gradient(circle at bottom left, rgba(255, 255, 255, 0.08), transparent 30%);
pointer-events: none; pointer-events: none;
} }
@ -205,23 +205,22 @@ body {
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
gap: 8px; gap: 8px;
background: rgba(255, 234, 133, 0.12); background: rgba(255, 255, 255, 0.12);
border: 1px solid rgba(255, 234, 133, 0.3); border: 1px solid rgba(255, 255, 255, 0.25);
backdrop-filter: blur(14px); backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(12px);
color: var(--theme-yellow, #FFEA85); color: #fff;
font-size: 13px; font-size: 13px;
font-weight: 700; font-weight: 600;
letter-spacing: 0.05em; letter-spacing: 0.04em;
text-transform: uppercase; text-transform: uppercase;
padding: 9px 20px; padding: 8px 18px;
border-radius: 999px; border-radius: 999px;
margin-bottom: 24px; margin-bottom: 22px;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
} }
.hero-badge i { .hero-badge i {
color: #FFEA85; color: #f2e862;
} }
.hero h1 { .hero h1 {
@ -230,15 +229,14 @@ body {
margin: 0; margin: 0;
line-height: 1.05; line-height: 1.05;
letter-spacing: -0.04em; letter-spacing: -0.04em;
text-shadow: 0 24px 60px rgba(0, 0, 0, 0.4); text-shadow: 0 24px 60px rgba(0, 0, 0, 0.3);
color: #ffffff;
} }
.hero p { .hero p {
font-size: clamp(1rem, 1.2vw, 1.4rem); font-size: clamp(1rem, 1.2vw, 1.4rem);
max-width: 760px; max-width: 760px;
margin: 24px auto 0; margin: 24px auto 0;
color: rgba(255, 255, 255, 0.9); color: rgba(255, 255, 255, 0.92);
letter-spacing: 0.01em; letter-spacing: 0.01em;
} }
@ -255,58 +253,6 @@ body {
margin-left: 10px; margin-left: 10px;
} }
.btn-theme {
background: linear-gradient(135deg, #822424 0%, #df2c3e 100%) !important;
color: #ffffff !important;
padding: 14px 32px;
border-radius: 999px;
font-weight: 700;
border: 1px solid rgba(255, 255, 255, 0.2) !important;
box-shadow: 0 8px 24px rgba(130, 36, 36, 0.4) !important;
transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1) !important;
}
.btn-theme:hover {
transform: translateY(-4px) !important;
box-shadow: 0 12px 30px rgba(130, 36, 36, 0.55) !important;
}
.btn-outline-theme {
background: rgba(255, 255, 255, 0.12) !important;
color: #ffffff !important;
border: 1px solid rgba(255, 255, 255, 0.35) !important;
padding: 14px 32px;
border-radius: 999px;
font-weight: 700;
backdrop-filter: blur(14px);
transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1) !important;
}
.btn-outline-theme:hover {
background: rgba(255, 255, 255, 0.22) !important;
color: #ffffff !important;
border-color: #ffffff !important;
transform: translateY(-4px) !important;
}
.btn-outline-light-custom {
background: #FFEA85 !important;
color: #1E233E !important;
border: none !important;
padding: 14px 32px;
border-radius: 999px;
font-weight: 800;
box-shadow: 0 8px 24px rgba(255, 234, 133, 0.35) !important;
transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1) !important;
}
.btn-outline-light-custom:hover {
background: #ffffff !important;
color: #1E233E !important;
transform: translateY(-4px) !important;
box-shadow: 0 12px 30px rgba(255, 255, 255, 0.4) !important;
}
.hero-stats { .hero-stats {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
@ -321,33 +267,31 @@ body {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 10px; gap: 10px;
background: rgba(255, 255, 255, 0.12); background: rgba(255, 255, 255, 0.1);
border: 1px solid rgba(255, 255, 255, 0.22); border: 1px solid rgba(255, 255, 255, 0.18);
backdrop-filter: blur(14px); backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(12px);
border-radius: 999px; border-radius: 999px;
padding: 11px 22px; padding: 10px 20px;
color: #fff; color: #fff;
transition: transform 0.3s ease, background-color 0.3s ease; transition: transform 0.3s ease, background-color 0.3s ease;
box-shadow: 0 6px 18px rgba(0, 0, 0, 0.18);
} }
.hero-stat-pill:hover { .hero-stat-pill:hover {
transform: translateY(-4px); transform: translateY(-3px);
background: rgba(255, 255, 255, 0.2); background: rgba(255, 255, 255, 0.16);
border-color: rgba(255, 234, 133, 0.4);
} }
.hero-stat-pill strong { .hero-stat-pill strong {
font-size: 18px; font-size: 17px;
font-weight: 800; font-weight: 800;
line-height: 1; line-height: 1;
color: #FFEA85; font-variant-numeric: tabular-nums;
} }
.hero-stat-pill span { .hero-stat-pill span {
font-size: 12px; font-size: 12px;
color: rgba(255, 255, 255, 0.88); color: rgba(255, 255, 255, 0.78);
display: block; display: block;
letter-spacing: 0.02em; letter-spacing: 0.02em;
} }
@ -373,51 +317,39 @@ body {
.course-card { .course-card {
position: relative; position: relative;
border: 1px solid rgba(226, 232, 240, 0.9); border: 1px solid var(--card-border);
border-radius: 26px; border-radius: 18px;
overflow: hidden; overflow: hidden;
background: #ffffff; background: #fff;
transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); transition: transform 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94), box-shadow 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94), border-color 0.4s ease;
box-shadow: 0 10px 30px -5px rgba(15, 23, 42, 0.06); box-shadow: 0 5px 15px var(--shadow-color);
} }
.course-card::before { .course-card::after {
content: ''; content: '';
position: absolute; position: absolute;
top: 0; inset: 0;
left: 0; z-index: 3;
right: 0; pointer-events: none;
height: 4px; background: linear-gradient(115deg, transparent 40%, rgba(255, 255, 255, 0.35) 50%, transparent 60%);
background: linear-gradient(90deg, #3E51B8 0%, #FFE618 50%, #BC1A1A 100%); transform: translateX(-120%);
opacity: 0.35; transition: transform 0.9s ease;
transition: opacity 0.4s ease, height 0.4s ease;
z-index: 4;
} }
.course-card:hover::before { .course-card:hover::after {
opacity: 1; transform: translateX(120%);
height: 5px;
} }
.course-card:hover { .course-card:hover {
transform: translateY(-10px); transform: translateY(-8px);
box-shadow: 0 25px 50px -10px rgba(62, 81, 184, 0.18); box-shadow: 0 24px 45px rgba(15, 44, 89, 0.16);
border-color: rgba(62, 81, 184, 0.3); border-color: rgba(48, 133, 195, 0.25);
} }
.course-image-wrapper { .course-image-wrapper {
position: relative; position: relative;
overflow: hidden; overflow: hidden;
height: 220px; height: 210px;
}
.course-image-wrapper::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(to top, rgba(15, 23, 42, 0.55) 0%, transparent 60%);
pointer-events: none;
z-index: 1;
} }
.course-card img { .course-card img {
@ -428,7 +360,7 @@ body {
} }
.course-card:hover img { .course-card:hover img {
transform: scale(1.09); transform: scale(1.12);
} }
.courses-section .row.g-4 > div { .courses-section .row.g-4 > div {
@ -437,32 +369,32 @@ body {
.badge-floating { .badge-floating {
position: absolute; position: absolute;
top: 16px; top: 15px;
left: 16px; left: 15px;
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
gap: 6px; gap: 5px;
background: linear-gradient(135deg, #BC1A1A 0%, #E11D48 100%); background: #BC1A1A;
color: #fff; color: #fff;
font-weight: 800; font-weight: 700;
font-size: 11px; font-size: 11px;
padding: 6px 14px; padding: 5px 12px;
border-radius: 999px; border-radius: 30px;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.06em; letter-spacing: 0.05em;
z-index: 2; z-index: 2;
box-shadow: 0 4px 14px rgba(188, 26, 26, 0.4); box-shadow: 0 4px 10px rgba(0,0,0,0.15), 0 0 0 0 rgba(188, 26, 26, 0.45);
animation: badgePulse 2.4s ease-out infinite; animation: badgePulse 2.4s ease-out infinite;
} }
@keyframes badgePulse { @keyframes badgePulse {
0% { box-shadow: 0 4px 14px rgba(188, 26, 26, 0.4), 0 0 0 0 rgba(188, 26, 26, 0.45); } 0% { box-shadow: 0 4px 10px rgba(0,0,0,0.15), 0 0 0 0 rgba(188, 26, 26, 0.45); }
70% { box-shadow: 0 4px 14px rgba(188, 26, 26, 0.4), 0 0 0 8px rgba(188, 26, 26, 0); } 70% { box-shadow: 0 4px 10px rgba(0,0,0,0.15), 0 0 0 8px rgba(188, 26, 26, 0); }
100% { box-shadow: 0 4px 14px rgba(188, 26, 26, 0.4), 0 0 0 0 rgba(188, 26, 26, 0); } 100% { box-shadow: 0 4px 10px rgba(0,0,0,0.15), 0 0 0 0 rgba(188, 26, 26, 0); }
} }
.course-card .card-body { .course-card .card-body {
padding: 26px 24px 22px; padding: 24px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
flex-grow: 1; flex-grow: 1;
@ -470,21 +402,21 @@ body {
.course-title { .course-title {
font-size: 20px; font-size: 20px;
font-weight: 750; font-weight: 700;
color: #0F172A; color: var(--primary);
margin-bottom: 8px; margin-bottom: 8px;
line-height: 1.35; line-height: 1.4;
transition: color 0.3s ease; transition: color 0.3s ease;
} }
.course-card:hover .course-title { .course-card:hover .course-title {
color: #3E51B8; color: #914040;
} }
.course-author { .course-author {
font-size: 13.5px; font-size: 13.5px;
font-weight: 600; font-weight: 500;
color: #3085C3; color: var(--accent-blue);
margin-bottom: 12px; margin-bottom: 12px;
display: flex; display: flex;
align-items: center; align-items: center;
@ -493,29 +425,25 @@ body {
.course-short-desc { .course-short-desc {
font-size: 14px; font-size: 14px;
color: #64748B; color: #556575;
line-height: 1.6; line-height: 1.6;
margin-bottom: 16px; margin-bottom: 15px;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
} }
.course-features-container { .course-features-container {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
gap: 8px; gap: 8px;
margin-bottom: 18px; margin-bottom: 15px;
} }
.feature-pill { .feature-pill {
background: rgba(62, 81, 184, 0.08); background: rgba(48, 133, 195, 0.08);
color: #3E51B8; color: var(--accent-blue);
font-size: 12px; font-size: 12px;
font-weight: 600; font-weight: 600;
padding: 5px 12px; padding: 4px 10px;
border-radius: 8px; border-radius: 6px;
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
gap: 6px; gap: 6px;
@ -523,26 +451,26 @@ body {
} }
.course-card:hover .feature-pill { .course-card:hover .feature-pill {
background: rgba(62, 81, 184, 0.15); background: rgba(48, 133, 195, 0.15);
transform: translateY(-2px); transform: translateY(-2px);
} }
.course-footer { .course-footer {
margin-top: auto; margin-top: auto;
padding-top: 16px; padding-top: 15px;
border-top: 1px dashed #E2E8F0; border-top: 1px solid rgba(15, 44, 89, 0.08);
} }
.course-meta-row { .course-meta-row {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
margin-bottom: 16px; margin-bottom: 15px;
} }
.rating-star { .rating-star {
color: #f59e0b; color: #f39c12;
font-weight: 750; font-weight: 700;
font-size: 14px; font-size: 14px;
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
@ -550,21 +478,17 @@ body {
} }
.rating-count { .rating-count {
color: #64748B; color: var(--text-muted);
font-weight: 500; font-weight: 500;
font-size: 13px;
} }
.status-chip { .status-chip {
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
gap: 5px; gap: 5px;
background: rgba(16, 185, 129, 0.1); background: rgba(46, 204, 113, 0.1);
color: #10B981; padding: 4px 10px;
padding: 4px 12px;
border-radius: 999px; border-radius: 999px;
font-size: 12px;
font-weight: 700;
} }
.star-rating { .star-rating {
@ -586,7 +510,7 @@ body {
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
width: 0; width: 0;
color: #f59e0b; color: #f39c12;
transition: width 1.4s cubic-bezier(0.16, 1, 0.3, 1); transition: width 1.4s cubic-bezier(0.16, 1, 0.3, 1);
} }
@ -595,11 +519,11 @@ body {
} }
.read-btn { .read-btn {
background: linear-gradient(135deg, #0F2C59 0%, #3E51B8 100%); background:#822424;
color: #ffffff; color: white;
padding: 12px 24px; padding: 12px 20px;
font-weight: 700; font-weight: 700;
border-radius: 999px; border-radius: 14px;
font-size: 14px; font-size: 14px;
transition: all 0.3s ease; transition: all 0.3s ease;
text-decoration: none; text-decoration: none;
@ -607,7 +531,6 @@ body {
align-items: center; align-items: center;
justify-content: center; justify-content: center;
gap: 8px; gap: 8px;
box-shadow: 0 6px 18px rgba(62, 81, 184, 0.25);
} }
.read-btn .read-btn-arrow { .read-btn .read-btn-arrow {
@ -615,13 +538,13 @@ body {
} }
.course-card:hover .read-btn { .course-card:hover .read-btn {
background: linear-gradient(135deg, #BC1A1A 0%, #822424 100%); background: #6a1c1c;
color: #ffffff; color: #fff;
box-shadow: 0 10px 24px rgba(188, 26, 26, 0.35); box-shadow: 0 8px 18px rgba(130, 36, 36, 0.3);
} }
.course-card:hover .read-btn .read-btn-arrow { .course-card:hover .read-btn .read-btn-arrow {
transform: translateX(5px); transform: translateX(4px);
} }
/* ===== Why Choose Us ===== */ /* ===== Why Choose Us ===== */
@ -631,7 +554,7 @@ body {
left: 0; left: 0;
width: 100%; width: 100%;
height: 100%; height: 100%;
background: linear-gradient(135deg, rgba(15, 23, 42, 0.92) 0%, rgba(30, 41, 59, 0.88) 50%, rgba(15, 23, 42, 0.95) 100%), url('https://images.unsplash.com/photo-1581093803931-46e730e7622e?auto=format&fit=crop&w=1600&q=80'); background: linear-gradient(rgba(17, 17, 39, 0.9), rgba(0, 9, 15, 0.6)), url('https://images.unsplash.com/photo-1581093803931-46e730e7622e?auto=format&fit=crop&w=1600&q=80');
background-position: center; background-position: center;
background-size: cover; background-size: cover;
z-index: 1; z-index: 1;
@ -643,64 +566,43 @@ body {
} }
.custom-feature-card { .custom-feature-card {
position: relative; background: rgba(255, 255, 255, 0.43);
background: rgba(255, 255, 255, 0.08); backdrop-filter: blur(10px);
backdrop-filter: blur(18px); -webkit-backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(18px); border: 1px solid rgba(255, 255, 255, 0.08);
border: 1px solid rgba(255, 255, 255, 0.15); border-radius: 20px;
border-radius: 26px; padding: 36px 30px;
padding: 44px 30px 38px; transition: all 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94);
transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.25);
overflow: hidden;
height: 100%;
}
.custom-feature-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 4px;
background: linear-gradient(90deg, #3E51B8 0%, #FFE618 50%, #BC1A1A 100%);
opacity: 0.35;
transition: opacity 0.4s ease, height 0.4s ease;
}
.custom-feature-card:hover::before {
opacity: 1;
height: 5px;
} }
.custom-feature-card:hover { .custom-feature-card:hover {
transform: translateY(-12px); transform: translateY(-8px);
background: rgba(255, 255, 255, 0.14); background: rgba(0, 0, 0, 0.07);
border-color: rgba(255, 255, 255, 0.35); border-color: rgb(255, 255, 255);
box-shadow: 0 30px 60px rgba(0, 0, 0, 0.45), 0 0 30px rgba(62, 81, 184, 0.3); box-shadow: 0 20px 45px rgba(0, 0, 0, 0.25);
} }
.icon-box { .icon-box {
width: 68px; background: #6a2525;
height: 68px; color: #FFE618;
background: linear-gradient(135deg, rgba(62, 81, 184, 0.35) 0%, rgba(10, 103, 223, 0.2) 100%); width: 64px;
color: #60A5FA; height: 64px;
border-radius: 22px; border-radius: 16px;
border: 1px solid rgba(96, 165, 250, 0.35);
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
margin-bottom: 26px; margin-bottom: 22px;
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.2); box-shadow: 0 10px 24px rgba(0, 0, 0, 0.2);
transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); transition: all 0.35s ease;
} }
.custom-feature-card:hover .icon-box { .custom-feature-card:hover .icon-box {
background: linear-gradient(135deg, #3E51B8 0%, #BC1A1A 100%); transform: scale(1.08) rotate(-4deg);
color: #ffffff; }
border-color: transparent;
transform: scale(1.12) rotate(6deg); .custom-feature-card:hover .icon-box {
box-shadow: 0 15px 30px rgba(188, 26, 26, 0.4), 0 0 20px rgba(62, 81, 184, 0.6); background: #6a2525;
color: #faf9f5;
} }
/* ===== Animations ===== */ /* ===== Animations ===== */
@ -887,12 +789,12 @@ body {
</div> </div>
<div class="container h-100"> <div class="container h-100">
<div class="hero-content text-center animate-on-scroll animated fade-up-init"> <div class="hero-content text-center animate-on-scroll animated fade-up-init">
<span class="hero-badge"><i class="fa-solid fa-award me-1 text-warning"></i> Accredited Automotive Engineering Institute</span> <span class="hero-badge"><i class="fa-solid fa-award"></i> Accredited Automotive Engineering Institute</span>
<h1 class="display-4 fw-extrabold text-white">Automobile Engineering Academy</h1> <h1 class="display-4">Automobile Engineering Academy</h1>
<p class="mb-4 text-white-90 fs-5">Driving Innovation Through Education, Research &amp; Technology</p> <p class="mb-4">Driving Innovation Through Education, Research &amp; Technology</p>
<div class="d-flex flex-wrap justify-content-center gap-3"> <div class="d-flex flex-wrap justify-content-center gap-3">
<a href="{{ Route::has('apply') ? route('apply') : '#' }}" class="btn btn-theme"> <a href="{{ Route::has('apply') ? route('apply') : '#' }}" class="btn btn-theme" style="background: #822424; border: 2px solid #FFF;">
<i class="fa-solid fa-user-plus me-2"></i>Apply Now <i class="fa-solid fa-user-plus me-2"></i>Apply Now
</a> </a>
<a href="/courses" class="btn btn-outline-theme"> <a href="/courses" class="btn btn-outline-theme">
@ -1100,38 +1002,38 @@ body {
<div class="container why-content-wrapper position-relative" style="z-index: 2;"> <div class="container why-content-wrapper position-relative" style="z-index: 2;">
<div class="text-center mb-5 animate-on-scroll fade-up-init"> <div class="text-center mb-5 animate-on-scroll fade-up-init">
<span class="section-eyebrow" style="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.45); color: #FFE618; padding: 8px 22px; border-radius: 999px;"><i class="fa-solid fa-star"></i> Our Advantage</span> <span class="section-eyebrow" style="background: rgba(255,255,255,0.12); color: #FFE618;"><i class="fa-solid fa-star"></i> Our Advantage</span>
<h2 id="why-us-heading" class="display-5 text-white mb-0 fw-bold mt-3" style="letter-spacing: -0.02em;">Why Choose Us?</h2> <h2 id="why-us-heading" class="display-5 text-white mb-0 fw-bold" style="letter-spacing: -0.02em;">Why Choose Us?</h2>
</div> </div>
<div class="row g-4 justify-content-center animate-on-scroll fade-up-init"> <div class="row g-4 justify-content-center animate-on-scroll fade-up-init">
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<div class="custom-feature-card h-100 d-flex flex-column align-items-center text-center"> <div class="custom-feature-card h-100 d-flex flex-column align-items-center text-center p-4" style="border-radius: 20px; transition: all 0.4s ease;">
<div class="icon-box"> <div class="icon-box d-flex align-items-center justify-content-center" style="box-shadow: 0 10px 20px rgba(0,0,0,0.15); border-radius: 16px;">
<i class="fa-solid fa-flask-vial fs-3"></i> <i class="fa-solid fa-flask-vial fs-3 fa-beat-hover"></i>
</div> </div>
<h4 class="text-white fs-5 mb-3 fw-bold">Modern Laboratories</h4> <h4 class="text-white fs-5 mb-3 fw-semibold">Modern Laboratories</h4>
<p class="small mb-0 lh-base" style="color: #CBD5E1;">State-of-the-art facilities equipped with latest industrial testing tools & high-voltage rigs.</p> <p class="text-white-50 small mb-0 lh-base">State-of-the-art facilities equipped with latest industrial testing tools.</p>
</div> </div>
</div> </div>
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<div class="custom-feature-card h-100 d-flex flex-column align-items-center text-center"> <div class="custom-feature-card h-100 d-flex flex-column align-items-center text-center p-4" style="border-radius: 20px; transition: all 0.4s ease;">
<div class="icon-box"> <div class="icon-box d-flex align-items-center justify-content-center" style="box-shadow: 0 10px 20px rgba(0,0,0,0.15); border-radius: 16px;">
<i class="fa-solid fa-graduation-cap fs-3"></i> <i class="fa-solid fa-graduation-cap fs-3 fa-bounce-hover"></i>
</div> </div>
<h4 class="text-white fs-5 mb-3 fw-bold">Qualified Lecturers</h4> <h4 class="text-white fs-5 mb-3 fw-semibold">Qualified Lecturers</h4>
<p class="small mb-0 lh-base" style="color: #CBD5E1;">Learn directly from veteran automotive engineers, researchers, and TVEC certified instructors.</p> <p class="text-white-50 small mb-0 lh-base">Learn directly from veteran automotive engineers and researchers.</p>
</div> </div>
</div> </div>
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<div class="custom-feature-card h-100 d-flex flex-column align-items-center text-center"> <div class="custom-feature-card h-100 d-flex flex-column align-items-center text-center p-4" style="border-radius: 20px; transition: all 0.4s ease;">
<div class="icon-box"> <div class="icon-box d-flex align-items-center justify-content-center" style="box-shadow: 0 10px 20px rgba(0,0,0,0.15); border-radius: 16px;">
<i class="fa-solid fa-car fs-3"></i> <i class="fa-solid fa-car fs-3 fa-shake-hover"></i>
</div> </div>
<h4 class="text-white fs-5 mb-3 fw-bold">Hands-on Training</h4> <h4 class="text-white fs-5 mb-3 fw-semibold">Hands-on Training</h4>
<p class="small mb-0 lh-base" style="color: #CBD5E1;">Gain real-world diagnostics experience inside our dedicated workshop floors & EV testing bays.</p> <p class="text-white-50 small mb-0 lh-base">Gain real-world diagnostics experience inside our dedicated workshop floors.</p>
</div> </div>
</div> </div>
</div> </div>

View File

@ -19,7 +19,6 @@ use App\Http\Controllers\AdminProfileController;
use App\Http\Controllers\AdminTimetableController; use App\Http\Controllers\AdminTimetableController;
use App\Http\Controllers\AdminDashboardController; use App\Http\Controllers\AdminDashboardController;
use App\Http\Controllers\welcomeController; use App\Http\Controllers\welcomeController;
use App\Http\Controllers\DocumentDownloadController;
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@ -43,9 +42,6 @@ Route::view('/abouts', 'abouts')->name('abouts');
Route::view('/contact', 'contacts')->name('contact'); Route::view('/contact', 'contacts')->name('contact');
Route::view('/signin', 'signin')->name('signin'); Route::view('/signin', 'signin')->name('signin');
Route::get('/login', function () {
return redirect()->route('signin')->with('error', 'Please sign in to your account to continue!');
})->name('login');
Route::view('/signup', 'signup')->name('signup'); Route::view('/signup', 'signup')->name('signup');
/* /*
@ -99,7 +95,6 @@ Route::middleware(['web'])->group(function () {
})->name('student.portal'); })->name('student.portal');
Route::get('/StudentProfile', [StudentPortalController::class, 'showProfile'])->name('StudentProfile'); Route::get('/StudentProfile', [StudentPortalController::class, 'showProfile'])->name('StudentProfile');
Route::post('/StudentProfile/update', [StudentPortalController::class, 'updateProfile'])->name('student.profile.update');
Route::get('/results', [ResultsController::class, 'index'])->name('results'); Route::get('/results', [ResultsController::class, 'index'])->name('results');
Route::get('/Dashboard', function () { Route::get('/Dashboard', function () {
@ -130,12 +125,6 @@ Route::middleware(['web'])->group(function () {
Route::get('/mycourse', [CoureseAssignController::class, 'showMyCourse'])->name('mycourse'); Route::get('/mycourse', [CoureseAssignController::class, 'showMyCourse'])->name('mycourse');
Route::get('/module/{id}', [CoureseAssignController::class, 'showModule'])->name('module.show'); Route::get('/module/{id}', [CoureseAssignController::class, 'showModule'])->name('module.show');
/* Document Downloads */
Route::get('/student/download/calendar', [DocumentDownloadController::class, 'downloadAcademicCalendar'])->name('student.download.calendar');
Route::get('/student/download/handbook', [DocumentDownloadController::class, 'downloadStudentHandbook'])->name('student.download.handbook');
Route::get('/student/download/exam-code', [DocumentDownloadController::class, 'downloadExamCode'])->name('student.download.examcode');
Route::get('/student/download/helpdesk', [DocumentDownloadController::class, 'downloadHelpdeskGuide'])->name('student.download.helpdesk');
}); });
/* /*