diff --git a/public/app.html b/public/app.html
index fc55e9e..c52ecfd 100644
--- a/public/app.html
+++ b/public/app.html
@@ -622,6 +622,7 @@ main {
.ql-del { position: absolute; top: 3px; right: 4px; font-size: 10px; color: var(--text-subtle); display: none; border: none; background: none; cursor: pointer; line-height: 1; }
.ql-item:hover .ql-del { display: block; }
.ql-del:hover { color: var(--red); }
+.ql-item--soon { opacity: .4; cursor: not-allowed; pointer-events: none; }
/* ── EMPTY STATE ─────────────────────────────────────────── */
@@ -1418,8 +1419,12 @@ footer {
@@ -2978,8 +2983,22 @@ async function delTeacherGrade(id){
async function loadStudentMaterials(){
const mats=await api('GET','teacher/materials/class/info1');
const el=document.getElementById('list-student-materials');
- if(!mats||mats.error||!mats.length){el.innerHTML='Keine Materialien vorhanden
';return;}
- el.innerHTML=mats.map(m=>`
+ const staticItems=`
+
📕
+
+
Stundenplan ab 02.03.26
+
PDF · Allgemein
+
+
↓ Laden
+
+
📕
+
+
Klausurenplan ab 06.03.26
+
PDF · Allgemein
+
+
↓ Laden
+
`;
+ const dynItems=(!mats||mats.error||!mats.length)?'':mats.map(m=>`
${fileIcon(m.mime_type)}
${esc(m.title)}
@@ -2987,6 +3006,7 @@ async function loadStudentMaterials(){
`).join('');
+ el.innerHTML=staticItems+dynItems;
}
async function loadStudentAnnouncements(){
diff --git a/public/downloads/Klausurenplan_ab_06_03_26.pdf b/public/downloads/Klausurenplan_ab_06_03_26.pdf
new file mode 100644
index 0000000..97408f2
Binary files /dev/null and b/public/downloads/Klausurenplan_ab_06_03_26.pdf differ
diff --git a/public/downloads/Stundenplan_ab_02_03_26.pdf b/public/downloads/Stundenplan_ab_02_03_26.pdf
new file mode 100644
index 0000000..7910e7f
Binary files /dev/null and b/public/downloads/Stundenplan_ab_02_03_26.pdf differ
diff --git a/public/favicon.svg b/public/favicon.svg
index 05d501a..252fdb6 100644
--- a/public/favicon.svg
+++ b/public/favicon.svg
@@ -1,7 +1,7 @@
-