Calculate your proptech boost!

ProptechOS Design System

Visual Identity System

Logotype

  • Primary version: Horizontal lockup (symbol + wordmark).

  • Clearspace: Maintain sufficient breathing room around the logo.

  • Placement: Top-left or bottom-right corners (standardized per format).

  • Do not: stretch, rotate, recolor, outline, or rearrange symbol and wordmark

Logo URL

Colors

Depending on the situation different color
variations of the logo can be used.

Design tokens

“colors”:
“primary”: “#59124C”,
“secondary”: “#D8FF54”,
“background”: “#E0EBE9”,
“text”: “#FFFFFF”

“typography”:
“fontPrimary”: “Avenir,
“fontWeights”: [400, 600, 700],
“headlineSize”: “48px”,
“bodySize”: “16px”

“cornerRadius”: “16px”,
“shadow”: “0px 4px 20px rgba(0,0,0,0.2)”

Visual Identity System

Font-family

Primary Typeface: Avenir

  • Avenir is modern, clear, and balanced—suitable for both print and digital.

    Rules:

    • Avoid all caps except in UI buttons or tags.

    • Maintain high contrast for readability.

    • Use brand colors for emphasis (e.g., Canary for keywords or highlights).

Type Scale Spec
H1 heading
Font-size: 72px
Font-weight: Book
Line-height: 120%
H2 heading
Font-size: 48px
Font-weight: Book
Line-height: 120%
H3 heading
Font-size: 32px
Font-weight: Medium
Line-height: 120%
H4 heading
Font-size: 24px
Font-weight: Medium
Line-height: 120%

Visual System Reference

Style descriptors:
Our visuals should embody the brand concept of being “open, scalable,
and transformative”.
To maintain a consistent visual language, the images should have a cool tone.

Design Token

Design system CSS file based on the official Brand Book

/**
* ProptechOS Design System – CSS Variables
* Based on ProptechOS Brand Book (September 2025)
* Use these custom properties in your CSS/SCSS files
*/

:root {
/* Brand Colors */
–color-primary: #59124C; /* Loulou – Primary Purple */
–color-secondary: #D8FF54; /* Canary – Neon Green */
–color-tertiary: #E0EBE9; /* Fog – Light Blue-Green */
–color-mystic: #300D2E; /* Mystic – Deep Dark Purple */
–color-swirl: #D6CCC4; /* Swirl – Soft Beige */

/* UI Colors */
–color-bg-primary: #FFFFFF;
–color-bg-secondary: #E0EBE9;
–color-bg-tertiary: #F5F5F5;

–color-text-primary: #1A1A1A;
–color-text-secondary: #666666;
–color-text-tertiary: #999999;
–color-text-inverse: #FFFFFF;

–color-border-light: #E0E0E0;
–color-border-medium: #CCCCCC;
–color-border-dark: #59124C;

/* Data Visualization – Temperature */
–color-temp-cold: #4A90E2;
–color-temp-cool: #7EC8E3;
–color-temp-comfortable: #50C878;
–color-temp-warm: #FFB347;
–color-temp-hot: #FF6B6B;

/* Data Visualization – Charts */
–color-chart-1: #59124C;
–color-chart-2: #D8FF54;
–color-chart-3: #4A90E2;
–color-chart-4: #50C878;
–color-chart-5: #FFB347;
–color-chart-6: #7EC8E3;

/* Status Colors */
–color-success: #50C878;
–color-warning: #FFB347;
–color-error: #FF6B6B;
–color-info: #4A90E2;
–color-neutral: #999999;

/* Typography */
–font-family-primary: Avenir, -apple-system, BlinkMacSystemFont, ‘Segoe UI’, Roboto, sans-serif;
–font-family-mono: ‘Monaco’, ‘Courier New’, monospace;

–font-weight-book: 400;
–font-weight-medium: 600;
–font-weight-heavy: 700;

/* Font Sizes */
–font-size-h1: 72px;
–font-size-h2: 48px;
–font-size-h3: 32px;
–font-size-h4: 24px;
–font-size-h5: 20px;
–font-size-h6: 16px;

–font-size-body-lg: 18px;
–font-size-body: 16px;
–font-size-body-sm: 14px;
–font-size-body-xs: 12px;

–font-size-metric-value: 48px;
–font-size-metric-label: 14px;

/* Line Heights */
–line-height-tight: 120%;
–line-height-normal: 140%;
–line-height-relaxed: 160%;

/* Spacing */
–spacing-xs: 4px;
–spacing-sm: 8px;
–spacing-md: 16px;
–spacing-lg: 24px;
–spacing-xl: 32px;
–spacing-2xl: 48px;
–spacing-3xl: 64px;
–spacing-4xl: 96px;

/* Border Radius – Based on logomark form */
–radius-sm: 6px; /* Small elements: buttons, small interactive areas */
–radius-md: 8px;
–radius-lg: 16px; /* Medium elements: cards, image frames, modules */
–radius-xl: 24px;
–radius-full: 9999px;

/* Shadows */
–shadow-sm: 0px 1px 2px rgba(0, 0, 0, 0.05);
–shadow-md: 0px 4px 6px rgba(0, 0, 0, 0.1);
–shadow-lg: 0px 4px 20px rgba(0, 0, 0, 0.2);
–shadow-xl: 0px 10px 40px rgba(0, 0, 0, 0.15);

/* Layout */
–container-max-width: 1440px;
–grid-columns: 12;
–grid-gutter: 24px;
–sidebar-width: 280px;
–header-height: 72px;

/* Component Specific */
–card-padding: 24px;
–card-radius: 16px;
–card-shadow: 0px 4px 20px rgba(0, 0, 0, 0.2);

–button-padding: 12px 24px;
–button-radius: 8px;

–input-height: 48px;
–input-padding: 12px 16px;
–input-radius: 8px;

/* Animations */
–transition-fast: 150ms;
–transition-normal: 300ms;
–transition-slow: 500ms;
–easing-default: cubic-bezier(0.4, 0.0, 0.2, 1);
}

/* Base Styles */
body {
font-family: var(–font-family-primary);
font-size: var(–font-size-body);
line-height: var(–line-height-relaxed);
color: var(–color-text-primary);
background-color: var(–color-bg-secondary);
}

/* Typography Classes */
h1, .h1 {
font-size: var(–font-size-h1);
font-weight: var(–font-weight-book);
line-height: var(–line-height-tight);
letter-spacing: -0.02em;
}

h2, .h2 {
font-size: var(–font-size-h2);
font-weight: var(–font-weight-book);
line-height: var(–line-height-tight);
letter-spacing: -0.01em;
}

h3, .h3 {
font-size: var(–font-size-h3);
font-weight: var(–font-weight-medium);
line-height: var(–line-height-tight);
}

h4, .h4 {
font-size: var(–font-size-h4);
font-weight: var(–font-weight-medium);
line-height: var(–line-height-tight);
}

/* Component Classes */
.proptechos-card {
background: var(–color-bg-primary);
border-radius: var(–card-radius);
padding: var(–card-padding);
box-shadow: var(–card-shadow);
}

.proptechos-button-primary {
background: var(–color-primary);
color: var(–color-text-inverse);
padding: var(–button-padding);
border-radius: var(–button-radius);
font-weight: var(–font-weight-medium);
font-size: var(–font-size-body);
border: none;
cursor: pointer;
transition: all var(–transition-normal) var(–easing-default);
}

.proptechos-button-primary:hover {
opacity: 0.9;
transform: translateY(-1px);
box-shadow: var(–shadow-md);
}

.proptechos-button-secondary {
background: var(–color-secondary);
color: var(–color-primary);
padding: var(–button-padding);
border-radius: var(–button-radius);
font-weight: var(–font-weight-medium);
font-size: var(–font-size-body);
border: none;
cursor: pointer;
transition: all var(–transition-normal) var(–easing-default);
}

.proptechos-metric-card {
background: var(–color-bg-primary);
border-radius: var(–card-radius);
padding: var(–card-padding);
box-shadow: var(–card-shadow);
text-align: center;
}

.proptechos-metric-value {
font-size: var(–font-size-metric-value);
font-weight: var(–font-weight-heavy);
line-height: 1;
color: var(–color-primary);
margin-bottom: var(–spacing-sm);
}

.proptechos-metric-label {
font-size: var(–font-size-metric-label);
font-weight: var(–font-weight-medium);
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(–color-text-secondary);
}

.proptechos-badge {
display: inline-block;
padding: 4px 12px;
border-radius: var(–radius-full);
font-size: var(–font-size-body-xs);
font-weight: var(–font-weight-medium);
}

.proptechos-badge-success {
background: var(–color-success);
color: white;
}

.proptechos-badge-warning {
background: var(–color-warning);
color: var(–color-text-primary);
}

.proptechos-badge-error {
background: var(–color-error);
color: white;
}

/* Dashboard Grid */
.proptechos-dashboard-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: var(–spacing-lg);
padding: var(–spacing-lg);
}

/* Responsive Typography */
@media (max-width: 768px) {
:root {
–font-size-h1: 48px;
–font-size-h2: 36px;
–font-size-h3: 28px;
–font-size-h4: 20px;
–font-size-metric-value: 36px;
}
}