theme-scss

Installation
SKILL.md

Odoo Theme SCSS Variable Reference

Critical Load Order Rule

Theme SCSS files load BEFORE core Odoo variables are defined:

1. YOUR theme's primary_variables.scss (via prepend)  ← FIRST
2. Odoo core primary_variables.scss                    ← SECOND

CONSEQUENCE: CANNOT use map-merge() with core variables!

WRONG: $o-color-palettes: map-merge($o-color-palettes, (...)); → Undefined variable error RIGHT: Define standalone variables without map-merge


1. $o-theme-font-configs — Google Fonts

$o-theme-font-configs: (
    '<Font Name>': (
        'family': (<CSS font-family list>),     // Required
        'url': '<Google Fonts query param>',     // Required — NOT the full URL!
        'properties': (                          // Optional: per-context overrides
            '<font-alias>': ( '<key>': <value> ),
        ),
    ),
);

CRITICAL: The 'url' key contains only the query parameter:

// CORRECT
'url': 'Poppins:300,300i,400,400i,600,600i,700,700i'

// WRONG — do NOT include full URL
'url': 'https://fonts.googleapis.com/css?family=Poppins:300,400,700'

Font Weight Format

'url': 'Poppins:300,300i,400,400i,600,600i,700,700i'
//      Light  Light-i  Regular Regular-i SemiBold ...
// Number alone = normal, Number + 'i' = italic

Multi-word Font Names

'url': 'Open+Sans:300,300i,400,400i,700,700i'
'url': 'IBM+Plex+Sans+Arabic:100,200,300,400,500,600,700'

Font Aliases (for 'properties')

Alias Maps To Usage
'base' 'font' Body text
'headings' 'headings-font' All headings
'navbar' 'navbar-font' Navigation
'buttons' 'buttons-font' Buttons

Complete Example

$o-theme-font-configs: (
    'Poppins': (
        'family': ('Poppins', sans-serif),
        'url': 'Poppins:300,300i,400,400i,500,500i,600,600i,700,700i',
        'properties': (
            'base': ( 'font-size-base': (15 / 16) * 1rem ),
        ),
    ),
    'Playfair Display': (
        'family': ('Playfair Display', serif),
        'url': 'Playfair+Display:400,400i,700,700i',
    ),
);

Arabic/RTL Fonts

$o-theme-font-configs: (
    'IBM Plex Sans Arabic': (
        'family': ('IBM Plex Sans Arabic', sans-serif),
        'url': 'IBM+Plex+Sans+Arabic:100,200,300,400,500,600,700',
    ),
    'Cairo': (
        'family': ('Cairo', sans-serif),
        'url': 'Cairo:200,300,400,500,600,700,800,900',
    ),
);

2. $o-color-palettes — Color System

The Five Semantic Colors

Color Meaning Typical Usage
o-color-1 Primary/Accent Brand color, buttons, links
o-color-2 Secondary Accent, secondary buttons
o-color-3 Light Background Section backgrounds, cards
o-color-4 White/Lightest Content background (#FFFFFF)
o-color-5 Dark/Text Headings, footer, dark sections

Color Combinations (o_cc1 - o_cc5)

Class Background Usage
o_cc1 o-color-4 (White) Main content
o_cc2 o-color-3 (Light) Alternate sections
o_cc3 o-color-2 (Secondary) Accent sections
o_cc4 o-color-1 (Primary) CTA sections
o_cc5 o-color-5 (Dark) Footer, dark

Palette Structure

$o-color-palettes: map-merge($o-color-palettes, (
    'my-palette': (
        'o-color-1': #09294F,
        'o-color-2': #FFA807,
        'o-color-3': #F6F4F0,
        'o-color-4': #FFFFFF,
        'o-color-5': #1B212C,

        // Component assignments
        'menu': 1,
        'footer': 5,
        'copyright': 5,

        // Color combination overrides
        'o-cc5-link': 'o-color-4',
        'o-cc5-btn-primary': 'o-color-2',
    ),
));

NOTE: map-merge with $o-color-palettes works ONLY in non-theme modules. In themes (which use prepend), use $o-website-values-palettes with 'color-palettes-name' instead.

HTML Usage

<section class="o_cc o_cc1 pt32 pb32"><!-- White bg --></section>
<section class="o_cc o_cc2 pt32 pb32"><!-- Light bg --></section>
<section class="o_cc o_cc5 pt32 pb32"><!-- Dark bg --></section>

Color Derivation (when only 2 colors are available)

o-color-3 = lighten(primary, 45%)
o-color-4 = #FFFFFF
o-color-5 = darken(primary, 40%) or #191A19

3. $o-website-values-palettes — Master Configuration (115+ Keys)

Quick Reference

Category Count Description
Typography & Fonts 13 Font family configuration
Font Sizes 13 Base and heading sizes
Line Heights 11 Text spacing
Margins 22 Heading and paragraph margins
Buttons 17 Button styling
Inputs 12 Form field styling
Header 13 Header/navigation config
Footer 3 Footer config
Links 1 Underline behavior
Layout 3 Page layout
Colors & Gradients 5 Palette and gradients
Google Fonts 2 Additional font loading

3.1 Typography & Fonts

Key Description
'font' Base font for entire site
'headings-font' Font for H1-H6
'navbar-font' Navigation menu font
'buttons-font' Button text font
'h2-font' to 'h6-font' Individual heading fonts
'display-1-font' to 'display-4-font' Display text fonts

3.2 Font Sizes

Key Default Description
'font-size-base' 1rem Base font size (16px)
'small-font-size' 0.875rem Small text (14px)
'h1-font-size' to 'h6-font-size' Calculated Heading sizes
'display-1-font-size' to 'display-6-font-size' 5rem-2.5rem Display sizes

3.3 Line Heights & Margins

Key Default Description
'body-line-height' 1.5 Body text
'headings-line-height' 1.2 All headings
'h2-line-height' to 'h6-line-height' Inherits Individual
'paragraph-margin-top' 0 Paragraph top
'paragraph-margin-bottom' 16px Paragraph bottom
'headings-margin-top' / 'headings-margin-bottom' 0 / 0.5rem Headings

3.4 Buttons (17 Keys)

Key Description
'btn-padding-y' / 'btn-padding-x' Default padding
'btn-font-size' Font size
'btn-padding-y-sm' / 'btn-padding-x-sm' Small button
'btn-padding-y-lg' / 'btn-padding-x-lg' Large button
'btn-border-width' Border thickness
'btn-border-radius' / -sm / -lg Corner radius
'btn-primary-outline' Primary as outline (bool)
'btn-secondary-outline' Secondary as outline (bool)
'btn-primary-flat' / 'btn-secondary-flat' Flat style (bool)
'btn-ripple' Material ripple effect (bool)

3.5 Inputs (12 Keys)

Key Description
'input-padding-y' / 'input-padding-x' Input padding
'input-font-size' Input font size
'input-border-width' Border thickness
'input-border-radius' / -sm / -lg Corner radius

3.6 Header & Navigation (13 Keys)

Key Values Description
'header-template' 'default' / 'hamburger' / 'vertical' / 'sidebar' Header layout
'header-links-style' 'default' / 'fill' / 'outline' / 'pills' / 'block' / 'border-bottom' Link style
'header-font-size' CSS length Header text size
'logo-height' CSS length Logo height
'fixed-logo-height' CSS length Logo when fixed
'hamburger-position' 'left' / 'center' / 'right' Desktop position
'hamburger-position-mobile' 'left' / 'center' / 'right' Mobile position

3.7 Footer (3 Keys)

Key Values Description
'footer-template' 'default' / 'centered' / 'minimalist' / 'links' / 'descriptive' Layout
'footer-effect' null / 'slideout_slide_hover' / 'slideout_shadow' Animation
'footer-scrolltop' boolean Scroll-to-top button

3.8 Links & Layout

Key Values Description
'link-underline' 'never' / 'hover' / 'always' Underline behavior
'layout' 'full' / 'boxed' Page layout
'body-image' URL Background image

3.9 Colors & Gradients

Key Description
'color-palettes-name' Active color palette name
'menu-gradient' Menu background gradient
'footer-gradient' Footer background gradient

Complete Example — Modern Corporate Theme

$o-website-values-palettes: (
    (
        'color-palettes-name': 'my-corporate-palette',

        // Typography
        'font': 'Inter',
        'headings-font': 'Inter',
        'navbar-font': 'Inter',
        'buttons-font': 'Inter',
        'font-size-base': 1rem,
        'headings-line-height': 1.3,
        'body-line-height': 1.6,

        // Header
        'header-template': 'default',
        'header-links-style': 'default',
        'logo-height': 48px,
        'fixed-logo-height': 36px,

        // Buttons
        'btn-padding-y': 0.75rem,
        'btn-padding-x': 1.5rem,
        'btn-border-radius': 8px,
        'btn-ripple': true,

        // Inputs
        'input-padding-y': 0.75rem,
        'input-border-radius': 8px,

        // Footer
        'footer-template': 'default',
        'footer-scrolltop': true,

        // Links
        'link-underline': 'hover',
        'layout': 'full',
    ),
);

Typography Multipliers

$o-theme-h1-font-size-multiplier: (64 / 16); // 64px → 4.0
$o-theme-h2-font-size-multiplier: (48 / 16); // 48px → 3.0
$o-theme-h3-font-size-multiplier: (32 / 16); // 32px → 2.0
$o-theme-h4-font-size-multiplier: (24 / 16); // 24px → 1.5
$o-theme-h5-font-size-multiplier: (20 / 16); // 20px → 1.25
$o-theme-h6-font-size-multiplier: (16 / 16); // 16px → 1.0 (FIXED!)
Weekly Installs
4
GitHub Stars
36
First Seen
13 days ago
Installed on
opencode4
deepagents4
antigravity4
claude-code4
github-copilot4
codex4