Qualité des photos : 6/10 · évaluée par IA
Ain Chock, Casablanca
4 400 000 MAD
31 206 MAD/m²
Positionnement prix
Prix atypique pour le quartier — vérifiez la surface annoncée
Médian Ain Chock : 15 000 MAD/m² · 115 annonces analysées
Rendement locatif estimé ≈ 2,7 % brut/an · Où investir à Casablanca ?
Voir les prix du quartierCaractéristiques
Annonces similaires
4 400 000 MAD
31 206 MAD/m²
Surface
141 m²
Chambres
4
Année de construction
2006
Description
Maison Familiale & Commerciale à Vendre – Opportunité Unique à Hay Inara 2 ! - Spacieuse maison R2 avec grande terrasse et possibilité d’extension – 2 garages – 141 m² de superficie terrain - Localisation : Quartier prisé de Hay Inara 2, Boulevard Al Quds, Casablanca - Prix : 4 400 000 Dhs (Négociable – Une véritable opportunité à saisir !) --Points forts du bien : - Superficie généreuse de 141 m² avec 2 niveaux terrasse et potentiel d’extension - Possibilité de construire un 3ème étage, augmentant la surface habitable - 2 grands garages, parfaits pour une activité commerciale ou un investissement locatif - Double façade offrant une excellente luminosité et ventilation naturelle - Potentiel d’aménagement : le grand garage peut être transformé en appartement indépendant - Grande terrasse avec vue dégagée, un espace idéal pour se détendre ---Description détaillée du bien : --Rez-de-chaussée : - 2 garages spacieux, parfaits pour une activité commerciale ou un investissement locatif - 1 toilette - Possibilité d’aménager le grand garage en appartement indépendant -- 1er étage : - 2 salons modernes et lumineux, idéaux pour recevoir vos proches - 2 chambres spacieuses, offrant un confort optimal - 1 salle de bain - Grande terrasse de 35 m², parfaite pour profiter de l'extérieur --2ème étage : - 1 grand salon moderne, offrant un espace de vie convivial - 2 chambres confortables - 1 salle de bain - 1 cuisine équipée - 1 balcon --3ème étage (terrasse) : - Grande terrasse (Stah) avec vue panoramique, idéale pour les soirées en plein air - Espace cuisine de 35 m², parfait pour des repas en terrasse - 1 salle de bain - Possibilité d’ajouter un 3ème étage, pour encore plus d’espace et de rentabilité ---Pourquoi cette maison est un excellent investissement ? : - Idéale pour une grande famille ou un investisseur à la recherche d’un bien à fort potentiel - Très bon voisinage et un environnement familial agréable, offrant un cadre de vie paisible et sécurisé - Possibilités multiples : habitation principale, investissement locatif, ou espace commercial - Équilibre parfait entre modernité et charme traditionnel marocain (absence de carrelage mural dans les salons et chambres) - Quartier dynamique et en pleine expansion, parfait pour un investissement sûr - Proximité immédiate des commodités essentielles : - Écoles, commerces, mosquée, hammam…; - Polyclinique CNSS (5 min à pied), McDonald's; - Accès rapide aux transports en commun : BusWay & TramWay Ne manquez pas cette opportunité ! Contactez-nous dès aujourd’hui pour organiser une visite et découvrir tout le potentiel de cette maison exceptionnelle. document.addEventListener(`DOMContentLoaded`,function(){let e=document.getElementById(`voir-plus`),t=document.querySelector(`.label`);e.addEventListener(`change`,function(){e.checked||t.scrollIntoView({behavior:`smooth`})})}); Annonce par le propriétaire Localisation Normal Satellite Information financières --> --> Annonces Similaires Il y a 16 jours 2 750 000 DH 4 Ch 2 sdb 100 m² Maison à vendre Casablanca -Inara Annonce par : Sélection agenz Il y a 17 jours 3 600 000 DH 4 Ch 3 sdb Maison à vendre Casablanca -Sidi Maarouf Annonce par : Sélection agenz Il y a 17 jours 3 100 000 DH 4 Ch 3 sdb Maison à vendre Casablanca -Sidi Maarouf Annonce par : Sélection agenz (function(){const id = ""; const similarLen = 3; 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; recompute(); currentIndex = Math.max(0, Math.min(index, maxIndex)); /* The container has `scroll-snap-type: x mandatory` and the cards * default to start-aligned snap. If we just scrollTo(maxScroll) * the browser snaps back to the PREVIOUS card's left edge when * maxScroll isn't an exact multiple of `step` — that's what * leaves the last card partially hidden behind the gap. * * For the final index, pin the LAST card's inline-end edge to * the container's inline-end edge via scrollIntoView. That * overrides snap proximity and guarantees full visibility of * the last card, no matter the gap or padding-right. */ if ( currentIndex >= maxIndex && maxIndex > 0 && carousel.children.length > 0 ) { const lastCard = carousel.children[carousel.children.length - 1]; if (lastCard instanceof HTMLElement) { lastCard.scrollIntoView({ inline: isRTL ? "start" : "end", block: "nearest", behavior: smooth ? "smooth" : "auto", }); } else { carousel.scrollTo({ left: maxScroll, behavior: smooth ? "smooth" : "auto", }); } } else { const scrollLeft = Math.min(currentIndex * step, maxScroll); carousel.scrollTo({ left: scrollLeft, behavior: smooth ? "smooth" : "auto", }); } updateIndicators(); prevButtons.forEach((btn) => { btn.style.display = currentIndex > 0 ? 'flex' : 'none'; }); // Hide next button when there are no more cards to scroll to. nextButtons.forEach((btn) => { btn.style.display = currentIndex { if (!carousel) return; // In RTL, browsers report scrollLeft as a negative value (or inverted), // s
Localisation
Position approximative