Brand and design · Hi-fi screens · Hi-fi screens
Hi-fi: S11 Diagnostic · Diagnostic · retell
Contract, a board per state (idle, recording, paused, autostop, too-short, permission-denied, loading, empty, error, offline), tokens and strings.
Generated by
botgumi-design indexfrom../../screens.json. Edit that file, not this page.
Stage: hifi · Key: diagnostic/diag-record · 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
- idle: Diagnostic round 1 only, capped at config.limits.diagnostic_max_ms (90 s). Same recorder states as the daily loop.
- recording: Diagnostic round 1 only, capped at config.limits.diagnostic_max_ms (90 s). Same recorder states as the daily loop.
- paused: Diagnostic round 1 only, capped at config.limits.diagnostic_max_ms (90 s). Same recorder states as the daily loop.
- autostop: Diagnostic round 1 only, capped at config.limits.diagnostic_max_ms (90 s). Same recorder states as the daily loop.
- too-short: Diagnostic round 1 only, capped at config.limits.diagnostic_max_ms (90 s). Same recorder states as the daily loop.
- permission-denied: Diagnostic round 1 only, capped at config.limits.diagnostic_max_ms (90 s). Same recorder states as the daily loop.
Flows: F1 First launch → diagnostic → paywall → first real session.
Reads and calls:
POST /v1/sessions/{id}/attempts {round:1}POST /v1/attempts/{id}/submit
Local state:
local:recorder.*
Boards
One row per state. A state without boards of its own says what shows it.
| State | Board | Example data |
|---|---|---|
| idle | zh-Hans · en | config.json (zh-Hans · en), article-diagnostic.json (zh-Hans · en) |
| recording | zh-Hans · en | config.json (zh-Hans · en), article-diagnostic.json (zh-Hans · en) |
| paused | zh-Hans · en | config.json (zh-Hans · en), article-diagnostic.json (zh-Hans · en) |
| autostop | zh-Hans · en | config.json (zh-Hans · en), article-diagnostic.json (zh-Hans · en) |
| too-short | zh-Hans · en | config.json (zh-Hans · en), article-diagnostic.json (zh-Hans · en) |
| permission-denied | zh-Hans · en | article-diagnostic.json (zh-Hans · en) |
| loading | no board of its own: From states.md (Diagnostic record): — | |
| empty | no board of its own: From states.md (Diagnostic record): — | |
| error | no board of its own: From states.md (Diagnostic record): upload failure → processing failed · fatal: — | |
| offline | no board of its own: From states.md (Diagnostic record): recording works; upload queued (processing--offline) |
The boards
Each state as drawn (393 × 852), one board per locale. Open a board on its own for its spec panel.
idle
recording
paused
autostop
too-short
permission-denied
Tokens used
By path in ../../system/tokens.source.json.
| Token | Where |
|---|---|
color.accentPrimary |
.btn--primary, .is-recording, .live, .r1 … |
color.accentPrimaryPressed |
.btn--primary |
color.accentPrimarySoft |
.is-recording, .r2, .r3, .rec … |
color.bgCanvas |
.device, .dock, .navbar, .screen |
color.bgInverse |
.rec-btn |
color.bgInverseRaised |
.icon-btn |
color.bgScrim |
.scrim |
color.bgSunken |
.btn, .icon-btn, .paused, .rec … |
color.bgSurface |
.card, .is-paused, .rec, .rec-btn … |
color.lineHairline |
.card--flat, .progress-hair |
color.lineStrong |
.grabber, .r1, .r2, .r3 … |
color.recording |
.rec-indicator |
color.statusDanger |
.rec-indicator |
color.statusDangerSoft |
.rec-indicator |
color.textDisabled |
.btn, .rec, .rec-btn |
color.textOnAccent |
.btn--primary |
color.textOnInverse |
.icon-btn, .rec-btn |
color.textPrimary |
.device, .home-indicator, .icon-btn, .is-paused … |
color.textSecondary |
.btn--ghost, .c-secondary, .paused, .rec-indicator … |
color.textTertiary |
.c-tertiary, .frozen, .paused, .rec-indicator … |
color.topicViolet |
.tag--violet |
color.topicVioletSoft |
.tag--violet |
radius.button |
.btn |
radius.card |
.card |
radius.md |
.card--md |
radius.pill |
.rec-indicator, .round-chip |
radius.xl |
.sheet |
space.gutter |
.dock, .navbar, .pad, .sheet |
space.s5 |
.card |
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.sizeRecordButton |
.rec-btn |
space.sizeRecordRing |
.rec |
space.sizeTabbarHeight |
.screen |
typography.body |
.t-body |
typography.footnote |
.t-footnote |
typography.headline |
.t-headline |
typography.subheadline |
.t-subhead |
typography.timer |
.t-timer |
typography.title1 |
.t-title1 |
typography.title2 |
.t-title2 |
Strings
app.name, common.back, common.step_of.a11y, complete.ba.first, complete.xp.round1, diag.record.cta, diag.record.nav, feedback.confidence.low, feedback.evidence.pause.a11y, home.greeting.format, home.quest.done.tag, notif.daily.title, onboarding.progress.a11y, onboarding.welcome.illo.first, paywall.projection.score, profile.settings, profile.settings.a11y, read.tag.diagnostic, record.autostop.body, record.autostop.effective, record.autostop.submit, record.autostop.title, record.button.pause, record.button.resume, record.button.start, record.button.stopped, record.chip.round1, record.cta.caption, record.denied.back, record.denied.body, record.denied.cta, record.denied.step1, record.denied.step2, record.denied.step3, record.denied.title, record.hint.idle, record.hint.paused, record.hint.ready, record.indicator.paused, record.indicator.recording, record.nav.round1, record.rerecord, record.short.body, record.short.continue, record.short.title, record.sub.round1, record.title.round1, resume.round1, settings.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-3, --elevation-record, --font-family-numeric, --font-family-text, --font-weight-bold, --font-weight-heavy, --font-weight-regular, --font-weight-semibold, --motion-breath, --motion-duration-base, --motion-duration-fast, --motion-duration-instant, --motion-duration-slow, --motion-ease-emphasized, --motion-ease-spring, --motion-ease-standard, --type-tracking-tight.