Documentation Index
Fetch the complete documentation index at: https://mintlify.com/Ozcaar/real-estate-template/llms.txt
Use this file to discover all available pages before exploring further.
ThemeConfig is the single source of truth for every visual design token in the template. Color palettes, font stacks, border radii, box shadows, and layout dimensions are all defined as typed TypeScript objects — never hardcoded in component styles. At application startup the theme.ts plugin calls themeToCssVars(theme) from app/core/utils/theme-to-css-vars.ts, which serializes the active theme into a :root {} CSS rule injected during SSR. This guarantees that the correct brand tokens are present in the initial HTML with no flash of the wrong theme, and that every component can consume var(--color-primary), var(--radius-md), etc. with no code changes when the theme switches. The interface is defined in app/types/theme.types.ts.
ThemeConfig interface
Unique theme identifier. Referenced by
AgencyConfig.theme to select the active theme. Also applied as the data-theme attribute value on the root element, enabling theme-scoped CSS selectors if needed.Human-readable theme name displayed in developer tooling and theme-picker UIs (e.g.
'Default Theme', 'Luxury Dark').Full color palette. See
ThemeColors below.Font family stacks for headings, body text, and editorial/serif contexts. See
ThemeFonts below.Border radius scale from small to pill-shaped. See
ThemeRadius below.Box shadow scale for three elevation levels. See
ThemeShadow below.Layout constraints for container width and section vertical spacing. See
ThemeLayout below.ThemeColors interface
All 17 color fields accept any valid CSS color string (hex, rgb(), hsl(), etc.). Each maps to a CSS custom property on :root — see the CSS variable mapping table for the full correspondence.
Page background color. Applied to the outermost layout surface. Default:
#FFFFFF.Default text color rendered on top of
background. Default: #111827.Raised surface color for cards, panels, and modals that sit above the page background. Default:
#FFFFFF.Subtle secondary surface for alternating section backgrounds, input fills, and quiet containers. Default:
#F5F5F4.Brand primary color. Used for primary buttons, active states, links, and key interactive elements. Default:
#0F766E.Readable text and icon color rendered on top of
primary. Ensures accessible contrast on primary-colored backgrounds. Default: #FFFFFF.Brand secondary color. Used for secondary buttons and supporting UI elements. Default:
#F5F5F4.Readable text and icon color rendered on top of
secondary. Default: #111827.Accent color for highlights, price tags, badges, and emphasis elements. Default:
#D97706.Readable text and icon color rendered on top of
accent. Default: #FFFFFF.Muted text color for metadata, captions, placeholder text, and secondary labels. Default:
#6B7280.Border and divider color for cards, inputs, separators, and table rows. Default:
#E5E7EB.Card background color. Typically the same as
surface but separated so card-specific overrides are possible. Default: #FFFFFF.Default text color on top of
card. Default: #111827.Success state color for alerts, badges, and status indicators. Default:
#16A34A.Warning state color. Default:
#D97706 (same as accent in the default theme).Error and danger state color for validation messages and destructive action indicators. Default:
#DC2626.ThemeFonts interface
CSS font-family stack for all heading elements (
h1–h6) and display text. Default: 'Inter, system-ui, sans-serif'.CSS font-family stack for body text, paragraphs, and UI labels. Default:
'Inter, system-ui, sans-serif'.Optional serif stack for editorial contexts and luxury themes. Even when not actively used in a theme, the field must be populated. Default:
'Georgia, "Times New Roman", serif'.ThemeRadius interface
Small border radius for inputs, tags, and tight UI elements. Default:
'0.375rem'.Medium border radius for cards, buttons, and panels. Default:
'0.75rem'.Large border radius for modals, image containers, and hero cards. Default:
'1rem'.Extra-large border radius for prominent feature cards and showcase tiles. Default:
'1.5rem'.Pill-shaped radius for badges, avatar borders, and pill buttons. Default:
'9999px'.ThemeShadow interface
Subtle shadow for interactive elements on hover and focused inputs. Default:
'0 1px 2px rgb(0 0 0 / 0.08)'.Medium shadow for cards and dropdowns. Default:
'0 8px 24px rgb(0 0 0 / 0.10)'.Large shadow for modals, hero cards, and highly elevated surfaces. Default:
'0 16px 48px rgb(0 0 0 / 0.14)'.ThemeLayout interface
Maximum width of the main content container. Applied to the
AppContainer wrapper to constrain page width on large screens. Default: '1280px'.Vertical padding applied to major page sections for consistent rhythm. Default:
'5rem'.CSS variable mapping
themeToCssVars(theme) in app/core/utils/theme-to-css-vars.ts maps every token field to a CSS custom property on :root. The table below shows the complete mapping:
| Token path | CSS variable |
|---|---|
colors.background | --color-background |
colors.foreground | --color-foreground |
colors.surface | --color-surface |
colors.surfaceMuted | --color-surface-muted |
colors.primary | --color-primary |
colors.primaryForeground | --color-primary-foreground |
colors.secondary | --color-secondary |
colors.secondaryForeground | --color-secondary-foreground |
colors.accent | --color-accent |
colors.accentForeground | --color-accent-foreground |
colors.muted | --color-muted |
colors.border | --color-border |
colors.card | --color-card |
colors.cardForeground | --color-card-foreground |
colors.success | --color-success |
colors.warning | --color-warning |
colors.error | --color-error |
radius.sm | --radius-sm |
radius.md | --radius-md |
radius.lg | --radius-lg |
radius.xl | --radius-xl |
radius.full | --radius-full |
shadow.sm | --shadow-sm |
shadow.md | --shadow-md |
shadow.lg | --shadow-lg |
fonts.heading | --font-heading |
fonts.body | --font-body |
fonts.serif | --font-serif |
layout.containerMaxWidth | --container-max-width |
layout.sectionSpacing | --section-spacing |
surfaceMuted serializes to --color-surface-muted (hyphen-separated) and primaryForeground to --color-primary-foreground — camelCase field names are converted to kebab-case CSS variable names.
Default theme values
The default theme is defined inapp/themes/default.theme.ts:
Registering a custom theme
Themes are registered inapp/themes/index.ts. To add a new theme:
- Create a new file (e.g.
app/themes/luxury.theme.ts) that exports aThemeConfigobject. - Import it in
app/themes/index.tsand add it to thethemesregistry under itsid. - Set
AgencyConfig.themeto the new theme’sidin the agency config file.
validateAgencyConfig function checks that the theme ID exists in the registry and throws a ZodError if not, so a typo in the theme field will surface at module load rather than producing a silent visual regression.