Qualité dyal tswirat : 8/10 · m9iyma b IA
Les Princesses, Casablanca
18 000 MAD/mois
167 MAD/m²
Positionnement dyal taman
Taman machi 3adi f had l'7ouma — verifié l'mssa7a
L'wasat Les Princesses : 118 MAD/m² · 132 annonces m7allila
Chouf l'as3ar dyal l'7oumaCaractéristiques
Annonces mchabhin
18 000 MAD/mois
167 MAD/m²
Surface
108 m²
Biout
3
Description
Situé dans le prestigieux Quartier des Hôpitaux à Casablanca, ce magnifique appartement meublé offre un cadre de vie confortable, lumineux et raffiné, idéal pour une famille ou des expatriés. Il se compose de : 3 chambres spacieuses Un salon lumineux Une grande terrasse aménagée Une cuisine entièrement équipée Salle(s) de bain moderne(s) Nombreux rangements Appartement entièrement meublé avec goût Bénéficiant d'une excellente luminosité et d'un environnement calme, ce bien est situé à proximité immédiate des commerces, écoles, restaurants et principaux axes de circulation. Loyer : 18 000 DH/mois Honoraires d'agence : 1 mois de loyer Pour plus d'informations ou pour organiser une visite, n'hésitez pas à nous contacter. document.addEventListener(`DOMContentLoaded`,function(){let e=document.getElementById(`voir-plus`),t=document.querySelector(`.label`);e.addEventListener(`change`,function(){e.checked||t.scrollIntoView({behavior:`smooth`})})}); proposée par : Cantarel Immobilier Agence immobilière à Casablanca Information financières --> --> Annonces Similaires Il y a 3 jours 10 000 DH / mois 3 Ch 1 sdb 108 m² Appartement à louer Casablanca -Franceville Annonce par : Cantarel Immobilier Il y a 3 jours 15 000 DH / mois 3 Ch 2 sdb 160 m² Appartement à louer Casablanca -Franceville Annonce par : Cantarel Immobilier Il y a 3 jours 17 000 DH / mois 3 Ch 3 sdb 169 m² Appartement à louer Casablanca -Franceville Annonce par : Cantarel Immobilier Il y a 15 jours 12 800 DH / mois 3 Ch 2 sdb 165 m² Appartement à louer Casablanca -Les princesses Annonce par : Sélection agenz (function(){const id = ""; const similarLen = 4; document.addEventListener("DOMContentLoaded", function () { const carousel = document.getElementById(`Cards-Container${id}`); const arrows = document.getElementById(`arrowsId${id}`); const indicators = document.getElementById(`indicators${id}`); // const prevStroke = document.getElementById(`prev-stroke${id}`); const nextButtons = document.querySelectorAll(`.next-btn${id}`); const prevButtons = document.querySelectorAll(`.prev-btn${id}`); if (!carousel) return; /* Card #4103 — measure the real card "step" (card width + gap) * by reading the two first children's offsetLeft. Falls back to * the first child's offsetWidth if there's only one card. This is * what makes the arrow navigation actually land on card edges * instead of being off by the gap. */ let currentIndex = 0; const firstCard = carousel.firstElementChild; const cardWidth = firstCard instanceof HTMLElement ? firstCard.offsetWidth || 320 : 320; const measureStep = () => { const first = carousel.children[0]; const second = carousel.children[1]; if (!first || !(first instanceof HTMLElement)) return cardWidth; if (second && second instanceof HTMLElement) { const delta = second.offsetLeft - first.offsetLeft; if (delta > 0) return delta; } return first.offsetWidth || cardWidth; }; let step = measureStep(); /* maxScroll is the true end of the scroll container. The card- * counted maxIndex is derived from it so the last "next" click * lands at scrollLeft = maxScroll and the final card sits fully * inside the viewport, no partial visibility. */ const getMaxScroll = () => Math.max(0, carousel.scrollWidth - carousel.clientWidth); let maxScroll = getMaxScroll(); let maxIndex = step > 0 ? Math.ceil(maxScroll / step) : 0; const maxDots = 5; const isRTL = getComputedStyle(carousel).direction === "rtl"; const recompute = () => { step = measureStep(); maxScroll = getMaxScroll(); maxIndex = step > 0 ? Math.ceil(maxScroll / step) : 0; }; const updateArrowsVisibility = () => { if (!arrows || !carousel) return; arrows.style.visibility = maxScroll > 0 ? "visible" : "hidden"; }; /* Dots window over the VALID scroll positions [0, maxIndex], * not over similarLen. Showing more dots than reachable positions * was the source of the "active dot stuck on an earlier position" * bug for cards = N where N - visibleCards maxDots and there's more content beyond an edge, * the dots closest to that edge shrink (1.0 → 0.7 → 0.5) so the * user gets a visual "there's more in this direction" cue without * the dot strip itself growing. */ const updateIndicators = () => { if (!indicators) return; const dots = indicators.querySelectorAll(".dot-indicator"); const pageCount = maxIndex + 1; // number of valid scroll positions let startDot = 0; if (pageCount > maxDots) { const half = Math.floor(maxDots / 2); if (currentIndex = pageCount - half - 1) { startDot = pageCount - maxDots; } else { startDot = currentIndex - half; } } const endDot = startDot + maxDots - 1; const overflowsAtStart = pageCount > maxDots && startDot > 0; const overflowsAtEnd = pageCount > maxDots && endDot { const actualIndex = startDot + dotPosition; const isVisible = actualIndex { if (!carousel) return; recomput
Localisation
Position ta9ribiya
12 900 MAD/mois
Appartement · 80 m² · 2 biout · Étage 2/5
Palmier (Maarif), Casablancahadi 53 ayam