Skip to content

Commit d229ff3

Browse files
committed
Accessibility fixes
1 parent 0953083 commit d229ff3

File tree

9 files changed

+61
-18
lines changed

9 files changed

+61
-18
lines changed

assets/styles/_user.scss

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,3 +124,14 @@ $soft-teal: #5bc0de;
124124
}
125125
}
126126
}
127+
128+
// Accessibility: Improve text-muted contrast for WCAG AA compliance
129+
// Original $gray-600 (#7d879c) has ~4:1 ratio, this achieves ~6:1
130+
.text-muted {
131+
color: #5a6370 !important;
132+
}
133+
134+
// Accessibility: Make links distinguishable in muted text sections
135+
.text-muted a:not(.btn) {
136+
text-decoration: underline;
137+
}

templates/base.html.twig

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<meta charset="UTF-8">
55
<title>{%- block title -%}{%- endblock -%}{% if app.request.pathInfo != path('homepage') %} | MySpeedPuzzling{% endif %}</title>
66

7-
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
7+
<meta name="viewport" content="width=device-width, initial-scale=1">
88

99
<meta name="description" content="{%- block meta_description -%}{%- endblock -%}{% if block('meta_description') is empty %}{{ 'homepage.meta.description'|trans }}{% endif %}">
1010
<meta name="keywords" content="{%- block meta_keywords -%}{%- endblock -%}{% if block('meta_keywords') is empty %}{% set currentPageKey = app.request.attributes.get('_route') %}{% if currentPageKey == 'homepage' %}{{ 'homepage.meta.keywords'|trans }}{% elseif currentPageKey == 'hub' %}{{ 'hub.meta.keywords'|trans }}{% elseif currentPageKey == 'puzzles' %}{{ 'puzzle_overview.meta.keywords'|trans }}{% elseif currentPageKey == 'ladder' %}{{ 'ladder.meta.keywords'|trans }}{% elseif currentPageKey == 'players' %}{{ 'puzzlers.meta.keywords'|trans }}{% elseif currentPageKey == 'events' %}{{ 'events.meta.keywords'|trans }}{% elseif currentPageKey == 'faq' %}{{ 'faq.meta.keywords'|trans }}{% else %}speed puzzling, puzzle times, jigsaw puzzles, speedpuzzling{% endif %}{% endif %}">
@@ -227,25 +227,25 @@
227227

228228
<!-- Toolbar -->
229229
<div class="navbar-toolbar d-flex align-items-center order-lg-3 ms-lg-3">
230-
<a class="navbar-tool ms-1 ms-lg-0 me-n1 me-lg-2" data-action="click->global-search#toggleSearchBar" href="#">
230+
<a class="navbar-tool ms-1 ms-lg-0 me-n1 me-lg-2" data-action="click->global-search#toggleSearchBar" href="#" aria-label="{{ 'menu.search'|trans }}">
231231
<div class="navbar-tool-icon-box">
232-
<i class="navbar-tool-icon ci-search"></i>
232+
<i class="navbar-tool-icon ci-search" aria-hidden="true"></i>
233233
</div>
234234
<div class="navbar-tool-text ms-n3"><small>{{ 'menu.search'|trans }}</small></div>
235235
</a>
236236

237237
{% if logged_user.profile is null %}
238-
<a class="navbar-tool ms-1 ms-lg-0 me-n1 me-lg-2" href="{{ path('my_profile') }}">
238+
<a class="navbar-tool ms-1 ms-lg-0 me-n1 me-lg-2" href="{{ path('my_profile') }}" aria-label="{{ 'menu.sign_in'|trans }}">
239239
<div class="navbar-tool-icon-box">
240-
<i class="navbar-tool-icon ci-sign-in"></i>
240+
<i class="navbar-tool-icon ci-sign-in" aria-hidden="true"></i>
241241
</div>
242242
<div class="navbar-tool-text ms-n3"><small>{{ 'menu.sign_in'|trans }}</small></div>
243243
</a>
244244
{% else %}
245245
<div class="navbar-tool dropdown ms-1 ms-lg-0 me-n1 me-lg-2">
246-
<a class="dropdown-toggle navbar-tool" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
246+
<a class="dropdown-toggle navbar-tool" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false" aria-label="{{ 'menu.my_profile'|trans }}">
247247
<div class="navbar-tool-icon-box">
248-
<i class="navbar-tool-icon ci-user"></i>
248+
<i class="navbar-tool-icon ci-user" aria-hidden="true"></i>
249249
</div>
250250
<div class="navbar-tool-text ms-n3 no-caret"><small>{{ 'menu.my_profile'|trans }}</small></div>
251251
</a>
@@ -294,23 +294,23 @@
294294
{% endif %}
295295

296296

297-
<a class="navbar-tool ms-1 ms-lg-0 me-n1 me-lg-2 {% if app.request.pathInfo == path('puzzle_add') %}active{% endif %}" rel="nofollow" href="{{ path('puzzle_add') }}">
297+
<a class="navbar-tool ms-1 ms-lg-0 me-n1 me-lg-2 {% if app.request.pathInfo == path('puzzle_add') %}active{% endif %}" rel="nofollow" href="{{ path('puzzle_add') }}" aria-label="{{ 'menu.puzzle_add'|trans }}">
298298
<div class="navbar-tool-icon-box">
299-
<i class="navbar-tool-icon ci-add"></i>
299+
<i class="navbar-tool-icon ci-add" aria-hidden="true"></i>
300300
</div>
301301
<div class="navbar-tool-text ms-n3"><small>{{ 'menu.puzzle_add'|trans }}</small></div>
302302
</a>
303303

304304
{% set notifications_count = notifications_count|default(null) ?: logged_user.profile is not null ? get_notifications.countUnreadForPlayer(logged_user.profile.playerId) :0 %}
305305

306-
<a class="navbar-tool ms-1 ms-lg-0 me-1 me-lg-2 {% if app.request.pathInfo == path('notifications') %}active{% endif %}" rel="nofollow" href="{{ path('notifications') }}" data-turbo-prefetch="false">
306+
<a class="navbar-tool ms-1 ms-lg-0 me-1 me-lg-2 {% if app.request.pathInfo == path('notifications') %}active{% endif %}" rel="nofollow" href="{{ path('notifications') }}" data-turbo-prefetch="false" aria-label="{{ 'accessibility.notifications_count'|trans({'%count%': notifications_count}) }}">
307307
<div class="navbar-tool-icon-box {{ notifications_count > 0 ? 'bg-secondary' }}">
308-
<span class="navbar-tool-label {{ notifications_count == 0 ? 'bg-secondary text-dark' }}">{{ notifications_count }}</span>
309-
<i class="navbar-tool-icon ci-bell"></i>
308+
<span class="navbar-tool-label {{ notifications_count == 0 ? 'bg-secondary text-dark' }}" aria-hidden="true">{{ notifications_count }}</span>
309+
<i class="navbar-tool-icon ci-bell" aria-hidden="true"></i>
310310
</div>
311311
</a>
312312

313-
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-expanded="false">
313+
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-expanded="false" aria-controls="navbarCollapse" aria-label="{{ 'accessibility.toggle_navigation'|trans }}">
314314
<span class="toggler-bar"></span>
315315
<span class="toggler-bar"></span>
316316
<span class="toggler-bar"></span>
@@ -451,8 +451,8 @@
451451
<div class="col-sm-6 mt-2 mt-sm-0">
452452
<div class="fs-xs text-muted text-center text-sm-end">
453453
<p class="fs-md mb-2">
454-
<a href="https://www.instagram.com/myspeedpuzzling/" target="_bkank"><i class="bi-instagram"></i></a>
455-
<a class="ms-2" href="https://github.com/MySpeedPuzzling/myspeedpuzzling.com" target="_blank"><i class="bi-github"></i></a>
454+
<a href="https://www.instagram.com/myspeedpuzzling/" target="_blank" rel="noopener" aria-label="Instagram"><i class="bi-instagram" aria-hidden="true"></i></a>
455+
<a class="ms-2" href="https://github.com/MySpeedPuzzling/myspeedpuzzling.com" target="_blank" rel="noopener" aria-label="GitHub"><i class="bi-github" aria-hidden="true"></i></a>
456456
</p>
457457
{{ 'footer.created_with_love'|trans({'%simona%': '<a href="mailto:[email protected]">Simona&nbsp;Mikešová</a>', '%jan%': '<a href="https://janmikes.cz">Jan&nbsp;Mikeš</a>' })|raw }}
458458
</div>

templates/components/GlobalSearch.html.twig

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,19 @@
77
class="btn btn-secondary border-0 px-3 fs-6"
88
data-action="click->barcode-scanner#toggle"
99
data-barcode-scanner-target="toggleButton"
10+
aria-label="{{ 'accessibility.barcode_scanner'|trans }}"
1011
>
11-
<i class="bi-upc-scan"></i>
12+
<i class="bi-upc-scan" aria-hidden="true"></i>
1213
</button>
1314
{% else %}
1415
<button
1516
class="btn btn-secondary border-0 px-3 fs-6 position-relative"
1617
data-bs-toggle="modal"
1718
data-bs-target="#membersExclusiveModal"
19+
aria-label="{{ 'accessibility.barcode_scanner'|trans }}"
1820
>
19-
<i class="bi-upc-scan text-muted"></i>
20-
<i class="ci-locked position-absolute fs-sm" style="right: 2px;top: 7px;"></i>
21+
<i class="bi-upc-scan text-muted" aria-hidden="true"></i>
22+
<i class="ci-locked position-absolute fs-sm" style="right: 2px;top: 7px;" aria-hidden="true"></i>
2123
</button>
2224
{% endif %}
2325

translations/messages.cs.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ menu:
2323
events: "Eventy"
2424
export_data: "Export dat"
2525

26+
accessibility:
27+
toggle_navigation: "Přepnout navigaci"
28+
barcode_scanner: "Skenovat čárový kód"
29+
notifications_count: "Oznámení (%count%)"
30+
2631
form:
2732
visibility: "Viditelnost"
2833
visibility_public: "Veřejná"

translations/messages.de.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ menu:
2323
events: "Veranstaltungen"
2424
export_data: "Daten exportieren"
2525

26+
accessibility:
27+
toggle_navigation: "Navigation umschalten"
28+
barcode_scanner: "Barcode scannen"
29+
notifications_count: "Benachrichtigungen (%count%)"
30+
2631
form:
2732
visibility: "Sichtbarkeit"
2833
visibility_public: "Öffentlich"

translations/messages.en.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ menu:
2323
events: "Events"
2424
export_data: "Export data"
2525

26+
accessibility:
27+
toggle_navigation: "Toggle navigation"
28+
barcode_scanner: "Scan barcode"
29+
notifications_count: "Notifications (%count%)"
30+
2631
form:
2732
visibility: "Visibility"
2833
visibility_public: "Public"

translations/messages.es.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ menu:
2323
puzzle_library: "Biblioteca de puzzles"
2424
export_data: "Exportar datos"
2525

26+
accessibility:
27+
toggle_navigation: "Alternar navegación"
28+
barcode_scanner: "Escanear código de barras"
29+
notifications_count: "Notificaciones (%count%)"
30+
2631
navigation:
2732
home: "Inicio"
2833

translations/messages.fr.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ menu:
2323
puzzle_library: "Bibliothèque de puzzles"
2424
export_data: "Exporter les données"
2525

26+
accessibility:
27+
toggle_navigation: "Basculer la navigation"
28+
barcode_scanner: "Scanner le code-barres"
29+
notifications_count: "Notifications (%count%)"
30+
2631
navigation:
2732
home: "Accueil"
2833

translations/messages.ja.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ menu:
2323
puzzle_library: "パズルライブラリ"
2424
export_data: "データエクスポート"
2525

26+
accessibility:
27+
toggle_navigation: "ナビゲーション切替"
28+
barcode_scanner: "バーコードスキャン"
29+
notifications_count: "通知 (%count%)"
30+
2631
navigation:
2732
home: "ホーム"
2833

0 commit comments

Comments
 (0)