Revert ".."

This reverts commit 47807ace90d52a389399f9c926da61c49505615d.
This commit is contained in:
Faheed 2025-11-22 19:40:04 +03:00
parent 2679d0a0f5
commit a18baa0d73
3 changed files with 905 additions and 1078 deletions

View File

@ -93,26 +93,8 @@
<i class="fas fa-tachometer-alt me-1"></i> {% trans "Dashboard" %}
</a>
</li>
<li class="nav-item">
<a class="nav-link text-white" href="{% url 'kaauh_career' %}">
<i class="fas fa-hand me-1"></i> {% trans "KAAUH Careers" %}
</a>
</li>
{% endif %}
{% if request.user.is_authenticated %}
<li class="nav-item">
<a class="nav-link text-white" href="{% url 'user_detail' request.user.pk %}">
<i class="fas fa-user-circle me-1"></i> <span>{% trans "My Profile" %}</span></a></li>
{% endif %}
<li class="nav-item me-2">
<a class="nav-link text-white" href="{% url 'message_list' %}">
<i class="fas fa-envelope"></i> <span>{% trans "Messages" %}</span>
</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle text-white" href="#" role="button" data-bs-toggle="dropdown"
data-bs-offset="0, 8" aria-expanded="false" aria-label="{% trans 'Toggle language menu' %}">
@ -138,6 +120,16 @@
</li>
</ul>
</li>
{% if request.user.is_authenticated %}
<li class="nav-item">
<a class="nav-link text-white" href="{% url 'user_detail' request.user.pk %}">
<i class="fas fa-user-circle me-1"></i> <span>{% trans "My Profile" %}</span></a></li>
{% endif %}
<li class="nav-item me-2">
<a class="nav-link text-white" href="{% url 'message_list' %}">
<i class="fas fa-envelope"></i> <span>{% trans "Messages" %}</span>
</a>
</li>
<li class="nav-item ms-3">
{% if request.user.is_authenticated %}

View File

@ -5,8 +5,8 @@
{% block customCSS %}
<style>
/* Kaauh Theme Variables - Assuming these are defined in portal_base */
:root {
/* Kaauh Theme Variables - Assuming these are defined in portal_base */
:root {
/* Assuming these are carried from your global CSS/base template */
--kaauh-teal: #00636e;
--kaauh-teal-dark: #004a53;
@ -16,21 +16,19 @@
--kaauh-info: #17a2b8;
--kaauh-danger: #dc3545;
--kaauh-warning: #ffc107;
--kaauh-secondary: #6c757d;
/* Added secondary color for general use */
}
--kaauh-secondary: #6c757d; /* Added secondary color for general use */
}
/* Theme Utilities */
.bg-primary-theme {
/* Theme Utilities */
.bg-primary-theme {
background-color: var(--kaauh-teal) !important;
}
.text-primary-theme {
}
.text-primary-theme {
color: var(--kaauh-teal) !important;
}
}
/* 1. Application Progress Timeline (Improved Spacing) */
.application-progress {
/* 1. Application Progress Timeline (Improved Spacing) */
.application-progress {
position: relative;
/* Use flexbox for layout */
display: flex;
@ -38,25 +36,12 @@
gap: 1.5rem;
/* Center the timeline content */
justify-content: center;
margin: 2rem 0 3rem;
/* Extra spacing below timeline */
margin: 2rem 0 3rem; /* Extra spacing below timeline */
padding: 0 1rem;
overflow-x: auto;
/* Allow horizontal scroll for small screens */
-webkit-overflow-scrolling: touch;
/* Smooth scrolling on iOS */
padding-bottom: 1rem;
/* Space for scrollbar if needed */
}
overflow-x: auto; /* Allow horizontal scroll for small screens */
}
@media (max-width: 768px) {
.application-progress {
justify-content: flex-start;
/* Align start to allow scrolling */
}
}
.progress-step {
.progress-step {
/* Use fixed width or rely on content width for cleaner flow */
position: relative;
text-align: center;
@ -64,10 +49,10 @@
flex-shrink: 0;
/* Added min-width for label spacing */
min-width: 100px;
}
}
/* Timeline Connector Line */
.progress-step::before {
/* Timeline Connector Line */
.progress-step::before {
content: '';
position: absolute;
top: 20px;
@ -77,23 +62,23 @@
height: 2px;
background: var(--kaauh-border);
z-index: -1;
}
}
/* Hide line for the first step */
.progress-step:first-child::before {
/* Hide line for the first step */
.progress-step:first-child::before {
display: none;
}
}
.progress-step.completed::before {
.progress-step.completed::before {
background: var(--kaauh-success);
}
}
.progress-step.active::before {
.progress-step.active::before {
/* Line leading up to the active step should be completed/success color */
background: var(--kaauh-success);
}
}
.progress-icon {
.progress-icon {
width: 40px;
height: 40px;
border-radius: 50%;
@ -105,96 +90,90 @@
font-weight: bold;
color: #6c757d;
position: relative;
z-index: 2;
/* Ensure icon covers the line */
}
z-index: 2; /* Ensure icon covers the line */
}
.progress-step.completed .progress-icon {
.progress-step.completed .progress-icon {
background: var(--kaauh-success);
color: white;
}
}
.progress-step.active .progress-icon {
.progress-step.active .progress-icon {
background: var(--kaauh-teal);
color: white;
/* Add a subtle shadow for focus */
box-shadow: 0 0 0 4px rgba(0, 99, 110, 0.2);
}
}
.progress-label {
.progress-label {
font-size: 0.875rem;
color: #6c757d;
margin-top: 0.5rem;
line-height: 1.2;
}
}
.progress-step.completed .progress-label,
.progress-step.active .progress-label {
.progress-step.completed .progress-label,
.progress-step.active .progress-label {
color: var(--kaauh-primary-text);
font-weight: 600;
}
}
/* Status Badges - Using Kaauh Theme */
.status-badge {
/* Status Badges - Using Kaauh Theme */
.status-badge {
font-size: 0.875rem;
padding: 0.5rem 1rem;
border-radius: 20px;
font-weight: 600;
}
}
/* Card Header Consistency */
.card-header {
padding: 1rem 1.5rem;
/* Increased padding */
/* Card Header Consistency */
.card-header{
padding: 1rem 1.5rem; /* Increased padding */
border-top-left-radius: 0.75rem;
border-top-right-radius: 0.75rem;
border-bottom: none;
}
}
/* Table Actions Theme */
.table .btn-primary {
/* Table Actions Theme */
.table .btn-primary {
background-color: var(--kaauh-teal);
border-color: var(--kaauh-teal);
}
.table .btn-primary:hover {
}
.table .btn-primary:hover {
background-color: var(--kaauh-teal-dark);
border-color: var(--kaauh-teal-dark);
}
}
.btn-main-action {
.btn-main-action {
background-color: var(--kaauh-teal);
border-color: var(--kaauh-teal);
color: white;
font-weight: 600;
transition: all 0.2s ease;
}
.btn-main-action:hover {
}
.btn-main-action:hover {
background-color: var(--kaauh-teal-dark);
border-color: var(--kaauh-teal-dark);
}
}
/* Style for action cards to make text smaller */
.action-card .card-body h6 {
/* Style for action cards to make text smaller */
.action-card .card-body h6 {
font-size: 1rem;
}
.action-card .card-body p {
}
.action-card .card-body p {
font-size: 0.75rem;
margin-bottom: 0.75rem;
}
.action-card .card-body {
}
.action-card .card-body {
padding: 1.5rem 1rem;
}
}
/* Custom Alert for Document Review */
.alert-purple {
/* Custom Alert for Document Review */
.alert-purple {
background-color: #e5e0ff;
border-color: #c9c0ff;
color: #5d49a3;
}
}
</style>
{% endblock %}
@ -206,8 +185,7 @@
<a href="{% url 'candidate_portal_dashboard' %}" class=" text-decoration-none text-secondary">{% trans "Dashboard" %}</a>
</li>
<li class="breadcrumb-item">
<a href="{% url 'candidate_portal_dashboard' %}#applications"
class="text-secondary text-decoration-none">{% trans "My Applications" %}</a>
<a href="{% url 'candidate_portal_dashboard' %}#applications" class="text-secondary text-decoration">{% trans "My Applications" %}</a>
</li>
<li class="breadcrumb-item active" aria-current="page" style="
color: #F43B5E; /* Rosy Accent Color */
@ -223,7 +201,7 @@
<div class="col-12">
<div class="kaauh-card">
<div class="card-header bg-primary-theme text-white">
<div class="row align-items-center gy-2">
<div class="row align-items-center">
<div class="col-md-8">
<h4 class="mb-1">
<i class="fas fa-briefcase me-2"></i>
@ -233,9 +211,8 @@
<small>{% trans "Application ID:" %} {{ application.slug }}</small>
</p>
</div>
<div class="col-md-4 text-md-end text-start">
<div class="d-inline-block p-1 rounded-pill"
style="background-color: rgba(255, 255, 255, 0.2);">
<div class="col-md-4 text-end">
<div class="d-inline-block p-1 rounded-pill" style="background-color: rgba(255, 255, 255, 0.2);">
<span class="status-badge status-{{ application.stage }}">
{{ application.get_stage_display }}
</span>
@ -245,8 +222,7 @@
</div>
<div class="card-body pt-5">
<div class="application-progress">
<div class="progress-step {% if application.stage != 'Applied' and application.stage != 'Rejected' %}completed{% else %}active{% endif %}"
style="flex: 0 0 auto;">
<div class="progress-step {% if application.stage != 'Applied' and application.stage != 'Rejected' %}completed{% else %}active{% endif %}" style="flex: 0 0 auto;">
<div class="progress-icon">
<i class="fas fa-paper-plane"></i>
</div>
@ -254,8 +230,7 @@
</div>
{% if application.stage in 'Exam,Interview,Document Review,Offer,Hired,Rejected' %}
<div class="progress-step {% if application.stage not in 'Applied,Exam' and application.stage != 'Rejected' %}completed{% elif application.stage == 'Exam' %}active{% endif %}"
style="flex: 0 0 auto;">
<div class="progress-step {% if application.stage not in 'Applied,Exam' and application.stage != 'Rejected' %}completed{% elif application.stage == 'Exam' %}active{% endif %}" style="flex: 0 0 auto;">
<div class="progress-icon">
<i class="fas fa-clipboard-check"></i>
</div>
@ -264,8 +239,7 @@
{% endif %}
{% if application.stage in 'Interview,Document Review,Offer,Hired,Rejected' %}
<div class="progress-step {% if application.stage not in 'Applied,Exam,Interview' and application.stage != 'Rejected' %}completed{% elif application.stage == 'Interview' %}active{% endif %}"
style="flex: 0 0 auto;">
<div class="progress-step {% if application.stage not in 'Applied,Exam,Interview' and application.stage != 'Rejected' %}completed{% elif application.stage == 'Interview' %}active{% endif %}" style="flex: 0 0 auto;">
<div class="progress-icon">
<i class="fas fa-video"></i>
</div>
@ -274,8 +248,7 @@
{% endif %}
{% if application.stage in 'Document Review,Offer,Hired,Rejected' %}
<div class="progress-step {% if application.stage not in 'Applied,Exam,Interview,Document Review' and application.stage != 'Rejected' %}completed{% elif application.stage == 'Document Review' %}active{% endif %}"
style="flex: 0 0 auto;">
<div class="progress-step {% if application.stage not in 'Applied,Exam,Interview,Document Review' and application.stage != 'Rejected' %}completed{% elif application.stage == 'Document Review' %}active{% endif %}" style="flex: 0 0 auto;">
<div class="progress-icon">
<i class="fas fa-file-alt"></i>
</div>
@ -284,8 +257,7 @@
{% endif %}
{% if application.stage in 'Offer,Hired,Rejected' %}
<div class="progress-step {% if application.stage not in 'Applied,Exam,Interview,Document Review,Offer' and application.stage != 'Rejected' %}completed{% elif application.stage == 'Offer' %}active{% endif %}"
style="flex: 0 0 auto;">
<div class="progress-step {% if application.stage not in 'Applied,Exam,Interview,Document Review,Offer' and application.stage != 'Rejected' %}completed{% elif application.stage == 'Offer' %}active{% endif %}" style="flex: 0 0 auto;">
<div class="progress-icon">
<i class="fas fa-handshake"></i>
</div>
@ -294,40 +266,38 @@
{% endif %}
{% if application.stage in 'Hired,Rejected' %}
<div class="progress-step {% if application.stage == 'Hired' %}completed{% elif application.stage == 'Rejected' %}active{% endif %}"
style="flex: 0 0 auto;">
<div class="progress-step {% if application.stage == 'Hired' %}completed{% elif application.stage == 'Rejected' %}active{% endif %}" style="flex: 0 0 auto;">
<div class="progress-icon">
<i
class="fas {% if application.stage == 'Hired' %}fa-trophy{% else %}fa-times-circle{% endif %}"></i>
<i class="fas {% if application.stage == 'Hired' %}fa-trophy{% else %}fa-times-circle{% endif %}"></i>
</div>
<div class="progress-label">{% trans "Final Status" %}</div>
</div>
{% endif %}
</div>
<div class="row mt-4 g-3">
<div class="col-6 col-md-3">
<div class="row mt-4 g-4">
<div class="col-md-3">
<div class="text-center p-3 bg-light rounded h-100 shadow-sm">
<i class="fas fa-calendar-alt text-primary-theme fa-2x mb-2"></i>
<h6 class="text-muted small">{% trans "Applied Date" %}</h6>
<p class="mb-0 fw-bold">{{ application.created_at|date:"M d, Y" }}</p>
</div>
</div>
<div class="col-6 col-md-3">
<div class="col-md-3">
<div class="text-center p-3 bg-light rounded h-100 shadow-sm">
<i class="fas fa-building text-info fa-2x mb-2"></i>
<h6 class="text-muted small">{% trans "Department" %}</h6>
<p class="mb-0 fw-bold">{{ application.job.department|default:"-" }}</p>
</div>
</div>
<div class="col-6 col-md-3">
<div class="col-md-3">
<div class="text-center p-3 bg-light rounded h-100 shadow-sm">
<i class="fas fa-briefcase text-success fa-2x mb-2"></i>
<h6 class="text-muted small">{% trans "Job Type" %}</h6>
<p class="mb-0 fw-bold">{{ application.get_job_type_display }}</p>
</div>
</div>
<div class="col-6 col-md-3">
<div class="col-md-3">
<div class="text-center p-3 bg-light rounded h-100 shadow-sm">
<i class="fas fa-map-marker-alt text-warning fa-2x mb-2"></i>
<h6 class="text-muted small">{% trans "Location" %}</h6>
@ -340,9 +310,9 @@
</div>
</div>
<div class="row mb-5 g-3">
<div class="col-12 col-md-6">
<div class="kaauh-card h-100 shadow-sm action-card">
<div class="row mb-5">
<div class="col-md-6 col-6">
<div class="kaauh-card h-50 shadow-sm action-card">
<div class="card-body text-center mb-4">
<i class="fas fa-arrow-left fa-2x text-primary-theme mb-3"></i>
<h6>{% trans "Go to Dashboard" %}</h6>
@ -355,13 +325,15 @@
</div>
{% if application.resume %}
<div class="col-12 col-md-6">
<div class="kaauh-card h-100 shadow-sm action-card">
<div class="col-md-6 col-6">
<div class="kaauh-card h-50 shadow-sm action-card">
<div class="card-body text-center mb-4">
<i class="fas fa-file-download fa-2x text-success mb-3"></i>
<h6>{% trans "Download Resume" %}</h6>
<p class="text-muted small">{% trans "Get your submitted file" %}</p>
<a href="{{ application.resume.url }}" target="_blank" class="btn btn-main-action btn-sm w-100">
<a href="{{ application.resume.url }}"
target="_blank"
class="btn btn-main-action btn-sm w-100">
<i class="fas fa-download me-2"></i>
{% trans "Download" %}
</a>
@ -422,7 +394,8 @@
</td>
<td>
{% if interview.zoom_meeting and interview.zoom_meeting.join_url %}
<a href="{{ interview.zoom_meeting.join_url }}" target="_blank"
<a href="{{ interview.zoom_meeting.join_url }}"
target="_blank"
class="btn btn-sm btn-primary">
<i class="fas fa-video me-1"></i>
{% trans "Join" %}
@ -433,8 +406,7 @@
</td>
<td>
{% if interview.zoom_meeting and interview.zoom_meeting.join_url %}
<button class="btn btn-sm btn-outline-primary"
onclick="addToCalendar({{ interview.interview_date|date:'Y' }}, {{ interview.interview_date|date:'m' }}, {{ interview.interview_date|date:'d' }}, '{{ interview.interview_time|time:'H:i' }}', '{{ application.job.title }}')">
<button class="btn btn-sm btn-outline-primary" onclick="addToCalendar({{ interview.interview_date|date:'Y' }}, {{ interview.interview_date|date:'m' }}, {{ interview.interview_date|date:'d' }}, '{{ interview.interview_time|time:'H:i' }}', '{{ application.job.title }}')">
<i class="fas fa-calendar-plus me-1"></i>
{% trans "Add to Calendar" %}
</button>
@ -470,8 +442,7 @@
</h5>
</div>
<div class="col-auto">
<button class="btn btn-sm btn-light" data-bs-toggle="modal"
data-bs-target="#uploadDocumentModal">
<button class="btn btn-sm btn-light" data-bs-toggle="modal" data-bs-target="#uploadDocumentModal">
<i class="fas fa-plus me-1"></i>
{% trans "Upload Document" %}
</button>
@ -496,7 +467,8 @@
<tr>
<td>
{% if document.file %}
<a href="{{ document.file.url }}" target="_blank"
<a href="{{ document.file.url }}"
target="_blank"
class="text-decoration-none text-primary-theme">
<i class="fas fa-file-pdf text-danger me-2"></i>
{{ document.get_document_type_display }}
@ -522,13 +494,13 @@
</td>
<td>
{% if document.file %}
<a href="{{ document.file.url }}" class="btn btn-sm btn-outline-primary me-1"
<a href="{{ document.file.url }}"
class="btn btn-sm btn-outline-primary me-1"
target="_blank">
<i class="fas fa-download"></i>
{% trans "Download" %}
</a>
<button class="btn btn-sm btn-outline-danger"
onclick="deleteDocument({{ document.id }})">
<button class="btn btn-sm btn-outline-danger" onclick="deleteDocument({{ document.id }})">
<i class="fas fa-trash"></i>
</button>
{% endif %}
@ -542,8 +514,7 @@
<div class="text-center py-4">
<i class="fas fa-file-upload fa-3x text-muted mb-3"></i>
<p class="text-muted">{% trans "No documents uploaded." %}</p>
<button class="btn btn-main-action" data-bs-toggle="modal"
data-bs-target="#uploadDocumentModal">
<button class="btn btn-main-action" data-bs-toggle="modal" data-bs-target="#uploadDocumentModal">
<i class="fas fa-plus me-2"></i>
{% trans "Upload Your First Document" %}
</button>
@ -568,38 +539,32 @@
{% if application.stage == 'Applied' %}
<div class="alert alert-info">
<i class="fas fa-clock me-2"></i>
{% trans "Your application is being reviewed by our recruitment team. You will receive an update
within 3-5 business days." %}
{% trans "Your application is being reviewed by our recruitment team. You will receive an update within 3-5 business days." %}
</div>
{% elif application.stage == 'Screening' %}
<div class="alert alert-warning">
<i class="fas fa-search me-2"></i>
{% trans "Your application is currently under screening. We are evaluating your qualifications
against the job requirements." %}
{% trans "Your application is currently under screening. We are evaluating your qualifications against the job requirements." %}
</div>
{% elif application.stage == 'Document Review' %}
<div class="alert alert-purple">
<i class="fas fa-file-alt me-2"></i>
{% trans "Please upload the required documents for review. Our team will evaluate your submitted
materials." %}
{% trans "Please upload the required documents for review. Our team will evaluate your submitted materials." %}
</div>
{% elif application.stage == 'Exam' %}
<div class="alert alert-purple">
<i class="fas fa-clipboard-check me-2"></i>
{% trans "You have been shortlisted for an assessment. Please check your email for exam details
and preparation materials." %}
{% trans "You have been shortlisted for an assessment. Please check your email for exam details and preparation materials." %}
</div>
{% elif application.stage == 'Interview' %}
<div class="alert alert-success">
<i class="fas fa-video me-2"></i>
{% trans "Congratulations! You have been selected for an interview. Please check the interview
schedule above and prepare accordingly." %}
{% trans "Congratulations! You have been selected for an interview. Please check the interview schedule above and prepare accordingly." %}
</div>
{% elif application.stage == 'Offer' %}
<div class="alert alert-warning">
<i class="fas fa-handshake me-2"></i>
{% trans "You have received a job offer! Please check your email for the detailed offer letter
and next steps." %}
{% trans "You have received a job offer! Please check your email for the detailed offer letter and next steps." %}
</div>
{% elif application.stage == 'Hired' %}
<div class="alert alert-success">
@ -609,8 +574,7 @@
{% elif application.stage == 'Rejected' %}
<div class="alert alert-danger">
<i class="fas fa-times-circle me-2"></i>
{% trans "Thank you for your interest. Unfortunately, your application was not selected at this
time. We encourage you to apply for other positions." %}
{% trans "Thank you for your interest. Unfortunately, your application was not selected at this time. We encourage you to apply for other positions." %}
</div>
{% endif %}
</div>
@ -647,15 +611,13 @@
</div>
<div class="mb-3">
<label for="documentFile" class="form-label">{% trans "Choose File" %}</label>
<input type="file" class="form-control" id="documentFile" name="file"
accept=".pdf,.doc,.docx,.jpg,.png" required>
<input type="file" class="form-control" id="documentFile" name="file" accept=".pdf,.doc,.docx,.jpg,.png" required>
<div class="form-text">{% trans "Accepted formats: PDF, DOC, DOCX, JPG, PNG (Max 5MB)" %}</div>
</div>
<input type="hidden" name="application_slug" value="{{ application.slug }}">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{% trans "Cancel"
%}</button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{% trans "Cancel" %}</button>
<button type="submit" class="btn btn-main-action">
<i class="fas fa-upload me-2"></i>
{% trans "Upload" %}
@ -668,7 +630,7 @@
<script>
function addToCalendar(year, month, day, time, title) {
function addToCalendar(year, month, day, time, title) {
// Create Google Calendar URL
const startDate = new Date(year, month - 1, day, time.split(':')[0], time.split(':')[1]);
const endDate = new Date(startDate.getTime() + 60 * 60 * 1000); // Add 1 hour
@ -680,9 +642,9 @@
const googleCalendarUrl = `https://calendar.google.com/calendar/render?action=TEMPLATE&text=${encodeURIComponent(title)}&dates=${formatDate(startDate)}/${formatDate(endDate)}&details=${encodeURIComponent('Interview scheduled via ATS')}`;
window.open(googleCalendarUrl, '_blank');
}
}
function deleteDocument(documentId) {
function deleteDocument(documentId) {
if (confirm('{% trans "Are you sure you want to delete this document?" %}')) {
fetch(`/documents/${documentId}/delete/`, {
method: 'POST',
@ -704,10 +666,10 @@
alert('{% trans "Error deleting document. Please try again." %}');
});
}
}
}
// Helper function to get CSRF token
function getCookie(name) {
// Helper function to get CSRF token
function getCookie(name) {
let cookieValue = null;
if (document.cookie && document.cookie !== '') {
const cookies = document.cookie.split(';');
@ -720,7 +682,7 @@
}
}
return cookieValue;
}
}
</script>
{% endblock %}

View File

@ -5,21 +5,21 @@
{% block customCSS %}
<style>
/* Application Progress Timeline - Using Kaauh Theme Colors */
.application-progress {
/* Application Progress Timeline - Using Kaauh Theme Colors */
.application-progress {
position: relative;
display: flex;
justify-content: space-between;
margin: 2rem 0;
}
}
.progress-step {
.progress-step {
flex: 1;
text-align: center;
position: relative;
}
}
.progress-step::before {
.progress-step::before {
content: '';
position: absolute;
top: 20px;
@ -28,21 +28,21 @@
height: 2px;
background: var(--kaauh-border);
z-index: -1;
}
}
.progress-step:first-child::before {
.progress-step:first-child::before {
display: none;
}
}
.progress-step.completed::before {
.progress-step.completed::before {
background: var(--kaauh-success);
}
}
.progress-step.active::before {
.progress-step.active::before {
background: var(--kaauh-teal);
}
}
.progress-icon {
.progress-icon {
width: 40px;
height: 40px;
border-radius: 50%;
@ -55,135 +55,94 @@
color: #6c757d;
position: relative;
z-index: 1;
}
}
.progress-step.completed .progress-icon {
.progress-step.completed .progress-icon {
background: var(--kaauh-success);
color: white;
}
}
.progress-step.active .progress-icon {
.progress-step.active .progress-icon {
background: var(--kaauh-teal);
color: white;
}
}
.progress-label {
.progress-label {
font-size: 0.875rem;
color: #6c757d;
margin-top: 0.5rem;
}
}
.progress-step.completed .progress-label,
.progress-step.active .progress-label {
.progress-step.completed .progress-label,
.progress-step.active .progress-label {
color: var(--kaauh-primary-text);
font-weight: 600;
}
}
/* Status Badges - Using Kaauh Theme */
.status-badge {
/* Status Badges - Using Kaauh Theme */
.status-badge {
font-size: 0.875rem;
padding: 0.5rem 1rem;
border-radius: 20px;
font-weight: 600;
}
}
.status-applied {
background: #e3f2fd;
color: #1976d2;
}
.status-applied { background: #e3f2fd; color: #1976d2; }
.status-screening { background: #fff3e0; color: #f57c00; }
.status-exam { background: #f3e5f5; color: #7b1fa2; }
.status-interview { background: #e8f5e8; color: #388e3c; }
.status-offer { background: #fff8e1; color: #f9a825; }
.status-hired { background: #e8f5e8; color: #2e7d32; }
.status-rejected { background: #ffebee; color: #c62828; }
.status-screening {
background: #fff3e0;
color: #f57c00;
}
.status-exam {
background: #f3e5f5;
color: #7b1fa2;
}
.status-interview {
background: #e8f5e8;
color: #388e3c;
}
.status-offer {
background: #fff8e1;
color: #f9a825;
}
.status-hired {
background: #e8f5e8;
color: #2e7d32;
}
.status-rejected {
background: #ffebee;
color: #c62828;
}
/* Alert Purple - Using Theme Colors */
.alert-purple {
/* Alert Purple - Using Theme Colors */
.alert-purple {
color: #4a148c;
background-color: #f3e5f5;
border-color: #ce93d8;
}
}
/* Profile specific styles */
.profile-data-list li {
/* Profile specific styles */
.profile-data-list li {
padding: 1rem 0;
border-bottom: 1px dashed var(--kaauh-border);
font-size: 0.95rem;
font-weight: 500;
}
.profile-data-list li strong {
}
.profile-data-list li strong {
font-weight: 700;
color: var(--kaauh-teal-dark);
min-width: 120px;
display: inline-block;
}
}
/* Tabs styling */
{
% comment %
}
.nav-tabs {
/* Tabs styling */
{% comment %} .nav-tabs {
border-bottom: 1px solid var(--kaauh-border);
}
.nav-tabs .nav-link.active {
}
.nav-tabs .nav-link.active {
color: var(--kaauh-primary-text);
}
.nav-tabs .nav-link {
}
.nav-tabs .nav-link {
color: var(--kaauh-teal);
border: none;
border-bottom: 3px solid transparent;
padding: 1rem 1.75rem;
font-weight: 600;
}
.nav-tabs .nav-link:hover {
}
.nav-tabs .nav-link:hover {
color: var(--kaauh-teal-dark);
border-color: var(--kaauh-teal-light);
}
.nav-tabs .nav-link.active {
}
.nav-tabs .nav-link.active {
color: #000000;
border-color: var(--kaauh-teal);
background-color: transparent;
font-weight: 700;
}
.nav-tabs .nav-link i {
}
.nav-tabs .nav-link i {
color: var(--kaauh-teal) !important;
}
{
% endcomment %
}
} {% endcomment %}
/* Tabs Theming - Applies to the right column */
.nav-tabs {
@ -200,10 +159,7 @@
padding: 0.75rem 1rem;
margin-right: 0.5rem;
transition: all 0.2s;
white-space: nowrap;
/* Ensure text doesn't wrap in tabs */
}
/* Active Link */
.nav-tabs .nav-link.active {
color: var(--kaauh-teal-dark) !important;
@ -215,93 +171,49 @@
margin-bottom: -1px;
}
.nav-scroll {
.nav-scroll {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
white-space: nowrap;
/* Hide scrollbar for cleaner look but keep functionality */
scrollbar-width: none;
/* Firefox */
-ms-overflow-style: none;
/* IE 10+ */
position: relative;
}
}
.nav-scroll .nav-tabs { flex-wrap: nowrap; border-bottom: none; }
.nav-scroll .nav-tabs .nav-item { flex-shrink: 0; }
.nav-scroll::-webkit-scrollbar {
display: none;
/* Chrome/Safari */
}
.nav-scroll .nav-tabs {
flex-wrap: nowrap;
border-bottom: none;
padding-bottom: 5px;
/* Space for active border */
}
.nav-scroll .nav-tabs .nav-item {
flex-shrink: 0;
}
/* Add a subtle fade effect to indicate more content */
.nav-scroll-container {
position: relative;
}
.nav-scroll-container::after {
content: '';
position: absolute;
top: 0;
right: 0;
height: 100%;
width: 30px;
background: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1));
pointer-events: none;
}
/* Application table styling */
.application-table thead th {
/* Application table styling */
.application-table thead th {
background-color: var(--kaauh-teal-light);
color: var(--kaauh-teal-dark);
font-weight: 700;
border-bottom: 1px solid var(--kaauh-border);
padding: 1rem 1.5rem;
}
.application-table tbody tr {
}
.application-table tbody tr {
transition: background-color 0.2s ease;
}
.application-table tbody tr:hover {
}
.application-table tbody tr:hover {
background-color: var(--kaauh-teal-light);
}
.badge-stage {
}
.badge-stage {
font-weight: 600;
padding: 0.4em 0.8em;
border-radius: 50rem;
}
/* Responsive table for mobile */
@media (max-width: 767.98px) {
.application-table thead {
display: none;
}
}
/* Responsive table for mobile */
@media (max-width: 767.98px) {
.application-table thead { display: none; }
.application-table tr {
margin-bottom: 1rem;
border: 1px solid var(--kaauh-border);
border-radius: 8px;
box-shadow: var(--kaauh-shadow-sm);
}
.application-table td {
text-align: right !important;
padding: 0.75rem 1rem;
padding-left: 50%;
position: relative;
}
.application-table td::before {
content: attr(data-label);
position: absolute;
@ -310,101 +222,67 @@
font-weight: 700;
color: var(--gray-text);
}
}
/* Profile Data List Mobile Optimization */
.profile-data-list li {
flex-direction: column;
align-items: flex-start !important;
}
.profile-data-list li>div {
margin-bottom: 0.25rem;
color: var(--kaauh-secondary);
}
.profile-data-list li>span {
width: 100%;
text-align: left !important;
word-break: break-word;
/* Handle long emails/addresses */
}
/* Adjust padding for mobile */
.tab-content {
padding: 1.5rem !important;
}
.nav-tabs .nav-link {
padding: 0.75rem 1rem;
font-size: 0.9rem;
}
}
/* Document management list */
.list-group-item {
/* Document management list */
.list-group-item {
border-radius: 8px;
margin-bottom: 0.5rem;
border: 1px solid var(--kaauh-border);
transition: all 0.2s ease;
}
.list-group-item:hover {
}
.list-group-item:hover {
background-color: var(--kaauh-teal-light);
border-color: var(--kaauh-teal-accent);
}
}
/* Action tiles */
.btn-action-tile {
/* Action tiles */
.btn-action-tile {
background-color: white;
border: 1px solid var(--kaauh-border);
border-radius: 12px;
padding: 1.5rem 1rem;
transition: all 0.3s ease;
box-shadow: var(--kaauh-shadow-sm);
}
.btn-action-tile:hover {
}
.btn-action-tile:hover {
background-color: var(--kaauh-teal-light);
border-color: var(--kaauh-teal-accent);
transform: translateY(-2px);
box-shadow: var(--kaauh-shadow-lg);
}
.action-tile-icon {
}
.action-tile-icon {
font-size: 2rem;
color: var(--kaauh-teal-accent);
display: block;
}
}
/* Application Cards Styling */
.hover-lift {
/* Application Cards Styling */
.hover-lift {
transition: all 0.3s ease;
}
.hover-lift:hover {
}
.hover-lift:hover {
transform: translateY(-4px);
box-shadow: var(--kaauh-shadow-lg);
border-color: var(--kaauh-teal-accent);
}
}
.application-card .card-title a {
.application-card .card-title a {
transition: color 0.2s ease;
}
.application-card .card-title a:hover {
}
.application-card .card-title a:hover {
color: var(--kaauh-teal-dark) !important;
}
}
/* Responsive adjustments for application cards */
@media (max-width: 768px) {
/* Responsive adjustments for application cards */
@media (max-width: 768px) {
.application-card .card-body {
padding: 1.25rem;
}
.application-card .card-title {
font-size: 1.1rem;
}
}
}
</style>
{% endblock %}
@ -412,22 +290,21 @@
<div class="container-fluid">
{# Header: Larger, more dynamic on large screens. Stacks cleanly on mobile. #}
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center mb-4 mb-md-5">
<h1 class="display-6 display-md-5 fw-extrabold mb-3 mb-md-0 text-center text-md-start"
style="color: var(--kaauh-teal-dark);">
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center mb-5">
<h1 class="display-6 display-md-5 fw-extrabold mb-3 mb-md-0" style="color: var(--kaauh-teal-dark);">
{% trans "Your Candidate Dashboard" %}
</h1>
{% comment %} <a href="#profile-details" data-bs-toggle="tab"
class="btn btn-main-action btn-sm btn-md-lg px-4 py-2 rounded-pill shadow-sm shadow-md-lg">
{% comment %} <a href="#profile-details" data-bs-toggle="tab" class="btn btn-main-action btn-sm btn-md-lg px-4 py-2 rounded-pill shadow-sm shadow-md-lg">
<i class="fas fa-edit me-2"></i> {% trans "Update Profile" %}
</a> {% endcomment %}
</div>
{# Candidate Quick Overview Card: Use a softer background color #}
<div class="card kaauh-card mb-4 mb-md-5 p-3 p-md-4 bg-white">
<div class="card kaauh-card mb-5 p-4 bg-white">
<div class="d-flex align-items-center flex-column flex-sm-row text-center text-sm-start">
<img src="{% if candidate.user.profile_image %}{{ candidate.user.profile_image.url }}{% else %}{% static 'image/default_avatar.png' %}{% endif %}"
alt="{% trans 'Profile Picture' %}" class="rounded-circle me-sm-4 mb-3 mb-sm-0 shadow-lg"
alt="{% trans 'Profile Picture' %}"
class="rounded-circle me-sm-4 mb-3 mb-sm-0 shadow-lg"
style="width: 80px; height: 80px; object-fit: cover; border: 4px solid var(--kaauh-teal-accent);">
<div>
<h3 class="card-title mb-1 fw-bold text-dark">{{ candidate.full_name|default:"Candidate Name" }}</h3>
@ -442,36 +319,33 @@
<div class="card kaauh-card p-0 bg-white">
{# Tab Navigation: Used nav-scroll for responsiveness #}
<div class="nav-scroll-container px-3 px-md-4 pt-3">
<div class="nav-scroll">
<div class="nav-scroll px-4 pt-3">
<ul class="nav nav-tabs" id="candidateTabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="profile-tab" data-bs-toggle="tab"
data-bs-target="#profile-details" type="button" role="tab" aria-controls="profile-details"
aria-selected="true">
<button class="nav-link active" id="profile-tab" data-bs-toggle="tab" data-bs-target="#profile-details" type="button" role="tab" aria-controls="profile-details" aria-selected="true">
<i class="fas fa-user-circle me-2"></i> {% trans "Profile Details" %}
</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="applications-tab" data-bs-toggle="tab"
data-bs-target="#applications-history" type="button" role="tab"
aria-controls="applications-history" aria-selected="false">
<button class="nav-link" id="applications-tab" data-bs-toggle="tab" data-bs-target="#applications-history" type="button" role="tab" aria-controls="applications-history" aria-selected="false">
<i class="fas fa-list-alt me-2"></i> {% trans "My Applications" %}
</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="documents-tab" data-bs-toggle="tab"
data-bs-target="#document-management" type="button" role="tab"
aria-controls="document-management" aria-selected="false">
<button class="nav-link" id="documents-tab" data-bs-toggle="tab" data-bs-target="#document-management" type="button" role="tab" aria-controls="document-management" aria-selected="false">
<i class="fas fa-file-upload me-2"></i> {% trans "Documents" %}
</button>
</li>
{% comment %} <li class="nav-item" role="presentation">
<button class="nav-link" id="settings-tab" data-bs-toggle="tab" data-bs-target="#account-settings" type="button" role="tab" aria-controls="account-settings" aria-selected="false">
<i class="fas fa-cogs me-2"></i> {% trans "Settings" %}
</button>
</li> {% endcomment %}
</ul>
</div>
</div>
{# Tab Content #}
<div class="tab-content p-3 p-md-5" id="candidateTabsContent">
<div class="tab-content p-4 p-md-5" id="candidateTabsContent">
<div class="tab-pane fade show active" id="profile-details" role="tabpanel" aria-labelledby="profile-tab">
<!-- Basic Information Section -->
@ -480,27 +354,23 @@
<i class="fas fa-user me-2 text-primary-theme"></i>{% trans "Basic Information" %}
</h4>
<ul class="list-unstyled profile-data-list p-0">
<li
class="d-flex flex-column flex-sm-row justify-content-between align-items-start align-items-sm-center">
<li class="d-flex justify-content-between align-items-center">
<div><i class="fas fa-id-card me-2 text-primary-theme"></i> <strong>{% trans "First Name" %}</strong></div>
<span class="text-start text-sm-end">{{ candidate.first_name|default:"" }}</span>
<span class="text-end">{{ candidate.first_name|default:"" }}</span>
</li>
<li
class="d-flex flex-column flex-sm-row justify-content-between align-items-start align-items-sm-center">
<li class="d-flex justify-content-between align-items-center">
<div><i class="fas fa-id-card me-2 text-primary-theme"></i> <strong>{% trans "Last Name" %}</strong></div>
<span class="text-start text-sm-end">{{ candidate.last_name|default:"" }}</span>
<span class="text-end">{{ candidate.last_name|default:"" }}</span>
</li>
{% if candidate.middle_name %}
<li
class="d-flex flex-column flex-sm-row justify-content-between align-items-start align-items-sm-center">
<li class="d-flex justify-content-between align-items-center">
<div><i class="fas fa-id-card me-2 text-primary-theme"></i> <strong>{% trans "Middle Name" %}</strong></div>
<span class="text-start text-sm-end">{{ candidate.middle_name }}</span>
<span class="text-end">{{ candidate.middle_name }}</span>
</li>
{% endif %}
<li
class="d-flex flex-column flex-sm-row justify-content-between align-items-start align-items-sm-center">
<li class="d-flex justify-content-between align-items-center">
<div><i class="fas fa-envelope me-2 text-primary-theme"></i> <strong>{% trans "Email" %}</strong></div>
<span class="text-start text-sm-end text-break">{{ candidate.email|default:"" }}</span>
<span class="text-end">{{ candidate.email|default:"" }}</span>
</li>
</ul>
</div>
@ -511,24 +381,21 @@
<i class="fas fa-address-book me-2 text-primary-theme"></i>{% trans "Contact Information" %}
</h4>
<ul class="list-unstyled profile-data-list p-0">
<li
class="d-flex flex-column flex-sm-row justify-content-between align-items-start align-items-sm-center">
<li class="d-flex justify-content-between align-items-center">
<div><i class="fas fa-phone-alt me-2 text-primary-theme"></i> <strong>{% trans "Phone" %}</strong></div>
<span class="text-start text-sm-end">{{ candidate.phone|default:"" }}</span>
<span class="text-end">{{ candidate.phone|default:"" }}</span>
</li>
{% if candidate.address %}
<li class="d-flex flex-column flex-sm-row align-items-start">
<div class="mb-1"><i class="fas fa-map-marker-alt me-2 text-primary-theme"></i> <strong>{%trans "Address" %}</strong></div>
<span class="text-start text-sm-end text-break">{{ candidate.address|linebreaksbr }}</span>
<li class="d-flex align-items-start">
<div class="mb-1"><i class="fas fa-map-marker-alt me-2 text-primary-theme"></i> <strong>{% trans "Address" %}</strong></div>
<span class="text-end text-break">{{ candidate.address|linebreaksbr }}</span>
</li>
{% endif %}
{% if candidate.linkedin_profile %}
<li
class="d-flex flex-column flex-sm-row justify-content-between align-items-start align-items-sm-center">
<li class="d-flex justify-content-between align-items-center">
<div><i class="fab fa-linkedin me-2 text-primary-theme"></i> <strong>{% trans "LinkedIn Profile" %}</strong></div>
<span class="text-start text-sm-end">
<a href="{{ candidate.linkedin_profile }}" target="_blank"
class="text-primary-theme text-decoration-none">
<span class="text-end">
<a href="{{ candidate.linkedin_profile }}" target="_blank" class="text-primary-theme text-decoration-none">
{% trans "View Profile" %} <i class="fas fa-external-link-alt ms-1"></i>
</a>
</span>
@ -543,20 +410,17 @@
<i class="fas fa-user-circle me-2 text-primary-theme"></i>{% trans "Personal Details" %}
</h4>
<ul class="list-unstyled profile-data-list p-0">
<li
class="d-flex flex-column flex-sm-row justify-content-between align-items-start align-items-sm-center">
<li class="d-flex justify-content-between align-items-center">
<div><i class="fas fa-calendar-alt me-2 text-primary-theme"></i> <strong>{% trans "Date of Birth" %}</strong></div>
<span class="text-start text-sm-end">{{ candidate.date_of_birth|date:"M d, Y"|default:"" }}</span>
<span class="text-end">{{ candidate.date_of_birth|date:"M d, Y"|default:"" }}</span>
</li>
<li
class="d-flex flex-column flex-sm-row justify-content-between align-items-start align-items-sm-center">
<li class="d-flex justify-content-between align-items-center">
<div><i class="fas fa-venus-mars me-2 text-primary-theme"></i> <strong>{% trans "Gender" %}</strong></div>
<span class="text-start text-sm-end">{{ candidate.get_gender_display|default:"" }}</span>
<span class="text-end">{{ candidate.get_gender_display|default:"" }}</span>
</li>
<li
class="d-flex flex-column flex-sm-row justify-content-between align-items-start align-items-sm-center">
<li class="d-flex justify-content-between align-items-center">
<div><i class="fas fa-globe me-2 text-primary-theme"></i> <strong>{% trans "Nationality" %}</strong></div>
<span class="text-start text-sm-end">{{ candidate.get_nationality_display|default:"" }}</span>
<span class="text-end">{{ candidate.get_nationality_display|default:"" }}</span>
</li>
</ul>
</div>
@ -568,22 +432,51 @@
</h4>
<ul class="list-unstyled profile-data-list p-0">
{% if candidate.user.designation %}
<li
class="d-flex flex-column flex-sm-row justify-content-between align-items-start align-items-sm-center">
<div><i class="fas fa-user-tie me-2 text-primary-theme"></i> <strong>{% trans "Designation"
%}</strong></div>
<span class="text-start text-sm-end">{{ candidate.user.designation }}</span>
<li class="d-flex justify-content-between align-items-center">
<div><i class="fas fa-user-tie me-2 text-primary-theme"></i> <strong>{% trans "Designation" %}</strong></div>
<span class="text-end">{{ candidate.user.designation }}</span>
</li>
{% endif %}
{% if candidate.gpa %}
<li
class="d-flex flex-column flex-sm-row justify-content-between align-items-start align-items-sm-center">
<li class="d-flex justify-content-between align-items-center">
<div><i class="fas fa-graduation-cap me-2 text-primary-theme"></i> <strong>{% trans "GPA" %}</strong></div>
<span class="text-start text-sm-end">{{ candidate.gpa }}</span>
<span class="text-end">{{ candidate.gpa }}</span>
</li>
{% endif %}
</ul>
</div>
{% comment %} <div class="alert alert-info mt-4">
<i class="fas fa-info-circle me-2"></i>
<small>{% trans "Use the 'Update Profile' button above to edit these details." %}</small>
</div> {% endcomment %}
{% comment %} <hr class="my-5"> {% endcomment %}
{% comment %} <h4 class="mb-4 fw-bold text-gray-subtle">{% trans "Quick Actions" %}</h4>
<div class="row g-3 g-md-4">
<div class="col-6 col-sm-4 col-md-4">
<a href="#applications-history" data-bs-toggle="tab" class="btn btn-action-tile w-100 d-grid text-center text-dark text-decoration-none">
<span class="action-tile-icon mb-2"><i class="fas fa-list-check"></i></span>
<span class="fw-bold">{% trans "Track Jobs" %}</span>
<span class="small text-muted d-none d-sm-block">{% trans "View stages" %}</span>
</a>
</div>
<div class="col-6 col-sm-4 col-md-4">
<a href="#document-management" data-bs-toggle="tab" class="btn btn-action-tile w-100 d-grid text-center text-dark text-decoration-none">
<span class="action-tile-icon mb-2"><i class="fas fa-cloud-upload-alt"></i></span>
<span class="fw-bold">{% trans "Manage Documents" %}</span>
<span class="small text-muted d-none d-sm-block">{% trans "Upload/View files" %}</span>
</a>
</div>
<div class="col-12 col-sm-4 col-md-4">
<a href="{% url 'kaauh_career' %}" class="btn btn-action-tile w-100 d-grid text-center text-dark text-decoration-none">
<span class="action-tile-icon mb-2"><i class="fas fa-search"></i></span>
<span class="fw-bold">{% trans "Find New Careers" %}</span>
<span class="small text-muted d-none d-sm-block">{% trans "Explore open roles" %}</span>
</a>
</div>
</div> {% endcomment %}
</div>
<div class="tab-pane fade" id="applications-history" role="tabpanel" aria-labelledby="applications-tab">
@ -643,8 +536,7 @@
</div>
{% else %}
<div class="alert alert-info text-center p-5 rounded-3"
style="border: 1px dashed var(--kaauh-border); background-color: var(--kaauh-teal-light);">
<div class="alert alert-info text-center p-5 rounded-3" style="border: 1px dashed var(--kaauh-border); background-color: var(--kaauh-teal-light);">
<i class="fas fa-info-circle fa-2x mb-3 text-primary-theme"></i>
<h5 class="mb-3 fw-bold text-primary-theme">{% trans "You haven't submitted any applications yet." %}</h5>
<a href="{% url 'kaauh_career' %}" class="ms-3 btn btn-main-action mt-2 rounded-pill px-4">
@ -659,9 +551,7 @@
<p class="text-gray-subtle">{% trans "You can upload and manage your resume, certificates, and professional documents here. These documents will be attached to your applications." %}</p>
<button type="button"
class="btn btn-main-action rounded-pill px-4 me-3 d-block d-sm-inline-block w-100 w-sm-auto mb-4"
data-bs-toggle="modal" data-bs-target="#documentUploadModal">
<button type="button" class="btn btn-main-action rounded-pill px-4 me-3 d-block d-sm-inline-block w-100 w-sm-auto mb-4" data-bs-toggle="modal" data-bs-target="#documentUploadModal">
<i class="fas fa-cloud-upload-alt me-2"></i> {% trans "Upload New Document" %}
</button>
@ -670,18 +560,15 @@
{# Document List #}
<ul class="list-group list-group-flush">
{% for document in documents %}
<li
class="list-group-item d-flex flex-column flex-sm-row justify-content-between align-items-start align-items-sm-center bg-white p-3">
<li class="list-group-item d-flex flex-column flex-sm-row justify-content-between align-items-start align-items-sm-center bg-white p-3">
<div class="mb-2 mb-sm-0 fw-medium">
<i class="fas fa-file-pdf me-2 text-primary-theme"></i> <strong>{{document.document_type|title }}</strong>
<i class="fas fa-file-pdf me-2 text-primary-theme"></i> <strong>{{ document.document_type|title }}</strong>
<span class="text-muted small">({{ document.file.name|split:"/"|last }})</span>
</div>
<div class="d-flex align-items-center mt-2 mt-sm-0">
<span class="text-muted small me-3 d-none d-sm-inline">{% trans "Uploaded:" %} {{document.uploaded_at|date:"d M Y" }}</span>
<a href="{{ document.file.url }}" target="_blank"
class="btn btn-sm btn-outline-secondary me-2"><i class="fas fa-eye"></i></a>
<a href="{% url 'candidate_document_delete' document.id %}"
class="btn btn-sm btn-outline-danger" onclick="return confirm('{% trans " Are you sure you want to delete this document?" %}')"><i class="fas fa-trash-alt"></i></a>
<div class="d-flex align-items-center">
<span class="text-muted small me-3">{% trans "Uploaded:" %} {{ document.uploaded_at|date:"d M Y" }}</span>
<a href="{{ document.file.url }}" target="_blank" class="btn btn-sm btn-outline-secondary me-2"><i class="fas fa-eye"></i></a>
<a href="{% url 'candidate_document_delete' document.id %}" class="btn btn-sm btn-outline-danger" onclick="return confirm('{% trans "Are you sure you want to delete this document?" %}')"><i class="fas fa-trash-alt"></i></a>
</div>
</li>
{% empty %}
@ -694,41 +581,32 @@
</div>
{% comment %} <div class="tab-pane fade" id="account-settings" role="tabpanel"
aria-labelledby="settings-tab">
{% comment %} <div class="tab-pane fade" id="account-settings" role="tabpanel" aria-labelledby="settings-tab">
<h4 class="mb-4 fw-bold text-gray-subtle">{% trans "Security & Preferences" %}</h4>
<div class="row g-4">
<div class="col-12 col-md-6">
<div class="card kaauh-card p-4 h-100 bg-white">
<h5 class="fw-bold"><i class="fas fa-key me-2 text-primary-theme"></i> {% trans "Password
Security" %}</h5>
<p class="text-muted small">{% trans "Update your password regularly to keep your account
secure." %}</p>
<button type="button" class="btn btn-outline-secondary mt-auto w-100 py-2 fw-medium"
data-bs-toggle="modal" data-bs-target="#passwordModal">
<h5 class="fw-bold"><i class="fas fa-key me-2 text-primary-theme"></i> {% trans "Password Security" %}</h5>
<p class="text-muted small">{% trans "Update your password regularly to keep your account secure." %}</p>
<button type="button" class="btn btn-outline-secondary mt-auto w-100 py-2 fw-medium" data-bs-toggle="modal" data-bs-target="#passwordModal">
{% trans "Change Password" %}
</button>
</div>
</div>
<div class="col-12 col-md-6">
<div class="card kaauh-card p-4 h-100 bg-white">
<h5 class="fw-bold"><i class="fas fa-image me-2 text-primary-theme"></i> {% trans "Profile
Image" %}</h5>
<p class="text-muted small">{% trans "Update your profile picture to personalize your
account." %}</p>
<button type="button" class="btn btn-outline-secondary mt-auto w-100 py-2 fw-medium"
data-bs-toggle="modal" data-bs-target="#profileImageModal">
<h5 class="fw-bold"><i class="fas fa-image me-2 text-primary-theme"></i> {% trans "Profile Image" %}</h5>
<p class="text-muted small">{% trans "Update your profile picture to personalize your account." %}</p>
<button type="button" class="btn btn-outline-secondary mt-auto w-100 py-2 fw-medium" data-bs-toggle="modal" data-bs-target="#profileImageModal">
{% trans "Change Image" %}
</button>
</div>
</div>
</div>
<div class="alert mt-5 py-3"
style="background-color: var(--danger-subtle); color: #842029; border: 1px solid #f5c2c7; border-radius: 8px;">
<i class="fas fa-exclamation-triangle me-2"></i> {% trans "To delete your profile, please contact HR
support." %}
<div class="alert mt-5 py-3" style="background-color: var(--danger-subtle); color: #842029; border: 1px solid #f5c2c7; border-radius: 8px;">
<i class="fas fa-exclamation-triangle me-2"></i> {% trans "To delete your profile, please contact HR support." %}
</div>
</div> {% endcomment %}
@ -759,8 +637,7 @@
</div>
<!-- Profile Image Modal (Reused from portal_profile.html) -->
<div class="modal fade mt-4" id="profileImageModal" tabindex="-1" aria-labelledby="profileImageModalLabel"
aria-hidden="true">
<div class="modal fade mt-4" id="profileImageModal" tabindex="-1" aria-labelledby="profileImageModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
@ -768,8 +645,7 @@
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form method="post" action="{% url 'user_profile_image_update' candidate.pk %}"
enctype="multipart/form-data">
<form method="post" action="{% url 'user_profile_image_update' candidate.pk %}" enctype="multipart/form-data" >
{% csrf_token %}
<div class="mb-3">
@ -782,8 +658,7 @@
<small class="text-muted d-block">{% trans "Current Image:" %}</small>
{# Display Link to View Current Image #}
<a href="{{ profile_form.instance.profile_image.url }}" target="_blank"
class="d-inline-block me-3 text-info fw-bold">
<a href="{{ profile_form.instance.profile_image.url }}" target="_blank" class="d-inline-block me-3 text-info fw-bold">
{% trans "View/Download" %} ({{ profile_form.instance.profile_image.name }})
</a>
@ -797,7 +672,7 @@
{# 2. Explicitly render the 'Clear' checkbox and the Change input #}
<div class="form-check mt-3">
{# The ClearableFileInput widget renders itself here. It provides the "Clear" checkbox and the "Change" input field. #}
{{ profile_form.profile_image }}
</div>
@ -826,8 +701,7 @@
</div>
<!-- Document Upload Modal -->
<div class="modal fade mt-4" id="documentUploadModal" tabindex="-1" aria-labelledby="documentUploadModalLabel"
aria-hidden="true">
<div class="modal fade mt-4" id="documentUploadModal" tabindex="-1" aria-labelledby="documentUploadModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
@ -835,8 +709,7 @@
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form method="post" action="{% url 'document_upload' candidate.id %}" enctype="multipart/form-data"
id="documentUploadForm">
<form method="post" action="{% url 'document_upload' candidate.id %}" enctype="multipart/form-data" id="documentUploadForm">
<input type="hidden" name="upload_target" value="person">
{% csrf_token %}
<div class="mb-3">
@ -848,7 +721,7 @@
{{ document_form.file }}
</div>
<div class="modal-footer mt-4">
<button type="button" class="btn btn-lg btn-secondary" data-bs-dismiss="modal">{% trans "Close"%}</button>
<button type="button" class="btn btn-lg btn-secondary" data-bs-dismiss="modal">{% trans "Close" %}</button>
<button type="submit" class="btn btn-main-action">{% trans "Upload" %}</button>
</div>
</form>