Skip to content

Accessibility

What a build refuses to ship, and what nothing checks.

This page does not claim that the site meets an accessibility standard. It is an inventory: the accessibility rules this site cannot ship without, each one named by the test that enforces it, and underneath, the longer list of things no test here looks at. The second list is the useful one, because it is the list a statement like this usually leaves out.

Last measured Measured from the code, not reviewed by counsel Why this is not an agreement

Enforced

Nine rules a page cannot be shipped without.

Each runs over every page in this folder, and the page list is read off the directory rather than typed into the test — so a page added tomorrow is covered the moment it exists instead of being exempt until somebody registers it. Each panel names the file and the test, so the rule can be read rather than taken on this page’s word.

The page declares its language

Every page opens with its language set. A screen reader that does not know the language reads English prose with the wrong pronunciation rules, and a translation tool guesses. It is one attribute and it is checked on every page rather than on the one that was being written at the time.

test/siteAnasayfa.test.ts :: yapı: tek h1, her bölümün başlığı var, tekrarlı id yok

Exactly one top-level heading, and no repeated identifier

One h1 per page, every section carrying a heading, and no identifier used twice. Two headings at the top level leave a screen-reader user without a single entry point; a duplicated identifier breaks every link and label that points at it, and it breaks silently.

test/siteAnasayfa.test.ts :: yapı: tek h1, her bölümün başlığı var, tekrarlı id yok

A main landmark that can actually be found

Every page has one main region, and the skip link at the very top of the document points at it. The enforcement here is indirect and worth describing honestly: several honesty checks read the main region to scan what the page claims, and when they cannot find one they report main not found rather than reporting nothing. A page without a main landmark therefore turns those tests red instead of passing them quietly.

test/siteAnasayfa.test.ts :: dürüstlük: olmayan bir denetim/sertifika İDDİA EDİLMİYOR

Reduced motion stops motion on five axes at once

When the operating system is set to reduce motion, this site zeroes five separate properties on every element: animation duration, animation delay, animation iteration count, transition duration and transition delay. The delays matter as much as the durations, and that was learned the hard way — an earlier version zeroed duration and iteration count only, so two long-delayed elements kept animating in reduce mode while the rule looked correct.

The test reads the block with its own comments stripped out first, because the block explains itself and names the very property it sets. A check that accepts the sentence describing a rule as the rule would survive deleting the rule.

test/siteAnasayfa.test.ts :: hareket: az-hareket bloğu DÖRT ekseni birden sıfırlıyor (süre + GECİKME)

test/siteAnasayfa.test.ts :: kalibrasyon: az-hareket ayrıştırıcısı iki yönlü

An animation that is frozen still ends on something visible

Reducing motion makes an animation jump to its last frame. If that last frame hides the element — transparent, or moved off to one side — then honouring the preference deletes content. Every keyframe set on this site is checked to end somewhere visible, and one strip that could not satisfy it by rule turns its own animation off by name instead.

test/siteAnasayfa.test.ts :: hareket: donan son kare görünür bir şeyi gizlemiyor

Nothing is hidden by a script that might not run

The reveal-on-scroll effect starts elements transparent, which means a failed script would leave a blank page. The rule that does the hiding is only allowed to exist underneath a flag the script itself sets, so when the script does not run the content is simply there. The test rejects any such rule written without that ancestor.

test/siteAnasayfa.test.ts :: hareket: tek desen; `.ac` yalnız `.js` altında saklanır, reduced-motion açar

Every page offers the same map, and none is a dead end

Two separate rules. The first: every page lists the same set of internal pages in its footer, so the site map does not change depending on which page you landed on. The second: no shipped page is an orphan — if nothing links to a page, a keyboard or screen-reader user has no route to it at all, and the test names it.

A third rule covers the hub pages: a hub has to link its own sub-pages from inside the main region, not only from the footer. Reaching a page through a footer you have to tab past the whole document to find is not the same as reaching it from the page that is about it.

test/siteAnasayfa.test.ts :: ayak haritası: her sayfa AYNI iç sayfa kümesini listeliyor (aykırı üye yok)

test/siteAnasayfa.test.ts :: ayak haritası: sevk edilen hiçbir sayfa YETİM değil

test/siteAnasayfa.test.ts :: hub haritası: her hub alt sayfalarını <main> İÇİNDEN bağlıyor

Header and footer are identical on every page, to the byte

The navigation and the footer are compared by checksum across every shipped page. A navigation that drifts page to page has to be relearned, and for somebody tabbing through it the ordering is the interface. One generator writes both blocks; this test is what keeps that true.

test/siteNavAyak.test.ts :: nav ve ayak: sevk edilen HER sayfada BİREBİR aynı

Text colour against the colour actually behind it

Every text-bearing element on all 57 shipped pages is resolved to a pair — the colour the text ends up with, and the colour genuinely behind it — and the ratio between the two has to reach the usual minimum for normal-size text. Resolving the background is the whole job: it is rarely set on the element itself, so the check walks up the ancestors, respects which rule wins, and follows a token through its chain.

It was written before the palette work rather than after, and the first run was red. A dark section was re-skinning its text by listing class names, and one note paragraph was not on that list, so it kept a light-surface colour on a dark background on five legal pages. The reading was 3.09 against a minimum of 4.5. The fix was not to add the missing name to the list — a list like that is closed, and the next component written would be born exempt from it too — but to re-skin the token itself, which closes the whole class at once. Both halves are in the same change as this sentence.

What it does not see is worth stating, because it is where the next defect of this kind will live: rules that only apply at a particular screen width, rules that depend on a state or an attribute rather than a class, and backgrounds that are part gradient or part translucent. The last of those are reported as unresolved rather than counted as clean, and the selectors in the middle group are pinned by name so that adding one turns the gate red instead of slipping past it.

test/siteKontrast.test.ts :: KAPI: sevk edilen hiçbir metin düğümü kontrast eşiğinin ALTINDA değil

test/siteKontrast.test.ts :: ÖLÇÜLEMEDİ kovası AYRI: çözülemeyen zemin TEMİZ sayılmaz, SINIFIYLA bildirilir

test/siteKontrast.test.ts :: KÖR NOKTA: statiğin görmediği DİNLENME seçicileri ADIYLA pinli

Two more rules belong here by effect rather than by intent. Colour and type size may only come from one token file, which is what made the contrast check above possible to write at all; and no page may carry an inline script, an inline style or an inline event handler, which keeps behaviour out of the markup. Both are listed further down with what they do and do not prove.

Per page

Four rules that only cover the page they were written for.

Scope is the part of a claim that is easiest to overstate, so these are kept apart from the eight above. Each is real and enforced, and each covers one page or one family rather than the site.

Comparison table

An icon-only cell still reads as a word

A tick or a dash carries no text, so each of those cells also carries a word placed off-screen for assistive software. Without it the row reads as a label followed by silence. Every mark cell is checked, not a sample.

test/siteKarsilastirma.test.ts

Both wide tables

A table you can scroll with a keyboard

A table wider than the screen scrolls sideways, and a container that answers only a pointer cannot be scrolled from a keyboard. Both wide tables sit in a focusable, named region, and the name is checked as well as the focus.

test/siteFiyat.test.ts

Scrolling strips

The duplicated track is hidden from readers

A continuous strip needs its contents twice to loop seamlessly, so the second copy is marked hidden from assistive software — otherwise every item in it is announced twice. Both tracks and the marking on the second are checked.

test/siteSektor.test.ts

Sections and tabs

Regions are named, tabs say which is current

Sections are tied to their own heading, so a region has a name rather than being an unlabelled box, and the tab strips declare which tab is current. Several page tests cover this; it is one family, not one rule.

test/siteEntegrasyon.test.ts

Measured once

Measured in a browser, written down, and not enforced.

Some things cannot be read off a file; they need a browser laying the page out. Those were measured, the figures written next to the rule they describe, and no test re-runs them. A one-off measurement is a record of one day rather than a promise about the next, so it is kept apart from the list above.

Measured, and the figures recorded

  • No sideways scrolling at nine screen widths, from the narrowest phone to a wide desktop
  • Tap targets in the navigation at or above the usual minimum, written into the stylesheet as a spacing expression rather than a loose number
  • No animation advancing in reduce mode, with the same count taken in normal mode so the measurement is known not to be blind
  • The two frosted surfaces checked against the text on them, because a translucent background is the one place a token cannot tell you the answer

At one width the navigation deliberately wraps to two rows. Fitting one row would have meant hiding a link, and hiding a link to make a measurement look tidier is the wrong trade.

What those figures do not establish

  • They were taken on one engine on one day; nothing re-checks them when a stylesheet changes
  • The tap-target figure covers the navigation, which is where it was measured — not every control on every page
  • The frosted panels and the hatched placeholder are the one place a stylesheet cannot answer: their background is part gradient, part translucent, so the colour check above reports them as unresolved rather than as clean

Writing a figure next to the rule it describes beats not writing it, and is still weaker than a test. This page would rather say which of the two it has.

Colour used to be the honest gap on this page, and it is worth saying exactly what changed. Until the ninth of October nothing here read a colour pair; the rule that a colour may only come from the single token file was the groundwork, not the measurement, and this paragraph said so. There is now a test that does the measurement on every shipped page, listed among the rules above, and it is a different kind of claim from the storefront one: the widget test sweeps the colour space for an accent a shop owner might pick, and guards the widget stylesheet, while this one resolves what is actually on these pages. Two separate scopes, each named where it applies, and neither borrowing the other’s name. What is still measured once rather than enforced is above; what nobody has measured at all is below.

Unenforced

Shipped on every page, and nothing checks it.

These are built and working today. They sit here rather than in the first section because no test would notice them disappearing — and which of those two a promise is, is worth knowing.

Built, unguarded

Skip to content

The first focusable thing on every page is a link straight to the main region, hidden until it takes focus. It is on every page shipped from this folder, and no test asserts it. Somebody removing it from the shared template would turn nothing red.

Built, unguarded

A visible focus ring

Keyboard focus draws a thick outline with a gap around it, set once globally with a lighter variant for dark sections, plus three component overrides where a scroll container needed the ring on a different edge. Four stylesheets carry those rules, and no test reads any of them.

Partly guarded

Text for screen readers only

The helper that places text off-screen without hiding it from assistive software is defined once and used on every page. Where it is used is only checked on the comparison table and the price tables; everywhere else its use is a convention rather than a rule.

Not built at all

High contrast and forced colours

Two display preferences are not handled anywhere in these stylesheets: the increased-contrast setting, with no rules, and the forced-colours mode some operating systems use, also with no rules. On the second the page will render in the system palette and has never been looked at in that state.

The numbers in this section are read out of the stylesheets by the test for this page, not typed in. That is the point of the section: an honest list of gaps is the first thing to go stale, so the counts are pinned to what the files actually contain and the sentence breaks when they change.

Never measured

Four things nobody here has tested, and one sentence we will not write.

None of these is hard to measure. None has been measured, which is a different statement from being fine, and keeping those two apart is most of what this page is for.

  • No screen reader has been through these pages

    Not one page has been opened with a screen reader and listened to end to end, on any platform. Correct markup makes a good reading likely, not certain: reading order, how the navigation panels announce themselves, and whether these accordions make sense heard rather than seen are all unknown.

  • No keyboard-only pass

    Nobody has tabbed through a whole page without a mouse. The focus ring exists and the menu panels are reachable without a script, but the order things arrive in, whether focus is ever trapped, and whether the skip link lands where it should have never been walked.

  • No zoom or reflow measurement

    The layout was measured at nine widths, which is a different test. Text enlarged on its own, and the page at heavy browser zoom, were never checked for clipped content or a second scrollbar. The token scale makes it plausible; plausible is not measured.

  • No audit, and no review by anyone outside this work

    Nobody independent has looked at these pages for accessibility, and there is no report to show. Every finding on this page came from the same place as the code it describes, which is the weakest kind of review there is.

So the sentence this page will not write is the usual one: that the site conforms to a particular accessibility standard at a particular level. Naming a standard claims every item in it, and most of those items are not in the list above — we have not counted them, let alone passed them. What is here is eight rules that run on every build, four that cover one page each, a handful of figures measured once in a browser, and the four gaps just listed. There is also no address on this site to send a correction to, and no form that could carry one: the contact gap is tracked on the legal hub alongside the other things missing from every legal page here, and the route that works without an address is on the data requests page. Until one exists, the honest version is that this page is a statement you can check rather than a channel you can use.