Modal Design Audit Report
This file audits every modal in client/src against the premium New Course Modal design style (backdrop blur, rounded-[2.5rem] border-radius, and top-right watermark background icons).
Summary
- 🎨 Premium Modals: 125 (real modals) + 1 flagged non-modal (Nav.tsx bottom nav) = 126 table rows
- ⚠️ Legacy Modals (Needs Redesign): 0
- Last verified: Modal redesign pass on
feature/modal-audit worktree (dev branch). All listed modals carry the premium styling. Two modals were missing from the original audit and were added: the "New Chat / Group" drawer and "Attachment Preview" modal in pages/Messages.tsx. pages/enrollments/EnrollmentsPage.tsx had two modals originally mislabeled as premium — both were missing the watermark and rounded-[2.5rem] and have since been corrected. The mobile sidebar overlay in components/Nav.tsx:577 is excluded per the audit scope (sidebar, not modal). Net real-modal count went from 123 (original audit, excluding the mislabeled Nav.tsx bottom-nav row) → 125 after adding the two Messages.tsx modals.
| Status |
Modal Name / Title |
File Location |
Line |
Backdrop Blur |
rounded-[2.5rem] |
Watermark Icon |
Required Changes |
Premium Modal Design Details (New Course Modal Reference)
The New Course modal sets the premium design standard that all modals should follow. Below are the specific design details to replicate:
Backdrop
- Fixed position covering the entire viewport:
fixed inset-0
- Background color with opacity: e.g.,
bg-[#002147]/60 (a dark blue at 60% opacity; adjust to match your theme's overlay color)
- Backdrop blur:
backdrop-blur-sm (Tailwind's small blur effect)
- Z-index:
z-[150] (high enough to stay above most content)
- Flex container for centering:
flex items-center justify-center p-4
Modal Container
- Background:
bg-card (theme's card background color)
- Border radius:
rounded-[2.5rem] (large rounded corners)
- Dimensions:
w-full max-w-xl max-h-[90vh] (full width, max width, max height)
- Layout:
flex flex-col
- Shadow:
shadow-2xl
- Overflow:
overflow-hidden (to clip content with radius)
- Animation:
animate-in zoom-in-95 duration-200 (fade and zoom-in entrance animation)
- Border:
border border-border (subtle border using the theme's border color)
- Padding:
px-10 py-8
- Background:
bg-muted/50 (semi-transparent muted background)
- Bottom border:
border-b border-border
- Layout:
flex justify-between items-center relative overflow-hidden flex-shrink-0
- Watermark icon:
- Position:
absolute right-[-20px] top-[-20px]
- Opacity:
opacity-[0.03]
- Rotation:
rotate-12
- Icon:
<Sparkles size={180} /> (or similar sparkle icon from your icon library)
- Title:
text-2xl font-black text-text tracking-tight font-heading
- Subtitle:
text-xs font-bold text-text-muted uppercase tracking-widest mt-1
Close Button
- Position:
relative z-10
- Size:
w-10 h-10
- Layout:
flex items-center justify-center
- Border radius:
rounded-xl
- Background:
bg-card
- Border:
border border-border
- Text color:
text-text-muted
- Hover effect:
hover:text-rose-500
- Transition:
transition-all
- Icon:
<X size={20} />
Note
Other modal content (forms, buttons, etc.) should follow your application's design system but must respect the modal container's rounded corners and overflow-hidden to maintain the curved clipping.
| 🎨 Premium | Download | AttachmentPreviewModal.tsx | 153 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | New Game / Puzzle | EdutainmentGames.tsx | 1206 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Mobile Bottom Nav (not a modal) | Nav.tsx | 561 | ✅ | ✅ | ✅ | Not a modal — listed here only to flag the original audit row was misclassified. The actual mobile sidebar overlay at Nav.tsx:577 is excluded per audit scope. |
| 🎨 Premium | Pay School Fees | PaynowPayment.tsx | 127 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Test Mode - Payment Initiated | PaynowPayment.tsx | 276 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Payment Initiated | PaynowPayment.tsx | 350 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Payment Successful! | PaynowPayment.tsx | 430 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | General Modal / Overlay | StudentSocialDoc.tsx | 103 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | General Modal / Overlay | AuditLogs.tsx | 224 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Offboarding Details | Offboarding.tsx | 240 | ✅ | ✅ | ✅ | None (upgraded to centered Modal with backdrop blur & watermark) |
| 🎨 Premium | Initiate User Offboarding | InitiateOffboardingModal.tsx | 1 | ✅ | ✅ | ✅ | None (built using shared Modal with live database user search & dropdown selectors) |
| 🎨 Premium | **** | Departments.tsx | 783 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | **** | Departments.tsx | 1018 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | General Modal / Overlay | Departments.tsx | 1214 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | General Modal / Overlay | AdmissionEnquiry.tsx | 471 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | General Modal / Overlay | AdmissionEnquiry.tsx | 662 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | General Modal / Overlay | Complaints.tsx | 262 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | General Modal / Overlay | Complaints.tsx | 417 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | General Modal / Overlay | PhoneCalls.tsx | 328 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | General Modal / Overlay | PhoneCalls.tsx | 738 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | General Modal / Overlay | PostalDispatch.tsx | 331 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | General Modal / Overlay | PostalDispatch.tsx | 709 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | General Modal / Overlay | VisitorLog.tsx | 255 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Register Hostel | HostelPortal.tsx | 572 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Add Room | HostelPortal.tsx | 678 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Allocate Bed | HostelPortal.tsx | 764 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Onboard Staff | HRManagement.tsx | 959 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | **** | HRManagement.tsx | 1167 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Staff Documents | HRManagement.tsx | 1435 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Leave Audit Intel | HRManagement.tsx | 1487 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | New Payroll Run | HRManagement.tsx | 1567 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Create Job Vacancy | HRManagement.tsx | 1606 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Vacancy Details | HRManagement.tsx | 1702 | ✅ | ✅ | ✅ | None (upgraded — was audit row 1690) |
| 🎨 Premium | Review Candidate | HRManagement.tsx | 1885 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Register Candidate | HRManagement.tsx | 1946 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Add Stock | Inventory.tsx | 739 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Issue School Asset | Inventory.tsx | 825 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Return Asset | Inventory.tsx | 1131 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Add New Item | Inventory.tsx | 1211 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Register / Update Book | Library.tsx | 646 | ✅ | ✅ | ✅ | None (upgraded — was audit row "Book Details") |
| 🎨 Premium | Circulate Asset | Library.tsx | 719 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Finalize Circulation | Library.tsx | 839 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | General Modal / Overlay | NoticeBoard.tsx | 382 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Institutional Audit Report | Reports.tsx | 484 | ✅ | ✅ | ✅ | None (upgraded — was audit row "General Modal / Overlay") |
| 🎨 Premium | Subject Marks Summary | Reports.tsx | 620 | ✅ | ✅ | ✅ | None (upgraded — was audit row "General Modal / Overlay") |
| 🎨 Premium | Register Vehicle | TransportDashboard.tsx | 630 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Define Route | TransportDashboard.tsx | 741 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Allocate Transport | TransportDashboard.tsx | 884 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Assign Route Unit | TransportDashboard.tsx | 1001 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | General Modal / Overlay | Users.tsx | 386 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | General Modal / Overlay | Users.tsx | 773 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Link Student to Parent | Users.tsx | 903 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Add / Edit Education Level | Settings.tsx | 1040 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Remove education level? | Settings.tsx | 1212 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | New Section | Classes.tsx | 467 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | General Modal / Overlay | Classes.tsx | 506 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Create Club / Edit Club | ClubManagement.tsx | 637 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Assign Leader | ClubManagement.tsx | 764 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Club Members | ClubManagement.tsx | 890 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | New Crossword Puzzle | CrosswordPage.tsx | 284 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Crossword Finished | CrosswordPage.tsx | 797 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Server Runtime Logs | SysAdminDashboard.tsx | 371 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | General Modal / Overlay | EnrollmentsPage.tsx | 352 | ✅ | ✅ | ✅ | None (was mislabeled premium — missing watermark + rounded-[2.5rem], now corrected) |
| 🎨 Premium | Request Enrollment | EnrollmentsPage.tsx | 439 | ✅ | ✅ | ✅ | None (was mislabeled premium — missing watermark + rounded-[2.5rem], now corrected) |
| 🎨 Premium | Establish Event | Events.tsx | 396 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | New Exam | ExamViews.tsx | 282 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Finalize Transmission? | ExamViews.tsx | 878 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Create Fee Group | Fees.tsx | 429 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Assign Fees | Fees.tsx | 456 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Record Payment | Fees.tsx | 486 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Edit Fee Group | Fees.tsx | 560 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Delete bank account? | BankingAccounts.tsx | 255 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | New / Edit bank account | BankingAccounts.tsx | 335 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Delete chart account? | ChartOfAccounts.tsx | 211 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | New / Edit chart account | ChartOfAccounts.tsx | 347 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Revoke discount? | Discounts.tsx | 230 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Add / Edit Discount | Discounts.tsx | 294 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Assign Discount | Discounts.tsx | 368 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Delete expense? | Expenses.tsx | 432 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Reject expense? | Expenses.tsx | 463 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | New Expense | Expenses.tsx | 551 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Revoke plan? | FeePlans.tsx | 255 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Apply Fee Plan | FeePlans.tsx | 313 | ✅ | ✅ | ✅ | None (upgraded — no separate Add/Edit modal exists; /finance/plans/new is a dead route) |
| 🎨 Premium | Add / Edit Invoice | Invoices.tsx | 258 | ✅ | ✅ | ✅ | None (drawer modal — watermark + rounded-[2.5rem] on inner panel) |
| 🎨 Premium | New payroll run | PayrollRuns.tsx | 328 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | View Payslip | Payslips.tsx | 263 | ✅ | ✅ | ✅ | None (drawer modal — watermark + rounded-[2.5rem] on inner panel) |
| 🎨 Premium | Remove member? | StudentGroupDetail.tsx | 108 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Delete group? | StudentGroups.tsx | 230 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Add / Edit Group | StudentGroups.tsx | 297 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Manage Group Members | StudentGroups.tsx | 364 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Delete supplier? | Suppliers.tsx | 216 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Add / Edit Supplier | Suppliers.tsx | 283 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Record trip payment | TripDetail.tsx | 262 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Assign students to trip | TripDetail.tsx | 300 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Delete trip? | Trips.tsx | 243 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Add / Edit Trip | Trips.tsx | 323 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Reject Leave Request | LeaveApproval.tsx | 309 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Add / Edit Staff | StaffDirectory.tsx | 242 | ✅ | ✅ | ✅ | None (drawer modal — watermark + rounded-[2.5rem] on inner panel) |
| 🎨 Premium | General Modal / Overlay | Books.tsx | 326 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Bulk Import | Books.tsx | 465 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Issue Book | Issues.tsx | 340 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Return Book | Issues.tsx | 526 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Report Card Modal | AcademicProgress.tsx | 791 | ✅ | ✅ | ✅ | None (upgraded — was audit row "Marks Detail Overlay") |
| 🎨 Premium | Preview Script Modal | AcademicProgress.tsx | 963 | ✅ | ✅ | ✅ | None (upgraded — audit row "Term Selection Overlay" referred to a non-existent modal; corrected to match actual purpose) |
| 🎨 Premium | **** | Profile.tsx | 557 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Preview Modal | Assignments.tsx | 969 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | View Assignment Details | Assignments.tsx | 747 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | View Homework Details | Homework.tsx | 91 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Submit Homework | Homework.tsx | 291 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | View Test Details | Tests.tsx | 89 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Take / Start Test | Tests.tsx | 284 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Learner Registry | Students.tsx | 347 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | General Modal / Overlay | Assignments.tsx | 565 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Create Assignment | Assignments.tsx | 716 | ✅ | ✅ | ✅ | None (upgraded — watermark icon swapped from generic Sparkles to PlusCircle) |
| 🎨 Premium | Grade Submission | Assignments.tsx | 812 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | Create Activity | Extracurriculars.tsx | 520 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Post Announcement | Extracurriculars.tsx | 582 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Add Student | Extracurriculars.tsx | 617 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Edit Activity | Extracurriculars.tsx | 727 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Create Homework | Homework.tsx | 343 | ✅ | ✅ | ✅ | None (upgraded — rounded-3xl → rounded-[2.5rem]; watermark Sparkles → BookOpen) |
| 🎨 Premium | Homework Details | Homework.tsx | 484 | ✅ | ✅ | ✅ | None (upgraded — drawer modal) |
| 🎨 Premium | Grade Homework | Homework.tsx | 563 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | New Course | MyCourses.tsx | 377 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | **** | Students.tsx | 393 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Add | TeacherTools.tsx | 672 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | Create Test | Tests.tsx | 355 | ✅ | ✅ | ✅ | None (upgraded — rounded-3xl → rounded-[2.5rem]; watermark Sparkles → PlusCircle) |
| 🎨 Premium | Test Details | Tests.tsx | 508 | ✅ | ✅ | ✅ | None (upgraded — drawer modal) |
| 🎨 Premium | Grade Test | Tests.tsx | 587 | ✅ | ✅ | ✅ | None (upgraded) |
| 🎨 Premium | **** | Teachers.tsx | 385 | ✅ | ✅ | ✅ | None (already premium) |
| 🎨 Premium | New Chat / New Group | Messages.tsx | 740 | ✅ | ✅ | ✅ | None (drawer modal — watermark + rounded-r-[2.5rem] on inner panel; was missing from original audit) |
| 🎨 Premium | Attachment Preview | Messages.tsx | 856 | ✅ | ✅ | ✅ | None (was missing from original audit) |
Premium Modal Redesign Specification (UX & Technical Details)
To elevate all legacy modals to the premium standard of the New Course Modal, use the following unified design token blueprint. This ensures consistency in visual rhythm, depth, accessibility, and interactive micro-interactions.
graph TD
Backdrop["Backdrop Overlay<br/>bg-[#002147]/60 backdrop-blur-sm z-[150]"] --> Container["Modal Container<br/>bg-card rounded-[2.5rem] shadow-2xl border border-border overflow-hidden animate-in zoom-in-95"]
Container --> Header["Header Block<br/>px-10 py-8 bg-muted/50 border-b relative overflow-hidden flex-shrink-0"]
Container --> Form["Form & Content Area<br/>p-10 space-y-6 overflow-y-auto flex-1"]
Header --> Watermark["Watermark Icon<br/>absolute right-[-20px] top-[-20px] opacity-[0.03] rotate-12"]
Header --> TitleSec["Title Section<br/>text-2xl font-black + text-xs uppercase tracking-widest subtitle"]
Header --> CloseBtn["Close Button<br/>relative z-10 w-10 h-10 rounded-xl bg-card border hover:text-rose-500 hover:border-rose-500/20"]
Form --> FormInputs["Premium Fields<br/>Labels: tracking-[2px] uppercase<br/>Inputs: rounded-2xl bg-muted/50 focus:ring-4"]
1. Unified CSS Token Blueprint
A. Backdrop & Portal
-
Tailwind Class: fixed inset-0 bg-[#002147]/60 backdrop-blur-sm z-[150] flex items-center justify-center p-4
-
Portal Requirement (mandatory): Always render the modal via a React portal to document.body, e.g.
import { createPortal } from 'react-dom';
// ...
{showModal && createPortal(
<div className="fixed inset-0 bg-[#002147]/60 backdrop-blur-sm z-[150] flex items-center justify-center p-4"
onClick={() => setShowModal(false)}>
{/* modal panel */}
</div>,
document.body
)}
position: fixed anchors to the viewport by default. However, if any ancestor has transform, filter, perspective, will-change: transform, or contain: [layout|paint|strict|content] set, that ancestor becomes the containing block instead and the backdrop is clipped to its bounding box. This is a real failure mode in this codebase — pages with active CSS animations (e.g. animate-spin on a status icon inside a card, group-hover:scale-110 on a tile icon) silently create that containing block and the full-viewport backdrop renders only inside the transformed ancestor's box. Portaling to document.body removes the modal from the page's React subtree and guarantees the backdrop covers the full viewport regardless of any ancestor styling.
Click-outside-to-close (close on backdrop click + stopPropagation on the panel) is also wired up here so the dark area is interactive, not just visual.
-
UX/UI Rationale:
- The
#002147 navy background creates a deep brand-aligned overlay instead of generic grey/black transparency.
backdrop-blur-sm filters out complex background dashboard content, lowering cognitive load and creating a clear focus state.
- Centered positioning (
items-center justify-center) with outer padding (p-4) ensures the modal doesn't clip on small viewport sizes.
- Portaling to
document.body is mandatory — see above.
B. Modal Container
- Tailwind Class:
bg-card rounded-[2.5rem] w-full max-w-xl max-h-[90vh] flex flex-col shadow-2xl overflow-hidden animate-in zoom-in-95 duration-200 border border-border
- UX/UI Rationale:
rounded-[2.5rem] provides a smooth, modern organic shape resembling high-end mobile application sheets.
overflow-hidden clips any child elements (like form scroll zones or header backgrounds) to preserve the rounded corners.
- Entry animations (
animate-in zoom-in-95 duration-200) prevent jarring page popups, creating a polished transition.
- Tailwind Class:
px-10 py-8 bg-muted/50 border-b border-border flex justify-between items-center relative overflow-hidden flex-shrink-0
- UX/UI Rationale:
- Generous padding (
px-10 py-8) establishes breathing room for scanning headings.
relative overflow-hidden allows watermark icons to be absolutely positioned inside the header without breaking out of boundaries.
- Title Class:
text-2xl font-black text-text tracking-tight font-heading
- Subtitle Class:
text-xs font-bold text-text-muted uppercase tracking-widest mt-1
- UX/UI Rationale:
- Tight font-heading tracking looks compact and modern.
- Subtitles act as metadata summaries (e.g., "Establish new academic record") rather than leaving inputs unexplained.
E. Background Watermark Icon
- Tailwind Class:
absolute right-[-20px] top-[-20px] opacity-[0.03] rotate-12
- Sizing:
size={180} (or size={200} for wider modals)
- UX/UI Rationale:
- A barely-visible, rotated decorative icon provides immediate, pre-attentive semantic context (e.g., a Coins icon suggests a payment context).
F. Standardized Close Button
- Tailwind Class:
relative z-10 w-10 h-10 flex items-center justify-center rounded-xl bg-card border border-border text-text-muted hover:text-rose-500 hover:border-rose-500/20 hover:bg-rose-50/5 transition-all
- Content: Lucide
<X size={20} /> (never raw text ×).
- UX/UI Rationale:
- Elevated click target (
w-10 h-10 with rounded-xl) makes closing easy.
- Transition from standard borders to a soft rose alert color on hover provides reactive feedback.
2. Detailed Legacy Modals Redesign Specifications (Grouped by File)
Below is the file-by-file specification of required changes for each of the 80 legacy modals, showing the exact class names, sub-text copy, and contextual Lucide icons to use as watermarks.
📂 File: client/src/pages/admin/HRManagement.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Subtitle & Action Required |
| 1435 |
Staff Documents |
<FolderOpen size={180} /> |
Add relative overflow-hidden flex-shrink-0 to the header. Insert watermark absolute container. Update close button to standard block with <X />. |
| 1487 |
Leave Audit Intel |
<CalendarDays size={180} /> |
Add relative overflow-hidden and flex-shrink-0 to header. Set subtitle to "Audit staff time-off request history". Insert watermark. |
| 1567 |
New Payroll Run |
<Coins size={180} /> |
Add relative overflow-hidden and flex-shrink-0 to header. Set subtitle to "Generate new batch salary transaction sheet". Insert watermark. |
| 1606 |
Create Job Vacancy |
<Briefcase size={180} /> |
Add relative overflow-hidden and flex-shrink-0 to header. Set subtitle to "Post new employment opportunity details". Insert watermark. |
| 1690 |
General Modal / Overlay (Candidate Details) |
<UserCheck size={180} /> |
Add relative overflow-hidden to header. Set subtitle to "Review applicant credentials and hiring pipeline status". Insert watermark. |
| 1873 |
Review Candidate (Interview details) |
<ClipboardCheck size={180} /> |
Add relative overflow-hidden to header. Set subtitle to "Submit final feedback and score notes". Insert watermark. |
| 1934 |
Register Candidate |
<UserPlus size={180} /> |
Add relative overflow-hidden to header. Set subtitle to "Add new candidate to recruitment database". Insert watermark. |
📂 File: client/src/pages/admin/Inventory.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Subtitle & Action Required |
| 739 |
Add Stock |
<Package size={180} /> |
Add relative overflow-hidden to header. Set subtitle to "Update physical inventory levels". Insert watermark. |
| 821 |
General Modal / Overlay (Stock Details) |
<Layers size={180} /> |
Add relative overflow-hidden to header. Set subtitle to "Detailed item ledger and movement ledger". Insert watermark. |
| 1126 |
Return Asset |
<Undo2 size={180} /> |
Add relative overflow-hidden to header. Set subtitle to "Process item return back to warehouse". Insert watermark. |
| 1202 |
Add New Item |
<Tag size={180} /> |
Add relative overflow-hidden to header. Set subtitle to "Create new listing in product catalog". Insert watermark. |
📂 File: client/src/pages/admin/Library.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Subtitle & Action Required |
| 646 |
General Modal / Overlay (Book Details) |
<BookOpen size={180} /> |
Add relative overflow-hidden to header. Set subtitle to "View book catalog details and availability". Insert watermark. |
| 718 |
Circulate Asset |
<ArrowRightLeft size={180} /> |
Add relative overflow-hidden to header. Set subtitle to "Lend asset to student or staff member". Insert watermark. |
| 835 |
Finalize Circulation |
<CheckCircle2 size={180} /> |
Add relative overflow-hidden to header. Set subtitle to "Review returning books and assess fees". Insert watermark. |
📂 File: client/src/pages/admin/Reports.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Subtitle & Action Required |
| 484 |
General Modal / Overlay (Report Config) |
<BarChart3 size={180} /> |
Add relative overflow-hidden to header. Set subtitle to "Configure visual report generation parameters". Insert watermark. |
| 614 |
General Modal / Overlay (Export Details) |
<Download size={180} /> |
Add relative overflow-hidden to header. Set subtitle to "Download analytics output spreadsheet". Insert watermark. |
📂 File: client/src/pages/admin/Users.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Subtitle & Action Required |
| 903 |
Link Student to Parent |
<Link2 size={180} /> |
Add relative overflow-hidden on header. Set subtitle to "Associate academic profile with parent accounts". Insert watermark. |
📂 File: client/src/pages/admin/Settings.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Subtitle & Action Required |
| 1040 |
Add / Edit Education Level |
<BookOpen size={200} /> |
None (already premium) |
| 1212 |
Remove education level? |
<Trash2 size={180} /> |
None (already premium) |
📂 File: client/src/pages/clubs_head/ClubManagement.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Subtitle & Action Required |
| 637 |
General Modal / Overlay (Create Club) |
<Compass size={180} /> |
Add relative overflow-hidden to header. Set subtitle to "Establish new student society or organization". Insert watermark. |
| 764 |
General Modal / Overlay (Assign Leader) |
<Crown size={180} /> |
Add relative overflow-hidden to header. Set subtitle to "Appoint student leadership board officials". Insert watermark. |
| 890 |
General Modal / Overlay (Club Members) |
<Users size={180} /> |
Add relative overflow-hidden to header. Set subtitle to "Manage enrollment and society roster". Insert watermark. |
📂 File: client/src/pages/crossword/CrosswordPage.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Subtitle & Action Required |
| 284 |
New Crossword Puzzle |
<Grid size={180} /> |
Add relative overflow-hidden to header. Set subtitle to "Design crossword layout and character hints". Insert watermark. |
| 797 |
Crossword Finished |
<Trophy size={180} /> |
Add relative overflow-hidden to header. Set subtitle to "Congratulations! Grid solved successfully". Insert watermark. |
📂 File: client/src/pages/dashboard/SysAdminDashboard.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Subtitle & Action Required |
| 371 |
Server Runtime Logs |
<Terminal size={180} /> |
Add relative overflow-hidden to header. Set subtitle to "Inspect live system events and process stdout". Insert watermark. |
📂 File: client/src/pages/exams/ExamViews.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Subtitle & Action Required |
| 878 |
Finalize Transmission? |
<Send size={180} /> |
Add relative overflow-hidden to header. Set subtitle to "Publish results to student and parent dashboards". Insert watermark. |
📂 File: client/src/pages/Fees.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Required Style Transformations |
| 429 |
Create Fee Group |
<Coins size={180} /> |
Change backdrop from bg-slate-900/60 to bg-[#002147]/60 backdrop-blur-sm z-[150]. Update container boundary: rounded-3xl to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Replace close text button × with standardized close <button> container holding <X size={20} />. |
| 456 |
Assign Fees |
<UserPlus size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
| 486 |
Record Payment |
<CreditCard size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
| 560 |
Edit Fee Group |
<Edit3 size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
📂 File: client/src/pages/finance/BankingAccounts.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Required Style Transformations |
| 255 |
Delete bank account? |
<AlertTriangle size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
| 327 |
Add/Edit Account |
<Landmark size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
📂 File: client/src/pages/finance/ChartOfAccounts.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Required Style Transformations |
| 211 |
Delete chart account? |
<AlertTriangle size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
| 339 |
Add/Edit Ledger |
<FileSpreadsheet size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
📂 File: client/src/pages/finance/Discounts.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Required Style Transformations |
| 230 |
Revoke discount? |
<AlertTriangle size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
| 284 |
Add/Edit Discount |
<Percent size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
| 358 |
Assign Discount |
<UserCheck size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
📂 File: client/src/pages/finance/Expenses.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Required Style Transformations |
| 432 |
Delete expense? |
<AlertTriangle size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
| 463 |
Reject expense? |
<XOctagon size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
| 551 |
New Expense |
<PlusCircle size={200} /> |
None (already premium) |
📂 File: client/src/pages/finance/FeePlans.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Required Style Transformations |
| 255 |
Revoke plan? |
<AlertTriangle size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
| 305 |
Add/Edit Fee Plan |
<CalendarDays size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
📂 File: client/src/pages/finance/Invoices.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Required Style Transformations |
| 258 |
Add/Edit Invoice |
<Receipt size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
📂 File: client/src/pages/finance/PayrollRuns.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Required Style Transformations |
| 328 |
New Payroll Run |
<Wallet size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
📂 File: client/src/pages/finance/Payslips.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Required Style Transformations |
| 263 |
View Payslip |
<Receipt size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
📂 File: client/src/pages/finance/StudentGroupDetail.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Required Style Transformations |
| 108 |
Remove Group Member? |
<UserMinus size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
📂 File: client/src/pages/finance/StudentGroups.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Required Style Transformations |
| 230 |
Delete Group? |
<AlertTriangle size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
| 289 |
Add/Edit Group |
<Users size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
| 356 |
Manage Group Members |
<UserCheck size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
📂 File: client/src/pages/finance/Suppliers.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Required Style Transformations |
| 216 |
Delete Supplier? |
<AlertTriangle size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
| 278 |
Add/Edit Supplier |
<Truck size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
📂 File: client/src/pages/finance/TripDetail.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Required Style Transformations |
| 262 |
Record Trip Payment |
<CreditCard size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
| 296 |
Assign Students to Trip |
<Bus size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
📂 File: client/src/pages/finance/Trips.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Required Style Transformations |
| 243 |
Delete Trip? |
<AlertTriangle size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
| 318 |
Add/Edit Trip |
<Compass size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
📂 File: client/src/pages/hr/LeaveApproval.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Required Style Transformations |
| 309 |
Reject Leave Request |
<CalendarX size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
📂 File: client/src/pages/hr/StaffDirectory.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Required Style Transformations |
| 242 |
Add/Edit Staff |
<UserPlus size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close text button with standard icon. |
📂 File: client/src/pages/parent/AcademicProgress.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Required Style Transformations |
| 767 |
Marks Detail Overlay |
<Award size={180} /> |
Add relative overflow-hidden on header. Insert watermark. Re-align title structure to premium tracking. Replace close button with standard icon. |
| 936 |
Term Selection Overlay |
<CalendarDays size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close button with standard icon. |
📂 File: client/src/pages/student/Assignments.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Required Style Transformations |
| 942 |
View Assignment details |
<FileText size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close button with standard icon. |
| 969 |
Preview Modal |
<Eye size={180} /> |
None (already premium) |
📂 File: client/src/pages/student/Homework.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Required Style Transformations |
| 90 |
View Homework details |
<BookOpen size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close button with standard icon. |
| 297 |
Submit Homework |
<UploadCloud size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close button with standard icon. |
📂 File: client/src/pages/student/Tests.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Required Style Transformations |
| 88 |
View Test details |
<FileQuestion size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close button with standard icon. |
| 298 |
Take/Start Test |
<Timer size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close button with standard icon. |
📂 File: client/src/pages/teacher/Assignments.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Required Style Transformations |
| 716 |
Create Assignment |
<PlusCircle size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close button with standard icon. |
| 803 |
Grade Submission |
<CheckSquare size={180} /> |
Add relative overflow-hidden on header. Insert watermark. Re-align title structure to premium tracking. Replace close button with standard icon. |
📂 File: client/src/pages/teacher/Homework.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Required Style Transformations |
| 343 |
Create Homework |
<BookOpen size={180} /> |
Update container to rounded-[2.5rem]. Add standard close button structure with <X size={20} /> and hover states. |
| 476 |
Homework Details |
<BookOpen size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close button with standard icon. |
| 556 |
Grade Homework |
<CheckSquare size={180} /> |
Add relative overflow-hidden on header. Insert watermark. Re-align title structure to premium tracking. Replace close button with standard icon. |
📂 File: client/src/pages/teacher/Tests.tsx
| Line |
Modal Name / Context |
Watermark Icon |
Required Style Transformations |
| 355 |
Create Test |
<PlusCircle size={180} /> |
Update container to rounded-[2.5rem]. Standardize header background, title tracking, and close button structure. |
| 500 |
Test Details |
<FileQuestion size={180} /> |
Change backdrop. Update container to rounded-[2.5rem]. Add relative overflow-hidden on header. Add watermark. Re-align title structure to premium tracking. Replace close button with standard icon. |
| 580 |
Grade Test |
<CheckSquare size={180} /> |
Add relative overflow-hidden on header. Insert watermark. Re-align title structure to premium tracking. Replace close button with standard icon. |