Before You Begin
Requirements
- Custom CSS must be enabled in your project settings (see “Enabling Custom CSS” below)
- The custom CSS file must use the correct selectors to work properly (more on this below)
Important Note
Even after enabling Custom CSS in your settings, you must add?customCss=true to your embed URLs for the custom styles to load. Without this parameter, the viewer will use the default theme.
Example:
How to Set Up Custom CSS
Step 1: Enable Custom CSS
- Go to Style & Embed
- Navigate to Style → Custom CSS
- Toggle the Custom CSS feature to Enabled
Step 2: Download the Default Template
Before creating your custom CSS, download our default theme template as your starting point:- In the Custom CSS settings section, click Download Default Template
- Save the
planpoint-theme.cssfile to your computer
Step 3: Customize Your CSS
Open the downloaded CSS file in any text editor and make your changes. Here’s what you can customize: Brand Colors- Primary and accent colors
- Status indicators (Available, Sold, Reserved)
- Background and text colors
- Font families
- Font sizes for different elements
- Font weights and styles
- Padding and margins
- Border radius values
- Grid gaps and alignment
- Box shadows
- Hover effects
- Transitions and animations
Step 4: Upload Your Custom CSS
- Return to Style & Embed → Style → Custom CSS
- Click Upload Custom CSS File
- Select your modified CSS file
- Click Save
Step 5: Add the URL Parameter
Update your embed code to include thecustomCss=true parameter:
Before:
Understanding CSS Selectors
Use the Right Selectors
Our system uses CSS Modules, which means you need to target elements using specific attribute selectors and class wildcards. The default template already includes these, but here’s what to know if you’re adding new styles: ✅ Correct selectors that work:Common Elements You Can Style
Here are some frequently customized elements:| Element | Selector | What it controls |
|---|---|---|
| Main container | [data-pp-embed] | Overall viewer wrapper, CSS variables |
| Inner container | [data-pp-container] | Inner container element |
| Layout | [data-pp-layout] | Grid layout container |
| Portal header | [data-pp-header] | Header bar with logo and CTAs |
| Header CTA (desktop) | [data-pp-cta-desktop] | Desktop call-to-action button |
| Header CTA (mobile) | [data-pp-cta-mobile] | Mobile call-to-action button |
| Filters wrapper | [data-pp-filters-wrapper] | Filter bar background/styling |
| Filters | [data-pp-filters] | Filter controls section |
| Glass filters | [data-pp-glass-filters] | Glass-style filter variant |
| Unit grid | [data-pp-unit-grid] | Grid of unit cards |
| Unit list | [data-pp-unit-list] | Table view of units |
| Unit cards | [class*="unitTile"] | Individual unit listings |
| Card body | [class*="unitTileBody"] | Card content area |
| Card price | [class*="unitTilePrice"] | Price display |
| Status badges | [class*="badge"] | Available/Sold/Reserved labels |
| Dropdowns | [class*="dropdownToggle"] | Filter dropdown buttons |
| Dropdown menus | [class*="dropdownMenu"] | Filter dropdown options |
| Action buttons | [class*="unitCardAction"] | CTA buttons |
| Modals | [data-pp-modal] | Popup windows |
| Canvas area | [data-pp-canvas] | Floor plan display area |
| Unit view | [data-pp-unit-view] | Unit view container |
| Amenity view | [data-pp-amenity-view] | Amenity view container |
| Commerce view | [data-pp-commerce-view] | Commerce view container |
| Gallery | [class*="embla"] | Image carousel |
| Shortlist button | [class*="shortlistAction"] | Favorite/save button |
CSS Custom Properties (Variables)
The template uses CSS custom properties for easy theme-wide changes. Modify these at the top of your CSS file for consistent styling:Example: Styling Status Badges
Here’s an example of how to style the availability badges:Troubleshooting
My custom CSS isn’t showing up
Check these common issues:- Missing URL parameter: Ensure
?customCss=trueis in your embed URL - Custom CSS not enabled: Verify it’s toggled on in Project Settings → Style
- Wrong selectors: Make sure you’re using
[class*="className"]pattern for nested elements, not plain class names or non-existent data attributes - Missing
!important: Many styles require!importantto override defaults - Cache issues: Try clearing your browser cache or testing in an incognito window
- File upload failed: Re-upload your CSS file and confirm the save was successful
Some elements aren’t styling correctly
This usually means you’re using selectors that don’t match our system:- ❌ Don’t use:
[data-pp-button],[data-pp-unit-tile],.unitTile - ✅ Do use:
[class*="button"],[class*="unitTile"]
Styles work in dev tools but not in my CSS file
Make sure you’re adding!important to your declarations. CSS Modules generate high-specificity selectors, so you need !important to override them.
How do I reset to the default theme?
In Style & Embed → Style → Custom CSS, click Remove Custom CSS or simply remove the?customCss=true parameter from your embed URL.