---
title: "S25 Profile · Me · anonymous user"
description: "Contract, a board per state (normal, loading, empty, error, offline), tokens and strings."
source: "design/hifi/S25/screen.md"
---

> Part of [Brand and design](/design/llms.txt). Every page: [llms.txt](/llms.txt).

# Hi-fi: S25 Profile · Me · anonymous user

> Generated by `botgumi-design index` from `../../screens.json`. Edit that file, not this page.

Stage: **hifi** · Key: `profile/profile` · Data-binding map: [bindings.md](/design/hifi/s25/bindings/index.md)

Drawn in the gallery: [Profile](/design/gallery/index.html#g-profile). Each board is the committed HTML in `screens/`, drawn on the example data in `docs/api/examples/`.

## Contract

- **normal**: Stats from GET /v1/me (same source as home → no 12 vs 13 mismatch); weekly quests; languages row; SIWA card for anonymous users.

Flows: none named.

Reads and calls:

- `GET /v1/me`
- `GET /v1/weekly-quests`

Local state:

- none

## Boards

One row per state. A state without boards of its own says what shows it.

| State | Board | Example data |
|---|---|---|
| normal | [zh-Hans](/design/gallery/profile/profile--normal.html) · [en](/design/gallery/profile/profile--normal.en.html) | me.json ([zh-Hans](/design/examples/zh-Hans/me.json) · [en](/design/examples/en/me.json)), weekly-quests.json ([zh-Hans](/design/examples/zh-Hans/weekly-quests.json) · [en](/design/examples/en/weekly-quests.json)) |
| loading | [no board of its own](/design/hifi/s25/bindings/index.md#states): From [states.md](/design/states/index.md) (Profile): skeleton stats |  |
| empty | [no board of its own](/design/hifi/s25/bindings/index.md#states): From [states.md](/design/states/index.md) (Profile): weekly quests none → section hidden |  |
| error | [no board of its own](/design/hifi/s25/bindings/index.md#states): From [states.md](/design/states/index.md) (Profile): inline Retry · fatal: generic error |  |
| offline | [no board of its own](/design/hifi/s25/bindings/index.md#states): From [states.md](/design/states/index.md) (Profile): cached `/me` |  |

### The boards

Each state as drawn (393 × 852), one board per locale. Open a board on its own for its spec panel.

**normal**

[S25 normal · zh-Hans](/design/gallery/profile/profile--normal.html) [S25 normal · en](/design/gallery/profile/profile--normal.en.html)

## Tokens used

By path in `../../system/tokens.source.json`.

| Token | Where |
|---|---|
| `color.bgCanvas` | `.device`, `.large`, `.navbar`, `.screen` … |
| `color.bgInverse` | `.btn--ink`, `.card--ink` |
| `color.bgInverseRaised` | `.bar`, `.card--ink`, `.icon-btn` |
| `color.bgSunken` | `.bar`, `.btn`, `.icon-btn`, `.state-illo` |
| `color.bgSurface` | `.card`, `.list` |
| `color.lineHairline` | `.btn--sm`, `.list-row`, `.tabbar` |
| `color.lineInverse` | `inline` |
| `color.reward` | `.card--ink`, `.xp-badge` |
| `color.textDisabled` | `.btn` |
| `color.textOnInverse` | `.btn--ink`, `.card--ink`, `.icon-btn` |
| `color.textOnInverseSecondary` | `.c-on-inverse-2` |
| `color.textOnReward` | `.xp-badge` |
| `color.textPrimary` | `.bar`, `.device`, `.home-indicator`, `.icon-btn` … |
| `color.textSecondary` | `.c-secondary`, `.state-illo` |
| `color.textTertiary` | `.c-tertiary`, `.chev`, `.list-row`, `.tabbar` |
| `color.topicViolet` | `.topic-violet` |
| `radius.button` | `.btn` |
| `radius.card` | `.card` |
| `radius.md` | `.card--md`, `.list` |
| `radius.pill` | `.bar`, `.btn--sm`, `.xp-badge` |
| `radius.sm` | `.topic-tile` |
| `space.gutter` | `.large`, `.navbar`, `.pad`, `.section-head` |
| `space.s3` | `.section-head` |
| `space.s5` | `.card` |
| `space.s6` | `.has-tabbar`, `.screen` |
| `space.safeBottom` | `.has-tabbar`, `.screen`, `.tabbar` |
| `space.safeTop` | `.device`, `.screen` |
| `space.section` | `.section-head` |
| `space.sizeCtaHeight` | `.btn`, `.screen` |
| `space.sizeHitMin` | `.icon-btn` |
| `space.sizeNavbarHeight` | `.navbar` |
| `space.sizeTabbarHeight` | `.has-tabbar`, `.screen`, `.tabbar` |
| `typography.callout` | `.t-callout` |
| `typography.caption1` | `.t-caption` |
| `typography.footnote` | `.t-footnote` |
| `typography.headline` | `.t-headline` |
| `typography.largeTitle` | `.t-large-title` |
| `typography.subheadline` | `.t-subhead` |
| `typography.title2` | `.t-title2` |
| `typography.title3` | `.t-title3` |

## Strings

`app.name`, `band.clear`, `common.date_range`, `common.xp_plus`, `complete.stat.ability`, `complete.stat.streak`, `complete.weekly.title`, `complete.xp.level`, `feedback.confidence.low`, `growth.title`, `home.level.xp`, `lang.en`, `notif.daily.title`, `paywall.expired.stat.ability`, `paywall.expired.stat.sessions`, `paywall.period.year`, `paywall.plan.annual`, `paywall.privacy`, `paywall.projection.bucket.range`, `paywall.projection.score`, `privacy.nav`, `profile.account.title`, `profile.languages`, `profile.privacy`, `profile.reminder`, `profile.settings`, `profile.settings.a11y`, `profile.siwa.body`, `profile.siwa.cta`, `profile.siwa.title`, `profile.stat.ability`, `profile.stat.sessions`, `profile.stat.streak`, `profile.sub.name`, `profile.sub.trial`, `profile.weekly.title`, `settings.nav`, `settings.reminders`, `settings.section.language`, `siwa.sheet.cta`, `tab.growth`, `tab.home`, `tab.library`, `tab.nav.a11y`, `weekly.nav`

## Notes for the app tracks

Motion, haptics, Dynamic Type and VoiceOver: [engagement.md](/design/engagement/index.md), [tokens.md](/design/tokens/index.md) §6–7 and
[ios-handoff.md](/design/ios-handoff/index.md). Open a board with `?theme=dark&dt=1.35&binds=1` to see dark mode, the largest
tested type size and every bound element.

Tracking-plan events: no tracking plan page exists yet; ADR-001 D12 names the events.

Tokens with no group in `system/tokens.source.json` yet (they stay in [tokens.css](/design/tokens.css)): `--dt`, `--elevation-1`, `--elevation-2`, `--font-family-numeric`, `--font-family-reading`, `--font-family-text`, `--font-weight-bold`, `--font-weight-heavy`, `--font-weight-medium`, `--font-weight-regular`, `--font-weight-semibold`, `--motion-duration-fast`, `--motion-duration-instant`, `--motion-ease-standard`, `--type-tracking-tight`.
