theme-scss

v2026.09.25

Complete SCSS variable reference for Odoo themes. Covers all three core variable systems: $o-theme-font-configs (Google Fonts), $o-color-palettes (color system with 5 semantic colors), and $o-website-values-palettes (115+ keys for typography, buttons, inputs, headers, footers, layout). Includes SCSS load order rules and color derivation. <example> Context: User asks about SCSS variables user: "What SCSS variables can I configure in my Odoo theme?" assistant: "I will use the theme-scss skill to show the complete variable reference." <commentary>Variable reference lookup.</commentary> </example> <example> Context: User wants to configure colors user: "How do I set up o-color-1 through o-color-5?" assistant: "I will explain the semantic color system and palette configuration." <commentary>Color palette configuration.</commentary> </example> <example> Context: User gets undefined variable error user: "I get 'Undefined variable $o-color-palettes' in my theme" assistant: "This is a SCSS load order issue. Theme files load BEFORE core variables." <commentary>SCSS debugging - load order issue.</commentary> </example> <example> Context: User wants to configure fonts user: "How do I add Google Fonts to my Odoo theme?" assistant: "Use $o-theme-font-configs with the font query parameter, not the full URL." <commentary>Font configuration.</commentary> </example>

GitHub
安装命令
npx skhub add ahmed-lakosha/theme-scss
Markdown
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')

AliasMaps ToUsage
'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

ColorMeaningTypical Usage
o-color-1Primary/AccentBrand color, buttons, links
o-color-2SecondaryAccent, secondary buttons
o-color-3Light BackgroundSection backgrounds, cards
o-color-4White/LightestContent background (#FFFFFF)
o-color-5Dark/TextHeadings, footer, dark sections

Color Combinations (o_cc1 - o_cc5)

ClassBackgroundUsage
o_cc1o-color-4 (White)Main content
o_cc2o-color-3 (Light)Alternate sections
o_cc3o-color-2 (Secondary)Accent sections
o_cc4o-color-1 (Primary)CTA sections
o_cc5o-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

CategoryCountDescription
Typography & Fonts13Font family configuration
Font Sizes13Base and heading sizes
Line Heights11Text spacing
Margins22Heading and paragraph margins
Buttons17Button styling
Inputs12Form field styling
Header13Header/navigation config
Footer3Footer config
Links1Underline behavior
Layout3Page layout
Colors & Gradients5Palette and gradients
Google Fonts2Additional font loading

3.1 Typography & Fonts

KeyDescription
'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

KeyDefaultDescription
'font-size-base'1remBase font size (16px)
'small-font-size'0.875remSmall text (14px)
'h1-font-size' to 'h6-font-size'CalculatedHeading sizes
'display-1-font-size' to 'display-6-font-size'5rem-2.5remDisplay sizes

3.3 Line Heights & Margins

KeyDefaultDescription
'body-line-height'1.5Body text
'headings-line-height'1.2All headings
'h2-line-height' to 'h6-line-height'InheritsIndividual
'paragraph-margin-top'0Paragraph top
'paragraph-margin-bottom'16pxParagraph bottom
'headings-margin-top' / 'headings-margin-bottom'0 / 0.5remHeadings

3.4 Buttons (17 Keys)

KeyDescription
'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 / -lgCorner 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)

KeyDescription
'input-padding-y' / 'input-padding-x'Input padding
'input-font-size'Input font size
'input-border-width'Border thickness
'input-border-radius' / -sm / -lgCorner radius

3.6 Header & Navigation (13 Keys)

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

3.7 Footer (3 Keys)

KeyValuesDescription
'footer-template''default' / 'centered' / 'minimalist' / 'links' / 'descriptive'Layout
'footer-effect'null / 'slideout_slide_hover' / 'slideout_shadow'Animation
'footer-scrolltop'booleanScroll-to-top button

3.8 Links & Layout

KeyValuesDescription
'link-underline''never' / 'hover' / 'always'Underline behavior
'layout''full' / 'boxed'Page layout
'body-image'URLBackground image

3.9 Colors & Gradients

KeyDescription
'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!)
发现
标签

此技能尚未发布标签。

版本
最新版本元数据

版本

v2026.09.25

发布时间

2026年9月25日

分类

未分类

许可证

MIT

源路径

odoo-frontend-plugin/skills/theme-scss

默认分支

master

最新提交

5541d98

Tree SHA

dca9407