You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Polaris Studio's visual design is intentional, consistent, and detail-oriented. This page documents every design decision - typography, colour, spacing, motion, and visual hierarchy - so you understand why the UI looks the way it does.
Typography
Four typefaces, each with a specific role:
Inter (UI & body text)
Usage: Menus, panels, labels, node body text, tooltips, status bar, table column headers.
Weights: Regular (400) for body, Medium (500) for labels, SemiBold (600) for panel titles.
Size: 11–13 pt for most UI; 10 pt for captions.
Why: Crisp, highly legible at small sizes. Designed for UI. Loaded from the bundled Inter-Variable.ttf.
Note: The bundled Inter font is a variable font with optical sizes. On load, Polaris patches the internal font family name from Inter 18pt to Inter so that Qt stylesheets using font-family: 'Inter' resolve correctly.
Outfit (titles & badges)
Usage: Node headers (title and category glyph), category headers in the palette, the AI pill in the status bar, badges and tags.
Weights: DemiBold (600) for node titles, Bold (700) for badges.
Size: 13–14 pt in nodes; 11 pt in the status bar pill.
Why: Friendly, modern, geometric. Gives the node headers a distinct visual weight that differentiates them from surrounding UI.
Instrument Serif (premium highlights)
Usage: The "Polaris Studio" wordmark, canvas empty state ("Build your workflow."), AI panel header ("AI Assistant"), Properties panel header ("Properties"), dialog titles.
Weight: Regular (400), with italic for canvas sub-text.
Size: 24 pt for the wordmark, 34 pt for canvas empty-state title, 15 pt italic for canvas subtitle, 16–18 pt for dialog titles.
Why: Serif brings warmth, elegance, and a premium feel. Used sparingly - only for hero moments - to create a clear visual hierarchy. Never used for body text or interactive elements.
JetBrains Mono (code & data)
Usage: Expression editor, formula bar, cell values in the spreadsheet, node IDs, column data type labels, raw JSON in AI action cards.
Weight: Regular (400) with ligatures enabled.
Size: 10–11 pt.
Why: Designed for code. Excellent readability with distinct character shapes (0 vs O, 1 vs l). Ligatures (!=, ->, =>) make expressions more readable.
Font fallback chain
When a font can't be loaded (e.g., the TTF is missing), Polaris falls back through this chain:
Inter → system UI font (Segoe UI on Windows, SF Pro on macOS)
Outfit → Inter → system UI
Instrument Serif → Georgia → system serif
JetBrains Mono → Consolas → Courier New → monospace
Colour palette (Light theme)
The current default theme. A dark theme is planned.
Dashed stroke with moving dash pattern (during compute)
Shadows
Polaris uses small, offset shadows for depth. No box-shadow CSS property (Qt doesn't support it).
Node shadow: Painted manually in NodeItem.paint() as a slightly offset (0, 4 px) rounded rectangle with 55 alpha black. Shadow is 2 px wider and 4 px taller than the body.
Modal dialogs: Native OS shadow via the window manager.
Why manual shadow instead of QGraphicsDropShadowEffect? Qt's QGraphicsDropShadowEffect causes QPainter conflicts when applied to items with custom paint() methods. The manual approach is more performant and avoids terminal warnings.