Blocks
Sign-in
A recessed page, one lit card, the brand as furniture. GdAuthShell is the frame; every app slots its own auth into the card.
What it is made of
GdAuthShell— the recessed page, the mark, the lit card, the fine-print footerGdLogo— drawn by the shell, at 28px with the wordmark and an optionalproductsub-brandGdField+GdInput— the email stepGdOtpInput— the six-digit verify stepGdButtonblock, plus a ghost “Use a different email”
The block
GRIDD
Sign in
No passwords. We'll email you a six-digit code.
Code
<GdAuthShell title="Check your email">
<template #sub>A six-digit code is on its way to <strong>{{ email }}</strong>.</template>
<GdOtpInput v-model="code" @complete="verify" />
<GdButton variant="primary" block :disabled="code.length < 6">Sign in</GdButton>
<template #fine>Invite-only during the pilot.</template>
</GdAuthShell>The same door, another product
GRIDDCode
You've been invited
Jordan Teal added you to the Riverton City workspace.
Code
<GdAuthShell product="Code" title="You have been invited" sub="Jordan Teal added you to Riverton City.">
<GdButton variant="primary" block>Accept and sign in</GdButton>
<template #fine>The invitation expires in seven days.</template>
</GdAuthShell>Rules
- Always pass
title. It is required, and it is what the door is asking for: “Sign in”, “Check your email”, “You've been invited”. - Use the
subPROP for a plain sentence and the slot of the same name when it carries markup. On the verify step it always does — the address the code went to. - Put terms and pilot conditions in
#fine, outside the card. They are true of the product, not part of the thing being asked for. - Add no bar, no breadcrumb, no home link. The mark says which product is asking and goes nowhere.
- Keep the card top-aligned. Do not centre it vertically, and do not set a height on it.
- Slot each app's own auth into the card. What is shared is the frame, the rhythm and the type scale — which is all a user perceives.
Behavior & Anatomy
- No chrome, and the brand is furniture. A bar across the top offers exits that mostly bounce straight back off the auth wall. The mark says which product is asking and goes nowhere — GdLogo has no link of its own, so that is a property of the mark rather than a prop to remember.
- A recessed page, one lit card. The page is
--gd-surface-pageand the card israisedon--gd-surface, so the card is the only lit thing on screen. A bordered card on the same white as the page reads as a form on a document rather than as a destination. - Top-aligned, not vertically centred. Email, then code, then sooner or later an error: the card grows between steps, and a centred card slides up and down as it does. That drift is the most common auth-page tell there is.
Why the specimen is the shell and not a re-composition
GdAuthShell IS the pattern, so the specimen is the shell rather than a logo, a card and a form arranged to look like one. A docs page holding its own copy of something the system ships is the copy that drifts, and it drifts silently, because nothing renders both versions side by side.