Introduction au Développement HTML et CSS
Introduction au Développement HTML et CSS

Accessibilité : ARIA, Contraste et Tabulation

Introduction à l'Accessibilité Web

Bienvenue dans cette leçon dédiée à l'accessibilité web, un pilier fondamental du développement web moderne. L'accessibilité web consiste à rendre les sites web et les applications utilisables par tous, y compris les personnes ayant des handicaps (visuels, auditifs, moteurs, cognitifs) ou des limitations situationnelles (utilisation d'un petit écran, environnement bruyant, connexion lente).

Pourquoi l'accessibilité est-elle cruciale ?

  • Inclusion sociale : Permettre à chacun d'accéder à l'information et aux services en ligne est un droit fondamental.
  • Légal et éthique : De nombreux pays ont des lois qui exigent que les sites web soient accessibles. C'est aussi une responsabilité éthique pour les développeurs.
  • Portée et innovation : Un site accessible atteint un public plus large et peut améliorer l'expérience utilisateur pour tous, pas seulement les personnes handicapées.
  • SEO (Référencement Naturel) : De nombreuses bonnes pratiques d'accessibilité (structure sémantique, textes alternatifs) améliorent également le référencement de votre site.

Dans cette leçon, nous allons explorer trois aspects essentiels de l'accessibilité :

  1. ARIA (Accessible Rich Internet Applications) : Comment améliorer la sémantique pour les technologies d'assistance.
  2. Contraste des Couleurs : Assurer une bonne lisibilité pour les utilisateurs malvoyants ou daltoniens.
  3. Tabulation et Navigation au Clavier : Permettre une navigation fluide sans souris.

1. ARIA : Rendre les Applications Riches Accessibles

Qu'est-ce que WAI-ARIA ?

WAI-ARIA (Web Accessibility Initiative - Accessible Rich Internet Applications) est une spécification technique publiée par le W3C (World Wide Web Consortium). Elle fournit un moyen d'ajouter des informations sémantiques aux éléments HTML, en particulier pour les composants d'interface utilisateur complexes qui ne sont pas couverts par le HTML natif.

Les technologies d'assistance, comme les lecteurs d'écran, utilisent ces informations ARIA pour interpréter le contenu et interagir avec l'utilisateur de manière significative. Sans ARIA, un lecteur d'écran pourrait ne voir qu'un simple <div> là où un utilisateur voyant perçoit un bouton, une barre de progression ou un onglet.

Pourquoi ARIA est-il nécessaire ?

Le HTML natif est sémantique par nature (<button>, <nav>, <h1>). Cependant, le développement web moderne implique souvent la création de widgets et de composants d'interface utilisateur interactifs qui n'ont pas d'équivalent HTML direct ou dont le comportement est modifié via JavaScript.

Par exemple :

  • Un <div> stylisé pour ressembler à un bouton.
  • Un carrousel d'images.
  • Des onglets ou un accordéon personnalisés.
  • Une boîte de dialogue modale.

Dans ces cas, ARIA permet de "dire" aux technologies d'assistance quel est le rôle de l'élément, quelles sont ses propriétés et quel est son état actuel.

Concepts Clés d'ARIA : Rôles, Propriétés et États

ARIA se compose de trois types d'attributs principaux :

  1. Rôles (role) :

    • Décrivent la nature ou la catégorie d'un élément dans l'interface utilisateur. C'est comme donner un nom de métier à un élément.
    • Exemples :
      • role="button" : Indique qu'un élément agit comme un bouton.
      • role="navigation" : Marque un groupe de liens comme une navigation.
      • role="alert" : Signale une information importante et souvent transitoire.
      • role="dialog" : Définit une boîte de dialogue.
  2. Propriétés (aria-xxxx) :

    • Fournissent des informations supplémentaires ou des caractéristiques sur un élément. Ces informations sont généralement statiques ou changent rarement.
    • Exemples :
      • aria-labelledby="id-element" : Associe un élément à son libellé (utile si le libellé est un autre élément sur la page).
      • aria-describedby="id-element" : Fournit une description plus détaillée qu'un simple libellé.
      • aria-haspopup="true" : Indique qu'un élément peut déclencher une pop-up (menu, sous-menu, etc.).
      • aria-label="texte" : Fournit un libellé textuel direct pour un élément qui n'en a pas de visible.
  3. États (aria-xxxx="true/false/value") :

    • Décrivent la condition actuelle d'un élément. Les états peuvent changer dynamiquement en réponse aux interactions de l'utilisateur ou à des mises à jour du contenu.
    • Exemples :
      • aria-expanded="true" ou aria-expanded="false" : Indique si un élément (comme un accordéon ou un menu déroulant) est ouvert ou fermé.
      • aria-checked="true" ou aria-checked="false" : Pour les cases à cocher ou les radios boutons personnalisés.
      • aria-disabled="true" : Indique qu'un élément est désactivé et ne peut pas être interactif.
      • aria-current="page" : Indique l'élément actuel dans un ensemble (ex: la page actuelle dans une pagination).

Les 5 Règles d'Or d'ARIA (et la Première est la Plus Importante !)

L'utilisation d'ARIA doit être réfléchie et parcimonieuse. Une utilisation incorrecte peut rendre un site moins accessible. Voici les règles fondamentales :

  1. La première règle d'ARIA : Si vous pouvez utiliser un élément HTML natif ou un attribut avec les sémantiques et le comportement que vous exigez déjà intégrés, utilisez-le plutôt que de réaffecter un élément et d'ajouter ARIA.

    • Exemple : Utilisez <button> plutôt qu'un <div role="button">. Utilisez <a href="..."> plutôt qu'un <span role="link">. Ces éléments HTML natifs sont déjà accessibles par défaut (focus, interaction clavier, sémantique).
  2. N'altérez pas la sémantique HTML native, sauf si vous devez vraiment le faire. (Ex : N'utilisez pas role="button" sur un <h1>).

  3. Tous les contrôles ARIA interactifs doivent être utilisables au clavier. (Nous aborderons la tabulation plus tard).

  4. N'utilisez pas role="presentation" ou aria-hidden="true" sur un élément visible et focusable. (Cela le rendrait invisible pour les lecteurs d'écran mais toujours atteignable au clavier, créant une expérience confuse).

  5. Tous les éléments interactifs doivent avoir un nom accessible. (Via leur contenu textuel, aria-label, aria-labelledby, etc.).

Exemple de Code ARIA : Un Interrupteur Personnalisé

Imaginons que nous souhaitions créer un interrupteur personnalisé (toggle switch) qui n'existe pas nativement en HTML. Nous devons lui donner une sémantique appropriée pour les technologies d'assistance.

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Exemple ARIA: Interrupteur Personnalisé</title>
    <style>
        .toggle-switch-container {
            display: flex;
            align-items: center;
            gap: 10px;
            margin: 20px;
        }

        .toggle-switch {
            width: 60px;
            height: 30px;
            background-color: #ccc;
            border-radius: 15px;
            position: relative;
            cursor: pointer;
            transition: background-color 0.3s;
            outline: none; /* Supprime l'outline par défaut, mais ajoutez-en un dans :focus */
            border: 2px solid transparent; /* Pour éviter les changements de taille au focus */
        }

        .toggle-switch.checked {
            background-color: #4CAF50; /* Vert quand activé */
        }

        .toggle-switch .indicator {
            width: 26px;
            height: 26px;
            background-color: white;
            border-radius: 50%;
            position: absolute;
            top: 2px;
            left: 2px;
            transition: transform 0.3s;
        }

        .toggle-switch.checked .indicator {
            transform: translateX(30px); /* Déplace l'indicateur à droite */
        }

        /* Style pour l'état de focus pour l'accessibilité clavier */
        .toggle-switch:focus {
            border-color: blue;
            box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.5);
        }
    </style>
</head>
<body>

    <h1>Interrupteur Personnalisé Accessible avec ARIA</h1>

    <div class="toggle-switch-container">
        <span id="label-mode-sombre">Activer le mode sombre :</span>
        <div 
            class="toggle-switch" 
            role="switch" 
            aria-checked="false" 
            tabindex="0" 
            aria-labelledby="label-mode-sombre"
        >
            <div class="indicator"></div>
        </div>
    </div>

    <p>Le mode sombre est : <span id="status-mode-sombre">Désactivé</span></p>

    <script>
        const toggleSwitch = document.querySelector('.toggle-switch');
        const statusSpan = document.getElementById('status-mode-sombre');

        toggleSwitch.addEventListener('click', () => {
            const isChecked = toggleSwitch.getAttribute('aria-checked') === 'true';
            toggleSwitch.setAttribute('aria-checked', !isChecked);
            toggleSwitch.classList.toggle('checked', !isChecked);
            statusSpan.textContent = !isChecked ? 'Activé' : 'Désactivé';
        });

        // Gérer l'interaction clavier pour l'interrupteur
        toggleSwitch.addEventListener('keydown', (event) => {
            if (event.key === ' ' || event.key === 'Enter') {
                event.preventDefault(); // Empêche le défilement de la page avec la barre d'espace
                toggleSwitch.click(); // Simule un clic
            }
        });
    </script>

</body>
</html>

Explication du code ARIA et JS :

  • role="switch" : Cet attribut ARIA indique aux technologies d'assistance que cet <div> n'est pas juste un conteneur générique, mais un interrupteur binaire.
  • aria-checked="false" : C'est un état ARIA. Il communique si l'interrupteur est actuellement activé (true) ou désactivé (false). C'est crucial car l'état visuel (couleur, position de l'indicateur) doit être accompagné d'une sémantique compréhensible par un lecteur d'écran. Notre JavaScript met à jour cet attribut à chaque clic.
  • tabindex="0" : Rend le <div> focusable par le clavier (nous y reviendrons en détail plus loin). C'est essentiel pour que les utilisateurs puissent interagir avec l'interrupteur sans souris.
  • aria-labelledby="label-mode-sombre" : Cette propriété ARIA associe le div.toggle-switch au <span> juste avant lui (<span id="label-mode-sombre">Activer le mode sombre :</span>). Cela permet au lecteur d'écran de lire le libellé approprié lorsqu'il se positionne sur l'interrupteur.
  • JavaScript (toggleSwitch.addEventListener('click', ...) et toggleSwitch.addEventListener('keydown', ...) ):
    • Le script gère le changement d'état visuel (ajout/suppression de la classe checked) et met à jour l'attribut aria-checked dynamiquement.
    • Il gère aussi l'interaction clavier : en permettant d'activer/désactiver l'interrupteur avec les touches Espace ou Entrée lorsque l'élément est focusé. C'est une attente standard pour les contrôles interactifs.
  • CSS (:focus): Le style :focus est vital pour montrer à l'utilisateur quel élément est actuellement focusé par le clavier.

2. Contraste des Couleurs : Assurer la Lisibilité

Le contraste des couleurs fait référence à la différence de luminosité entre le texte (ou les icônes) et leur arrière-plan. Un contraste insuffisant peut rendre le contenu difficile, voire impossible à lire pour :

  • Les personnes malvoyantes.
  • Les personnes atteintes de daltonisme.
  • Les utilisateurs dans des conditions d'éclairage difficiles (plein soleil, écran de mauvaise qualité).

Les Directives WCAG pour le Contraste

Les WCAG (Web Content Accessibility Guidelines) sont les directives internationales pour l'accessibilité web. Elles définissent des ratios de contraste minimum à respecter :

  • Niveau AA (Acceptable) :

    • Texte normal (moins de 18pt ou 14pt gras) : Ratio de contraste d'au moins 4.5:1.
    • Grand texte (18pt et plus, ou 14pt gras et plus) : Ratio de contraste d'au moins 3:1.
    • Composants d'interface utilisateur et graphiques essentiels (icônes, bordures de champs de formulaire, indicateurs) : Ratio de contraste d'au moins 3:1.
  • Niveau AAA (Amélioré) :

    • Texte normal : Ratio de contraste d'au moins 7:1.
    • Grand texte : Ratio de contraste d'au moins 4.5:1.
  • Exceptions :

    • Les logos ou marques.
    • Le texte décoratif ou inactif.
    • Les images contenant du texte mais faisant partie d'une photographie.

Qu'est-ce qu'un ratio de contraste ? C'est un nombre qui représente la différence de luminosité. Un ratio de 1:1 est un contraste nul (noir sur noir), tandis qu'un ratio de 21:1 est le contraste maximal (noir sur blanc).

Outils pour Vérifier le Contraste

Il existe de nombreux outils pour vous aider à vérifier et à choisir des combinaisons de couleurs conformes :

  • Outils en ligne :
  • Extensions de navigateur : Color Contrast Analyzer, Accessibility Insights.
  • Outils de développement de navigateur : Les navigateurs modernes (Chrome, Firefox, Edge) incluent des outils dans leurs "Developer Tools" pour vérifier le contraste directement sur la page inspectée.
    • Dans Chrome DevTools, l'onglet "Issues" ou "Lighthouse" peut signaler des problèmes de contraste. L'inspecteur CSS peut également afficher le ratio de contraste pour les couleurs de texte.

Au-delà du Contraste : Autres Considérations Visuelles

Bien que le contraste soit crucial, d'autres facteurs CSS influencent également la lisibilité :

  • Taille de la police (font-size) : Utilisez des tailles de police suffisantes (minimum 16px pour le corps de texte est une bonne pratique).
  • Hauteur de ligne (line-height) : Un line-height adéquat (environ 1.5 pour le corps de texte) améliore la lisibilité en évitant que les lignes ne se chevauchent visuellement.
  • Espacement des lettres (letter-spacing) et des mots (word-spacing) : Un espacement approprié peut améliorer la reconnaissance des mots.
  • Famille de police (font-family) : Choisissez des polices lisibles, surtout pour le corps de texte. Évitez les polices trop fines ou trop stylisées qui peuvent être difficiles à déchiffrer.
  • Justification du texte (text-align: justify) : Évitez de justifier le texte sur le web, car cela peut créer des espaces irréguliers ("rivières") qui perturbent la lecture. Préférez text-align: left.

3. Tabulation et Navigation au Clavier

La navigation au clavier est fondamentale pour l'accessibilité. De nombreux utilisateurs ne peuvent pas utiliser de souris, soit en raison de handicaps moteurs, soit parce qu'ils utilisent un lecteur d'écran, un commutateur (switch device) ou simplement parce qu'ils préfèrent la navigation au clavier pour l'efficacité.

Un site web doit être entièrement navigable et utilisable avec le clavier seul, en utilisant principalement les touches Tab, Shift + Tab (pour reculer), Entrée, Espace, et les flèches directionnelles.

L'Attribut tabindex

L'attribut global tabindex contrôle si un élément peut être focusé et s'il fait partie de l'ordre de tabulation du document.

  1. tabindex="0" : Inclure dans l'ordre de tabulation naturel

    • Rend un élément focusable via la touche Tab et lui permet d'être inclus dans l'ordre de tabulation naturel du document (basé sur l'ordre dans le code source HTML).
    • C'est utile pour rendre focusables des éléments qui ne le sont pas par défaut (comme un <div> ou un <span>) mais qui sont utilisés pour des interactions utilisateur (par exemple, un bouton personnalisé ou un élément qui doit recevoir le focus pour afficher une information).
    • Utilisation : Lorsque vous utilisez un élément non interactif (div, span) pour simuler un contrôle interactif, tabindex="0" est nécessaire pour qu'il soit atteignable au clavier. N'oubliez pas d'ajouter un role ARIA approprié et de gérer les événements clavier (keydown).
  2. tabindex="-1" : Rendre focusable par programmation

    • Rend un élément focusable uniquement via JavaScript (en utilisant element.focus()). Il n'est pas atteignable en appuyant sur la touche Tab.
    • Utile pour :
      • Gérer le focus dans des composants complexes comme les modales (où vous voulez déplacer le focus à l'intérieur de la modale lorsqu'elle s'ouvre).
      • Faire pointer le focus sur un message d'erreur ou une section spécifique de la page après une action.
    • Utilisation : Typiquement, vous utiliserez tabindex="-1" sur un conteneur ou un message qui doit recevoir le focus lorsque quelque chose de spécifique se produit, sans pour autant être un élément interactif qui devrait faire partie de l'ordre de tabulation standard.
  3. tabindex="n" (où n est un entier positif > 0) : Ordre de tabulation explicite

    • À ÉVITER FORTEMENT !
    • Place un élément dans un ordre de tabulation personnalisé, défini par la valeur numérique. Les éléments avec tabindex positifs sont visités en premier, dans l'ordre croissant de leurs valeurs, avant les éléments sans tabindex ou avec tabindex="0".
    • Problème : Cela perturbe l'ordre de lecture logique du document (qui devrait suivre l'ordre du DOM) et rend le site extrêmement difficile à maintenir et à comprendre pour les utilisateurs et les développeurs. Si vous insérez un nouvel élément, vous devez renuméroter tous les tabindex positifs.

Bonnes Pratiques pour la Navigation au Clavier

  • Priorité au HTML sémantique : C'est la règle d'or. Utilisez toujours les éléments HTML appropriés (<a>, <button>, <input>, <select>, <textarea>) car ils sont naturellement focusables et interactifs au clavier sans aucun tabindex supplémentaire.

  • Ordre de tabulation logique : L'ordre dans lequel les éléments sont focusés (Tab) doit correspondre à l'ordre visuel et logique de la page. C'est pourquoi utiliser l'ordre du DOM (source order) est crucial et l'usage de tabindex positifs est proscrit.

  • Indicateur de focus visible : Assurez-vous que l'état :focus (le contour qui apparaît quand un élément est sélectionné par Tab) est toujours visible et clair. Il est courant de le styliser avec CSS. C'est une erreur grave de supprimer outline: none; sans le remplacer par un autre indicateur visuel.

    /* Assurez-vous que le focus est toujours visible et clair */
    :focus {
        outline: 3px solid blue; /* Ou une autre couleur contrastante */
        outline-offset: 2px; /* Pour éviter de chevaucher la bordure de l'élément */
    }
    
  • Gérer le focus dynamique :

    • Modales : Lorsque vous ouvrez une modale, le focus doit être déplacé à l'intérieur de la modale. À la fermeture, le focus doit revenir à l'élément qui a déclenché la modale.
    • Messages d'erreur : Si un formulaire soumet une erreur, le focus doit être déplacé vers le premier champ en erreur ou vers le message d'erreur pour alerter l'utilisateur.
  • Interactions au clavier : Assurez-vous que tous les contrôles interactifs peuvent être activés non seulement par un clic de souris, mais aussi par les touches Entrée (pour les liens et les boutons) et Espace (pour les cases à cocher, radios, et boutons).

Exemple de Code : tabindex en Action

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Exemple Tabindex</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 20px;
        }
        button, input, a, .custom-interactive-div {
            margin: 10px;
            padding: 10px 15px;
            border: 1px solid #ccc;
            background-color: #f0f0f0;
            cursor: pointer;
            display: inline-block; /* Pour que margin et padding fonctionnent bien sur un div */
        }
        .custom-interactive-div {
            background-color: #e6e6fa; /* Lavande */
            border-color: #9370db; /* Violet moyen */
        }
        #focus-target {
            background-color: #fffacd; /* Jaune clair */
            padding: 20px;
            border: 1px dashed #daa520; /* Jaune doré */
            margin-top: 20px;
            display: none; /* Initialement caché */
        }
        
        /* Styles pour l'indicateur de focus */
        :focus {
            outline: 3px solid blue;
            outline-offset: 2px;
        }
    </style>
</head>
<body>

    <h1>Exemples de Tabulation et `tabindex`</h1>

    <p>Naviguez avec la touche <kbd>Tab</kbd> pour voir l'ordre de focus.</p>

    <h2>Éléments naturellement focusables :</h2>
    <button>Bouton standard</button>
    <a href="#">Lien standard</a>
    <input type="text" placeholder="Champ de texte">

    <h2>Utilisation de `tabindex="0"` :</h2>
    <div class="custom-interactive-div" tabindex="0" role="button">
        Bouton DIV avec tabindex="0"
    </div>
    <span class="custom-interactive-div" tabindex="0">
        Texte SPAN focusable avec tabindex="0"
    </span>

    <h2>Utilisation de `tabindex="-1"` (Focus programmable) :</h2>
    <button id="show-and-focus">Afficher et focusser le contenu</button>
    
    <div id="focus-target" tabindex="-1">
        Ceci est un contenu caché initialement.<br> 
        Vous pouvez le focusser via le bouton "Afficher et focusser".<br>
        Il n'est pas atteignable avec <kbd>Tab</kbd> directement.
    </div>

    <script>
        // Exemple pour le div avec tabindex="0"
        const customDivButton = document.querySelector('.custom-interactive-div[role="button"]');
        if (customDivButton) {
            customDivButton.addEventListener('click', () => {
                alert('Bouton DIV cliqué !');
            });
            customDivButton.addEventListener('keydown', (e) => {
                if (e.key === 'Enter' || e.key === ' ') {
                    e.preventDefault(); // Empêche le défilement de la page avec la barre d'espace
                    customDivButton.click();
                }
            });
        }

        // Exemple pour l'utilisation de tabindex="-1"
        const showAndFocusButton = document.getElementById('show-and-focus');
        const focusTargetDiv = document.getElementById('focus-target');

        showAndFocusButton.addEventListener('click', () => {
            focusTargetDiv.style.display = 'block'; // Rendre le contenu visible
            focusTargetDiv.focus(); // Déplacer le focus vers ce div
            // Optionnel: ajouter un aria-live pour annoncer le contenu aux lecteurs d'écran
            focusTargetDiv.setAttribute('aria-live', 'polite');
            focusTargetDiv.textContent += " (Contenu mis à jour et focusé)";
        });
    </script>

</body>
</html>

Explication du code tabindex :

  • button, a, input : Ces éléments sont naturellement focusables et navigables avec Tab. L'ordre de tabulation suit leur ordre dans le code HTML.
  • <div class="custom-interactive-div" tabindex="0" role="button"> :
    • Ce div est rendu focusable par la présence de tabindex="0". Lorsque vous appuyez sur Tab, il sera inclus dans l'ordre de tabulation naturel après l'input.
    • role="button" est crucial ici pour que les technologies d'assistance comprennent qu'il s'agit d'un bouton, même si c'est un div.
    • Le JavaScript associé gère les événements click et keydown (Enter, Space) pour le rendre pleinement fonctionnel au clavier.
  • <span class="custom-interactive-div" tabindex="0"> : Similaire au div ci-dessus, ce span est aussi rendu focusable par tabindex="0".
  • <div id="focus-target" tabindex="-1"> :
    • Ce div est initialement caché (display: none;).
    • tabindex="-1" signifie qu'il ne peut pas être atteint en appuyant sur la touche Tab.
    • Cependant, lorsque vous cliquez sur le bouton "Afficher et focusser le contenu", le JavaScript rend ce div visible (display: block;) et utilise focusTargetDiv.focus(); pour déplacer le focus vers lui. Ceci est très utile pour s'assurer que les utilisateurs de lecteurs d'écran sont immédiatement alertés du nouveau contenu apparu.
  • CSS :focus : Remarquez le style global :focus. Il fournit un contour bleu clair autour de l'élément actuellement focusé, ce qui est essentiel pour la visibilité lors de la navigation au clavier.

Conclusion

L'accessibilité n'est pas une option, mais une exigence fondamentale pour un web inclusif. En tant que développeurs, nous avons la responsabilité de construire des interfaces utilisables par tous.

Nous avons exploré trois piliers essentiels :

  • ARIA : Permet de fournir une sémantique riche aux composants d'interface utilisateur complexes que le HTML natif ne couvre pas, rendant votre contenu compréhensible pour les technologies d'assistance. Rappelez-vous la première règle d'ARIA : utilisez d'abord le HTML sémantique natif !
  • Contraste des Couleurs : Assure que le texte et les éléments graphiques sont lisibles pour un maximum d'utilisateurs, en respectant les ratios des WCAG. C'est un aspect visuel crucial de la conception accessible.
  • Tabulation et Navigation au Clavier : Garantit que votre site est entièrement utilisable sans souris, en gérant l'ordre de tabulation, le focus, et en rendant tous les éléments interactifs accessibles via le clavier. Évitez à tout prix les tabindex positifs !

L'accessibilité est un voyage continu. Intégrez-la dès le début de vos projets, testez régulièrement avec différents outils et, idéalement, avec de vrais utilisateurs. En adoptant ces pratiques, vous ne créerez pas seulement des sites web conformes, mais des expériences numériques plus équitables, plus robustes et meilleures pour tous.