> ## Documentation Index
> Fetch the complete documentation index at: https://docs.compliance.legaltalent.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Customization

> Branding, dark mode, header, attribution and capture options for the mobile flow

## Branding

By default the SDK applies the branding configured in the dashboard (Configuración → Marca), the same model the web flow uses: five seed colors, an optional logo, a typography preset and per-element overrides. Anything you don't override is derived from the seeds exactly like the web flow, and a dark background color flips the derivation so dark brands work without a dark-mode flag.

Choose the source with `brandingMode`:

| iOS                    | Android                                    | Behavior                                                 |
| ---------------------- | ------------------------------------------ | -------------------------------------------------------- |
| `.automatic` (default) | `LegalTalentBrandingMode.Automatic`        | Tenant branding when customized, platform look otherwise |
| `.tenant`              | `LegalTalentBrandingMode.Tenant`           | Always the tenant branding                               |
| `.platform`            | `LegalTalentBrandingMode.Platform`         | Ignore tenant branding                                   |
| `.custom(KYCBranding)` | `LegalTalentBrandingMode.Custom(branding)` | Your own palette, passed from the app                    |

<Note>
  Typography presets (`inter`, `roboto`, `lato`, …) resolve to a font only if your app bundles that font. Otherwise the SDK falls back to the system font.
</Note>

## Color mode

`colorMode` sets light or dark: `.system` (default), `.light`, `.dark` on iOS; `SYSTEM`, `LIGHT`, `DARK` on Android. `showsThemeToggle: true` adds a light/dark switch to the header.

## Language

The flow runs in English, Spanish or Portuguese, following the workflow's language settings:

* If the workflow pins one language, the flow always uses it.
* Otherwise the SDK uses the device language when the workflow allows it, and falls back to the first allowed language.

By default the header shows a language picker when the workflow allows more than one language. `showsLanguageSwitcher: false` hides it; `true` shows it, and on a workflow that pins a language it offers all three.

## Header, exit and attribution

<Tabs>
  <Tab title="iOS">
    * The SDK draws one header with the tenant logo (or the workflow name), the step counter, a progress bar and the optional switchers. It never shows the Legal Talent logo.
    * `showsHeader: false` hides it when your app provides its own navigation bar.
    * `onExit:` adds a close button with a confirmation dialog.
    * `showsAttribution: false` hides the "Powered by Legal Talent" footer. White-label tenants never show it.
    * `autoDismissOnComplete: true` dismisses the flow (SwiftUI `dismiss()`) as soon as it finishes, instead of leaving the final page on screen. Use it when you present the flow modally and don't dismiss it yourself in `onComplete`.
  </Tab>

  <Tab title="Android">
    The header, attribution and exit button are always shown and not configurable yet. Hosts that need their own chrome should contact us.
  </Tab>
</Tabs>

## Entry gate and terms

Every flow opens on an entry gate: a brand banner, the flow name, a preview of the steps, and consent to the terms and privacy policy. The SDK uses this pause to prefetch on-device models so capture steps open instantly.

White-label tenants link their own terms. On iOS you can also pass `privacyPolicyURL`, `termsOfServiceURL`, or `tosOptions` when your tenant uses a terms-of-service system.

## Document capture

`documentCaptureOptions` tunes the document steps:

| Option                              | Default | Effect                                                     |
| ----------------------------------- | ------- | ---------------------------------------------------------- |
| `requiresReview`                    | `true`  | Show a review screen after each capture                    |
| `allowsFileSelection`               | `true`  | Offer gallery and file pickers                             |
| `allowsLibraryForIdentityDocuments` | `true`  | Offer pickers on identity document steps                   |
| `preCaptureCountdownSeconds`        | `0`     | Seconds a document must stay in frame before auto-capture  |
| `recordsCaptureClip`                | `true`  | Keep a short pre-capture clip for reviewer forensics (iOS) |

Presets: `.standard`, `.cameraOnly`, `.automaticCameraOnly`, `.guidedCameraOnlyForIdentityDocuments`.

<Info>
  The workflow's identity document policy always wins: `capture_mode: live_only` hides the pickers and `upload_only` hides the camera, regardless of these options.
</Info>

## Selfie capture

The selfie step always uses the front camera with framing checks and auto-capture; there is no gallery path. On iOS, `selfieCaptureOptions` accepts:

* `.standard`: runs a passive on-device anti-spoof check and attaches its evidence to the step.
* `.cameraOnlyNoAntiSpoof`: same capture UX without the model, for low-end devices or when your backend runs its own presentation-attack detection.

On Android the equivalent parameter is `selfieCaptureConfiguration`.

## Liveness screens

The face-liveness detector is rendered by AWS Amplify: its oval, live prompts and spinner use Amplify's own colors and cannot be themed. The SDK brands everything around it (intro, frame, errors).

Amplify's strings can be localized. On iOS, copy the `en.lproj`, `es.lproj` and `pt.lproj` folders from `liveness-strings/` in the SDK repository into your app target and list `es` and `pt` as localizations. If you already have a `Localizable.strings`, merge the `amplify_ui_liveness_*` keys instead. The detector follows the device language, not the flow's.

If you have a dedicated Cognito Identity Pool, pass it with `livenessConfiguration`; otherwise the SDK uses the default pool for the environment.
