/**
* Email geometry + typography contract — the `--email-*` component tokens resolved to the two
* forms an email template actually needs: a CSS string (`"480px"`, for `style="width:480px"`) and a
* bare number (`480`, for the legacy HTML attribute form `
` that Outlook's Word
* renderer still prefers). Both come from src/tokens/components/email.css via
* scripts/gen-email-tokens.mjs — nothing here is hand-typed.
*/
import { EMAIL_GEOMETRY_SOURCE } from "./tokens.generated.js";
/** Every `--email-*` token name declared in the component token tier. */
export type EmailTokenName = keyof typeof EMAIL_GEOMETRY_SOURCE;
/** The 480px transactional shell — the card and the page gutter around it. */
export interface EmailShellTokens {
/** Card width as a CSS length. */
readonly width: string;
/** Card width as a number, for ``. */
readonly widthPx: number;
/** Width of the column INSIDE the card padding (`width − 2 × padding`). */
readonly contentWidth: string;
readonly contentWidthPx: number;
/** Card inset on desktop. */
readonly padding: string;
readonly paddingPx: number;
/** Gutter between the client viewport and the card. */
readonly pagePadding: string;
readonly pagePaddingPx: number;
/** Card edge hairline. */
readonly borderWidth: string;
readonly borderWidthPx: number;
/** Card corner radius (ignored by Outlook's Word renderer — degrade to square, never to an image). */
readonly radius: string;
readonly radiusPx: number;
/** Vertical rhythm between blocks. */
readonly gap: string;
readonly gapPx: number;
/** Tight rhythm (heading ↔ lede). */
readonly gapSm: string;
readonly gapSmPx: number;
/** Height the canonical invitation reference card measures at this geometry (480×407). */
readonly referenceHeight: string;
readonly referenceHeightPx: number;
}
export declare const EMAIL_SHELL: EmailShellTokens;
/** Type ramp. Sizes are literal px — no email client resolves the rem scale reliably. */
export interface EmailTypographyTokens {
/**
* The canonical DXS stack, Noto Sans JP first (product override, direct instruction). Web-font
* `@font-face` is unavailable in most clients, so this NAMES the face and degrades: a client
* with Noto Sans JP installed (or a webmail that already loaded it) renders the canonical face;
* everything else falls to Hiragino (macOS/iOS) → Yu Gothic (Windows) → M PLUS 2 → Meiryo → the
* system UI face → Arial → `sans-serif`.
*/
readonly fontFamily: string;
/** Mono stack for invoice ids, masked card numbers, ISO dates and amounts. */
readonly monoFontFamily: string;
readonly bodyFontSize: string;
readonly bodyFontSizePx: number;
readonly bodyLineHeight: number;
readonly bodyFontWeight: number;
readonly headingFontSize: string;
readonly headingFontSizePx: number;
readonly headingLineHeight: number;
readonly headingFontWeight: number;
}
export declare const EMAIL_TYPOGRAPHY: EmailTypographyTokens;
/** The single primary call-to-action. */
export interface EmailCtaTokens {
readonly height: string;
readonly heightPx: number;
/** Equal to the height so the label centres without flexbox (Outlook has none). */
readonly lineHeight: string;
readonly lineHeightPx: number;
readonly paddingX: string;
readonly paddingXPx: number;
readonly radius: string;
readonly radiusPx: number;
readonly fontSize: string;
readonly fontSizePx: number;
readonly fontWeight: number;
}
export declare const EMAIL_CTA: EmailCtaTokens;
/** The legal band under the body — quiet type, a hairline, and the inter-link spacing. */
export interface EmailFooterTokens {
readonly fontSize: string;
readonly fontSizePx: number;
readonly lineHeight: number;
/** Horizontal separation between adjacent footer links. */
readonly linkGap: string;
readonly linkGapPx: number;
readonly paddingTop: string;
readonly paddingTopPx: number;
readonly borderWidth: string;
readonly borderWidthPx: number;
}
export declare const EMAIL_FOOTER: EmailFooterTokens;
/** Focus affordance for the webmail preview panes that DO honour `:focus` (WCAG 2.4.7/2.4.11). */
export interface EmailFocusTokens {
readonly borderWidth: string;
readonly borderWidthPx: number;
}
export declare const EMAIL_FOCUS: EmailFocusTokens;
/** Narrow-viewport reflow — apply under `@media (max-width: …)` and via `width="100%"` fallbacks. */
export interface EmailMobileTokens {
/** The reflow breakpoint (card width + both gutters). */
readonly maxWidth: string;
readonly maxWidthPx: number;
/** The card goes fluid below the breakpoint. */
readonly width: string;
readonly padding: string;
readonly paddingPx: number;
readonly pagePadding: string;
readonly pagePaddingPx: number;
readonly headingFontSize: string;
readonly headingFontSizePx: number;
/** The CTA goes full-bleed so the tap target spans the card. */
readonly ctaWidth: string;
}
export declare const EMAIL_MOBILE: EmailMobileTokens;