Compliance: Remove emojis, add touch targets, add reduced-motion support

No-Emoji Policy (TODO.md rule):
- Replaced all emojis in UI code with Lucide icon names or text:
  - calendar-manager.ts: exam/lesson/holiday/term/event icons
  - signage-utils.ts: emergency/notification/schedule/announcement icons
  - behavior-tracking-view.tsx: placeholder text
  - i18n.ts: example text strings (DE + EN)
  - admin/signage, admin/compliance pages
  - compliance-wizard.tsx, substitute-teacher-view.tsx
- Verified: zero emojis remain in src/ (excluding comments)

Touch Target Compliance (44px minimum):
- Added comprehensive @media (pointer: coarse) CSS rules:
  - All buttons, [role=button], [role=tab], [role=option], [role=menuitem]
    get min-height/min-width: 44px
  - Icon-only buttons get extra padding
  - -webkit-touch-callout: none and user-select: none for buttons
  - touch-action: manipulation for smooth scrolling

Reduced-Motion Support:
- Added comprehensive @media (prefers-reduced-motion: reduce) rules:
  - All animations: duration 0.01ms, iteration 1
  - All transitions: duration 0.01ms
  - scroll-behavior: auto (no smooth scroll)
  - Framer-motion elements: opacity 1, transform none
This commit is contained in:
Z User committed 2026-08-10 21:23:38 +00:00
1 parent 13fce9d906
commit 678a4e9b83
10 files changed
+80 -26

No files matched your search

+4 -4
View File
@@ -1412,7 +1412,7 @@ const de: TranslationDict = {
'behavior.no_class_selected_desc': 'Wählen Sie oben eine Klasse aus, um Vorfälle zu erfassen und anzusehen.',
'behavior.schoolwide': 'Schulweit',
'behavior.color_helper': 'Hex-Farbe, z. B. #10b981',
'behavior.icon_helper': 'Ein Emoji zur schnellen Erkennung, z. B. 🤝',
'behavior.icon_helper': 'Ein Emoji zur schnellen Erkennung, z. B. handshake',
'behavior.name_placeholder': 'z. B. Hilfsbereitschaft',
'behavior.description_placeholder': 'Was ist passiert?',
'behavior.location_placeholder': 'z. B. Klassenzimmer',
@@ -1707,7 +1707,7 @@ const de: TranslationDict = {
'comments.category_name_required': 'Bitte geben Sie einen Kategorienamen ein.',
'comments.category_color': 'Farbe',
'comments.category_icon': 'Icon',
'comments.category_icon_placeholder': '🤝',
'comments.category_icon_placeholder': '',
'comments.category_saved': 'Kategorie gespeichert',
'comments.category_created': 'Kategorie erstellt',
'comments.category_deleted': 'Kategorie gelöscht',
@@ -8021,7 +8021,7 @@ const en: TranslationDict = {
'behavior.no_class_selected_desc': 'Select a class above to log and view behavior incidents.',
'behavior.schoolwide': 'School-wide',
'behavior.color_helper': 'Hex color, e.g. #10b981',
'behavior.icon_helper': 'An emoji for quick recognition, e.g. 🤝',
'behavior.icon_helper': 'An emoji for quick recognition, e.g. handshake',
'behavior.name_placeholder': 'e.g. Helpful behavior',
'behavior.description_placeholder': 'What happened?',
'behavior.location_placeholder': 'e.g. Classroom',
@@ -8316,7 +8316,7 @@ const en: TranslationDict = {
'comments.category_name_required': 'Please enter a category name.',
'comments.category_color': 'Color',
'comments.category_icon': 'Icon',
'comments.category_icon_placeholder': '🤝',
'comments.category_icon_placeholder': '',
'comments.category_saved': 'Category saved',
'comments.category_created': 'Category created',
'comments.category_deleted': 'Category deleted',