Fix WCAG AA contrast on active tab label and border

primary color (#e4e0e1) is near-white against the base-100 background
(#faf7f5), giving ~1.1:1 contrast - essentially invisible. Replace with
text-base-content + border-neutral (#291334, ~15.9:1 against base-100).

Active state distinction is now conveyed by border-neutral underline +
font-semibold (not by color alone, satisfying WCAG 1.4.1 Use of Color).
Inactive tabs retain font-medium + border-transparent.

Also remove hover:text-primary from inactive tabs - primary is near-white
so that hover would have made inactive tab text invisible on hover.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
pull/599/head
Marcelo Paiva 3 weeks ago
parent 230e963f81
commit a9c96373c2

@ -18,10 +18,10 @@ export default class extends HTMLElement {
const isSelected = tab === selectedTab const isSelected = tab === selectedTab
tab.setAttribute('aria-selected', isSelected ? 'true' : 'false') tab.setAttribute('aria-selected', isSelected ? 'true' : 'false')
tab.setAttribute('tabindex', isSelected ? '0' : '-1') tab.setAttribute('tabindex', isSelected ? '0' : '-1')
tab.classList.toggle('border-primary', isSelected) tab.classList.toggle('border-neutral', isSelected)
tab.classList.toggle('text-primary', isSelected) tab.classList.toggle('font-semibold', isSelected)
tab.classList.toggle('border-transparent', !isSelected) tab.classList.toggle('border-transparent', !isSelected)
tab.classList.toggle('text-base-content', !isSelected) tab.classList.toggle('font-medium', !isSelected)
}) })
this._panels.forEach((panel) => { this._panels.forEach((panel) => {
panel.hidden = panel.id !== selectedTab.getAttribute('aria-controls') panel.hidden = panel.id !== selectedTab.getAttribute('aria-controls')

@ -11,7 +11,7 @@
type="button" type="button"
:aria-selected="!textViewActive ? 'true' : 'false'" :aria-selected="!textViewActive ? 'true' : 'false'"
:tabindex="!textViewActive ? 0 : -1" :tabindex="!textViewActive ? 0 : -1"
:class="['px-4 py-2 text-sm font-medium border-b-2 -mb-px focus:outline-none', !textViewActive ? 'border-primary text-primary' : 'border-transparent text-base-content hover:text-primary']" :class="['px-4 py-2 text-sm border-b-2 -mb-px focus:outline-none', !textViewActive ? 'border-neutral text-base-content font-semibold' : 'border-transparent text-base-content font-medium']"
@click="textViewActive = false" @click="textViewActive = false"
@keydown="onTabKeydown($event, false)" @keydown="onTabKeydown($event, false)"
> >
@ -22,7 +22,7 @@
type="button" type="button"
:aria-selected="textViewActive ? 'true' : 'false'" :aria-selected="textViewActive ? 'true' : 'false'"
:tabindex="textViewActive ? 0 : -1" :tabindex="textViewActive ? 0 : -1"
:class="['px-4 py-2 text-sm font-medium border-b-2 -mb-px focus:outline-none', textViewActive ? 'border-primary text-primary' : 'border-transparent text-base-content hover:text-primary']" :class="['px-4 py-2 text-sm border-b-2 -mb-px focus:outline-none', textViewActive ? 'border-neutral text-base-content font-semibold' : 'border-transparent text-base-content font-medium']"
@click="textViewActive = true" @click="textViewActive = true"
@keydown="onTabKeydown($event, true)" @keydown="onTabKeydown($event, true)"
> >

@ -102,12 +102,12 @@
class="flex border-b border-base-300 px-0.5 mb-2"> class="flex border-b border-base-300 px-0.5 mb-2">
<button role="tab" id="tab-pdf" aria-selected="true" <button role="tab" id="tab-pdf" aria-selected="true"
aria-controls="panel-pdf" tabindex="0" aria-controls="panel-pdf" tabindex="0"
class="px-4 py-2 text-sm font-medium border-b-2 -mb-px border-primary text-primary"> class="px-4 py-2 text-sm font-semibold border-b-2 -mb-px border-neutral text-base-content">
<%= t('pdf_view') %> <%= t('pdf_view') %>
</button> </button>
<button role="tab" id="tab-text" aria-selected="false" <button role="tab" id="tab-text" aria-selected="false"
aria-controls="panel-text" tabindex="-1" aria-controls="panel-text" tabindex="-1"
class="px-4 py-2 text-sm font-medium border-b-2 -mb-px border-transparent text-base-content hover:text-primary"> class="px-4 py-2 text-sm font-medium border-b-2 -mb-px border-transparent text-base-content">
<%= t('text_view') %> <%= t('text_view') %>
</button> </button>
</div> </div>

@ -70,12 +70,12 @@
class="flex border-b border-base-300 mb-2 sticky top-[60px] z-40 bg-base-100 -mx-2 px-2"> class="flex border-b border-base-300 mb-2 sticky top-[60px] z-40 bg-base-100 -mx-2 px-2">
<button role="tab" id="tab-pdf" aria-selected="true" <button role="tab" id="tab-pdf" aria-selected="true"
aria-controls="panel-pdf" tabindex="0" aria-controls="panel-pdf" tabindex="0"
class="px-4 py-2 text-sm font-medium border-b-2 -mb-px border-primary text-primary"> class="px-4 py-2 text-sm font-semibold border-b-2 -mb-px border-neutral text-base-content">
<%= t('pdf_view') %> <%= t('pdf_view') %>
</button> </button>
<button role="tab" id="tab-text" aria-selected="false" <button role="tab" id="tab-text" aria-selected="false"
aria-controls="panel-text" tabindex="-1" aria-controls="panel-text" tabindex="-1"
class="px-4 py-2 text-sm font-medium border-b-2 -mb-px border-transparent text-base-content hover:text-primary"> class="px-4 py-2 text-sm font-medium border-b-2 -mb-px border-transparent text-base-content">
<%= t('text_view') %> <%= t('text_view') %>
</button> </button>
</div> </div>

Loading…
Cancel
Save