Brand and design · Hi-fi screens · Hi-fi screens

Hi-fi: S08 Diagnostic · Diagnostic · intro

Contract, a board per state (default, loading, empty, error, offline), tokens and strings.

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

Stage: hifi · Key: diagnostic/diag-intro · Data-binding map: bindings.md

Drawn in the gallery: Diagnostic. Each board is the committed HTML in screens/, drawn on the example data in docs/api/examples/.

Contract

  • default: What will happen (~3 min): read → retell (90 s) → result, in the chosen practice language. States it's real and free.

Flows: F1 First launch → diagnostic → paywall → first real session.

Reads and calls:

  • POST /v1/onboarding → {diagnostic_session, article}

Local state:

  • none

Boards

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

State Board Example data
default zh-Hans · en onboarding-answers.json (zh-Hans · en)
loading no board of its own: From states.md (Diagnostic intro): skeleton until /onboarding returns
empty no board of its own: From states.md (Diagnostic intro): n/a
error no board of its own: From states.md (Diagnostic intro): Retry · fatal: generic error
offline no board of its own: From states.md (Diagnostic intro): "Connect to start" (the diagnostic is server-assessed)

The boards

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

default

Tokens used

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

Token Where
color.accentPrimary .btn--primary
color.accentPrimaryPressed .btn--primary
color.bgCanvas .device, .dock, .navbar, .screen
color.bgInverse .tag--ink, inline
color.bgInverseRaised .icon-btn
color.bgSunken .btn, .icon-btn, .state-illo, .tag
color.reward inline
color.statusInfoSoft .banner--info
color.textDisabled .btn
color.textOnAccent .btn--primary
color.textOnInverse .icon-btn, .tag--ink
color.textPrimary .banner--info, .device, .home-indicator, .icon-btn …
color.textSecondary .btn--ghost, .c-secondary, .state-illo, .tag
radius.button .btn
radius.sm .banner
radius.xs .tag
space.gutter .dock, .navbar, .pad
space.s6 .screen
space.safeBottom .dock, .dock-tall, .has-dock, .screen
space.safeTop .device, .screen
space.sizeCtaHeight .btn, .dock-tall, .has-dock, .screen
space.sizeHitMin .btn--ghost, .icon-btn
space.sizeNavbarHeight .navbar
space.sizeTabbarHeight .screen
typography.body .t-body
typography.headline .t-headline
typography.largeTitle .t-large-title
typography.subheadline .t-subhead

Strings

app.name, common.back, diag.intro.badge, diag.intro.body, diag.intro.cta, diag.intro.honesty, diag.intro.lang, diag.intro.privacy_link, diag.intro.step1, diag.intro.step1.sub, diag.intro.step2, diag.intro.step2.sub, diag.intro.step3, diag.intro.step3.sub, diag.intro.title, home.greeting.format, lang.en, notif.daily.title, paywall.projection.score, plan.title, privacy.mic.title, read.nav, read.tag.diagnostic, record.indicator.recording, record.nav.round1, tab.library

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, --font-family-text, --font-weight-bold, --font-weight-regular, --font-weight-semibold, --motion-duration-fast, --motion-duration-instant, --motion-ease-standard, --type-tracking-tight.