/* =========================================================================
   Marlon Ramos — static-build overrides on top of the compiled Realton CSS.

   The live site was a React SPA; this bundle is its frozen render, so anything
   the framework did at runtime has to be re-created here or in js/*.js: the
   AOS reveal state, the Swiper carousels, the Bootstrap offcanvas menu, the
   react-input-range / react-select filter widgets on /listings, and the
   header's transparent-over-hero behaviour.

   Everything this build adds is prefixed `mr-`.
   ========================================================================= */

/* ---- kill the template preloader (no React to hide it) ---- */
#preloader, .preloader, .preloader3 { display: none !important; }

/* ---- AOS is JS-driven; without its lib every [data-aos] element stays at
        opacity:0 and the page renders blank. Force them visible. ---- */
[data-aos] { opacity: 1 !important; transform: none !important; visibility: visible !important; }
.aos-init, .aos-animate { opacity: 1 !important; transform: none !important; }
.wow, .fadeInUp { visibility: visible !important; animation: none !important; opacity: 1 !important; }

/* =========================================================================
   Header.

   THE LIVE SITE RENDERED ITS NAVIGATION WHITE ON WHITE. The template paints a
   transparent header with white link text over the first section, which works
   on the sibling sites because theirs open with a dark photo or video hero.
   This site's first section (#hero) has no background colour and no image, so
   every link except the active one was invisible — only the 2px black text
   shadow hinted at them — and the LIGHT logo (white on transparent) vanished
   with them.

   So the header here is solid on every page: white bar, dark text, dark logo.
   js/shared.js adds .mr-solid, plus .mr-stick once the page scrolls.
   ========================================================================= */
header.header-nav {
  position: fixed; top: 0; left: 0; right: 0; z-index: 1030;
  background: #fff;
  backdrop-filter: none !important;
  transition: box-shadow .25s ease;
}
header.header-nav.mr-stick { box-shadow: 0 2px 20px rgba(0, 0, 0, .08); }

/* show the DARK logo, hide the light one meant for a photo hero */
header.header-nav .logos .logo1 { display: none; }
header.header-nav .logos .logo2 { display: inline-block; }

/* the frozen inline colours are white, for a hero that is not there */
header.header-nav .ace-responsive-menu a,
header.header-nav .ace-responsive-menu a span,
header.header-nav .login-info {
  color: #181a20 !important;
  text-shadow: none !important;
}
header.header-nav .ace-responsive-menu a:hover,
header.header-nav .ace-responsive-menu a:hover span { color: #eb6753 !important; }
.menuActive, header.header-nav .ace-responsive-menu a.menuActive,
header.header-nav .ace-responsive-menu a.menuActive span {
  text-decoration: none; color: #eb6753 !important;
}

/* the desktop menu was nudged -70px to sit under a wider logo lockup */
header.header-nav .ace-responsive-menu { margin-left: 0 !important; }

/* every page now starts below the fixed bar instead of under it */
.wrapper > .position-relative:nth-of-type(1) { padding-top: 90px; }
@media (max-width: 991px) {
  header.header-nav { display: none; }
  .wrapper > .position-relative:nth-of-type(1) { padding-top: 0; }
}

/* =========================================================================
   Home hero.

   The config asked for media beside the intro text but supplied a null
   video_link, so the right 52% of the hero was an empty box on the live site.
   It carries Marlon's own headshot here — the same photo the About page uses.
   ========================================================================= */
.mr-hero-media {
  position: absolute; top: 0; bottom: 0; right: 0; width: 46%;
  display: flex; align-items: center; justify-content: center;
  padding: 40px; z-index: 0; overflow: hidden;
}
.mr-hero-media img {
  width: 100%; max-width: 420px; height: auto;
  border-radius: 18px; box-shadow: 0 24px 60px rgba(17, 18, 117, .18);
}
.mr-hero-media-sm { display: flex; justify-content: center; }
.mr-hero-media-sm img {
  width: 78%; max-width: 320px; height: auto;
  border-radius: 16px; box-shadow: 0 16px 40px rgba(17, 18, 117, .18);
}

/* the hero headline is 70px from the config — too large below ~1200px */
@media (max-width: 1199px) {
  #hero h2 { font-size: 52px !important; }
}
@media (max-width: 575px) {
  #hero h2 { font-size: 38px !important; }
}
/* React nested a <p> inside a <p>, which the parser splits; keep the spacing sane */
#hero .paragraph > .text { margin: 0; }

/* =========================================================================
   Hero photograph (#hero-1).

   This section used to play a 382 MB shared video that no browser would
   autoplay anyway (the frozen <video> had `autoplay` and no `muted`). It is a
   photograph of downtown Los Angeles now, sitting in the same place the video
   did, under the same `.video-shade` scrim so the white hero text keeps its
   contrast.
   ========================================================================= */
.mr-hero-photo {
  position: absolute; top: 0; left: 0;
  width: 100%; height: 100%;
  object-fit: cover;
  /* the sun sits upper-left and the skyline lower-centre; favour the skyline
     when a tall viewport crops the frame */
  object-position: center 42%;
  z-index: 0;
}

/* The frozen scrim was a flat 50% black, which suited a dark video but flattens
   the sunrise out of this photograph. Darken where the text actually sits and
   let the warm edges through; the headline carries its own shadow so contrast
   does not depend on the scrim alone. */
#hero-1 .video-shade {
  background: radial-gradient(ellipse 70% 60% at 50% 50%,
              rgba(0, 0, 0, .55) 0%, rgba(0, 0, 0, .42) 55%, rgba(0, 0, 0, .28) 100%) !important;
}
#hero-1 .hero-title,
#hero-1 .hero-sub-title,
#hero-1 .hero-text { text-shadow: 0 2px 14px rgba(0, 0, 0, .55); }

/* =========================================================================
   "Who Am I?" collage.

   The template stacks three absolutely-positioned images. With this client's
   artwork the third one — the MARLON RAMOS wordmark — lands square on top of
   the Zillow "Top Agent" card, hiding his name, "Luxury Collective" and the
   membership line. The live site has the same overlap; it is not something the
   freeze introduced, but it hides real content, so the wordmark is nudged down
   and right to sit over the photo instead of the card.
   ========================================================================= */
@media (min-width: 768px) {
  #about-1 .img-box-3 { transform: translate(96px, 132px); }
}
@media (max-width: 767px) {
  /* on a phone the collage is a single column; let the wordmark sit under it */
  #about-1 .img-box-3 { position: static; margin-top: 18px; }
}

/* =========================================================================
   Count-up statistics. Frozen, every stat block read "0 +"; js/shared.js
   counts each one up to its real figure once it scrolls into view.
   ========================================================================= */
.funfact_one .timer span[data-count] { font-variant-numeric: tabular-nums; }

/* =========================================================================
   Carousels — the frozen Swiper markup driven by js/shared.js as a
   scroll-snap strip (the featured listings on the home page).
   ========================================================================= */
.mr-carousel { overflow: hidden !important; }
.mr-carousel .swiper-wrapper {
  display: flex !important;
  flex-wrap: nowrap !important;
  transform: none !important;
  transition: none !important;
  gap: 30px;
  height: auto !important;
  overflow-x: auto;
  overflow-y: hidden;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  padding-bottom: 6px;
  -ms-overflow-style: none;
  scrollbar-width: none;
}
.mr-carousel .swiper-wrapper::-webkit-scrollbar { display: none; }
.mr-carousel .swiper-slide {
  flex: 0 0 auto !important;
  width: 382px !important;
  max-width: 86vw;
  height: auto !important;
  margin: 0 !important;
  scroll-snap-align: start;
}
@media (max-width: 575px) {
  .mr-carousel .swiper-slide { width: 300px !important; }
  .mr-carousel .swiper-wrapper { gap: 18px; }
}
.swiper_button[disabled] { opacity: .35; cursor: default; }
.swiper_button { cursor: pointer; background: none; border: 0; }
[data-carousel-dots] .swiper-pagination-bullet { cursor: pointer; }

/* ---- partner strip: six logos, no Swiper, so lay them out as a wrapping row.
   The logos are transparent PNGs with DARK wordmarks and the section background
   is #181a20, so several of the six were effectively invisible on the live
   site. Each sits on a light plate here so all six actually read. ---- */
.mr-partners .swiper-wrapper {
  display: flex !important; flex-wrap: wrap; justify-content: center; align-items: center;
  gap: 16px; transform: none !important; height: auto !important;
}
.mr-partners .swiper-slide {
  flex: 0 0 auto !important; width: auto !important; margin: 0 !important;
}
.mr-partners .partner_item {
  display: flex; align-items: center; justify-content: center;
  width: 168px; height: 74px; padding: 14px 18px;
  background: #fff; border-radius: 10px;
}
.mr-partners .partner_item img {
  width: auto !important; max-width: 100%; max-height: 100%; margin: 0 !important;
}
@media (max-width: 575px) {
  .mr-partners .partner_item { width: 136px; height: 62px; padding: 10px 14px; }
}

/* ---- listing card covers ----
   Photos crop to a fixed band; the "no image" placeholder is a wide graphic,
   so cropping it blows the wordmark past the card edge — letterbox that one. */
.listing-style1 .list-thumb { overflow: hidden; }
.mr-cover { height: 300px; object-fit: cover; display: block; width: 100%; }
.mr-cover-empty { object-fit: contain; background: #f1f2f4; padding: 12px; }

/* ---- placeholder / empty + error states inside a carousel or grid ---- */
.mr-note { padding: 40px 0; text-align: center; color: #8a8f98; width: 100%; }
.mr-note a { color: #eb6753; }
.mr-skeleton {
  flex: 0 0 auto; width: 382px; max-width: 86vw; height: 430px; border-radius: 12px;
  background: linear-gradient(100deg, #f1f2f4 30%, #e6e8eb 50%, #f1f2f4 70%);
  background-size: 300% 100%; animation: mrShimmer 1.3s ease-in-out infinite;
}
@keyframes mrShimmer { 0% { background-position: 150% 0; } 100% { background-position: -150% 0; } }

/* =========================================================================
   Mobile menu — the frozen markup is a Bootstrap offcanvas with no BS JS.
   js/shared.js toggles .show and manages the backdrop.
   ========================================================================= */
.mobile_menu-canvas { max-width: 320px; width: 88vw; }
body.mr-menu-open { overflow: hidden; }
.mr-backdrop { position: fixed; inset: 0; z-index: 1040; background: rgba(0, 0, 0, .5); }
.mobilie_header_nav .menubar,
.mobile_menu-canvas .sidebar-close-icon { cursor: pointer; }
/* his email is 30 characters and ran off the edge of the panel */
.mobile_menu-canvas .contact-info h6 { font-size: 14px; word-break: break-word; }

/* =========================================================================
   Lead forms. Two of them: the contact form and the house-cleaning quote,
   which adds a select, an address and three room counts.
   ========================================================================= */
.form-note:empty { display: none; }
.form-note { display: block; margin-top: 14px; font-size: 15px; }
.mr-field { margin-bottom: 18px; }
.mr-field label { display: block; margin-bottom: 7px; font-size: 14px; font-weight: 500; }
.mr-input, .mr-select, .mr-textarea {
  width: 100%; border: 1px solid #e9e9e9; border-radius: 8px;
  padding: 0 16px; height: 52px; font-size: 15px;
  font-family: "DM Sans", sans-serif; color: #181a20; background-color: #fff;
}
.mr-textarea { height: auto; min-height: 120px; padding: 14px 16px; resize: vertical; }
.mr-input:focus, .mr-select:focus, .mr-textarea:focus { outline: none; border-color: #eb6753; }
.mr-select {
  appearance: none; -webkit-appearance: none; padding-right: 38px; cursor: pointer;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 20 20'%3E%3Cpath fill='%23808080' d='M4.5 7.5c.44-.45 1.05-.48 1.58 0L10 11.25l3.92-3.75c.53-.48 1.14-.45 1.58 0 .43.45.4 1.2 0 1.62-.41.42-4.7 4.5-4.7 4.5a1.1 1.1 0 0 1-1.58 0S5.03 9.54 4.62 9.12a1.15 1.15 0 0 1-.12-1.62z'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 12px center;
}
/* the quote form sits on the dark #181a20 panel */
.mr-form-dark label { color: #fff; }

/* =========================================================================
   /listings filter sidebar — real controls replacing react-input-range and
   react-select, styled to match the widgets they stand in for.
   ========================================================================= */
.mr-select-plain {
  appearance: none; -webkit-appearance: none;
  width: 100%; height: 50px; padding: 0 38px 0 16px;
  border: 1px solid #e9e9e9; border-radius: 8px; background-color: #fff;
  color: #181a20; font-size: 15px; font-family: "DM Sans", sans-serif; cursor: pointer;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 20 20'%3E%3Cpath fill='%23808080' d='M4.5 7.5c.44-.45 1.05-.48 1.58 0L10 11.25l3.92-3.75c.53-.48 1.14-.45 1.58 0 .43.45.4 1.2 0 1.62-.41.42-4.7 4.5-4.7 4.5a1.1 1.1 0 0 1-1.58 0S5.03 9.54 4.62 9.12a1.15 1.15 0 0 1-.12-1.62z'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 12px center;
}
.mr-select-plain:focus { outline: none; border-color: #181a20; }
.mr-select-sm { height: 40px; width: auto; min-width: 132px; padding-right: 34px; font-size: 14px; }

/* dual-thumb price range, standing in for react-input-range */
.mr-range { position: relative; height: 26px; margin: 18px 0 4px; }
.mr-range-track {
  position: absolute; top: 11px; left: 0; right: 0; height: 4px;
  background: #e9e9e9; border-radius: 4px;
}
.mr-range-fill { position: absolute; top: 0; bottom: 0; background: #eb6753; border-radius: 4px; }
.mr-range input[type="range"] {
  position: absolute; top: 0; left: 0; width: 100%; height: 26px; margin: 0;
  background: none; pointer-events: none; -webkit-appearance: none; appearance: none;
}
.mr-range input[type="range"]:focus { outline: none; }
.mr-range input[type="range"]::-webkit-slider-thumb {
  -webkit-appearance: none; pointer-events: auto; cursor: grab;
  width: 18px; height: 18px; border-radius: 50%;
  background: #fff; border: 2px solid #eb6753; box-shadow: 0 1px 4px rgba(0, 0, 0, .2);
}
.mr-range input[type="range"]::-moz-range-thumb {
  pointer-events: auto; cursor: grab;
  width: 18px; height: 18px; border-radius: 50%;
  background: #fff; border: 2px solid #eb6753; box-shadow: 0 1px 4px rgba(0, 0, 0, .2);
}
.mr-range input[type="range"]::-moz-range-track { background: none; }

.reset-button {
  border: 0; background: none; padding: 0; color: #181a20;
  font-family: "DM Sans", sans-serif; font-size: 15px; cursor: pointer;
}
.reset-button .flaticon-turn-back { margin-right: 8px; }

/* grid / list layout toggle in the results toolbar */
.mr-layout {
  border: 1px solid #e9e9e9; background: #fff; color: #6b7280;
  border-radius: 8px; padding: 7px 14px; margin-left: 8px; font-size: 14px; cursor: pointer;
}
.mr-layout.active { background: #eb6753; border-color: #eb6753; color: #fff; }

/* list view: card goes side-by-side */
[data-listings-grid].mr-list > div { width: 100%; flex: 0 0 100%; max-width: 100%; }
@media (min-width: 768px) {
  [data-listings-grid].mr-list .listing-style1 { display: flex; align-items: stretch; }
  [data-listings-grid].mr-list .listing-style1 > a { flex: 0 0 300px; }
  [data-listings-grid].mr-list .list-thumb img { height: 100% !important; min-height: 210px; }
  [data-listings-grid].mr-list .list-content { flex: 1 1 auto; }
}

/* pager */
.mr-page {
  min-width: 42px; height: 42px; padding: 0 12px; border: 1px solid #e6e8ec; background: #fff;
  border-radius: 8px; color: #181a20; font-weight: 500; cursor: pointer; transition: .2s;
}
.mr-page:hover:not(:disabled) { border-color: #eb6753; color: #eb6753; }
.mr-page.active { background: #eb6753; border-color: #eb6753; color: #fff; }
.mr-page:disabled { opacity: .45; cursor: default; }
[data-listings-pager] ul { list-style: none; padding: 0; margin: 0; gap: 6px; }

/* =========================================================================
   Videos page. Each block embeds one YouTube video; the frozen markup kept
   the template's fixed-height boxes, which letterboxed the vertical Shorts.
   ========================================================================= */
.mr-video { position: relative; width: 100%; border-radius: 12px; overflow: hidden; background: #000; }
.mr-video iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
.mr-video-wide { padding-top: 56.25%; }
.mr-video-short { padding-top: 177.78%; max-width: 380px; margin-inline: auto; }

/* =========================================================================
   Legal pages. All three rendered COMPLETELY BLANK on the live site; they are
   authored in this bundle.
   ========================================================================= */
.mr-legal { background: #fff; border-radius: 12px; padding: 40px; box-shadow: 0 6px 24px rgba(24, 26, 32, .06); }
.mr-legal h1 { font-size: 34px; color: #181a20; margin-bottom: 6px; }
.mr-legal .mr-legal-updated { color: #6b7280; font-size: 14px; margin-bottom: 28px; }
.mr-legal h2 { font-size: 20px; color: #181a20; margin: 30px 0 10px; }
.mr-legal p, .mr-legal li { color: #3f4451; line-height: 1.75; }
.mr-legal ul { padding-left: 20px; }
.mr-legal li { margin-bottom: 8px; }
.mr-legal a { color: #eb6753; }
@media (max-width: 575px) {
  .mr-legal { padding: 24px; }
  .mr-legal h1 { font-size: 26px; }
}
