/* @smavoo/react-library 7.23.0 */
/* @smavoo/react-library/auth.css: the sign-in page. smavoo-identity links it on
   its server-rendered pages; a React page that renders AuthLayout imports it.
   The rules (auth.css) plus the two faces they use. Serve the woff2 files
   fonts-brand.css names from the same directory as this file.
   Contract: src/docs/AuthStatic.mdx. */
/* Space Grotesk and Instrument Serif, the two faces of the SMAVOO sign-in page
 * (plan SWID-061 §4) and of the Glas, Prism, Atlas and Terra themes. @fontsource
 * latin subsets vendored into src/fonts/, licences beside them (OFL-*.txt).
 *
 * Imported by index.css and by auth.standalone.css, so the faces are declared in
 * one place for both stylesheets. Paths are relative to src/styles/; the build
 * flattens them to ./<file> beside dist/index.css and dist/auth.css. */
@font-face {
  font-family: "Space Grotesk";
  src: url("./space-grotesk-latin-400-normal.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Space Grotesk";
  src: url("./space-grotesk-latin-500-normal.woff2") format("woff2");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Space Grotesk";
  src: url("./space-grotesk-latin-600-normal.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Space Grotesk";
  src: url("./space-grotesk-latin-700-normal.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Instrument Serif";
  src: url("./instrument-serif-latin-400-normal.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Instrument Serif";
  src: url("./instrument-serif-latin-400-italic.woff2") format("woff2");
  font-weight: 400;
  font-style: italic;
  font-display: swap;
}
/* ── Auth: the sign-in page (SWRL-057) ─────────────────────────────────
   The look of smavoo-identity's server-rendered pages (login, consent, logout,
   change password, error) as plain CSS. AuthLayout and AuthCard emit exactly the
   markup styled here, so a page that never loads React renders what the stories
   show. The markup contract: src/docs/AuthStatic.mdx.

   Shipped on its own, with its two faces, as `@smavoo/react-library/auth.css`,
   not inside the library stylesheet: only the sign-in page needs it, and every
   app would otherwise carry ~40 kB for a page that identity renders. A React
   page that renders AuthLayout imports it once, next to the library styles.

   Source: smavoo-identity docs/design/2026-10-09-login-branding-plan.html
   (SWID-061), sections 4 (target picture), 6 (logo) and 9 (light/dark, handheld).

   Tokens: auth-themes.generated.css re-keys the library themes onto
   `.smavoo-auth[data-family][data-mode]`. The `--glas-*` set exists only in the
   Glas family; elsewhere it is `initial`, so every `var(--glas-…, fallback)` below
   is the glass where Glas is chosen and the opaque card of Prism, Atlas and Terra
   (94 % surface, 16px blur, plan §4) everywhere else.

   Hero and card read different inks: the hero sits on the photo and reads the
   page layer (--smavoo-auth-hero-*), the card reads the card tokens. They differ
   in terra, whose cards are ivory on a dark page. */
/* GENERATED by scripts/generate-auth-css.ts from src/tokens/*.css and src/styles/index.css.
   Do not edit: run `pnpm generate-auth-css` and commit the result (auth-css.test.ts
   fails when this file is stale). Why it exists: src/components/auth-layout/auth-themes.ts.

   Light is the base: it applies to data-mode="light" and to "auto" (or no
   data-mode) unless the system asks for dark. Dark applies to data-mode="dark",
   and to "auto" under prefers-color-scheme: dark. */

.smavoo-auth {
  --duration-base: 200ms;
  --ease-standard: cubic-bezier(0.4, 0, 0.2, 1);
  --font-family-sans: "Space Grotesk", ui-sans-serif, system-ui, -apple-system, sans-serif;
  --font-size-lg: 1.125rem;
  --font-weight-label: 500;
  --font-weight-medium: 500;
  --font-weight-regular: 400;
  --font-weight-semibold: 600;
  --letter-spacing-tight: -0.02em;
  --radius-full: 9999px;
  --radius-md: 8px;
  --radius-xl: 16px;
  --spacing-10: 40px;
  --spacing-12: 48px;
  --spacing-2: 8px;
  --spacing-4: 16px;
  --spacing-5: 20px;
  --spacing-6: 24px;
  --spacing-8: 32px;
}

/* glas · light (library theme "glas-light") */
.smavoo-auth:not([data-family="prism"], [data-family="atlas"], [data-family="terra"]):not([data-mode="dark"]) {
  --color-bg-page: #f1f4f3;
  --color-bg-surface: #f8fafb;
  --color-bg-surface-raised: #ffffff;
  --color-border: rgba(23, 40, 66, 0.14);
  --color-border-focus: #8a3d05;
  --color-control-border: #6b7782;
  --color-interactive-primary: #f2811d;
  --color-interactive-primary-active: #c5640e;
  --color-interactive-primary-hover: #de7114;
  --color-interactive-secondary: #eef2f4;
  --color-interactive-secondary-hover: #e1e8eb;
  --color-status-error: #892213;
  --color-status-error-bg: rgba(163, 43, 27, 0.1);
  --color-status-info: #184b80;
  --color-status-info-bg: rgba(28, 86, 144, 0.1);
  --color-status-success: #12562f;
  --color-status-success-bg: rgba(30, 138, 76, 0.12);
  --color-text-brand: #8a3d05;
  --color-text-inverse: #171614;
  --color-text-muted: #524d46;
  --color-text-primary: #171614;
  --color-text-secondary: #45413b;
  --font-family-serif: Georgia, Cambria, "Times New Roman", Times, serif;
  --font-weight-heading: 500;
  --glas-card-bg: linear-gradient(160deg, rgba(255, 255, 255, 0.14) 0%, rgba(255, 255, 255, 0.06) 60%, rgba(255, 255, 255, 0.1) 100%);
  --glas-card-border: rgba(255, 255, 255, 0.5);
  --glas-card-filter: blur(48px) saturate(1.15);
  --glas-card-grain: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 .22 0 0 0 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  --glas-card-grain-opacity: 0.35;
  --glas-card-shadow: 0 24px 60px rgba(60, 40, 25, 0.08), inset 0 1px 0 rgba(255, 255, 255, 0.55);
  --glas-page-image: linear-gradient(180deg, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.2) 75%), radial-gradient(900px 560px at 0% 0%, #f1cfb0, transparent 65%), radial-gradient(900px 620px at 100% 100%, #a9bac3, transparent 62%), radial-gradient(800px 500px at 55% 45%, #f4f6f6, transparent 70%), linear-gradient(#eceff0, #eceff0);
  --glas-pill-bg: rgba(255, 255, 255, 0.85);
  --glas-pill-bg-hover: #ffffff;
  --glas-pill-border: rgba(27, 31, 35, 0.14);
  --smavoo-auth-hero-ink: #171614;
  --smavoo-auth-hero-secondary: #45413b;
  --smavoo-auth-hero-accent: #8a3d05;
  --smavoo-auth-card-scheme: light;
}

/* glas · dark (library theme "glas") */
.smavoo-auth:not([data-family="prism"], [data-family="atlas"], [data-family="terra"])[data-mode="dark"] {
  --color-bg-page: #0f1a24;
  --color-bg-surface: #0e1a23;
  --color-bg-surface-raised: #15232f;
  --color-border: rgba(255, 255, 255, 0.12);
  --color-border-focus: #ffb26b;
  --color-control-border: #7a8894;
  --color-interactive-primary: #f2811d;
  --color-interactive-primary-active: #d96f10;
  --color-interactive-primary-hover: #f79646;
  --color-interactive-secondary: #1c2c3a;
  --color-interactive-secondary-hover: #26394a;
  --color-status-error: #ffb8ac;
  --color-status-error-bg: rgba(255, 170, 156, 0.16);
  --color-status-info: #9ac8f0;
  --color-status-info-bg: rgba(140, 193, 238, 0.14);
  --color-status-success: #7fe0a8;
  --color-status-success-bg: rgba(75, 196, 127, 0.16);
  --color-text-brand: #ffb26b;
  --color-text-inverse: #171614;
  --color-text-muted: #9ca8b2;
  --color-text-primary: #f2f5f7;
  --color-text-secondary: #b3bdc5;
  --font-family-serif: Georgia, Cambria, "Times New Roman", Times, serif;
  --font-weight-heading: 500;
  --glas-card-bg: linear-gradient(rgba(11, 11, 10, 0.5), rgba(11, 11, 10, 0.5));
  --glas-card-border: rgba(255, 255, 255, 0.1);
  --glas-card-filter: blur(34px) saturate(1.25);
  --glas-card-grain: none;
  --glas-card-grain-opacity: 0;
  --glas-card-shadow: 0 50px 130px rgba(0, 0, 0, 0.55), inset 0 1px 0 rgba(255, 255, 255, 0.09);
  --glas-page-image: linear-gradient(180deg, rgba(15, 15, 15, 0.05), rgba(15, 15, 15, 0.3) 75%), radial-gradient(1000px 620px at 0% 0%, #1b3a55, transparent 65%), radial-gradient(900px 600px at 100% 6%, #1d3c55, transparent 62%), radial-gradient(900px 480px at 8% 108%, rgba(200, 120, 70, 0.5), transparent 65%), radial-gradient(700px 400px at 60% 105%, rgba(120, 100, 80, 0.3), transparent 65%), linear-gradient(#10222f, #10222f);
  --glas-pill-bg: rgba(28, 44, 58, 0.85);
  --glas-pill-bg-hover: #26394a;
  --glas-pill-border: rgba(255, 255, 255, 0.14);
  --smavoo-auth-hero-ink: #f2f5f7;
  --smavoo-auth-hero-secondary: #b3bdc5;
  --smavoo-auth-hero-accent: #ffb26b;
  --smavoo-auth-card-scheme: dark;
}

/* prism · light (library theme "prism") */
.smavoo-auth[data-family="prism"]:not([data-mode="dark"]) {
  --color-bg-page: #fefefc;
  --color-bg-surface: #ffffff;
  --color-bg-surface-raised: #f6f4ef;
  --color-border: #ece8de;
  --color-border-focus: #1a3d80;
  --color-control-border: #87827f;
  --color-interactive-primary: #1a3d80;
  --color-interactive-primary-active: #0f2848;
  --color-interactive-primary-hover: #142d5e;
  --color-interactive-secondary: #f6f4ef;
  --color-interactive-secondary-hover: #ece8df;
  --color-status-error: #a8341d;
  --color-status-error-bg: #fbeeea;
  --color-status-info: #1a3d80;
  --color-status-info-bg: #eef2f9;
  --color-status-success: #157a3a;
  --color-status-success-bg: #ecf5ed;
  --color-text-brand: #1a3d80;
  --color-text-inverse: #ffffff;
  --color-text-muted: #6b6357;
  --color-text-primary: #1a1814;
  --color-text-secondary: #4a443c;
  --font-family-serif: Georgia, Cambria, "Times New Roman", Times, serif;
  --font-weight-heading: 600;
  --glas-card-bg: initial;
  --glas-card-border: initial;
  --glas-card-filter: initial;
  --glas-card-grain: initial;
  --glas-card-grain-opacity: initial;
  --glas-card-shadow: initial;
  --glas-page-image: initial;
  --glas-pill-bg: initial;
  --glas-pill-bg-hover: initial;
  --glas-pill-border: initial;
  --smavoo-auth-hero-ink: #1a1814;
  --smavoo-auth-hero-secondary: #4a443c;
  --smavoo-auth-hero-accent: #1a3d80;
  --smavoo-auth-card-scheme: light;
}

/* prism · dark (library theme "prism-dark") */
.smavoo-auth[data-family="prism"][data-mode="dark"] {
  --color-bg-page: #14110c;
  --color-bg-surface: #1b1813;
  --color-bg-surface-raised: #232019;
  --color-border: #2e2a21;
  --color-border-focus: #8fb2ee;
  --color-control-border: #79736a;
  --color-interactive-primary: #2c53a3;
  --color-interactive-primary-active: #24478e;
  --color-interactive-primary-hover: #3a64b8;
  --color-interactive-secondary: #232019;
  --color-interactive-secondary-hover: #2c2820;
  --color-status-error: #e58e77;
  --color-status-error-bg: rgba(224, 122, 95, 0.16);
  --color-status-info: #8fb2ee;
  --color-status-info-bg: rgba(143, 178, 238, 0.14);
  --color-status-success: #6cbf8a;
  --color-status-success-bg: rgba(108, 191, 138, 0.14);
  --color-text-brand: #8fb2ee;
  --color-text-inverse: #ffffff;
  --color-text-muted: #97907f;
  --color-text-primary: #f4f0e6;
  --color-text-secondary: #cfc8b8;
  --font-family-serif: Georgia, Cambria, "Times New Roman", Times, serif;
  --font-weight-heading: 600;
  --glas-card-bg: initial;
  --glas-card-border: initial;
  --glas-card-filter: initial;
  --glas-card-grain: initial;
  --glas-card-grain-opacity: initial;
  --glas-card-shadow: initial;
  --glas-page-image: initial;
  --glas-pill-bg: initial;
  --glas-pill-bg-hover: initial;
  --glas-pill-border: initial;
  --smavoo-auth-hero-ink: #f4f0e6;
  --smavoo-auth-hero-secondary: #cfc8b8;
  --smavoo-auth-hero-accent: #8fb2ee;
  --smavoo-auth-card-scheme: dark;
}

/* atlas · light (library theme "atlas-light") */
.smavoo-auth[data-family="atlas"]:not([data-mode="dark"]) {
  --color-bg-page: #f6f9fc;
  --color-bg-surface: #ffffff;
  --color-bg-surface-raised: #eef3f8;
  --color-border: #dbe4ee;
  --color-border-focus: #17708f;
  --color-control-border: #768598;
  --color-interactive-primary: #2596be;
  --color-interactive-primary-active: #1a7092;
  --color-interactive-primary-hover: #1f84a8;
  --color-interactive-secondary: #eef3f8;
  --color-interactive-secondary-hover: #e3ebf3;
  --color-status-error: #a2402a;
  --color-status-error-bg: rgba(181, 72, 47, 0.1);
  --color-status-info: #156885;
  --color-status-info-bg: rgba(37, 150, 190, 0.12);
  --color-status-success: #0a5449;
  --color-status-success-bg: rgba(10, 84, 73, 0.1);
  --color-text-brand: #17708f;
  --color-text-inverse: #041220;
  --color-text-muted: #62748a;
  --color-text-primary: #0b1626;
  --color-text-secondary: #3d4d66;
  --font-family-serif: "Instrument Serif", Georgia, "Times New Roman", serif;
  --font-weight-heading: 600;
  --glas-card-bg: initial;
  --glas-card-border: initial;
  --glas-card-filter: initial;
  --glas-card-grain: initial;
  --glas-card-grain-opacity: initial;
  --glas-card-shadow: initial;
  --glas-page-image: initial;
  --glas-pill-bg: initial;
  --glas-pill-bg-hover: initial;
  --glas-pill-border: initial;
  --smavoo-auth-hero-ink: #0b1626;
  --smavoo-auth-hero-secondary: #3d4d66;
  --smavoo-auth-hero-accent: #17708f;
  --smavoo-auth-card-scheme: light;
}

/* atlas · dark (library theme "atlas") */
.smavoo-auth[data-family="atlas"][data-mode="dark"] {
  --color-bg-page: #02050e;
  --color-bg-surface: #0b1530;
  --color-bg-surface-raised: #112042;
  --color-border: #1a2c4e;
  --color-border-focus: #4fb8d8;
  --color-control-border: #6779a2;
  --color-interactive-primary: #2596be;
  --color-interactive-primary-active: #1d7a9c;
  --color-interactive-primary-hover: #3aa9cf;
  --color-interactive-secondary: #112042;
  --color-interactive-secondary-hover: #1a2d56;
  --color-status-error: #e59581;
  --color-status-error-bg: rgba(224, 128, 104, 0.16);
  --color-status-info: #4fb8d8;
  --color-status-info-bg: rgba(79, 184, 216, 0.14);
  --color-status-success: #7ecbe0;
  --color-status-success-bg: rgba(126, 203, 224, 0.14);
  --color-text-brand: #4fb8d8;
  --color-text-inverse: #020611;
  --color-text-muted: #8b9bb8;
  --color-text-primary: #f0f5fc;
  --color-text-secondary: #c8d4e8;
  --font-family-serif: "Instrument Serif", Georgia, "Times New Roman", serif;
  --font-weight-heading: 600;
  --glas-card-bg: initial;
  --glas-card-border: initial;
  --glas-card-filter: initial;
  --glas-card-grain: initial;
  --glas-card-grain-opacity: initial;
  --glas-card-shadow: initial;
  --glas-page-image: initial;
  --glas-pill-bg: initial;
  --glas-pill-bg-hover: initial;
  --glas-pill-border: initial;
  --smavoo-auth-hero-ink: #f0f5fc;
  --smavoo-auth-hero-secondary: #c8d4e8;
  --smavoo-auth-hero-accent: #4fb8d8;
  --smavoo-auth-card-scheme: dark;
}

/* terra · light (library theme "terra-light") */
.smavoo-auth[data-family="terra"]:not([data-mode="dark"]) {
  --color-bg-page: #f1eadd;
  --color-bg-surface: #faf6ee;
  --color-bg-surface-raised: #fffdf7;
  --color-border: #ded3bf;
  --color-border-focus: #b96428;
  --color-control-border: #90775b;
  --color-interactive-primary: #ec8b3a;
  --color-interactive-primary-active: #b96428;
  --color-interactive-primary-hover: #d97c32;
  --color-interactive-secondary: #f0e8da;
  --color-interactive-secondary-hover: #e6ddcd;
  --color-status-error: #9a3816;
  --color-status-error-bg: rgba(184, 67, 26, 0.1);
  --color-status-info: #2f5b5e;
  --color-status-info-bg: rgba(47, 91, 94, 0.12);
  --color-status-success: #495f3a;
  --color-status-success-bg: rgba(94, 122, 74, 0.12);
  --color-text-brand: #8f512e;
  --color-text-inverse: #1a1006;
  --color-text-muted: #6b6050;
  --color-text-primary: #231e17;
  --color-text-secondary: #5a5044;
  --font-family-serif: "Instrument Serif", Georgia, "Times New Roman", serif;
  --font-weight-heading: 600;
  --glas-card-bg: initial;
  --glas-card-border: initial;
  --glas-card-filter: initial;
  --glas-card-grain: initial;
  --glas-card-grain-opacity: initial;
  --glas-card-shadow: initial;
  --glas-page-image: initial;
  --glas-pill-bg: initial;
  --glas-pill-bg-hover: initial;
  --glas-pill-border: initial;
  --smavoo-auth-hero-ink: #231e17;
  --smavoo-auth-hero-secondary: #5a5044;
  --smavoo-auth-hero-accent: #8f512e;
  --smavoo-auth-card-scheme: light;
}

/* terra · dark (library theme "terra") */
.smavoo-auth[data-family="terra"][data-mode="dark"] {
  --color-bg-page: #0c0805;
  --color-bg-surface: #f1eadd;
  --color-bg-surface-raised: #f7f1e8;
  --color-border: #e6ddcd;
  --color-border-focus: #ec8b3a;
  --color-control-border: #96755e;
  --color-interactive-primary: #ec8b3a;
  --color-interactive-primary-active: #c87035;
  --color-interactive-primary-hover: #f7a64f;
  --color-interactive-secondary: #f0e8da;
  --color-interactive-secondary-hover: #e6ddcd;
  --color-status-error: #9a3816;
  --color-status-error-bg: rgba(184, 67, 26, 0.1);
  --color-status-info: #2f5b5e;
  --color-status-info-bg: rgba(47, 91, 94, 0.12);
  --color-status-success: #495f3a;
  --color-status-success-bg: rgba(94, 122, 74, 0.12);
  --color-text-brand: #8f512e;
  --color-text-inverse: #1a1006;
  --color-text-muted: #6b6050;
  --color-text-primary: #231e17;
  --color-text-secondary: #5a5044;
  --font-family-serif: "Instrument Serif", Georgia, "Times New Roman", serif;
  --font-weight-heading: 600;
  --glas-card-bg: initial;
  --glas-card-border: initial;
  --glas-card-filter: initial;
  --glas-card-grain: initial;
  --glas-card-grain-opacity: initial;
  --glas-card-shadow: initial;
  --glas-page-image: initial;
  --glas-pill-bg: initial;
  --glas-pill-bg-hover: initial;
  --glas-pill-border: initial;
  --smavoo-auth-hero-ink: #f1eadd;
  --smavoo-auth-hero-secondary: #cdc3b4;
  --smavoo-auth-hero-accent: #f9b25a;
  --smavoo-auth-card-scheme: light;
}

@media (prefers-color-scheme: dark) {
  /* glas · dark (library theme "glas"), mode auto */
  .smavoo-auth:not([data-family="prism"], [data-family="atlas"], [data-family="terra"]):not([data-mode="light"]) {
    --color-bg-page: #0f1a24;
    --color-bg-surface: #0e1a23;
    --color-bg-surface-raised: #15232f;
    --color-border: rgba(255, 255, 255, 0.12);
    --color-border-focus: #ffb26b;
    --color-control-border: #7a8894;
    --color-interactive-primary: #f2811d;
    --color-interactive-primary-active: #d96f10;
    --color-interactive-primary-hover: #f79646;
    --color-interactive-secondary: #1c2c3a;
    --color-interactive-secondary-hover: #26394a;
    --color-status-error: #ffb8ac;
    --color-status-error-bg: rgba(255, 170, 156, 0.16);
    --color-status-info: #9ac8f0;
    --color-status-info-bg: rgba(140, 193, 238, 0.14);
    --color-status-success: #7fe0a8;
    --color-status-success-bg: rgba(75, 196, 127, 0.16);
    --color-text-brand: #ffb26b;
    --color-text-inverse: #171614;
    --color-text-muted: #9ca8b2;
    --color-text-primary: #f2f5f7;
    --color-text-secondary: #b3bdc5;
    --font-family-serif: Georgia, Cambria, "Times New Roman", Times, serif;
    --font-weight-heading: 500;
    --glas-card-bg: linear-gradient(rgba(11, 11, 10, 0.5), rgba(11, 11, 10, 0.5));
    --glas-card-border: rgba(255, 255, 255, 0.1);
    --glas-card-filter: blur(34px) saturate(1.25);
    --glas-card-grain: none;
    --glas-card-grain-opacity: 0;
    --glas-card-shadow: 0 50px 130px rgba(0, 0, 0, 0.55), inset 0 1px 0 rgba(255, 255, 255, 0.09);
    --glas-page-image: linear-gradient(180deg, rgba(15, 15, 15, 0.05), rgba(15, 15, 15, 0.3) 75%), radial-gradient(1000px 620px at 0% 0%, #1b3a55, transparent 65%), radial-gradient(900px 600px at 100% 6%, #1d3c55, transparent 62%), radial-gradient(900px 480px at 8% 108%, rgba(200, 120, 70, 0.5), transparent 65%), radial-gradient(700px 400px at 60% 105%, rgba(120, 100, 80, 0.3), transparent 65%), linear-gradient(#10222f, #10222f);
    --glas-pill-bg: rgba(28, 44, 58, 0.85);
    --glas-pill-bg-hover: #26394a;
    --glas-pill-border: rgba(255, 255, 255, 0.14);
    --smavoo-auth-hero-ink: #f2f5f7;
    --smavoo-auth-hero-secondary: #b3bdc5;
    --smavoo-auth-hero-accent: #ffb26b;
    --smavoo-auth-card-scheme: dark;
  }

  /* prism · dark (library theme "prism-dark"), mode auto */
  .smavoo-auth[data-family="prism"]:not([data-mode="light"]) {
    --color-bg-page: #14110c;
    --color-bg-surface: #1b1813;
    --color-bg-surface-raised: #232019;
    --color-border: #2e2a21;
    --color-border-focus: #8fb2ee;
    --color-control-border: #79736a;
    --color-interactive-primary: #2c53a3;
    --color-interactive-primary-active: #24478e;
    --color-interactive-primary-hover: #3a64b8;
    --color-interactive-secondary: #232019;
    --color-interactive-secondary-hover: #2c2820;
    --color-status-error: #e58e77;
    --color-status-error-bg: rgba(224, 122, 95, 0.16);
    --color-status-info: #8fb2ee;
    --color-status-info-bg: rgba(143, 178, 238, 0.14);
    --color-status-success: #6cbf8a;
    --color-status-success-bg: rgba(108, 191, 138, 0.14);
    --color-text-brand: #8fb2ee;
    --color-text-inverse: #ffffff;
    --color-text-muted: #97907f;
    --color-text-primary: #f4f0e6;
    --color-text-secondary: #cfc8b8;
    --font-family-serif: Georgia, Cambria, "Times New Roman", Times, serif;
    --font-weight-heading: 600;
    --glas-card-bg: initial;
    --glas-card-border: initial;
    --glas-card-filter: initial;
    --glas-card-grain: initial;
    --glas-card-grain-opacity: initial;
    --glas-card-shadow: initial;
    --glas-page-image: initial;
    --glas-pill-bg: initial;
    --glas-pill-bg-hover: initial;
    --glas-pill-border: initial;
    --smavoo-auth-hero-ink: #f4f0e6;
    --smavoo-auth-hero-secondary: #cfc8b8;
    --smavoo-auth-hero-accent: #8fb2ee;
    --smavoo-auth-card-scheme: dark;
  }

  /* atlas · dark (library theme "atlas"), mode auto */
  .smavoo-auth[data-family="atlas"]:not([data-mode="light"]) {
    --color-bg-page: #02050e;
    --color-bg-surface: #0b1530;
    --color-bg-surface-raised: #112042;
    --color-border: #1a2c4e;
    --color-border-focus: #4fb8d8;
    --color-control-border: #6779a2;
    --color-interactive-primary: #2596be;
    --color-interactive-primary-active: #1d7a9c;
    --color-interactive-primary-hover: #3aa9cf;
    --color-interactive-secondary: #112042;
    --color-interactive-secondary-hover: #1a2d56;
    --color-status-error: #e59581;
    --color-status-error-bg: rgba(224, 128, 104, 0.16);
    --color-status-info: #4fb8d8;
    --color-status-info-bg: rgba(79, 184, 216, 0.14);
    --color-status-success: #7ecbe0;
    --color-status-success-bg: rgba(126, 203, 224, 0.14);
    --color-text-brand: #4fb8d8;
    --color-text-inverse: #020611;
    --color-text-muted: #8b9bb8;
    --color-text-primary: #f0f5fc;
    --color-text-secondary: #c8d4e8;
    --font-family-serif: "Instrument Serif", Georgia, "Times New Roman", serif;
    --font-weight-heading: 600;
    --glas-card-bg: initial;
    --glas-card-border: initial;
    --glas-card-filter: initial;
    --glas-card-grain: initial;
    --glas-card-grain-opacity: initial;
    --glas-card-shadow: initial;
    --glas-page-image: initial;
    --glas-pill-bg: initial;
    --glas-pill-bg-hover: initial;
    --glas-pill-border: initial;
    --smavoo-auth-hero-ink: #f0f5fc;
    --smavoo-auth-hero-secondary: #c8d4e8;
    --smavoo-auth-hero-accent: #4fb8d8;
    --smavoo-auth-card-scheme: dark;
  }

  /* terra · dark (library theme "terra"), mode auto */
  .smavoo-auth[data-family="terra"]:not([data-mode="light"]) {
    --color-bg-page: #0c0805;
    --color-bg-surface: #f1eadd;
    --color-bg-surface-raised: #f7f1e8;
    --color-border: #e6ddcd;
    --color-border-focus: #ec8b3a;
    --color-control-border: #96755e;
    --color-interactive-primary: #ec8b3a;
    --color-interactive-primary-active: #c87035;
    --color-interactive-primary-hover: #f7a64f;
    --color-interactive-secondary: #f0e8da;
    --color-interactive-secondary-hover: #e6ddcd;
    --color-status-error: #9a3816;
    --color-status-error-bg: rgba(184, 67, 26, 0.1);
    --color-status-info: #2f5b5e;
    --color-status-info-bg: rgba(47, 91, 94, 0.12);
    --color-status-success: #495f3a;
    --color-status-success-bg: rgba(94, 122, 74, 0.12);
    --color-text-brand: #8f512e;
    --color-text-inverse: #1a1006;
    --color-text-muted: #6b6050;
    --color-text-primary: #231e17;
    --color-text-secondary: #5a5044;
    --font-family-serif: "Instrument Serif", Georgia, "Times New Roman", serif;
    --font-weight-heading: 600;
    --glas-card-bg: initial;
    --glas-card-border: initial;
    --glas-card-filter: initial;
    --glas-card-grain: initial;
    --glas-card-grain-opacity: initial;
    --glas-card-shadow: initial;
    --glas-page-image: initial;
    --glas-pill-bg: initial;
    --glas-pill-bg-hover: initial;
    --glas-pill-border: initial;
    --smavoo-auth-hero-ink: #f1eadd;
    --smavoo-auth-hero-secondary: #cdc3b4;
    --smavoo-auth-hero-accent: #f9b25a;
    --smavoo-auth-card-scheme: light;
  }
}

/* ── Mode ──────────────────────────────────────────────────────────────
   Values no theme token carries: the photographic treatment of plan §4 and the
   logo variant of §6. Light is the base. Dark is written twice, pinned and auto;
   keep the two blocks identical (auth-css.test.ts compares them). */
.smavoo-auth {
  color-scheme: light;
  /* The pale veil on the text side, over daylight pictures. */
  --smavoo-auth-scrim: linear-gradient(
    90deg,
    rgb(241 244 243 / 0.86) 0%,
    rgb(241 244 243 / 0.6) 30%,
    rgb(241 244 243 / 0.12) 55%,
    rgb(241 244 243 / 0.45) 100%
  );
  /* A soft shade right behind logo and heading, so they read on any part of any picture. */
  --smavoo-auth-shade: radial-gradient(farthest-side, rgb(241 244 243 / 0.8), rgb(241 244 243 / 0.7) 60%, transparent);
  /* The handheld band: the text runs across the whole picture, so the veil is even,
     densest in the upper half where logo and heading stand. At .72 → .5 the accent
     word measured 2.69:1 (atlas-light, identity's bench band crop, SWID-062). */
  --smavoo-auth-scrim-band: linear-gradient(180deg, rgb(241 244 243 / 0.82) 0%, rgb(241 244 243 / 0.78) 50%, rgb(241 244 243 / 0.5) 100%);
  --smavoo-auth-logo-on-light: block;
  --smavoo-auth-logo-on-dark: none;
  --smavoo-auth-plaque: transparent;
  --smavoo-auth-plaque-padding: 0;
}

.smavoo-auth[data-mode="dark"] {
  color-scheme: dark;
  --smavoo-auth-scrim: linear-gradient(
    90deg,
    rgb(8 14 22 / 0.82) 0%,
    rgb(8 14 22 / 0.55) 30%,
    rgb(8 14 22 / 0.12) 55%,
    rgb(8 14 22 / 0.6) 100%
  );
  --smavoo-auth-shade: radial-gradient(farthest-side, rgb(8 14 22 / 0.72), rgb(8 14 22 / 0.6) 60%, transparent);
  --smavoo-auth-scrim-band: linear-gradient(180deg, rgb(8 14 22 / 0.62), rgb(8 14 22 / 0.42));
  --smavoo-auth-logo-on-light: none;
  --smavoo-auth-logo-on-dark: block;
  /* A tenant logo without a dark version stands on a light plaque (plan §6),
     glas-light's surface, instead of vanishing black on dark. */
  --smavoo-auth-plaque: #f8fafb;
  --smavoo-auth-plaque-padding: 6px 10px;
}

.smavoo-auth[data-mode="dark"] .smavoo-auth-photo {
  background-image: var(--smavoo-auth-photo-dark);
}

@media (prefers-color-scheme: dark) {
  .smavoo-auth:not([data-mode="light"]) {
    color-scheme: dark;
    --smavoo-auth-scrim: linear-gradient(
      90deg,
      rgb(8 14 22 / 0.82) 0%,
      rgb(8 14 22 / 0.55) 30%,
      rgb(8 14 22 / 0.12) 55%,
      rgb(8 14 22 / 0.6) 100%
    );
    --smavoo-auth-shade: radial-gradient(farthest-side, rgb(8 14 22 / 0.72), rgb(8 14 22 / 0.6) 60%, transparent);
    --smavoo-auth-scrim-band: linear-gradient(180deg, rgb(8 14 22 / 0.62), rgb(8 14 22 / 0.42));
    --smavoo-auth-logo-on-light: none;
    --smavoo-auth-logo-on-dark: block;
    --smavoo-auth-plaque: #f8fafb;
    --smavoo-auth-plaque-padding: 6px 10px;
  }

  .smavoo-auth:not([data-mode="light"]) .smavoo-auth-photo {
    background-image: var(--smavoo-auth-photo-dark);
  }
}

/* ── Page ──────────────────────────────────────────────────────────── */
/* The root may be <body> itself (identity) or a <div> (AuthLayout). */
.smavoo-auth {
  --smavoo-auth-font-accent: "Instrument Serif", var(--font-family-serif);
  /* A film of the card's own surface under its glass. The library's glass is tuned
     for its calm canvas; over a photo, a bright or dark patch behind the card
     dropped the labels to 2.6:1 (scripts/measure-auth-contrast.ts). */
  --smavoo-auth-card-veil: color-mix(in srgb, var(--color-bg-surface) 50%, transparent);
  position: relative;
  isolation: isolate;
  box-sizing: border-box;
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 420px);
  align-items: center;
  column-gap: var(--spacing-12);
  min-height: 100vh;
  /* biome-ignore lint/suspicious/noDuplicateProperties: 100vh is the fallback for browsers without dvh (older handheld WebViews) */
  min-height: 100dvh;
  margin: 0;
  padding: var(--spacing-10) 8vw var(--spacing-10) 56px;
  color: var(--smavoo-auth-hero-ink);
  /* No picture loaded: the page shows the canvas (plan §9), Glas's own where it has one. */
  background-color: var(--color-bg-page);
  background-image: var(--glas-page-image, none);
  font-family: var(--font-family-sans);
  /* Set here, not inherited: a page without the library stylesheet has the
     browser's `normal`, the library's preflight has 1.5, and the card's rows
     would land a few pixels apart in the two. */
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
}

.smavoo-auth *,
.smavoo-auth *::before,
.smavoo-auth *::after {
  box-sizing: border-box;
}

/* ── Background series ─────────────────────────────────────────────────
   One .smavoo-auth-photo layer per picture, the visible one [data-active]; the
   next fades in over it (later in the DOM paints on top), and the old one keeps
   [data-active] until the 1.5 s fade is over, so nothing dips to the canvas.
   --smavoo-auth-focus is the subject's position.

   A layer comes in two forms that render the same:
     <picture class="smavoo-auth-photo"> with an <img> (identity: AVIF/WebP
       sources, the version for the mode chosen by the server or by a
       `prefers-color-scheme` source), or
     an empty element carrying --smavoo-auth-photo-dark / -light as absolute
       url()s, from which CSS picks the version for the mode (AuthLayout). A
       relative url() in a custom property resolves against this stylesheet,
       not the page. */
.smavoo-auth-backdrop {
  position: absolute;
  inset: 0;
  z-index: -1;
  overflow: hidden;
  pointer-events: none;
}

.smavoo-auth-backdrop::after {
  content: "";
  position: absolute;
  inset: 0;
  background: var(--smavoo-auth-scrim);
}

.smavoo-auth-photo {
  position: absolute;
  inset: 0;
  display: block;
  margin: 0;
  opacity: 0;
  background-image: var(--smavoo-auth-photo-light, var(--smavoo-auth-photo-dark));
  background-position: var(--smavoo-auth-focus, center);
  background-repeat: no-repeat;
  background-size: cover;
  transform-origin: 60% 50%;
}

.smavoo-auth-photo > img {
  display: block;
  width: 100%;
  height: 100%;
  max-width: none;
  object-fit: cover;
  object-position: var(--smavoo-auth-focus, center);
}

.smavoo-auth-photo[data-active] {
  opacity: 1;
}

/* 1.5 s cross-fade, slow zoom 1.00 → 1.06 over 40 s (plan §4). Only when motion is welcome. */
@media (prefers-reduced-motion: no-preference) {
  .smavoo-auth-photo {
    transition: opacity 1.5s ease;
    animation: smavoo-auth-drift 40s ease-in-out infinite alternate;
  }
}

@keyframes smavoo-auth-drift {
  from {
    transform: scale(1);
  }

  to {
    transform: scale(1.06);
  }
}

/* ── Hero: logo, heading, lead ─────────────────────────────────────── */
.smavoo-auth-hero {
  position: relative;
  max-width: min(44vw, 640px);
  color: var(--smavoo-auth-hero-ink);
}

.smavoo-auth-hero::before {
  content: "";
  position: absolute;
  inset: -110px -150px;
  z-index: -1;
  pointer-events: none;
  background: var(--smavoo-auth-shade);
}

.smavoo-auth-logo {
  display: block;
  margin: 0 0 26px;
  line-height: 0;
  color: var(--smavoo-auth-hero-ink);
}

.smavoo-auth-logo > svg,
.smavoo-auth-logo-image {
  display: block;
  height: 34px;
  width: auto;
  max-width: 100%;
}

/* A tenant logo comes as the version for light surfaces (required) and,
   optionally, one for dark surfaces. The mode shows one of them. */
.smavoo-auth-logo-image[data-surface="dark"] {
  display: var(--smavoo-auth-logo-on-dark);
}

.smavoo-auth-logo-image[data-surface="light"]:not(:only-child) {
  display: var(--smavoo-auth-logo-on-light);
}

.smavoo-auth-logo-image[data-surface="light"]:only-child {
  box-sizing: content-box;
  padding: var(--smavoo-auth-plaque-padding);
  border-radius: var(--radius-md);
  background: var(--smavoo-auth-plaque);
}

.smavoo-auth-heading {
  margin: 0;
  font-size: clamp(40px, 4.4vw, 66px);
  font-weight: var(--font-weight-medium);
  line-height: 1.02;
  letter-spacing: -0.03em;
  color: var(--smavoo-auth-hero-ink);
}

/* The last word in Instrument Serif italic, in the family's accent colour. */
.smavoo-auth-heading em {
  font-family: var(--smavoo-auth-font-accent);
  font-style: italic;
  font-weight: var(--font-weight-regular);
  letter-spacing: -0.01em;
  color: var(--smavoo-auth-hero-accent);
}

.smavoo-auth-lead {
  margin: 20px 0 0;
  font-size: var(--font-size-lg);
  line-height: 1.4;
  color: var(--smavoo-auth-hero-secondary);
}

/* ── Card ──────────────────────────────────────────────────────────── */
.smavoo-auth-main {
  position: relative;
  width: 100%;
  max-width: 420px;
  justify-self: end;
}

.smavoo-auth-card {
  position: relative;
  padding: 36px 36px 28px;
  border: 1px solid var(--glas-card-border, var(--color-border));
  border-radius: var(--radius-xl);
  background:
    linear-gradient(var(--smavoo-auth-card-veil), var(--smavoo-auth-card-veil)),
    var(--glas-card-bg, color-mix(in srgb, var(--color-bg-surface) 94%, transparent));
  box-shadow: var(--glas-card-shadow, 0 30px 70px -20px rgb(0 0 0 / 0.45));
  -webkit-backdrop-filter: var(--glas-card-filter, blur(16px));
  backdrop-filter: var(--glas-card-filter, blur(16px));
  color: var(--color-text-primary);
  /* Native controls follow the card's surface (generated): terra's dark mode has an ivory card. */
  color-scheme: var(--smavoo-auth-card-scheme);
}

/* The frost grain of glas-light: one film per card, nothing where its opacity is 0. */
.smavoo-auth-card::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  pointer-events: none;
  opacity: var(--glas-card-grain-opacity, 0);
  mix-blend-mode: soft-light;
  background: var(--glas-card-grain, none);
}

/* No backdrop-filter: the card takes the library's opaque surface (plan §9). */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .smavoo-auth-card {
    background: var(--color-bg-surface);
  }
}

.smavoo-auth-card form {
  margin: 0;
}

.smavoo-auth-header {
  margin: 0 0 22px;
}

.smavoo-auth-title {
  margin: 0;
  font-size: 28px;
  font-weight: var(--font-weight-heading);
  line-height: 1.15;
  letter-spacing: var(--letter-spacing-tight);
  color: var(--color-text-primary);
}

.smavoo-auth-description {
  margin: 6px 0 0;
  font-size: 15px;
  line-height: 1.4;
  color: var(--color-text-secondary);
}

/* A paragraph in the card: the consent request, the logout question, an error page's explanation. */
.smavoo-auth-text {
  margin: 0 0 16px;
  font-size: 15px;
  line-height: 1.5;
  color: var(--color-text-secondary);
}

/* A plain list in the card, e.g. the scopes on the consent page; an item may hold a .smavoo-auth-check. */
.smavoo-auth-list {
  margin: 0 0 16px;
  padding: 0;
  list-style: none;
  border-top: 1px solid var(--color-border);
}

.smavoo-auth-list > li {
  padding: 10px 0;
  border-bottom: 1px solid var(--color-border);
  font-size: 14px;
  color: var(--color-text-primary);
}

.smavoo-auth-list > li > .smavoo-auth-check {
  margin: 0;
  color: inherit;
}

/* The status mark of an error page: an icon (16–24px svg) in a tinted circle above the title. */
.smavoo-auth-glyph {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 48px;
  height: 48px;
  margin: 0 0 16px;
  border-radius: var(--radius-full);
  background: var(--color-status-info-bg);
  color: var(--color-status-info);
}

.smavoo-auth-glyph[data-tone="error"] {
  background: var(--color-status-error-bg);
  color: var(--color-status-error);
}

.smavoo-auth-glyph[data-tone="success"] {
  background: var(--color-status-success-bg);
  color: var(--color-status-success);
}

.smavoo-auth-glyph > svg {
  width: 24px;
  height: 24px;
}

.smavoo-auth-message {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  margin: 0 0 16px;
  padding: 12px 14px;
  border-radius: var(--radius-md);
  font-size: 14px;
  line-height: 1.4;
  background: var(--color-status-info-bg);
  color: var(--color-status-info);
}

.smavoo-auth-message[data-tone="error"] {
  background: var(--color-status-error-bg);
  color: var(--color-status-error);
}

.smavoo-auth-message[data-tone="success"] {
  background: var(--color-status-success-bg);
  color: var(--color-status-success);
}

.smavoo-auth-message > svg {
  flex-shrink: 0;
  width: 16px;
  height: 16px;
  margin-top: 1px;
}

.smavoo-auth-message-title {
  display: block;
  font-weight: var(--font-weight-semibold);
}

.smavoo-auth-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  width: 100%;
  height: 46px;
  margin: 0;
  padding: 0 16px;
  border: 1px solid transparent;
  border-radius: var(--radius-md);
  font: inherit;
  font-size: 15px;
  font-weight: var(--font-weight-medium);
  line-height: 1;
  text-decoration: none;
  cursor: pointer;
  transition:
    background-color var(--duration-base) var(--ease-standard),
    border-color var(--duration-base) var(--ease-standard);
  -webkit-tap-highlight-color: transparent;
}

.smavoo-auth-button:focus-visible {
  outline: 2px solid var(--color-border-focus);
  outline-offset: 2px;
}

.smavoo-auth-button > svg {
  flex-shrink: 0;
  width: 16px;
  height: 16px;
}

/* Primary is the default, so a bare `class="smavoo-auth-button"` submits in the brand colour. */
.smavoo-auth-button:not([data-variant="secondary"]) {
  margin-top: 6px;
  background: var(--color-interactive-primary);
  color: var(--color-text-inverse);
}

.smavoo-auth-button:not([data-variant="secondary"]):hover {
  background: var(--color-interactive-primary-hover);
}

.smavoo-auth-button:not([data-variant="secondary"]):active {
  background: var(--color-interactive-primary-active);
}

/* Secondary: the SSO button, a pill on the card. */
.smavoo-auth-button[data-variant="secondary"] {
  border-color: var(--glas-pill-border, var(--color-control-border));
  background: var(--glas-pill-bg, var(--color-interactive-secondary));
  color: var(--color-text-primary);
}

.smavoo-auth-button[data-variant="secondary"]:hover {
  background: var(--glas-pill-bg-hover, var(--color-interactive-secondary-hover));
}

.smavoo-auth-button:disabled,
.smavoo-auth-button[aria-disabled="true"] {
  opacity: 0.6;
  cursor: not-allowed;
}

/* Hidden until the button is busy: `aria-busy="true"` while the form submits. */
.smavoo-auth-spinner {
  display: none;
  flex-shrink: 0;
  width: 16px;
  height: 16px;
  border: 2px solid currentColor;
  border-right-color: transparent;
  border-radius: 50%;
}

.smavoo-auth-button[aria-busy="true"] .smavoo-auth-spinner {
  display: inline-block;
}

@media (prefers-reduced-motion: no-preference) {
  .smavoo-auth-spinner {
    animation: smavoo-auth-spin 0.8s linear infinite;
  }
}

@keyframes smavoo-auth-spin {
  to {
    transform: rotate(360deg);
  }
}

.smavoo-auth-actions {
  display: flex;
  gap: 12px;
}

.smavoo-auth-actions > .smavoo-auth-button {
  flex: 1;
  margin-top: 6px;
}

.smavoo-auth-divider {
  display: flex;
  align-items: center;
  gap: 12px;
  margin: 18px 0;
  font-size: 12px;
  color: var(--color-text-muted);
}

.smavoo-auth-divider::before,
.smavoo-auth-divider::after {
  content: "";
  flex: 1;
  height: 1px;
  background: var(--color-border);
}

.smavoo-auth-field {
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin: 0 0 14px;
}

.smavoo-auth-label {
  font-size: 13px;
  font-weight: var(--font-weight-label);
  color: var(--color-text-secondary);
}

/* The edge is --color-control-border, the library's 3:1 edge for form controls
   (WCAG 1.4.11), not the faint pill edge: over a photo the fill alone does not
   mark the field. Moved a quarter towards the ink, because the glass card over a
   bright photo is lighter than the canvas the token was tuned on (glas-light:
   2.65:1 at the worst pixel before, scripts/measure-auth-contrast.ts). */
.smavoo-auth-input {
  width: 100%;
  height: 46px;
  margin: 0;
  padding: 0 14px;
  border: 1px solid color-mix(in srgb, var(--color-control-border), var(--color-text-primary) 25%);
  border-radius: var(--radius-md);
  /* The surface, as the library's Input: muted placeholder ink is tuned against it
     (on atlas-light's raised surface it was 4.29:1). */
  background: var(--glas-pill-bg, var(--color-bg-surface));
  color: var(--color-text-primary);
  font: inherit;
  font-size: 15px;
  outline: none;
  transition:
    border-color var(--duration-base) var(--ease-standard),
    box-shadow var(--duration-base) var(--ease-standard);
}

.smavoo-auth-input::placeholder {
  color: var(--color-text-muted);
  opacity: 1;
}

.smavoo-auth-input:focus {
  border-color: var(--color-border-focus);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-border-focus) 22%, transparent);
}

.smavoo-auth-input[aria-invalid="true"] {
  border-color: var(--color-status-error);
}

/* Browser autofill paints its own pale fill; keep the card's ink and surface. */
.smavoo-auth-input:-webkit-autofill {
  -webkit-text-fill-color: var(--color-text-primary);
  box-shadow: 0 0 0 100px var(--color-bg-surface-raised) inset;
  caret-color: var(--color-text-primary);
}

.smavoo-auth-hint {
  margin: 0;
  font-size: 12px;
  line-height: 1.4;
  color: var(--color-text-muted);
}

.smavoo-auth-hint[data-tone="error"] {
  color: var(--color-status-error);
}

.smavoo-auth-check {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 2px 0 14px;
  font-size: 14px;
  color: var(--color-text-secondary);
  cursor: pointer;
}

.smavoo-auth-check > input {
  flex-shrink: 0;
  width: 16px;
  height: 16px;
  margin: 0;
  accent-color: var(--color-interactive-primary);
}

.smavoo-auth-link {
  color: var(--color-text-brand);
  text-underline-offset: 2px;
}

.smavoo-auth-footer {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  margin: 22px 0 0;
  font-size: 12px;
  line-height: 1.4;
  text-align: center;
  color: var(--color-text-muted);
}

/* "powered by SMAVOO": stays, small, wherever a tenant logo replaces the wordmark (plan §6). */
.smavoo-auth-powered {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.smavoo-auth-powered > svg {
  width: auto;
  height: 12px;
}

/* ── Narrow: hero above the card ───────────────────────────────────── */
@media (max-width: 900px) {
  .smavoo-auth {
    grid-template-columns: minmax(0, 420px);
    justify-content: center;
    align-content: center;
    row-gap: var(--spacing-8);
    padding: var(--spacing-10) var(--spacing-6);
  }

  .smavoo-auth-hero {
    max-width: none;
  }

  .smavoo-auth-main {
    justify-self: stretch;
  }
}

/* ── Handheld (C72: 411 × 731 CSS px) ──────────────────────────────────
   The picture becomes a band at the top that fades into the canvas, with logo
   and heading on it; the card follows right below and overlaps the band. No
   rotation, no zoom, 50px targets (plan §4 "HDT", §9). The 520px must match
   AUTH_STILL_QUERY in src/components/auth-layout/auth.config.ts. */
@media (max-width: 520px) {
  /* `align-content` from the rule above also centres a block container (Chrome 123+). */
  .smavoo-auth {
    display: block;
    align-content: normal;
    padding: 0;
  }

  .smavoo-auth-backdrop::after {
    background: var(--smavoo-auth-scrim-band);
  }

  .smavoo-auth-backdrop {
    bottom: auto;
    height: 40vh;
    -webkit-mask-image: linear-gradient(#000 50%, transparent);
    mask-image: linear-gradient(#000 50%, transparent);
  }

  /* Zoomed in around the subject, so it fills the band. A transform, not a
     background size, so the <picture> form zooms the same. */
  .smavoo-auth-photo {
    animation: none;
    transform: scale(1.65);
    transform-origin: var(--smavoo-auth-focus, center);
  }

  .smavoo-auth-hero {
    max-width: none;
    padding: 4.5vh 20px 0;
  }

  .smavoo-auth-hero::before {
    inset: -40px -20px;
  }

  .smavoo-auth-logo {
    margin-bottom: 10px;
  }

  .smavoo-auth-logo > svg,
  .smavoo-auth-logo-image {
    height: 22px;
  }

  .smavoo-auth-heading {
    font-size: 34px;
  }

  .smavoo-auth-heading br,
  .smavoo-auth-lead {
    display: none;
  }

  .smavoo-auth-main {
    max-width: none;
    padding: var(--spacing-2) var(--spacing-4) var(--spacing-5);
  }

  .smavoo-auth-card {
    padding: 24px 20px 20px;
  }

  .smavoo-auth-title {
    font-size: 24px;
  }

  .smavoo-auth-button,
  .smavoo-auth-input {
    height: 50px;
  }
}

/* ── Forced colours ────────────────────────────────────────────────────
   The field's focus ring is a box-shadow, which forced-colors mode does not
   paint. The library stylesheet has a global rule for this; the standalone file
   needs its own. */
@media (forced-colors: active) {
  .smavoo-auth-input:focus,
  .smavoo-auth-check > input:focus-visible {
    outline: 2px solid Highlight;
    outline-offset: 2px;
  }
}
