Platform Visual Standards logo

Platform Visual Standards

Community
phazurlabs
platform-visual-standards

Current platform visual standards: iOS 26 Liquid Glass and SF Symbols 7, Material 3 Expressive (HCT, Dynamic Color, spring physics), web CSS 2025-2026 (container queries, view transitions, anchor positioning), plus watchOS, tvOS, and automotive. Use when a design must feel native to its platform.

Overview

Publisherphazurlabs
Repositorysumi
Skill nameplatform-visual-standards
Stars
58
Forks
11
Bundled files
6
LicenseApache-2.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 6 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by phazurlabs on GitHub. Read the source before you install it.

Installation

Install the Platform Visual Standards AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/phazurlabs/sumi/tree/main/skills/platform-visual-standards
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/phazurlabs/sumi.git /tmp/sumi
mkdir -p .claude/skills
cp -r /tmp/sumi/skills/platform-visual-standards .claude/skills/platform-visual-standards
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Platform Visual Standards in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Platform Visual Standards on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Platform Visual Standards is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Platform Visual Standards

Why Platform Visual Standards Matter

Every platform has a visual language — materials, motion curves, typography rules, spacing systems, and interaction idioms. A professional app respects these conventions because users have muscle memory and visual expectations formed by their OS. Ignoring platform standards makes an app feel alien. This skill ensures Sumi knows the current visual standards for every major platform so recommendations are platform-native, not platform-generic.

Reference Architecture

FileContentsUse When
references/ios-26-liquid-glass.mdiOS 26/iPadOS 26 Liquid Glass design system: material tiers, vibrancy levels, SF Symbols 7 (rendering modes, variable color, animations), Dynamic Island, StandBy mode, Live Activities, SwiftUI implementation patterns, Safe Areas, Dynamic Type.Designing for iPhone, iPad. Recommending iOS-native patterns. Implementing Liquid Glass correctly.
references/material-3-expressive.mdMaterial Design 3 Expressive: 35-shape library (morphing shapes), spring-physics motion (mass, stiffness, damping), HCT color space, Dynamic Color (wallpaper extraction), M3 component gallery, Jetpack Compose patterns, canonical layouts for tablets/foldables.Designing for Android, Wear OS. Recommending Material-native patterns. Implementing Dynamic Color.
references/web-css-2025-2026.mdModern CSS capabilities: container queries (@container), view transitions API (same-doc + cross-doc), scroll-driven animations, oklch()/lch() color functions, anchor positioning, CSS nesting, :has() selector, subgrid, @layer cascade layers, @scope (scoped styles), @starting-style (entry animations), interpolate-size: allow-keywords (animate to height: auto), text-wrap: balance/pretty, transition-behavior: allow-discrete, @property (typed/animatable custom properties), field-sizing: content, scroll-snap-stop: always, Figma Sites/new products.Building web interfaces. Recommending modern CSS patterns. Avoiding outdated approaches. Entry/exit animations without JS. Height auto transitions.
references/watchos-tvos-automotive.mdWatch design (Apple Watch, Wear OS): complications, glanceability, Digital Crown. TV design (tvOS, Android TV, Fire TV): 10-foot UI, D-pad navigation, focus system, overscan. Automotive (CarPlay, Android Auto): glanceability, driver safety, touch targets.Designing for non-phone/tablet devices. Understanding unique constraints of each form factor.
references/spatial-xr-design.mdSpatial computing: visionOS (windows, volumes, spaces, Liquid Glass), Meta Quest (Horizon OS, 2D panels, immersive), WebXR, AR overlay patterns. Depth, gaze, gesture interaction models.Designing for AR/VR/MR. Understanding spatial UI constraints. visionOS app design.
references/cross-platform-harmony.mdHow to maintain one design system across 9 form factors: phone, tablet, desktop, TV, watch, spatial, automotive, kiosk, e-ink. Token architecture for multi-platform. Platform adaptation patterns. When to diverge vs. converge.Building cross-platform design systems. Deciding platform-specific vs. shared patterns. Multi-device strategy.

1. iOS 26 Liquid Glass

Design Philosophy

Liquid Glass is Apple's unified material language introduced in iOS 26. It replaces the layered frosted-glass approach of previous iOS versions with a single, continuously adaptive translucent material that responds to the content behind it. The philosophy centers on three principles: contextual transparency (the interface reveals the world behind it), adaptive luminance (glass brightens or darkens to maintain legibility), and unified surface language (every chrome element uses the same material system, creating visual coherence across the entire OS).

Liquid Glass is not a blur effect. It is a rendering pipeline that composites specular highlights, refraction-simulated distortion, and dynamic tinting into a single material layer. The effect is computed in real time by the GPU, using environment maps derived from the content beneath the glass surface.

Translucency System

The translucency system operates on a spectrum rather than discrete tiers. However, Apple defines four practical material weights for developers:

  • Ultra-thin glass — Barely visible tint, maximum background passthrough. Used for large surfaces where content beneath must remain fully readable (e.g., full-screen overlays during media playback).
  • Thin glass — Light tint with subtle refraction. The default for navigation bars, tab bars, and toolbars. Background content is visible but softened.
  • Regular glass — Moderate tint and blur. Used for popovers, action sheets, and modal presentations. Provides clear visual separation while maintaining environmental context.
  • Thick glass — Heavy tint approaching opacity. Used for alerts, critical dialogs, and contexts where background content would be distracting. Still technically translucent but functionally near-opaque.

Vibrancy Levels

Vibrancy controls how text and icons render on glass surfaces. It uses compositing blend modes to ensure legibility regardless of the background content:

  • Primary vibrancy — Full contrast. For titles, primary labels, and interactive elements. Uses "vibrant light" or "vibrant dark" compositing depending on the interface style.
  • Secondary vibrancy — Reduced contrast (approximately 60% relative to primary). For subtitles, secondary labels, and supplementary information.
  • Tertiary vibrancy — Minimal contrast (approximately 30%). For placeholder text, disabled states, and decorative elements.
  • Quaternary vibrancy — Near-invisible (approximately 15%). For separator lines and the faintest structural hints.

Vibrancy is not opacity. Setting label opacity to 0.6 produces muddy, illegible text on glass. Vibrancy uses additive or subtractive blend modes that maintain sharpness at any contrast level.

Material Types

MaterialBackground Blur RadiusSaturation BoostUse Case
ultraThinMaterial8pt1.2xFull-screen ambient overlays
thinMaterial16pt1.4xNavigation bars, tab bars
regularMaterial24pt1.6xPopovers, sheets
thickMaterial40pt1.8xAlerts, critical modals
ultraThickMaterial64pt2.0xFocused input contexts

Tab Bar Specifications

The iOS 26 tab bar is a floating element:

  • Shape: Capsule (fully rounded ends), not a rectangle pinned to screen edge
  • Position: Floating 8pt above the bottom safe area inset
  • Height: 49pt (compact), 56pt (regular)
  • Material: thinMaterial with 1pt specular highlight on top edge
  • Corner radius: Full capsule (height / 2)
  • Icon size: 24x24pt (SF Symbols, medium weight)
  • Label typography: SF Pro Text, 10pt, medium weight, secondary vibrancy
  • Selected state: Filled SF Symbol variant + primary vibrancy + circular tinted background (accent color at 20% opacity)
  • Spacing: Equal distribution with minimum 44pt tap targets per item
  • Maximum items: 5 (additional items overflow to "More" tab)
  • Scroll behavior: Collapses to a compact pill showing only the selected icon on scroll-down; re-expands on scroll-up or tap

Navigation Bar Specifications

  • Height: 44pt (standard), 96pt (large title)
  • Material: thinMaterial, matching the tab bar material for visual unity
  • Large title font: SF Pro Display, 34pt, bold
  • Standard title font: SF Pro Text, 17pt, semibold
  • Large-to-standard transition: Title shrinks and moves to center on scroll, driven by scroll offset (not a snap, a continuous interpolation)
  • Back button: Chevron (SF Symbol chevron.backward) + previous screen title, 17pt, accent color
  • Safe area: Content insets below the nav bar glass, never renders beneath it

Blur Values and Rendering

  • Blur is Gaussian, applied to a snapshot of the content layer beneath the glass
  • Blur radius is measured in points, not pixels (retina-independent)
  • Saturation boost prevents the blur from appearing "washed out" — colors behind the glass stay vivid
  • A specular highlight (1pt, white at 10-15% opacity) runs along the top edge of every glass surface to simulate a physical glass bevel
  • In Dark Mode, the specular highlight shifts to white at 5-8% opacity and a subtle inner shadow appears at the bottom edge

When to Use Glass vs Solid

ContextRecommendationReason
Chrome (bars, toolbars)GlassUsers expect to see content continuity
Cards in scrollable listsSolidGlass-on-glass creates visual noise and rendering cost
Full-screen content (video, photo)Solid or ultra-thinContent is the focus, glass distracts
Modals and sheetsGlass (regular)Maintains spatial context
Text-heavy reading viewsSolidGlass behind paragraphs of text reduces readability
Interactive controls (buttons)Solid with tintGlass buttons lack the affordance of tappability
Onboarding overlaysGlass (thick)Focus attention while showing the app beneath

Liquid Glass Color Tinting

Glass surfaces can be tinted with the app's accent color:

  • Tint intensity: 5-15% of the accent color blended into the glass material
  • Automatic adjustment: iOS modulates tint intensity based on the luminance of the background content. Over bright backgrounds, tint increases to remain visible. Over dark backgrounds, tint decreases to avoid muddiness.
  • Per-element tinting: Individual glass elements (e.g., the selected tab indicator) can carry a stronger tint (20-30%) to indicate selection state
  • System colors: Using system accent colors guarantees accessibility. Custom tint colors must pass APCA contrast checks against both light and dark backgrounds.

Floating Tab Bar Behavior

The floating tab bar introduced in iOS 26 has distinct behavioral states:

  1. Resting — Full capsule with icons and labels, floating above content
  2. Scrolling down — Shrinks to a compact pill (icons only, no labels), reducing content occlusion
  3. Scrolling up — Re-expands to full capsule with a spring animation (damping 0.8, response 0.35s)
  4. Long press — Reveals a context menu for the tapped tab (e.g., "Open in New Window" on iPad)
  5. Hidden — Fully dismissed during immersive content (video playback, full-screen maps). A swipe-up from the bottom edge re-summons it.

SF Symbols Integration

SF Symbols 7 is tightly coupled with Liquid Glass:

  • Rendering modes: Monochrome (single vibrancy color), Hierarchical (primary/secondary/tertiary layers), Palette (custom multi-color), Multicolor (system-defined full color)
  • Variable color: Symbols animate through fill levels (0.0 to 1.0) to indicate progress, signal strength, or volume
  • Symbol effects: Bounce, pulse, variable color, scale, appear, disappear, replace, wiggle, rotate, breathe
  • Preferred weight on glass: Medium (not regular). Medium weight maintains legibility against translucent backgrounds.
  • Preferred scale on glass: Medium (not small). Minimum 22x22pt bounding box for tap targets.
  • Automatic vibrancy: When placed on a glass material, SF Symbols automatically adopt the appropriate vibrancy level based on their label style assignment

2. Material Design 3 Expressive

Dynamic Color (Tonal Palettes from Source Color)

Dynamic Color extracts a source color from the user's wallpaper and generates a complete tonal palette:

  1. Source color extraction — The system samples the wallpaper and selects a representative hue using the HCT (Hue, Chroma, Tone) color space
  2. Tonal palette generation — From the source hue, five tonal palettes are generated:
    • Primary — The source hue at varying tones (0-100)
    • Secondary — Source hue with reduced chroma (more muted)
    • Tertiary — Complementary or analogous hue (system-chosen for harmony)
    • Neutral — Source hue at minimal chroma (near-gray with a hint of warmth/coolness)
    • Neutral Variant — Slightly more chromatic neutral
  3. Tone mapping — Each palette has 13 tonal stops: 0, 10, 20, 25, 30, 35, 40, 50, 60, 70, 80, 90, 95, 98, 99, 100
  4. Role assignment — Design tokens like colorPrimary, colorOnPrimary, colorSurface, colorOnSurface are mapped to specific tonal stops
  5. Light/dark switching — Light theme uses high-tone backgrounds (tone 98-99) with low-tone text (tone 10-20). Dark theme inverts: low-tone backgrounds (tone 6-10) with high-tone text (tone 80-90).

Motion System

M3 Expressive uses spring physics, not cubic beziers:

  • Emphasized motion — Mass: 1.0, Stiffness: 300, Damping ratio: 0.8. For hero transitions, page changes, and large-scale movements. Overshoots slightly before settling.
  • Standard motion — Mass: 1.0, Stiffness: 500, Damping ratio: 1.0 (critically damped). For small UI responses, button presses, toggles. No overshoot.
  • Spatial motion paths — Elements moving across the screen follow arced paths, not straight lines. The arc is computed using a control point offset perpendicular to the start-end vector.
  • Stagger patterns — Lists and grids animate children with a 20-40ms stagger delay per item, creating a cascade effect. Maximum total stagger duration: 300ms.
  • Shared element transitions — An element morphs between two screens using a container transform animation that interpolates position, size, corner radius, and elevation simultaneously.

Shape System (Morph Shapes)

M3 Expressive introduces 35 shape tokens organized into families:

FamilyCorner StyleUse Case
Extra Small4dp radiusChips, small badges
Small8dp radiusCards, text fields
Medium12dp radiusDialogs, menus
Large16dp radiusSheets, FAB
Extra Large28dp radiusLarge surfaces, navigation drawer
Full50% radius (circle/pill)FAB in resting, avatar, pill buttons

Morph shapes animate between corner families during state transitions. A FAB morphing into a bottom sheet transitions from Full to Extra Large with a spring animation.

Component Theming

Every M3 component exposes a theming API with three layers:

  1. Color scheme — Automatically applied from Dynamic Color. Components consume role tokens, not raw colors.
  2. Shape scheme — Corner radius, corner family (rounded, cut). Applied per component size variant.
  3. Typography scheme — Text style assignment per component element (headline, body, label).

Overriding a theme at the component level uses the *Defaults and *Colors Compose APIs:

kotlin
ButtonDefaults.buttonColors(
    containerColor = MaterialTheme.colorScheme.tertiary,
    contentColor = MaterialTheme.colorScheme.onTertiary
)

Elevation with Tonal Surfaces

M3 replaced drop shadows with tonal elevation:

Elevation LevelShadowTonal OverlayUse Case
Level 0NoneNoneFlat surfaces
Level 1None+3% primaryCards, list items
Level 2None+5% primaryElevated cards, menus
Level 3Subtle+8% primaryNavigation drawer, FAB
Level 4Medium+11% primaryApp bar (scrolled state)
Level 5Prominent+14% primaryModal bottom sheet

Tonal overlay means the surface color shifts toward the primary color as elevation increases. This replaces the "gray shadow" model with a more colorful, dynamic depth system.

Typography Scale

RoleFontSizeWeightLine HeightTracking
Display LargeBrand/Serif57sp40064sp-0.25sp
Display MediumBrand/Serif45sp40052sp0sp
Display SmallBrand/Serif36sp40044sp0sp
Headline LargeBrand/Sans32sp40040sp0sp
Headline MediumBrand/Sans28sp40036sp0sp
Headline SmallBrand/Sans24sp40032sp0sp
Title LargeSans22sp40028sp0sp
Title MediumSans16sp50024sp0.15sp
Title SmallSans14sp50020sp0.1sp
Body LargeSans16sp40024sp0.5sp
Body MediumSans14sp40020sp0.25sp
Body SmallSans12sp40016sp0.4sp
Label LargeSans14sp50020sp0.1sp
Label MediumSans12sp50016sp0.5sp
Label SmallSans11sp50016sp0.5sp

Material You Personalization

Material You goes beyond color. The full personalization stack includes:

  • Wallpaper-derived color — Dynamic Color tonal palettes (described above)
  • Themed icons — App icons on the home screen adopt the user's tonal palette as a monochrome tint
  • Widget theming — Glance widgets consume DynamicColors to blend with the home screen
  • Clock face and lock screen — The lock screen clock uses Display Large typography with the primary color from the user's wallpaper
  • Cross-device sync — The selected wallpaper color syncs across phone, tablet, Wear OS watch, and Chromebook via the user's Google account

3. Modern CSS 2025-2026

Container Queries (@container)

Container queries allow components to respond to their parent container's size rather than the viewport:

css
.card-grid {
  container-type: inline-size;
  container-name: card-grid;
}
@container card-grid (min-width: 600px) {
  .card { grid-template-columns: 1fr 1fr; }
}
@container card-grid (min-width: 900px) {
  .card { grid-template-columns: 1fr 1fr 1fr; }
}

Container query units: cqw (container query width), cqh (height), cqi (inline), cqb (block), cqmin, cqmax. Use cqi for fluid typography within containers: font-size: clamp(1rem, 3cqi, 1.5rem).

:has() Selector

The parent selector CSS never had until now. Select elements based on their descendants:

css
/* Card with an image gets different padding */
.card:has(img) { padding: 0; }
/* Form group with invalid input shows error styling */
.form-group:has(:invalid) { border-color: var(--color-error); }
/* Nav with more than 5 items switches to hamburger */
nav:has(> :nth-child(6)) { /* hamburger layout */ }

View Transitions API

Page and state transitions with cross-fade, morph, and slide animations:

css
::view-transition-old(main) {
  animation: fade-out 200ms ease-out;
}
::view-transition-new(main) {
  animation: fade-in 300ms ease-in;
}
.hero-image {
  view-transition-name: hero;
}

Multi-page view transitions (MPA) work across full page navigations. Same-document view transitions use document.startViewTransition() for SPA-style morphs.

Anchor Positioning

Position elements relative to other elements without JavaScript:

css
.tooltip {
  position: fixed;
  position-anchor: --trigger;
  top: anchor(--trigger bottom);
  left: anchor(--trigger center);
  position-try-fallbacks: flip-block, flip-inline;
}
.trigger {
  anchor-name: --trigger;
}

position-try-fallbacks provides automatic repositioning when the anchored element would overflow the viewport.

CSS Nesting

Native nesting without preprocessors:

css
.card {
  background: var(--surface);
  & .title { font-size: var(--title-md); }
  & .body { color: var(--on-surface-variant); }
  &:hover { box-shadow: var(--elevation-2); }
  @media (width >= 768px) {
    & { flex-direction: row; }
  }
}

@scope

Scoped styles that apply only within a defined subtree:

css
@scope (.card) to (.card-footer) {
  p { margin-block: 0.5em; }
  a { color: var(--primary); }
}

Styles apply from .card down to but not including .card-footer. Prevents style leakage in component architectures.

Scroll-Driven Animations

Bind animations to scroll progress instead of time:

css
@keyframes fade-in {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: translateY(0); }
}
.reveal {
  animation: fade-in linear both;
  animation-timeline: view();
  animation-range: entry 0% entry 100%;
}

Two timeline types: scroll() (tracks scroll container progress) and view() (tracks element visibility within scroll container).

Subgrid

Child elements inherit the parent grid's track sizing:

css
.grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; }
.card {
  display: grid;
  grid-template-rows: subgrid;
  grid-row: span 3; /* Aligns internal rows with siblings */
}

Subgrid solves the "cards with different content heights but aligned internal rows" problem that has plagued CSS grid layouts.

@layer Cascade Layers

Control the cascade priority without specificity wars:

css
@layer reset, base, components, utilities;
@layer reset { * { margin: 0; box-sizing: border-box; } }
@layer base { body { font-family: var(--font-sans); } }
@layer components { .btn { /* ... */ } }
@layer utilities { .sr-only { /* ... */ } }

Layers declared later win over earlier layers regardless of selector specificity. Unlayered styles beat all layers.

@property Registered Custom Properties

Type-safe custom properties with animation support:

css
@property --hue {
  syntax: "<number>";
  initial-value: 220;
  inherits: true;
}
.element {
  --hue: 220;
  background: oklch(70% 0.15 var(--hue));
  transition: --hue 0.5s ease;
}
.element:hover { --hue: 280; }

Without @property, custom properties cannot be animated — they snap between values. With @property, the browser knows the type and can interpolate.

color-mix(), oklch(), oklab()

css
/* Mix two colors in oklch space */
--primary-soft: color-mix(in oklch, var(--primary) 60%, white);
/* Define colors in perceptually uniform space */
--accent: oklch(65% 0.2 145); /* lightness, chroma, hue */
/* Predictable lightness stepping for a tonal scale */
--tone-10: oklch(10% 0.05 var(--hue));
--tone-50: oklch(50% 0.12 var(--hue));
--tone-90: oklch(90% 0.04 var(--hue));

oklch produces perceptually uniform lightness steps. HSL does not — hsl(60, 100%, 50%) (yellow) appears far brighter than hsl(240, 100%, 50%) (blue) at the same declared lightness.

light-dark()

Single-declaration light/dark mode values:

css
:root { color-scheme: light dark; }
body {
  background: light-dark(#ffffff, #1a1a1a);
  color: light-dark(#111111, #eeeeee);
}

Eliminates the need for duplicate custom properties or prefers-color-scheme media queries for simple value swaps.

field-sizing, Popover API, <dialog>

  • field-sizing: content — Textarea and input elements auto-size to their content. No JavaScript auto-resize needed.
  • Popover API — <div popover> creates a top-layer element with built-in light-dismiss, focus trapping, and stacking context. Replaces custom tooltip/dropdown JavaScript.
  • <dialog> — Native modal with ::backdrop, showModal(), auto-focus management, and Escape-to-close. The <dialog> element sits in the top layer, above all stacking contexts.

4. Watch / Wear OS Design

Apple Watch Specifications by Size

Case SizeScreen WidthScreen HeightCorner RadiusScale Factor
42mm (SE)176px215px36px2x
44mm (S10)198px242px36px2x
46mm (S10)208px254px40px2x
49mm (Ultra 3)205px251px40px2x

Complication Design

Complications are small data displays on the watch face:

  • Circular Small — 32x32pt. Icon or single metric only.
  • Modular Small — 52x52pt. Short text or icon with one data point.
  • Modular Large — Full width (varies). Multi-line content: title + up to 3 lines of body.
  • Rectangular — 154x68pt (varies by watch size). Rich content: images, gauges, text combinations.
  • Corner — Curved text along the watch face edge. Maximum 4-5 characters.

Design rules: complications must be readable at arm's length (approximately 30cm). Use SF Compact Rounded for complication text. Minimum font size 13pt. Tint color should be a single accent per complication.

Glanceable Information Hierarchy

Watch content must be parsed in under 3 seconds:

  1. Primary metric — The single most important number/status. Largest text, highest contrast.
  2. Context label — What the metric means. Secondary vibrancy, smaller text.
  3. Trend indicator — Arrow, spark line, or color shift showing direction.
  4. Action hint — One obvious tap target or instruction. Maximum one action per screen.

Never show more than 3 information groups on a single watch screen. If content requires scrolling, use a paginated layout (vertical page dots), not a long scroll.

Crown and Bezel Interactions

  • Digital Crown scroll — Default scroll behavior for lists. Haptic detents every 4pt of scroll offset.
  • Digital Crown precise input — Used for pickers (time, date, numeric). Each detent maps to one value step.
  • Bezel rotation (Wear OS) — Equivalent to Digital Crown. Rotary input events map to scroll or value selection.
  • Double-tap gesture (Apple Watch) — Primary hand gesture for one-handed interaction. Maps to the "primary action" on the current screen.

Small Screen Typography

RoleFontSizeWeight
Large TitleSF Compact Rounded22ptBold
HeadlineSF Compact Rounded17ptSemibold
BodySF Compact Rounded15ptRegular
CaptionSF Compact Rounded13ptRegular
Minimum readableSF Compact Rounded11ptMedium

Line lengths: maximum 20-25 characters per line on a 44mm watch. Use sentence fragments, not full sentences. Abbreviate aggressively: "Mon" not "Monday", "3h 22m" not "3 hours 22 minutes".


5. TV / 10-Foot UI

Focus-Based Navigation

TV interfaces have no cursor or touch. Navigation is entirely focus-based:

  • Focus ring — A visible highlight (border, scale, or glow) indicating the currently focused element. Minimum 4px visible border or 1.05x scale increase.
  • Focus movement — D-pad (up/down/left/right) moves focus between elements. Focus movement must be predictable: pressing "right" should move to the element visually to the right.
  • Focus memory — When a user navigates away from a section and returns, focus should restore to the last-focused element within that section.
  • Focus trapping — Modals and overlays trap focus within their bounds. D-pad navigation cycles through the modal's focusable elements.

Overscan Safe Area

Legacy TVs crop the outer edges of the signal. Even modern TVs may overscan slightly:

  • Action safe area — 5% inset from all edges (where interactive elements must live)
  • Title safe area — 10% inset from all edges (where text must live)
  • Modern practice — Most streaming apps use a 48px inset from all edges as a safe margin on 1080p, or 96px on 4K

Reading Distance Typography

TV viewers sit 2-3 meters from the screen. Typography must be sized accordingly:

RoleMinimum Size (1080p)Minimum Size (4K)Notes
Hero title48px72pxMaximum 2 lines
Section title32px48pxSingle line preferred
Card title24px36pxMaximum 2 lines
Metadata/subtitle18px28pxSingle line
Minimum readable16px24pxNever go below this

Font weight: use medium to bold weights. Thin and light weights disappear at TV viewing distance. Prefer sans-serif families with open counters and generous x-height.

D-Pad Navigation Patterns

  • Grid navigation — Focus moves in a 2D grid. Arrow keys move one cell. Wrap-around is optional but must be consistent (all rows wrap or none do).
  • Rail/carousel navigation — Horizontal list of cards. Left/right moves between cards. Up/down exits the rail to the rail above/below.
  • Nested focus — Pressing Select on a card expands it or navigates into a detail view. Back button returns to the previous focus context.
  • Long-press — Reserved for secondary actions (add to watchlist, info panel). Never required for primary interactions.

Remote Control UX

  • Minimize button count — Assume 5 buttons: D-pad (4 directions + select) and Back. Design every flow to be completable with these 5 inputs.
  • Voice search — Provide voice input as a shortcut for text entry. On-screen keyboards are painful with D-pad navigation.
  • Idle timeout — If no input for 4+ hours, show a "still watching?" prompt to avoid burning static UI into OLED panels.

Card-Based Layouts

TV UI is overwhelmingly card-based:

  • Standard card — 16:9 landscape thumbnail with title below. Focus state scales the card to 1.05x-1.1x with an elevation increase.
  • Wide card — 2.39:1 cinematic ratio for hero/featured content.
  • Tall card — 2:3 portrait for book covers, profiles, app icons.
  • Card spacing — 16-24px gap between cards. Enough to clearly separate but not so much that the screen feels empty.
  • Row labels — Left-aligned, above each carousel rail. 24-32px font size with 16px gap to the first card.

6. Automotive / HUD

Driver Distraction Guidelines

The National Highway Traffic Safety Administration (NHTSA) defines strict limits:

  • Single glance time — Maximum 2 seconds per glance away from the road
  • Total task time — Maximum 12 seconds cumulative for any single task (e.g., setting a destination)
  • Total glances — Maximum 6 glances for a single task
  • Eyes-off-road time — 85th percentile total eyes-off-road time must not exceed 12 seconds

These are not suggestions. Automotive OEMs certify against these guidelines. Infotainment UI that exceeds these limits can result in regulatory action.

NHTSA Compliance Checklist

  1. No scrolling text or animations that require sustained attention
  2. No tasks requiring more than 6 sequential inputs
  3. Voice-first for any task exceeding the 12-second glance budget
  4. Automatic lockout of complex functions when the vehicle is in motion (above 5 mph)
  5. Haptic or audio confirmation for every touch input (driver cannot look to confirm)
  6. No video playback on the driver-facing display while in motion

Glance Time Limits by Content Type

ContentMax GlanceInteraction
Current song / station1sNone (read-only)
Navigation next turn1sNone (read-only)
Temperature adjustment1.5sSingle tap or voice
Contact selection2sVoice-preferred
Destination entryVoice onlyText entry locked at speed
Message readingVoice onlyRead aloud, never displayed

Night Mode

Automotive displays must support an aggressive night mode:

  • Background: Pure black (#000000) to minimize light emission
  • Text: Amber or red-shifted white (color temperature 2700K-3200K) to preserve scotopic (night) vision
  • Brightness: Auto-dimming to 1-5 nits in full darkness (phone screens are typically 200-1000 nits)
  • No white surfaces: Even "light gray" backgrounds can cause glare on the windshield
  • HUD (head-up display): Green or white monochrome, 15-25pt text projected at optical infinity (focused at 2-3 meters ahead of the windshield)

Large Touch Targets

Drivers interact with gloved hands, without looking, while the vehicle vibrates:

  • Minimum touch target: 18mm x 18mm (approximately 72px at typical automotive DPI)
  • Recommended touch target: 24mm x 24mm
  • Spacing between targets: Minimum 8mm gap
  • Physical controls preferred: Climate, volume, and hazard lights should remain physical knobs/buttons, not touchscreen-only

Voice-First Interaction

For tasks exceeding a single glance:

  • Voice is the primary input, touch is the fallback
  • Provide confirmation prompts: "Navigating to 123 Main Street. Is that correct?"
  • Wake word should be configurable (users in noisy environments may prefer push-to-talk)
  • Visual feedback for voice state: listening, processing, confirming (simple icon states, not text)

7. Spatial / XR Design (visionOS)

Depth and Layering

visionOS places UI at specific depths in the user's physical space:

  • Windows — 2D content panels floating at arm's length (approximately 1-2 meters from the user). Default depth: 0 (the "base plane").
  • Volumes — 3D content containers. Objects within a volume have real depth and can be viewed from different angles.
  • Full Spaces — Immersive environments that replace or augment the user's entire visual field.

Layering rules:

  • Glass windows sit at depth 0
  • Popovers and menus sit at depth +20pt (closer to user)
  • Alerts sit at depth +40pt
  • Never place interactive UI behind the base plane (negative depth). Users cannot comfortably focus on content behind them.

Eye Tracking Targets

Eye tracking replaces cursor hover on visionOS:

  • Minimum target size: 60x60pt (eye tracking has lower precision than touch or cursor)
  • Hover effect: Elements subtly highlight when the user's gaze lands on them. A gentle scale-up (1.02x) and specular highlight shift indicates "this is focusable."
  • Gaze duration: Do not trigger actions on gaze alone. Gaze selects, pinch confirms. Avoid dwell-to-activate patterns (they cause Midas touch problems).
  • Gaze feedback latency: Hover effects must appear within 50ms of gaze landing. Any delay feels unresponsive in spatial UI.

Hand Tracking Gestures

GestureActionNotes
Pinch (index + thumb)Select / tapPrimary interaction. Works at any hand position in view.
Pinch and dragScroll, move, resizeEquivalent to touch drag
Two-hand pinch and pullZoom / scaleBoth hands pinch, then move apart
Wrist rotationFine adjustmentUsed in precision controls (e.g., 3D rotation)
Open palm pushDismissPush a window away to close it

Design for indirect interaction: the user's hands rest in their lap, not reaching toward the UI. Gestures are detected by downward-facing cameras, so all hand gestures must work in a low, relaxed hand position.

Spatial Audio

  • UI sounds should be spatialized to the source window's position. A notification from a window to the user's left should sound like it comes from the left.
  • Ambient sounds (background music, environment audio) should be non-directional (omnidirectional).
  • Feedback sounds (tap, toggle, error) should be subtle and spatialized. Loud or harsh sounds are jarring in a head-mounted context.

Window Placement and Ornaments

  • Default placement: New windows appear centered in the user's forward gaze, at approximately 1.5 meters distance.
  • Window bar: A grab handle at the bottom of every window allows repositioning. Users can place windows anywhere in their space.
  • Ornaments: Small UI elements (toolbars, tab bars) that float just outside the window's edge. Ornaments are attached to the window and move with it.
  • Window size: Recommended minimum 800x600pt. Maximum varies by content but avoid exceeding 2000pt in any dimension (requires excessive head movement to scan).
  • Multi-window: Users can open multiple windows simultaneously. Design for the possibility that your app is one of several visible apps.

Passthrough Considerations

In augmented reality (passthrough) mode, the user sees their real environment with your UI overlaid:

  • Glass materials work exceptionally well because they harmonize with any physical background
  • Avoid large opaque surfaces that block the user's view of their room
  • Dark mode is generally preferred in passthrough: it minimizes the "floating screen" effect
  • Shadows cast by windows onto the passthrough feed increase the sense of physical presence
  • Test your UI against diverse real-world backgrounds (bright window, dark room, cluttered desk)

8. Cross-Platform Harmony (9 Device Types)

Device Matrix

DeviceScreen RangeInputViewing DistancePrimary Context
Phone320-430pt widthTouch30cm (handheld)Mobile, one-handed
Tablet744-1024pt widthTouch + Pencil40-50cm (lap/table)Lean-back, productivity
Desktop1024-2560pt widthMouse + keyboard50-70cm (desk)Focused work
Watch162-205px widthCrown + tap25-30cm (wrist)Glanceable
TV1920-3840px widthD-pad + voice2-4 meters (couch)Lean-back entertainment
Car800-1920px widthTouch + voice50-70cm (dash)Distracted, safety-critical
XR HeadsetVirtual canvasEye + hand1-3m (virtual)Immersive
Foldable320-886pt widthTouch30-40cm (handheld)Dual-mode
E-Ink758-1872px widthTouch (slow)30cm (handheld)Reading, low-power

Shared Design Tokens

A cross-platform design system defines tokens at three levels:

  1. Global tokens — Platform-agnostic values: brand colors (oklch), font scale ratios, spacing multipliers, border-radius scale
  2. Alias tokens — Semantic mappings: color-surface, color-on-surface, spacing-md, radius-card. Same name everywhere, different values per platform.
  3. Component tokens — Platform-specific overrides: button-height is 44pt on iOS, 48dp on Android, 36px on web, 72px on TV.

Platform-Specific Adaptations

PatterniOSAndroidWebWatchTV
Primary navBottom tab bar (floating)Bottom nav barTop nav or sidebarPage-based scrollTop rail + sidebar
Back navigationSwipe from left edgeSystem back button/gestureBrowser back or breadcrumbSwipe rightBack button on remote
SelectionCheckmarkCheckboxCheckboxTap highlightFocus + select
Destructive actionSwipe-to-deleteLong-press menuButton with confirmationForce Touch menuFocus + hold
SearchPull-down search barTop app bar searchSearch field in headerScribble or voiceVoice or on-screen keyboard

Responsive Breakpoints by Device

BreakpointWidthTarget
xs0-319ptSmall watch
sm320-430ptPhone
md431-743ptLarge phone / foldable inner
lg744-1023ptTablet
xl1024-1365ptSmall desktop / tablet landscape
2xl1366-1920ptStandard desktop
3xl1921pt+Large desktop / TV

Foldable-Specific Considerations

  • Outer screen — Treat as phone (320-430pt). Show condensed single-column layout.
  • Inner screen (unfolded) — Treat as small tablet (744-886pt). Show two-pane layout.
  • Fold-aware layout — Content should not cross the fold hinge. Place the layout seam on the hinge, creating a natural two-pane boundary.
  • Continuity — When the user unfolds the device, the app must seamlessly transition from the outer layout to the inner layout without losing state or scroll position.

E-Ink Considerations

  • No animation — E-ink refresh is 200-500ms. Animations appear as ghostly smears. Use instant state changes.
  • High contrast — E-ink displays have lower contrast ratios than LCD/OLED. Use pure black on pure white. Avoid grays below #333333 or above #CCCCCC.
  • No color dependency — Most e-ink displays are grayscale. Never encode meaning in color alone.
  • Large text — Minimum 14pt body text. E-ink pixel density is typically 212-300 PPI (lower than phones at 400-600 PPI).
  • Minimal chrome — Every pixel of UI chrome is a pixel not showing content. On a reading device, content is everything.

9. Platform Detection Patterns

When to Adapt vs When to Unify

Adapt to the platform when:

  • The OS provides a native control that users expect (e.g., iOS date picker, Android bottom sheet)
  • Navigation patterns differ fundamentally (tab bar vs navigation drawer)
  • System gestures conflict with custom gestures (iOS swipe-back, Android system back)
  • Accessibility APIs differ (VoiceOver vs TalkBack rotor patterns)
  • Legal requirements differ by platform (NHTSA for automotive, WCAG for web)

Unify across platforms when:

  • Brand identity requires visual consistency (color palette, typography, iconography)
  • The interaction is domain-specific and has no platform equivalent (e.g., a custom chart interaction)
  • Users frequently switch between platforms and expect continuity (e.g., Figma on web vs desktop app)
  • The cost of maintaining platform-specific implementations exceeds the UX benefit

User Expectations Per Platform

PlatformUsers ExpectUsers Reject
iOSSmooth 60fps, system gestures respected, Liquid Glass materials, SF SymbolsAndroid-style hamburger menus, Material FABs, system font overrides
AndroidMaterial components, Dynamic Color, predictable back behavioriOS-style non-standard back navigation, tab bars without labels
WebFast load times, keyboard accessibility, URL-based state, responsiveNative app idioms forced onto web (e.g., mobile tab bar on desktop)
WatchInstant information, minimal interaction, complicationsFull-screen forms, long text, complex navigation hierarchies
TVFocus-visible at all times, large text, card gridsTiny text, hover-dependent interactions, touch assumptions
CarVoice-first, huge touch targets, zero cognitive loadText-heavy displays, small buttons, multi-step flows
XRSpatial depth, gaze responsiveness, comfortable ergonomicsFlat 2D panels with no spatial awareness, tiny targets

10. Design Token Mapping Across Platforms

CSS Custom Properties to SwiftUI Environment to Compose Theme

Semantic RoleCSS Custom PropertySwiftUICompose (M3)
Primary color--color-primaryColor.accentColorMaterialTheme.colorScheme.primary
Surface--color-surfaceColor(.systemBackground)MaterialTheme.colorScheme.surface
On-surface text--color-on-surfaceColor(.label)MaterialTheme.colorScheme.onSurface
Error--color-errorColor(.systemRed)MaterialTheme.colorScheme.error
Border radius (sm)--radius-sm: 8px.clipShape(RoundedRectangle(cornerRadius: 8))shape = RoundedCornerShape(8.dp)
Border radius (lg)--radius-lg: 16px.clipShape(RoundedRectangle(cornerRadius: 16))shape = RoundedCornerShape(16.dp)
Spacing unit--space-md: 16px.padding(16)Modifier.padding(16.dp)
Elevation (low)box-shadow: 0 1px 3px.shadow(radius: 2)tonalElevation = 1.dp
Elevation (high)box-shadow: 0 8px 24px.shadow(radius: 8)tonalElevation = 4.dp
Body fontfont-family: var(--font-body).font(.body)MaterialTheme.typography.bodyLarge
Title fontfont-family: var(--font-title).font(.title)MaterialTheme.typography.titleLarge
Caption fontfont-family: var(--font-caption).font(.caption)MaterialTheme.typography.labelSmall

Token Translation Strategy

  1. Define once in a neutral format — Use JSON or YAML as the source of truth (e.g., Style Dictionary, Tokens Studio)
  2. Transform per platform — Generate CSS custom properties, SwiftUI extensions, and Compose theme objects from the same source
  3. Override at the platform layer — iOS gets thinMaterial for surface, Android gets tonal elevation, web gets backdrop-filter: blur()
  4. Test with a visual diff — Render the same screen on all three platforms and compare. Token mapping is correct when the screens feel like siblings, not clones.

Token File Structure

tokens/
  global/
    color.json        # oklch values, brand palette
    spacing.json      # 4px base unit scale
    typography.json    # font scale ratios
    radius.json       # border-radius scale
  platform/
    ios.json          # SwiftUI overrides, Liquid Glass materials
    android.json      # M3 overrides, Dynamic Color hooks
    web.json          # CSS custom property names, rem conversions
    watch.json        # Compact sizing overrides
    tv.json           # 10-foot UI sizing overrides
    car.json          # Large touch target overrides
    xr.json           # Spatial depth tokens

Cross-References

  • visual-design-mastery — Visual principles that apply across all platforms. This skill adapts those principles to platform-specific conventions.
  • mobile-ux-design — Mobile UX patterns. This skill provides the current visual standards those patterns render within.
  • desktop-app-design — Desktop patterns. This skill provides web/macOS/Windows visual standards.
  • component-patterns-code — Code implementations. This skill ensures code targets the right platform APIs.
  • design-systems-architecture — Token architecture. This skill defines platform-specific token overrides.
  • interaction-motion-design — Motion patterns. This skill provides platform-specific animation curves and APIs.
  • accessibility-inclusive-design — Platform-specific accessibility APIs (VoiceOver, TalkBack, ARIA).

Commands Powered by This Skill

CommandHow This Skill Is Used
/gradeAdapts visual direction to target platform conventions
/componentGenerates platform-native component code
/screenUses platform-specific screen patterns and safe areas
/responsiveCross-device adaptation using platform breakpoints
/generateInforms AI generation prompts with platform constraints
/generateGenerates assets at platform-correct sizes and formats

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Platform Visual Standards AI skill do?

Current platform visual standards: iOS 26 Liquid Glass and SF Symbols 7, Material 3 Expressive (HCT, Dynamic Color, spring physics), web CSS 2025-2026 (container queries, view transitions, anchor positioning), plus watchOS, tvOS, and automotive. Use when a design must feel native to its platform.

Why use Platform Visual Standards on TypingMind?

Because you install it once and use it with any model. Platform Visual Standards is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Platform Visual Standards in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/phazurlabs/sumi/tree/main/skills/platform-visual-standards. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Platform Visual Standards?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Platform Visual Standards?

As many as you like. As long as a model supports skills, you can use Platform Visual Standards with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Platform Visual Standards AI skill free?

Yes. It is published on GitHub by phazurlabs under the Apache-2.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇