Brand and design · Hi-fi screens · Hi-fi screens
Hi-fi: S28 Profile · Sign in with Apple upgrade
Contract, a board per state (sheet, loading, empty, error, offline), tokens and strings.
Generated by
botgumi-design indexfrom../../screens.json. Edit that file, not this page.
Stage: hifi · Key: profile/siwa · Data-binding map: bindings.md
Drawn in the gallery: Profile. Each board is the committed HTML in screens/, drawn on the example data in docs/api/examples/.
Contract
- sheet: Anonymous → Apple upgrade keeps the same account (D5). 409 conflict handled per contract.
Flows: none named.
Reads and calls:
POST /v1/auth/apple {identity_token, authorization_code, install_id}
Local state:
- none
Boards
One row per state. A state without boards of its own says what shows it.
| State | Board | Example data |
|---|---|---|
| sheet | zh-Hans · en | me.json (zh-Hans · en), weekly-quests.json (zh-Hans · en) |
| loading | no board of its own: From states.md (Profile): skeleton stats | |
| empty | no board of its own: From states.md (Profile): weekly quests none → section hidden | |
| error | no board of its own: From states.md (Profile): inline Retry · fatal: generic error | |
| offline | no board of its own: From states.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.
sheet
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.bgScrim |
.scrim |
color.bgSunken |
.bar, .btn, .icon-btn, .sheet-icon … |
color.bgSurface |
.card, .list, .sheet |
color.lineHairline |
.btn--sm, .list-row, .tabbar |
color.lineInverse |
inline |
color.lineStrong |
.grabber, .sheet |
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 |
.btn--ghost, .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 |
radius.xl |
.sheet |
space.gutter |
.large, .navbar, .pad, .section-head … |
space.s3 |
.section-head |
space.s5 |
.card |
space.s6 |
.has-tabbar, .screen |
space.safeBottom |
.has-tabbar, .screen, .sheet, .tabbar |
space.safeTop |
.device, .screen |
space.section |
.section-head |
space.sizeCtaHeight |
.btn, .screen |
space.sizeHitMin |
.btn--ghost, .icon-btn |
space.sizeNavbarHeight |
.navbar |
space.sizeTabbarHeight |
.has-tabbar, .screen, .tabbar |
typography.body |
.t-body |
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.later, common.xp_plus, complete.stat.ability, complete.stat.streak, complete.weekly.title, complete.xp.level, feedback.confidence.low, growth.title, home.greeting.format, home.level.xp, lang.en, mic_sheet.skip, 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.body, siwa.sheet.cta, siwa.sheet.point1, siwa.sheet.point2, siwa.sheet.point3, siwa.sheet.title, tab.growth, tab.home, tab.library, tab.nav.a11y, weekly.nav
Notes for the app tracks
Motion, haptics, Dynamic Type and VoiceOver: engagement.md, tokens.md §6–7 and
ios-handoff.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): --dt, --elevation-1, --elevation-2, --elevation-3, --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-base, --motion-duration-fast, --motion-duration-instant, --motion-duration-slow, --motion-ease-emphasized, --motion-ease-standard, --type-tracking-tight.