Skip to content

AI screens

Eleven screens for an AI assistant in light and dark: an empty prompt, a streaming answer with cited sources, an image result, and the states a model forces you to handle. Every control is an instance of a component you already have, so one token change moves all 11 screens.

On this page
  1. Preview
  2. Chat states
  3. Components
  4. Tokens

Preview

A new chat, a thread with sources, a reply that is still generating, an image result, an attachment, an error, and the history drawer with its menu. Each screen is drawn in Light and in Dark.

AI screens, 11 screens393 x 852 each, Light and Dark
AI new chat screen: an Appetite AI model switcher between a sidebar button and a new chat button, a sparkle icon above Good morning, Maren, a line to pick up a thread, four suggestion chips such as Summarize a PDF and Draft an email, and the Ask anything composerAI new chat screen in dark mode: an Appetite AI model switcher between a sidebar button and a new chat button, a sparkle icon above Good morning, Maren, a line to pick up a thread, four suggestion chips such as Summarize a PDF and Draft an email, and the Ask anything composer
New chat
AI tools menu over a blurred new chat screen: a card listing Generate image, Attach a file, Deep research, Agent mode and Study a topic above the Ask anything composerAI tools menu over a blurred new chat screen in dark mode: a card listing Generate image, Attach a file, Deep research, Agent mode and Study a topic above the Ask anything composer
Tools
AI thread screen: a message asking to summarize the Q3 report, a reply that churn rose to 4.1 percent with a three row table of Monthly plan, Annual plan and Cancels in week one, two source cards, copy, like, dislike and retry actions, and the composerAI thread screen in dark mode: a message asking to summarize the Q3 report, a reply that churn rose to 4.1 percent with a three row table of Monthly plan, Annual plan and Cancels in week one, two source cards, copy, like, dislike and retry actions, and the composer
Thread
AI generating screen: three exchanges about retention and the Q3 report, the last reply cut off above a typing indicator, and a composer whose send button has become a blue stop buttonAI generating screen in dark mode: three exchanges about retention and the Q3 report, the last reply cut off above a typing indicator, and a composer whose send button has become a blue stop button
Generating
AI image result screen: a request for a hero image for the launch post, a reply with a photo of a bedroom looking out over a coastline, and Save, Variations and Edit buttons above the composerAI image result screen in dark mode: a request for a hero image for the launch post, a reply with a photo of a bedroom looking out over a coastline, and Save, Variations and Edit buttons above the composer
Image
AI attachment screen: a request to summarize renewal risk, a numbered list of three risks, and a composer holding the attached file Board pack Q2.pdf, 2.4 MB, the text Now do the same for the Q2 pack and a blue send buttonAI attachment screen in dark mode: a request to summarize renewal risk, a numbered list of three risks, and a composer holding the attached file Board pack Q2.pdf, 2.4 MB, the text Now do the same for the Q2 pack and a blue send button
Attachment
AI error screen: a red banner reading The request timed out before a full answer came back with a Try again button, below a question, its answer and a follow-up question, and above an empty composerAI error screen in dark mode: a red banner reading The request timed out before a full answer came back with a Try again button, below a question, its answer and a follow-up question, and above an empty composer
Error
AI history screen: a navigation drawer with Library, Projects, Agents, Explore, Scheduled and Images, a Recents list from Q3 churn breakdown to Weekly standup notes, and Chat and settings buttons, pushing the thread aside to the rightAI history screen in dark mode: a navigation drawer with Library, Projects, Agents, Explore, Scheduled and Images, a Recents list from Q3 churn breakdown to Weekly standup notes, and Chat and settings buttons, pushing the thread aside to the right
History
AI manage chat screen: the history drawer dimmed behind the Q3 churn breakdown row, which is lifted onto a white row with a menu below it offering Pin, Rename and a red DeleteAI manage chat screen in dark mode: the history drawer dimmed behind the Q3 churn breakdown row, which is lifted onto a dark row with a menu below it offering Pin, Rename and a red Delete
Manage chat
AI projects screen: Research and analysis with a Private chip, Files and Instructions rows with a file count and a Set label, and a Chats in this project list of three chats above the composerAI projects screen in dark mode: Research and analysis with a Private chip, Files and Instructions rows with a file count and a Set label, and a Chats in this project list of three chats above the composer
Projects
AI project instructions sheet over the dimmed Projects screen: Set project instructions, a note that instructions shape tone and context, not facts, a text field at 214 of 500 characters, and Save instructions and Cancel buttonsAI project instructions sheet over the dimmed Projects screen in dark mode: Set project instructions, a note that instructions shape tone and context, not facts, a text field at 214 of 500 characters, and Save instructions and Cancel buttons
Instructions
Screens, screen, what it shows, built from
ScreenWhat it showsBuilt from
New chatAn empty prompt with four suggestionsAI / Prompt Composer, Chip, Button
ToolsThe composer menu: image, file, research, agent and studyContext Menu, AI / Prompt Composer, Chip
ThreadA question, a reply with a table and sources, and the reply actionsAI / Message, AI / Prompt Composer
GeneratingA reply that is still arriving, with a stop buttonAI / Message, AI / Prompt Composer
ImageA picture reply with Save, Variations and EditAI / Message, Button
AttachmentA file waiting in the composer, a numbered list in the replyAI / Message, AI / Prompt Composer
ErrorA failed reply with a retryAI / Message, Button
HistoryThe drawer with navigation and recent chatsNavigation Drawer, AI / Message
Manage chatA recent chat with Pin, Rename and DeleteNavigation Drawer, Context Menu
ProjectsOne project with its files, instructions and chatsTop Bar, Chip, AI / Prompt Composer
InstructionsA sheet for the rules a project followsAction Sheet, Input, Button

Each screen is drawn in Light and in Dark, with Color Tokens set on the frame itself, and the dark screens are the same instances resolved against the other mode. AI is also drawn for the outer and inner display of iPhone Duo, see iPhone Duo screens.

How does a chat interface handle generating, error and attachment states?

The composer stays put and changes its button. The error is a banner in the thread. The file sits in the composer.

While a reply generates, the composer stays where it is and its send button becomes a blue stop button. When a reply fails, the error appears in the thread as a banner with a Try again Button, and an attachment sits inside the composer above the text as a file row with a remove button.

States, state, screen, what changes, built from
StateScreenWhat changesBuilt from
GeneratingGeneratingA typing indicator under the last reply, and a stop button in place of sendAI / Message, AI / Prompt Composer
ErrorErrorA red banner with a warning glyph, the message and a Try again ButtonAI / Message, Button
AttachmentAttachmentA file row with a name, a size and a remove button, and an active send buttonAI / Prompt Composer
Image resultImageA picture in the reply and three Buttons under itAI / Message, Button

The minimum touch target on iOS is 44 pt. The frames pin Platform to ios-md, where platform/min-touch-target reads 44. The android mode of the same variable reads 48 dp.

What are the AI screens built from?

270 instances across the 11 screens. Two components, Message and Prompt Composer, carry the assistant itself.

129 instances sit directly on the frames: 84 are components, instances of 9 component sets and one helper row, and 45 are Lucide icons with 12 different names. Another 141 sit inside those, 90 of them icons, so the screens use 39 different icon names in all. Placed counts an instance that is not inside another instance. Nested counts one that is. A component is counted by its set name, an icon is an instance named in lowercase and a helper part begins with an underscore. The dark row holds the same instances as the light row.

Four of the 11 screens are another screen with something laid over it: Tools, History, Manage chat and Instructions. Each brings its own status bar, which is why those screens count two.

What it is built from, component, placed, nested, where
ComponentPlacedNestedWhere
Button2115Placed on every screen except Projects and Instructions, five of them on Image. Nested in the Top Bar, the drawer, the Error banner and the Action Sheet
AI / Message200Thread, Generating, Image, Attachment, Error, History, Manage chat
iOS / Status Bar150Every screen, two on the four with an overlay
AI / Prompt Composer100Every screen except Instructions
Chip100New chat 4, Tools 4, Projects 1, Instructions 1
Top Bar20Projects, Instructions
Context Menu20Tools, Manage chat
Navigation Drawer20History, Manage chat
Action Sheet10Instructions
_Drawer Item126Thirteen rows in each drawer, and the lifted row on Manage chat
_Context Menu Item08Five on Tools, three on Manage chat
Text Area01Instructions
Compact Button01Instructions, the close button
Lucide icons4590Placed: 12 names in the header, thread actions, source cards and project rows. Nested: the composer, the drawer, the menus and the buttons
What it is built from, overlay, screens, what it opens onto
OverlayScreensWhat it opens onto
Context MenuTools, Manage chatNew chat, and the thread with the drawer already open
Navigation DrawerHistory, Manage chatThe thread, pushed aside
Action SheetInstructionsThe Projects screen

This set draws more by hand than the others. No List or Dropdown is placed, so the model switcher under the header, the icon tile on New chat and Projects, the Files and Instructions rows, the source cards and the table inside a reply are local layout. In all, 135 layout frames and 61 text layers sit outside any instance, and the only drawn shape is one 393 x 852 rectangle, the Scrim on Manage chat. A change to List or Dropdown does not reach these parts.

Manage chat is the deepest screen in the set: a thread, a drawer over it and a menu over that. It places 17 instances and nests 37 more, so it is the one to look at when you want to know whether the layering holds.

Counted on October 2, 2026 with a Plugin API script over the 11 light frames of the AI page in the Appetite UI Figma file.

Which tokens do the AI screens use?

Every solid fill and stroke on the screens resolves through a variable. Frames sit in a variable mode and read down through the same collections as every component.

The 11 light frames hold 511 solid fills and strokes that are bound, spread over 22 different variables, and none is unbound. Two things are not solid paints bound to a variable: the Fade mask gradient in the drawer on History and Manage chat has three stops that are not bound, and one fill in the Error banner uses the Foundations primitive colors/alpha/red/alpha-10 directly.

Tokens, token, where it lands, paints
TokenWhere it landsPaints
text/strong-950Titles and message text, the drawer rows, the menus91
fg/strong-950Status Bar glyphs and the drawer icons77
fg/sub-700Icons in Buttons, the composer, the drawer, the menus and the Top Bar62
fg/soft-500Chevrons, Chip icons and the thread action icons55
border/soft-100The composer outline, source cards, row and top bar outlines42
bg/white-0The screens, Chips, the composer and the drawer39
bg/soft-100Message bubbles, composer buttons and icon tiles33
text/sub-700Supporting lines, Chip labels, the Action Sheet note33
text/soft-500The Ask anything placeholder and meta lines22
border/sub-200The Chip outline10
bg/raisedFloating surfaces: Top Bar buttons, Context Menu, Action Sheet and the lifted drawer row8
fg/disabled-400The send glyph while the composer is empty8
brand/baseThe send and stop buttons, the Chat button and the Save instructions button7
bg/weak-50The note in the Action Sheet and quiet Button fills6
static/static-white-0Labels and glyphs on a brand fill5
state/error/base-500, lighter-50, dark-950The Error banner and the Delete item4, 1, 1
bg/scrimThe dim behind each overlay3
text/on-color/strongThe send glyph on a brand fill2
bg/sub-200The composer send button fill1
colors/alpha/red/alpha-10The Try again button in the Error banner, a Foundations primitive bound directly1
Text and effect styles, style, uses, screens
StyleUsesScreens
base/default5011
lg/default272
sm/default258
sm/emphasized206
base/emphasized99
xs/default85
2xl/emphasized76
lg/emphasized63
xl/emphasized22
xs/emphasized22
dropShadow/sm1010
dropShadow/lg53
dropShadow/xs42
dropShadow/2xl33
backdropBlur/sm33
Collections, collection, modes, what it drives here
CollectionModesWhat it drives here
Color TokensLight, DarkEvery bound paint above, pinned on each frame
Platformios-md, ios-lg, android, ios-duo-outer, ios-duo-innerStatus bar and platform metrics, pinned to ios-md
FoundationsDefaultThe primitive ramps every other collection points at
TypographyDefaultThe type styles in the table above
Platform BridgeBrand, SystemNot pinned on the frames, so the default mode applies
MotionDefaultNot used on these screens

Paints are every visible solid fill and stroke on the 11 light frames, inside instances included, counted by bound variable name on October 2, 2026.