/* Kundenansicht neu: iOS zoomt beim Antippen eines Feldes hinein, wenn dessen Schrift auf dem Bildschirm kleiner als 16 pt ist, und zoomt danach nicht zurück: man sieht nur noch einen Ausschnitt, rechts ist alles abgeschnitten, die Eingabe liegt hinter der Tastatur. Unsere Felder haben am Handy 16 px. Ist die Seite aber verkleinert gezeichnet (Seitenzoom in Safari unter 100 %; gemessen am iPhone 2026-10-29: 85 %, visualViewport.scale 0,85), sind das auf dem Bildschirm nur 13,6 pt. Dann bekommen alle Textfelder so viel größere Schrift, dass sie auf dem Bildschirm wieder 16 pt hat: Klasse kn-zoom-ausgleich und Faktor --kn-zoom-ausgleich an , die Regel steht in huelle.css. Bei 100 % passiert nichts. */ /** Faktor für die Feldschrift beim Maßstab `scale`; 1 = kein Ausgleich (100 % oder hineingezoomt). 1 % Luft gegen Rundung, auf drei Stellen. */ export function ausgleichFaktor(scale) { if (!Number.isFinite(scale) || scale <= 0 || scale >= 0.99) return 1 return Math.ceil((1.01 / scale) * 1000) / 1000 } /** * Stellt den Faktor beim Start und bei jeder Maßstabsänderung (visualViewport resize) ein, nie während ein Textfeld den Fokus hat * (iOS hat dann schon entschieden). Rückgabe { faktor, beende }. */ export function beobachteZoom({ win = window, doc = document, istTextfeld = () => false }) { const vv = win.visualViewport if (!vv) return { faktor: () => 1, beende() {} } const wurzel = doc.documentElement let faktor = 1 const setze = () => { if (istTextfeld(doc.activeElement)) return const neu = ausgleichFaktor(vv.scale) if (neu === faktor) return faktor = neu if (faktor === 1) { wurzel.classList.remove('kn-zoom-ausgleich') wurzel.style.removeProperty('--kn-zoom-ausgleich') } else { wurzel.style.setProperty('--kn-zoom-ausgleich', String(faktor)) wurzel.classList.add('kn-zoom-ausgleich') } } setze() vv.addEventListener('resize', setze) return { faktor: () => faktor, beende() { vv.removeEventListener('resize', setze) } } }