Skip to content
design system
Thème d’affichage, actuellement Auto

view · stable · app · since 2026-09

AuthShell

Purpose

The shell of a page that holds one thing: sign in, ask for access, choose a password, type a code, pair the extension. One column, centred in the height: the mark as a way out, the h1, a lead with its links, the card on the surface holding the form, the footer for the way back.

When to use, when not

Use it for every page a visitor sees before the lab, and for the extension pairing page. Not inside the lab, which has its own shell; not for a dialog.

Anatomy

  1. The top row: the mark, a link to the site or the lab, and the theme switch across from it.
  2. The title.
  3. The lead, with its links.
  4. The card, holding the messages and the form.
  5. The footer.

Props

Props of AuthShell
NameTypeDefaultWhat it does
titlestringThe page's title, as its h1.
logoHref?string'/'Where the mark leads: the site for a visitor, the lab for a signed-in user.
themeName?string'theme-auth'The theme switch's radio group name; two shells on one page each need their own.
width?'md' | 'lg''md'`md` for a form, `lg` for a page with more to read.
as?'main' | 'div''main'`main` on a page; `div` inside a page that already has one.
headingLevel?1 | 21The title's level: 1 on a page, 2 inside a page that already has an h1.
lead?SnippetA sentence under the title, with its links.
childrenSnippetThe card's content: the form, the messages.
footer?SnippetThe way back, under the card.

States

The sign-in page, and a page holding a message.

message

The same shell holding a message and no form, as the page after a request.

Light
Thème d’affichage, actuellement Auto

Demande enregistrée

Fait

Votre demande d'accès est enregistrée pour camille@exemple.fr.

La bêta est fermée : chaque demande est examinée à la main. Vous recevrez un courriel dès qu'elle sera acceptée.

Dark
Thème d’affichage, actuellement Auto

Demande enregistrée

Fait

Votre demande d'accès est enregistrée pour camille@exemple.fr.

La bêta est fermée : chaque demande est examinée à la main. Vous recevrez un courriel dès qu'elle sera acceptée.

320 px, light
Thème d’affichage, actuellement Auto

Demande enregistrée

Fait

Votre demande d'accès est enregistrée pour camille@exemple.fr.

La bêta est fermée : chaque demande est examinée à la main. Vous recevrez un courriel dès qu'elle sera acceptée.

320 px, dark
Thème d’affichage, actuellement Auto

Demande enregistrée

Fait

Votre demande d'accès est enregistrée pour camille@exemple.fr.

La bêta est fermée : chaque demande est examinée à la main. Vous recevrez un courriel dès qu'elle sera acceptée.

216 px, light
Thème d’affichage, actuellement Auto

Demande enregistrée

Fait

Votre demande d'accès est enregistrée pour camille@exemple.fr.

La bêta est fermée : chaque demande est examinée à la main. Vous recevrez un courriel dès qu'elle sera acceptée.

Forced colours, captured
AuthShell, story message, as Chromium renders it with forced colours active

signIn

The column as the sign-in page uses it: the mark, the h1, a lead with its link, the card with the form, the way back. Rendered as a div at level 2 here, since this page already has a main and an h1.

Light
Thème d’affichage, actuellement Auto

Connexion

Pas encore de compte ? Créer un compte

Mot de passe oublié ?

Dark
Thème d’affichage, actuellement Auto

Connexion

Pas encore de compte ? Créer un compte

Mot de passe oublié ?

320 px, light
Thème d’affichage, actuellement Auto

Connexion

Pas encore de compte ? Créer un compte

Mot de passe oublié ?

320 px, dark
Thème d’affichage, actuellement Auto

Connexion

Pas encore de compte ? Créer un compte

Mot de passe oublié ?

216 px, light
Thème d’affichage, actuellement Auto

Connexion

Pas encore de compte ? Créer un compte

Mot de passe oublié ?

Forced colours, captured
AuthShell, story signIn, as Chromium renders it with forced colours active

Accessibility contract

  • Role and name: main with id="main-content" and tabindex="-1" on a page; the h1 is the page’s name. Inside a docs page, a div at level 2.
  • Keyboard, focus: the skip link’s target; then the mark, the theme switch, the lead’s links, the form, the footer, in reading order.
  • The theme switch’s radio group takes themeName, theme-auth by default; two shells on one page give two names, or the browser merges them into one group.
  • Live regions: none of the shell’s; the page’s Alerts carry theirs.

Content rules

French. The title is the page’s name as a noun phrase (“Connexion”, “Nouveau mot de passe”); the lead is one sentence with its link; the footer is the way back.

Do and don’t

  • Do put the Alerts inside the card, above the form.
  • Do keep logoHref on the lab for a signed-in user.
  • Do not nest a second main; render as a div inside a page that has one.

Examples

<AuthShell title="Connexion">
	{#snippet lead()}<p>Pas encore de compte&nbsp;? <Link href="/auth/register">Créer un compte</Link></p>{/snippet}
	<form method="POST" use:enhance={occupe()}>…</form>
	{#snippet footer()}<p><Link href="https://rgaa.dev">Retour à rgaa.dev</Link></p>{/snippet}
</AuthShell>

Surfaces

  • App: sign in, register, forgotten password, reset, two-factor code, extension pairing.

Related

Field, Button, Alert, Link, Logo, ThemeSwitch.

Decisions

  • 2026-09-24: a plain surface for the card rather than the Card component, which is a summary that links somewhere; this one holds a form.
  • 2026-09-26: the theme switch is on the shell, across from the mark, as the plan’s section 3b asks of every surface; the group name is a prop so the design site’s four copies of a story stay four groups.

Criteria held by construction

  • 12.7, Dans chaque page web, un lien d'évitement ou d'accès rapide à la zone de contenu principal est-il présent ?
    The shell is the main landmark with the id the skip link targets and tabindex -1, so the link's target really takes the focus.
  • 9.1, Dans chaque page web, l'information est-elle structurée par l'utilisation appropriée de titres ?
    The title is the page's h1, at the top of the column, before the form.
  • 12.8, Dans chaque page web, l'ordre de tabulation est-il cohérent ?
    The mark, the title, the lead's links, the form and the way back follow in the DOM in the order the eye reads them.

Tokens it reads

  • Colour: --rl-ink-soft, --rl-line, --rl-surface
  • Typography: --rl-text-sm, --rl-text-xs
  • Spacing: --rl-space-12, --rl-space-2, --rl-space-3, --rl-space-4, --rl-space-6, --rl-space-8
  • Layout: --rl-radius, --rl-border

Seen in patterns