Collabora Online Design System

A living reference of the UI components, tokens, and patterns used in Collabora Online, extracted directly from the CSS source files under browser/css/.

Typography

The UI uses a multi-tier font system. The primary font for all chrome is --cool-font. Dialogs and form controls use --jquery-ui-font.

Header Text (--header-font-size: 1rem / 16px)
font-family: --cool-font · 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif
Medium Text (--medium-font-size: 0.875rem / 14px)
Used in context menus, tooltips
Default Body Text (--default-font-size: 0.75rem / 12px)
Labels, buttons, form controls, toolbar items
Dialog & Form Text (--jquery-ui-font)
font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif
Notebookbar Tab Text (fluid: clamp 11px–16px)
Scales between 640px and 1000px viewport width via clamp(0.6875rem, 1vw, 1rem)
TokenValueUsage
--default-font-size0.75rem (12px)Body, labels, controls
--medium-font-size0.875rem (14px)Context menus, tooltips
--header-font-size1rem (16px)Section headers, doc title
--tooltip-font-size0.875rem (14px)Tooltip text
--overflow-group-font-size8.5ptNotebookbar group labels

Color Palette

All colors are defined as CSS custom properties in color-palette.css (light) and color-palette-dark.css (dark). The primary brand color is a vibrant blue used for focus rings, active states, and primary actions.

Primary / Brand

Primary
#0b87e7
Primary Dark
#0063b1
Primary Darker
#004b86
Primary Lighter
#83beec

Text

Main Text
#333333
Text Darker (hover)
#000000
Text Lighter (disabled)
#696969
Primary Text (on blue)
#ffffff

Backgrounds

Main Background
#F8F9FA
Background Dark
#e8e8e8
Background Darker
#c0bfbc
Background Lighter
#ffffff
Tabs Group
#f1f1f1
Hover
#F5F5F5

Borders

Border
#b6b6b6
Border Dark
#cecece
Border Darker
#c0bfbc
Border Lighter
#f1f1f1
Toolbar Border
#e1dfdd

Semantic

Error
#e9322d
Warning
#eca700
Success
#46ba61

Document Type Accents

Each document type has an RGB triplet used for selected tab underlines, active toolbar buttons, and progress bars via --doc-type.

Writer
Calc
Impress
Draw

Cursors

All cursor types used across Collabora Online, with live previews and links to source. There is no centralised cursor map in the codebase — cursors are applied inline via style.cursor in TypeScript/JavaScript or via CSS classes. The Uses chip counts occurrences in browser/css/ + inline style.cursor assignments in browser/src/. The Source link points at one representative declaration at a pinned upstream SHA.

Tip: hover the preview box to see the actual cursor as your browser renders it. Source links point at the read-only GitHub mirror CollaboraOnline/online.mirror pinned to the commit that was the tip of main when this page was built (SHA 202fadc) so line numbers stay accurate; the pipeline re-pins to the latest commit on every run.

Standard CSS cursors

CursorPreviewDescriptionUsesSource
auto
hover
Browser chooses cursor automatically3cool.css:233
cell
hover
Cell selection in spreadsheets1spreadsheet.css:2
col-resize
hover
Column width resize2cool.css:266
context-menu
hover
Context menu trigger1jsdialogs.css:747
crosshair
hover
Crosshair selector (auto-fill in spreadsheets)4leaflet.css:169
default
hover
Standard arrow (buttons, toolbar, panels)20jquery-ui-lightness.css:61
e-resize
hover
Resize from the east (right) edge5jquery-ui-lightness.css:613
ew-resize
hover
Horizontal resize (east/west)1leaflet.css:187
grab
hover
Hand ready to grab/drag. Used only as SVG fallback in this codebase — see grab.svg below.2ShapeHandleAnchorSubSection.ts:30
grabbing
hover
Hand actively dragging1leaflet.css:220
help
hover
Help/explainer cursor (info tooltips, AI chat sidebar)1aichat-sidebar.css:212
inherit
hover
Inherit cursor from parent element1cool.css:946
move
hover
Move/drag element (four-arrow)7leaflet.css:165
n-resize
hover
Resize from north (top) edge1jquery-ui-lightness.css:599
ne-resize
hover
Resize from north-east corner1jquery-ui-lightness.css:648
nesw-resize
hover
Diagonal resize (NE / SW)1leaflet.css:183
not-allowed
hover
Action not permitted (disabled buttons)5backstage.css:166
ns-resize
hover
Vertical resize (north/south)1leaflet.css:195
nw-resize
hover
Resize from north-west corner1jquery-ui-lightness.css:641
nwse-resize
hover
Diagonal resize (NW / SE)1leaflet.css:191
pointer
hover
Interactive element (buttons, links)78selectionMarkers.css:29
row-resize
hover
Row height resize1spreadsheet.css:228
s-resize
hover
Resize from south (bottom) edge2jquery-ui-lightness.css:606
se-resize
hover
Resize from south-east corner (table fill)2jquery-ui-lightness.css:627
sw-resize
hover
Resize from south-west corner1jquery-ui-lightness.css:634
text
hover
Text input / text selection (I-beam)4jquery-ui-lightness.css:862
w-resize
hover
Resize from west (left) edge4jquery-ui-lightness.css:620

Custom SVG cursors

Three product-specific cursors shipped as SVG assets in browser/images/cursors/.

CursorSVGPreviewDescriptionUsesSource
crop.svg
hover
Image cropping tool — shown when dragging a shape's scaling handle in crop mode 1
fill.svg
hover
Auto-fill brush — paint formatting / spreadsheet fill handle 2
grab.svg
hover
Custom grab hand — shape anchor and custom shape handles 2

Cursor declarations live across spreadsheet.css (spreadsheet-specific), leaflet.css (map/pan resize), jquery-ui-lightness.css (UI widget resize), and inline in browser/src/canvas/sections/ (shape/canvas handles).

Anatomy

How each custom cursor is constructed: hotspot, fill, stroke, and the surrounding clear region. The three Figma frames below break down the anatomy and the production conventions used across the cursor set.

Cursor anatomy: overview
Cursor anatomy: detail
Cursor anatomy: variants

Infographics

Illustrative SVGs that visualise a choice or state for the user. Distinct from cursors (functional pointer feedback) and toolbar icons (which live in the LibreOffice icon themes). Infographics live next to the surface that uses them — e.g. browser/admin/images/ for the integrator settings panel.

UI mode selector (integrator settings)

Shown in the per-user settings dialog under Customization, where the user picks between the Notebookbar and Compact toolbar layouts. The two illustrations are paired as clickable cards; the active card gets the .selected ring (blue tint + border). Rendered at 300px wide, scaling responsively. See AdminIntegratorSettings.ts:1443 (renderCompactModeToggle) and adminIntegratorSettings.css:669 for the styling.

Notebookbar.svg

Tabbed ribbon-style toolbar (the default). Shows a coloured tab strip with one tab active, plus a grid of icon-sized rectangles standing in for the per-tab tool clusters.

Compact.svg

Classic single-row toolbar with a menubar above (the “Compact” mode). Mirrors the Notebookbar illustration's footprint so the two cards align side-by-side.

Conventions for new infographics: author at the rendered display size (here 900×600 viewBox, displayed at 300×200), keep the Collabora primary blue #0369a2 for emphasis strokes, use the neutral greys (#e6e6e6, #f2f2f2, #f9f9f9) for the chrome, and pair illustrations that share a footprint so they can be compared at a glance.

Icons

The Collabora Online icon theme started life as Colibre, designed by Andreas Kainz. Over the years the set has grown well past its starting point: hundreds of additions and tweaks have landed from many contributors, and the result no longer follows the original Colibre conventions in every detail. The drift is friendly, not adversarial, but it does mean the source-of-truth for "what an icon should look like today" is no longer the historical Colibre rules. But here is the current icon guidelines for Collabora Online:

Icon Grid
Icon Colors

Components

Primary Button

The main call-to-action button, used for the default action in dialog boxes (e.g., "OK", "Apply"). Class: .button-primary

Interactive Demo
Default
Hover
Active
Focus
Disabled
PropertyValue
Height32px
Min Width62px
Padding0 16px
Border Radiusvar(--border-radius) = 4px
Border1px solid #0063b1
Background#0b87e7 (--color-primary)
Text Color#fff
Font Size0.75rem (12px)
Margin5px
Figma reference

Secondary Button

Used for cancel, close, and non-primary dialog actions. Also the default style for all generic <button> elements in dialogs. Class: .button-secondary

Interactive Demo
Default
Hover
Active
Focus
Disabled
PropertyValue
Height32px
Min Width62px
Padding0 16px
Border Radius4px
Border1px solid #cecece (--color-border-dark)
Background#e8e8e8 (--color-background-dark)
Text Color#333333
Margin5px
Figma reference

Icon Toolbar Button

Used in the toolbar and notebookbar for icon-only actions (Bold, Italic, Underline, etc.). The selected state is tinted with the document-type accent color. Class: .unotoolbutton

Interactive Demo
Default
Hover
Selected
Disabled
PropertyValue
Size (button)28px × 28px (--btn-size)
Icon Size24px × 24px (--btn-img-size)
Padding2px (--btn-padding)
Border Radius4px
Border (default)1px solid transparent
Border (hover)1px solid #b6b6b6 (--color-btn-border)
Background (hover)#f1f1f1 (--color-background-tabs-group)
Selected Backgroundrgba(var(--doc-type), 0.1)
Selected Border1px solid rgb(var(--doc-type))
Disabled Opacity0.65
Margin (in toolbar)auto 2px

Menu Button

A button with a dropdown arrow, used for selection controls in dialogs and sidebars. Class: .jsdialog.menubutton

Interactive Demo
PropertyValue
Padding8px 10px
Border Radius4px
Border1px solid #cecece (--color-border-dark)
Background#e8e8e8 (--color-background-dark)
Font Sizecalc(0.75rem * 1.2) (~14.4px)
Font Family--jquery-ui-font
ArrowCSS triangle: 4px border, 5px top

Text Input

Standard single-line text field used in dialogs. Class: .jsdialog.ui-edit

Interactive Demo
PropertyValue
Height32px
Line Height28px
Border Radius4px
Border1px solid #cecece (--color-border-dark)
Background#e8e8e8 (--color-background-dark)
Padding Inline4px
Focus border#0b87e7 (--color-primary)

Spinfield

Numeric input with step controls, used for measurements and quantities. Class: .spinfieldcontainer .spinfield

Interactive Demo
cm
pt
PropertyValue
Height28px
Min Width70px
Border Radius4px
Border1px solid #cecece
Background#e8e8e8
Padding4px 0 4px 4px
Container margin-end5px

Checkbox

Custom-styled checkbox with SVG icons in the actual app. Class: .jsdialog.checkbutton

Interactive Demo
PropertyValue
Checkbox Size20px × 20px
Checkbox Margin1px 8px
Border Radius3px
Label Font Size0.75rem (12px)
Label Line Height28px

Radio Button

Mutually exclusive option selector. Class: .radiobutton.jsdialog

Interactive Demo
PropertyValue
Radio Size18px × 18px
Radio Margin1px 8px
Dot Size (checked)8px
Border Radius50%

Select / Listbox

Native select dropdown used in dialogs and sidebar. Class: .ui-listbox-container .ui-listbox

Interactive Demo
PropertyValue
Height (dialog)32px
Height (toolbar)24px (1.5rem)
Min Width70px (toolbar) / 100px (dialog)
Border Radius4px
Border1px solid #cecece
Background#e8e8e8
Padding0 14px 0 4px

Combobox

Editable input combined with a dropdown list. Class: .ui-combobox

Figma reference
PropertyValue
Height (dialog)32px
Border Radius4px
Border1px solid #b6b6b6 (--color-border)
Input Background#fff (--color-background-lighter)
Button width28px

Tabs

Two tab variants exist, both underline-style with a doc-type accent. Dialog tabs colour the selected label in the doc-type colour and underline it. Notebookbar tabs keep the label colour and mark the selected tab with an inset bottom border in the doc-type colour.

Interactive Demo — Dialog Tabs
Interactive Demo — Notebookbar Tabs
Figma reference: Notebookbar tab
PropertyDialog TabNotebookbar Tab
Height34px (--header-height)34px (full nav height)
Border Radius0 (none)0 (none)
Padding0 1em0 clamp(4px, 1vw, 1em)
Selected text colourrgba(var(--doc-type), 1)unchanged label colour
Selected indicatorunderline 2px solid rgba(var(--doc-type), 1), offset 6pxinset 0 -2px rgb(var(--doc-type))
Margin0 12px 0 00

TreeView

Scrollable list of entries with optional icons, used in dialogs for file browsers, style lists, etc. Class: .ui-treeview

Interactive Demo
Default Paragraph Style
Heading 1
Heading 2
Text Body
List Bullet
List Number
PropertyValue
Border1px solid #b6b6b6
Border Radius4px
Min Size150px × 100px
Max Height (dialog)150px
Line Height24px
Icon Size16px (--btn-img-size-s)
Selected Background#0b87e7 (--color-primary)
Hover Background#c0bfbc (--color-background-darker)

Context Menu

Right-click popup menu. Class: .context-menu-list

Interactive Demo
  • Cut
  • Copy
  • Paste
  • Paragraph...
  • Disabled item
PropertyValue
Border1px solid #cecece
Border Radius4px
Box Shadow0 0 3px rgba(77,77,77,0.5)
Item Font Size0.875rem (14px)
Item Padding5px 22px
Separator1px solid #f1f1f1

Tooltip

Hover tooltip for toolbar buttons and controls. Class: .cooltip-text

Interactive Demo — hover the button
Bold (Ctrl+B)
PropertyValue
Padding7px 9px
Border Radius6px
Box Shadow0 0 4px rgba(77,77,77,0.5)
Font Size0.875rem (14px)
Background#fff
Z-index2147483647 (max)

Progress Bar

Thin progress indicator tinted with the document-type accent. Class: .ui-progressbar

Interactive Demo — click to animate

Writer (blue) — 65%

Calc (green) — 40%

Impress (orange) — 80%

PropertyValue
Height5px
Track Colorrgba(var(--doc-type), 0.2)
Bar Colorrgb(var(--doc-type))
Border Radius3px

Color Picker

Grid of color swatches for font/background color selection. Class: .ui-color-picker

Interactive Demo
PropertyValue
Swatch Size16px × 16px
Grid Gap4px
Padding4px
Hover Outline2px solid #0b87e7, offset 1px

Badge

Small status indicator used in the status bar. Class: .ui-badge

Interactive Demo
English (USA) 100% Words: 1,234
PropertyValue
Padding5px
Border Radius4px
Background#c0bfbc (--color-background-darker)
Font Size0.75rem (12px)

Separator

Visual dividers for toolbars and dialogs.

Interactive Demo
Bold Italic Underline

Horizontal separator:

PropertyVerticalHorizontal
Size1px × 14px100% × 1px
Color#c0bfbc#f1f1f1
Margin0 3px0

Snackbar

Toast-like notification bar shown at the bottom of the screen. Class: .snackbar

Interactive Demo
Document has been saved.
PropertyValue
Background#323232
Text Color#fff
Padding12px 16px
Border Radius4px
Action Color#83beec (--color-primary-lighter)

Status bar

The bar pinned at the bottom of the document viewport. Hosts document-wide indicators (page number, zoom, word count, language, sheet selector in Calc, slide indicator in Impress) and the user presence list for collaborative editing. See the Figma reference for the canonical layout.

Figma reference

Dialogs

Collabora Online uses a single dialog framework (jsdialog, see Control.JSDialog.js + jsdialogs.css) but the framework hosts three behaviourally distinct kinds of surface, classified by two dimensions — whether the backdrop is dimmed (lightbox / nonlightbox) and whether background interaction is blocked (modal / nonmodal / non-dialog). See the classification thread on the forum for the original rubric.

KindBackdropBackground interactionMovableOutside clickCSS marker
ModalLightbox (dimmed)BlockedNoCloses only if .cancellable (info dialogs).jsdialog-window.modalpopup + .jsdialog-overlay
NonmodalNonlightboxAllowedYes (drag titlebar)Does not close.jsdialog-window:not(.modalpopup)
PopoverNonlightboxAllowedNo (anchored)ClosespopupParent: '_POPOVER_' on the JSDialog instance

Anatomy

Every dialog (regardless of kind) shares the same three regions: a title bar with the title and a close affordance, a body with the content, and a button area at the foot. Popovers are the exception — they have no title bar or button area and are just a body anchored to the trigger.

Title bar Close affordance
Dialog Title
Body

Body content with the inputs, labels and options the dialog needs to ask the user about.

Secondary actions Primary action

Modal (lightbox)

A dimmed backdrop blocks the document underneath. The dialog is centred and cannot be moved. Use when: the user must commit to a decision before they can keep working (settings, confirmations, blocking errors). Outside-click closes only when the dialog has the cancellable flag (typical for purely informational dialogs).

Save Changes?

You have unsaved changes in Untitled 1. Do you want to save them before closing?

ExampleDialog id / classSource
About dialog #modal-dialog-about-dialog-box jsdialogs.css:159
Online Help #modal-dialog-online-help-content-box jsdialogs.css:160
Keyboard Shortcuts #modal-dialog-keyboard-shortcuts-content-box jsdialogs.css:161
Busy indicator busypopup (type: modalpopup) Control.UIManager.ts:488
LibreOffice native dialogs (Format Cells, Insert Special Character, …) .lokdialog_container.modalpopup jsdialogs.css:26

Nonmodal (draggable)

No backdrop — the document underneath stays interactive. The dialog can be dragged by its title bar and stays open until the user dismisses it. Use when: the dialog is a tool the user keeps glancing at while editing (Find & Replace, Accept/Reject Changes, Sort criteria). Outside clicks do not close it.

Manage Changes

3 pending changes by Caolán. Drag this dialog out of the way while you review the document.

ExampleDialog id / classSource
Accept / Reject Changes AcceptRejectChangesDialog jsdialogs.css:62
Sort Key Window (Sort — Calc) SortKeyWindow jsdialogs.css:199

Note: the nonmodal surface is the rarest of the three — most older floating tool palettes (Find & Replace, advanced filters) still come from the LibreOffice native dialog path and so behave nonmodally without explicitly opting in. New work tends to land as either modal jsdialog or popover.

Popover (non-dialog)

Not really a dialog — an anchored panel for inline pickers and dropdowns. Has no title bar, no button area; just content. Opted-in via the JSDialog property popupParent: '_POPOVER_' (and clickToClose: '_POPOVER_'). Use when: the user is making a small bounded choice tied to a specific control (font color, autocomplete suggestion, autofilter values). Outside click dismisses.

Font name   Calibri
Arial
Calibri Light
Calibri
Cambria
Times New Roman
Verdana
ExampleDialog id / classSource
Auto-complete popup AutoCompletePopup AutoCompletePopup.ts:56
Content-control dropdown (Writer) contentControlModalpopup ContentControlDropdownSubSection.ts:94
Formula usage popup (Calc) extends AutoCompletePopup Control.FormulaUsagePopup.ts:35