PropTech IoT Sensor – Pine Swiss Grid
<div class="fp-real-estate-smart-home-sensor-ui">
<div class="fp-real-estate-smart-home-sensor-ui-stage" id="fp-real-estate-smart-home-sensor-ui-stage">
<div class="fp-real-estate-smart-home-sensor-ui-bg-grid"></div>
<div class="fp-real-estate-smart-home-sensor-ui-layout">
<div class="fp-real-estate-smart-home-sensor-ui-header">
<div class="fp-real-estate-smart-home-sensor-ui-title-box">
<span class="fp-real-estate-smart-home-sensor-ui-title">UNIT 402 // HVAC</span>
<span class="fp-real-estate-smart-home-sensor-ui-subtitle">Zone: Primary Living</span>
</div>
<div class="fp-real-estate-smart-home-sensor-ui-status-box">
<span class="fp-real-estate-smart-home-sensor-ui-status-indicator" id="fp-real-estate-smart-home-sensor-ui-status">OPTIMAL</span>
</div>
</div>
<div class="fp-real-estate-smart-home-sensor-ui-visualizer" id="fp-real-estate-smart-home-sensor-ui-trigger">
<div class="fp-real-estate-smart-home-sensor-ui-ambient"></div>
<div class="fp-real-estate-smart-home-sensor-ui-rings">
<div class="fp-real-estate-smart-home-sensor-ui-ring fp-real-estate-smart-home-sensor-ui-ring-1"></div>
<div class="fp-real-estate-smart-home-sensor-ui-ring fp-real-estate-smart-home-sensor-ui-ring-2"></div>
<div class="fp-real-estate-smart-home-sensor-ui-ring fp-real-estate-smart-home-sensor-ui-ring-3"></div>
</div>
<div class="fp-real-estate-smart-home-sensor-ui-core">
<span class="fp-real-estate-smart-home-sensor-ui-core-lbl">AIR QUAL</span>
<span class="fp-real-estate-smart-home-sensor-ui-core-val" id="fp-real-estate-smart-home-sensor-ui-aqi">42</span>
<span class="fp-real-estate-smart-home-sensor-ui-core-unit">AQI INDEX</span>
</div>
</div>
<div class="fp-real-estate-smart-home-sensor-ui-data-grid">
<div class="fp-real-estate-smart-home-sensor-ui-data-box">
<span class="fp-real-estate-smart-home-sensor-ui-data-lbl">TEMP</span>
<div>
<span class="fp-real-estate-smart-home-sensor-ui-data-val" id="fp-real-estate-smart-home-sensor-ui-temp">22.4</span>
<span class="fp-real-estate-smart-home-sensor-ui-data-unit">°C</span>
</div>
</div>
<div class="fp-real-estate-smart-home-sensor-ui-data-box">
<span class="fp-real-estate-smart-home-sensor-ui-data-lbl">HUMID</span>
<div>
<span class="fp-real-estate-smart-home-sensor-ui-data-val" id="fp-real-estate-smart-home-sensor-ui-hum">45</span>
<span class="fp-real-estate-smart-home-sensor-ui-data-unit">%</span>
</div>
</div>
<div class="fp-real-estate-smart-home-sensor-ui-data-box">
<span class="fp-real-estate-smart-home-sensor-ui-data-lbl">CO2</span>
<div>
<span class="fp-real-estate-smart-home-sensor-ui-data-val" id="fp-real-estate-smart-home-sensor-ui-co2">410</span>
<span class="fp-real-estate-smart-home-sensor-ui-data-unit">ppm</span>
</div>
</div>
</div>
<div class="fp-real-estate-smart-home-sensor-ui-progress-bar">
<div class="fp-real-estate-smart-home-sensor-ui-progress-fill" id="fp-real-estate-smart-home-sensor-ui-progress"></div>
</div>
</div>
</div>
</div>.fp-real-estate-smart-home-sensor-ui {
--fp-container-width: 100%;
--fp-max-width: 500px;
--fp-aspect-ratio: 1 / 1;
--fp-primary-color: #ffffff;
--fp-secondary-color: #f4f7f6;
--fp-muted-color: #52796f;
--fp-soft-color: #cad2c5;
--fp-background-color: transparent;
--fp-info-color: #84a98c;
--fp-warning-color: #52b788;
--fp-danger-color: #081c15;
--fp-accent-color: #2d6a4f;
--fp-text-color: #1b4332;
width: var(--fp-container-width);
max-width: var(--fp-max-width);
margin: 0 auto;
background: var(--fp-background-color);
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
box-sizing: border-box;
position: relative;
}
.fp-real-estate-smart-home-sensor-ui * {
box-sizing: inherit;
}
.fp-real-estate-smart-home-sensor-ui-stage {
aspect-ratio: var(--fp-aspect-ratio);
background: var(--fp-primary-color);
display: flex;
align-items: center;
justify-content: center;
position: relative;
overflow: hidden;
border: 2px solid var(--fp-danger-color);
box-shadow: 0 20px 40px -10px rgba(8, 28, 21, 0.15);
}
.fp-real-estate-smart-home-sensor-ui-bg-grid {
position: absolute;
top: 0; left: 0; right: 0; bottom: 0;
background-size: 5% 5%;
background-image:
linear-gradient(to right, var(--fp-soft-color) 1px, transparent 1px),
linear-gradient(to bottom, var(--fp-soft-color) 1px, transparent 1px);
z-index: 0;
opacity: 0.5;
}
.fp-real-estate-smart-home-sensor-ui-layout {
position: relative;
z-index: 10;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
}
.fp-real-estate-smart-home-sensor-ui-header {
display: flex;
justify-content: space-between;
align-items: stretch;
border-bottom: 2px solid var(--fp-danger-color);
background: var(--fp-primary-color);
height: 15%;
min-height: 50px;
}
.fp-real-estate-smart-home-sensor-ui-title-box {
padding: 0 16px;
display: flex;
flex-direction: column;
justify-content: center;
border-right: 2px solid var(--fp-danger-color);
flex: 1;
}
.fp-real-estate-smart-home-sensor-ui-title {
font-size: 1.1rem;
font-weight: 900;
color: var(--fp-danger-color);
text-transform: uppercase;
letter-spacing: -0.02em;
line-height: 1.1;
}
.fp-real-estate-smart-home-sensor-ui-subtitle {
font-size: 0.65rem;
font-weight: 700;
color: var(--fp-muted-color);
text-transform: uppercase;
letter-spacing: 0.05em;
}
.fp-real-estate-smart-home-sensor-ui-status-box {
padding: 0 16px;
display: flex;
align-items: center;
justify-content: center;
background: var(--fp-secondary-color);
min-width: 30%;
}
.fp-real-estate-smart-home-sensor-ui-status-indicator {
font-size: 0.75rem;
font-weight: 900;
color: var(--fp-accent-color);
text-transform: uppercase;
letter-spacing: 0.1em;
display: flex;
align-items: center;
gap: 8px;
transition: color 0.3s ease;
}
.fp-real-estate-smart-home-sensor-ui-status-indicator::before {
content: '';
display: block;
width: 8px; height: 8px;
background: var(--fp-accent-color);
border-radius: 50%;
transition: background 0.3s ease;
}
.fp-real-estate-smart-home-sensor-ui-visualizer {
flex: 1;
position: relative;
display: flex;
align-items: center;
justify-content: center;
background: rgba(255, 255, 255, 0.8);
cursor: pointer;
-webkit-tap-highlight-color: transparent;
overflow: hidden;
}
.fp-real-estate-smart-home-sensor-ui-ambient {
position: absolute;
width: 100%; height: 100%;
background: radial-gradient(circle at center, rgba(82, 183, 136, 0.15) 0%, transparent 60%);
animation: fp-real-estate-smart-home-sensor-ui-breathe 4s ease-in-out infinite alternate;
z-index: 1;
}
@keyframes fp-real-estate-smart-home-sensor-ui-breathe {
0% { opacity: 0.5; transform: scale(0.9); }
100% { opacity: 1; transform: scale(1.1); }
}
.fp-real-estate-smart-home-sensor-ui-rings {
position: absolute;
top: 50%; left: 50%;
width: 100%; height: 100%;
z-index: 2;
pointer-events: none;
}
.fp-real-estate-smart-home-sensor-ui-ring {
position: absolute;
top: 50%; left: 50%;
transform: translate(-50%, -50%);
border-radius: 50%;
border: 1px solid var(--fp-accent-color);
opacity: 0;
animation: fp-real-estate-smart-home-sensor-ui-expand 4.5s cubic-bezier(0.25, 0.8, 0.5, 1) infinite;
}
.fp-real-estate-smart-home-sensor-ui-ring-1 { width: 20%; padding-bottom: 20%; animation-delay: 0s; }
.fp-real-estate-smart-home-sensor-ui-ring-2 { width: 20%; padding-bottom: 20%; animation-delay: 1.5s; }
.fp-real-estate-smart-home-sensor-ui-ring-3 { width: 20%; padding-bottom: 20%; animation-delay: 3s; }
@keyframes fp-real-estate-smart-home-sensor-ui-expand {
0% { width: 20%; padding-bottom: 20%; opacity: 0; border-width: 2px; }
20% { opacity: 0.8; border-width: 1.5px; }
100% { width: 120%; padding-bottom: 120%; opacity: 0; border-width: 0.5px; }
}
.fp-real-estate-smart-home-sensor-ui-core {
position: relative;
z-index: 10;
width: 140px; height: 140px;
background: var(--fp-primary-color);
border: 2px solid var(--fp-danger-color);
border-radius: 50%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
box-shadow: 0 10px 20px rgba(8, 28, 21, 0.1);
transition: transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275), border-color 0.3s ease;
}
.fp-real-estate-smart-home-sensor-ui-core-lbl {
font-size: 0.7rem;
font-weight: 900;
color: var(--fp-muted-color);
text-transform: uppercase;
letter-spacing: 0.1em;
margin-bottom: -4px;
}
.fp-real-estate-smart-home-sensor-ui-core-val {
font-size: 3.5rem;
font-weight: 900;
color: var(--fp-danger-color);
line-height: 1;
letter-spacing: -0.05em;
font-variant-numeric: tabular-nums;
transition: color 0.3s ease;
}
.fp-real-estate-smart-home-sensor-ui-core-unit {
font-size: 0.65rem;
font-weight: 700;
color: var(--fp-danger-color);
text-transform: uppercase;
letter-spacing: 0.05em;
margin-top: 2px;
}
.fp-real-estate-smart-home-sensor-ui-data-grid {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
border-top: 2px solid var(--fp-danger-color);
background: var(--fp-primary-color);
height: 25%;
min-height: 80px;
}
.fp-real-estate-smart-home-sensor-ui-data-box {
display: flex;
flex-direction: column;
justify-content: center;
padding: 0 16px;
border-right: 2px solid var(--fp-danger-color);
position: relative;
overflow: hidden;
}
.fp-real-estate-smart-home-sensor-ui-data-box:last-child {
border-right: none;
}
.fp-real-estate-smart-home-sensor-ui-data-lbl {
font-size: 0.65rem;
font-weight: 800;
color: var(--fp-muted-color);
text-transform: uppercase;
letter-spacing: 0.05em;
margin-bottom: 4px;
}
.fp-real-estate-smart-home-sensor-ui-data-val {
font-size: 1.25rem;
font-weight: 900;
color: var(--fp-text-color);
line-height: 1;
font-variant-numeric: tabular-nums;
letter-spacing: -0.02em;
}
.fp-real-estate-smart-home-sensor-ui-data-unit {
font-size: 0.7rem;
font-weight: 700;
color: var(--fp-muted-color);
}
.fp-real-estate-smart-home-sensor-ui-progress-bar {
position: absolute;
bottom: 0; left: 0; right: 0;
height: 4px;
background: var(--fp-secondary-color);
border-top: 1px solid var(--fp-danger-color);
}
.fp-real-estate-smart-home-sensor-ui-progress-fill {
height: 100%;
width: 0%;
background: var(--fp-accent-color);
transition: width 0.1s linear;
}
.fp-real-estate-smart-home-sensor-ui-stage.is-calibrating .fp-real-estate-smart-home-sensor-ui-core {
transform: scale(1.1);
border-color: var(--fp-accent-color);
box-shadow: 0 15px 30px rgba(45, 106, 79, 0.2);
}
.fp-real-estate-smart-home-sensor-ui-stage.is-calibrating .fp-real-estate-smart-home-sensor-ui-core-val {
color: var(--fp-accent-color);
}
.fp-real-estate-smart-home-sensor-ui-stage.is-calibrating .fp-real-estate-smart-home-sensor-ui-status-indicator {
color: var(--fp-warning-color);
}
.fp-real-estate-smart-home-sensor-ui-stage.is-calibrating .fp-real-estate-smart-home-sensor-ui-status-indicator::before {
background: var(--fp-warning-color);
box-shadow: 0 0 8px var(--fp-warning-color);
animation: fp-real-estate-smart-home-sensor-ui-blink 0.5s infinite alternate;
}
@keyframes fp-real-estate-smart-home-sensor-ui-blink {
0% { opacity: 0.4; }
100% { opacity: 1; }
}
.fp-real-estate-smart-home-sensor-ui-stage.is-calibrating .fp-real-estate-smart-home-sensor-ui-ring {
animation-duration: 1.5s;
border-color: var(--fp-warning-color);
border-width: 3px;
}
.fp-real-estate-smart-home-sensor-ui-stage.is-calibrating .fp-real-estate-smart-home-sensor-ui-ambient {
animation-duration: 0.5s;
background: radial-gradient(circle at center, rgba(82, 183, 136, 0.3) 0%, transparent 70%);
}
.fp-real-estate-smart-home-sensor-ui-stage.is-calibrating .fp-real-estate-smart-home-sensor-ui-data-val {
color: var(--fp-accent-color);
opacity: 0.8;
}
@media (max-width: 480px) {
.fp-real-estate-smart-home-sensor-ui-header { min-height: 45px; }
.fp-real-estate-smart-home-sensor-ui-title { font-size: 0.95rem; }
.fp-real-estate-smart-home-sensor-ui-core { width: 120px; height: 120px; }
.fp-real-estate-smart-home-sensor-ui-core-val { font-size: 3rem; }
.fp-real-estate-smart-home-sensor-ui-data-grid { min-height: 70px; }
.fp-real-estate-smart-home-sensor-ui-data-val { font-size: 1rem; }
.fp-real-estate-smart-home-sensor-ui-data-box { padding: 0 8px; }
}(function() {
document.querySelectorAll('.fp-real-estate-smart-home-sensor-ui').forEach(root => {
const stage = root.querySelector('#fp-real-estate-smart-home-sensor-ui-stage');
const trigger = root.querySelector('#fp-real-estate-smart-home-sensor-ui-trigger');
const statusEl = root.querySelector('#fp-real-estate-smart-home-sensor-ui-status');
const aqiEl = root.querySelector('#fp-real-estate-smart-home-sensor-ui-aqi');
const tempEl = root.querySelector('#fp-real-estate-smart-home-sensor-ui-temp');
const humEl = root.querySelector('#fp-real-estate-smart-home-sensor-ui-hum');
const co2El = root.querySelector('#fp-real-estate-smart-home-sensor-ui-co2');
const progressFill = root.querySelector('#fp-real-estate-smart-home-sensor-ui-progress');
if (!stage || !trigger || !aqiEl || !tempEl || !humEl || !co2El) return;
let animationFrameId;
let lastUpdate = 0;
let state = 'IDLE';
let progress = 0;
let stateTimer = 0;
let targetAqi = 42;
let currentAqi = 42;
let targetTemp = 22.4;
let currentTemp = 22.4;
let targetHum = 45;
let currentHum = 45;
let targetCo2 = 410;
let currentCo2 = 410;
function fp_real_estate_smart_home_sensor_ui_loop(timestamp) {
if (!document.body.contains(root)) {
cancelAnimationFrame(animationFrameId);
if (typeof observer !== 'undefined') observer.disconnect();
document.removeEventListener('visibilitychange', fp_real_estate_smart_home_sensor_ui_handleVisibilityChange);
return;
}
if (document.visibilityState === 'visible') {
if (!lastUpdate) lastUpdate = timestamp;
lastUpdate = timestamp;
if (state === 'IDLE' && timestamp % 2000 < 50) {
targetAqi = 40 + Math.floor(Math.random() * 5);
targetTemp = 22.0 + Math.random() * 1.0;
targetHum = 43 + Math.floor(Math.random() * 5);
targetCo2 = 400 + Math.floor(Math.random() * 30);
}
currentAqi += (targetAqi - currentAqi) * 0.1;
currentTemp += (targetTemp - currentTemp) * 0.05;
currentHum += (targetHum - currentHum) * 0.1;
currentCo2 += (targetCo2 - currentCo2) * 0.1;
if (aqiEl) aqiEl.textContent = Math.round(currentAqi);
if (tempEl) tempEl.textContent = currentTemp.toFixed(1);
if (humEl) humEl.textContent = Math.round(currentHum);
if (co2El) co2El.textContent = Math.round(currentCo2);
if (state === 'IDLE') {
progress = (timestamp % 10000) / 100;
if (progressFill) progressFill.style.width = `${progress}%`;
}
if (state === 'CALIBRATING') {
if (!stateTimer) stateTimer = timestamp;
targetAqi = 30 + Math.floor(Math.random() * 20);
targetTemp = 20.0 + Math.random() * 4.0;
targetHum = 35 + Math.floor(Math.random() * 20);
targetCo2 = 380 + Math.floor(Math.random() * 100);
let calibProgress = Math.min((timestamp - stateTimer) / 3500 * 100, 100);
if (progressFill) progressFill.style.width = `${calibProgress}%`;
if (timestamp - stateTimer > 3500) {
state = 'IDLE';
stateTimer = 0;
stage.classList.remove('is-calibrating');
if (statusEl) statusEl.textContent = "OPTIMAL";
targetAqi = 38;
targetTemp = 22.2;
targetHum = 44;
targetCo2 = 405;
}
}
}
animationFrameId = requestAnimationFrame(fp_real_estate_smart_home_sensor_ui_loop);
}
trigger.addEventListener('click', () => {
if (state !== 'IDLE') return;
state = 'CALIBRATING';
stateTimer = 0;
stage.classList.add('is-calibrating');
if (statusEl) statusEl.textContent = "CALIBRATING";
});
function fp_real_estate_smart_home_sensor_ui_handleVisibilityChange() {
if (document.visibilityState === 'hidden') {
if (animationFrameId) {
cancelAnimationFrame(animationFrameId);
animationFrameId = null;
lastUpdate = 0;
}
} else {
if (!animationFrameId) {
lastUpdate = performance.now();
if(state === 'CALIBRATING') stateTimer = performance.now();
animationFrameId = requestAnimationFrame(fp_real_estate_smart_home_sensor_ui_loop);
}
}
}
document.addEventListener('visibilitychange', fp_real_estate_smart_home_sensor_ui_handleVisibilityChange);
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
if (!animationFrameId && document.visibilityState === 'visible') {
lastUpdate = performance.now();
animationFrameId = requestAnimationFrame(fp_real_estate_smart_home_sensor_ui_loop);
}
} else {
if (animationFrameId) {
cancelAnimationFrame(animationFrameId);
animationFrameId = null;
}
}
});
}, { threshold: 0.1 });
observer.observe(root);
});
})();Description
Let us look at the PropTech IoT Sensor Pine Swiss Grid component. This free UI asset offers a modular card system specifically engineered for the commercial real estate and property technology sector. We built this entirely from scratch to handle real time building sensor data and smart facility metrics without the usual framework bloat. You get a sterile DOM structure that integrates cleanly into your existing property management or building automation architecture.
PropTech platforms process massive amounts of live telemetry and require absolute reliability during active monitoring. Heavy client side payloads completely ruin performance metrics when facility managers expect immediate visual feedback on HVAC or security sensors. This component solves that bottleneck directly. By strictly avoiding external libraries like Tailwind, Bootstrap, or GSAP, it keeps your bundle size minimal. This ensures rapid rendering for developers who need to present active hardware states to users on varied mobile or corporate network speeds.
Technical Architecture & Performance
-
Zero dependency codebase: Built strictly with pure HTML, CSS, and Vanilla JavaScript to keep your front end stack incredibly light.
-
Guaranteed performance metrics: Optimized to help your PropTech software maintain 90 plus PageSpeed scores and pass Core Web Vitals easily.
-
Safely scoped CSS: All styling is strictly scoped to prevent any class name collisions when you drop these cards into a massive monolithic repository.
-
Sterile DOM markup: Features clean HTML with absolutely no unnecessary wrappers or deep nesting trees to parse.
Design & Aesthetic Impact
The visual direction utilizes professional Pine Corporate tones combined with a structured Swiss Grid layout to establish an authoritative and reliable environment for the end user. This technical and highly readable aesthetic ensures visual clarity for operators analyzing complex environmental data and dense facility logs. For the interaction layer, we implemented custom expanding and contracting ring animations. These rhythmic visual transitions provide clear feedback for active sensor pings and live data polling without requiring heavy javascript animation scripts. The final result is a clean user interface that looks premium and functions perfectly for strict enterprise PropTech platforms.
Enterprise Use Cases
-
Smart building dashboards: Display active temperature sensors and live occupancy data using the card grid so facility managers can monitor building health quickly.
-
Commercial real estate portals: Build a fast rendering analytics page where property owners can organize and review massive datasets of energy consumption metrics within a lightweight interface.
-
IoT hardware control panels: Create a responsive control layout for security teams to track active access points and environmental alerts across multiple regional office locations.
Highlights & Benefits
Drop the code straight into your project without configuration.
Built strictly with pure CSS & Vanilla JS for maximum speed.
Constructed with strict adherence to WCAG accessibility standards for perfect contrast and screen-reader support.
Utilizes a highly optimized, clean DOM architecture ensuring lightning-fast render and maximum PageSpeed scores.

PropTech IoT Sensor – Pine Swiss Grid
Description
Let us look at the PropTech IoT Sensor Pine Swiss Grid component. This free UI asset offers a modular card system specifically engineered for the commercial real estate and property technology sector. We built this entirely from scratch to handle real time building sensor data and smart facility metrics without the usual framework bloat. You get a sterile DOM structure that integrates cleanly into your existing property management or building automation architecture.
PropTech platforms process massive amounts of live telemetry and require absolute reliability during active monitoring. Heavy client side payloads completely ruin performance metrics when facility managers expect immediate visual feedback on HVAC or security sensors. This component solves that bottleneck directly. By strictly avoiding external libraries like Tailwind, Bootstrap, or GSAP, it keeps your bundle size minimal. This ensures rapid rendering for developers who need to present active hardware states to users on varied mobile or corporate network speeds.
Technical Architecture & Performance
-
Zero dependency codebase: Built strictly with pure HTML, CSS, and Vanilla JavaScript to keep your front end stack incredibly light.
-
Guaranteed performance metrics: Optimized to help your PropTech software maintain 90 plus PageSpeed scores and pass Core Web Vitals easily.
-
Safely scoped CSS: All styling is strictly scoped to prevent any class name collisions when you drop these cards into a massive monolithic repository.
-
Sterile DOM markup: Features clean HTML with absolutely no unnecessary wrappers or deep nesting trees to parse.
Design & Aesthetic Impact
The visual direction utilizes professional Pine Corporate tones combined with a structured Swiss Grid layout to establish an authoritative and reliable environment for the end user. This technical and highly readable aesthetic ensures visual clarity for operators analyzing complex environmental data and dense facility logs. For the interaction layer, we implemented custom expanding and contracting ring animations. These rhythmic visual transitions provide clear feedback for active sensor pings and live data polling without requiring heavy javascript animation scripts. The final result is a clean user interface that looks premium and functions perfectly for strict enterprise PropTech platforms.
Enterprise Use Cases
-
Smart building dashboards: Display active temperature sensors and live occupancy data using the card grid so facility managers can monitor building health quickly.
-
Commercial real estate portals: Build a fast rendering analytics page where property owners can organize and review massive datasets of energy consumption metrics within a lightweight interface.
-
IoT hardware control panels: Create a responsive control layout for security teams to track active access points and environmental alerts across multiple regional office locations.



