Beteiligte in die Projekteinstellungen, TODOs aus Protokoll, Bewegung
Beteiligten-Zuordnung verlagert: p.assign ist jetzt ein Stammdatum und nur noch in den Projekteinstellungen editierbar (planCycleAssign()). Wochenbericht und Projektboard zeigen sie nur noch an, mit Verweis dorthin (springZuEinstellungen()). cycleAssign() ist damit entfallen. Neu "TODOs aus Protokoll": ein externes Besprechungsprotokoll als PDF wird per KI eingelesen und daraus in einem zweiten KI-Schritt Aufgaben abgeleitet. Eigener Bereich in der Aufgaben-/GANTT-Leiste, bewusst unabhaengig von den gespeicherten Protokollen - nichts davon wird abgelegt. Drei Schritte in einem Dialog mit fester Fusszeile; die Vorschlagsliste als kompakte, aufklappbare Zeilen, weil ein echter Import leicht 20 Vorschlaege liefert. Sichtbarkeit je Aufgabe im GANTT: neue Spalte plan_todos.show_in_gantt (Vorgabe 1, idempotente Migration) und eine Checkbox im Aufgaben-Dialog. Eine terminierte Aufgabe kann damit gezielt aus dem Terminplan herausgehalten werden, bleibt sonst aber eine vollwertige Aufgabe. plan-build-gantt.js und plan-drag.js pruefen dieselbe Bedingung, damit Zeilenzahl und Umsortierung nicht auseinanderlaufen. KI-Timeout dritte Stufe: ein abweichender, aber entfernter Endpunkt (Drittanbieter-Proxy) bekommt 2 Minuten statt der 45 Sekunden der echten Anbieter-API. Gemessen: die Punkte-Erkennung eines realen Protokolls brauchte dort 39 Sekunden, lag also stets knapp unter dem alten Limit und brach bei jeder Schwankung ab. Bewegung: Hover- und Klick-Rueckmeldung als Token-Satz in :root, angewandt auf die anklickbaren Zeilen, Schalter und Dialoge. Die Akzentleiste ist ein inset-Schatten statt eines positionierten Elements, damit Drag-and-Drop unberuehrt bleibt; prefers-reduced-motion war bisher gar nicht vorhanden und kippt jetzt einfach die Tokens. Plan Checker: optionaler Projektabgleich des Plankopfs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
6ba93b2a92
commit
93505e0e48
17 files changed
+1883
-334
No files matched your search
@@ -754,6 +754,53 @@ html[data-theme="dark"] { --seg-hover: rgba(255,255,255,.10); }
|
||||
animation: protokoll-import-spin .8s linear infinite; }
|
||||
@keyframes protokoll-import-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
|
||||
|
||||
/* "TODOs aus Protokoll" (js/plan/plan-protokoll-todos.js): die drei Segmente
|
||||
oben im Dialog zeigen den Fortschritt durch Hochladen → Punkte →
|
||||
Aufgaben — erledigte/aktuelle Schritte gefüllt, kommende leer. Entwurf
|
||||
"A — Schritt-Dialog" (Taste-Skill-Vergleich, Eriks Wahl). */
|
||||
.protokoll-todos-steps { display: flex; gap: 5px; margin: 12px 0 16px; }
|
||||
.protokoll-todos-steps .seg { flex: 1; height: 4px; border-radius: 2px; background: var(--line-soft); }
|
||||
.protokoll-todos-steps .seg.done { background: var(--accent); }
|
||||
|
||||
/* Schritt 3 ("Aufgaben bestätigen"), Entwurfsrichtung "B — Kompakte Zeilen"
|
||||
aus einem zweiten Taste-Skill-Vergleich (Eriks Wahl): eine Zeile je
|
||||
Vorschlag statt einer ausführlichen Karte — ein echter Testlauf lieferte
|
||||
bereits 19 Vorschläge aus einem Protokoll, als Karten wäre das nur noch
|
||||
Scrollen gewesen. Termin/Zuständig stehen als Abzeichen schon in der
|
||||
eingeklappten Zeile; Beschreibung und die volle Bearbeitung (Termin-Feld,
|
||||
Zuständigen-Auswahl) erscheinen erst nach Antippen der Zeile
|
||||
(.protokoll-todo-vorschlag.open). */
|
||||
.pt-sel-bar { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
|
||||
.pt-sel-count { font-size: 12.5px; color: var(--text-muted); }
|
||||
.pt-sel-count b { color: var(--accent); font-weight: 700; }
|
||||
.pt-sel-actions button { appearance: none; border: none; background: none; font: inherit; font-size: 11.5px;
|
||||
font-weight: 650; color: var(--accent); cursor: pointer; padding: 2px 3px; }
|
||||
.pt-sel-actions button:hover { text-decoration: underline; }
|
||||
|
||||
.protokoll-todo-vorschlag { border-bottom: 1px solid var(--line-soft); }
|
||||
.protokoll-todo-vorschlag:last-child { border-bottom: none; }
|
||||
.pt-row-main { display: flex; align-items: center; gap: 9px; padding: 8px 6px; cursor: pointer; }
|
||||
.protokoll-todo-vorschlag.off .pt-row-main { opacity: .45; }
|
||||
.pt-row-main .pt-vorschlag-check { flex-shrink: 0; accent-color: var(--accent); cursor: pointer; }
|
||||
.pt-row-main .pt-vorschlag-titel { flex: 1; min-width: 0; border: none; background: none; font: inherit;
|
||||
font-weight: 650; font-size: 12.8px; color: var(--text); padding: 2px 0;
|
||||
white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
||||
.pt-row-badges { display: flex; align-items: center; gap: 6px; flex-shrink: 0; }
|
||||
.pt-badge-date { font-size: 10.5px; font-weight: 650; padding: 2px 8px; border-radius: 999px;
|
||||
background: var(--accent-soft); color: var(--accent); white-space: nowrap; }
|
||||
/* Pille statt perfektem Kreis: ein Kürzel ist 2-4 Zeichen lang (initialsForName(),
|
||||
js/utils.js), ein starrer 18px-Kreis hätte "THK" o. Ä. abgeschnitten. */
|
||||
.pt-badge-person { min-width: 18px; height: 18px; padding: 0 5px; border-radius: 999px;
|
||||
background: var(--accent); color: var(--surface);
|
||||
font-size: 9px; font-weight: 700; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
|
||||
.pt-chevron { color: var(--text-subtle); font-size: 10.5px; width: 12px; text-align: center;
|
||||
transition: transform .15s; flex-shrink: 0; }
|
||||
.protokoll-todo-vorschlag.open .pt-chevron { transform: rotate(90deg); }
|
||||
.pt-row-detail { display: none; padding: 0 6px 12px; }
|
||||
.protokoll-todo-vorschlag.open .pt-row-detail { display: block; }
|
||||
.protokoll-todo-vorschlag-beschreibung { margin: 2px 0 8px 28px; }
|
||||
.protokoll-todo-vorschlag-felder { margin-left: 28px; display: flex; flex-direction: column; gap: 6px; }
|
||||
|
||||
.protokoll-detail-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 20px;
|
||||
padding-bottom: 16px; border-bottom: 1px solid var(--line-soft); margin-bottom: 16px; }
|
||||
.protokoll-detail-meta { color: var(--text-muted); font-size: 12.5px; }
|
||||
@@ -1009,3 +1056,62 @@ html[data-theme="dark"] { --seg-hover: rgba(255,255,255,.10); }
|
||||
.legend-swatch { width: 13px; height: 13px; border-radius: 4px; flex-shrink: 0; display: inline-block; }
|
||||
.legend-swatch.neu { background: var(--protokoll-neu-bg); border: 1.5px solid var(--protokoll-neu-border); }
|
||||
.legend-swatch.info { background: var(--status-info-bg); border: 1.5px solid var(--status-info); }
|
||||
|
||||
/* ============================================================
|
||||
BEWEGUNG - Stufe "Spürbar", Teil Projektbereich
|
||||
============================================================
|
||||
Ergänzung zum gleichnamigen Block am Ende von styles.css; die
|
||||
Tokens (--dur, --ease-out, --row-lift, --press) stehen dort in
|
||||
:root und gelten hier mit. Erfasst die Zeilenarten, die es nur
|
||||
im Projektbereich gibt.
|
||||
============================================================ */
|
||||
|
||||
/* Anklickbare Zeilen: anheben + einfahrende Akzentleiste, exakt wie
|
||||
die Projektliste. Auch hier als inset-Schatten statt ::before -
|
||||
die Aufgabenzeilen des GANTT sind ziehbar (plan-drag.js), ein
|
||||
Stapelkontext auf der Zeile wäre dort riskant. */
|
||||
.todo-depends-item,
|
||||
.pt-row-main,
|
||||
.plan-task-row {
|
||||
transition: background var(--dur) var(--ease-out),
|
||||
box-shadow var(--dur) var(--ease-out),
|
||||
transform var(--dur) var(--ease-out);
|
||||
}
|
||||
.todo-depends-item:hover,
|
||||
.pt-row-main:hover,
|
||||
.plan-task-row:hover {
|
||||
transform: translateY(var(--row-lift));
|
||||
box-shadow: inset 3px 0 0 0 var(--accent);
|
||||
}
|
||||
.todo-depends-item:active,
|
||||
.pt-row-main:active,
|
||||
.plan-task-row:active { transform: translateY(0); transition-duration: 60ms; }
|
||||
|
||||
/* Die Protokoll-Zeile ist der eine Sonderfall: sie trägt bereits einen
|
||||
eigenen linken Rand (border-left: 3px solid transparent, oben), den
|
||||
der aktive Punkt auf die Akzentfarbe setzt. Hier NICHT zusätzlich den
|
||||
inset-Schatten verwenden - beides zusammen ergäbe 6 px Akzent statt 3.
|
||||
Stattdessen wird genau dieser vorhandene Rand animiert, das Anheben
|
||||
bleibt identisch zu allen anderen Zeilen. */
|
||||
.protokoll-liste-zeile {
|
||||
transition: background var(--dur) var(--ease-out),
|
||||
border-left-color var(--dur) var(--ease-out),
|
||||
transform var(--dur) var(--ease-out);
|
||||
}
|
||||
.protokoll-liste-zeile:hover {
|
||||
transform: translateY(var(--row-lift));
|
||||
border-left-color: var(--accent);
|
||||
}
|
||||
.protokoll-liste-zeile:active { transform: translateY(0); transition-duration: 60ms; }
|
||||
|
||||
/* Bereichs-Reiter des Projektbereichs: Druckpunkt wie jeder andere
|
||||
Schalter. Die Unterstreichung des aktiven Reiters bleibt wie sie ist. */
|
||||
.plan-nav-item { transition: color var(--dur) var(--ease-out),
|
||||
border-color var(--dur) var(--ease-out),
|
||||
transform var(--dur) var(--ease-out); }
|
||||
.plan-nav-item:active { transform: scale(var(--press)); }
|
||||
|
||||
/* Aufklapp-Pfeil der Vorschlagszeile ("TODOs aus Protokoll"): dreht
|
||||
sich jetzt mit derselben Dauer wie der Pfeil der Projektliste
|
||||
(.board-chev), statt mit einem eigenen Wert. */
|
||||
.pt-chevron { transition: transform var(--dur) var(--ease-out); }
|
||||
Reference in new issue
Block a user