diff --git a/.env.development b/.env.development
new file mode 100644
index 0000000..7affb16
--- /dev/null
+++ b/.env.development
@@ -0,0 +1,2 @@
+VITE_AUTH_URL="http://localhost:8080"
+VITE_ASSIGNMENT_URL="http://localhost:8082"
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index a547bf3..838b852 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,7 @@ yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
+*.env
node_modules
dist
dist-ssr
@@ -22,3 +23,4 @@ dist-ssr
*.njsproj
*.sln
*.sw?
+
diff --git a/src/pages/AssignmentPage.jsx b/src/pages/AssignmentPage.jsx
index a5de99c..f66dbff 100644
--- a/src/pages/AssignmentPage.jsx
+++ b/src/pages/AssignmentPage.jsx
@@ -1,6 +1,6 @@
import React, { useState, useEffect } from "react";
-import "../scss/components/_assignment.scss";
-import {useNavigate } from "react-router-dom";
+import "../scss/page/_assignment.scss";
+import { useNavigate } from "react-router-dom";
const AssignmentPage = () => {
const [assignmentId, setAssignmentId] = useState("");
@@ -30,7 +30,6 @@ const AssignmentPage = () => {
useEffect(() => {
document.title = "Assignment";
fetchAssignments();
-
}, []);
useEffect(() => {
@@ -137,7 +136,7 @@ const AssignmentPage = () => {
const handleEditClick = (qrCodeNumber) => {
console.log("Navigating to editor with QR Code Number:", qrCodeNumber);
- navigate('/editor', { state: { qrCodeNumber: qrCodeNumber } });
+ navigate("/editor", { state: { qrCodeNumber: qrCodeNumber } });
};
const handleSubmit = async (e) => {
@@ -370,23 +369,35 @@ const AssignmentPage = () => {
File Upload (optional)
- setFile(e.target.files[0])} />
+ setFile(e.target.files[0])}
+ />
- {loading && (
-
- )}
+
+ {loading && (
+
+ )}
-
-
- {editingIndex !== null ? "Update" : "Submit"}
-
-
{ resetForm(); setShowModal(false); }} disabled={loading}>
- Cancel
-
+
+
+ {editingIndex !== null ? "Update" : "Submit"}
+
+ {
+ resetForm();
+ setShowModal(false);
+ }}
+ disabled={loading}
+ >
+ Cancel
+
+
@@ -400,7 +411,7 @@ const AssignmentPage = () => {
if (!searchTerm.trim()) return true;
const regex = new RegExp(searchTerm, "i");
return (
- regex.test(project.studentname || project.studentName || "") ||
+ regex.test(project.studentname || project.studentName || "") ||
regex.test(project.campid || project.campID || "") ||
regex.test(project.programid || project.programID || "") ||
regex.test(project.title || "") ||
@@ -414,18 +425,35 @@ const AssignmentPage = () => {
.map((project, index) => (
-
Student Name: {project.studentname || project.studentName}
-
QR Number: {project.qrcodenumber || project.qrCodeNumber}
-
App Name: {project.appname || project.appName}
-
Game Snake ID: {project.snakegameid || project.snakeGameId}
-
URL: {project.assignmenturl || project.assignmentUrl}
+
+ Student Name: {" "}
+ {project.studentname || project.studentName}
+
+
+ QR Number: {" "}
+ {project.qrcodenumber || project.qrCodeNumber}
+
+
+ App Name: {" "}
+ {project.appname || project.appName}
+
+
+ Game Snake ID: {" "}
+ {project.snakegameid || project.snakeGameId}
+
+
+ URL: {" "}
+
+ {project.assignmenturl || project.assignmentUrl}
+
+
- {/* {project.title &&
{project.title} }
+ {/* {project.title &&
{project.title} }
{project.description &&
{project.description}
}
{project.fileName &&
Uploaded File: {project.fileName}
} */}
- {/* {project.assignmenturl && (
+ {/* {project.assignmenturl && (
{
)} */}
- {project.originalfile && (
-
-
- Original File
- {" "}
- |{" "}
-
- Editable File
-
-
- )}
+ {project.originalfile && (
+
+
+ Original File
+ {" "}
+ |{" "}
+
+ Editable File
+
+
+ )}
-
-
handleEdit(index)}>βοΈ Edit
-
handleDelete(index)}>ποΈ Delete
-
handleEditClick(project.qrcodenumber)}>
- π Editor
-
+
+ handleEdit(index)}>βοΈ Edit
+ handleDelete(index)}>ποΈ Delete
+ handleEditClick(project.qrcodenumber)}
+ >
+ π Editor
+
+
-
- ))}
+ ))}
)}
);
};
-export default AssignmentPage;
\ No newline at end of file
+export default AssignmentPage;
diff --git a/src/pages/HomePage.jsx b/src/pages/HomePage.jsx
index 67a4c2c..8ff1953 100644
--- a/src/pages/HomePage.jsx
+++ b/src/pages/HomePage.jsx
@@ -1,24 +1,18 @@
// Page - Home
import { useEffect } from "react";
+import Hero from "../components/Hero";
+import Services from "../components/Services";
const PageHome = () => {
useEffect(() => {
document.title = "Home";
}, []);
- const [user, setUser] = useState(null);
return (
-
- Home Page
-
- Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugit
- porro, dolorem, quod facere enim voluptate provident quo labore vero
- repellat nemo animi ad exercitationem rem quos, possimus libero
- deleniti laudantium?
-
-
+
+
);
diff --git a/src/routers/AppRouter.jsx b/src/routers/AppRouter.jsx
index 6ecc508..9230fff 100644
--- a/src/routers/AppRouter.jsx
+++ b/src/routers/AppRouter.jsx
@@ -26,10 +26,7 @@ const AppRouter = () => {
-
-
- >
+
}
/>
{
- const { user, isLoading } = useAuth();
-
- if (isLoading) {
- return loading...
;
- }
-
- if (!user) {
- return ;
- }
-
- if (role && user.role !== role) {
- return ;
- }
-
- return children;
-};
-
-export default ProtectedRoute;
diff --git a/src/scss/components/_assignment.scss b/src/scss/components/_assignment.scss
deleted file mode 100644
index 44c9184..0000000
--- a/src/scss/components/_assignment.scss
+++ /dev/null
@@ -1,421 +0,0 @@
-.assignment-page {
- max-width: 100%;
- padding: 20px;
- margin-top: 50rem;
- overflow-x: hidden;
- overflow-y: auto;
- min-height: 100vh;
- box-sizing: border-box;
-
- form {
- margin-bottom: 20px;
-
- div {
- margin-bottom: 15px;
-
- label {
- display: block;
- font-weight: bold;
- margin-bottom: 5px;
- }
-
- input[type="text"],
- textarea,
- input[type="file"] {
- width: 100%;
- padding: 8px;
- border: 1px solid #ccc;
- border-radius: 4px;
- }
-
- textarea {
- height: 80px;
- resize: vertical;
- }
- }
-
- button {
- padding: 8px 16px;
- background-color: #4285f4;
- color: white;
- border: none;
- border-radius: 4px;
- cursor: pointer;
-
- &:hover {
- background-color: #3367d6;
- }
- }
- }
-
-
- .assignment-links a {
- color: white !important;
- }
-
-
- .project-list {
- display: grid;
- grid-template-columns: repeat(3, 1fr);
- gap: 1.5rem;
- margin-top: 2rem;
- padding-bottom: 7rem;
-
- .project-item {
- background: #0f0f1a;
- border-radius: 12px;
- padding: 1.5rem;
- box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);
- transition: transform 0.2s ease, box-shadow 0.2s ease;
- overflow-wrap: break-word;
- // box-shadow: rgb(211, 0, 197) 0px 0px 15px, rgb(255, 42, 109) 0px 0px 25px;
- border: 2px solid rgb(75 187 236);
-
- .project-meta {
- margin-bottom: 0.75rem;
- color: lightgray;
-
- strong {
- color: #00bfff;
- font-weight: bold;
- }
- }
-
- h4 {
- margin: 0.5rem 0;
- font-size: 1.2rem;
- color: white;
- }
-
- p {
- margin: 1rem 0;
- color: white;
- line-height: 1.4;
- font-size: 15px;
- // margin-bottom: 10px;
-
- strong {
- color: #00bfff;
- font-weight: bold;
- }
- }
-
- .action-buttons {
- display: flex;
- gap: 0.5rem;
- margin-top: 0.75rem;
-
- button {
- background-color: #000000;
- border: 2px solid #00bfff;
- border-radius: 6px;
- padding: 0.4rem 0.8rem;
- cursor: pointer;
- font-size: 0.9rem;
-
- &:hover {
- background-color: #E4E4E4;
- border: 2px solid #E4E4E4;
- }
-
- &:nth-child(1) {
- color: #007fff;
- }
-
- &:nth-child(2) {
- color: #c0392b;
- }
-
- &:nth-child(3) {
- color: #16a085;
- }
- }
- }
- }
- }
-
-
-
- .modal-overlay {
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- background: rgba(0, 0, 0, 0.6);
- display: flex;
- align-items: center;
- justify-content: center;
- z-index: 1000;
- overflow: hidden;
- }
-
- .modal {
- background: #f3f3f3;
- padding: 2rem;
- border-radius: 12px;
- max-width: 500px;
- width: 100%;
- box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);
- animation: fadeIn 0.3s ease;
- overflow: auto;
- }
-
- .modal form {
- background-color: #f3f3f3;
- }
-
- .modal h3 {
- margin-bottom: 1rem;
- font-size: 1.5rem;
- font-weight: 600;
- color: #333;
- }
-
- .modal form > div {
- margin-bottom: 1rem;
- }
-
- .modal label {
- display: block;
- font-size: 0.9rem;
- font-weight: 500;
- margin-bottom: 0.4rem;
- color: black
- }
-
- .modal input[type="text"],
- .modal input[type="password"],
- .modal input[type="file"],
- .modal textarea {
- width: 100%;
- padding: 0.6rem 0.8rem;
- border: 1px solid #BBBBBB;
- border-radius: 6px;
- font-size: 0.95rem;
- transition: border-color 0.2s ease;
- background-color: white;
-
- &:focus {
- border-color: #007bff;
- outline: none;
- }
- }
-
- .modal textarea {
- resize: vertical;
- min-height: 80px;
- }
-
- .modal-buttons {
- display: flex;
- justify-content: flex-end;
- gap: 1rem;
- margin-top: 1.5rem;
- }
-
- .modal-buttons button {
- padding: 0.6rem 1.2rem;
- font-size: 0.95rem;
- border: none;
- border-radius: 6px;
- cursor: pointer;
- transition: background 0.2s ease;
- }
-
- .modal-buttons button[type="submit"] {
- background-color: #ff4b2b;
- color: #fff;
-
- &:hover {
- background-color: #FF2600;
- }
- }
-
- .modal-buttons button[type="button"] {
- background-color: #d3d3d3;
- color: #333;
-
- &:hover {
- background-color: #cfcfcf;
- }
- }
-
- @keyframes fadeIn {
- from {
- opacity: 0;
- transform: translateY(-10px);
- }
- to {
- opacity: 1;
- transform: translateY(0);
- }
- }
-}
-
-.assignment-header-box {
- background: #0f0f1a;
- border: 2px solid #00bfff;
- border-radius: 12px;
- padding: 50px 100px;
- text-align: center;
- margin-bottom: 2rem;
- // box-shadow: 0 0 20px #00bfff;
- box-shadow: rgb(211, 0, 197) 0px 0px 15px, rgb(255, 42, 109) 0px 0px 25px;
- border: 1px solid rgb(211, 0, 197);
- animation: pulseNeonBlue 2s infinite alternate;
-
- h2 {
- color: #00bfff;
- margin-bottom: 1rem;
- font-weight: bold;
- // text-shadow: rgb(5, 217, 232) 0px 0px 5px;
- }
-
- button {
- background-color: #000;
- border: 2px solid #00bfff;
- color: #00bfff;
- padding: 10px 20px;
- border-radius: 8px;
- cursor: pointer;
- font-size: 1rem;
- font-weight: bold;
- transition: all 0.3s ease;
-
- &:hover {
- background-color: #00bfff;
- color: #000;
- }
- }
-}
-
-// @keyframes pulseNeonBlue {
-// from {
-// box-shadow: 0 0 10px #00bfff, 0 0 20px #00bfff;
-// }
-// to {
-// box-shadow: 0 0 25px #00bfff, 0 0 40px #00bfff;
-// }
-// }
-
-@keyframes pulseNeonHybrid {
- from {
- box-shadow:
- 0 0 10px rgba(211, 0, 197, 0.7),
- 0 0 20px rgba(255, 42, 109, 0.7),
- 0 0 10px rgba(0, 191, 255, 0.7);
- }
- to {
- box-shadow:
- 0 0 25px rgba(211, 0, 197, 0.9),
- 0 0 40px rgba(255, 42, 109, 0.9),
- 0 0 30px rgba(0, 191, 255, 0.9);
- }
-}
-
-
-.assignment-list-box {
- margin-top: 40px;
-
- h3 {
- font-size: 1.5rem;
- margin-bottom: 20px;
- }
-
- .assignment-cards {
- display: grid;
- grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
- gap: 20px;
- }
-
- .assignment-card {
- background: #f5f5f5;
- padding: 20px;
- border-radius: 12px;
- box-shadow: 0 2px 6px rgba(0,0,0,0.1);
- transition: all 0.3s ease;
-
- p {
- margin: 6px 0;
- }
-
- a {
- color: #2c7be5;
- text-decoration: underline;
- word-break: break-word;
- }
-
- &:hover {
- transform: translateY(-4px);
- box-shadow: 0 4px 12px rgba(0,0,0,0.15);
- }
- }
-}
-
-// Search Bar Styling
-.assignment-search-box {
- margin: 1rem 0;
- input {
- width: 100%;
- // padding: 0.5rem;
- font-size: 1rem;
- border-radius: 8px;
- border: 1px solid #ccc;
- background-color: #1a1a2b;
- color: #fefefe;
- box-shadow: rgb(211, 0, 197) 0px 0px 15px, rgb(255, 42, 109) 0px 0px 25px;
-
- &::placeholder {
- color: #aaa;
- }
-
- &:focus {
- outline: none;
- border-color: rgb(211, 0, 197);
- }
- }
-}
-
-.password-field {
- .input-wrapper {
- position: relative;
-
- input {
- width: 100%;
- padding-right: 2.5rem;
- }
-
- .eye-icon {
- position: absolute;
- top: 50%;
- right: 0.75rem;
- transform: translateY(-50%);
- cursor: pointer;
- color: #555;
- user-select: none;
- }
- }
-}
-
-.spinner-container {
- display: flex;
- align-items: center;
- gap: 0.5rem;
- margin: 10px 0;
-}
-
-.spinner {
- width: 16px;
- height: 16px;
- border: 3px solid rgba(0, 0, 0, 0.2);
- border-top: 3px solid #333;
- border-radius: 50%;
- animation: spin 0.6s linear infinite;
-}
-
-@keyframes spin {
- to {
- transform: rotate(360deg);
- }
-}
diff --git a/src/scss/components/_hero.scss b/src/scss/components/_hero.scss
index 2250ee0..2981987 100644
--- a/src/scss/components/_hero.scss
+++ b/src/scss/components/_hero.scss
@@ -87,10 +87,9 @@ $cyber-black: #1a1a1a;
display: flex;
justify-content: center;
align-items: center;
- //min-height: 100vh;
+ min-height: 95vh;
width: 100%;
- padding-top: 1100px; /* Adjust padding-top to account for navbar height */
- margin-top: 60px; /* Add margin-top to account for navbar height */
+ // margin-top: 70px; /* Add margin-top to account for navbar height */
background-color: $dark-bg;
overflow: hidden;
diff --git a/src/scss/login.scss b/src/scss/login.scss
deleted file mode 100644
index d2c183f..0000000
--- a/src/scss/login.scss
+++ /dev/null
@@ -1,88 +0,0 @@
-.login-container {
- display: flex;
- justify-content: center;
- align-items: center;
- min-height: 100vh;
- background-color: #f5f5f5;
-
- .login-card {
- width: 100%;
- max-width: 400px;
- padding: 2rem;
- background-color: white;
- border-radius: 8px;
- box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
-
- h2 {
- text-align: center;
- margin-bottom: 1.5rem;
- color: #333;
- }
-
- .error-message {
- background-color: #ffecec;
- color: #d63031;
- padding: 0.75rem;
- border-radius: 4px;
- margin-bottom: 1rem;
- text-align: center;
- }
-
- .form-group {
- margin-bottom: 1rem;
-
- label {
- display: block;
- margin-bottom: 0.5rem;
- font-weight: 500;
- }
-
- input {
- width: 100%;
- padding: 0.75rem;
- border: 1px solid #ddd;
- border-radius: 4px;
- font-size: 1rem;
-
- &:focus {
- outline: none;
- border-color: #4a90e2;
- }
- }
- }
-
- .login-button {
- width: 100%;
- padding: 0.75rem;
- background-color: #4a90e2;
- color: white;
- border: none;
- border-radius: 4px;
- font-size: 1rem;
- cursor: pointer;
- transition: background-color 0.3s;
-
- &:hover {
- background-color: #3a7bc8;
- }
- }
-
- .login-footer {
- margin-top: 1.5rem;
- text-align: center;
-
- p {
- margin-bottom: 0.5rem;
- }
-
- a {
- color: #4a90e2;
- text-decoration: none;
-
- &:hover {
- text-decoration: underline;
- }
- }
- }
- }
-}
diff --git a/src/scss/page/_assignment.scss b/src/scss/page/_assignment.scss
index 0cea9de..c3c75b6 100644
--- a/src/scss/page/_assignment.scss
+++ b/src/scss/page/_assignment.scss
@@ -1,17 +1,22 @@
-// Assignment Page Styling
-body {
- justify-content: flex-starts;
+body.modal-open {
+ overflow: hidden;
}
.assignment-page {
- position: relative;
display: flex;
flex-direction: column;
align-items: center;
+ justify-content: center;
+ max-width: 100%;
+ padding: 20px;
+ margin: 200px 0 150px;
+ overflow: hidden;
+ min-height: 100vh;
+ box-sizing: border-box;
a {
text-decoration: none;
- color: #AAC5E5;
+ color: #aac5e5;
}
section {
@@ -19,10 +24,16 @@ body {
max-width: 900px;
}
- .assignment-header {
+ .assignment-header-box {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
margin-bottom: 2rem;
- border-bottom: 1px solid #e0e0e0;
- padding-bottom: 1rem;
+ border-radius: 8px;
+ border: 1px solid lab(73.33 30.65 -21.82);
+ box-shadow: 0 0 20px lab(51.3 74.34 -37.13);
+ padding: 1rem;
h2 {
font-size: 3rem;
@@ -36,171 +47,273 @@ body {
}
}
- .assignment-container {
- background-color: #fff;
- border-radius: 8px;
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
- padding: 2rem;
+ form {
+ margin-bottom: 20px;
- .assignment-info {
- margin-bottom: 2rem;
+ div {
+ // margin-bottom: 15px;
+ width: 100%;
- h3 {
- font-size: 1.4rem;
- margin-bottom: 0.5rem;
- color: #333;
- }
-
- .files-count {
- font-size: 1rem;
- margin-bottom: 0.5rem;
- }
-
- .submission-note {
- font-size: 0.9rem;
- color: #666;
+ label {
+ display: block;
+ font-weight: bold;
+ margin-bottom: 5px;
+ text-align: start;
}
}
- .file-upload-section {
- margin-bottom: 2rem;
+ button {
+ padding: 8px 16px;
+ background-color: #4285f4;
+ color: white;
+ border: none;
+ border-radius: 4px;
+ cursor: pointer;
- .upload-buttons {
- display: flex;
- gap: 1rem;
- margin-bottom: 1.5rem;
- flex-wrap: wrap;
-
- .file-upload-btn,
- .record-audio-btn,
- .record-video-btn {
- background-color: #f5f5f5;
- border: 1px solid #ddd;
- border-radius: 4px;
- padding: 0.6rem 1rem;
- cursor: pointer;
- font-size: 0.9rem;
- transition: all 0.2s ease;
- color: #333;
-
- &:hover {
- background-color: #e9e9e9;
- }
- }
- }
-
- .files-list {
- background-color: #f9f9f9;
- border-radius: 6px;
- padding: 1rem;
-
- h4 {
- margin-bottom: 0.8rem;
- font-size: 1rem;
- }
-
- ul {
- list-style: none;
- padding: 0;
-
- .file-item {
- display: flex;
- align-items: center;
- padding: 0.5rem 0;
- border-bottom: 1px solid #eee;
-
- &:last-child {
- border-bottom: none;
- }
-
- .file-name {
- flex-grow: 1;
- font-weight: 500;
- }
-
- .file-size {
- color: #777;
- margin: 0 1rem;
- font-size: 0.8rem;
- }
-
- .remove-file-btn {
- background-color: transparent;
- border: none;
- color: #ff5252;
- cursor: pointer;
- font-size: 0.8rem;
- padding: 0.3rem 0.6rem;
-
- &:hover {
- text-decoration: underline;
- }
- }
- }
- }
+ &:hover {
+ background-color: #3367d6;
}
}
+ }
- .comments-section {
- margin-bottom: 2rem;
+ .assignment-links a {
+ color: white !important;
+ }
+
+ .project-list {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 1.5rem;
+ margin-top: 2rem;
+ padding-bottom: 7rem;
+
+ .project-item {
+ background: #0f0f1a;
+ border-radius: 12px;
+ padding: 1.5rem;
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
+ overflow-wrap: break-word;
+ border: 2px solid rgb(75 187 236);
+
+ .project-meta {
+ margin-bottom: 0.75rem;
+ color: lightgray;
+
+ strong {
+ color: #00bfff;
+ font-weight: bold;
+ }
+ }
h4 {
- margin-bottom: 0.8rem;
- font-size: 1rem;
- }
-
- textarea {
- width: 100%;
- border: 1px solid #ddd;
- border-radius: 4px;
- padding: 0.8rem;
- font-family: inherit;
- resize: vertical;
-
- &:focus {
- outline: none;
- border-color: #4a90e2;
- }
- }
- }
-
- .submission-buttons {
- display: flex;
- gap: 1rem;
-
- .submit-btn,
- .cancel-btn {
- padding: 0.7rem 1.5rem;
- border-radius: 4px;
- font-weight: 500;
- cursor: pointer;
- transition: all 0.2s ease;
- }
-
- .submit-btn {
- background-color: #4a90e2;
+ margin: 0.5rem 0;
+ font-size: 1.2rem;
color: white;
- border: none;
+ }
- &:hover {
- background-color: #3a7bc8;
- }
+ p {
+ margin: 1rem 0;
+ color: white;
+ line-height: 1.4;
+ font-size: 15px;
- &:disabled {
- background-color: #a0c3e8;
- cursor: not-allowed;
+ strong {
+ color: #00bfff;
+ font-weight: bold;
}
}
- .cancel-btn {
- background-color: transparent;
- border: 1px solid #ddd;
- color: #666;
+ .action-buttons {
+ display: flex;
+ gap: 0.5rem;
+ margin-top: 0.75rem;
- &:hover {
- background-color: #f5f5f5;
+ button {
+ background-color: #000;
+ border: 2px solid #00bfff;
+ border-radius: 6px;
+ padding: 0.4rem 0.8rem;
+ cursor: pointer;
+ font-size: 0.9rem;
+
+ &:nth-child(1) {
+ color: #007fff;
+ }
+
+ &:nth-child(2) {
+ color: #c0392b;
+ }
+
+ &:nth-child(3) {
+ color: #16a085;
+ }
}
}
}
}
+
+ .modal-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ min-height: 100%;
+ background: rgba(0, 0, 0, 0.6);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ z-index: 1000;
+ overflow: hidden;
+ }
+
+ .modal {
+ display: flex;
+ flex-direction: column;
+ background-color: #09021f;
+ padding: 2rem;
+ border-radius: 12px;
+ max-width: 500px;
+ width: 100%;
+ max-height: 100vh;
+ overflow-y: auto;
+ border: #aac5e5 solid 1px;
+ box-shadow: 0 30px 35px rgb(13 58 154);
+ animation: fadeIn 0.3s ease;
+ }
+
+ .input-wrapper {
+ position: relative;
+ margin-bottom: 1.5rem;
+
+ .eye-icon {
+ position: absolute;
+ right: 10px;
+ top: 50%;
+ transform: translateY(-50%);
+ cursor: pointer;
+ color: #e3dfdf;
+ font-size: 0.8rem;
+ }
+ }
+
+ .modal form {
+ border-radius: 12px;
+ }
+
+ .modal h3 {
+ margin-bottom: 1rem;
+ font-size: 1.5rem;
+ font-weight: 600;
+ color: #e3dfdf;
+ }
+
+ .modal label {
+ display: block;
+ font-size: 0.9rem;
+ font-weight: 500;
+ color: #e3dfdf;
+ }
+
+ .modal input,
+ .modal textarea {
+ width: 100%;
+ border: 1px solid #bbbbbb;
+ border-radius: 6px;
+ font-size: 0.95rem;
+ transition: border-color 0.2s ease;
+ background: #00000000;
+ color: #e3dfdf;
+
+ &:focus {
+ border-color: #007bff;
+ box-shadow: 0 4px 4px rgba(13 58 154 / 0.54);
+ animation: fadeIn 0.3s ease;
+ outline: none;
+ }
+ }
+
+ .modal textarea {
+ resize: vertical;
+ min-height: 80px;
+ }
+
+ .modal-buttons {
+ display: flex;
+ justify-content: flex-end;
+ gap: .5rem;
+ }
+
+ .modal-buttons button {
+ font-size: 0.8rem;
+ border: none;
+ border-radius: 6px;
+ cursor: pointer;
+ transition: background 0.2s ease;
+ }
+
+ .modal-buttons button[type="submit"] {
+ background-color: #ff4b2b;
+ color: #fff;
+
+ &:hover {
+ background-color: #ff2600;
+ }
+ }
+
+ .modal-footer {
+ display: flex;
+ align-items: center;
+ margin: 1rem;
+ }
+
+ .modal-buttons button[type="button"] {
+ background-color: #d3d3d3;
+ color: #333;
+
+ &:hover {
+ background-color: #cfcfcf;
+ }
+ }
+
+ .spinner-container {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ min-height: 20px;
+ gap: .5rem;
+
+ .spinner {
+ width: 20px;
+ height: 20px;
+ border: 5px solid #aac5e5;
+ border-top: 5px solid #4285f4;
+ border-radius: 50%;
+ animation: spin 1s linear infinite;
+ }
+
+ span {
+ color: #aac5e5;
+ font-size: .8rem;
+ margin: 0;
+ letter-spacing: 0.02em;
+ }
+ }
+
+ @keyframes spin {
+ to {
+ transform: rotate(360deg);
+ }
+ }
+
+ @keyframes fadeIn {
+ from {
+ opacity: 0;
+ transform: translateY(-10px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+ }
}
diff --git a/src/scss/page/_home.scss b/src/scss/page/_home.scss
index f3c032c..89a97ba 100644
--- a/src/scss/page/_home.scss
+++ b/src/scss/page/_home.scss
@@ -1,31 +1,7 @@
// Homepage styling
.homepage-container {
- // background-image: url("../../../public/images/grid-background.jpg");
- background-size: cover;
- background-position: center;
- background-repeat: no-repeat;
- background-attachment: fixed;
- min-height: 100vh;
- width: 100%;
- padding: 2rem;
-
- main {
- max-width: 1200px;
- margin: 0 auto;
- padding: 2rem;
- background-color: rgba(255, 255, 255, 0.9);
- border-radius: 10px;
- box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
- }
-
- h2 {
- color: #333;
- margin-bottom: 1.5rem;
- }
-
- p {
- color: #555;
- line-height: 1.6;
- }
+ display: flex;
+ flex-direction: column;
+ height: 100vh;
}
diff --git a/src/scss/page/_login.scss b/src/scss/page/_login.scss
index f88cc08..924fcce 100644
--- a/src/scss/page/_login.scss
+++ b/src/scss/page/_login.scss
@@ -72,165 +72,12 @@ $cyber-black: #1a1a1a;
}
}
-* {
- box-sizing: border-box;
-}
-
-body {
- background: $dark-bg;
- background-image: linear-gradient(rgba($dark-bg, 0.1), rgba($dark-bg, 0.1)),
- url("/images/grid-background.jpg");
- background-size: cover;
- background-position: center;
- background-repeat: no-repeat;
- background-attachment: fixed;
+.login-page{
display: flex;
+ flex-direction: column;
justify-content: center;
align-items: center;
- flex-direction: column;
- font-family: "Montserrat", sans-serif;
- height: 100vh;
- margin: 0;
- overflow-x: hidden;
-}
-
-h1 {
- font-weight: bold;
- margin: 0;
- color: $neon-blue;
- text-shadow: 0 0 8px rgba($neon-blue, 0.7), 0 0 15px rgba($neon-blue, 0.5);
- letter-spacing: 2px;
-}
-
-h2 {
- text-align: center;
- color: $neon-pink;
- text-shadow: 0 0 10px rgba($neon-pink, 0.7), 0 0 20px rgba($neon-pink, 0.5);
- letter-spacing: 3px;
- text-transform: uppercase;
- font-size: 2rem;
-}
-
-p {
- font-size: 14px;
- font-weight: 100;
- line-height: 20px;
- letter-spacing: 0.5px;
- margin: 20px 0 30px;
-}
-
-span {
- font-size: 12px;
-}
-
-a {
- color: #333;
- font-size: 14px;
- text-decoration: none;
- margin: 15px 0;
-}
-
-button {
- position: relative;
- border-radius: 4px;
- border: 2px solid $neon-pink;
- background-color: rgba($dark-bg, 0.7);
- color: $neon-pink;
- font-size: 12px;
- font-weight: bold;
- padding: 12px 45px;
- letter-spacing: 2px;
- text-transform: uppercase;
- transition: all 0.3s ease;
- overflow: hidden;
- box-shadow: 0 0 8px rgba($neon-pink, 0.5);
- text-shadow: 0 0 5px rgba($neon-pink, 0.8);
- cursor: pointer;
-
- &::before {
- content: "";
- position: absolute;
- top: 0;
- left: -100%;
- width: 100%;
- height: 100%;
- background: linear-gradient(
- 90deg,
- transparent,
- rgba($neon-pink, 0.3),
- transparent
- );
- transition: 0.5s;
- }
-
- &:hover {
- background-color: rgba($neon-pink, 0.2);
- color: white;
- box-shadow: 0 0 15px rgba($neon-pink, 0.8);
-
- &::before {
- left: 100%;
- }
- }
-
- &:active {
- transform: scale(0.95);
- }
-
- &:focus {
- outline: none;
- }
-}
-
-button.ghost {
- background-color: transparent;
- border: 2px solid $neon-blue;
- color: $neon-blue;
- box-shadow: 0 0 8px rgba($neon-blue, 0.5);
- text-shadow: 0 0 5px rgba($neon-blue, 0.8);
-
- &:hover {
- background-color: rgba($neon-blue, 0.2);
- color: white;
- box-shadow: 0 0 15px rgba($neon-blue, 0.8);
- }
-}
-
-form {
- background-color: $dark-bg;
- display: flex;
- align-items: center;
- justify-content: center;
- flex-direction: column;
- padding: 0 50px;
- height: 100%;
- text-align: center;
- border-left: 1px solid rgba($neon-pink, 0.3);
- border-right: 1px solid rgba($neon-pink, 0.3);
- box-shadow: inset 0 0 20px rgba($neon-blue, 0.2);
- backdrop-filter: blur(5px);
-}
-
-input {
- background-color: rgba($dark-bg, 0.7);
- border: 1px solid $neon-blue;
- border-radius: 4px;
- padding: 12px 15px;
- margin: 12px 0;
- width: 100%;
- color: white;
- box-shadow: 0 0 5px rgba($neon-blue, 0.3);
- transition: all 0.3s ease;
-
- &:focus {
- outline: none;
- border-color: $neon-pink;
- box-shadow: 0 0 10px rgba($neon-pink, 0.5);
- }
-
- &::placeholder {
- color: rgba(255, 255, 255, 0.5);
- }
+ min-height: 100vh;
}
.container {
@@ -517,3 +364,93 @@ footer a {
color: #3c97bf;
text-decoration: none;
}
+
+
+.login-container {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ min-height: 100vh;
+ background-color: #f5f5f5;
+
+ .login-card {
+ width: 100%;
+ max-width: 400px;
+ padding: 2rem;
+ background-color: white;
+ border-radius: 8px;
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
+
+ h2 {
+ text-align: center;
+ margin-bottom: 1.5rem;
+ color: #333;
+ }
+
+ .error-message {
+ background-color: #ffecec;
+ color: #d63031;
+ padding: 0.75rem;
+ border-radius: 4px;
+ margin-bottom: 1rem;
+ text-align: center;
+ }
+
+ .form-group {
+ margin-bottom: 1rem;
+
+ label {
+ display: block;
+ margin-bottom: 0.5rem;
+ font-weight: 500;
+ }
+
+ input {
+ width: 100%;
+ padding: 0.75rem;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ font-size: 1rem;
+
+ &:focus {
+ outline: none;
+ border-color: #4a90e2;
+ }
+ }
+ }
+
+ .login-button {
+ width: 100%;
+ padding: 0.75rem;
+ background-color: #4a90e2;
+ color: white;
+ border: none;
+ border-radius: 4px;
+ font-size: 1rem;
+ cursor: pointer;
+ transition: background-color 0.3s;
+
+ &:hover {
+ background-color: #3a7bc8;
+ }
+ }
+
+ .login-footer {
+ margin-top: 1.5rem;
+ text-align: center;
+
+ p {
+ margin-bottom: 0.5rem;
+ }
+
+ a {
+ color: #4a90e2;
+ text-decoration: none;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/scss/page/assignment123.scss b/src/scss/page/assignment123.scss
deleted file mode 100644
index 04c9baf..0000000
--- a/src/scss/page/assignment123.scss
+++ /dev/null
@@ -1,198 +0,0 @@
-// Assignment Page Styling
-
-.assignment-page {
- display: flex;
- flex-direction: column;
- align-items: center;
- padding: 2rem;
-
- section {
- width: 100%;
- max-width: 900px;
- }
-
- .assignment-header {
- margin-bottom: 2rem;
- border-bottom: 1px solid #e0e0e0;
- padding-bottom: 1rem;
-
- h2 {
- font-size: 3rem;
- margin-bottom: 1rem;
- color: #ffffff;
- }
-
- .due-date {
- color: #c6c6c6;
- font-size: 1.2rem;
- }
- }
-
- .assignment-container {
- background-color: #fff;
- border-radius: 8px;
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
- padding: 2rem;
-
- .assignment-info {
- margin-bottom: 2rem;
-
- h3 {
- font-size: 1.4rem;
- margin-bottom: 0.5rem;
- color: #333;
- }
-
- .files-count {
- font-size: 1rem;
- margin-bottom: 0.5rem;
- }
-
- .submission-note {
- font-size: 0.9rem;
- color: #666;
- }
- }
-
- .file-upload-section {
- margin-bottom: 2rem;
-
- .upload-buttons {
- display: flex;
- gap: 1rem;
- margin-bottom: 1.5rem;
- flex-wrap: wrap;
-
- .file-upload-btn,
- .record-audio-btn,
- .record-video-btn {
- background-color: #f5f5f5;
- border: 1px solid #ddd;
- border-radius: 4px;
- padding: 0.6rem 1rem;
- cursor: pointer;
- font-size: 0.9rem;
- transition: all 0.2s ease;
- color: #333;
-
- &:hover {
- background-color: #e9e9e9;
- }
- }
- }
-
- .files-list {
- background-color: #f9f9f9;
- border-radius: 6px;
- padding: 1rem;
-
- h4 {
- margin-bottom: 0.8rem;
- font-size: 1rem;
- }
-
- ul {
- list-style: none;
- padding: 0;
-
- .file-item {
- display: flex;
- align-items: center;
- padding: 0.5rem 0;
- border-bottom: 1px solid #eee;
-
- &:last-child {
- border-bottom: none;
- }
-
- .file-name {
- flex-grow: 1;
- font-weight: 500;
- }
-
- .file-size {
- color: #777;
- margin: 0 1rem;
- font-size: 0.8rem;
- }
-
- .remove-file-btn {
- background-color: transparent;
- border: none;
- color: #ff5252;
- cursor: pointer;
- font-size: 0.8rem;
- padding: 0.3rem 0.6rem;
-
- &:hover {
- text-decoration: underline;
- }
- }
- }
- }
- }
- }
-
- .comments-section {
- margin-bottom: 2rem;
-
- h4 {
- margin-bottom: 0.8rem;
- font-size: 1rem;
- }
-
- textarea {
- width: 100%;
- border: 1px solid #ddd;
- border-radius: 4px;
- padding: 0.8rem;
- font-family: inherit;
- resize: vertical;
-
- &:focus {
- outline: none;
- border-color: #4a90e2;
- }
- }
- }
-
- .submission-buttons {
- display: flex;
- gap: 1rem;
-
- .submit-btn,
- .cancel-btn {
- padding: 0.7rem 1.5rem;
- border-radius: 4px;
- font-weight: 500;
- cursor: pointer;
- transition: all 0.2s ease;
- }
-
- .submit-btn {
- background-color: #4a90e2;
- color: white;
- border: none;
-
- &:hover {
- background-color: #3a7bc8;
- }
-
- &:disabled {
- background-color: #a0c3e8;
- cursor: not-allowed;
- }
- }
-
- .cancel-btn {
- background-color: transparent;
- border: 1px solid #ddd;
- color: #666;
-
- &:hover {
- background-color: #f5f5f5;
- }
- }
- }
- }
-}