Skip to main content
drupalreleases
Release: Drupal 11.4.9 — Update released for Drupal core (11.4.9)! Release: Better Exposed Filters 7.2.0 — Minor update available for module better_exposed_filters (7.2.0). Release: Bootstrap 8.x-3.43 — Minor update available for theme bootstrap (8.x-3.43). Release: Svg Image 3.2.5 — Minor update available for module svg_image (3.2.5). Release: Book 3.0.8 — Minor update available for module book (3.0.8). Release: Tagify 2.0.5 — Minor update available for module tagify (2.0.5). Release: Editoria11y Accessibility Checker 3.0.11 — Minor update available for module editoria11y (3.0.11). Release: Events Log Track 5.0.1 — Minor update available for module events_log_track (5.0.1). Module Revived: @font-your-face 4.3.0 — Module fontyourface updated after 7 months of inactivity (4.3.0). Security Coverage: Open Y Branch Selector — Module openy_branch_selector now has official Drupal security advisory coverage.

Ágora Transparency Theme

Security covered Drupal 11 · not 10
View on drupal.org

Ágora Theme is a front-end theme designed for the Ágora Transparency site template. It focuses on accessibility, meeting WCAG 2.2 AA standards, and includes self-hosted fonts, accessible tables and forms, and supports Drupal Canvas.

Ágora Theme is the front end of a transparency portal. Contracts, grants, agreements, salaries, budgets, datasets — the registers a public body is obliged to publish and that almost nobody can actually read. This theme exists to make them readable: by a citizen on a phone, by a screen-reader user, by a keyboard user, and by a journalist sorting a long table.

Accessibility here is a gate, not an intention. Every push to the 1.x branch runs an axe-core suite that blocks the pipeline. It has been seen red: an image with no alt attribute, pushed on purpose to test the gate, failed the pipeline, and the log named the rule. A green that has never been red is a decoration, not a test.

It is a standalone theme: no base theme, no CSS framework and no build step, and its only script loads only where a table needs it. You can install it on its own. It is designed to be installed by the Ágora Transparency site template, which places its blocks and ships the content types and registers it renders.

Site template: Ágora Transparency

Four things the pipeline refuses to let regress

The axe gate
Test pages covering the front page, registers, record pages, forms and the sign-in page are scanned with axe-core in headless Chrome, with axe's target-size rule for WCAG 2.2 switched on. A single violation fails the job, and the job blocks the pipeline. Every colour pair, measured
Each colour token declares the foreground-and-background pairs it may be used in, and every pair is checked against the contrast ratio it claims — one of WCAG's own two thresholds. A pair below its threshold fails the pipeline. Every token is paired — none can hide. Keyboard and focus
Visible focus everywhere, targets sized to SC 2.5.8 and checked on every scanned page, and a site logo and name that are one link — one tab stop rather than two. No sideways scroll
A register wider than the screen scrolls inside its own keyboard-reachable box instead of widening the page, and a link the box shows only in part is brought wholly into view when it takes keyboard focus — SC 1.4.10 as a test, not a hope.

Every run prints its own figures — pages scanned, rules run on each page, colour pairs measured — in the pipelines for the 1.x branch.

Why the suite counts what it counts

Two traps shaped this test suite, and both produce a green that is about nothing.

A rule that never ran looks exactly like a rule that passed. axe files an inapplicable rule in a bucket that reads like success. So the suite prints how many rules axe ran on each page, and asserts that the rules it depends on — heading-order and target-size — ran and passed on every page it scanned. If one of them quietly stops applying, the gate fails instead of going quietly greener.

An empty table has no accessibility problems. A view with no results renders no <table> at all, and axe then reports zero violations — truthfully, about nothing. So every check on a table also requires rows to be present, and an empty result fails the gate instead of passing it.

Typography, and why it is not on a CDN

The typeface is self-hosted and freely licensed (OFL). Never a font CDN — not for performance reasons, but because a font CDN sends every visitor's IP address to a third party. For a municipality publishing a transparency portal in the EU, that is a data-protection liability sitting inside the thing that was supposed to demonstrate accountability.

The same principle runs through the theme: no external request leaves the page. No analytics, no CDN, no remote asset.

What it renders

Registers

Exposed filters, sortable accessible tables with caption, scope and header association, pagers, and empty states that say so.

A composed front page

Hero, quick-access cards, aggregate figures, recent activity and service areas. For pages built in Drupal Canvas, it ships its own components: heading, text, section and group.

The furniture

A masthead that keeps one height from page to page, footer link columns, breadcrumbs, status messages, page titles, prose and node pages.

Every template carries the reason it exists, written in a comment above its markup. If a template here does something core does not, the comment says what went wrong without it.

Install

composer require drupal/agora_theme
drush theme:enable agora_theme
drush config:set system.theme default agora_theme

There is nothing to compile. The CSS ships as CSS: no preprocessor, no package.json, no node_modules, and the one script ships as written. The files in the repository are the files Drupal loads.

What it deliberately does not do

  • No base theme. base theme: false. Nothing is inherited and then fought with.
  • No CSS framework. Colour tokens and a spacing scale, not a utility library.
  • No script where there is no table. The only script the theme loads, js/table-scroll.js, is attached only where a table is drawn inside the theme's table scroller. When a link or control in the scroller takes keyboard focus, it scrolls that element wholly into view; it never moves the table under a mouse pointer, and it depends on nothing, not even Drupal's own JavaScript. Without JavaScript the table still works: the scroller is a tab stop and scrolls with the arrow keys. Everything else is a link, a form or CSS.
  • No admin theme opinions. It themes the public site; your editors keep Claro or Gin.

Project status

Stable releases from the 1.x branch, targeting Drupal ^11. Every push to 1.x runs the pipeline on git.drupalcode.org — a Composer build and validation, PHP syntax checks, PHP coding standards and static analysis, spelling, CSS and JavaScript linting, PHP tests, the repository's own invariants and the axe gate — and every job in it is blocking; none is allowed to fail. Each run's figures are in its pipeline log.

Security coverage: stable releases of this project are covered by the Drupal Security Team's advisory policy.

No WCAG conformance is claimed. The theme targets WCAG 2.2 AA. Automated checks — axe and the contrast checker — run on every push, and they cover only part of AA. A formal conformance statement requires manual testing with real assistive technology, and none has been published.

Getting involved

Found something unreadable?

Accessibility reports are the ones that matter most here, and a report from someone using real assistive technology is worth more than any gate we can automate.

Open an issue

Using it for a real body?

Tell us which register broke first. This theme was designed against the registers the Ágora Transparency site template ships, and real bodies always have one more.

Share your case

Contribute

Patches, documentation and translations all help. The whole repository is public, and the same pipeline runs on every merge request.

Get involved

Licence: GPL-2.0-or-later. The theme ships no photographs. Its typeface ships with its own licence text, and the README names the licence and source of every third-party asset in the package — the typeface and the social-network icons in the footer — so their provenance can be checked rather than believed.

Depends on

Dependencies of the latest stable release

No dependencies recorded for this project.

Required by

Tracked projects that depend on this one

No tracked projects depend on this one yet.

Activity

Tracked releases
10
Tracked since
Aug 2026
Latest release
2 weeks ago
Releases (12 mo)
10 ▲ from 0
Maintenance
Active

Release Timeline

Releases

Version Type Core Release date
1.2.1 Stable 11 Sep 24, 2026
1.2.0 Stable 11 Sep 23, 2026
1.1.0 Stable 11 Sep 5, 2026
1.0.7 Stable 11 Sep 1, 2026
1.0.6 Stable 11 Aug 31, 2026
1.0.5 Stable 11 Aug 27, 2026
1.0.3 Stable 11 Aug 27, 2026
1.0.2 Stable 11 Aug 26, 2026
1.0.1 Stable 11 Aug 26, 2026
1.0.0 Stable 11 Aug 25, 2026