diff --git a/blickfang-ueber-handy.png b/blickfang-ueber-handy.png
index b419b546..8ac5f4de 100644
Binary files a/blickfang-ueber-handy.png and b/blickfang-ueber-handy.png differ
diff --git a/pruef-verwaltung-schmuck.mjs b/pruef-verwaltung-schmuck.mjs
index 50950fb1..d9eabcc5 100644
--- a/pruef-verwaltung-schmuck.mjs
+++ b/pruef-verwaltung-schmuck.mjs
@@ -81,11 +81,31 @@ async function bereichAufbauen(seite, bereich) {
if (!probe) {
probe = document.createElement("div");
probe.id = "vw-probe";
+ /* DIE ECHTE KACHELSTRUKTUR der Verwaltung, so wie das Skript sie
+ erzeugt: .vw-karte mit Nummer, Mitte und rechter Spalte.
+
+ Frueher stand hier eine selbst gebaute .wd-karte. Die kommt im
+ Verwaltungsbereich aber fast nicht vor -- der Test hat also
+ eine Attrappe geprueft und war gruen, waehrend auf den echten
+ Kacheln nichts davon ankam. Genau deshalb war der Unterschied
+ nirgends zu sehen. */
probe.innerHTML =
- '
' +
- '
Vanessa Geske
' +
- '
vanessa@example.com
' +
- '
Zwei Projekte, eines davon laufend.
';
+ '' +
+ '';
bereichEl.appendChild(probe);
}
}, bereich);
@@ -187,13 +207,13 @@ srv.listen(4404, async () => {
for (const bereich of BEREICHE) {
await bereichAufbauen(seite, bereich);
- const aufGlas = await unruheAn(seite, "#vw-probe .wd-karte");
+ const aufGlas = await unruheAn(seite, "#vw-probe .vw-karte");
await seite.evaluate(() => {
document.querySelector(".vw-buehne").style.visibility = "hidden";
});
await seite.waitForTimeout(350);
await bereichAufbauen(seite, bereich);
- const ohneBuehne = await unruheAn(seite, "#vw-probe .wd-karte");
+ const ohneBuehne = await unruheAn(seite, "#vw-probe .vw-karte");
await seite.evaluate(() => {
document.querySelector(".vw-buehne").style.visibility = "";
});
@@ -211,7 +231,7 @@ srv.listen(4404, async () => {
dem Stilblatt: Die Kachel ist halbdurchsichtig, ihr rechnerischer
Wert sagt nichts darueber, was am Ende darunter liegt. */
const stelle = await seite.evaluate(() => {
- const k = document.querySelector("#vw-probe .wd-karte");
+ const k = document.querySelector("#vw-probe .vw-karte");
const r = k.getBoundingClientRect();
return { x: Math.round(r.x + r.width * 0.72), y: Math.round(r.y + r.height * 0.62) };
});
@@ -240,7 +260,7 @@ srv.listen(4404, async () => {
console.log("\n===== 3b. FOLGT DAS LICHT DER MAUS? =====");
await bereichAufbauen(seite, "kunden");
- const karte = seite.locator("#vw-probe .wd-karte");
+ const karte = seite.locator("#vw-probe .vw-karte").first();
const kasten = await karte.boundingBox();
/* WICHTIG: mit steps bewegen. Ein Sprung ohne Zwischenschritte
@@ -357,8 +377,8 @@ srv.listen(4404, async () => {
}
probe.innerHTML = "";
for (let i = 0; i < 4; i++) {
- const k = document.createElement("div");
- k.className = "wd-karte";
+ const k = document.createElement("button");
+ k.className = "vw-karte";
k.style.padding = "1rem";
k.textContent = "Kachel " + (i + 1);
probe.appendChild(k);
@@ -386,7 +406,7 @@ srv.listen(4404, async () => {
const raum = document.querySelector(".vw-raum");
const lampe = document.querySelector(".vw-lampe");
const flocken = document.querySelector(".vw-flocken");
- const karte = document.querySelector("#vw-probe .wd-karte");
+ const karte = document.querySelector("#vw-probe .vw-karte");
const ls = getComputedStyle(lampe);
return {
raumIsoliert: getComputedStyle(raum).isolation,
@@ -433,7 +453,7 @@ srv.listen(4404, async () => {
console.log("\n===== 3g. NEIGEN SICH DIE KACHELN? =====");
await bereichAufbauen(seite, "kunden");
- const platte = seite.locator("#vw-probe .wd-karte").first();
+ const platte = seite.locator("#vw-probe .vw-karte").first();
const pk = await platte.boundingBox();
/* Mit steps bewegen, sonst entsteht kein pointermove. */
@@ -493,9 +513,9 @@ srv.listen(4404, async () => {
zurueck.nx === "0" && zurueck.ny === "0", `${zurueck.nx}/${zurueck.ny}`);
const tiefe = await seite.evaluate(() => {
- const k = document.querySelector("#vw-probe .wd-karte");
- const h = k.querySelector("h2");
- const p = k.querySelector("p");
+ const k = document.querySelector("#vw-probe .vw-karte");
+ const h = k.querySelector(".vw-karte-nr");
+ const p = k.querySelector(".vw-karte-mitte");
return {
ueberschrift: getComputedStyle(h).transform,
absatz: getComputedStyle(p).transform,
@@ -576,8 +596,8 @@ srv.listen(4404, async () => {
ruhigeLage.translate === "none", ruhigeLage.translate);
const ruhigExtra = await ruhig.evaluate(() => {
const be = document.querySelector("#vw-bereich");
- const k = document.createElement("div");
- k.className = "wd-karte";
+ const k = document.createElement("button");
+ k.className = "vw-karte";
be.appendChild(k);
const l = document.querySelector("#vw-bereich .vw-tabs");
return {
@@ -587,8 +607,8 @@ srv.listen(4404, async () => {
});
const ruhigNeigung = await ruhig.evaluate(() => {
const be = document.querySelector("#vw-bereich");
- let k = be.querySelector(".wd-karte");
- if (!k) { k = document.createElement("div"); k.className = "wd-karte"; be.appendChild(k); }
+ let k = be.querySelector(".vw-karte");
+ if (!k) { k = document.createElement("button"); k.className = "vw-karte"; be.appendChild(k); }
return getComputedStyle(k).transform;
});
pruefe("keine Neigung bei reduzierter Bewegung",
diff --git a/pruef-vw-schmuck-computer.png b/pruef-vw-schmuck-computer.png
index 8f78eed6..23ef204a 100644
Binary files a/pruef-vw-schmuck-computer.png and b/pruef-vw-schmuck-computer.png differ
diff --git a/pruef-vw-schmuck-handy.png b/pruef-vw-schmuck-handy.png
index bed81fd9..442aea55 100644
Binary files a/pruef-vw-schmuck-handy.png and b/pruef-vw-schmuck-handy.png differ
diff --git a/webdesign/sw.js b/webdesign/sw.js
index 7270b3c0..9e10f585 100644
--- a/webdesign/sw.js
+++ b/webdesign/sw.js
@@ -34,7 +34,7 @@
Start alle alten Zwischenspeicher weg. Muss bei jeder Änderung an den
Dateien unten hochgezählt werden, sonst hängen Nutzer auf einem alten
Stand fest. */
-const CACHE_NAME = "dogfather-webdesign-v41";
+const CACHE_NAME = "dogfather-webdesign-v42";
/* Bausteine, die die Oberfläche zum Anzeigen braucht. Bewusst KEINE
HTML-Datei in dieser Liste. */
diff --git a/webdesign/verwaltung.html b/webdesign/verwaltung.html
index 274f4b11..a33e8faf 100644
--- a/webdesign/verwaltung.html
+++ b/webdesign/verwaltung.html
@@ -391,9 +391,10 @@
Deshalb ist der Hintergrund auch ohne Unschaerfe schon dicht genug.
Das ist kein Schoenheitsfehler, sondern der Rueckfall. */
#vw-bereich .wd-karte,
- #vw-bereich .vw-liste,
+ #vw-bereich .vw-karte,
+ #vw-bereich .vw-meld,
+ #vw-bereich .vw-detail-blatt,
#vw-bereich .wd-notiz,
- #vw-bereich .vw-kachel,
#vw-bereich table {
-webkit-backdrop-filter: blur(22px) saturate(1.15);
backdrop-filter: blur(22px) saturate(1.15);
@@ -487,17 +488,35 @@
from { opacity: 0; translate: 0 14px; scale: .985; }
to { opacity: 1; translate: none; scale: 1; }
}
- #vw-bereich .wd-karte {
+ #vw-bereich .wd-karte,
+ #vw-bereich .vw-karte,
+ #vw-bereich .vw-meld {
animation: vw-kachel-auf .5s cubic-bezier(.2,.8,.3,1) both;
}
- #vw-bereich .wd-karte:nth-child(1) { animation-delay: .02s; }
- #vw-bereich .wd-karte:nth-child(2) { animation-delay: .07s; }
- #vw-bereich .wd-karte:nth-child(3) { animation-delay: .12s; }
- #vw-bereich .wd-karte:nth-child(4) { animation-delay: .17s; }
- #vw-bereich .wd-karte:nth-child(5) { animation-delay: .22s; }
- #vw-bereich .wd-karte:nth-child(6) { animation-delay: .27s; }
- #vw-bereich .wd-karte:nth-child(7) { animation-delay: .32s; }
- #vw-bereich .wd-karte:nth-child(n+8) { animation-delay: .36s; }
+ #vw-bereich .wd-karte:nth-child(1),
+ #vw-bereich .vw-karte:nth-child(1),
+ #vw-bereich .vw-meld:nth-child(1) { animation-delay: .02s; }
+ #vw-bereich .wd-karte:nth-child(2),
+ #vw-bereich .vw-karte:nth-child(2),
+ #vw-bereich .vw-meld:nth-child(2) { animation-delay: .07s; }
+ #vw-bereich .wd-karte:nth-child(3),
+ #vw-bereich .vw-karte:nth-child(3),
+ #vw-bereich .vw-meld:nth-child(3) { animation-delay: .12s; }
+ #vw-bereich .wd-karte:nth-child(4),
+ #vw-bereich .vw-karte:nth-child(4),
+ #vw-bereich .vw-meld:nth-child(4) { animation-delay: .17s; }
+ #vw-bereich .wd-karte:nth-child(5),
+ #vw-bereich .vw-karte:nth-child(5),
+ #vw-bereich .vw-meld:nth-child(5) { animation-delay: .22s; }
+ #vw-bereich .wd-karte:nth-child(6),
+ #vw-bereich .vw-karte:nth-child(6),
+ #vw-bereich .vw-meld:nth-child(6) { animation-delay: .27s; }
+ #vw-bereich .wd-karte:nth-child(7),
+ #vw-bereich .vw-karte:nth-child(7),
+ #vw-bereich .vw-meld:nth-child(7) { animation-delay: .32s; }
+ #vw-bereich .wd-karte:nth-child(n+8),
+ #vw-bereich .vw-karte:nth-child(n+8),
+ #vw-bereich .vw-meld:nth-child(n+8) { animation-delay: .36s; }
@media (prefers-reduced-motion: reduce) {
#vw-bereich .wd-karte { animation: none; }
@@ -516,7 +535,9 @@
2. Die KANTE der Kachel leuchtet dort auf, wo der Zeiger steht.
Zusammen sieht es aus, als laege eine echte Lichtquelle ueber dem
Glas -- und nicht, als waere ein Fleck aufgemalt. */
- #vw-bereich .wd-karte {
+ #vw-bereich .wd-karte,
+ #vw-bereich .vw-karte,
+ #vw-bereich .vw-meld {
background:
/* Die Flaeche: dicht genug, dass Text darauf ruhig steht. */
linear-gradient(180deg,
@@ -554,7 +575,15 @@
/* Der Lichtkegel auf der Flaeche, kraeftiger als im Grundsystem. */
@media (hover: hover) and (pointer: fine) {
- #vw-bereich .wd-karte::after {
+ #vw-bereich .wd-karte::after,
+ #vw-bereich .vw-karte::after,
+ #vw-bereich .vw-meld::after {
+ content: "";
+ position: absolute;
+ inset: 0;
+ z-index: 0;
+ border-radius: inherit;
+ pointer-events: none;
background: radial-gradient(300px circle at var(--wd-lichtx) var(--wd-lichty),
rgb(var(--vw-farbe) / .30) 0%,
rgb(var(--vw-farbe) / .12) 42%,
@@ -580,7 +609,9 @@
wie ein platt gedruecktes Parallelogramm. */
perspective: 1400px;
}
- #vw-bereich .wd-karte {
+ #vw-bereich .wd-karte,
+ #vw-bereich .vw-karte,
+ #vw-bereich .vw-meld {
transform-style: preserve-3d;
transform:
rotateX(calc(var(--vw-ny, 0) * -7deg))
@@ -594,7 +625,9 @@
/* Beim Ueberfahren kommt die Kachel dem Betrachter entgegen und
wirft einen laengeren Schatten -- das erst macht aus der Neigung
ein Objekt im Raum statt eines schraegen Bildes. */
- #vw-bereich .wd-karte:hover {
+ #vw-bereich .wd-karte:hover,
+ #vw-bereich .vw-karte:hover,
+ #vw-bereich .vw-meld:hover {
transform:
rotateX(calc(var(--vw-ny, 0) * -7deg))
rotateY(calc(var(--vw-nx, 0) * 7deg))
@@ -608,16 +641,22 @@
/* Der Inhalt steht vor der Flaeche. Ueberschriften weiter vorn als
Fliesstext -- dadurch entsteht beim Neigen echte Staffelung
statt einer flachen Ebene, die sich mitdreht. */
- #vw-bereich .wd-karte > * { transform: translateZ(18px); }
- #vw-bereich .wd-karte h2,
- #vw-bereich .wd-karte h3 { transform: translateZ(34px); }
+ #vw-bereich .wd-karte > *,
+ #vw-bereich .vw-karte > *,
+ #vw-bereich .vw-meld > * { transform: translateZ(18px); }
+ #vw-bereich .wd-karte h2, #vw-bereich .wd-karte h3,
+ #vw-bereich .vw-karte .vw-karte-name,
+ #vw-bereich .vw-karte .vw-karte-nr,
+ #vw-bereich .vw-meld strong { transform: translateZ(34px); }
/* DER GLANZSTREIFEN.
Ein schmales Licht, das ueber die Platte laeuft und mit der
Neigung wandert. Es sitzt im ::before, weil ::after schon den
Lichtkegel traegt. */
- #vw-bereich .wd-karte::before {
+ #vw-bereich .wd-karte::before,
+ #vw-bereich .vw-karte::before,
+ #vw-bereich .vw-meld::before {
content: "";
position: absolute;
inset: 0;
@@ -634,26 +673,39 @@
opacity: 0;
transition: opacity .3s ease;
}
- #vw-bereich .wd-karte:hover::before { opacity: 1; }
+ #vw-bereich .wd-karte:hover::before,
+ #vw-bereich .vw-karte:hover::before,
+ #vw-bereich .vw-meld:hover::before { opacity: 1; }
}
/* Die Ecken sind ungleich gerundet -- diagonal weit, diagonal knapp.
Eine gleichmaessig gerundete Kachel liest sich als Knopf; die
ungleiche Rundung nimmt die Facetten der Motive auf. */
- #vw-bereich .wd-karte {
+ #vw-bereich .wd-karte,
+ #vw-bereich .vw-karte,
+ #vw-bereich .vw-meld {
border-radius: 36px 6px 36px 6px;
+ position: relative;
+ isolation: isolate;
+ overflow: hidden;
}
@media (prefers-reduced-motion: reduce) {
- #vw-bereich .wd-karte {
+ #vw-bereich .wd-karte,
+ #vw-bereich .vw-karte,
+ #vw-bereich .vw-meld {
transition: none;
transform: none;
+ animation: none;
}
- #vw-bereich .wd-karte:hover { transform: none; }
- #vw-bereich .wd-karte > *,
- #vw-bereich .wd-karte h2,
- #vw-bereich .wd-karte h3 { transform: none; }
- #vw-bereich .wd-karte::before { display: none; }
+ #vw-bereich .wd-karte:hover,
+ #vw-bereich .vw-karte:hover,
+ #vw-bereich .vw-meld:hover { transform: none; }
+ #vw-bereich .wd-karte > *, #vw-bereich .vw-karte > *, #vw-bereich .vw-meld > *,
+ #vw-bereich .wd-karte h2, #vw-bereich .wd-karte h3 { transform: none; }
+ #vw-bereich .wd-karte::before,
+ #vw-bereich .vw-karte::before,
+ #vw-bereich .vw-meld::before { display: none; }
}
/* Der Titel steht als einziges frei auf der Buehne. Damit er das
@@ -737,7 +789,9 @@
/* Das Licht, das den Kacheln unter dem Mauszeiger folgt, nimmt
ebenfalls die Leitfarbe an. Dadurch fuehlt sich jeder Bereich
anders an, ohne dass irgendwo ein zweites Bild noetig waere. */
- #vw-bereich .wd-karte { --wd-lumen: var(--vw-farbe); }
+ #vw-bereich .wd-karte,
+ #vw-bereich .vw-karte,
+ #vw-bereich .vw-meld { --wd-lumen: var(--vw-farbe); }
/* Die Anmeldekarte bekommt das Wappen. Sie ist halbdurchsichtig,
das Motiv scheint also durch die Glasflaeche hindurch.
@@ -3859,6 +3913,16 @@
Beim Verlassen wird auf 0 zurueckgesetzt -- sonst bliebe die
Kachel schraeg stehen, nachdem der Zeiger laengst weg ist.
--------------------------------------------------------------------- */
+ /* Die ECHTEN Kachelklassen der Verwaltung.
+
+ Beim ersten Anlauf stand hier nur ".wd-karte" -- die kommt im
+ Verwaltungsbereich aber fast nicht vor. Die Listen bestehen aus
+ .vw-karte, die Meldungen der Uebersicht aus .vw-meld. Saemtliche
+ Effekte lagen dadurch auf Elementen, die es hier gar nicht gibt:
+ Neigung, Glanz und Licht waren gebaut, gemessen -- und trotzdem
+ nirgends zu sehen. */
+ var KACHELN = "#vw-bereich .wd-karte, #vw-bereich .vw-karte, #vw-bereich .vw-meld";
+
(function kachelnNeigen() {
try {
if (!window.matchMedia("(hover: hover) and (pointer: fine)").matches) return;
@@ -3869,7 +3933,7 @@
document.addEventListener("pointermove", function (e) {
var karte = e.target && e.target.closest
- ? e.target.closest("#vw-bereich .wd-karte") : null;
+ ? e.target.closest(KACHELN) : null;
if (!karte) return;
letzte = karte; zx = e.clientX; zy = e.clientY;
if (offen) return;
@@ -3884,6 +3948,15 @@
var ny = ((zy - r.top) / r.height - 0.5) * 2;
letzte.style.setProperty("--vw-nx", nx.toFixed(3));
letzte.style.setProperty("--vw-ny", ny.toFixed(3));
+
+ /* Die Lichtposition gleich mitsetzen.
+
+ Der Verfolger im Grundsystem (wd-core.js) sucht ausdruecklich
+ nur ".wd-karte". Fuer .vw-karte und .vw-meld waere das Licht
+ also nie gewandert -- der Lichtkegel haette bei seinem
+ Startwert oben mittig geklebt. */
+ letzte.style.setProperty("--wd-lichtx", (zx - r.left) + "px");
+ letzte.style.setProperty("--wd-lichty", (zy - r.top) + "px");
});
}, { passive: true });
@@ -3891,7 +3964,7 @@
wenn der Zeiger die Kachel ueber ein Kindelement verlaesst. */
document.addEventListener("pointerout", function (e) {
var karte = e.target && e.target.closest
- ? e.target.closest("#vw-bereich .wd-karte") : null;
+ ? e.target.closest(KACHELN) : null;
if (!karte) return;
/* Nur zuruecksetzen, wenn der Zeiger die Kachel WIRKLICH verlaesst
und nicht bloss von einem Kind zum naechsten wandert. */