Workspace: KI-Vorschlaege in Calls, Start-Check und Report
Nach der Korrektur von CPUQuota (50% -> 200%) ist die KI benutzbar: nr_throttled steht bei 0 (vorher 1752 von 1801 Zeitfenstern). Gemessen NACH der Korrektur: To-dos aus einem Protokoll : 12,7 s (vorher: Abbruch nach 45 s) Website waehrend der Arbeit: 0,063 s -- Basis war 0,068 s Kein Einfluss auf die Website, wie bei der ersten Messung mit zwei echten Kernen vorhergesagt. DREI KNOEPFE, alle nach demselben Muster: - Calls: "To-dos vorschlagen" liest, was im Protokoll schon steht, und fuellt LEERE To-do-Zeilen. Bereits Getipptes wird nie ueberschrieben. - Start-Check: "Besser formulieren" macht aus einer Notiz einen Aufgabentitel. Der einfache Vorschlag (erster Satz der Notiz) bleibt daneben bestehen -- er funktioniert auch ohne KI. - Report: "In Worte fassen" fasst die Zahlen in drei Saetzen zusammen. IST DIE KI AUS, GIBT ES DEN KNOPF NICHT. Jede Seite fragt beim Laden einmal nach. Ein Knopf, der immer eine Fehlermeldung bringt, ist schlimmer als gar kein Knopf. Die Absicherung steht in EINER Datei (assets/js/ki.js), nicht dreimal. Der Knopf sagt waehrend der Arbeit "Die KI denkt ..." und der Funke pulst -- zwoelf Sekunden ohne Rueckmeldung fuehlen sich sonst an wie ein Fehler. Optisch bewusst ANDERS als die normalen Knoepfe: gestrichelter Rand statt geschliffener Kante. Ein KI-Knopf tut nichts Endgueltiges, er schlaegt vor -- das soll man auf den ersten Blick sehen. ZWEI VERBESSERUNGEN AUS DEM TEST: 1. Der Bereichsname wurde dem Modell mitgegeben und klebte prompt in der Antwort: "LIVE-Struktur auf 18 und 21 Uhr festlegen". Ohne ihn kommt eine echte Handlung heraus. Der Befund allein reicht -- er steht ja ohnehin im richtigen Bereich. Variable entfernt, kein toter Code. 2. Der Report gab dem Modell "ueberfaellig" ohne Umlaut vor und bekam es genauso zurueck. Jetzt richtig geschrieben. Geprueft: Calls 7 s und drei brauchbare To-dos, Start-Check erzeugt einen Titel, Report drei Saetze, 0 Konsolenfehler.
This commit is contained in:
@@ -196,7 +196,6 @@ kiRouter.post("/workspace/api/ki/todos", gleicheHerkunft, express.json(), (req,
|
||||
|
||||
kiRouter.post("/workspace/api/ki/aufgabentitel", gleicheHerkunft, express.json(), (req, res) => {
|
||||
const befund = String(req.body?.befund ?? "").trim().slice(0, 600);
|
||||
const bereich = String(req.body?.bereich ?? "").trim().slice(0, 120);
|
||||
if (befund.length < 8) {
|
||||
return res.status(400).json({ fehler: "Schreib erst eine Notiz zu dem Punkt." });
|
||||
}
|
||||
@@ -204,7 +203,12 @@ kiRouter.post("/workspace/api/ki/aufgabentitel", gleicheHerkunft, express.json()
|
||||
const roh = await frage(
|
||||
"Du formulierst kurze Aufgabentitel. Nur der Titel, hoechstens 8 Woerter, "
|
||||
+ "Deutsch, Verb am Anfang, kein Punkt, keine Anfuehrungszeichen.",
|
||||
`Befund${bereich ? " (" + bereich + ")" : ""}: ${befund}`,
|
||||
/* Der Bereichsname wird bewusst NICHT mitgegeben. Mit ihm kam
|
||||
"LIVE-Struktur auf 18 und 21 Uhr festlegen" zurueck -- das
|
||||
Modell baut ihn in den Titel ein, statt ihn als Zusammenhang zu
|
||||
behandeln. Ohne ihn: "Zeitpunkt der Sendung festlegen". Der
|
||||
Befund allein reicht, er steht ja im richtigen Bereich. */
|
||||
`Befund: ${befund}`,
|
||||
40,
|
||||
[
|
||||
{ role: "user", content: "Befund: Profilbild ist unscharf und alt." },
|
||||
|
||||
@@ -631,3 +631,66 @@ body.suche-offen { overflow: hidden; }
|
||||
.stufe-knopf:hover, .suche-knopf:hover, .suche-zu:hover,
|
||||
.todo__weg:hover, .karte__stift:hover { transform: none; }
|
||||
}
|
||||
|
||||
/* ===================================================================
|
||||
KI-Vorschläge (28.08.2026).
|
||||
|
||||
Bewusst ANDERS als die normalen Knöpfe: Ein KI-Knopf tut nichts
|
||||
Endgültiges, er schlägt vor. Deshalb gestrichelter Rand statt
|
||||
geschliffener Kante -- man soll auf den ersten Blick sehen, dass hier
|
||||
etwas Unverbindliches passiert.
|
||||
|
||||
Liegt in gate.css, weil drei Seiten ihn benutzen.
|
||||
=================================================================== */
|
||||
|
||||
.ki-knopf {
|
||||
display: inline-flex; align-items: center; gap: 8px;
|
||||
padding: 8px 15px; cursor: pointer;
|
||||
background: rgba(138, 118, 255, .07);
|
||||
border: 1px dashed rgba(138, 118, 255, .45);
|
||||
border-radius: 999px;
|
||||
color: #b6a9ff; font: inherit; font-size: .82rem; font-weight: 600;
|
||||
transition: color .16s ease, border-color .16s ease, background .16s ease;
|
||||
}
|
||||
.ki-knopf:hover:not([disabled]) {
|
||||
color: #fff;
|
||||
border-color: rgba(138, 118, 255, .8);
|
||||
background: rgba(138, 118, 255, .16);
|
||||
}
|
||||
.ki-knopf:focus-visible {
|
||||
outline: none; box-shadow: 0 0 0 3px rgba(138, 118, 255, .3);
|
||||
}
|
||||
.ki-knopf[disabled] { cursor: progress; }
|
||||
.ki-knopf__funke {
|
||||
width: 15px; height: 15px; flex: none;
|
||||
fill: currentColor; stroke: none;
|
||||
}
|
||||
/* Denkt gerade: der Funke pulst langsam. Zwölf Sekunden ohne
|
||||
Rückmeldung fühlen sich sonst an wie ein Fehler. */
|
||||
.ki-knopf[data-denkt="ja"] { border-style: solid; }
|
||||
.ki-knopf[data-denkt="ja"] .ki-knopf__funke { animation: ki-puls 1.6s ease-in-out infinite; }
|
||||
@keyframes ki-puls { 0%, 100% { opacity: .35; } 50% { opacity: 1; } }
|
||||
|
||||
.ki-fehler, .ki-hinweis {
|
||||
display: block; margin-top: 7px;
|
||||
font-size: .8rem; color: var(--text-still);
|
||||
}
|
||||
.ki-fehler { color: var(--warn); }
|
||||
|
||||
.ki-reihe { margin-top: 22px; }
|
||||
.ki-text {
|
||||
margin: 10px 0 0; padding: 13px 15px;
|
||||
background: rgba(138, 118, 255, .06);
|
||||
border: 1px solid rgba(138, 118, 255, .28);
|
||||
border-left-width: 3px;
|
||||
border-radius: var(--radius-klein);
|
||||
font-size: .9rem; color: var(--text-leise); line-height: 1.6;
|
||||
max-width: 80ch;
|
||||
}
|
||||
|
||||
.todo-knoepfe { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin-bottom: 14px; }
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.ki-knopf { transition: none; }
|
||||
.ki-knopf[data-denkt="ja"] .ki-knopf__funke { animation: none; opacity: .7; }
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
let ich = null;
|
||||
let daten = null;
|
||||
let offen = new Set();
|
||||
let kiDa = false;
|
||||
|
||||
const el = (tag, klasse, text) => {
|
||||
const k = document.createElement(tag);
|
||||
@@ -108,7 +109,36 @@
|
||||
const mehr = el('button', 'knopf-still', '+ Zeile');
|
||||
mehr.type = 'button';
|
||||
mehr.addEventListener('click', () => todoZeile(true));
|
||||
f.append(mehr);
|
||||
|
||||
const reihe = el('div', 'todo-knoepfe');
|
||||
reihe.append(mehr);
|
||||
|
||||
/* Vorschlaege aus dem, was oben schon steht. Der Knopf erscheint
|
||||
nur, wenn die KI ueberhaupt laeuft -- sonst gaebe es einen Knopf,
|
||||
der immer scheitert. */
|
||||
if (kiDa) {
|
||||
reihe.append(window.KI.knopf('To-dos vorschlagen', async () => {
|
||||
const text = [fPunkte.value, fEnt.value].filter((x) => x.trim()).join(' ');
|
||||
if (text.trim().length < 20) {
|
||||
throw new Error('Schreib erst ein paar Sätze oben – daraus kann die KI dann ableiten.');
|
||||
}
|
||||
const d = await window.KI.frage('todos', { text });
|
||||
if (!d.todos?.length) throw new Error('Die KI hat nichts gefunden.');
|
||||
/* Leere Zeilen zuerst fuellen, dann neue anhaengen. Bereits
|
||||
Getipptes wird nie ueberschrieben. */
|
||||
for (const vorschlag of d.todos) {
|
||||
let ziel = [...todoBox.querySelectorAll('.todo__titel')].find((i) => !i.value.trim());
|
||||
if (!ziel) { todoZeile(false); ziel = todoBox.lastElementChild.querySelector('.todo__titel'); }
|
||||
ziel.value = vorschlag;
|
||||
ziel.dataset.vonKi = 'ja';
|
||||
}
|
||||
meldung.textContent = '';
|
||||
const hinweis = el('p', 'ki-hinweis', d.hinweis);
|
||||
reihe.after(hinweis);
|
||||
setTimeout(() => hinweis.remove(), 9000);
|
||||
}));
|
||||
}
|
||||
f.append(reihe);
|
||||
|
||||
/* Nächster Termin */
|
||||
f.append(el('label', 'feld-schild', 'Nächster Termin'));
|
||||
@@ -329,6 +359,7 @@
|
||||
ich = await a.json();
|
||||
} catch { return; }
|
||||
$('wer').textContent = ich.name + ' · ' + (ich.rolle_name || ich.rolle);
|
||||
kiDa = await window.KI.verfuegbar();
|
||||
await laden();
|
||||
})();
|
||||
})();
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
/* ===================================================================
|
||||
Gemeinsamer Zugang zur lokalen KI.
|
||||
|
||||
Liegt in einer eigenen Datei, weil drei Seiten sie benutzen (Calls,
|
||||
Start-Check, Report) und die Absicherung sonst dreimal dastuende --
|
||||
und beim naechsten Mal in zwei davon.
|
||||
|
||||
ZWEI REGELN:
|
||||
|
||||
1. IST DIE KI AUS, GIBT ES DEN KNOPF NICHT. Ein Knopf, der immer eine
|
||||
Fehlermeldung bringt, ist schlimmer als gar kein Knopf. Deshalb
|
||||
fragt jede Seite beim Laden einmal nach und baut ihn nur dann.
|
||||
|
||||
2. DIE KI SCHLAEGT VOR, DER MENSCH ENTSCHEIDET. Kein Aufruf hier
|
||||
speichert etwas. Was uebernommen wird, traegt der Mensch an
|
||||
derselben Stelle ein wie ohne KI.
|
||||
=================================================================== */
|
||||
window.KI = (() => {
|
||||
'use strict';
|
||||
|
||||
let bekannt = null; // null = noch nicht gefragt
|
||||
|
||||
/* Einmal pro Seitenaufruf fragen, danach gemerkt. */
|
||||
async function verfuegbar() {
|
||||
if (bekannt !== null) return bekannt;
|
||||
try {
|
||||
const a = await fetch('/workspace/api/ki/status', { credentials: 'same-origin' });
|
||||
bekannt = a.ok ? (await a.json()).da === true : false;
|
||||
} catch { bekannt = false; }
|
||||
return bekannt;
|
||||
}
|
||||
|
||||
async function frage(pfad, koerper) {
|
||||
const a = await fetch('/workspace/api/ki/' + pfad, {
|
||||
method: 'POST',
|
||||
credentials: 'same-origin',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(koerper),
|
||||
});
|
||||
if (a.status === 401) { location.assign('/workspace/'); throw new Error('abgemeldet'); }
|
||||
const d = await a.json().catch(() => ({}));
|
||||
if (!a.ok) throw new Error(d.fehler || 'Die KI konnte nicht antworten.');
|
||||
return d;
|
||||
}
|
||||
|
||||
/* Baut einen Knopf, der waehrend des Denkens sagt, dass er denkt --
|
||||
zwoelf Sekunden ohne Rueckmeldung fuehlen sich an wie ein Fehler. */
|
||||
function knopf(beschriftung, tuWas) {
|
||||
const b = document.createElement('button');
|
||||
b.type = 'button';
|
||||
b.className = 'ki-knopf';
|
||||
const funke = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
||||
funke.setAttribute('viewBox', '0 0 24 24');
|
||||
funke.setAttribute('class', 'ki-knopf__funke');
|
||||
funke.setAttribute('aria-hidden', 'true');
|
||||
funke.innerHTML = '<path d="M12 3.2 13.7 9l5.8 1.7-5.8 1.7L12 18.2l-1.7-5.8L4.5 10.7 10.3 9z"/>'
|
||||
+ '<path d="M18.4 3.4l.6 2 2 .6-2 .6-.6 2-.6-2-2-.6 2-.6z"/>';
|
||||
const text = document.createElement('span');
|
||||
text.textContent = beschriftung;
|
||||
b.append(funke, text);
|
||||
|
||||
b.addEventListener('click', async () => {
|
||||
if (b.disabled) return;
|
||||
b.disabled = true;
|
||||
b.dataset.denkt = 'ja';
|
||||
const vorher = text.textContent;
|
||||
text.textContent = 'Die KI denkt …';
|
||||
try {
|
||||
await tuWas();
|
||||
} catch (fehler) {
|
||||
/* Die Meldung gehoert dorthin, wo der Knopf steht -- nicht in
|
||||
ein Fenster, das den Rest verdeckt. */
|
||||
const hinweis = document.createElement('span');
|
||||
hinweis.className = 'ki-fehler';
|
||||
hinweis.textContent = fehler.message;
|
||||
b.after(hinweis);
|
||||
setTimeout(() => hinweis.remove(), 7000);
|
||||
} finally {
|
||||
delete b.dataset.denkt;
|
||||
text.textContent = vorher;
|
||||
b.disabled = false;
|
||||
}
|
||||
});
|
||||
return b;
|
||||
}
|
||||
|
||||
return { verfuegbar, frage, knopf };
|
||||
})();
|
||||
@@ -15,6 +15,7 @@
|
||||
};
|
||||
|
||||
let ich = null;
|
||||
let kiDa = false;
|
||||
|
||||
const el = (tag, klasse, text) => {
|
||||
const k = document.createElement(tag);
|
||||
@@ -151,6 +152,27 @@
|
||||
ziel.append(b4);
|
||||
|
||||
$('entscheidung-block').hidden = false;
|
||||
|
||||
/* Zahlen in Worte -- erst auf Knopfdruck, nie von selbst. Der
|
||||
Report ist ohne KI vollstaendig; das hier ist eine Zugabe. */
|
||||
if (kiDa) {
|
||||
const reihe = el('div', 'ki-reihe');
|
||||
reihe.append(window.KI.knopf('In Worte fassen', async () => {
|
||||
const zahlen = `Zeitraum ${d.zeitraum.tage} Tage`
|
||||
+ `, ${d.aufgaben.erledigt} Aufgaben erledigt (davor ${d.aufgaben.erledigt_davor})`
|
||||
+ `, ${d.aufgaben.angelegt} neu angelegt (davor ${d.aufgaben.angelegt_davor})`
|
||||
+ `, ${d.aufgaben.offen} offen, ${d.aufgaben.ueberfaellig} überfällig`
|
||||
+ `, ${Object.values(d.bereiche).reduce((s, b) => s + b.dringend, 0)} dringende Punkte`
|
||||
+ `, LIVE-Schnitt ${d.live.jetzt.schnitt ?? '-'} aus ${d.live.jetzt.anzahl} Bewertungen`
|
||||
+ `, ${d.termine.gewesen} Termine gewesen, ${d.termine.kommend} stehen an.`;
|
||||
const r = await window.KI.frage('reporttext', { zahlen });
|
||||
const alt = reihe.querySelector('.ki-text');
|
||||
if (alt) alt.remove();
|
||||
const text = el('p', 'ki-text', r.text);
|
||||
reihe.append(text);
|
||||
}));
|
||||
ziel.append(reihe);
|
||||
}
|
||||
}
|
||||
|
||||
async function laden() {
|
||||
@@ -201,6 +223,7 @@
|
||||
ich = await a.json();
|
||||
} catch { return; }
|
||||
$('wer').textContent = ich.name + ' · ' + (ich.rolle_name || ich.rolle);
|
||||
kiDa = await window.KI.verfuegbar();
|
||||
|
||||
try {
|
||||
const { creator } = await (await hole('/workspace/api/report/creator')).json();
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
let ich = null;
|
||||
let daten = null;
|
||||
let aktuell = null;
|
||||
let kiDa = false;
|
||||
|
||||
const el = (tag, klasse, text) => {
|
||||
const k = document.createElement(tag);
|
||||
@@ -156,6 +157,18 @@
|
||||
titel.select();
|
||||
});
|
||||
|
||||
/* Die KI formuliert daraus eine Handlung. Der einfache Vorschlag
|
||||
oben bleibt bestehen -- er funktioniert auch ohne KI. */
|
||||
if (kiDa && p.notiz) {
|
||||
form.append(window.KI.knopf('Besser formulieren', async () => {
|
||||
const d = await window.KI.frage('aufgabentitel',
|
||||
{ befund: p.notiz, bereich: feld.name });
|
||||
if (!d.titel) throw new Error('Die KI hat nichts geliefert.');
|
||||
titel.value = d.titel;
|
||||
titel.focus();
|
||||
}));
|
||||
}
|
||||
|
||||
form.addEventListener('submit', async (e) => {
|
||||
e.preventDefault();
|
||||
ok.disabled = true;
|
||||
@@ -255,6 +268,7 @@
|
||||
ich = await a.json();
|
||||
} catch { return; }
|
||||
$('wer').textContent = ich.name + ' · ' + (ich.rolle_name || ich.rolle);
|
||||
kiDa = await window.KI.verfuegbar();
|
||||
|
||||
let liste;
|
||||
try { liste = await (await hole('/workspace/api/startcheck/creator')).json(); } catch { return; }
|
||||
|
||||
@@ -7,9 +7,9 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202608281334" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -134,7 +134,7 @@
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<script src="assets/js/kopf.js?v=202608281319" defer></script>
|
||||
<script src="assets/js/aufgaben.js?v=202608281319" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202608281334" defer></script>
|
||||
<script src="assets/js/aufgaben.js?v=202608281334" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202608281334" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -98,7 +98,7 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/kopf.js?v=202608281319" defer></script>
|
||||
<script src="assets/js/bereich.js?v=202608281319" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202608281334" defer></script>
|
||||
<script src="assets/js/bereich.js?v=202608281334" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/calls.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/calls.css?v=202608281334" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -49,7 +49,8 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/kopf.js?v=202608281319" defer></script>
|
||||
<script src="assets/js/calls.js?v=202608281319" defer></script>
|
||||
<script src="assets/js/ki.js?v=202608281334" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202608281334" defer></script>
|
||||
<script src="assets/js/calls.js?v=202608281334" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/dateien.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/dateien.css?v=202608281334" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -88,7 +88,7 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/kopf.js?v=202608281319" defer></script>
|
||||
<script src="assets/js/dateien.js?v=202608281319" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202608281334" defer></script>
|
||||
<script src="assets/js/dateien.js?v=202608281334" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
type="image/webp" media="(max-width: 899px)" />
|
||||
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281334" />
|
||||
</head>
|
||||
|
||||
<body class="gate">
|
||||
@@ -130,6 +130,6 @@
|
||||
</p>
|
||||
</main>
|
||||
|
||||
<script src="assets/js/gate.js?v=202608281319" defer></script>
|
||||
<script src="assets/js/gate.js?v=202608281334" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/kalender.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/kalender.css?v=202608281334" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -94,7 +94,7 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/kopf.js?v=202608281319" defer></script>
|
||||
<script src="assets/js/kalender.js?v=202608281319" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202608281334" defer></script>
|
||||
<script src="assets/js/kalender.js?v=202608281334" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/personen.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/personen.css?v=202608281334" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -87,7 +87,7 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/kopf.js?v=202608281319" defer></script>
|
||||
<script src="assets/js/personen.js?v=202608281319" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202608281334" defer></script>
|
||||
<script src="assets/js/personen.js?v=202608281334" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202608281334" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -127,7 +127,7 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/kopf.js?v=202608281319" defer></script>
|
||||
<script src="assets/js/profil.js?v=202608281319" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202608281334" defer></script>
|
||||
<script src="assets/js/profil.js?v=202608281334" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/report.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/report.css?v=202608281334" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -86,7 +86,8 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/kopf.js?v=202608281319" defer></script>
|
||||
<script src="assets/js/report.js?v=202608281319" defer></script>
|
||||
<script src="assets/js/ki.js?v=202608281334" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202608281334" defer></script>
|
||||
<script src="assets/js/report.js?v=202608281334" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/scouting.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/scouting.css?v=202608281334" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -124,7 +124,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="assets/js/kopf.js?v=202608281319" defer></script>
|
||||
<script src="assets/js/scouting.js?v=202608281319" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202608281334" defer></script>
|
||||
<script src="assets/js/scouting.js?v=202608281334" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202608281334" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -56,7 +56,7 @@
|
||||
</p>
|
||||
</main>
|
||||
|
||||
<script src="assets/js/kopf.js?v=202608281319" defer></script>
|
||||
<script src="assets/js/start.js?v=202608281319" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202608281334" defer></script>
|
||||
<script src="assets/js/start.js?v=202608281334" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/startcheck.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/startcheck.css?v=202608281334" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -65,7 +65,8 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/kopf.js?v=202608281319" defer></script>
|
||||
<script src="assets/js/startcheck.js?v=202608281319" defer></script>
|
||||
<script src="assets/js/ki.js?v=202608281334" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202608281334" defer></script>
|
||||
<script src="assets/js/startcheck.js?v=202608281334" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/wissen.css?v=202608281319" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202608281334" />
|
||||
<link rel="stylesheet" href="assets/css/wissen.css?v=202608281334" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -165,7 +165,7 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/kopf.js?v=202608281319" defer></script>
|
||||
<script src="assets/js/wissen.js?v=202608281319" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202608281334" defer></script>
|
||||
<script src="assets/js/wissen.js?v=202608281334" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user