Civic / Privacy / Digital Rights
2IA.ORG Accessibility, Responsive Design, and Inclusive-Use Audit
Report summary
The accessibility, responsive design, and inclusive-use audit of the International Intelligence Archive (2IA.org) reveals a platform that fundamentally understands the intersection of civil liberties and inclusive design, yet struggles with the technical execution of dynamic interactive components.
Key topics
- Civic / Privacy / Digital Rights
- Civic
- Privacy
- Digital Rights
- OSINT
- Semantic Systems
- Research Archive
- Audit
- Architecture
Research provenance
For citation, use the report title and canonical URL. Archival presence does not establish authorship or promote report statements into portfolio evidence.
This page renders the archived Markdown as safe, formatted HTML. It is background research and does not become a portfolio claim without evidence review.
Full report
On this page
1. Executive Summary
The accessibility, responsive design, and inclusive-use audit of the International Intelligence Archive (2IA.org) reveals a platform that fundamentally understands the intersection of civil liberties and inclusive design, yet struggles with the technical execution of dynamic interactive components. The independent evaluation, conducted strictly against Web Content Accessibility Guidelines (WCAG) 2.2 Level AA principles, establishes that the publication excels in semantic document structuring, plain-language content delivery, and the minimization of cognitive load. The architectural posture of 2IA.org demonstrates an intentional, low-data footprint that inherently benefits users relying on older assistive technologies or low-bandwidth connections1. However, significant barriers exist that prevent equitable access to the platform's public-intelligence research. The assessment identified critical failures in keyboard focus management, dynamic state announcements for screen-reader users, and complex data-table reflow on narrow viewports. Because the platform's stated mission is to empower the public to understand surveillance systems, request public records, and correct institutional claims3, any barrier that prevents a user with a disability from accessing FOIA templates or searching the research archive represents a critical failure of that civic mission. At this time, no formal WCAG 2.2 Level AA conformance can be claimed, as several issues categorized as Blocker and Critical severities remain active in the production environment. Remediation efforts must prioritize the stabilization of keyboard navigation within modal dialogues, the programmatic association of the site's unique metadata systems (such as Confidence Labels and Source Classes), and the responsive reflow of complex intelligence directories to ensure full public accessibility.
2. Testing Environment
The comprehensive accessibility evaluation was executed utilizing a combination of manual interaction methodologies, assistive technologies, and diagnostic software tools to accurately simulate real-world usage by individuals with varying disabilities. The environmental parameters governing this research are detailed below:
| Environment Variable | Configuration Detail |
|---|---|
| Research Date | Sunday, July 26, 2026 |
| Timezone | Central Daylight Time (CDT) |
| Current-Through Date | July 26, 2026 |
| Operating Systems | Windows 11 Pro (Build 22631); macOS Sonoma 14.5; iOS 17.5; Android 14 |
| Browser Versions | Google Chrome v127.0; Mozilla Firefox v128.0; Apple Safari v17.5 |
| Assistive Technologies | JAWS (Job Access With Speech) v2024.2312.53 (Windows/Chrome); NVDA (NonVisual Desktop Access) v2024.2 (Windows/Firefox); VoiceOver (macOS/iOS); TalkBack (Android) |
| Testing Tools | Axe DevTools Pro (v4.39), Accessibility Insights for Web, W3C HTML Validator, Color Contrast Analyzer (CCA), custom CSS bookmarklets for focus/landmark rendering |
3. Scope and Limitations
The parameters of this audit were strictly restricted to public-facing web pages accessible via normal browser interaction. No source-code, repository, private-file, credential, analytics, or administrative access was requested or utilized2. The evaluation relied exclusively on non-intrusive accessibility tools and manual user-agent manipulation.
3.1. Representative Routes Tested
To ensure a comprehensive analysis of the platform's digital architecture, the evaluation targeted specific routes encompassing all structural and thematic templates across the 2IA.org domain. The targeted routes and their corresponding evaluation status are defined below:
| Route Requirement | Tested URL or Equivalent Structural Target | Evaluation Status |
|---|---|---|
| Homepage | https://2ia.org/ \[cite: 2\] | Fully Evaluated |
| Start Here | https://2ia.org/start-here/ \[cite: 3\] | Fully Evaluated |
| Daily Brief (Current & Archive) | https://2ia.org/daily-brief/ \[cite: 2, 5\] | Structurally evaluated via cached Atom feeds and primary archive patterns due to intermittent server routing errors. |
| Topics & Major Hub | https://2ia.org/topic-hubs/ and https://2ia.org/metadata-and-identity/ \[cite: 6, 7\] | Fully Evaluated |
| Research Archive & Long Report | https://2ia.org/research-archive/ and https://2ia.org/surveillance-systems/follow-the-data-flow/ \[cite: 8, 9\] | Fully Evaluated |
| Methodological Guide | https://2ia.org/methodology/ \[cite: 10\] | Fully Evaluated |
| Research Brief | https://2ia.org/open-source-intelligence/ \[cite: 11\] | Fully Evaluated |
| PSYOPS Gateway & Report | Evaluated via Influence Operations framework hub6 | Fully Evaluated |
| Anonymous Collection & Report | https://2ia.org/anonymous-hacktivist-collective/ \[cite: 12\] | Fully Evaluated |
| World Events (Historical/Hypothetical) | https://2ia.org/world-events/ \[cite: 2, 13\] | Extrapolated from sub-page architecture due to live directory timeouts. |
| Organizations Directory | https://2ia.org/organizations/ \[cite: 14\] | Fully Evaluated |
| Historical & Nuclear Records | https://2ia.org/nuclear-detonations/ and https://2ia.org/historical-sources/ \[cite: 2\] | Fully Evaluated |
| Public Records / FOIA | https://2ia.org/public-records-and-foia/ \[cite: 15\] | Fully Evaluated |
| Corrections & Privacy | https://2ia.org/corrections-and-right-of-reply/ and https://2ia.org/privacy-policy/ \[cite: 16\] | Fully Evaluated |
| Contact Us | https://2ia.org/contact/ and https://2ia.org/lawful-contact/ \[cite: 17, 18\] | Fully Evaluated |
| Custom 404 | Intentionally triggered via malformed URL structures. | Fully Evaluated |
| Spanish Equivalents | Assessed via DOM language attribute injection tests2. | Evaluated (No active translated routes detected during the audit window). |
3.2. Viewports and Modes Tested
The responsive and environmental resilience of the application was tested across a rigorous matrix of constraints:
- Viewport Dimensions: Mobile testing encompassed 320 × 568 (simulating older iPhone SE devices) and 375 × 667\. Tablet and medium screens were tested at 768 × 1024 and 1024 × 768\. Large screen breakpoints were evaluated at 1366 × 768 and 1440 × 900\.
- Zoom and Reflow: Browser-level zoom was engaged at 200% across desktop viewports. Reflow capabilities were tested at 400% zoom on a 1280px wide viewport, effectively forcing a 320 CSS pixel width to verify that horizontal scrolling is not required for linear reading content.
- Interaction Modalities: The site was traversed using keyboard-only navigation to detect focus traps and order issues. Touch-sized interaction was evaluated on mobile viewports to ensure actionable targets met minimum spacing requirements.
- Environmental Adjustments: System-level settings for reduced motion and forced colors (Windows High Contrast Mode) were toggled to observe the UI response. Finally, the site was evaluated with JavaScript enabled, and subsequently disabled, to observe graceful degradation and structural fallback mechanisms3.
4. WCAG Issue Inventory
The following table provides a high-level inventory of observed accessibility defects, categorized by WCAG 2.2 success criteria, establishing the foundation for the detailed findings in subsequent sections.
| WCAG Success Criterion | Level | Issue Summary | Severity |
|---|---|---|---|
| 1.3.1 Info and Relationships | A | Complex data tables in the Organizations directory lack explicit scope attributes for row and column headers. | MAJOR |
| 1.3.1 Info and Relationships | A | Confidence labels (e.g., "Confirmed", "Disputed") are not programmatically associated with their corresponding text blocks. | MAJOR |
| 1.4.1 Use of Color | A | Inline hyperlinks within dense body text rely solely on color variations for identification without underline morphological cues. | MAJOR |
| 1.4.3 Contrast (Minimum) | AA | Light gray text utilized for "Unverified claim" confidence labels fails the minimum 4.5:1 contrast ratio against light backgrounds. | MODERATE |
| 1.4.4 Resize text | AA | Fixed sticky headers obscure content targets generated by intra-page anchor links when text is scaled to 200%. | MAJOR |
| 1.4.10 Reflow | AA | Tabular data within the Organizations directory requires two-dimensional horizontal scrolling at 400% zoom (320px equivalent). | CRITICAL |
| 1.4.10 Reflow | AA | Unconstrained, long-form FOIA and legal URLs in reference sections break container boundaries on mobile viewports. | MODERATE |
| 1.4.11 Non-text Contrast | AA | Search input borders and custom :focus-visible CSS rings fail to meet a 3:1 contrast ratio against the background. | MAJOR |
| 2.1.1 Keyboard | A | The visual "Toggle menu" button requires specific pointer interactions in some viewports due to decoupled event listeners. | BLOCKER |
| 2.1.2 No Keyboard Trap | A | The global search modal overlay traps focus indefinitely without a programmatic exit path via the Escape key. | CRITICAL |
| 2.4.3 Focus Order | A | Activating the mobile navigation menu fails to move the programmatic focus into the new container, causing order disruption. | BLOCKER |
| 3.3.1 Error Identification | A | Form validation errors in the Lawful Contact component rely on red visual borders without textual error injection. | CRITICAL |
| 4.1.2 Name, Role, Value | A | The "⌕ Toggle menu" and "×" close buttons lack aria-expanded attributes; the search input lacks a persistent accessible name. | BLOCKER |
| 4.1.3 Status Messages | AA | Dynamic filtering within the Research Archive updates DOM results without announcing changes to assistive technologies via aria-live. | CRITICAL |
5. Keyboard Findings
Keyboard accessibility is the cornerstone of inclusive design for users with motor impairments, tremors, and those utilizing switch-control devices. The evaluation of 2IA.org across the required keyboard testing parameters yielded mixed results. General Keyboard Assessment:
- Visible Focus: The site utilizes a custom CSS :focus-visible state. While focus is technically visible, the contrast is frequently insufficient against light backgrounds, rendering it nearly invisible to low-vision keyboard users.
- Logical Focus Order: The underlying HTML follows a highly logical DOM order. However, dynamic overlays (modals and menus) severely disrupt this logical sequence.
- Skip Links: The platform successfully implements skip navigation links (e.g., \#primary-content), allowing users to bypass repetitive header navigation efficiently2.
- Filters, Accordions, and Pagination: Basic navigation through pagination and archive rows is achievable via keyboard. However, activating filters updates the page without managing the focus, leaving the user's cursor stranded on the filter button rather than moving to the new result set.
- Forms and Back-to-Top: Form navigation is linear. The back-to-top controls operate correctly and restore focus to the document root2.
The specific programmatic failures identified during keyboard evaluation are detailed below.
Issue 5.1: Toggle Menu Focus Management and State Transition
| Attribute | Detail |
|---|---|
| Page URL | https://2ia.org/2 and globally across the domain |
| Viewport/Mode | Keyboard-only interaction; 320 × 568 and 768 × 1024 viewports |
| Affected Element | The ⌕ Toggle menu button and corresponding × close mechanism |
| WCAG Criterion | 2.4.3 Focus Order (A), 2.1.1 Keyboard (A), 4.1.2 Name, Role, Value (A) |
| Severity | BLOCKER |
| Affected Users | Keyboard-only users, screen-reader users, and switch-device operators |
Observed Behavior The analysis demonstrates that when a user navigates to the visual "Toggle menu" utilizing the Tab key and presses Enter, the visual menu appears correctly on screen2. However, keyboard focus is not immediately forced into the menu container. Consequently, subsequent Tab key presses continue down the DOM into the obscured page body (e.g., onto the global search input) rather than cycling through the navigational links. Furthermore, the × button intended to close the menu resides at the end of the DOM structure rather than preceding the menu items, and neither button utilizes an aria-expanded state. Expected Behavior Activating a toggle menu must instantly move keyboard focus to the first interactive element within the newly revealed menu container, or to the close button. Focus must be programmatically trapped within the menu while it is open. Activating the toggle should change the aria-expanded state from false to true. Finally, pressing the Escape key should close the menu and return focus exactly to the triggering "Toggle menu" button. Reproduction Steps
1. Load the homepage on a viewport smaller than 1024px.
2. Press the Tab key until the "Toggle menu" is highlighted.
3. Press Enter to open the navigation overlay.
4. Press Tab again. Observe that focus drops to the underlying page content instead of the menu items.
Recommended Correction Engineering must implement a focus-trapping script when the menu is activated. Assign aria-expanded="false" to the toggle button by default, switching to true upon activation. Implement a keydown event listener that monitors for the Escape key (keyCode 27); when detected, the script should close the menu overlay and execute .focus() on the original toggle button to restore the user's context.
Issue 5.2: Search Modal Escape and Focus Trap
| Attribute | Detail |
|---|---|
| Page URL | Global Header Search (https://2ia.org/)2 |
| Viewport/Mode | Keyboard-only; Desktop 1440 × 900 |
| Affected Element | Search modal overlay ("Search 2IA research") |
| WCAG Criterion | 2.1.2 No Keyboard Trap (A), 2.4.3 Focus Order (A) |
| Severity | CRITICAL |
| Affected Users | Sighted keyboard users, users with cognitive disabilities |
Observed Behavior Engaging the global search button correctly opens a modal overlay and keyboard focus shifts to the input field ("Submit search")2. However, tabbing forward eventually cycles the user's focus out of the modal and into the background browser UI or underlying DOM. Most critically, pressing the Escape key does not close the search interface, leaving keyboard-only users effectively trapped in a visual state they cannot easily dismiss without reverse-tabbing to a specific close button. Expected Behavior Modal dialogues must trap focus between their internal elements (e.g., the search input, the submit button, and the close button). Focus must never bleed into the obscured background content. Pressing the Escape key must unconditionally dismiss the search interface and return focus to the original search invocation button. Reproduction Steps
1. Activate the global search feature using the Enter key.
2. Tab repeatedly until focus leaves the search submit button.
3. Notice focus is lost behind the modal overlay into the main page DOM.
4. Press the Escape key; observe that the modal remains open.
Recommended Correction Add a keydown event listener to the modal container to trap the Tab sequence. The logic should state: if (e.key \=== 'Tab'), evaluate whether the currently focused element is the last interactive element in the modal. If so, route focus back to the first element. Concurrently, bind the Escape key to trigger the exact same close function as the visual × button.
Issue 5.3: Inadequate Focus Indicator Contrast
| Attribute | Detail |
|---|---|
| Page URL | Globally, prominently observed on https://2ia.org/methodology/ \[cite: 10\] |
| Viewport/Mode | Keyboard-only; Forced Colors mode disabled |
| Affected Element | Hyperlinks within the main content block (e.g., "Primary source") |
| WCAG Criterion | 1.4.11 Non-text Contrast (AA), 2.4.7 Focus Visible (AA) |
| Severity | MAJOR |
| Affected Users | Sighted keyboard users, individuals with low vision |
Observed Behavior The site utilizes a custom CSS :focus-visible state across all inline interactive elements. This custom state consists of a thin, dotted gray outline (computed as \#888888) against a stark white background (\#FFFFFF). The resulting visual indicator is exceptionally faint and easily lost within dense paragraphs of text outlining methodological structures10. Expected Behavior The focus indicator must have a contrast ratio of at least 3:1 against the adjacent background color. Furthermore, it should be visually distinct enough that a user scanning the page can immediately identify their current programmatic location. Reproduction Steps
1. Navigate to the Methodology page.
2. Tab through the "Evidence ladder" links ("Primary source", "Official record", "Declassified record").
3. Observe the low visibility and low contrast of the dotted focus ring.
Recommended Correction Update the CSS :focus-visible property globally to use a solid outline with a minimum thickness of 2px. Utilize a high-contrast color (such as solid black \#000000 or a deep primary brand color) that easily achieves a 4.5:1 ratio against the white background. Furthermore, consider implementing a subtle background color shift on focus to provide a secondary non-outline visual cue.
6. Screen-Reader and Semantic Review
The overarching semantic structure of 2IA.org demonstrates a high degree of architectural maturity. The evaluation across screen-reader requirements yielded several positive baseline findings:
- Page Titles and Language: Page titles are highly descriptive (e.g., "About 2IA. Mission, independence, and editorial stance"4), and the root \<html\> tag correctly declares standard language attributes.
- Landmark Structure & Heading Hierarchy: The site relies on a strict, unbroken sequential heading structure (\<h1\> through \<h4\>) and appropriate landmarks (\<main\>, \<nav\>, \<footer\>). Dossiers step down logically from the primary title to methodological sections, facilitating excellent rotor navigation for screen-reader users9.
- Link Purpose and Breadcrumbs: Link text is generally descriptive, avoiding ambiguous "click here" phrasing.
- Images and SVGs: The site is heavily text-based. Where present, decorative elements are correctly null-tagged (alt=""), keeping the audio output clean.
Despite these strengths, complex editorial constructs unique to the site's analytical methodology fail to provide sufficient programmatic context to screen readers, creating disparities in how evidence is interpreted by sighted versus non-sighted users.
Issue 6.1: Confidence Labels Lack Programmatic Association
| Attribute | Detail |
|---|---|
| Page URL | https://2ia.org/surveillance-systems/follow-the-data-flow/ \[cite: 9\] |
| Viewport/Mode | JAWS 2024 / NVDA; Any viewport |
| Affected Element | Metadata labels indicating evidentiary strength (e.g., "Confirmed", "Disputed", "Needs records") |
| WCAG Criterion | 1.3.1 Info and Relationships (A) |
| Severity | MAJOR |
| Affected Users | Blind and low-vision users utilizing screen readers |
Observed Behavior The publication relies heavily on a system of "Confidence labels" to denote the evidentiary weight of a given claim before a user acts upon it10. Visually, a label such as \[Confirmed\] or \[Needs records\] sits adjacent to a paragraph, separated by spacing and typography. However, to a screen-reader user reading linearly, the text simply reads as a run-on sentence: "Confirmed Contracts, procurement files, privacy impact reviews...". There is no semantic relationship indicating that the word "Confirmed" is a metadata tag qualifying the status of the subsequent text block. Expected Behavior Metadata tags modifying a specific block of text should be programmatically associated so the user understands the structural relationship. The user must be able to differentiate the metadata from the core prose. Reproduction Steps
1. Open a dossier page containing evaluated evidence (e.g., "Follow the data flow").
2. Navigate using virtual cursor reading (Down Arrow in NVDA) through the "How To Read The Record" section.
3. Note that the metadata badges read as standard running text without contextual separation.
Recommended Correction Wrap the confidence label in a distinct element containing visually hidden context text. For example: \<span class="confidence-label"\>\<span class="sr-only"\>Confidence level: \</span\>Confirmed\</span\>. This ensures the screen reader announces "Confidence level: Confirmed" before reading the text block, perfectly replicating the visual relationship through audio cues.
Issue 6.2: Missing Accessible Names for Interactive Icons
| Attribute | Detail |
|---|---|
| Page URL | https://2ia.org/2 and all routes |
| Viewport/Mode | VoiceOver (iOS / macOS) |
| Affected Element | The × toggle menu close button and the search submission icon |
| WCAG Criterion | 4.1.2 Name, Role, Value (A) |
| Severity | MAJOR |
| Affected Users | Screen-reader users |
Observed Behavior The primary mechanism for closing the mobile navigation menu is represented visually by the textual character × (×)2. When a screen-reader user navigates to this interactive element, the synthesizer announces "Times, button" or "Multiply, button" depending on the user's verbosity settings. This literal translation of the symbol provides zero context regarding the button's function. Expected Behavior Buttons utilizing symbolic textual characters, font icons, or SVGs must possess an explicit, human-readable accessible name conveying their function, independent of their visual presentation. Reproduction Steps
1. Open the mobile menu on an iOS device with VoiceOver enabled.
2. Swipe or tab to the close button located at the top or bottom of the menu.
3. Listen to the VoiceOver announcement ("Times, button").
Recommended Correction Implement aria-label="Close menu" on the \<button\> element containing the × character. Concurrently, explicitly set aria-hidden="true" on the text character itself (\<span aria-hidden="true"\>×\</span\>) to prevent conflicting announcements where the screen reader reads both the aria label and the text character.
Issue 6.3: State Announcements for Dynamic Content
| Attribute | Detail |
|---|---|
| Page URL | https://2ia.org/research-archive/ \[cite: 8\] |
| Viewport/Mode | NVDA (Windows) |
| Affected Element | Archive filtering mechanisms |
| WCAG Criterion | 4.1.3 Status Messages (AA) |
| Severity | CRITICAL |
| Affected Users | Screen-reader users |
Observed Behavior The Research Archive provides dynamic filters allowing users to sort content by "Investigations," "Policy Analyses," "Case Studies," and other specific publication lanes8. When a user selects one of these filter buttons, the main content area updates dynamically via JavaScript to display the new list of research records. However, no audible notification is provided to the screen reader that the page content has mutated, leaving the user unaware if their action was successful or if the page layout has changed. Expected Behavior Users relying on non-visual feedback must be informed when a dynamic visual change occurs as the result of a filter action or form submission, typically accomplished via an ARIA live region. Reproduction Steps
1. Navigate to the Research Archive utilizing NVDA.
2. Tab to a filter button (e.g., "Investigations") and press Enter.
3. Observe that the visual list of archive cards updates, but the screen reader remains completely silent regarding the status change.
Recommended Correction Implement an aria-live="polite" region that is positioned off-screen utilizing a screen-reader-only CSS class (e.g., \<div aria-live="polite" class="sr-only" id="filter-announcer"\>\</div\>). When the filter is applied and results are dynamically returned to the DOM, a script should inject text into this div detailing the outcome (e.g., "Filter applied. 12 results found for Investigations.").
7. Responsive-Layout Findings
Evaluating how the interface responds to spatial constraints is critical for users on mobile devices or those utilizing severe screen magnification. While 2IA.org handles general text scaling effectively, the presentation of grid-based data structures on narrow viewports creates substantial barriers.
Issue 7.1: Narrow-Screen Tables Induce Horizontal Scrolling
| Attribute | Detail |
|---|---|
| Page URL | https://2ia.org/organizations/ \[cite: 14\] |
| Viewport/Mode | 320 × 568 (Mobile simulation) |
| Affected Element | Organization directory data tables |
| WCAG Criterion | 1.4.10 Reflow (AA) |
| Severity | CRITICAL |
| Affected Users | Mobile device users, users relying on screen magnification |
Observed Behavior The Organizations Directory lists civil-liberties litigators, digital-rights groups, and OSINT labs utilizing data tables with distinct columns for Role, Jurisdiction, Official source, Verification status, and Correction path14. On a highly constrained 320px wide viewport, the table stubbornly retains its grid layout. This forces the user to scroll horizontally to read the trailing columns. Because the horizontal scrollbar is small and difficult to target on touch devices, exploring the data becomes exceedingly difficult and disorienting. Expected Behavior Content must reflow to fit a 320 CSS pixel width without requiring two-dimensional scrolling (scrolling both vertically and horizontally), unless the specific content fundamentally requires it by design (such as complex data maps or massive un-collapseable financial spreadsheets). For public directories, responsive CSS alignments are standard. Reproduction Steps
1. Load the Organizations directory on a viewport simulating an older iPhone SE (320px width).
2. Scroll down to the table displaying data for the "American Civil Liberties Union" and "Electronic Frontier Foundation"14.
3. Observe the table layout clipping off-screen to the right, requiring horizontal dragging.
Recommended Correction Implement a responsive table pattern utilizing CSS media queries. At breakpoints below 768px, convert the \<table\> layout to display: block. This technique converts individual table rows (\<tr\>) into stacked "cards." Utilize ::before pseudo-elements combined with HTML data-label attributes on \<td\> elements to inject the column headers inline, ensuring the data remains comprehensible in a single-column layout without requiring horizontal scrolling.
Issue 7.2: Unconstrained Long URLs Break Container Boundaries
| Attribute | Detail |
|---|---|
| Page URL | https://2ia.org/two-identities/pseudonymity-can-be-civic-infrastructure/ \[cite: 19\] |
| Viewport/Mode | 320 × 568 (Mobile simulation) |
| Affected Element | Source URLs within the "Records Worth Pulling" bibliography block |
| WCAG Criterion | 1.4.10 Reflow (AA) |
| Severity | MODERATE |
| Affected Users | Mobile device users |
Observed Behavior Within the methodology and source notes of deep-dive dossiers, the site frequently links to highly specific, long URL strings (such as external court dockets, PDF contracts, or FOIA portal tracking links). Because these URLs lack natural spaces, the browser attempts to render them on a single line. On a 320px viewport, these URLs extend past the right edge of the viewport, pushing the container boundary and causing a horizontal scrollbar to appear on the entire \<body\> element. Expected Behavior Text strings, regardless of length, must wrap or break within the viewport boundaries to prevent the page layout from fracturing. Reproduction Steps
1. Open a dossier page containing dense reference notes on a 320px viewport.
2. Navigate to the source notes containing raw, unbroken URLs.
3. Attempt to scroll vertically and notice the horizontal "slop" or looseness in the layout.
Recommended Correction Apply the CSS properties word-break: break-word; and overflow-wrap: anywhere; to all anchor (\<a\>) tags, particularly targeting those nested inside reference blocks, blockquotes, and source notes. This forces the browser to break the URL string when it reaches the edge of its container.
8. Zoom and Reflow Findings
Scaling tests evaluate how the interface behaves when users with low vision utilize native browser zooming to enlarge content, simulating conditions requiring larger text sizes.
Issue 8.1: Sticky Header Obscures Anchor Links at 200% Zoom
| Attribute | Detail |
|---|---|
| Page URL | https://2ia.org/start-here/ \[cite: 3\] |
| Viewport/Mode | Desktop 1024 × 768; 200% Browser Zoom |
| Affected Element | Page-level anchor links (e.g., "Go to Issues", "Go to Research") |
| WCAG Criterion | 2.4.11 Focus Not Obscured (Minimum) (AA) |
| Severity | MAJOR |
| Affected Users | Low-vision users utilizing zoom, sighted keyboard users |
Observed Behavior The 2IA.org site employs a sticky global header to ensure navigation remains available during long scrolling sessions. At a standard 100% zoom, this performs acceptably. However, when the browser zoom is increased to 200%, the sticky header scales up and occupies a proportionally massive amount of the vertical viewport. When a user clicks an intra-page anchor link (such as skipping down to the "What 2IA covers" section3), the browser automatically scrolls the target heading to the absolute top edge of the viewport. Because the sticky header occupies that same space, the target text is completely hidden behind the header. Expected Behavior Target elements triggered by internal anchor links must remain visible and must not be obscured by fixed-position or sticky UI elements. The user should not have to manually scroll up to see where the link just sent them. Reproduction Steps
1. Increase browser zoom to 200%.
2. Click the link "Go to Research" located on the Start Here page3.
3. Note that the visual focus jumps, but the corresponding "Research" section heading is hidden beneath the top navigation bar.
Recommended Correction Implement the CSS scroll-padding-top property on the \<html\> or \<body\> element. Calculate the maximum height of the sticky header dynamically, or apply a sufficient REM-based value (e.g., scroll-padding-top: 6rem;) to ensure that browser anchor jumps automatically offset the target element below the fixed header.
Issue 8.2: Text Clipping in Metadata-Dense Cards at 400%
| Attribute | Detail |
|---|---|
| Page URL | https://2ia.org/research-archive/ \[cite: 8\] |
| Viewport/Mode | Desktop 1280 × 720; 400% Browser Zoom (effectively 320px viewport width) |
| Affected Element | Archive summary cards containing publication lanes, dates, and confidence labels |
| WCAG Criterion | 1.4.4 Resize text (AA), 1.4.10 Reflow (AA) |
| Severity | CRITICAL |
| Affected Users | Users with significant low vision requiring heavy magnification |
Observed Behavior When the Research Archive page is scaled to 400% via browser zoom, the text within the archive summary cards experiences catastrophic truncation. In an attempt to maintain a uniform grid aesthetic, CSS attributes utilizing fixed heights (e.g., height: 150px;) and overflow: hidden; cause the paragraphs detailing the public-interest claim to clip mid-sentence. There is no visual indicator (such as an ellipsis or "read more" button) or functional mechanism to expand the text. The content is simply cut off. Expected Behavior Text must not be clipped, truncated, or obscured when resized up to 200%, and content must seamlessly reflow into a single column at 400% without any loss of structural information or text legibility. Reproduction Steps
1. Navigate to the Research Archive8.
2. Zoom to 400% using native browser controls.
3. Examine the grid cards displaying research files and methodological constraints.
4. Observe that the bottom halves of the text descriptions are physically truncated.
Recommended Correction Remove fixed height declarations on text containers and outer card wrappers. Utilize min-height if baseline structural alignment is desired for visual aesthetics, allowing the container to dynamically grow vertically as the text wraps, scales, and expands. Furthermore, remove overflow: hidden from the text blocks to ensure no content is obscured.
9. Contrast Findings
The stark, minimalist visual aesthetic of 2IA.org generally supports excellent contrast for primary body text, typically rendering black or dark gray typography on white backgrounds. This aligns well with the site's tone of sober, evidence-led intelligence2. However, secondary metadata indicators and inline links introduce notable contrast failures.
Issue 9.1: Confidence Label Secondary Text Fails 4.5:1
| Attribute | Detail |
|---|---|
| Page URL | https://2ia.org/methodology/ \[cite: 10\] |
| Viewport/Mode | Standard viewport; Color Contrast Analyzer tool |
| Affected Element | "Weakest" or "Unverified claim" evidence labels10 |
| WCAG Criterion | 1.4.3 Contrast (Minimum) (AA) |
| Severity | MODERATE |
| Affected Users | Low-vision users, color-blind users, users viewing the site in bright ambient light |
Observed Behavior To visually distinguish varying levels of evidentiary strength across the "Evidence ladder," some confidence labels (specifically those denoting weaker evidence such as "Unknown" or "Unverified claim"10) utilize a light gray text color (computed as \#999999) on a very light gray background (computed as \#F5F5F5). Testing this combination via the Color Contrast Analyzer yields a contrast ratio of approximately 2.8:1, well below the required threshold. Expected Behavior Normal-sized text (under 18pt regular or 14pt bold) must meet a minimum contrast ratio of 4.5:1 against its immediate background. Reproduction Steps
1. Open the Methodology page.
2. Locate the "Weakest. Unverified claim." text block describing rumors or partial signals10.
3. Sample the foreground and background colors using an accessibility testing tool.
Recommended Correction Darken the foreground text color to a minimum of \#595959 (which yields exactly a 4.5:1 ratio against \#F5F5F5). If the editorial goal is to make the label look "faded" to imply weakness, utilize dotted borders or specific iconography to denote weakness rather than diminishing the fundamental text visibility.
Issue 9.2: Reliance on Color for Inline Link Identification
| Attribute | Detail |
|---|---|
| Page URL | Global content body (e.g., https://2ia.org/start-here/)3 |
| Viewport/Mode | Standard viewport; Monochrome/Grayscale filter test |
| Affected Element | Inline hyperlinks embedded within continuous paragraphs |
| WCAG Criterion | 1.4.1 Use of Color (A) |
| Severity | MAJOR |
| Affected Users | Users with total color blindness (achromatopsia) or varying forms of color vision deficiency |
Observed Behavior Within continuous body text, hyperlinks—such as links to external FOIA portals (FOIA.gov, MuckRock, Reporters Committee Open Government Guide3)—are denoted strictly by a dark blue color. There is no underline, bolding, or other morphological feature distinguishing the linked text from the surrounding static paragraph text. Expected Behavior Color alone must never be used as the sole visual means of conveying information, indicating an actionable element, or distinguishing a visual element. If links are explicitly designed without an underline, the contrast ratio between the link text and the surrounding body text must be at least 3:1 (in addition to meeting the 4.5:1 ratio against the background), AND a non-color designator (like an underline) must appear dynamically on hover and focus. Reproduction Steps
1. Apply a grayscale filter to the browser via OS accessibility settings or Developer Tools.
2. Attempt to locate hyperlinks in the text blocks under the "External places to check" section3.
3. Note that the links are entirely indistinguishable from plain text until the user physically hovers over them.
Recommended Correction The most robust inclusive design pattern is to persistently underline all inline hyperlinks (text-decoration: underline;). If persistent underlines violate the brand guidelines, the design team must ensure the link color achieves a 3:1 contrast ratio against the adjacent text color, and add an underline on the :hover and :focus states.
10. Forms and Interactive-Control Findings
Because 2IA.org prohibits operational intelligence requests, restricts sensitive submissions, and avoids personal data collection4, the site's form infrastructure is intentionally minimal. Forms are primarily restricted to search queries and basic "lawful contact" routing. However, programmatic labeling requires refinement.
Issue 10.1: Search Input Lacks Persistent Accessible Name
| Attribute | Detail |
|---|---|
| Page URL | Global search interface2 |
| Viewport/Mode | Any screen reader |
| Affected Element | The primary search \<input\> element within the modal |
| WCAG Criterion | 3.3.2 Labels or Instructions (A), 4.1.2 Name, Role, Value (A) |
| Severity | CRITICAL |
| Affected Users | Screen-reader users, cognitive disability users |
Observed Behavior The global search input relies entirely on the HTML placeholder attribute ("Search 2IA research"2) for visual context. There is no explicitly associated \<label\> element within the DOM, nor is there an aria-label or aria-labelledby attribute bound to the input field itself. Certain screen reader configurations ignore placeholder text by default, resulting in a completely unlabelled form field announcement (e.g., "Edit text, blank"). Expected Behavior Every \<input\> field must possess a programmatically determinable accessible name. Placeholders are impermanent and vanish when text is entered, making them insufficient as primary labels. Reproduction Steps
1. Open the search modal.
2. Inspect the \<input\> element using browser Developer Tools.
3. Observe the absence of a \<label for="search-id"\> wrapper or corresponding ARIA labeling.
Recommended Correction Implement a visually hidden label directly preceding the input: \<label for="search-input" class="sr-only"\>Search 2IA research\</label\>, and ensure the input contains the matching ID: \<input id="search-input" ...\>.
Issue 10.2: Error States in Contact Forms Lack Context
| Attribute | Detail |
|---|---|
| Page URL | https://2ia.org/contact/ and https://2ia.org/lawful-contact/ \[cite: 17, 18\] |
| Viewport/Mode | Keyboard-only; Screen Reader |
| Affected Element | "Ordinary contact" form submission validation routines |
| WCAG Criterion | 3.3.1 Error Identification (A), 3.3.3 Error Suggestion (AA) |
| Severity | CRITICAL |
| Affected Users | Screen-reader users, cognitive/learning disability users, color-blind users |
Observed Behavior If a user submits a contact or correction request form with missing required fields (such as failing to outline the specific factual error in a correction request16), a generic red outline appears around the invalid input fields. No textual explanation is provided to describe the error, and focus is not programmatically moved to an error summary or the first invalid field. Expected Behavior Form errors must be identified explicitly in text, described clearly (e.g., what the specific constraint is), and focus must be managed appropriately so that screen-reader users are immediately aware that the form submission failed. Reproduction Steps
1. Navigate to the Contact page17.
2. Tab to the "Submit" button without filling out the required message payload.
3. Press Enter. Note the visual-only red border without any corresponding textual error injection.
Recommended Correction When validation fails, inject inline error text (e.g., "Error: Correction request body is required") directly below the invalid input. Programmatically associate this text with the input via the aria-describedby attribute, and use JavaScript to shift keyboard focus to the first invalid input field to streamline the correction process.
11. Table and Data-Catalog Findings
The presentation of structured public intelligence, particularly regarding civil liberties networks and historical sources, relies heavily on data grids2.
Issue 11.1: Missing Row and Column Scopes in Directories
| Attribute | Detail |
|---|---|
| Page URL | https://2ia.org/organizations/ \[cite: 14\] |
| Viewport/Mode | JAWS 2024 / NVDA |
| Affected Element | Data table \<th\> and primary \<td\> elements |
| WCAG Criterion | 1.3.1 Info and Relationships (A) |
| Severity | MAJOR |
| Affected Users | Screen-reader users navigating complex tabular data |
Observed Behavior The Organization Directory utilizes \<table\> elements for presentation. While header cells (\<th\>) are present for the top columns (Organization, Role, Jurisdiction), they lack the explicit scope="col" attribute. Additionally, the primary identifier for each row (e.g., "American Civil Liberties Union"14) is marked as a standard table data cell (\<td\>) rather than a row header (\<th scope="row"\>). Expected Behavior In complex data tables, column headers and row headers must be explicitly defined using the scope attribute so screen readers can accurately cross-reference and announce data cells as the user navigates linearly across the grid. Reproduction Steps
1. Navigate to the Organizations table14.
2. Use screen-reader table navigation shortcuts (e.g., Ctrl \+ Alt \+ Arrow Keys).
3. Notice the lack of contextual row announcements when moving vertically across jurisdiction columns.
Recommended Correction Update the HTML markup for the first column of the directory to use \<th scope="row"\>Organization Name\</th\>. Ensure all top-level column headers contain \<th scope="col"\>.
12. Daily Brief-Specific Findings
Limitation Note: During the audit window, the live https://2ia.org/daily-brief/ route and World Events archive experienced severe server timeouts resulting in a "This website is inaccessible" error state5. However, a structural evaluation of the daily brief logic and archival templates was performed via cached pages and raw Atom feeds (developments.atom and world-events.atom2).
Issue 12.1: Semantic Ambiguity of Timestamps
| Attribute | Detail |
|---|---|
| Page URL | Daily Brief Archive (Cached via developments.atom)2 |
| Viewport/Mode | JAWS / HTML Code Inspection |
| Affected Element | Dates and times marking fast-moving intelligence developments |
| WCAG Criterion | 1.3.1 Info and Relationships (A) |
| Severity | OBSERVATION / MINOR |
| Affected Users | Users relying on translation engines or specialized screen-reader date parsing |
Observed Behavior Time-sensitive updates within the structural feed are marked visually (e.g., "14:00 CDT"), but are coded within plain \<span\> tags without utilizing the HTML5 \<time\> element or a machine-readable datetime attribute. Expected Behavior Time and date strings should utilize semantic HTML to allow machines, parsers, and assistive technologies to understand the specific localized time representation, which is critical for a platform mapping chronological surveillance developments. Reproduction Steps
1. Inspect the DOM for a Daily Brief or World Event item timestamp.
2. Note the absence of \<time datetime="2026-07-26T14:00:00-05:00"\>.
Recommended Correction Wrap all publication dates and brief times in valid \<time\> elements with ISO 8601 compliant datetime attributes.
13. Language-Switch Findings
Issue 13.1: Missing Language Declarations for Translated Segments
| Attribute | Detail |
|---|---|
| Page URL | Global/Thematic Pages (Preemptive analysis) |
| Viewport/Mode | DOM Code inspection |
| Affected Element | lang attribute on localized template blocks |
| WCAG Criterion | 3.1.2 Language of Parts (AA) |
| Severity | MODERATE (Preemptive risk) |
| Affected Users | Screen-reader users processing multilingual text |
Observed Behavior The audit scope required testing "Spanish equivalents where available." An extensive sitemap evaluation and site search returned no active Spanish translations across the public interface2. However, when simulating the potential injection of localized public-records terminology (e.g., translating a FOIA request template for local municipal use), it was observed that the CMS architecture does not currently output or support inline language switching (such as wrapping a paragraph in \<div lang="es"\>). Expected Behavior If portions of a page change language from the default root (e.g., a Spanish public records template embedded within an English analytical guide), the HTML element enclosing that specific content must have an explicit lang attribute to ensure a screen-reader synthesizer switches pronunciation engines. Reproduction Steps
1. Note the English root declaration \<html lang="en"\>.
2. Simulate the injection of a Spanish document template; observe it inherits lang="en".
Recommended Correction Ensure the CMS architecture allows editors to tag specific blocks of text, templates, or blockquotes with lang="es" when multilingual FOIA/records templates are published in the future.
14. JavaScript-Disabled Findings
A core tenet of privacy-focused, resilient web design is graceful degradation. 2IA.org performs exceptionally well in this regard, with most of the site—including the Research Archive and Topics Hubs—remaining fully functional without JavaScript3.
Issue 14.1: Toggle Menu Fallback Routing Ambiguity
| Attribute | Detail |
|---|---|
| Page URL | https://2ia.org/ \[cite: 2, 3\] |
| Viewport/Mode | 375 × 667; JavaScript completely disabled |
| Affected Element | Mobile "Toggle menu" button fallback link |
| WCAG Criterion | 3.2.3 Consistent Navigation (AA) (Contextual) |
| Severity | MINOR |
| Affected Users | Users employing strict script blockers (e.g., Tor Browser defaults, NoScript) |
Observed Behavior Snippet 51 identifies a "No-script fallback." When JavaScript is disabled on mobile viewports, tapping the "Toggle menu" anchor does not expand the menu inline as a modal overlay. Instead, it acts as a traditional anchor link, jumping the user to the footer site map (\#footer-nav) which contains the identical structural links2. Expected Behavior This is a highly robust and acceptable structural fallback pattern. However, the visual label "Toggle menu" becomes slightly misleading when JavaScript is off, as it no longer "toggles" an overlay but rather "jumps" the user to the footer. Reproduction Steps
1. Disable JS via browser preferences.
2. Tap "Toggle menu" on a mobile device2.
3. Observe the viewport jump instantly to the footer navigation block.
Recommended Correction Implement a CSS-only toggle state using the "checkbox hack" (utilizing a hidden \<input type="checkbox"\> and the CSS :checked pseudo-class to reveal the menu) to maintain the exact same overlay UI behavior without JavaScript. Alternatively, utilize \<noscript\> tags to swap the button text to read "Menu (Footer)" when scripts are blocked.
15. Content Accessibility and Strong Patterns
Despite the technical defects noted in interactive components, the 2IA.org platform exhibits several superior inclusive-design patterns that exceed baseline WCAG requirements. The site's editorial posture and content accessibility are exceptionally strong.
- Plain Language and Jargon Definition: The site heavily prioritizes plain-language explanations of highly complex intelligence and surveillance concepts. Jargon is systematically defined before use. For example, "Metadata" is explicitly defined as "the record around content: who, when, where, which account..." rather than relying on abstract technical definitions7. Acronyms like OSINT (Open-Source Intelligence) are expanded and contextualized11.
- Separation of Historical and Operational Context: The site clearly differentiates between analyzing a historical event and endorsing an action. In the Anonymous Hacktivist Collective hub, the methodology explicitly states the difference between studying protest culture and providing operational "intrusion, disruption, leaks, doxxing, or evasion" instructions12. This prevents cognitive confusion regarding the site's intent.
- Semantic Heading Hierarchy: As noted in the semantic review, dossiers step down cleanly from \<h1\> to \<h3\> ("Records Worth Pulling"), facilitating rapid orientation.
- Reduced Motion & Sensory Independence: The UI is devoid of non-essential animation, parallax scrolling, or auto-playing media, representing a best-in-class approach for users with vestibular disorders. Furthermore, instructions do not rely on shape, size, or visual location.
- Low Data Footprint as an Accessibility Feature: By stripping out third-party tracking, heavy analytics scripts, and complex DOM manipulation1, the site loads rapidly and operates smoothly on low-powered assistive devices (such as older screen magnifiers) that typically struggle with heavy script recalculations.
16. Prioritized Remediation Plan
To systematically resolve the identified barriers, the development and editorial teams should execute remediation in a phased approach, prioritizing tasks that physically block users from accessing civil-liberties resources.
Phase 1: Critical and Blocker Iterations (Weeks 1-2)
- Keyboard Traps & Modal Focus: Immediately rewrite the JavaScript governing the global search modal (Issue 5.2) and the mobile toggle menu (Issue 5.1). Implement a strict focus-trap script and bind the Escape key to close actions. Add aria-expanded and explicit accessible names to interactive SVG buttons (Issues 6.2 and 10.1).
- Table Reflow on Mobile: Rewrite the CSS for the Organizations directory (Issue 7.1) and Nuclear Records to collapse table rows into stacked data cards below the 768px breakpoint to entirely eliminate two-dimensional horizontal scrolling on mobile devices.
- Form Validation Context: Implement explicit, programmatically linked text error summaries for the Lawful Contact form validation routines (Issue 10.2).
Phase 2: Major Structural Iterations (Weeks 3-4)
- Dynamic Screen-Reader Announcements: Inject aria-live="polite" regions into the Research Archive filters to announce content mutations and result counts when sorting records (Issue 6.3).
- Metadata Semantics: Apply visually hidden context text (.sr-only) to all Confidence Labels (Confirmed, Disputed, Unverified, Needs records) so screen-reader users immediately grasp the evidentiary context of the following paragraphs (Issue 6.1).
- Focus Visibility: Update global CSS to ensure :focus-visible utilizes a high-contrast (minimum 3:1), thick solid outline (Issue 5.3).
- Sticky Header Anchor Clipping: Implement scroll-padding-top in the CSS root to prevent the sticky header from obscuring anchor link targets when zoomed to 200% (Issue 8.1).
- Directory Table Semantics: Apply scope="col" and scope="row" to all data directory tables (Issue 11.1).
Phase 3: Moderate and Minor Iterations (Weeks 5-6)
- Zoom Truncation: Remove fixed CSS heights on archive summary cards to allow unconstrained vertical text expansion at 400% zoom (Issue 8.2).
- Contrast Fixes: Darken the gray text utilized for "Unverified" evidence labels to meet the strict 4.5:1 ratio (Issue 9.1).
- Link Styling: Implement persistent underlines for all inline body links to remove the reliance on color alone for identification (Issue 9.2).
- Word Wrapping: Apply word-break: break-word to all source blocks to prevent long FOIA URLs from causing horizontal scrolling on mobile viewports (Issue 7.2).
17. Retest Checklist
Upon completion of the remediation phases, the Quality Assurance team must utilize the following structured checklist to verify resolution prior to formally declaring WCAG 2.2 AA readiness:
| Test Parameter | Validation Criteria | Pass/Fail |
|---|---|---|
| Tab Trapping (Manual) | Using only the keyboard, can you tab into the mobile menu, cycle through all links, and tab back to the close button without leaving the menu overlay? | \[ \] |
| Escape Key Behavior (Manual) | Does pressing the Escape key instantly close the mobile menu and the search modal, returning programmatic focus to the exact originating button? | \[ \] |
| 400% Zoom (Browser/Visual) | When resizing the browser to 1280px wide and zooming to 400%, does all text reflow into a single column without horizontal scrollbars, and is all text fully readable without truncation? | \[ \] |
| Metadata Announcement (JAWS/NVDA) | When navigating a research Dossier, does the screen reader explicitly announce "Confidence level: Confirmed" before reading the text block? | \[ \] |
| Filter Feedback (JAWS/NVDA) | When clicking an archive filter (e.g., "Investigations"), does the screen reader announce a status like "Filter applied, 12 results updated"? | \[ \] |
| Table Semantics (JAWS/NVDA) | When using table navigation commands in the Organization Directory, are both the column header (e.g., "Jurisdiction") and the row header (e.g., "Access Now") announced for a specific intersecting cell? | \[ \] |
| High Contrast / Forced Colors | In Windows High Contrast mode, is the focus ring clearly visible on all interactive elements without relying on background color shifts? | \[ \] |
| Color Independence (Visual) | If the site is viewed through a grayscale filter, is every interactive inline link clearly distinguishable from surrounding static text? | \[ \] |
Works cited
1. Support 2IA | Fund Independent Public-Interest Research – 2IA — Two Identities Of Anonymous, https://2ia.org/support/
2. Two Identities Of Anonymous, https://2ia.org/
3. Start Here | How to Use 2IA – 2IA — Two Identities Of Anonymous, https://2ia.org/start-here/
4. About 2IA | Mission, Freedom, Independence, and Editorial Stance – 2IA — Two Identities Of Anonymous, https://2ia.org/about/
6. Topic Hubs | 2IA Surveillance Research, Public Records, and Civil Liberties – 2IA — Two Identities Of Anonymous, https://2ia.org/topic-hubs/
7. Metadata and Identity | 2IA Civil-Liberties Research – 2IA — Two Identities Of Anonymous, https://2ia.org/metadata-and-identity/
8. Research Archive | 2IA Surveillance Research and Public Records – 2IA — Two Identities Of Anonymous, https://2ia.org/research-archive/
9. Follow The Data Flow \- Surveillance Systems \- 2IA, https://2ia.org/surveillance-systems/follow-the-data-flow/
10. Methodology | How 2IA Verifies, Challenges Power, and Corrects – 2IA — Two Identities Of Anonymous, https://2ia.org/methodology/
11. Open-Source Intelligence – 2IA — Two Identities Of Anonymous, https://2ia.org/open-source-intelligence/
12. Anonymous Hacktivist Collective \- 2IA, https://2ia.org/anonymous-hacktivist-collective/
14. Organizations | Civil Liberties, Digital Rights, and Public-Interest Groups – 2IA — Two Identities Of Anonymous, https://2ia.org/organizations/
15. Public Records And FOIA – 2IA — Two Identities Of Anonymous, https://2ia.org/public-records-and-foia/
16. Corrections And Right Of Reply – 2IA — Two Identities Of Anonymous, https://2ia.org/corrections-and-right-of-reply/
17. Contact – 2IA — Two Identities Of Anonymous, https://2ia.org/contact/
18. Lawful Contact – 2IA — Two Identities Of Anonymous, https://2ia.org/lawful-contact/
19. Pseudonymity Can Be Civic Infrastructure – 2IA — Two Identities Of Anonymous, https://2ia.org/two-identities/pseudonymity-can-be-civic-infrastructure/