PropTech VR Loader – Emerald Glass
<div class="fp-real-estate-vr-tour-loading-ui">
<div class="fp-real-estate-vr-tour-loading-ui-stage">
<div class="fp-real-estate-vr-tour-loading-ui-bg-orb"></div>
<div class="fp-real-estate-vr-tour-loading-ui-bg-orb fp-real-estate-vr-tour-loading-ui-bg-orb-2"></div>
<div class="fp-real-estate-vr-tour-loading-ui-glass" id="fp-real-estate-vr-tour-loading-ui-glass-panel">
<div class="fp-real-estate-vr-tour-loading-ui-rings-container">
<div class="fp-real-estate-vr-tour-loading-ui-ring"></div>
<div class="fp-real-estate-vr-tour-loading-ui-ring"></div>
<div class="fp-real-estate-vr-tour-loading-ui-ring"></div>
<div class="fp-real-estate-vr-tour-loading-ui-core" id="fp-real-estate-vr-tour-loading-ui-core">
<svg class="fp-real-estate-vr-tour-loading-ui-icon" viewBox="0 0 24 24">
<path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path>
<polyline points="9 22 9 12 15 12 15 22"></polyline>
</svg>
</div>
</div>
<div class="fp-real-estate-vr-tour-loading-ui-text-wrap">
<div class="fp-real-estate-vr-tour-loading-ui-title" id="fp-real-estate-vr-tour-loading-ui-status-text">INITIALIZING VR</div>
<div class="fp-real-estate-vr-tour-loading-ui-subtitle">The Emerald Penthouse</div>
<div class="fp-real-estate-vr-tour-loading-ui-progress-container">
<div class="fp-real-estate-vr-tour-loading-ui-progress-bar" id="fp-real-estate-vr-tour-loading-ui-bar"></div>
</div>
<div class="fp-real-estate-vr-tour-loading-ui-percentage" id="fp-real-estate-vr-tour-loading-ui-pct">0%</div>
</div>
</div>
</div>
</div>.fp-real-estate-vr-tour-loading-ui {
/* Layout Variables */
--fp-container-width: 100%;
--fp-max-width: 500px;
--fp-aspect-ratio: 1 / 1;
/* Semantic Color Variables - Emerald Wealth */
--fp-primary-color: #F8F7F4;
--fp-secondary-color: #EBE8E0;
--fp-text-color: #111827;
--fp-muted-color: #6B7280;
--fp-soft-color: rgba(4, 120, 87, 0.08);
--fp-accent-color: #047857;
--fp-info-color: #10B981;
--fp-warning-color: #D4AF37;
--fp-danger-color: #DC2626;
--fp-background-color: transparent;
width: var(--fp-container-width);
max-width: var(--fp-max-width);
margin: 0 auto;
background: var(--fp-background-color);
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
}
/* Main Stage */
.fp-real-estate-vr-tour-loading-ui-stage {
aspect-ratio: var(--fp-aspect-ratio);
width: 100%;
background-color: var(--fp-primary-color);
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
position: relative;
border-radius: 24px;
box-shadow: inset 0 0 60px rgba(0,0,0,0.03);
}
/* Layer 1: Base Breathing Background Orbs */
.fp-real-estate-vr-tour-loading-ui-bg-orb {
position: absolute;
width: 60%;
aspect-ratio: 1 / 1;
background: radial-gradient(circle, var(--fp-info-color) 0%, transparent 60%);
opacity: 0.15;
border-radius: 50%;
filter: blur(40px);
animation: fp-real-estate-vr-tour-loading-ui-breathe 8s ease-in-out infinite alternate;
z-index: 1;
}
.fp-real-estate-vr-tour-loading-ui-bg-orb-2 {
width: 50%;
background: radial-gradient(circle, var(--fp-warning-color) 0%, transparent 60%);
opacity: 0.1;
top: 10%;
left: 60%;
animation: fp-real-estate-vr-tour-loading-ui-breathe 6s ease-in-out infinite alternate-reverse;
}
/* Glassmorphism Panel */
.fp-real-estate-vr-tour-loading-ui-glass {
position: relative;
z-index: 2;
width: 80%;
height: 80%;
background: rgba(255, 255, 255, 0.4);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border: 1px solid rgba(255, 255, 255, 0.8);
border-radius: 32px;
box-shadow: 0 10px 40px rgba(4, 120, 87, 0.05), inset 0 0 0 1px rgba(255, 255, 255, 0.5);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 8%;
box-sizing: border-box;
transition: box-shadow 0.3s ease, border-color 0.3s ease;
}
/* Layer 2: Expanding Rings */
.fp-real-estate-vr-tour-loading-ui-rings-container {
position: relative;
width: 120px;
height: 120px;
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 32px;
}
.fp-real-estate-vr-tour-loading-ui-ring {
position: absolute;
border: 2px solid var(--fp-accent-color);
border-radius: 50%;
opacity: 0;
animation: fp-real-estate-vr-tour-loading-ui-expand 3s cubic-bezier(0.215, 0.610, 0.355, 1) infinite;
}
.fp-real-estate-vr-tour-loading-ui-ring:nth-child(1) { animation-delay: 0s; }
.fp-real-estate-vr-tour-loading-ui-ring:nth-child(2) { animation-delay: 1s; }
.fp-real-estate-vr-tour-loading-ui-ring:nth-child(3) { animation-delay: 2s; }
/* Core Element */
.fp-real-estate-vr-tour-loading-ui-core {
position: relative;
z-index: 3;
width: 56px;
height: 56px;
background: var(--fp-primary-color);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4px 12px rgba(4, 120, 87, 0.15);
border: 1px solid var(--fp-secondary-color);
}
.fp-real-estate-vr-tour-loading-ui-icon {
width: 24px;
height: 24px;
fill: none;
stroke: var(--fp-accent-color);
stroke-width: 2;
stroke-linecap: round;
stroke-linejoin: round;
}
/* Typography & UI */
.fp-real-estate-vr-tour-loading-ui-text-wrap {
text-align: center;
width: 100%;
}
.fp-real-estate-vr-tour-loading-ui-title {
font-size: 11px;
font-weight: 700;
letter-spacing: 3px;
text-transform: uppercase;
color: var(--fp-accent-color);
margin-bottom: 8px;
}
.fp-real-estate-vr-tour-loading-ui-subtitle {
font-size: 18px;
font-weight: 300;
color: var(--fp-text-color);
margin-bottom: 32px;
line-height: 1.3;
}
.fp-real-estate-vr-tour-loading-ui-progress-container {
width: 100%;
height: 4px;
background: rgba(4, 120, 87, 0.1);
border-radius: 2px;
overflow: hidden;
margin-bottom: 12px;
position: relative;
}
.fp-real-estate-vr-tour-loading-ui-progress-bar {
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 0%;
background: var(--fp-accent-color);
border-radius: 2px;
transition: width 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}
.fp-real-estate-vr-tour-loading-ui-percentage {
font-size: 13px;
font-weight: 600;
color: var(--fp-muted-color);
font-family: 'Courier New', Courier, monospace;
transition: color 0.2s ease;
}
/* Animations */
@keyframes fp-real-estate-vr-tour-loading-ui-breathe {
0% { transform: scale(0.8) translate(-10%, -10%); opacity: 0.1; }
100% { transform: scale(1.2) translate(10%, 10%); opacity: 0.2; }
}
@keyframes fp-real-estate-vr-tour-loading-ui-expand {
0% { width: 40px; height: 40px; opacity: 0; border-width: 2px; }
5% { opacity: 1; }
100% { width: 120px; height: 120px; opacity: 0; border-width: 0px; }
}
/* Responsive */
@media (max-width: 480px) {
.fp-real-estate-vr-tour-loading-ui-glass {
width: 90%;
padding: 10%;
}
.fp-real-estate-vr-tour-loading-ui-subtitle {
font-size: 16px;
}
}document.querySelectorAll('.fp-real-estate-vr-tour-loading-ui').forEach(root => {
const bar = root.querySelector('#fp-real-estate-vr-tour-loading-ui-bar');
const pctText = root.querySelector('#fp-real-estate-vr-tour-loading-ui-pct');
const glassPanel = root.querySelector('#fp-real-estate-vr-tour-loading-ui-glass-panel');
const statusText = root.querySelector('#fp-real-estate-vr-tour-loading-ui-status-text');
const core = root.querySelector('#fp-real-estate-vr-tour-loading-ui-core');
let reqId;
let isVisible = true;
let lastTime = 0;
let progress = 0;
let spikeTimer = 0;
const statuses = [
"INITIALIZING VR",
"LOADING TEXTURES",
"RENDERING LIGHTING",
"SYNCING SPATIAL AUDIO",
"FINALIZING ENVIRONMENT"
];
function animate(time) {
if (!lastTime) lastTime = time;
const dt = time - lastTime;
lastTime = time;
spikeTimer += dt;
if (progress < 100) {
progress += (dt * 0.005);
}
if (spikeTimer > 800) {
if (Math.random() > 0.5 && progress < 90) {
const jump = Math.random() * 8;
progress += jump;
if (glassPanel) {
glassPanel.style.boxShadow = '0 10px 50px rgba(4, 120, 87, 0.2), inset 0 0 0 1px rgba(16, 185, 129, 0.8)';
glassPanel.style.borderColor = 'var(--fp-info-color)';
}
if (pctText) pctText.style.color = 'var(--fp-accent-color)';
if (core) core.style.transform = 'scale(1.1)';
const statusIndex = Math.floor((progress / 100) * statuses.length);
if (statusText && statuses[Math.min(statusIndex, statuses.length - 1)]) {
statusText.textContent = statuses[Math.min(statusIndex, statuses.length - 1)];
}
setTimeout(() => {
if (!isVisible) return;
if (glassPanel) {
glassPanel.style.boxShadow = '0 10px 40px rgba(4, 120, 87, 0.05), inset 0 0 0 1px rgba(255, 255, 255, 0.5)';
glassPanel.style.borderColor = 'rgba(255, 255, 255, 0.8)';
}
if (pctText) pctText.style.color = 'var(--fp-muted-color)';
if (core) core.style.transform = 'scale(1)';
}, 300);
}
spikeTimer = 0;
}
if (progress > 100) progress = 100;
if (bar) bar.style.width = `${progress}%`;
if (pctText) pctText.textContent = `${Math.floor(progress)}%`;
if (progress >= 100) {
if (statusText) statusText.textContent = "ENVIRONMENT READY";
if (pctText) pctText.style.color = 'var(--fp-accent-color)';
setTimeout(() => {
if(progress >= 100) {
progress = 0;
if (statusText) statusText.textContent = statuses[0];
if (pctText) pctText.style.color = 'var(--fp-muted-color)';
}
}, 2000);
}
if (isVisible) {
reqId = requestAnimationFrame(animate);
}
}
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
isVisible = entry.isIntersecting;
if (isVisible) {
lastTime = performance.now();
if (!reqId) reqId = requestAnimationFrame(animate);
} else {
if (reqId) {
cancelAnimationFrame(reqId);
reqId = null;
}
}
});
});
observer.observe(root);
const handleVisibilityChange = () => {
if (document.visibilityState === "hidden") {
isVisible = false;
if (reqId) {
cancelAnimationFrame(reqId);
reqId = null;
}
} else {
isVisible = true;
lastTime = performance.now();
if (!reqId) reqId = requestAnimationFrame(animate);
}
};
document.addEventListener("visibilitychange", handleVisibilityChange);
const cleanupInterval = setInterval(() => {
if (!document.body.contains(root)) {
if (reqId) cancelAnimationFrame(reqId);
observer.disconnect();
document.removeEventListener("visibilitychange", handleVisibilityChange);
clearInterval(cleanupInterval);
}
}, 1000);
});Description
Let us look at the PropTech VR Loader Emerald Glass component. This free UI asset offers a modular card system specifically engineered for the high end real estate and property technology sector. We built this entirely from scratch to handle heavy 3D virtual tour initialization and property staging states without the usual framework bloat. You get a sterile DOM structure that integrates cleanly into your existing property listing or building management architecture.
Property platforms process massive amounts of high resolution imagery and spatial data daily. Heavy client side payloads completely ruin conversion metrics when potential buyers or investors expect immediate visual feedback on virtual walkthrough progress. 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 rendering states to users on varied mobile data 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 Emerald Wealth tones and a frosted glass layout to establish a sophisticated and trustworthy environment for the end user. This refined and highly readable aesthetic ensures visual clarity for users analyzing complex property metadata and dense investment logs. For the interaction layer, we implemented custom expanding and contracting ring animations. These rhythmic visual transitions provide clear feedback for active asset loading and spatial data preparation without requiring heavy javascript animation scripts. The final result is a clean user interface that looks premium and functions perfectly for strict enterprise property platforms.
Enterprise Use Cases
-
Virtual tour staging dashboards: Display active 3D environment loading progress and asset readiness using the card grid so brokerage leads can monitor site performance quickly.
-
Luxury property listing portals: Build a fast rendering initialization page where agents can organize and review massive datasets of high resolution unit renders within a lightweight interface.
-
Commercial asset management panels: Create a responsive control layout for portfolio managers to track active virtual tour engagement and loading efficiency across multiple regional property holdings.
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 VR Loader – Emerald Glass
Description
Let us look at the PropTech VR Loader Emerald Glass component. This free UI asset offers a modular card system specifically engineered for the high end real estate and property technology sector. We built this entirely from scratch to handle heavy 3D virtual tour initialization and property staging states without the usual framework bloat. You get a sterile DOM structure that integrates cleanly into your existing property listing or building management architecture.
Property platforms process massive amounts of high resolution imagery and spatial data daily. Heavy client side payloads completely ruin conversion metrics when potential buyers or investors expect immediate visual feedback on virtual walkthrough progress. 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 rendering states to users on varied mobile data 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 Emerald Wealth tones and a frosted glass layout to establish a sophisticated and trustworthy environment for the end user. This refined and highly readable aesthetic ensures visual clarity for users analyzing complex property metadata and dense investment logs. For the interaction layer, we implemented custom expanding and contracting ring animations. These rhythmic visual transitions provide clear feedback for active asset loading and spatial data preparation without requiring heavy javascript animation scripts. The final result is a clean user interface that looks premium and functions perfectly for strict enterprise property platforms.
Enterprise Use Cases
-
Virtual tour staging dashboards: Display active 3D environment loading progress and asset readiness using the card grid so brokerage leads can monitor site performance quickly.
-
Luxury property listing portals: Build a fast rendering initialization page where agents can organize and review massive datasets of high resolution unit renders within a lightweight interface.
-
Commercial asset management panels: Create a responsive control layout for portfolio managers to track active virtual tour engagement and loading efficiency across multiple regional property holdings.



