/* =====================================================================
   Wochenkalender des Lernplans (Paket L1, a1014, 15.10.2026 —
   js/wochenkalender.js). Portal-Welt: nur --pp-Tokens, hell und dunkel
   über .pp-mode. Eine Minute ist ein Pixel (PX in der js-Datei) — eine
   Stunde 60 px, der Körper rollt (max-height) und springt beim ersten
   Bau auf „jetzt".

   KURSFARBEN f1–f8: die EINE Stelle der Kalenderpalette (js liest nur die
   Klasse wk-f<n>). Die Farbe steht als --wk-f (Fläche) und --wk-ft (Text
   darauf) an der Klasse; Termin, Punkt und Ganztags-Chip lesen sie.
   Dunkel (die Vorgabe des Portals) und hell (body[data-theme="light"],
   Muster prepp.css) halten JEDES Paar ≥ 4,5 : 1 — die Schrift der Termine
   ist 11 px (Abnahme dk, DK-01: f5 dunkel stand bei 4,24 : 1, sechs der
   acht Dunkel-Paare darunter). Wo eine helle Fläche bleibt, wird die
   Schrift dunkel (#1b1b1b); wo die Schrift weiß bleibt, wird die Fläche
   tiefer. test/verify-a1014-fix-dk.js rechnet alle 16 Paare nach.
   ===================================================================== */
.wk-f1 { --wk-f: #4c84e0; --wk-ft: #1b1b1b; }   /* 4,66 */
.wk-f2 { --wk-f: #2fa866; --wk-ft: #1b1b1b; }   /* 5,67 */
.wk-f3 { --wk-f: #e06a3a; --wk-ft: #1b1b1b; }   /* 5,16 */
.wk-f4 { --wk-f: #8e44ad; --wk-ft: #fff; }      /* 5,87 */
.wk-f5 { --wk-f: #c2255c; --wk-ft: #fff; }      /* 5,66 */
.wk-f6 { --wk-f: #1f8fa5; --wk-ft: #1b1b1b; }   /* 4,54 */
.wk-f7 { --wk-f: #c9a227; --wk-ft: #1b1b1b; }   /* 7,12 */
.wk-f8 { --wk-f: #5c5f66; --wk-ft: #fff; }      /* 6,40 */
body[data-theme="light"] .wk-f1 { --wk-f: #2f6fdb; --wk-ft: #fff; }      /* 4,75 */
body[data-theme="light"] .wk-f2 { --wk-f: #18804a; --wk-ft: #fff; }      /* 4,97 */
body[data-theme="light"] .wk-f3 { --wk-f: #c4410d; --wk-ft: #fff; }      /* 5,11 */
body[data-theme="light"] .wk-f4 { --wk-f: #8e44ad; --wk-ft: #fff; }      /* 5,87 */
body[data-theme="light"] .wk-f5 { --wk-f: #c2255c; --wk-ft: #fff; }      /* 5,66 */
body[data-theme="light"] .wk-f6 { --wk-f: #0b7285; --wk-ft: #fff; }      /* 5,59 */
body[data-theme="light"] .wk-f7 { --wk-f: #b08900; --wk-ft: #1b1b1b; }   /* 5,27 */
body[data-theme="light"] .wk-f8 { --wk-f: #5c5f66; --wk-ft: #fff; }      /* 6,40 */

.wk { display: flex; flex-direction: column; gap: 6px; margin-bottom: var(--pp-sp-4); min-width: 0; outline: none; }
.wk:focus-visible { box-shadow: 0 0 0 2px var(--pp-accent-line); border-radius: 8px; }
.wk-kopf { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; flex-wrap: wrap; }
.wk-kopf-titel { display: flex; flex-direction: column; min-width: 0; }
.wk-kopf-titel .pp-h3 { margin: 0; }
.wk-kopf-sub { font-size: var(--pp-fs-mini); color: var(--pp-text-3); }
.wk-kopf-akt { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.wk-nav { display: inline-flex; gap: 2px; }
.wk-nav .pp-btn { min-width: 36px; }
.wk-meldung { padding: 6px 10px; border: 1px dashed var(--pp-warn); border-radius: 6px; color: var(--pp-text-2); font-size: var(--pp-fs-klein); }

/* Filterfenster (Kurse und Reihen) */
.wk-ff { position: relative; }
.wk-ff-fenster { position: absolute; right: 0; top: calc(100% + 6px); z-index: 30; min-width: 260px; max-width: min(92vw, 420px); padding: 10px 12px; display: flex; flex-direction: column; gap: 8px; box-shadow: 0 8px 24px rgba(0, 0, 0, .18); }
/* display: flex schlägt das [hidden] des Browsers — gemessen in WebKit (das
   Fenster stand offen, seine Häkchen zählten als 12-px-Ziele). */
.wk-ff-fenster[hidden] { display: none; }
.wk-ff-kopf { display: flex; justify-content: space-between; align-items: center; gap: 8px; font-weight: 600; font-size: var(--pp-fs-klein); }
.wk-ff-kurs { display: flex; flex-direction: column; gap: 3px; font-size: var(--pp-fs-klein); }
.wk-ff-kurs > label { font-weight: 600; display: flex; align-items: center; gap: 6px; }
.wk-ff-reihen { display: flex; flex-direction: column; gap: 2px; padding-left: 22px; color: var(--pp-text-2); }
.wk-ff-reihen label { display: flex; align-items: center; gap: 6px; }

/* Kopfzeile der Tage, Ganztags-Zeile, Körper: dieselbe Spaltenteilung */
.wk-tage, .wk-ganztags, .wk-koerper, .wk-reste { display: grid; grid-template-columns: var(--wk-zeit, 54px) repeat(var(--wk-n, 7), minmax(0, 1fr)); gap: 0; min-width: 0; }   /* kl1019: Zeitspalte und Bündigkeit am Dateiende */
.wk-ecke { min-width: 0; }
.wk-tagkopf { display: flex; flex-direction: column; align-items: center; padding: 4px 2px; border-bottom: 1px solid var(--pp-line); font-size: var(--pp-fs-mini); color: var(--pp-text-3); min-width: 0; }
.wk-tagkopf .wk-dn { font-size: var(--pp-fs-text); color: var(--pp-text); line-height: 1.1; }
.wk-tagkopf.heute .wk-dn { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; border-radius: 50%; background: var(--pp-accent); color: var(--pp-accent-contrast, #fff); }
/* L5: Doppelklick auf den Tageskopf öffnet „Tag im Detail" — die Fläche
   sagt es (Zeiger), hebt sich aber nicht an wie eine Karte. */
.wk-tagkopf.pp-pick { cursor: pointer; }
.wk-tagkopf.pp-pick:hover, .wk-tagkopf.pp-pick:active { transform: none; box-shadow: none; background: var(--pp-surface-2); }
.wk-ff-nur { font-size: var(--pp-fs-mini); padding: 2px 0 6px; }
.wk-ff-nur a { color: var(--pp-accent-2); font-weight: 600; text-decoration: none; }
.wk-ff-nur a:hover { text-decoration: underline; }
.wk-ganztags { border-bottom: 1px solid var(--pp-line); }
.wk-ganz-l { font-size: var(--pp-fs-mini); color: var(--pp-text-3); padding: 3px 2px; }
.wk-ganz-zelle { display: flex; flex-direction: column; gap: 2px; padding: 2px; min-width: 0; border-left: 1px solid var(--pp-line); }
.wk-ganz { font-size: var(--pp-fs-mini); padding: 1px 6px; border-radius: 4px; background: var(--wk-f, var(--pp-accent)); color: var(--wk-ft, #fff); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wk-ganz.klausur { font-weight: 600; }

.wk-koerper { max-height: min(62vh, 720px); overflow-y: auto; overflow-x: hidden; border: 1px solid var(--pp-line); border-radius: 8px; background: var(--pp-surface); position: relative; overscroll-behavior: contain; }
.wk-achse { position: relative; }
.wk-achse-h { position: absolute; right: 4px; transform: translateY(-50%); font-size: var(--pp-fs-mini); color: var(--pp-text-3); }
.wk-spalte { position: relative; border-left: 1px solid var(--pp-line); min-width: 0; }
.wk-spalte.heute { background: var(--pp-accent-tint); }
.wk-spalte.wk-ziel { outline: 2px dashed var(--pp-accent-line); outline-offset: -2px; }
.wk-stunde { position: absolute; left: 0; right: 0; border-top: 1px solid var(--pp-line); opacity: .6; pointer-events: none; }
.wk-jetzt { position: absolute; left: 0; right: 0; border-top: 2px solid var(--wk-jetzt); pointer-events: none; z-index: 3; }   /* jl1020: Token am Dateiende */
.wk-jetzt::before { content: ""; position: absolute; left: -4px; top: -5px; width: 8px; height: 8px; border-radius: 50%; background: var(--wk-jetzt); }

/* Termine: feste farbige Blöcke (kein Ziehen) */
.wk-termin { position: absolute; left: 2px; right: 2px; z-index: 2; padding: 3px 6px; border-radius: 6px; background: var(--wk-f, var(--pp-accent)); color: var(--wk-ft, #fff); font-size: var(--pp-fs-mini); overflow: hidden; display: flex; flex-direction: column; min-width: 0; box-sizing: border-box; }
.wk-termin b { font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wk-termin span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wk-termin.pp-pick { cursor: pointer; }
.wk-termin.pp-pick:hover { filter: brightness(1.08); }
.wk-belegt { background: repeating-linear-gradient(135deg, var(--pp-surface-2), var(--pp-surface-2) 6px, var(--pp-line) 6px, var(--pp-line) 8px); color: var(--pp-text-3); }

/* Lernblöcke: größere Rahmen mit den To-dos als Liste */
.wk-block { position: absolute; left: 2px; right: 2px; z-index: 1; border: 1.5px dashed var(--pp-line-2); border-radius: 8px; background: var(--pp-surface); display: flex; flex-direction: column; min-width: 0; box-sizing: border-box; overflow: hidden; }
.wk-block.hand { border-style: solid; }
.wk-block.zieht { opacity: .85; z-index: 5; box-shadow: 0 6px 18px rgba(0, 0, 0, .2); }
.wk-block.wk-ziel { border-color: var(--pp-accent); background: var(--pp-accent-tint); }
.wk-block-kopf { display: flex; justify-content: space-between; gap: 6px; padding: 2px 6px; font-size: var(--pp-fs-mini); color: var(--pp-text-3); cursor: grab; touch-action: none; user-select: none; -webkit-user-select: none; border-bottom: 1px dashed var(--pp-line); }
.wk-block-kopf:active { cursor: grabbing; }
.wk-block-liste { display: flex; flex-direction: column; gap: 2px; padding: 3px 4px; overflow: hidden; min-height: 0; flex: 1 1 auto; }
.wk-block-kante { position: absolute; left: 0; right: 0; bottom: 0; height: 8px; cursor: ns-resize; touch-action: none; }
.wk-block-kante::after { content: ""; position: absolute; left: 50%; bottom: 2px; width: 24px; height: 3px; transform: translateX(-50%); border-radius: 2px; background: var(--pp-line-2); }
.wk-ueber { font-size: var(--pp-fs-mini); color: var(--pp-warn); padding: 1px 6px; }

/* Ein To-do im Block */
.wk-posten { display: grid; grid-template-columns: 24px minmax(0, 1fr) auto; gap: 5px; align-items: center; padding: 2px 4px; border-radius: 5px; background: var(--pp-surface); border: 1px solid var(--pp-line); font-size: var(--pp-fs-mini); min-width: 0; cursor: grab; }
.wk-posten.pp-pick { cursor: pointer; }
.wk-posten:hover { border-color: var(--pp-accent-line); }
.wk-posten.zieht { opacity: .5; }
.wk-posten.ok .wk-ptitel { color: var(--pp-text-3); text-decoration: line-through; }
/* DK-15: 24 × 24 ist die Mindestgröße eines Ziels am Laptop (WCAG 2.2,
   2.5.8); die Rasterspalte der Zeile hat dieselbe Breite. */
.wk-chk { width: 24px; height: 24px; border-radius: 4px; font-size: var(--pp-fs-mini); }
.wk-ptext { display: flex; flex-direction: column; min-width: 0; }
/* Der Titel darf zwei Zeilen lang sein — in sieben Spalten à ~140 px wäre
   eine Zeile „Skript Kapit…" (WebKit, 1440 px). */
.wk-ptitel { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; min-width: 0; overflow: hidden; overflow-wrap: anywhere; color: var(--pp-text); font-size: var(--pp-fs-klein); line-height: 1.25; }
.wk-ptitel .wk-punkt { margin-right: 4px; vertical-align: middle; }
.wk-psub { color: var(--pp-text-3); font-size: var(--pp-fs-mini); }
.wk-pmin { color: var(--pp-text-3); white-space: nowrap; }
.wk-punkt { display: inline-block; flex: none; width: 8px; height: 8px; border-radius: 50%; background: var(--wk-f, var(--pp-accent)); }
.pp-ctx-lbl .wk-punkt { margin-right: 4px; }

/* Ohne Lernblock: unter der Spalte */
.wk-reste { margin-top: 4px; }
.wk-rest-zelle { min-width: 0; padding: 0 2px; }
.wk-rest { display: flex; flex-direction: column; gap: 2px; border: 1px dashed var(--pp-warn); border-radius: 6px; padding: 3px 4px; }
.wk-rest-kopf { font-size: var(--pp-fs-mini); color: var(--pp-warn); }

/* Dialoge: dasselbe Formular wie im Plan (lp2-bearb) */
.wk-dialog .lp2-bearb { display: flex; flex-direction: column; gap: 8px; }
.wk-dialog .lp2-bearb label { display: flex; flex-direction: column; gap: 2px; font-size: var(--pp-fs-klein); }
.wk-dialog .lp2-bearb-knoepfe { display: flex; gap: 6px; flex-wrap: wrap; }

/* „Pläne je Kurs" eingeklappt unter dem Kalender (§ 1) */
.lp2-plaene-klapp > summary { cursor: pointer; margin: var(--pp-sp-4) 0 6px; }
.lp2-plaene-klapp .lp2-plaene .pp-inline-head h2 { display: none; }

/* Tagesansicht (Telefon): eine Spalte, breitere Zeilen */
.wk[data-wk-ansicht="tag"] .wk-tagkopf { flex-direction: row; gap: 8px; justify-content: flex-start; padding-left: 8px; }
.wk[data-wk-ansicht="tag"] .wk-posten { font-size: var(--pp-fs-klein); padding: 4px 6px; }
.wk[data-wk-ansicht="tag"] .wk-termin { font-size: var(--pp-fs-klein); }
.wk[data-wk-ansicht="tag"] .wk-koerper { max-height: min(70vh, 900px); }
@media (max-width: 640px) {
  .wk-kopf { flex-direction: column; align-items: stretch; }
  .wk-kopf-akt { justify-content: space-between; }
  /* L4: „Mit KI besprechen" passt am Telefon nicht neben Filter und ‹ Heute ›
     (gemessen 390 px: 372 px Bedarf) — als eigene, volle Zeile darunter
     statt eines zufälligen Umbruchs. */
  .wk-kopf-akt [data-wk-ki] { order: 3; flex: 1 1 100%; }
  .wk-ff-fenster { right: auto; left: 0; }
  .lp2-seite > .wk { order: 1; }
  .lp2-seite > .lp2-liste { order: 2; }
}
@media (pointer: coarse) {
  .wk-chk { width: 28px; height: 28px; }
  /* DK-03: die Spalte wächst mit dem Haken — sonst ragt er 10 px in den
     Titel und verdeckt Farbpunkt und Unterzeile („‹outine"). */
  .wk-posten { grid-template-columns: 28px minmax(0, 1fr) auto; }
  .wk[data-wk-ansicht="tag"] .wk-posten { min-height: 44px; }
  .wk-block-kante { height: 14px; }
  .wk-nav .pp-btn, .wk-ff > .pp-btn { min-height: 44px; min-width: 44px; }
  .wk-ff-fenster label { min-height: 44px; }
  .wk-ff-fenster input[type="checkbox"] { width: 22px; height: 22px; }
}

/* ---------- a1014-fix-lp (15.10.2026, docs/abnahme/a1014-fix-lp/BERICHT.md) ----------
   Angehängt am Dateiende: fix-dk hebt parallel die Kursfarben (oben) und
   den Haken — hier kollidiert nichts. */
/* LP-01/LP-12: die ruhige Zeile unter dem Kopf („Lernzeiten festlegen ›",
   Rechtsklick/langes Drücken). */
.wk-zeile { font-size: var(--pp-fs-mini); display: flex; flex-wrap: wrap; gap: 2px 0; align-items: center; }
.wk-lz-link { background: none; border: 0; padding: 0; margin: 0; font: inherit; color: var(--pp-accent-2); font-weight: 600; cursor: pointer; }
.wk-lz-link:hover { text-decoration: underline; }
@media (pointer: coarse) { .wk-lz-link { min-height: 44px; display: inline-flex; align-items: center; } }
/* LP-03: die Tagessumme im Tageskopf — geplant / Lernzeit; bei Überlast
   gewarnt. */
.wk-tk-sum { font-size: var(--pp-fs-mini);   /* DK-07: die Leiter beginnt bei 11 px */  color: var(--pp-text-3); line-height: 1.1; white-space: nowrap; }
.wk-tk-sum.ueber { color: var(--pp-warn); font-weight: 600; }
.wk[data-wk-ansicht="tag"] .wk-tk-sum { font-size: var(--pp-fs-mini); margin-left: auto; padding-right: 8px; }
/* LP-02: Was nicht in den Block passt, ist verdeckt und steht als „+ n
   weitere" (Klick: Tag im Detail). Der Blockkopf eines vollen Blocks warnt. */
.wk-posten.wk-verdeckt { display: none; }
.wk-mehr { flex: none; margin: 0 4px 9px; padding: 1px 4px; border: 0; border-radius: 4px; background: var(--pp-surface-2); color: var(--pp-warn); font: inherit; font-size: var(--pp-fs-mini); font-weight: 600; text-align: left; cursor: pointer; }
.wk-mehr:hover { background: var(--pp-accent-tint); }
.wk-block.voll .wk-block-stand { color: var(--pp-warn); font-weight: 600; }
@media (pointer: coarse) { .wk-mehr { min-height: 44px; } }   /* NP-02: Ziel am Finger 44 px */
/* LP-13: die Simulationstage als Ganztags-Marke (gestrichelt — ein Plan, kein Termin). */
.wk-ganz.sim { border: 1px dashed var(--wk-ft, #fff); font-weight: 600; }
/* LP-15: der Tageskopf ist am Finger ein 44-px-Ziel (Doppelklick: Tag im Detail). */
@media (pointer: coarse) { .wk-tagkopf.pp-pick { min-height: 44px; justify-content: center; } }

/* ---------- UI1015-U7 (15.10.2026, docs/UI1015-U7-2026-10-15.md) ----------
   To-dos zur Zeit: ein Block im Raster in der Kursfarbe (Fläche --wk-f,
   Schrift --wk-ft — dieselben geprüften Paare wie die Termine), Höhe = Dauer.
   Gezogen wird mit Zeigerereignissen; touch-action bleibt „auto", damit ein
   Wisch über den Block den Kalender rollt — erst nach dem langen Druck
   sperrt js/wochenkalender.js das Rollen (touchmove, passive: false). */
.wk-zp { position: absolute; z-index: 2; box-sizing: border-box; display: flex; align-items: flex-start; gap: 4px; padding: 2px 4px; min-width: 0; overflow: hidden;
  border-radius: 6px; background: var(--wk-f, var(--pp-accent)); color: var(--wk-ft, #fff); font-size: var(--pp-fs-mini);
  border: 1px solid rgba(0, 0, 0, .18); cursor: grab; user-select: none; -webkit-user-select: none; -webkit-touch-callout: none; }
.wk-zp:hover { filter: brightness(1.06); }
.wk-zp:focus-visible { outline: 2px solid var(--pp-accent); outline-offset: 1px; }
.wk-zp .wk-ptext { flex: 1 1 auto; }
.wk-zp .wk-ptitel { color: inherit; font-weight: 600; }
.wk-zp .wk-psub { color: inherit; opacity: .85; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wk-zp.flach { align-items: center; }
/* Unter ~50 px Höhe trägt der Block nur den Titel — die Zeitzeile stünde
   sonst angeschnitten darunter (WebKit, 45-min-Block: „14:1"). Die Zeit
   steht im title und in der Lage. */
.wk-zp.flach .wk-psub, .wk-zp.knapp .wk-psub { display: none; }
.wk-zp.flach .wk-ptitel { -webkit-line-clamp: 1; }
.wk-zp .wk-chk { flex: none; width: 18px; height: 18px; background: transparent; border-color: currentColor; color: inherit; }
.wk-zp.ok { opacity: .62; }
.wk-zp.ok .wk-ptitel { text-decoration: line-through; color: inherit; }
.wk-zp.scharf { box-shadow: 0 0 0 2px var(--pp-accent); }
/* Beim Ziehen bleibt der Block blass an seinem Platz und lässt den Zeiger
   durch (elementFromPoint findet darunter die Zielspalte). */
.wk-zp.zieht { opacity: .4; pointer-events: none; cursor: grabbing; }
.wk-zp-vorschau { position: absolute; left: 2px; right: 2px; z-index: 4; box-sizing: border-box; padding: 2px 6px; border: 2px dashed var(--pp-accent); border-radius: 6px;
  background: var(--pp-accent-tint); color: var(--pp-text); font-size: var(--pp-fs-mini); font-weight: 600; pointer-events: none; overflow: hidden; white-space: nowrap; }
@media (pointer: coarse) {
  .wk-zp .wk-chk { width: 24px; height: 24px; }
}

/* Dialog „Neues To-do" / „Neuer Inhalt": schmal, ohne inneren Rahmen,
   Abstände wie die übrigen Portal-Dialoge (16 px Rand, 12 px zwischen den
   Zeilen). Am Telefon stehen die Felder einer Zeile untereinander. */
.wk-neu { display: flex; flex-direction: column; gap: 12px; padding: 6px 16px 0; min-width: 0; }
.wk-neu label { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.wk-neu-l { font-size: var(--pp-fs-mini); color: var(--pp-text-2); font-weight: 600; }
/* Eine Höhe für alle Felder: date/time sind in WebKit von sich aus 4 px
   höher als Zahl und Auswahl (gemessen 37 / 33 px). */
.wk-neu .pp-input { width: 100%; min-width: 0; box-sizing: border-box; font-size: var(--pp-fs-klein); height: 36px; }
.wk-neu input.wk-neu-was { font-size: var(--pp-fs-h3); font-weight: 600; padding: 8px 10px; height: 44px; }
.wk-neu-zeile { display: grid; gap: 10px; min-width: 0; }
.wk-neu-zwei { grid-template-columns: minmax(0, 1fr) minmax(0, 1.4fr); }
.wk-neu-drei { grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr) minmax(0, .9fr); }
/* Dasselbe Erscheinungsbild der Auswahlfelder wie im Bearbeiten-Formular
   (DK-15: das native <select> war in WebKit niedriger als die Felder). */
.wk-neu select.pp-input {
  -webkit-appearance: none; appearance: none; padding-right: 28px;
  background-image: linear-gradient(45deg, transparent 50%, var(--pp-text-2) 50%),
                    linear-gradient(135deg, var(--pp-text-2) 50%, transparent 50%);
  background-position: calc(100% - 15px) 50%, calc(100% - 10px) 50%;
  background-size: 5px 5px, 5px 5px; background-repeat: no-repeat;
}
.wk-neu-meldung { margin: 0; font-size: var(--pp-fs-klein); color: var(--pp-err); }
.wk-neu-fuss { display: flex; justify-content: flex-end; gap: 8px; padding-top: 4px; }
@media (max-width: 480px) {
  .wk-neu-zwei, .wk-neu-drei { grid-template-columns: minmax(0, 1fr); }
  .wk-neu-fuss .pp-btn { flex: 1 1 0; }
}
@media (pointer: coarse) { .wk-neu .pp-input { height: 44px; } }

/* ---------- sim1016-R8 (16.10.2026, docs/abnahme/sim1016-R8/REPARATUR.md) ---------- */
/* A5-09: In der Flex-Zeile verliert ein Kind seine Rand-Leerzeichen — „›·"
   klebte zusammen. Der Trenner behält sie. */
.wk-zeile-trenn { white-space: pre; }
/* A5-05: „+ n weitere" liegt ÜBER der Größenkante des Lernblocks. Die Kante
   ist positioniert und malte sich samt Griffstrich darüber; ein Klick auf
   die Mitte zog die Größe statt „Tag im Detail" zu öffnen. Am Finger ist
   die Kante 14 px hoch — der Abstand darunter wächst mit. */
.wk-mehr { position: relative; z-index: 2; }
@media (pointer: coarse) { .wk-mehr { margin-bottom: 15px; } }

/* ---------- kl1019 (19.10.2026, docs/KL1019.md) — EIN Spaltenraster ----------
   Jonas: „‚ganztägig‘ [steht] über die Striche, und die oberen Striche der
   Tage sind nicht ganz aligned mit dem unteren Kalender." Gemessen in WebKit
   (1440/1920 px, hell/dunkel): Kopf, Ganztags-Zeile und Raster teilten zwar
   dieselbe grid-template-columns, aber nicht dieselbe BREITE. Das Raster
   (.wk-koerper) trägt einen 1-px-Rahmen und — mit klassischen Leisten
   (macOS „Immer", Windows, Linux) — eine 15 px breite Bildlaufleiste; beides
   zieht seine Spalten ein, der Kopf darüber hat beides nicht. Versatz:
   −1 px an der ersten Linie, +13,5 px an der letzten (mit Leiste), ±1 px
   ohne. Deshalb haben alle vier Zeilen jetzt dieselbe Kiste: einen 1-px-
   Rand links und rechts (bei Kopf/Ganztags/Reste unsichtbar) und eine
   reservierte Leistenrinne (scrollbar-gutter: stable). Die Rinne verlangt
   einen Scroll-Container — overflow: hidden, das bei Höhe auto nichts
   abschneidet; der Fokusring des Tageskopfs liegt innen (−2 px, prepp.css).
   Mit Overlay-Leisten ist die Rinne 0 px breit, dort bleibt nur der Rand.
   Browser ohne scrollbar-gutter (Safari < 18.2) behalten den alten Versatz. */
.wk { --wk-zeit: 54px; }
.wk-koerper { scrollbar-gutter: stable; }
.wk-tage, .wk-ganztags, .wk-reste {
  border-left: 1px solid transparent; border-right: 1px solid transparent;
  overflow: hidden; scrollbar-gutter: stable;
}
/* .wk-reste trägt Posten mit Knöpfen: ihr Fokusring (2 px Abstand) braucht
   oben und unten Luft, sobald die Zeile schneidet — die 4 px Außenabstand
   werden zum Innenabstand. */
.wk-reste { margin-top: 0; padding: 4px 0; }
/* „ganztägig" maß bei 11 px 47 px Text in einer 44-px-Spalte (2 px
   Polster) und lief 5 px über die erste Tageslinie. Die Zeitspalte ist
   jetzt 54 px breit; das Wort steht rechtsbündig wie die Stundenzahlen
   darunter (.wk-achse-h, 4 px vom Rand), auf der Höhe der ersten Marke
   (bei zwei Marken am Tag gehört es zur ersten, nicht in die Mitte). Das
   Ellipsenende ist nur Notbremse für eine breitere Ersatzschrift. */
.wk-ganz-l { text-align: right; padding: 4px 4px 3px 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* vn1019 (docs/VN1019.md): das Routine-To-do der Vor-/Nachbereitung im
   Raster — ein To-do-Block mit gestricheltem Rand (es gehört keinem Plan,
   sondern seiner Veranstaltung) und einer Kante zum Längen (Muster
   .wk-block-kante). Die Farbe bleibt die des Kurses. */
.wk-zp.wk-va { border: 1px dashed var(--wk-ft, #fff); }
.wk-zp-kante { position: absolute; left: 0; right: 0; bottom: 0; height: 8px; cursor: ns-resize; touch-action: none; }
.wk-zp-kante::after { content: ""; position: absolute; left: 50%; bottom: 2px; width: 20px; height: 3px; transform: translateX(-50%); border-radius: 2px; background: currentColor; opacity: .55; }
.wk-zp.flach .wk-zp-kante { height: 6px; }

/* ---------- jl1020 (20.10.2026, docs/JL1020.md) — die Jetzt-Linie ----------
   Jonas: „Im Kalender soll die aktuelle Zeit mit einem Strich angezeigt
   werden, ähnlich zu dem im Apple-Kalender." Drei Teile an derselben Höhe:
   .wk-jetzt (oben, kräftig, nur in der Spalte von heute, mit Punkt), die
   dünne gedämpfte Linie über alle Tagesspalten (.wk-jl::after, ab der
   Zeitspalte) und die Pille mit HH:MM in der Zeitspalte (rechtsbündig wie
   die Stundenzahlen: Text 4 px vor der ersten Tageslinie; 12 px hoch, Mitte
   auf der Minute). Die Stundenzahl unter der Pille trägt .wk-jl-weg (js:
   jlVerdeckt — darunter < 10 min, darüber < 11 min; gemessen, s. dort).

   --wk-jetzt ist Linie, Punkt und Pillenfläche zugleich, --wk-jetzt-text
   die Pillenschrift: Weiß auf dem Rot hält in beiden Themes ≥ 4,5 : 1
   (dunkel #e0242f 4,71, hell #d70015 5,38 — test/verify-jl1020.js rechnet
   nach). Das hellere Apple-Rot #ff453a läge bei 3,55 : 1 und fällt aus.

   Ebenen im Raster: Lernblock 1, Termin/To-do 2, Linie und Pille 3, die
   Vorschau beim Ziehen 4, der gezogene Block 5; Menüs und Dialoge hängen am
   <body>. Die Linie fängt keine Klicks ab (pointer-events: none). */
.wk { --wk-jetzt: #e0242f; --wk-jetzt-text: #fff; }
body[data-theme="light"] .wk { --wk-jetzt: #d70015; }
.wk-jl { position: absolute; left: 0; right: 0; height: 0; z-index: 3; pointer-events: none; }
.wk-jl::after { content: ""; position: absolute; left: var(--wk-zeit, 54px); right: 0; top: 0; border-top: 1px solid var(--wk-jetzt); opacity: .5; }
.wk-jl-pille { position: absolute; top: 0; right: calc(100% - var(--wk-zeit, 54px) + 1px); transform: translateY(-50%);
  box-sizing: border-box; height: 12px; padding: 0 3px; border-radius: 6px; display: flex; align-items: center;
  background: var(--wk-jetzt); color: var(--wk-jetzt-text); font-size: var(--pp-fs-mini); font-weight: 600; line-height: 1; white-space: nowrap; }
.wk-achse-h.wk-jl-weg { visibility: hidden; }
