Round 23: Report Card Generator, Seating Chart, School Library, Parent Portal Enhancement

- Report Card Generator: Professional report cards with PDF export
  - Subject grades table with competency levels
  - Competency radar chart, teacher comments
  - Template management, batch generation
  - Status workflow: draft → review → published → archived

- Seating Chart View: Visual classroom layout
  - Grid-based classroom with desk positions
  - Multiple layout templates (rows, groups, U-shape, circle)
  - Click-to-assign student placement
  - Randomize and smart arrange features
  - Student info popover

- School Library View: Book lending system
  - Book catalog with search and filter
  - Checkout system with due dates and renewals
  - Overdue tracking with notifications
  - Reservation queue system
  - Statistics dashboard with charts

- Enhanced Parent Portal: Comprehensive dashboard
  - Child overview with multiple children selector
  - Academic progress with competency radar chart
  - Attendance & illness with approval
  - Communication, schedule, and reports tabs

- Bug fixes: i18n breadcrumb keys for new views
- Styling: Gradient headers, animations, hover effects across all new views
- 200+ i18n keys added, 15+ API routes, 3+ Prisma models
This commit is contained in:
Mustafa Cetin committed 2026-07-29 23:42:26 +00:00
1 parent 490bd0650f
commit 6e5af13778
28 files changed
+10252 -494

No files matched your search

+95
View File
@@ -3212,4 +3212,99 @@
.class-card-active:hover::before {
opacity: 1;
}
/* Report Card View - Badge shimmer animation */
@keyframes shimmer {
0% { transform: translateX(-100%); }
100% { transform: translateX(100%); }
}
/* Report Card View - Print styles */
@media print {
.report-card-print {
box-shadow: none !important;
border: 1px solid #e5e7eb !important;
}
.report-card-print * {
color-adjust: exact;
-webkit-print-color-adjust: exact;
print-color-adjust: exact;
}
.no-print {
display: none !important;
}
}
/* Seating Chart - Desk hover glow */
@keyframes desk-glow {
0%, 100% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0); }
50% { box-shadow: 0 0 8px 2px rgba(16, 185, 129, 0.3); }
}
/* Seating Chart - Empty desk dashed border animation */
@keyframes dash-march {
to { stroke-dashoffset: -12; }
}
/* Library - Book card hover lift */
.book-card-hover {
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.book-card-hover:hover {
transform: translateY(-4px) scale(1.01);
box-shadow: 0 12px 24px -8px rgba(16, 185, 129, 0.15), 0 4px 8px -2px rgba(0, 0, 0, 0.06);
}
/* Library - Availability pulse */
@keyframes availability-pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.6; }
}
.availability-pulse {
animation: availability-pulse 2s ease-in-out infinite;
}
/* Library - Overdue gradient border */
.overdue-gradient-border {
position: relative;
}
.overdue-gradient-border::before {
content: '';
position: absolute;
inset: 0;
border-radius: 0.5rem;
padding: 2px;
background: linear-gradient(135deg, #ef4444, #f97316, #ef4444);
mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
mask-composite: exclude;
-webkit-mask-composite: xor;
pointer-events: none;
}
/* Parent Portal - Circular progress gradient */
@keyframes progress-fill-animate {
from { stroke-dashoffset: var(--circumference); }
to { stroke-dashoffset: var(--offset); }
}
/* Parent Portal - Tab transition */
.tab-content-enter {
animation: tab-enter 0.3s ease-out;
}
@keyframes tab-enter {
from { opacity: 0; transform: translateY(8px); }
to { opacity: 1; transform: translateY(0); }
}
/* Glassmorphism card style */
.glass-card {
background: rgba(255, 255, 255, 0.7);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border: 1px solid rgba(255, 255, 255, 0.3);
}
.dark .glass-card {
background: rgba(24, 24, 27, 0.7);
border: 1px solid rgba(255, 255, 255, 0.06);
}
}