Round 11: DrawingCanvas Integration, Notebook Versioning, Student Auth, Parent Portal, Calendar Recurring, Grade PDF, Data Import/Export

This commit is contained in:
Mustafa Cetin committed 2026-07-29 09:15:59 +00:00
1 parent b90ad85b91
commit c3d36aac67
22 files changed
+3984 -314

No files matched your search

+121
View File
@@ -260,6 +260,45 @@
}
/* Print styles — full print stylesheet lives at end of file */
/* ─── Slide animations ──────────────────────────────────────────── */
@keyframes slide-in {
from { transform: translateX(30px); opacity: 0; }
to { transform: translateX(0); opacity: 1; }
}
.animate-slide-in {
animation: slide-in 0.3s ease-out;
}
@keyframes slide-out {
from { transform: translateX(0); opacity: 1; }
to { transform: translateX(-30px); opacity: 0; }
}
.animate-slide-out {
animation: slide-out 0.3s ease-in;
}
/* ─── Pulse dot for version timeline ────────────────────────────── */
@keyframes pulse-dot {
0%, 100% { transform: scale(1); opacity: 1; }
50% { transform: scale(1.3); opacity: 0.7; }
}
.animate-pulse-dot {
animation: pulse-dot 2s ease-in-out infinite;
}
/* ─── Canvas toolbar ────────────────────────────────────────────── */
.canvas-toolbar {
transition: transform 0.2s ease-out, width 0.2s ease-out, height 0.2s ease-out;
}
/* ─── Version timeline ──────────────────────────────────────────── */
.version-timeline {
position: relative;
}
.version-timeline > div {
padding-bottom: 0.5rem;
}
}
/* Focus ring for accessibility */
@@ -777,6 +816,88 @@
background: oklch(0.55 0.22 25 / 0.06);
}
/* ─── File Drop Zone ─────────────────────────────────────────────── */
.file-drop-zone {
position: relative;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 120px;
padding: 24px;
border: 2px dashed oklch(0.75 0.05 155);
border-radius: 12px;
background: oklch(0.97 0.01 155 / 0.3);
cursor: pointer;
transition: all 0.2s ease;
}
.dark .file-drop-zone {
border-color: oklch(0.4 0.05 155);
background: oklch(0.2 0.02 155 / 0.3);
}
.file-drop-zone.drag-over {
border-color: oklch(0.55 0.17 155);
background: oklch(0.55 0.17 155 / 0.1);
transform: scale(1.01);
}
.dark .file-drop-zone.drag-over {
border-color: oklch(0.65 0.17 155);
background: oklch(0.65 0.17 155 / 0.1);
}
.file-drop-zone:hover {
border-color: oklch(0.55 0.17 155);
background: oklch(0.55 0.17 155 / 0.05);
}
/* ─── Import Progress Bar ────────────────────────────────────────── */
.import-progress {
animation: import-fade-in 0.3s ease-out;
}
@keyframes import-fade-in {
from { opacity: 0; transform: translateY(8px); }
to { opacity: 1; transform: translateY(0); }
}
/* ─── Report Preview Page ────────────────────────────────────────── */
.report-preview {
position: relative;
max-width: 800px;
margin: 0 auto;
padding: 40px 32px;
background: white;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
border-radius: 8px;
}
.dark .report-preview {
background: oklch(0.15 0.01 260);
box-shadow: 0 1px 3px rgba(0,0,0,0.3);
}
/* ─── Environmental Watermark ────────────────────────────────────── */
.watermark-eco {
position: fixed;
bottom: 50%;
right: -60px;
transform: rotate(-45deg);
font-size: 72px;
font-weight: 900;
color: oklch(0.55 0.17 155 / 0.04);
pointer-events: none;
z-index: -1;
user-select: none;
}
/* ─── Badge Type ─────────────────────────────────────────────────── */
.badge-type {
display: inline-block;
padding: 2px 10px;
border-radius: 12px;
font-size: 11px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
}
/* ─── Status Indicator Dot Pulse ─────────────────────────────────── */
@keyframes status-pulse {
0%, 100% { opacity: 1; transform: scale(1); }