From 501ecc0c1e29e6a60c470de605390e9b30303654 Mon Sep 17 00:00:00 2001 From: AliceDarkest Date: Tue, 21 Jul 2026 00:16:05 +0200 Subject: [PATCH] AP3 A11y-Widget perfektioniert (Focus-Trap, aria-Semantik, tote CSS, Cache) - accessibility.js: Focus-Trap im Panel (Tab/Shift+Tab zyklisch ueber Close + 9 Optionen), aria-modal="true" beim Oeffnen, Klick-ausserhalb schliesst (Escape + Fokus-Rueckgabe bestehen). Font-Button: aria-pressed ersetzt durch dynamisches aria-label ("... aktuell 115 %") + .is-active ab >100 %; Reset-Button ohne aria-pressed (Aktion statt Toggle). Hochkontrast-Untertitel "immer dunkel". - accessibility.css: toten Legacy-Dock-Code entfernt (72px body-padding, .mf-a11y-dock, Fixed-Trigger, Dock-Media-Query); .is-active am Aktiv-Styling; Kommentar, dass Hochkontrast bewusst immer dunkel bleibt. - accessibility-placement.css: obsoleten Padding-Reset entfernt; .is-active ergaenzt. - Cache-Buster: theme.js injiziert accessibility.css v6 / placement v10 / accessibility.js v9 / fluxtimer.css v5; theme.css?v=4 und theme.js?v=5 in allen 80 Templates/Finalflux-Seiten vereinheitlicht. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01WFxcjtc9HNP4VECT6Ur1tE --- .../static/css/accessibility-placement.css | 4 ++-- src/main/resources/static/css/accessibility.css | 7 +++++-- .../static/finalflux/ap1/datenschutz.html | 4 ++-- .../static/finalflux/ap1/ip-berechnung.html | 4 ++-- .../static/finalflux/ap1/projektmanagement.html | 4 ++-- .../static/finalflux/ap1/zahlensysteme.html | 4 ++-- .../static/finalflux/ap2-fiae/algorithmen.html | 4 ++-- .../static/finalflux/ap2-fiae/entwurfsmuster.html | 4 ++-- .../resources/static/finalflux/ap2-fiae/oop.html | 4 ++-- .../resources/static/finalflux/ap2-fiae/sql.html | 4 ++-- .../static/finalflux/ap2-fiae/testverfahren.html | 4 ++-- .../resources/static/finalflux/ap2-fiae/uml.html | 4 ++-- .../finalflux/ap2-fisi/hochverfuegbarkeit.html | 4 ++-- .../static/finalflux/ap2-fisi/it-sicherheit.html | 4 ++-- .../finalflux/ap2-fisi/monitoring-backup.html | 4 ++-- .../finalflux/ap2-fisi/netzwerkplanung.html | 4 ++-- .../static/finalflux/ap2-fisi/skripting.html | 4 ++-- .../finalflux/ap2-fisi/virtualisierung.html | 4 ++-- .../finalflux/systemintegration/backuparten.html | 4 ++-- .../finalflux/systemintegration/datenbank.html | 4 ++-- .../static/finalflux/systemintegration/dsl.html | 4 ++-- .../static/finalflux/systemintegration/osi.html | 4 ++-- .../finalflux/systemintegration/storage.html | 4 ++-- .../finalflux/systemintegration/thin-client.html | 4 ++-- .../finalflux/systemintegration/topologien.html | 4 ++-- .../static/finalflux/systemintegration/usv.html | 4 ++-- .../finalflux/systemintegration/vdi-daas.html | 4 ++-- .../static/finalflux/systemintegration/vlan.html | 4 ++-- .../static/finalflux/wirtschaft/amortisation.html | 4 ++-- .../finalflux/wirtschaft/angebotsvergleich.html | 4 ++-- .../finalflux/wirtschaft/bezugskalkulation.html | 4 ++-- .../finalflux/wirtschaft/harvard_konzept.html | 4 ++-- .../finalflux/wirtschaft/kosten_nutzen.html | 4 ++-- .../static/finalflux/wirtschaft/make_or_buy.html | 4 ++-- .../static/finalflux/wirtschaft/marktformen.html | 4 ++-- .../finalflux/wirtschaft/nutzwertanalyse.html | 4 ++-- .../finalflux/wirtschaft/ratendarlehen.html | 4 ++-- .../wirtschaft/rentabilitätsrechnung.html | 4 ++-- .../static/finalflux/wirtschaft/roi.html | 4 ++-- .../finalflux/wirtschaft/vertragsarten.html | 4 ++-- .../finalflux/wirtschaft/win_win_strategie.html | 4 ++-- .../finalflux/wirtschaft/wirtschaftssektoren.html | 4 ++-- src/main/resources/static/js/accessibility.js | 15 ++++++++++++--- src/main/resources/static/js/theme.js | 8 ++++---- src/main/resources/templates/achievements.html | 4 ++-- .../resources/templates/admin/bughunter-hunt.html | 2 +- src/main/resources/templates/admin/bughunter.html | 2 +- .../templates/admin/codeescape-room.html | 2 +- .../templates/admin/codeescape-scenario.html | 2 +- .../resources/templates/admin/codeescape.html | 2 +- src/main/resources/templates/admin/dashboard.html | 4 ++-- .../resources/templates/admin/devlab-game.html | 4 ++-- src/main/resources/templates/admin/devlab.html | 4 ++-- src/main/resources/templates/admin/mindmatch.html | 4 ++-- .../templates/admin/syntaxsaga-mission.html | 4 ++-- .../resources/templates/admin/syntaxsaga.html | 4 ++-- .../templates/admin/techtacular-category.html | 4 ++-- .../resources/templates/admin/techtacular.html | 4 ++-- .../resources/templates/admin/users/form.html | 4 ++-- .../resources/templates/admin/users/list.html | 4 ++-- src/main/resources/templates/bughunter.html | 2 +- src/main/resources/templates/codeescape.html | 2 +- src/main/resources/templates/dashboard.html | 4 ++-- src/main/resources/templates/devlab-game.html | 4 ++-- src/main/resources/templates/devlab.html | 4 ++-- src/main/resources/templates/error.html | 4 ++-- src/main/resources/templates/finalflux.html | 4 ++-- src/main/resources/templates/forgot-password.html | 4 ++-- src/main/resources/templates/impressum.html | 4 ++-- src/main/resources/templates/index.html | 4 ++-- src/main/resources/templates/knowledge.html | 4 ++-- .../resources/templates/legal/datenschutz.html | 4 ++-- .../templates/legal/nutzungsbedingungen.html | 4 ++-- .../resources/templates/legal/richtlinien.html | 4 ++-- src/main/resources/templates/mindmatch.html | 4 ++-- src/main/resources/templates/networker.html | 2 +- src/main/resources/templates/profile.html | 4 ++-- src/main/resources/templates/progress.html | 4 ++-- src/main/resources/templates/reset-password.html | 4 ++-- src/main/resources/templates/serviceclash.html | 2 +- src/main/resources/templates/settings.html | 4 ++-- src/main/resources/templates/soziales.html | 4 ++-- src/main/resources/templates/syntaxsaga.html | 4 ++-- src/main/resources/templates/techtacular.html | 4 ++-- 84 files changed, 174 insertions(+), 162 deletions(-) diff --git a/src/main/resources/static/css/accessibility-placement.css b/src/main/resources/static/css/accessibility-placement.css index 2e3760e..7a35b3b 100644 --- a/src/main/resources/static/css/accessibility-placement.css +++ b/src/main/resources/static/css/accessibility-placement.css @@ -1,4 +1,4 @@ -body{padding-left:0!important;padding-bottom:0!important} +/* (Legacy-Dock-Padding-Reset entfallen – es gibt kein body-padding-Dock mehr.) */ .mf-a11y-trigger{position:static!important;width:42px;height:42px;z-index:auto;flex:0 0 42px;box-shadow:0 0 14px var(--glow-w);border-radius:10px} .mf-a11y-trigger svg{width:20px;height:20px} .mf-a11y-panel{inset:76px 16px auto auto!important;width:min(450px,calc(100vw - 32px));max-height:calc(100dvh - 92px)} @@ -17,5 +17,5 @@ body[class*="mf-a11y-skin-"] .mf-a11y-trigger{border-color:color-mix(in srgb,var body[class*="mf-a11y-skin-"] .mf-a11y-panel{border-color:color-mix(in srgb,var(--mf-a11y-accent) 56%,var(--border));box-shadow:0 12px 45px rgba(0,0,0,.55),0 0 22px var(--mf-a11y-glow)} body[class*="mf-a11y-skin-"] .mf-a11y-head{background:color-mix(in srgb,var(--mf-a11y-accent) 28%,#07121f)} body[class*="mf-a11y-skin-"] .mf-a11y-close{background:var(--mf-a11y-accent);color:var(--mf-a11y-ink)} -body[class*="mf-a11y-skin-"] .mf-a11y-option[aria-pressed="true"]{border-color:var(--mf-a11y-accent);background:color-mix(in srgb,var(--mf-a11y-accent) 18%,var(--surface));box-shadow:inset 0 0 0 2px var(--mf-a11y-accent)} +body[class*="mf-a11y-skin-"] .mf-a11y-option[aria-pressed="true"],body[class*="mf-a11y-skin-"] .mf-a11y-option.is-active{border-color:var(--mf-a11y-accent);background:color-mix(in srgb,var(--mf-a11y-accent) 18%,var(--surface));box-shadow:inset 0 0 0 2px var(--mf-a11y-accent)} @media(max-width:700px){.mf-a11y-panel{inset:70px 6px auto 6px!important;width:auto;max-height:calc(100dvh - 82px)}} diff --git a/src/main/resources/static/css/accessibility.css b/src/main/resources/static/css/accessibility.css index a974006..3cb943c 100644 --- a/src/main/resources/static/css/accessibility.css +++ b/src/main/resources/static/css/accessibility.css @@ -3,6 +3,8 @@ html[data-mf-readable="true"] body,html[data-mf-readable="true"] button,html[dat /* Die Tokens liegen je nach Spiel auf body bzw. der jeweiligen Spielwurzel. Deshalb müssen die Overrides auf der ganzen Oberfläche gelten – ein Override nur auf html wurde von den lokalen Themes bislang wieder überschrieben. */ +/* Hochkontrast ist BEWUSST immer dunkel (maximaler, deterministischer Kontrast) – + auch im Light Mode. Im Button-Untertitel als "immer dunkel" gekennzeichnet. */ html[data-mf-contrast="true"] body,html[data-mf-contrast="true"] body *{--bg:#000!important;--panel:#050505!important;--panel-2:#080808!important;--surface:#0b0b0b!important;--surface-2:#151515!important;--text:#fff!important;--heading:#fff!important;--muted:#f1f1f1!important;--border:#fff!important;--line:#fff!important;--border-accent:#6fffb5!important;--accent:#6fffb5!important;--accent-2:#fff!important;--secondary:#83dbff!important;--secondary-2:#fff!important;--success:#83dbff!important;--danger:#ff9caf!important;--esc-accent:#6fffb5!important;--bh-accent:#6fffb5!important;--sc-accent:#83dbff!important;--nw-accent:#83dbff!important;--mm-accent:#6fffb5!important;--mm-secondary:#83dbff!important;--tt-accent:#6fffb5!important;--tt-secondary:#83dbff!important;--dl-accent:#6fffb5!important;--dl-secondary:#83dbff!important;--ss-accent:#6fffb5!important;--ss-secondary:#83dbff!important;--ff-accent:#6fffb5!important;--ff-secondary:#83dbff!important;--glow-s:transparent!important;--glow-w:transparent!important;--esc-glow:transparent!important;--bh-glow:transparent!important;--sc-glow:transparent!important;--nw-glow:transparent!important;--mm-glow:transparent!important;--tt-glow:transparent!important;--dl-glow:transparent!important;--ss-glow:transparent!important;--ff-glow:transparent!important} html[data-mf-contrast="true"] body{background:#000!important;color:#fff!important;color-scheme:dark} html[data-mf-contrast="true"] body *,html[data-mf-contrast="true"] body *::before,html[data-mf-contrast="true"] body *::after{text-shadow:none!important;box-shadow:none!important} @@ -22,6 +24,7 @@ html[data-mf-color="safe"].sn-platform body .mf-card-finalprotocol{--accent:#999 html[data-mf-mono="true"] body{filter:grayscale(1)}html[data-mf-links="true"] a{text-decoration:underline!important;text-underline-offset:.18em;text-decoration-thickness:.12em} html[data-mf-motion="false"] *,html[data-mf-motion="false"] *::before,html[data-mf-motion="false"] *::after{animation-duration:.001ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.001ms!important} html[data-mf-cursor="true"],html[data-mf-cursor="true"] *{cursor:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cpath d='M2 1v25l7-7 5 11 5-2-5-10h10z' fill='white' stroke='black' stroke-width='2'/%3E%3C/svg%3E") 2 1,auto!important} -body{padding-left:72px}.mf-a11y-dock{position:fixed;inset:0 auto 0 0;z-index:1799;width:72px;display:flex;align-items:flex-end;justify-content:center;padding:0 0 18px;background:color-mix(in srgb,var(--panel) 94%,transparent);border-right:1px solid var(--border);box-shadow:5px 0 18px rgba(0,0,0,.16)} +/* Legacy-Dock entfernt: der A11y-Trigger sitzt jetzt als 42px-Icon-Button im Header + (Platzierung in accessibility-placement.css). Kein body-padding / Fixed-Dock mehr. */ .mf-a11y-trigger{width:42px;height:42px;border:1px solid var(--border);border-radius:10px;display:inline-flex;align-items:center;justify-content:center;background:var(--surface);color:var(--muted);cursor:pointer;transition:all .18s}.mf-a11y-trigger:hover{color:var(--accent);border-color:var(--border-accent);box-shadow:0 0 14px var(--glow-w)}.mf-a11y-trigger svg{width:20px;height:20px}.mf-a11y-trigger:focus-visible,.mf-a11y-panel button:focus-visible{outline:3px solid var(--accent);outline-offset:3px} -.mf-a11y-panel{position:fixed;left:82px;bottom:18px;z-index:1801;width:min(450px,calc(100vw - 100px));max-height:calc(100dvh - 36px);overflow:auto;border:1px solid var(--border);border-radius:10px;background:var(--panel);color:var(--text);box-shadow:0 12px 45px rgba(0,0,0,.55)}.mf-a11y-panel[hidden]{display:none}.mf-a11y-head{position:sticky;top:0;display:flex;align-items:center;gap:1rem;padding:.65rem;background:#07121f;color:#fff;z-index:1}.mf-a11y-head h2{font:800 1.05rem Arial,sans-serif;margin:0 auto}.mf-a11y-close{width:44px;height:44px;border:0;border-radius:6px;background:#fff;color:#07121f;font-size:1.8rem;cursor:pointer}.mf-a11y-grid{display:grid;grid-template-columns:1fr 1fr;gap:4px;padding:10px;background:var(--surface)}.mf-a11y-option{min-height:88px;border:1px solid var(--border);border-radius:6px;background:var(--surface-2);color:var(--text);padding:.65rem;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.35rem;font:inherit;cursor:pointer}.mf-a11y-option strong{font-size:1.35rem}.mf-a11y-option[aria-pressed="true"]{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 18%,var(--surface));box-shadow:inset 0 0 0 2px var(--accent)}.mf-a11y-option small{color:var(--muted)}@media(max-width:700px){body{padding-left:0;padding-bottom:68px}.mf-a11y-dock{inset:auto 0 0 0;width:auto;height:68px;padding:0 10px;justify-content:flex-start;align-items:center;border-right:0;border-top:1px solid var(--border);box-shadow:0 -5px 18px rgba(0,0,0,.18)}.mf-a11y-trigger{width:52px;height:52px}.mf-a11y-panel{left:6px;bottom:74px;width:calc(100vw - 12px);max-height:calc(100dvh - 86px)}.mf-a11y-grid{grid-template-columns:1fr 1fr}.mf-a11y-option{min-height:78px;font-size:.82rem}} +.mf-a11y-panel{position:fixed;left:82px;bottom:18px;z-index:1801;width:min(450px,calc(100vw - 100px));max-height:calc(100dvh - 36px);overflow:auto;border:1px solid var(--border);border-radius:10px;background:var(--panel);color:var(--text);box-shadow:0 12px 45px rgba(0,0,0,.55)}.mf-a11y-panel[hidden]{display:none}.mf-a11y-head{position:sticky;top:0;display:flex;align-items:center;gap:1rem;padding:.65rem;background:#07121f;color:#fff;z-index:1}.mf-a11y-head h2{font:800 1.05rem Arial,sans-serif;margin:0 auto}.mf-a11y-close{width:44px;height:44px;border:0;border-radius:6px;background:#fff;color:#07121f;font-size:1.8rem;cursor:pointer}.mf-a11y-grid{display:grid;grid-template-columns:1fr 1fr;gap:4px;padding:10px;background:var(--surface)}.mf-a11y-option{min-height:88px;border:1px solid var(--border);border-radius:6px;background:var(--surface-2);color:var(--text);padding:.65rem;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.35rem;font:inherit;cursor:pointer}.mf-a11y-option strong{font-size:1.35rem}.mf-a11y-option[aria-pressed="true"],.mf-a11y-option.is-active{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 18%,var(--surface));box-shadow:inset 0 0 0 2px var(--accent)}.mf-a11y-option small{color:var(--muted)}@media(max-width:700px){.mf-a11y-panel{left:6px;bottom:74px;width:calc(100vw - 12px);max-height:calc(100dvh - 86px)}.mf-a11y-grid{grid-template-columns:1fr 1fr}.mf-a11y-option{min-height:78px;font-size:.82rem}} diff --git a/src/main/resources/static/finalflux/ap1/datenschutz.html b/src/main/resources/static/finalflux/ap1/datenschutz.html index 8918893..a61fed7 100644 --- a/src/main/resources/static/finalflux/ap1/datenschutz.html +++ b/src/main/resources/static/finalflux/ap1/datenschutz.html @@ -5,9 +5,9 @@ Datenschutz - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/ap1/ip-berechnung.html b/src/main/resources/static/finalflux/ap1/ip-berechnung.html index fbe30fd..25225a2 100644 --- a/src/main/resources/static/finalflux/ap1/ip-berechnung.html +++ b/src/main/resources/static/finalflux/ap1/ip-berechnung.html @@ -5,9 +5,9 @@ IP-Adressberechnung - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/ap1/projektmanagement.html b/src/main/resources/static/finalflux/ap1/projektmanagement.html index 6079bdc..b0a5656 100644 --- a/src/main/resources/static/finalflux/ap1/projektmanagement.html +++ b/src/main/resources/static/finalflux/ap1/projektmanagement.html @@ -5,9 +5,9 @@ Projektmanagement - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/ap1/zahlensysteme.html b/src/main/resources/static/finalflux/ap1/zahlensysteme.html index e2c621e..e5e5a6b 100644 --- a/src/main/resources/static/finalflux/ap1/zahlensysteme.html +++ b/src/main/resources/static/finalflux/ap1/zahlensysteme.html @@ -5,9 +5,9 @@ Zahlensysteme & Speicher - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/ap2-fiae/algorithmen.html b/src/main/resources/static/finalflux/ap2-fiae/algorithmen.html index 297c5b1..88640b6 100644 --- a/src/main/resources/static/finalflux/ap2-fiae/algorithmen.html +++ b/src/main/resources/static/finalflux/ap2-fiae/algorithmen.html @@ -5,9 +5,9 @@ Algorithmen - FinalProtocol AP2 - + - +
diff --git a/src/main/resources/static/finalflux/ap2-fiae/entwurfsmuster.html b/src/main/resources/static/finalflux/ap2-fiae/entwurfsmuster.html index 2c07344..624c5a0 100644 --- a/src/main/resources/static/finalflux/ap2-fiae/entwurfsmuster.html +++ b/src/main/resources/static/finalflux/ap2-fiae/entwurfsmuster.html @@ -5,9 +5,9 @@ Entwurfsmuster - FinalProtocol AP2 - + - +
diff --git a/src/main/resources/static/finalflux/ap2-fiae/oop.html b/src/main/resources/static/finalflux/ap2-fiae/oop.html index dbd63a5..f09c8f8 100644 --- a/src/main/resources/static/finalflux/ap2-fiae/oop.html +++ b/src/main/resources/static/finalflux/ap2-fiae/oop.html @@ -5,9 +5,9 @@ OOP - FinalProtocol AP2 - + - +
diff --git a/src/main/resources/static/finalflux/ap2-fiae/sql.html b/src/main/resources/static/finalflux/ap2-fiae/sql.html index 3348067..eb63a2f 100644 --- a/src/main/resources/static/finalflux/ap2-fiae/sql.html +++ b/src/main/resources/static/finalflux/ap2-fiae/sql.html @@ -5,9 +5,9 @@ SQL - FinalProtocol AP2 - + - +
diff --git a/src/main/resources/static/finalflux/ap2-fiae/testverfahren.html b/src/main/resources/static/finalflux/ap2-fiae/testverfahren.html index cb4d46a..af24109 100644 --- a/src/main/resources/static/finalflux/ap2-fiae/testverfahren.html +++ b/src/main/resources/static/finalflux/ap2-fiae/testverfahren.html @@ -5,9 +5,9 @@ Testverfahren - FinalProtocol AP2 - + - +
diff --git a/src/main/resources/static/finalflux/ap2-fiae/uml.html b/src/main/resources/static/finalflux/ap2-fiae/uml.html index b38ec0e..32a2df2 100644 --- a/src/main/resources/static/finalflux/ap2-fiae/uml.html +++ b/src/main/resources/static/finalflux/ap2-fiae/uml.html @@ -5,9 +5,9 @@ UML - FinalProtocol AP2 - + - +
diff --git a/src/main/resources/static/finalflux/ap2-fisi/hochverfuegbarkeit.html b/src/main/resources/static/finalflux/ap2-fisi/hochverfuegbarkeit.html index bca37bf..b1adf5e 100644 --- a/src/main/resources/static/finalflux/ap2-fisi/hochverfuegbarkeit.html +++ b/src/main/resources/static/finalflux/ap2-fisi/hochverfuegbarkeit.html @@ -5,9 +5,9 @@ Hochverfügbarkeit - FinalProtocol AP2 - + - +
diff --git a/src/main/resources/static/finalflux/ap2-fisi/it-sicherheit.html b/src/main/resources/static/finalflux/ap2-fisi/it-sicherheit.html index 932056c..7a77280 100644 --- a/src/main/resources/static/finalflux/ap2-fisi/it-sicherheit.html +++ b/src/main/resources/static/finalflux/ap2-fisi/it-sicherheit.html @@ -5,9 +5,9 @@ IT-Sicherheit - FinalProtocol AP2 - + - +
diff --git a/src/main/resources/static/finalflux/ap2-fisi/monitoring-backup.html b/src/main/resources/static/finalflux/ap2-fisi/monitoring-backup.html index f464ebc..79b77d6 100644 --- a/src/main/resources/static/finalflux/ap2-fisi/monitoring-backup.html +++ b/src/main/resources/static/finalflux/ap2-fisi/monitoring-backup.html @@ -5,9 +5,9 @@ Monitoring & Backup - FinalProtocol AP2 - + - +
diff --git a/src/main/resources/static/finalflux/ap2-fisi/netzwerkplanung.html b/src/main/resources/static/finalflux/ap2-fisi/netzwerkplanung.html index c4a6e6c..d0d52e2 100644 --- a/src/main/resources/static/finalflux/ap2-fisi/netzwerkplanung.html +++ b/src/main/resources/static/finalflux/ap2-fisi/netzwerkplanung.html @@ -5,9 +5,9 @@ Netzwerkplanung - FinalProtocol AP2 - + - +
diff --git a/src/main/resources/static/finalflux/ap2-fisi/skripting.html b/src/main/resources/static/finalflux/ap2-fisi/skripting.html index 2e0bffc..a4b5d25 100644 --- a/src/main/resources/static/finalflux/ap2-fisi/skripting.html +++ b/src/main/resources/static/finalflux/ap2-fisi/skripting.html @@ -5,9 +5,9 @@ Skripting - FinalProtocol AP2 - + - +
diff --git a/src/main/resources/static/finalflux/ap2-fisi/virtualisierung.html b/src/main/resources/static/finalflux/ap2-fisi/virtualisierung.html index b22bd08..6da77d3 100644 --- a/src/main/resources/static/finalflux/ap2-fisi/virtualisierung.html +++ b/src/main/resources/static/finalflux/ap2-fisi/virtualisierung.html @@ -5,9 +5,9 @@ Virtualisierung - FinalProtocol AP2 - + - +
diff --git a/src/main/resources/static/finalflux/systemintegration/backuparten.html b/src/main/resources/static/finalflux/systemintegration/backuparten.html index c31eb19..d29ee2b 100644 --- a/src/main/resources/static/finalflux/systemintegration/backuparten.html +++ b/src/main/resources/static/finalflux/systemintegration/backuparten.html @@ -5,9 +5,9 @@ Backuparten - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/systemintegration/datenbank.html b/src/main/resources/static/finalflux/systemintegration/datenbank.html index 509934c..f657fdc 100644 --- a/src/main/resources/static/finalflux/systemintegration/datenbank.html +++ b/src/main/resources/static/finalflux/systemintegration/datenbank.html @@ -5,9 +5,9 @@ Datenbanksysteme - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/systemintegration/dsl.html b/src/main/resources/static/finalflux/systemintegration/dsl.html index 5718409..26a39d0 100644 --- a/src/main/resources/static/finalflux/systemintegration/dsl.html +++ b/src/main/resources/static/finalflux/systemintegration/dsl.html @@ -5,9 +5,9 @@ DSL und Internetanschluss - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/systemintegration/osi.html b/src/main/resources/static/finalflux/systemintegration/osi.html index 85d36e0..e1aed51 100644 --- a/src/main/resources/static/finalflux/systemintegration/osi.html +++ b/src/main/resources/static/finalflux/systemintegration/osi.html @@ -5,9 +5,9 @@ OSI-Modell - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/systemintegration/storage.html b/src/main/resources/static/finalflux/systemintegration/storage.html index 49ae599..46c6d2a 100644 --- a/src/main/resources/static/finalflux/systemintegration/storage.html +++ b/src/main/resources/static/finalflux/systemintegration/storage.html @@ -5,9 +5,9 @@ Storage Systeme - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/systemintegration/thin-client.html b/src/main/resources/static/finalflux/systemintegration/thin-client.html index c18c244..c26bdfb 100644 --- a/src/main/resources/static/finalflux/systemintegration/thin-client.html +++ b/src/main/resources/static/finalflux/systemintegration/thin-client.html @@ -5,9 +5,9 @@ Thin Clients - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/systemintegration/topologien.html b/src/main/resources/static/finalflux/systemintegration/topologien.html index 3f2efa3..86231c2 100644 --- a/src/main/resources/static/finalflux/systemintegration/topologien.html +++ b/src/main/resources/static/finalflux/systemintegration/topologien.html @@ -5,9 +5,9 @@ Netzwerktopologien - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/systemintegration/usv.html b/src/main/resources/static/finalflux/systemintegration/usv.html index d7c1b56..53fc7cb 100644 --- a/src/main/resources/static/finalflux/systemintegration/usv.html +++ b/src/main/resources/static/finalflux/systemintegration/usv.html @@ -5,9 +5,9 @@ USV - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/systemintegration/vdi-daas.html b/src/main/resources/static/finalflux/systemintegration/vdi-daas.html index 351293b..d740674 100644 --- a/src/main/resources/static/finalflux/systemintegration/vdi-daas.html +++ b/src/main/resources/static/finalflux/systemintegration/vdi-daas.html @@ -5,9 +5,9 @@ VDI & DaaS - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/systemintegration/vlan.html b/src/main/resources/static/finalflux/systemintegration/vlan.html index f83fdd1..b8e28df 100644 --- a/src/main/resources/static/finalflux/systemintegration/vlan.html +++ b/src/main/resources/static/finalflux/systemintegration/vlan.html @@ -5,9 +5,9 @@ VLAN - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/wirtschaft/amortisation.html b/src/main/resources/static/finalflux/wirtschaft/amortisation.html index fa8f1d8..5c2c124 100644 --- a/src/main/resources/static/finalflux/wirtschaft/amortisation.html +++ b/src/main/resources/static/finalflux/wirtschaft/amortisation.html @@ -5,9 +5,9 @@ Amortisation - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/wirtschaft/angebotsvergleich.html b/src/main/resources/static/finalflux/wirtschaft/angebotsvergleich.html index de6c0ae..30ab09b 100644 --- a/src/main/resources/static/finalflux/wirtschaft/angebotsvergleich.html +++ b/src/main/resources/static/finalflux/wirtschaft/angebotsvergleich.html @@ -5,9 +5,9 @@ Angebotsvergleich - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/wirtschaft/bezugskalkulation.html b/src/main/resources/static/finalflux/wirtschaft/bezugskalkulation.html index b7cc710..4f16e4e 100644 --- a/src/main/resources/static/finalflux/wirtschaft/bezugskalkulation.html +++ b/src/main/resources/static/finalflux/wirtschaft/bezugskalkulation.html @@ -5,9 +5,9 @@ Bezugskalkulation - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/wirtschaft/harvard_konzept.html b/src/main/resources/static/finalflux/wirtschaft/harvard_konzept.html index 0114406..bd13caa 100644 --- a/src/main/resources/static/finalflux/wirtschaft/harvard_konzept.html +++ b/src/main/resources/static/finalflux/wirtschaft/harvard_konzept.html @@ -5,9 +5,9 @@ Harvard-Konzept - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/wirtschaft/kosten_nutzen.html b/src/main/resources/static/finalflux/wirtschaft/kosten_nutzen.html index a7f6c4d..a321797 100644 --- a/src/main/resources/static/finalflux/wirtschaft/kosten_nutzen.html +++ b/src/main/resources/static/finalflux/wirtschaft/kosten_nutzen.html @@ -5,9 +5,9 @@ Kosten-Nutzen-Vergleich - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/wirtschaft/make_or_buy.html b/src/main/resources/static/finalflux/wirtschaft/make_or_buy.html index c158abc..321ec2d 100644 --- a/src/main/resources/static/finalflux/wirtschaft/make_or_buy.html +++ b/src/main/resources/static/finalflux/wirtschaft/make_or_buy.html @@ -5,9 +5,9 @@ Make or Buy - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/wirtschaft/marktformen.html b/src/main/resources/static/finalflux/wirtschaft/marktformen.html index 9fcb16c..73ab465 100644 --- a/src/main/resources/static/finalflux/wirtschaft/marktformen.html +++ b/src/main/resources/static/finalflux/wirtschaft/marktformen.html @@ -5,9 +5,9 @@ Marktformen - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/wirtschaft/nutzwertanalyse.html b/src/main/resources/static/finalflux/wirtschaft/nutzwertanalyse.html index 3a1f68a..3cefb69 100644 --- a/src/main/resources/static/finalflux/wirtschaft/nutzwertanalyse.html +++ b/src/main/resources/static/finalflux/wirtschaft/nutzwertanalyse.html @@ -5,9 +5,9 @@ Nutzwertanalyse - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/wirtschaft/ratendarlehen.html b/src/main/resources/static/finalflux/wirtschaft/ratendarlehen.html index df3b436..c21bbaf 100644 --- a/src/main/resources/static/finalflux/wirtschaft/ratendarlehen.html +++ b/src/main/resources/static/finalflux/wirtschaft/ratendarlehen.html @@ -5,9 +5,9 @@ Ratendarlehen - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/wirtschaft/rentabilitätsrechnung.html b/src/main/resources/static/finalflux/wirtschaft/rentabilitätsrechnung.html index 75bb33c..1cf98fa 100644 --- a/src/main/resources/static/finalflux/wirtschaft/rentabilitätsrechnung.html +++ b/src/main/resources/static/finalflux/wirtschaft/rentabilitätsrechnung.html @@ -5,9 +5,9 @@ Rentabilitätsrechnung - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/wirtschaft/roi.html b/src/main/resources/static/finalflux/wirtschaft/roi.html index 7b72e44..5a5ea0e 100644 --- a/src/main/resources/static/finalflux/wirtschaft/roi.html +++ b/src/main/resources/static/finalflux/wirtschaft/roi.html @@ -5,9 +5,9 @@ Return on Investment - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/wirtschaft/vertragsarten.html b/src/main/resources/static/finalflux/wirtschaft/vertragsarten.html index 9f20f7f..c9a8ad4 100644 --- a/src/main/resources/static/finalflux/wirtschaft/vertragsarten.html +++ b/src/main/resources/static/finalflux/wirtschaft/vertragsarten.html @@ -5,9 +5,9 @@ Vertragsarten - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/wirtschaft/win_win_strategie.html b/src/main/resources/static/finalflux/wirtschaft/win_win_strategie.html index d89bf47..e137c9e 100644 --- a/src/main/resources/static/finalflux/wirtschaft/win_win_strategie.html +++ b/src/main/resources/static/finalflux/wirtschaft/win_win_strategie.html @@ -5,9 +5,9 @@ Win-Win-Strategie - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/finalflux/wirtschaft/wirtschaftssektoren.html b/src/main/resources/static/finalflux/wirtschaft/wirtschaftssektoren.html index 570c1d3..7314e9f 100644 --- a/src/main/resources/static/finalflux/wirtschaft/wirtschaftssektoren.html +++ b/src/main/resources/static/finalflux/wirtschaft/wirtschaftssektoren.html @@ -5,9 +5,9 @@ Wirtschaftssektoren - FinalProtocol AP1 - + - +
diff --git a/src/main/resources/static/js/accessibility.js b/src/main/resources/static/js/accessibility.js index f4cd5c6..3e52b77 100644 --- a/src/main/resources/static/js/accessibility.js +++ b/src/main/resources/static/js/accessibility.js @@ -5,8 +5,17 @@ apply(); function applySkin(){var root=document.querySelector('[data-a11y-skin]'),skin=root&&root.getAttribute('data-a11y-skin');if(!skin&&document.querySelector('.mm-body'))skin='mindmatch';if(!skin&&document.querySelector('.tt-body'))skin='techtacular';if(!skin&&document.querySelector('.dl-body,.dlg-body'))skin='devlab';if(!skin&&document.querySelector('.ss-body'))skin='syntaxsaga';if(!skin&&document.querySelector('.finalflux-shell,.finalflux-page'))skin='finalflux';if(!skin&&document.querySelector('.esc-app'))skin='codeescape';if(!skin&&document.querySelector('.bh-app'))skin='bughunter';if(!skin&&document.querySelector('.sc-app'))skin='serviceclash';if(!skin&&document.querySelector('.nw-app'))skin='networker';if(skin)document.body.classList.add('mf-a11y-skin-'+skin);} function button(id,icon,label,detail){return '';} function init(){if(document.querySelector('.mf-a11y-trigger'))return;var trigger=document.createElement('button');trigger.type='button';trigger.className='mf-a11y-trigger';trigger.setAttribute('aria-label','Barrierefreiheit öffnen');trigger.setAttribute('aria-expanded','false');trigger.setAttribute('aria-controls','mf-a11y-panel');trigger.innerHTML=''; -var panel=document.createElement('section');panel.id='mf-a11y-panel';panel.className='mf-a11y-panel';panel.hidden=true;panel.setAttribute('role','dialog');panel.setAttribute('aria-modal','false');panel.setAttribute('aria-labelledby','mf-a11y-title');panel.innerHTML='

Barrierefreiheit

'+button('font','T⁺','Text vergrößern','100 %')+button('contrast','◐','Hochkontrast')+button('color','◉','Farbenblind-Modus')+button('mono','◒','Monochrom')+button('readable','Aa','Lesemodus (Dyslexie)','Verdana + Abstände')+button('links','🔗','Links unterstreichen')+button('motion','Ⅱ','Animationen stoppen')+button('cursor','➤','Großer Cursor')+button('reset','↺','Alles zurücksetzen')+'
'; -document.body.appendChild(trigger);document.body.appendChild(panel);var close=panel.querySelector('.mf-a11y-close');function paint(){panel.querySelectorAll('[data-a11y]').forEach(function(b){var id=b.dataset.a11y,on=id==='font'?state.font>100:id==='motion'?!state.motion:id==='reset'?false:!!state[id];b.setAttribute('aria-pressed',on);if(id==='font')b.querySelector('small').textContent=state.font+' %';});} +var panel=document.createElement('section');panel.id='mf-a11y-panel';panel.className='mf-a11y-panel';panel.hidden=true;panel.setAttribute('role','dialog');panel.setAttribute('aria-modal','false');panel.setAttribute('aria-labelledby','mf-a11y-title');panel.innerHTML='

Barrierefreiheit

'+button('font','T⁺','Text vergrößern','100 %')+button('contrast','◐','Hochkontrast','immer dunkel')+button('color','◉','Farbenblind-Modus')+button('mono','◒','Monochrom')+button('readable','Aa','Lesemodus (Dyslexie)','Verdana + Abstände')+button('links','🔗','Links unterstreichen')+button('motion','Ⅱ','Animationen stoppen')+button('cursor','➤','Großer Cursor')+button('reset','↺','Alles zurücksetzen')+'
'; +document.body.appendChild(trigger);document.body.appendChild(panel);var close=panel.querySelector('.mf-a11y-close'); +function paint(){panel.querySelectorAll('[data-a11y]').forEach(function(b){var id=b.dataset.a11y; +if(id==='font'){var on=state.font>100;b.classList.toggle('is-active',on);b.removeAttribute('aria-pressed');b.setAttribute('aria-label','Textgröße ändern – aktuell '+state.font+' %');var s=b.querySelector('small');if(s)s.textContent=state.font+' %';} +else if(id==='reset'){b.removeAttribute('aria-pressed');} +else{b.setAttribute('aria-pressed',id==='motion'?!state.motion:!!state[id]);}});} var host=document.querySelector('.mf-a11y-host,.mf-tools,.tt-header-tools,.mm-header-tools,.ss-header-tools,.dlg-header-tools,.mf-theme-float');if(host){host.insertBefore(trigger,host.firstChild);}else{var utility=document.createElement('div');utility.className='mf-a11y-utility';utility.setAttribute('aria-label','Globale Werkzeuge');utility.appendChild(trigger);document.body.insertBefore(utility,document.body.firstChild);} -function hide(){panel.hidden=true;trigger.setAttribute('aria-expanded','false');trigger.focus();}function show(){panel.hidden=false;trigger.setAttribute('aria-expanded','true');paint();close.focus();}trigger.addEventListener('click',function(){panel.hidden?show():hide();});close.addEventListener('click',hide);window.addEventListener('keydown',function(e){if(e.key==='Escape'&&!panel.hidden)hide();});panel.addEventListener('click',function(e){var b=e.target.closest('[data-a11y]');if(!b)return;var id=b.dataset.a11y;if(id==='reset')state=Object.assign({},defaults);else if(id==='font')state.font=levels[(levels.indexOf(state.font)+1)%levels.length];else if(id==='motion')state.motion=!state.motion;else state[id]=!state[id];apply();paint();});paint();} +function focusables(){return Array.prototype.slice.call(panel.querySelectorAll('button:not([disabled])'));} +function trap(e){if(e.key!=='Tab')return;var f=focusables();if(!f.length)return;var first=f[0],last=f[f.length-1];if(e.shiftKey&&document.activeElement===first){e.preventDefault();last.focus();}else if(!e.shiftKey&&document.activeElement===last){e.preventDefault();first.focus();}} +function onDocPointer(e){if(panel.hidden)return;if(panel.contains(e.target)||trigger.contains(e.target))return;hide();} +function hide(){panel.hidden=true;panel.setAttribute('aria-modal','false');trigger.setAttribute('aria-expanded','false');document.removeEventListener('keydown',trap,true);document.removeEventListener('mousedown',onDocPointer,true);trigger.focus();} +function show(){panel.hidden=false;panel.setAttribute('aria-modal','true');trigger.setAttribute('aria-expanded','true');paint();document.addEventListener('keydown',trap,true);document.addEventListener('mousedown',onDocPointer,true);close.focus();} +trigger.addEventListener('click',function(){panel.hidden?show():hide();});close.addEventListener('click',hide);window.addEventListener('keydown',function(e){if(e.key==='Escape'&&!panel.hidden)hide();});panel.addEventListener('click',function(e){var b=e.target.closest('[data-a11y]');if(!b)return;var id=b.dataset.a11y;if(id==='reset')state=Object.assign({},defaults);else if(id==='font')state.font=levels[(levels.indexOf(state.font)+1)%levels.length];else if(id==='motion')state.motion=!state.motion;else state[id]=!state[id];apply();paint();});paint();} function start(){applySkin();init();}if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',start);else start();})(); diff --git a/src/main/resources/static/js/theme.js b/src/main/resources/static/js/theme.js index 2ca9adf..52a6a53 100644 --- a/src/main/resources/static/js/theme.js +++ b/src/main/resources/static/js/theme.js @@ -21,7 +21,7 @@ if (!document.querySelector('link[data-fluxtimer]')) { var timerCss = document.createElement('link'); timerCss.rel = 'stylesheet'; - timerCss.href = '/css/fluxtimer.css?v=4'; + timerCss.href = '/css/fluxtimer.css?v=5'; timerCss.setAttribute('data-fluxtimer', ''); document.head.appendChild(timerCss); } @@ -35,18 +35,18 @@ if (!document.querySelector('link[data-accessibility]')) { var accessibilityCss = document.createElement('link'); accessibilityCss.rel = 'stylesheet'; - accessibilityCss.href = '/css/accessibility.css?v=5'; + accessibilityCss.href = '/css/accessibility.css?v=6'; accessibilityCss.setAttribute('data-accessibility', ''); document.head.appendChild(accessibilityCss); var accessibilityPlacementCss = document.createElement('link'); accessibilityPlacementCss.rel = 'stylesheet'; - accessibilityPlacementCss.href = '/css/accessibility-placement.css?v=9'; + accessibilityPlacementCss.href = '/css/accessibility-placement.css?v=10'; accessibilityPlacementCss.setAttribute('data-accessibility', ''); document.head.appendChild(accessibilityPlacementCss); } if (!document.querySelector('script[data-accessibility]')) { var accessibilityScript = document.createElement('script'); - accessibilityScript.src = '/js/accessibility.js?v=8'; + accessibilityScript.src = '/js/accessibility.js?v=9'; accessibilityScript.defer = true; accessibilityScript.setAttribute('data-accessibility', ''); document.head.appendChild(accessibilityScript); diff --git a/src/main/resources/templates/achievements.html b/src/main/resources/templates/achievements.html index 21e1595..3eae94a 100644 --- a/src/main/resources/templates/achievements.html +++ b/src/main/resources/templates/achievements.html @@ -4,8 +4,8 @@ SysnaptiK Neural – Trophäen - - + + diff --git a/src/main/resources/templates/legal/datenschutz.html b/src/main/resources/templates/legal/datenschutz.html index 7c187d6..2b0da69 100644 --- a/src/main/resources/templates/legal/datenschutz.html +++ b/src/main/resources/templates/legal/datenschutz.html @@ -5,8 +5,8 @@ SysnaptiK Neural – Datenschutzerklärung - - + +