Royale Stays

Royale Stays Hero
Royale Stays Logo
Blog

YOUR GUIDE TO SMARTER, HIGHER-EARNING PROPERTY MANAGEMENT

Category Archives: Blog

How to Get 5-Star Airbnb Reviews in Dubai
How to Get 5-Star Airbnb Rev...
How to Get 5-Star Airbnb Reviews in Dubai By Chris Veinbaums | Founder, Royale Stays Dubai | DTCM Licensed OperatorPublished: 12 April 2026 About our ...
Apr 12, 2026 , 0
Airbnb Cleaning Fee in Dubai: What to Charge and What It Covers
Airbnb Cleaning Fee in Dubai...
Airbnb Cleaning Fee in Dubai: What to Charge and What It Covers By Chris Veinbaums | Founder, Royale Stays Dubai | DTCM Licensed OperatorPublished: 11 ...
Apr 11, 2026 , 0
Can I Sublease My Apartment on Airbnb in Dubai?
Can I Sublease My Apartment ...
Can I Sublease My Apartment on Airbnb in Dubai? By Chris Veinbaums | Founder, Royale Stays Dubai | DTCM Licensed OperatorPublished: 10 April 2026 About ...
Apr 10, 2026 , 0
Dubai Short-Term Rental Market Report: Q1 2026
Dubai Short-Term Rental Mark...
Dubai Short-Term Rental Market Report: Q1 2026 By Chris Veinbaums | Founder, Royale Stays Dubai | DTCM Licensed OperatorPublished: 10th April 2026 About our data: ...
Apr 09, 2026 , 0
Dubai holiday home market recovery: data from the ceasefire’s first 24 hours
Dubai holiday home market re...
Dubai holiday home market recovery: data from the ceasefire’s first 24 hours By Chris Veinbaums | Founder, Royale Stays Dubai | DTCM Licensed OperatorPublished: April ...
Apr 09, 2026 , 0
DTCM Inspection Checklist Dubai 2026: Pass First Time
DTCM Inspection Checklist Du...
DTCM Inspection Checklist Dubai 2026: Pass First Time By Chris Veinbaums | Founder, Royale Stays Dubai | DTCM Licensed OperatorPublished: 9 April 2026 About our ...
Apr 09, 2026 , 0
  • Seven Palm Studio

  • Availability

<!-- ============================================================= ROYALE STAYS — FLOATING WIDGET WPCode Lite | Location: Footer | Run on: All pages BRAND TOKENS (extracted from live site 2026-06-23): Gold accent : #b89866 (164 occurrences, confirmed brand colour) Dark primary: #1e1e1e (heading colour, CONTAINER-SPEC) Cream text : #f5f0eb (warm cream on dark surfaces) White : #ffffff Fonts : 'Playfair Display' (headings), 'Montserrat' (labels) FORM: — "Submit Property" (2 entries, published) WP METEOR NOTE: This snippet contains only inline and tags. WP Meteor defers wp_enqueue_script() handles only — inline scripts in wp_footer are unaffected. No exclusion list change needed. TURNSTILE NOTE: Fluent Forms + Cloudflare Turnstile is already configured on this site (Lesson 132). Because the panel uses opacity/transform (not display:none), the form widget is in the DOM at page load and Turnstile renders correctly before the panel opens. ============================================================= --> /* ==================================================== ROYALE STAYS FLOATING WIDGET All selectors scoped to #rs-widget or #rs-earn-panel to prevent conflicts with Elementor page styles. ==================================================== */ /* ---------- Entrance animation ---------- */ @keyframes rsSlideUp { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: translateY(0); } } /* ---------- Button stack ---------- */ #rs-widget { position: fixed; bottom: 28px; right: 24px; z-index: 99992; display: flex; flex-direction: column; align-items: flex-end; gap: 10px; /* Concierge delay: widget appears 1.2s after page load */ animation: rsSlideUp 0.45s cubic-bezier(0.25, 0.46, 0.45, 0.94) 1.2s both; } /* ---------- Base button ---------- */ #rs-widget .rs-btn { display: inline-flex; align-items: center; gap: 9px; border-radius: 5px; cursor: pointer; font-family: 'Montserrat', sans-serif; font-size: 10.5px; font-weight: 500; letter-spacing: 0.09em; text-transform: uppercase; white-space: nowrap; text-decoration: none; line-height: 1; transition: transform 0.22s cubic-bezier(0.25, 0.46, 0.45, 0.94), box-shadow 0.22s ease, border-color 0.2s ease, background 0.2s ease; } #rs-widget .rs-btn svg { width: 15px; height: 15px; flex-shrink: 0; transition: transform 0.22s ease; } #rs-widget .rs-btn:hover { transform: translateY(-2px); } #rs-widget .rs-btn:hover svg { transform: translateX(1px); } /* ---------- Top button: Chat / WhatsApp (secondary) ---------- */ #rs-widget .rs-btn-chat { background: #ffffff; color: #1e1e1e; border: 1px solid rgba(184, 152, 102, 0.5); padding: 11px 18px; box-shadow: 0 2px 8px rgba(30, 30, 30, 0.07), 0 1px 3px rgba(30, 30, 30, 0.04); } #rs-widget .rs-btn-chat:hover { border-color: #b89866; background: #fdfaf6; box-shadow: 0 5px 20px rgba(30, 30, 30, 0.10), 0 2px 7px rgba(30, 30, 30, 0.06), 0 0 0 1px rgba(184, 152, 102, 0.12); } /* ---------- Bottom button: Earn estimate (primary) ---------- */ #rs-widget .rs-btn-earn { background: #1e1e1e; color: #f5f0eb; border: 1px solid #1e1e1e; padding: 13px 20px 13px 16px; box-shadow: 0 3px 12px rgba(30, 30, 30, 0.22), 0 1px 4px rgba(30, 30, 30, 0.14); } /* Gold stroke on the icon inside the dark button */ #rs-widget .rs-btn-earn svg { stroke: #b89866; } #rs-widget .rs-btn-earn:hover { background: #282828; border-color: #b89866; box-shadow: 0 6px 22px rgba(30, 30, 30, 0.28), 0 2px 8px rgba(30, 30, 30, 0.16), 0 0 0 1px rgba(184, 152, 102, 0.14); } /* ==================================================== BACKDROP OVERLAY ==================================================== */ #rs-overlay { display: none; position: fixed; inset: 0; background: rgba(0, 0, 0, 0.22); z-index: 99990; opacity: 0; transition: opacity 0.3s ease; } #rs-overlay.rs-open { opacity: 1; } /* ==================================================== EARN ESTIMATE PANEL ==================================================== */ #rs-earn-panel { position: fixed; bottom: 126px; right: 24px; width: 356px; background: #ffffff; border-radius: 8px; z-index: 99991; box-shadow: 0 -2px 24px rgba(30, 30, 30, 0.11), 0 4px 20px rgba(30, 30, 30, 0.07); /* Hidden state: offset + invisible */ opacity: 0; transform: translateY(10px); pointer-events: none; transition: opacity 0.28s ease, transform 0.28s cubic-bezier(0.25, 0.46, 0.45, 0.94); } /* Gold top accent bar (the "goldline treatment") */ #rs-earn-panel::before { content: ''; display: block; height: 3px; background: #b89866; border-radius: 8px 8px 0 0; } /* Visible state */ #rs-earn-panel.rs-open { opacity: 1; transform: translateY(0); pointer-events: auto; } /* ---------- Panel inner layout ---------- */ .rs-panel-inner { padding: 22px 24px 26px; } .rs-panel-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; margin-bottom: 0; } /* Small uppercase label above heading */ .rs-panel-eyebrow { font-family: 'Montserrat', sans-serif; font-size: 9px; font-weight: 600; letter-spacing: 0.15em; text-transform: uppercase; color: #b89866; margin: 0 0 7px; } /* Panel heading — Playfair Display for elegance */ .rs-panel-title { font-family: 'Playfair Display', serif; font-size: 19px; font-weight: 400; color: #1e1e1e; line-height: 1.35; margin: 0 0 3px; } .rs-panel-sub { font-family: 'Montserrat', sans-serif; font-size: 11.5px; color: #999; letter-spacing: 0.01em; margin: 0 0 18px; } /* Close button */ .rs-close-btn { background: none; border: none; cursor: pointer; padding: 2px; color: rgba(30, 30, 30, 0.32); flex-shrink: 0; margin-top: -1px; transition: color 0.18s ease; line-height: 1; } .rs-close-btn:hover { color: #1e1e1e; } /* ==================================================== FLUENT FORMS OVERRIDES INSIDE PANEL Scoped tightly to #rs-earn-panel to avoid affecting any other form on the page. ==================================================== */ /* Field labels */ #rs-earn-panel .ff-el-input--label label, #rs-earn-panel .ff-el-input--label span { font-family: 'Montserrat', sans-serif !important; font-size: 10px !important; font-weight: 600 !important; letter-spacing: 0.10em !important; text-transform: uppercase !important; color: #999 !important; margin-bottom: 2px !important; } /* Text inputs and selects */ #rs-earn-panel .ff-el-form-control { border: none !important; border-bottom: 1px solid rgba(30, 30, 30, 0.17) !important; border-radius: 0 !important; padding: 8px 0 !important; font-size: 14px !important; font-family: 'Montserrat', sans-serif !important; background: transparent !important; color: #1e1e1e !important; box-shadow: none !important; height: auto !important; transition: border-color 0.18s ease !important; } #rs-earn-panel .ff-el-form-control:focus { box-shadow: none !important; border-bottom-color: #b89866 !important; outline: none !important; } /* Textarea */ #rs-earn-panel textarea.ff-el-form-control { min-height: 64px !important; resize: none !important; } /* Group spacing */ #rs-earn-panel .ff-el-group { margin-bottom: 2px !important; } /* Submit button */ #rs-earn-panel .ff-btn-md, #rs-earn-panel .ff-btn { background: #1e1e1e !important; color: #f5f0eb !important; border: 1px solid #1e1e1e !important; border-radius: 4px !important; font-family: 'Montserrat', sans-serif !important; font-size: 10.5px !important; font-weight: 500 !important; letter-spacing: 0.09em !important; text-transform: uppercase !important; padding: 12px 24px !important; width: 100% !important; margin-top: 8px !important; transition: background 0.2s ease, border-color 0.2s ease, color 0.2s ease !important; } #rs-earn-panel .ff-btn-md:hover, #rs-earn-panel .ff-btn:hover { background: transparent !important; color: #1e1e1e !important; border-color: #b89866 !important; } /* Success message */ #rs-earn-panel .ff-message-success, #rs-earn-panel .ff-message-success p { font-family: 'Montserrat', sans-serif !important; font-size: 13px !important; color: #1e1e1e !important; text-align: center !important; padding: 16px 0 !important; border: none !important; background: transparent !important; } /* Error messages */ #rs-earn-panel .error, #rs-earn-panel .ff-errors-head { font-family: 'Montserrat', sans-serif !important; font-size: 10.5px !important; color: #c0392b !important; letter-spacing: 0.02em !important; margin-top: 2px !important; } /* Turnstile widget centering */ #rs-earn-panel .cf-turnstile { margin: 12px 0 !important; } /* ==================================================== MOBILE OVERRIDES ==================================================== */ @media (max-width: 768px) { /* Smaller button gap at the edge */ #rs-widget { bottom: 16px; right: 14px; gap: 8px; } #rs-widget .rs-btn { font-size: 10px; letter-spacing: 0.07em; } #rs-widget .rs-btn-chat { padding: 10px 14px; } #rs-widget .rs-btn-earn { padding: 11px 16px 11px 13px; } /* Panel becomes a full-width bottom sheet on mobile */ #rs-earn-panel { bottom: 0; right: 0; left: 0; width: 100%; border-radius: 12px 12px 0 0; /* On mobile: slide up from below, not fade */ opacity: 1; transform: translateY(100%); max-height: 88vh; overflow-y: auto; } #rs-earn-panel.rs-open { transform: translateY(0); opacity: 1; } /* Drag handle indicator (cosmetic) */ #rs-earn-panel::after { content: ''; display: block; position: absolute; top: 12px; left: 50%; transform: translateX(-50%); width: 32px; height: 3px; background: rgba(30, 30, 30, 0.13); border-radius: 2px; } .rs-panel-inner { padding: 28px 20px 36px; } .rs-panel-title { font-size: 18px; } } (function () { 'use strict'; var earnBtn = document.getElementById('rs-earn-btn'); var panel = document.getElementById('rs-earn-panel'); var overlay = document.getElementById('rs-overlay'); var closeBtn = document.getElementById('rs-close-btn'); var isOpen = false; function openPanel() { isOpen = true; /* Show overlay */ overlay.style.display = 'block'; requestAnimationFrame(function () { overlay.classList.add('rs-open'); }); /* Reveal panel */ panel.classList.add('rs-open'); panel.setAttribute('aria-hidden', 'false'); earnBtn.setAttribute('aria-expanded', 'true'); /* Lock body scroll on mobile only */ if (window.innerWidth <= 768) { document.body.style.overflow = 'hidden'; } /* Shift focus into panel for accessibility */ panel.setAttribute('tabindex', '-1'); panel.focus({ preventScroll: true }); } function closePanel() { isOpen = false; panel.classList.remove('rs-open'); panel.setAttribute('aria-hidden', 'true'); earnBtn.setAttribute('aria-expanded', 'false'); overlay.classList.remove('rs-open'); document.body.style.overflow = ''; /* Hide overlay after transition ends */ setTimeout(function () { if (!isOpen) { overlay.style.display = 'none'; } }, 310); earnBtn.focus(); } /* Earn button toggles panel */ earnBtn.addEventListener('click', function (e) { e.stopPropagation(); isOpen ? closePanel() : openPanel(); }); /* Close button */ closeBtn.addEventListener('click', closePanel); /* Click outside panel (on overlay) */ overlay.addEventListener('click', closePanel); /* Stop clicks inside panel from bubbling to overlay */ panel.addEventListener('click', function (e) { e.stopPropagation(); }); /* ESC key */ document.addEventListener('keydown', function (e) { if ((e.key === 'Escape' || e.key === 'Esc') && isOpen) { closePanel(); } }); }());