-
-
-
-
-
Watching
-
-
-
☑ Kim / CNN
— Blah blah blah
-
-
-
-
-
-
-
-
${headline}
-
The news here (generated)
-
-
-
-
-
-
-
-
-
-
${escapeHtml(cat)}
-
- ${metaLeft ? `${escapeHtml(metaLeft)}` : ""}
- ${metaRight ? `• ${escapeHtml(metaRight)}` : ""}
- • ${escapeHtml(relTime)}
-
-
-
-
-
-
-
- ${
- img
- ? `
})
`
- : `
`
- }
-
-
-
${escapeHtml(data?.headline || post?.title || "Untitled")}
-
-
- ${escapeHtml(data?.summary || post?.snippet || "")}
-
-
-
-
👁 12.4k
-
❤️ 1.3k
-
💬 248
-
📍 ${escapeHtml(post?.city || post?.location_name || "Nearby")}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- `;
-
- backdrop.appendChild(modalWrap);
- document.body.appendChild(backdrop);
-
- // animate in
- backdrop.style.opacity = "0";
- modalWrap.style.opacity = "0";
- modalWrap.style.transform = "scale(0.96)";
- requestAnimationFrame(() => {
- backdrop.style.transition = "opacity 260ms ease";
- modalWrap.style.transition = "opacity 260ms ease, transform 320ms cubic-bezier(.2,.9,.2,1)";
- backdrop.style.opacity = "1";
- modalWrap.style.opacity = "1";
- modalWrap.style.transform = "scale(1)";
- });
-
-
- // ✅ animate in (fade + scale)
- try {
- requestAnimationFrame(() => {
- backdrop.classList.add("sw-open");
- modalWrap.classList.add("sw-open");
- });
- } catch {}
-
- // outside click closes
- backdrop.addEventListener("click", () => closeCenteredOverlay(map));
- // inside click doesn't close
- modalWrap.addEventListener("click", (e) => e.stopPropagation());
-
- // close button
- const xbtn = modalWrap.querySelector(".sw-modal-x");
- if (xbtn) xbtn.addEventListener("click", () => closeCenteredOverlay(map));
-
- // ESC closes
- const onKey = (e) => {
- if (e.key === "Escape") closeCenteredOverlay(map);
- };
- window.addEventListener("keydown", onKey);
-
- // CTA open url
- const cta = modalWrap.querySelector(".sw-cta-primary");
- if (cta) {
- cta.addEventListener("click", () => {
- const u = cta.getAttribute("data-url") || "";
- if (!u) return;
- try { window.open(u, "_blank", "noopener,noreferrer"); } catch {}
- });
- }
-
- // still mount template full (hidden) so you can switch back later instantly
- let unmountFull = null;
- const fullWrap = modalWrap.querySelector(".sw-template-full-wrap");
- if (fullWrap) {
- const spec = getTemplateSpecForPost(post, "full");
- unmountFull = mountCard(fullWrap, spec, data, theme);
- }
-
- map.__swCenteredOverlay = {
- postId: post?.id,
- modalWrapRef: modalWrap,
- backdrop,
- onKey,
- unmountFull,
- unmountMini: null,
- };
-}
-
-export function createMarkerForPost(post, mapRef, markersRef, expandedElRef, theme = "blue") {
- const map = mapRef.current;
- if (!map) return;
-
- const lat =
- typeof post.lat === "number"
- ? post.lat
- : typeof post.latitude === "number"
- ? post.latitude
- : null;
-
- const lon =
- typeof post.lon === "number"
- ? post.lon
- : typeof post.lng === "number"
- ? post.lng
- : null;
-
- if (lat == null || lon == null) return;
-
- const lngLat = [lon, lat];
-
- const root = document.createElement("div");
- root.classList.add("sw-appear");
- requestAnimationFrame(() => root.classList.add("sw-appear-in"));
- root.className = "post-pin post-pin--compact";
- root.style.zIndex = "1";
-
- function unmountIfAny() {
- if (root.__swUnmount) {
- try { root.__swUnmount(); } catch {}
- root.__swUnmount = null;
- }
- }
-
- function renderCompact() {
- unmountIfAny();
- root.className = "post-pin post-pin--compact";
- root.style.zIndex = "1";
-
- root.innerHTML = `
-
-
-
-
${escapeHtml(cat)}
-
- ${metaLeft ? `${escapeHtml(metaLeft)}` : ""}
- ${metaRight ? `• ${escapeHtml(metaRight)}` : ""}
- • ${escapeHtml(relTime)}
-
-
-
-
-
-
-
- ${
- img
- ? `
})
`
- : `
`
- }
-
-
-
${escapeHtml(data?.headline || post?.title || "Untitled")}
-
-
- ${escapeHtml(data?.summary || post?.snippet || "")}
-
-
-
-
👁 12.4k
-
❤️ 1.3k
-
💬 248
-
📍 ${escapeHtml(post?.city || post?.location_name || "Nearby")}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- `;
-
- backdrop.appendChild(modalWrap);
- document.body.appendChild(backdrop);
-
- // animate in
- backdrop.style.opacity = "0";
- modalWrap.style.opacity = "0";
- modalWrap.style.transform = "scale(0.96)";
- requestAnimationFrame(() => {
- backdrop.style.transition = "opacity 260ms ease";
- modalWrap.style.transition = "opacity 260ms ease, transform 320ms cubic-bezier(.2,.9,.2,1)";
- backdrop.style.opacity = "1";
- modalWrap.style.opacity = "1";
- modalWrap.style.transform = "scale(1)";
- });
-
-
- // ✅ animate in (fade + scale)
- try {
- requestAnimationFrame(() => {
- backdrop.classList.add("sw-open");
- modalWrap.classList.add("sw-open");
- });
- } catch {}
-
- // outside click closes
- backdrop.addEventListener("click", () => closeCenteredOverlay(map));
- // inside click doesn't close
- modalWrap.addEventListener("click", (e) => e.stopPropagation());
-
- // close button
- const xbtn = modalWrap.querySelector(".sw-modal-x");
- if (xbtn) xbtn.addEventListener("click", () => closeCenteredOverlay(map));
-
- // ESC closes
- const onKey = (e) => {
- if (e.key === "Escape") closeCenteredOverlay(map);
- };
- window.addEventListener("keydown", onKey);
-
- // CTA open url
- const cta = modalWrap.querySelector(".sw-cta-primary");
- if (cta) {
- cta.addEventListener("click", () => {
- const u = cta.getAttribute("data-url") || "";
- if (!u) return;
- try { window.open(u, "_blank", "noopener,noreferrer"); } catch {}
- });
- }
-
- // still mount template full (hidden) so you can switch back later instantly
- let unmountFull = null;
- const fullWrap = modalWrap.querySelector(".sw-template-full-wrap");
- if (fullWrap) {
- const spec = getTemplateSpecForPost(post, "full");
- unmountFull = mountCard(fullWrap, spec, data, theme);
- }
-
- map.__swCenteredOverlay = {
- postId: post?.id,
- modalWrapRef: modalWrap,
- backdrop,
- onKey,
- unmountFull,
- unmountMini: null,
- };
-}
-
-export function createMarkerForPost(post, mapRef, markersRef, expandedElRef, theme = "blue") {
- const map = mapRef.current;
- if (!map) return;
-
- const lat =
- typeof post.lat === "number"
- ? post.lat
- : typeof post.latitude === "number"
- ? post.latitude
- : null;
-
- const lon =
- typeof post.lon === "number"
- ? post.lon
- : typeof post.lng === "number"
- ? post.lng
- : null;
-
- if (lat == null || lon == null) return;
-
- const lngLat = [lon, lat];
-
- const root = document.createElement("div");
- root.classList.add("sw-appear");
- requestAnimationFrame(() => root.classList.add("sw-appear-in"));
- root.className = "post-pin post-pin--compact";
- root.style.zIndex = "1";
-
- function unmountIfAny() {
- if (root.__swUnmount) {
- try { root.__swUnmount(); } catch {}
- root.__swUnmount = null;
- }
- }
-
- function renderCompact() {
- unmountIfAny();
- root.className = "post-pin post-pin--compact sw-appear sw-appear-in";
- root.style.zIndex = "1";
-
- root.innerHTML = `
-
-
-
-
- setKmFilter(Number(e.target.value))}
- />
-
-
-
- {loading &&
Chargement...
}
- {error &&
{error}
}
-
- {filtered.map((p) => (
-
- ))}
-
- {!loading && filtered.length === 0 &&
Aucun post dans ce rayon.
}
-
- );
-}
diff --git a/src/styles/filters.css.bak3 b/src/styles/filters.css.bak3
deleted file mode 100644
index 158c9da..0000000
--- a/src/styles/filters.css.bak3
+++ /dev/null
@@ -1,139 +0,0 @@
-.sw-icon-column { display:flex; flex-direction:column; gap:.55rem; align-items:center; }
-.sw-icon-btn { background:none; border:none; padding:0; cursor:pointer; display:flex; flex-direction:column; align-items:center; gap:.15rem; color:#e5e7eb; }
-.sw-icon-circle {
- width:54px; height:54px; border-radius:50%;
- background: rgba(15, 23, 42, 0.86);
- border: 1.5px solid rgba(148, 163, 184, 0.7);
- display:flex; align-items:center; justify-content:center;
- box-shadow:0 3px 10px rgba(0,0,0,.75);
- transition: transform .12s ease, box-shadow .12s ease, border-color .12s ease, background .12s ease;
-}
-.sw-icon-circle i { font-size:22px; }
-.sw-icon-label { font-size:.7rem; line-height:1; text-shadow:0 1px 2px rgba(0,0,0,.9); }
-.sw-icon-btn:hover .sw-icon-circle { transform: translateY(-1px); box-shadow:0 5px 14px rgba(0,0,0,.85); }
-.sw-icon-btn:active .sw-icon-circle { transform: scale(.96); box-shadow:0 2px 8px rgba(0,0,0,.9); }
-.sw-icon-active .sw-icon-circle { background: rgba(37, 99, 235, 0.82); border-color:#60a5fa; box-shadow:0 0 14px rgba(56,189,248,.95); }
-.sw-icon-active .sw-icon-label { color:#bfdbfe; font-weight:600; }
-
-.sw-bottom-row {
- display:flex; gap:.35rem; padding:.2rem .6rem;
- background: rgba(15, 23, 42, 0.94);
- border-radius: 999px;
- box-shadow: 0 4px 16px rgba(0,0,0,.85);
-}
-.sw-bottom-item { border:none; background:none; padding:0; cursor:pointer; display:flex; flex-direction:column; align-items:center; gap:.12rem; min-width:54px; }
-.sw-bottom-circle {
- width:40px; height:40px; border-radius:50%;
- background: rgba(15, 23, 42, 0.86);
- border: 1.5px solid rgba(148, 163, 184, 0.6);
- display:flex; align-items:center; justify-content:center;
- font-size:.78rem;
- box-shadow:0 3px 10px rgba(0,0,0,.75);
-}
-
-/* SW_SUBCAT_ICON_CSS */
-.sw-bottom-circle i{
- font-size: 18px;
- line-height: 1;
-}
-/* SW_SUBCAT_ICON_CSS:END */
-.sw-bottom-label { font-size:.65rem; color:#e5e7eb; text-shadow:0 1px 2px rgba(0,0,0,.9); }
-.sw-bottom-active .sw-bottom-circle { background: rgba(37, 99, 235, 0.82); border-color:#60a5fa; }
-.sw-bottom-active .sw-bottom-label { color:#bfdbfe; font-weight:600; }
-
-/* Floating subcategory dock (always above Sociowall, not coverable) */
-.sw-subcats-float{
- position: fixed;
- left: 50%;
- transform: translateX(-50%);
- bottom: calc(14px + var(--sw-wall-overlap, 0px));
- z-index: 300;
- pointer-events: none;
-}
-
-.sw-subcats-float .sw-bottom-row{
- pointer-events: auto;
- max-width: min(980px, 96vw);
- overflow-x: auto;
- -webkit-overflow-scrolling: touch;
-}
-
-.sw-subcats-float .sw-bottom-row::-webkit-scrollbar{ height: 0; }
-
-/* SW_FILTER_ICON_VISIBILITY:BEGIN */
-
-/* Make subcategory icons inherit color (so they show) */
-.sw-bottom-item{ color:#e5e7eb; }
-.sw-bottom-circle{ color:#e5e7eb; }
-.sw-bottom-circle i{
- color: currentColor;
- font-size: 20px; /* closer to right-side icons feel */
- line-height: 1;
- opacity: .96;
- filter: drop-shadow(0 1px 2px rgba(0,0,0,.65));
-}
-
-/* Active state: brighter icon/text like category buttons */
-.sw-bottom-active .sw-bottom-circle{
- color:#dbeafe;
- box-shadow:0 0 14px rgba(56,189,248,.60);
- border-color: rgba(96,165,250,.95);
-}
-.sw-bottom-active .sw-bottom-label{
- color:#bfdbfe;
- font-weight:700;
-}
-
-/* ---------- LIGHT THEME FIXES (readable) ---------- */
-body[data-theme="light"] .sw-bottom-row{
- background: rgba(255,255,255,0.95);
- border: 1px solid rgba(148,163,184,0.85);
- box-shadow: 0 6px 18px rgba(0,0,0,.12);
-}
-
-body[data-theme="light"] .sw-bottom-item{ color:#0B1220; }
-body[data-theme="light"] .sw-bottom-circle{
- background: rgba(255,255,255,0.92);
- border-color: rgba(148,163,184,0.85);
- box-shadow: 0 3px 10px rgba(0,0,0,.10);
- color:#0B1220;
-}
-body[data-theme="light"] .sw-bottom-label{
- color:#0B1220;
- text-shadow:none;
-}
-
-body[data-theme="light"] .sw-bottom-active .sw-bottom-circle{
- background: rgba(30,107,255,0.92);
- border-color: rgba(30,107,255,0.95);
- color:#ffffff;
- box-shadow:0 0 14px rgba(30,107,255,.35);
-}
-body[data-theme="light"] .sw-bottom-active .sw-bottom-label{
- color:#0B1220;
- font-weight:800;
-}
-
-/* Also fix right-side category buttons in light theme */
-body[data-theme="light"] .sw-icon-btn{ color:#0B1220; }
-body[data-theme="light"] .sw-icon-circle{
- background: rgba(255,255,255,0.92);
- border-color: rgba(148,163,184,0.85);
- box-shadow: 0 3px 10px rgba(0,0,0,.10);
-}
-body[data-theme="light"] .sw-icon-label{
- color:#0B1220;
- text-shadow:none;
-}
-body[data-theme="light"] .sw-icon-active .sw-icon-circle{
- background: rgba(30,107,255,0.92);
- border-color: rgba(30,107,255,0.95);
- box-shadow:0 0 14px rgba(30,107,255,.35);
-}
-body[data-theme="light"] .sw-icon-active .sw-icon-label{
- color:#0B1220;
- font-weight:800;
-}
-
-/* SW_FILTER_ICON_VISIBILITY:END */
-
diff --git a/src/styles/mapMarkers.css.bak b/src/styles/mapMarkers.css.bak
deleted file mode 100644
index 461e309..0000000
--- a/src/styles/mapMarkers.css.bak
+++ /dev/null
@@ -1,594 +0,0 @@
-.post-pin {
- position: relative;
- width: 0;
- height: 0;
- pointer-events: none;
- transform: translate3d(0, 0, 0);
-}
-.post-pin * { pointer-events: auto; box-sizing: border-box; }
-
-.post-pin--compact .post-pin-bubble {
- position: absolute;
- left: 0;
- top: 0;
- transform: translate(-50%, calc(-100% - 12px));
- display: inline-flex;
- align-items: center;
- padding: 4px 8px;
- border-radius: 999px;
- background: rgba(6, 40, 80, 0.95);
- border: 1px solid rgba(80, 180, 255, 0.9);
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.5);
- max-width: 180px;
-}
-.post-pin-dot { width:10px; height:10px; border-radius:999px; background:#ff8a00; margin-right:6px; flex-shrink:0; }
-.post-pin-text { color:#e8f5ff; font-size:11px; font-weight:500; max-width:160px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
-
-.post-pin--compact .post-pin-pointer-small {
- position: absolute;
- left: 0;
- top: 0;
- transform: translate(-50%, -100%);
- width: 0;
- height: 0;
- border-left: 7px solid transparent;
- border-right: 7px solid transparent;
- border-top: 9px solid rgba(6, 40, 80, 0.95);
- filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.6));
-}
-
-/* ===== Template mini wrapper (keeps pointer unchanged) ===== */
-.sw-template-mini-wrap{
- position: absolute;
- left: 0;
- top: 0;
- transform: translate(-50%, calc(-100% - 12px)) scale(0.62);
- transform-origin: bottom center;
- will-change: transform;
-}
-
-@media (max-width: 640px){
- .sw-template-mini-wrap{
- transform: translate(-50%, calc(-100% - 12px)) scale(0.52);
- }
-}
-
-/* =========================================================
- NEW: FIXED EXPANDED OVERLAY
- - Card is fixed near bottom (consistent)
- - Pointer follows marker (consistent)
- - No huge map recenter jumps
- ========================================================= */
-
-.sw-expanded-overlay-root{
- position:absolute;
- inset:0;
- z-index: 999999;
- pointer-events:none;
-}
-
-/* Card position: "dans le bas" (approx bottom zone), consistent on rotate */
-.sw-expanded-overlay-card{
- position:absolute;
- left: 50%;
- bottom: calc(12px + env(safe-area-inset-bottom) + var(--sw-below-overlap, 0px));
- transform: translateX(-50%);
- width: min(92vw, 420px);
- pointer-events: auto;
-}
-
-/* Make card fit mobile nicely */
-.sw-expanded-overlay-card .post-card{
- width: 100%;
- max-height: min(58vh, 640px);
- overflow:auto;
- -webkit-overflow-scrolling: touch;
- background: rgba(8, 20, 40, 0.97);
- border-radius: 14px;
- padding: 10px 12px;
- box-shadow: 0 10px 26px rgba(0, 0, 0, 0.85);
- border: 1px solid rgba(90, 190, 255, 0.9);
- color: #e8f5ff;
-}
-
-/* Pointer on the marker position */
-.sw-overlay-pointer{
- position:absolute;
- width:0; height:0;
- border-left: 10px solid transparent;
- border-right:10px solid transparent;
- border-top: 11px solid rgba(8, 20, 40, 0.97);
- filter: drop-shadow(0 2px 4px rgba(0,0,0,.8));
- transform: translate(-50%, -100%);
- left: 0;
- top: 0;
-}
-
-/* Simple line from marker to card */
-.sw-overlay-line{
- position:absolute;
- height: 2px;
- background: rgba(56,189,248,0.35);
- transform-origin: 0 50%;
- left: 0;
- top: 0;
- width: 0;
- filter: drop-shadow(0 1px 2px rgba(0,0,0,.6));
-}
-
-/* ===== Expanded layout pieces (same as before) ===== */
-.sw-expanded-shell{ padding: 10px 12px; }
-
-.sw-expanded-top{
- display:flex;
- gap:10px;
- align-items:flex-start;
-}
-
-.sw-expanded-left{ flex: 1; }
-
-.sw-expanded-right{
- width: 150px;
- min-width: 140px;
- display:flex;
- flex-direction:column;
- gap:8px;
- padding-top: 4px;
-}
-
-.sw-watch-title{
- font-size: 11px;
- font-weight: 800;
- color:#bfdbfe;
- text-transform: uppercase;
- letter-spacing: .06em;
-}
-
-.sw-watch-list{ display:flex; flex-direction:column; gap:6px; }
-
-.sw-watch-item{
- font-size: 11px;
- color:#e8f5ff;
- background: rgba(3, 14, 32, 0.75);
- border: 1px solid rgba(90, 190, 255, 0.35);
- border-radius: 10px;
- padding: 6px 8px;
-}
-
-.sw-watch-msg{
- opacity:.85;
- margin-top:2px;
- font-size: 10px;
- color:#c7e3ff;
-}
-
-.sw-add-feed-btn{
- margin-top: 2px;
- border: 1px solid rgba(148,163,184,.7);
- border-radius: 10px;
- padding: 8px 10px;
- background: rgba(5, 35, 70, 0.85);
- color:#e8f5ff;
- font-weight: 900;
- font-size: 11px;
- cursor:pointer;
-}
-
-.sw-news-generated{
- margin-top: 10px;
- padding: 8px 10px;
- border-radius: 12px;
- background: rgba(3, 14, 32, 0.75);
- border: 1px solid rgba(90, 190, 255, 0.35);
-}
-
-.sw-news-title{
- font-size: 12px;
- font-weight: 900;
- color:#e8f5ff;
- margin-bottom: 2px;
-}
-
-.sw-news-sub{ font-size: 10px; color:#9eb7ff; }
-
-.sw-actions-row{ margin-top: 8px; }
-
-.sw-livechat{ margin-top: 8px; }
-
-.sw-livechat-title{
- font-weight: 800;
- letter-spacing:.04em;
- margin-bottom: 6px;
-}
-
-.sw-livechat-body{
- display:flex;
- flex-direction:column;
- gap:3px;
- margin-bottom: 8px;
- opacity:.95;
-}
-
-.sw-chat-line{ font-size: 10px; color:#c7e3ff; }
-
-.sw-livechat-inputrow{ display:flex; gap:8px; align-items:center; }
-
-.sw-livechat-input{
- flex:1;
- border-radius: 999px;
- border: 1px solid rgba(90, 190, 255, 0.35);
- background: rgba(3, 14, 32, 0.75);
- color:#e8f5ff;
- padding: 8px 10px;
- font-size: 11px;
- outline: none;
-}
-
-.sw-livechat-post{
- border:none;
- border-radius: 10px;
- padding: 8px 12px;
- background: rgba(56,189,248,0.22);
- color:#e8f5ff;
- font-weight: 900;
- font-size: 11px;
- cursor:pointer;
-}
-
-/* Mobile: keep overlay readable */
-@media (max-width: 640px){
- .sw-expanded-overlay-card{
- width: min(94vw, 360px);
- }
- .sw-expanded-top{
- flex-direction: column;
- }
- .sw-expanded-right{
- display:none;
- }
-}
-
-
-/* SW_FIX_FULL_WRAP_COLLAPSE:BEGIN */
-/* Fix: expanded template wrapper collapsing into a thin line */
-.post-pin--expanded .post-card.sw-expanded-shell{
- width: 360px !important;
- min-width: 360px !important;
- max-width: 360px !important;
- height: 520px !important;
- max-height: 520px !important;
- overflow: hidden !important; /* no useless scroll */
-}
-
-.sw-template-full-wrap{
- display: block !important;
- width: 360px !important;
- height: 520px !important;
-}
-
-.sw-template-full-wrap > *{
- display: block !important;
-}
-/* SW_FIX_FULL_WRAP_COLLAPSE:END */
-
-
-
-/* ===== Expanded header (mock) ===== */
-.sw-expanded-badge{
- display:inline-flex;
- align-items:center;
- justify-content:center;
- padding: 6px 10px;
- border-radius: 999px;
- font-weight: 900;
- font-size: 12px;
- background: rgba(56,189,248,0.18);
- color: #D7F3FF;
- width: fit-content;
-}
-
-.sw-expanded-title{
- margin-top: 10px;
- font-size: 26px;
- font-weight: 900;
- line-height: 1.05;
- color: #F0F7FF;
-}
-
-.sw-expanded-snippet{
- margin-top: 8px;
- font-size: 14px;
- font-weight: 700;
- color: #B5C7E6;
-}
-
-/* =========================================================
- SW_EXPANDED_POLISH (visual only)
- - make expanded look like the mini gradients / modern UI
- ========================================================= */
-.post-pin--expanded .post-card{
- background: linear-gradient(135deg, rgba(56,189,248,0.16), rgba(7,18,37,0.98) 55%, rgba(2,6,23,0.98));
- border: 1px solid rgba(96,165,250,0.75);
- box-shadow: 0 18px 60px rgba(0,0,0,0.55), 0 0 24px rgba(56,189,248,0.22);
-}
-
-.sw-expanded-badge{
- display:inline-flex;
- align-items:center;
- justify-content:center;
- padding: 7px 12px;
- border-radius: 999px;
- font-weight: 900;
- font-size: 12px;
- letter-spacing: .04em;
- color: #d7f3ff;
- background: rgba(56,189,248,0.16);
- border: 1px solid rgba(56,189,248,0.35);
- margin-bottom: 10px;
-}
-
-.sw-expanded-title{
- font-size: 28px;
- font-weight: 950;
- line-height: 1.05;
- color: #f0f7ff;
- margin-bottom: 8px;
-}
-
-.sw-expanded-meta{
- font-size: 12px;
- font-weight: 700;
- color: rgba(181,199,230,0.95);
- margin-bottom: 10px;
-}
-
-.sw-expanded-snippet{
- font-size: 14px;
- line-height: 1.35;
- color: rgba(215,233,255,0.95);
- background: rgba(3,14,32,0.45);
- border: 1px solid rgba(90,190,255,0.22);
- border-radius: 14px;
- padding: 10px 12px;
-}
-
-.post-card-btn{
- background: rgba(56,189,248,0.14);
- border: 1px solid rgba(56,189,248,0.35);
- color: #e8f5ff;
- font-weight: 900;
- padding: 6px 12px;
-}
-
-.post-card-btn:active{
- transform: scale(0.98);
-}
-
-/* ===== CENTER MODAL CONTENT (pretty + consistent) ===== */
-.sw-modal{
- padding: 12px 14px;
-}
-
-.sw-modal-toprow{
- display:flex;
- align-items:flex-start;
- justify-content:space-between;
- gap:10px;
- margin-bottom: 10px;
-}
-
-.sw-modal-badge{
- display:inline-flex;
- align-items:center;
- justify-content:center;
- padding: 6px 10px;
- border-radius: 999px;
- font-size: 11px;
- font-weight: 900;
- letter-spacing: .06em;
- background: rgba(56,189,248,0.16);
- border: 1px solid rgba(90, 190, 255, 0.28);
- color:#D7F3FF;
- text-transform: uppercase;
-}
-
-.sw-modal-meta{
- margin-top: 6px;
- font-size: 11px;
- color:#9eb7ff;
- opacity:.95;
- display:flex;
- gap:6px;
- flex-wrap:wrap;
-}
-
-.sw-modal-x{
- border:none;
- border-radius:999px;
- width:34px;
- height:34px;
- background: rgba(3,14,32,0.55);
- color:#e8f5ff;
- font-weight:900;
- cursor:pointer;
- border:1px solid rgba(90,190,255,0.25);
- flex-shrink:0;
-}
-
-.sw-modal-hero{
- width:100%;
- height: 180px;
- border-radius: 16px;
- overflow:hidden;
- border: 1px solid rgba(90, 190, 255, 0.22);
- background: radial-gradient(circle at 30% 30%, rgba(56,189,248,0.18), rgba(3,14,32,0.85));
- box-shadow: 0 10px 24px rgba(0,0,0,0.35);
- margin-bottom: 10px;
-}
-
-.sw-modal-hero img{
- width:100%;
- height:100%;
- object-fit: cover;
- display:block;
-}
-
-.sw-modal-hero-fallback{
- width:100%;
- height:100%;
- background: radial-gradient(circle at 35% 35%, rgba(56,189,248,0.22), rgba(3,14,32,0.85));
-}
-
-.sw-modal-title{
- font-size: 22px;
- font-weight: 900;
- line-height: 26px;
- color:#F0F7FF;
- margin: 6px 0 8px;
-}
-
-.sw-modal-summary{
- font-size: 13px;
- line-height: 17px;
- color:#D7E9FF;
- opacity:.95;
- margin-bottom: 8px;
-}
-
-.sw-stat-row{
- display:flex;
- gap:8px;
- flex-wrap:wrap;
- margin: 6px 0 10px;
-}
-
-.sw-stat-pill{
- font-size: 11px;
- color:#c7e3ff;
- background: rgba(3, 14, 32, 0.58);
- border: 1px solid rgba(90, 190, 255, 0.22);
- padding: 6px 10px;
- border-radius: 999px;
-}
-
-.sw-modal-cta-row{
- display:flex;
- flex-direction:column;
- gap:10px;
- margin-bottom: 10px;
-}
-
-.sw-cta-primary{
- width:100%;
- border:none;
- border-radius: 14px;
- padding: 14px 12px;
- font-weight: 900;
- font-size: 14px;
- color:#e8f5ff;
- cursor:pointer;
- background: rgba(56,189,248,0.22);
- box-shadow: 0 10px 18px rgba(0,0,0,0.35);
-}
-
-.sw-cta-primary:disabled{
- opacity:.55;
- cursor:default;
-}
-
-.sw-cta-actions{
- display:flex;
- gap:8px;
- flex-wrap:wrap;
-}
-
-/* mobile tighten */
-@media (max-width: 640px){
- .sw-modal-hero{ height: 150px; }
- .sw-modal-title{ font-size: 20px; line-height: 24px; }
-}
-
-
-/* =========================================
- SW_CENTERED_MODAL_ANIM
- - fade + scale on open/close (slow)
- ========================================= */
-.sw-centered-backdrop{
- position: fixed;
- inset: 0;
- z-index: 9999999;
- background: rgba(0,0,0,0.08);
- backdrop-filter: blur(1px);
- display: flex;
- align-items: center;
- justify-content: center;
- padding: 12px;
- pointer-events: auto;
-
- opacity: 0;
- transition: opacity 440ms ease;
-}
-
-.sw-centered-modal{
- transform: scale(0.94);
- opacity: 0.0;
- transition: transform 440ms ease, opacity 440ms ease;
- will-change: transform, opacity;
-}
-
-.sw-centered-backdrop.sw-open{
- opacity: 1;
-}
-
-.sw-centered-modal.sw-open{
- transform: scale(1);
- opacity: 1.0;
-}
-
-/* closing state (optional hook) */
-.sw-centered-backdrop.sw-closing{
- opacity: 0;
-}
-
-
-/* =========================================
- SW_MINI_SMOOTH_MOVE
- - stop "sautillage/blink sec" while panning/zooming
- - MapLibre animates marker transforms every frame.
- - Any CSS transition/filter on marker subtree can cause shimmer/jitter on mobile.
- ========================================= */
-.post-pin{
- will-change: transform;
- transform: translate3d(0,0,0);
-}
-
-/* NO transitions on marker subtree (prevents bounce/lag while map moves) */
-.post-pin, .post-pin *{
- transition: none !important;
-}
-
-/* Make the mini template wrap GPU-friendly */
-.sw-template-mini-wrap{
- backface-visibility: hidden;
- transform: translate3d(-50%, calc(-100% - 12px), 0) scale(0.62);
- transform-origin: bottom center;
-}
-
-/* Mobile scale keeps same behavior, but still GPU */
-@media (max-width: 640px){
- .sw-template-mini-wrap{
- transform: translate3d(-50%, calc(-100% - 12px), 0) scale(0.52);
- }
-}
-
-/* Drop-shadow filters on triangles can shimmer on Android أثناء الحركة */
-.post-pin--compact .post-pin-pointer-small{
- filter: none;
-}
-
-
-@media (prefers-reduced-motion: reduce){
- .sw-centered-backdrop, .sw-centered-modal{
- transition: none !important;
- }
-}
diff --git a/src/styles/mapMarkers.css.bak2 b/src/styles/mapMarkers.css.bak2
deleted file mode 100644
index dab1752..0000000
--- a/src/styles/mapMarkers.css.bak2
+++ /dev/null
@@ -1,604 +0,0 @@
-.post-pin {
- position: relative;
- width: 0;
- height: 0;
- pointer-events: none;
- transform: translate3d(0, 0, 0);
-}
-.post-pin * { pointer-events: auto; box-sizing: border-box; }
-
-.post-pin--compact .post-pin-bubble {
- position: absolute;
- left: 0;
- top: 0;
- transform: translate(-50%, calc(-100% - 12px));
- display: inline-flex;
- align-items: center;
- padding: 4px 8px;
- border-radius: 999px;
- background: rgba(6, 40, 80, 0.95);
- border: 1px solid rgba(80, 180, 255, 0.9);
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.5);
- max-width: 180px;
-}
-.post-pin-dot { width:10px; height:10px; border-radius:999px; background:#ff8a00; margin-right:6px; flex-shrink:0; }
-.post-pin-text { color:#e8f5ff; font-size:11px; font-weight:500; max-width:160px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
-
-.post-pin--compact .post-pin-pointer-small {
- position: absolute;
- left: 0;
- top: 0;
- transform: translate(-50%, -100%);
- width: 0;
- height: 0;
- border-left: 7px solid transparent;
- border-right: 7px solid transparent;
- border-top: 9px solid rgba(6, 40, 80, 0.95);
- filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.6));
-}
-
-/* ===== Template mini wrapper (keeps pointer unchanged) ===== */
-.sw-template-mini-wrap{
- position: absolute;
- left: 0;
- top: 0;
- transform: translate(-50%, calc(-100% - 12px)) scale(0.62);
- transform-origin: bottom center;
- will-change: transform;
-}
-
-@media (max-width: 640px){
- .sw-template-mini-wrap{
- transform: translate(-50%, calc(-100% - 12px)) scale(0.52);
- }
-}
-
-/* =========================================================
- NEW: FIXED EXPANDED OVERLAY
- - Card is fixed near bottom (consistent)
- - Pointer follows marker (consistent)
- - No huge map recenter jumps
- ========================================================= */
-
-.sw-expanded-overlay-root{
- position:absolute;
- inset:0;
- z-index: 999999;
- pointer-events:none;
-}
-
-/* Card position: "dans le bas" (approx bottom zone), consistent on rotate */
-.sw-expanded-overlay-card{
- position:absolute;
- left: 50%;
- bottom: calc(12px + env(safe-area-inset-bottom) + var(--sw-below-overlap, 0px));
- transform: translateX(-50%);
- width: min(92vw, 420px);
- pointer-events: auto;
-}
-
-/* Make card fit mobile nicely */
-.sw-expanded-overlay-card .post-card{
- width: 100%;
- max-height: min(58vh, 640px);
- overflow:auto;
- -webkit-overflow-scrolling: touch;
- background: rgba(8, 20, 40, 0.97);
- border-radius: 14px;
- padding: 10px 12px;
- box-shadow: 0 10px 26px rgba(0, 0, 0, 0.85);
- border: 1px solid rgba(90, 190, 255, 0.9);
- color: #e8f5ff;
-}
-
-/* Pointer on the marker position */
-.sw-overlay-pointer{
- position:absolute;
- width:0; height:0;
- border-left: 10px solid transparent;
- border-right:10px solid transparent;
- border-top: 11px solid rgba(8, 20, 40, 0.97);
- filter: drop-shadow(0 2px 4px rgba(0,0,0,.8));
- transform: translate(-50%, -100%);
- left: 0;
- top: 0;
-}
-
-/* Simple line from marker to card */
-.sw-overlay-line{
- position:absolute;
- height: 2px;
- background: rgba(56,189,248,0.35);
- transform-origin: 0 50%;
- left: 0;
- top: 0;
- width: 0;
- filter: drop-shadow(0 1px 2px rgba(0,0,0,.6));
-}
-
-/* ===== Expanded layout pieces (same as before) ===== */
-.sw-expanded-shell{ padding: 10px 12px; }
-
-.sw-expanded-top{
- display:flex;
- gap:10px;
- align-items:flex-start;
-}
-
-.sw-expanded-left{ flex: 1; }
-
-.sw-expanded-right{
- width: 150px;
- min-width: 140px;
- display:flex;
- flex-direction:column;
- gap:8px;
- padding-top: 4px;
-}
-
-.sw-watch-title{
- font-size: 11px;
- font-weight: 800;
- color:#bfdbfe;
- text-transform: uppercase;
- letter-spacing: .06em;
-}
-
-.sw-watch-list{ display:flex; flex-direction:column; gap:6px; }
-
-.sw-watch-item{
- font-size: 11px;
- color:#e8f5ff;
- background: rgba(3, 14, 32, 0.75);
- border: 1px solid rgba(90, 190, 255, 0.35);
- border-radius: 10px;
- padding: 6px 8px;
-}
-
-.sw-watch-msg{
- opacity:.85;
- margin-top:2px;
- font-size: 10px;
- color:#c7e3ff;
-}
-
-.sw-add-feed-btn{
- margin-top: 2px;
- border: 1px solid rgba(148,163,184,.7);
- border-radius: 10px;
- padding: 8px 10px;
- background: rgba(5, 35, 70, 0.85);
- color:#e8f5ff;
- font-weight: 900;
- font-size: 11px;
- cursor:pointer;
-}
-
-.sw-news-generated{
- margin-top: 10px;
- padding: 8px 10px;
- border-radius: 12px;
- background: rgba(3, 14, 32, 0.75);
- border: 1px solid rgba(90, 190, 255, 0.35);
-}
-
-.sw-news-title{
- font-size: 12px;
- font-weight: 900;
- color:#e8f5ff;
- margin-bottom: 2px;
-}
-
-.sw-news-sub{ font-size: 10px; color:#9eb7ff; }
-
-.sw-actions-row{ margin-top: 8px; }
-
-.sw-livechat{ margin-top: 8px; }
-
-.sw-livechat-title{
- font-weight: 800;
- letter-spacing:.04em;
- margin-bottom: 6px;
-}
-
-.sw-livechat-body{
- display:flex;
- flex-direction:column;
- gap:3px;
- margin-bottom: 8px;
- opacity:.95;
-}
-
-.sw-chat-line{ font-size: 10px; color:#c7e3ff; }
-
-.sw-livechat-inputrow{ display:flex; gap:8px; align-items:center; }
-
-.sw-livechat-input{
- flex:1;
- border-radius: 999px;
- border: 1px solid rgba(90, 190, 255, 0.35);
- background: rgba(3, 14, 32, 0.75);
- color:#e8f5ff;
- padding: 8px 10px;
- font-size: 11px;
- outline: none;
-}
-
-.sw-livechat-post{
- border:none;
- border-radius: 10px;
- padding: 8px 12px;
- background: rgba(56,189,248,0.22);
- color:#e8f5ff;
- font-weight: 900;
- font-size: 11px;
- cursor:pointer;
-}
-
-/* Mobile: keep overlay readable */
-@media (max-width: 640px){
- .sw-expanded-overlay-card{
- width: min(94vw, 360px);
- }
- .sw-expanded-top{
- flex-direction: column;
- }
- .sw-expanded-right{
- display:none;
- }
-}
-
-
-/* SW_FIX_FULL_WRAP_COLLAPSE:BEGIN */
-/* Fix: expanded template wrapper collapsing into a thin line */
-.post-pin--expanded .post-card.sw-expanded-shell{
- width: 360px !important;
- min-width: 360px !important;
- max-width: 360px !important;
- height: 520px !important;
- max-height: 520px !important;
- overflow: hidden !important; /* no useless scroll */
-}
-
-.sw-template-full-wrap{
- display: block !important;
- width: 360px !important;
- height: 520px !important;
-}
-
-.sw-template-full-wrap > *{
- display: block !important;
-}
-/* SW_FIX_FULL_WRAP_COLLAPSE:END */
-
-
-
-/* ===== Expanded header (mock) ===== */
-.sw-expanded-badge{
- display:inline-flex;
- align-items:center;
- justify-content:center;
- padding: 6px 10px;
- border-radius: 999px;
- font-weight: 900;
- font-size: 12px;
- background: rgba(56,189,248,0.18);
- color: #D7F3FF;
- width: fit-content;
-}
-
-.sw-expanded-title{
- margin-top: 10px;
- font-size: 26px;
- font-weight: 900;
- line-height: 1.05;
- color: #F0F7FF;
-}
-
-.sw-expanded-snippet{
- margin-top: 8px;
- font-size: 14px;
- font-weight: 700;
- color: #B5C7E6;
-}
-
-/* =========================================================
- SW_EXPANDED_POLISH (visual only)
- - make expanded look like the mini gradients / modern UI
- ========================================================= */
-.post-pin--expanded .post-card{
- background: linear-gradient(135deg, rgba(56,189,248,0.16), rgba(7,18,37,0.98) 55%, rgba(2,6,23,0.98));
- border: 1px solid rgba(96,165,250,0.75);
- box-shadow: 0 18px 60px rgba(0,0,0,0.55), 0 0 24px rgba(56,189,248,0.22);
-}
-
-.sw-expanded-badge{
- display:inline-flex;
- align-items:center;
- justify-content:center;
- padding: 7px 12px;
- border-radius: 999px;
- font-weight: 900;
- font-size: 12px;
- letter-spacing: .04em;
- color: #d7f3ff;
- background: rgba(56,189,248,0.16);
- border: 1px solid rgba(56,189,248,0.35);
- margin-bottom: 10px;
-}
-
-.sw-expanded-title{
- font-size: 28px;
- font-weight: 950;
- line-height: 1.05;
- color: #f0f7ff;
- margin-bottom: 8px;
-}
-
-.sw-expanded-meta{
- font-size: 12px;
- font-weight: 700;
- color: rgba(181,199,230,0.95);
- margin-bottom: 10px;
-}
-
-.sw-expanded-snippet{
- font-size: 14px;
- line-height: 1.35;
- color: rgba(215,233,255,0.95);
- background: rgba(3,14,32,0.45);
- border: 1px solid rgba(90,190,255,0.22);
- border-radius: 14px;
- padding: 10px 12px;
-}
-
-.post-card-btn{
- background: rgba(56,189,248,0.14);
- border: 1px solid rgba(56,189,248,0.35);
- color: #e8f5ff;
- font-weight: 900;
- padding: 6px 12px;
-}
-
-.post-card-btn:active{
- transform: scale(0.98);
-}
-
-/* ===== CENTER MODAL CONTENT (pretty + consistent) ===== */
-.sw-modal{
- padding: 12px 14px;
-}
-
-.sw-modal-toprow{
- display:flex;
- align-items:flex-start;
- justify-content:space-between;
- gap:10px;
- margin-bottom: 10px;
-}
-
-.sw-modal-badge{
- display:inline-flex;
- align-items:center;
- justify-content:center;
- padding: 6px 10px;
- border-radius: 999px;
- font-size: 11px;
- font-weight: 900;
- letter-spacing: .06em;
- background: rgba(56,189,248,0.16);
- border: 1px solid rgba(90, 190, 255, 0.28);
- color:#D7F3FF;
- text-transform: uppercase;
-}
-
-.sw-modal-meta{
- margin-top: 6px;
- font-size: 11px;
- color:#9eb7ff;
- opacity:.95;
- display:flex;
- gap:6px;
- flex-wrap:wrap;
-}
-
-.sw-modal-x{
- border:none;
- border-radius:999px;
- width:34px;
- height:34px;
- background: rgba(3,14,32,0.55);
- color:#e8f5ff;
- font-weight:900;
- cursor:pointer;
- border:1px solid rgba(90,190,255,0.25);
- flex-shrink:0;
-}
-
-.sw-modal-hero{
- width:100%;
- height: 180px;
- border-radius: 16px;
- overflow:hidden;
- border: 1px solid rgba(90, 190, 255, 0.22);
- background: radial-gradient(circle at 30% 30%, rgba(56,189,248,0.18), rgba(3,14,32,0.85));
- box-shadow: 0 10px 24px rgba(0,0,0,0.35);
- margin-bottom: 10px;
-}
-
-.sw-modal-hero img{
- width:100%;
- height:100%;
- object-fit: cover;
- display:block;
-}
-
-.sw-modal-hero-fallback{
- width:100%;
- height:100%;
- background: radial-gradient(circle at 35% 35%, rgba(56,189,248,0.22), rgba(3,14,32,0.85));
-}
-
-.sw-modal-title{
- font-size: 22px;
- font-weight: 900;
- line-height: 26px;
- color:#F0F7FF;
- margin: 6px 0 8px;
-}
-
-.sw-modal-summary{
- font-size: 13px;
- line-height: 17px;
- color:#D7E9FF;
- opacity:.95;
- margin-bottom: 8px;
-}
-
-.sw-stat-row{
- display:flex;
- gap:8px;
- flex-wrap:wrap;
- margin: 6px 0 10px;
-}
-
-.sw-stat-pill{
- font-size: 11px;
- color:#c7e3ff;
- background: rgba(3, 14, 32, 0.58);
- border: 1px solid rgba(90, 190, 255, 0.22);
- padding: 6px 10px;
- border-radius: 999px;
-}
-
-.sw-modal-cta-row{
- display:flex;
- flex-direction:column;
- gap:10px;
- margin-bottom: 10px;
-}
-
-.sw-cta-primary{
- width:100%;
- border:none;
- border-radius: 14px;
- padding: 14px 12px;
- font-weight: 900;
- font-size: 14px;
- color:#e8f5ff;
- cursor:pointer;
- background: rgba(56,189,248,0.22);
- box-shadow: 0 10px 18px rgba(0,0,0,0.35);
-}
-
-.sw-cta-primary:disabled{
- opacity:.55;
- cursor:default;
-}
-
-.sw-cta-actions{
- display:flex;
- gap:8px;
- flex-wrap:wrap;
-}
-
-/* mobile tighten */
-@media (max-width: 640px){
- .sw-modal-hero{ height: 150px; }
- .sw-modal-title{ font-size: 20px; line-height: 24px; }
-}
-
-
-/* =========================================
- SW_CENTERED_MODAL_ANIM
- - fade + scale on open/close (slow)
- ========================================= */
-.sw-centered-backdrop{
- position: fixed;
- inset: 0;
- z-index: 9999999;
- background: rgba(0,0,0,0.08);
- backdrop-filter: blur(1px);
- display: flex;
- align-items: center;
- justify-content: center;
- padding: 12px;
- pointer-events: auto;
-
- opacity: 0;
- transition: opacity 440ms ease;
-}
-
-.sw-centered-modal{
- transform: scale(0.94);
- opacity: 0.0;
- transition: transform 440ms ease, opacity 440ms ease;
- will-change: transform, opacity;
-}
-
-.sw-centered-backdrop.sw-open{
- opacity: 1;
-}
-
-.sw-centered-modal.sw-open{
- transform: scale(1);
- opacity: 1.0;
-}
-
-/* closing state (optional hook) */
-.sw-centered-backdrop.sw-closing{
- opacity: 0;
-}
-
-
-/* =========================================
- SW_MINI_SMOOTH_MOVE
- - stop "sautillage/blink sec" while panning/zooming
- - MapLibre animates marker transforms every frame.
- - Any CSS transition/filter on marker subtree can cause shimmer/jitter on mobile.
- ========================================= */
-.post-pin{
- will-change: transform;
- transform: translate3d(0,0,0);
-}
-
-/* NO transitions on marker subtree (prevents bounce/lag while map moves) */
-.post-pin, .post-pin *{
- transition: none !important;
-}
-
-/* Make the mini template wrap GPU-friendly */
-.sw-template-mini-wrap{
- backface-visibility: hidden;
- transform: translate3d(-50%, calc(-100% - 12px), 0) scale(0.62);
- transform-origin: bottom center;
-}
-
-/* Mobile scale keeps same behavior, but still GPU */
-@media (max-width: 640px){
- .sw-template-mini-wrap{
- transform: translate3d(-50%, calc(-100% - 12px), 0) scale(0.52);
- }
-}
-
-/* Drop-shadow filters on triangles can shimmer on Android أثناء الحركة */
-.post-pin--compact .post-pin-pointer-small{
- filter: none;
-}
-
-
-@media (prefers-reduced-motion: reduce){
- .sw-centered-backdrop, .sw-centered-modal{
- transition: none !important;
- }
-}
-
-/* SW_MARKER_SMOOTH_APPEAR:BEGIN */
-.post-pin.sw-appear{
- opacity: 0;
- transition: opacity 280ms ease;
-}
-.post-pin.sw-appear.sw-appear-in{
- opacity: 1;
-}
-/* SW_MARKER_SMOOTH_APPEAR:END */
diff --git a/src/styles/mapMarkers.css.bak3 b/src/styles/mapMarkers.css.bak3
deleted file mode 100644
index 06fa9d4..0000000
--- a/src/styles/mapMarkers.css.bak3
+++ /dev/null
@@ -1,608 +0,0 @@
-.post-pin {
- position: relative;
- width: 0;
- height: 0;
- pointer-events: none;
- transform: translate3d(0, 0, 0);
-}
-.post-pin * { pointer-events: auto; box-sizing: border-box; }
-
-.post-pin--compact .post-pin-bubble {
- position: absolute;
- left: 0;
- top: 0;
- transform: translate(-50%, calc(-100% - 12px));
- display: inline-flex;
- align-items: center;
- padding: 4px 8px;
- border-radius: 999px;
- background: rgba(6, 40, 80, 0.95);
- border: 1px solid rgba(80, 180, 255, 0.9);
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.5);
- max-width: 180px;
-}
-.post-pin-dot { width:10px; height:10px; border-radius:999px; background:#ff8a00; margin-right:6px; flex-shrink:0; }
-.post-pin-text { color:#e8f5ff; font-size:11px; font-weight:500; max-width:160px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
-
-.post-pin--compact .post-pin-pointer-small {
- position: absolute;
- left: 0;
- top: 0;
- transform: translate(-50%, -100%);
- width: 0;
- height: 0;
- border-left: 7px solid transparent;
- border-right: 7px solid transparent;
- border-top: 9px solid rgba(6, 40, 80, 0.95);
- filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.6));
-}
-
-/* ===== Template mini wrapper (keeps pointer unchanged) ===== */
-.sw-template-mini-wrap{
- position: absolute;
- left: 0;
- top: 0;
- transform: translate(-50%, calc(-100% - 12px)) scale(0.62);
- transform-origin: bottom center;
- will-change: transform;
-}
-
-@media (max-width: 640px){
- .sw-template-mini-wrap{
- transform: translate(-50%, calc(-100% - 12px)) scale(0.52);
- }
-}
-
-/* =========================================================
- NEW: FIXED EXPANDED OVERLAY
- - Card is fixed near bottom (consistent)
- - Pointer follows marker (consistent)
- - No huge map recenter jumps
- ========================================================= */
-
-.sw-expanded-overlay-root{
- position:absolute;
- inset:0;
- z-index: 999999;
- pointer-events:none;
-}
-
-/* Card position: "dans le bas" (approx bottom zone), consistent on rotate */
-.sw-expanded-overlay-card{
- position:absolute;
- left: 50%;
- bottom: calc(12px + env(safe-area-inset-bottom) + var(--sw-below-overlap, 0px));
- transform: translateX(-50%);
- width: min(92vw, 420px);
- pointer-events: auto;
-}
-
-/* Make card fit mobile nicely */
-.sw-expanded-overlay-card .post-card{
- width: 100%;
- max-height: min(58vh, 640px);
- overflow:auto;
- -webkit-overflow-scrolling: touch;
- background: rgba(8, 20, 40, 0.97);
- border-radius: 14px;
- padding: 10px 12px;
- box-shadow: 0 10px 26px rgba(0, 0, 0, 0.85);
- border: 1px solid rgba(90, 190, 255, 0.9);
- color: #e8f5ff;
-}
-
-/* Pointer on the marker position */
-.sw-overlay-pointer{
- position:absolute;
- width:0; height:0;
- border-left: 10px solid transparent;
- border-right:10px solid transparent;
- border-top: 11px solid rgba(8, 20, 40, 0.97);
- filter: drop-shadow(0 2px 4px rgba(0,0,0,.8));
- transform: translate(-50%, -100%);
- left: 0;
- top: 0;
-}
-
-/* Simple line from marker to card */
-.sw-overlay-line{
- position:absolute;
- height: 2px;
- background: rgba(56,189,248,0.35);
- transform-origin: 0 50%;
- left: 0;
- top: 0;
- width: 0;
- filter: drop-shadow(0 1px 2px rgba(0,0,0,.6));
-}
-
-/* ===== Expanded layout pieces (same as before) ===== */
-.sw-expanded-shell{ padding: 10px 12px; }
-
-.sw-expanded-top{
- display:flex;
- gap:10px;
- align-items:flex-start;
-}
-
-.sw-expanded-left{ flex: 1; }
-
-.sw-expanded-right{
- width: 150px;
- min-width: 140px;
- display:flex;
- flex-direction:column;
- gap:8px;
- padding-top: 4px;
-}
-
-.sw-watch-title{
- font-size: 11px;
- font-weight: 800;
- color:#bfdbfe;
- text-transform: uppercase;
- letter-spacing: .06em;
-}
-
-.sw-watch-list{ display:flex; flex-direction:column; gap:6px; }
-
-.sw-watch-item{
- font-size: 11px;
- color:#e8f5ff;
- background: rgba(3, 14, 32, 0.75);
- border: 1px solid rgba(90, 190, 255, 0.35);
- border-radius: 10px;
- padding: 6px 8px;
-}
-
-.sw-watch-msg{
- opacity:.85;
- margin-top:2px;
- font-size: 10px;
- color:#c7e3ff;
-}
-
-.sw-add-feed-btn{
- margin-top: 2px;
- border: 1px solid rgba(148,163,184,.7);
- border-radius: 10px;
- padding: 8px 10px;
- background: rgba(5, 35, 70, 0.85);
- color:#e8f5ff;
- font-weight: 900;
- font-size: 11px;
- cursor:pointer;
-}
-
-.sw-news-generated{
- margin-top: 10px;
- padding: 8px 10px;
- border-radius: 12px;
- background: rgba(3, 14, 32, 0.75);
- border: 1px solid rgba(90, 190, 255, 0.35);
-}
-
-.sw-news-title{
- font-size: 12px;
- font-weight: 900;
- color:#e8f5ff;
- margin-bottom: 2px;
-}
-
-.sw-news-sub{ font-size: 10px; color:#9eb7ff; }
-
-.sw-actions-row{ margin-top: 8px; }
-
-.sw-livechat{ margin-top: 8px; }
-
-.sw-livechat-title{
- font-weight: 800;
- letter-spacing:.04em;
- margin-bottom: 6px;
-}
-
-.sw-livechat-body{
- display:flex;
- flex-direction:column;
- gap:3px;
- margin-bottom: 8px;
- opacity:.95;
-}
-
-.sw-chat-line{ font-size: 10px; color:#c7e3ff; }
-
-.sw-livechat-inputrow{ display:flex; gap:8px; align-items:center; }
-
-.sw-livechat-input{
- flex:1;
- border-radius: 999px;
- border: 1px solid rgba(90, 190, 255, 0.35);
- background: rgba(3, 14, 32, 0.75);
- color:#e8f5ff;
- padding: 8px 10px;
- font-size: 11px;
- outline: none;
-}
-
-.sw-livechat-post{
- border:none;
- border-radius: 10px;
- padding: 8px 12px;
- background: rgba(56,189,248,0.22);
- color:#e8f5ff;
- font-weight: 900;
- font-size: 11px;
- cursor:pointer;
-}
-
-/* Mobile: keep overlay readable */
-@media (max-width: 640px){
- .sw-expanded-overlay-card{
- width: min(94vw, 360px);
- }
- .sw-expanded-top{
- flex-direction: column;
- }
- .sw-expanded-right{
- display:none;
- }
-}
-
-
-/* SW_FIX_FULL_WRAP_COLLAPSE:BEGIN */
-/* Fix: expanded template wrapper collapsing into a thin line */
-.post-pin--expanded .post-card.sw-expanded-shell{
- width: 360px !important;
- min-width: 360px !important;
- max-width: 360px !important;
- height: 520px !important;
- max-height: 520px !important;
- overflow: hidden !important; /* no useless scroll */
-}
-
-.sw-template-full-wrap{
- display: block !important;
- width: 360px !important;
- height: 520px !important;
-}
-
-.sw-template-full-wrap > *{
- display: block !important;
-}
-/* SW_FIX_FULL_WRAP_COLLAPSE:END */
-
-
-
-/* ===== Expanded header (mock) ===== */
-.sw-expanded-badge{
- display:inline-flex;
- align-items:center;
- justify-content:center;
- padding: 6px 10px;
- border-radius: 999px;
- font-weight: 900;
- font-size: 12px;
- background: rgba(56,189,248,0.18);
- color: #D7F3FF;
- width: fit-content;
-}
-
-.sw-expanded-title{
- margin-top: 10px;
- font-size: 26px;
- font-weight: 900;
- line-height: 1.05;
- color: #F0F7FF;
-}
-
-.sw-expanded-snippet{
- margin-top: 8px;
- font-size: 14px;
- font-weight: 700;
- color: #B5C7E6;
-}
-
-/* =========================================================
- SW_EXPANDED_POLISH (visual only)
- - make expanded look like the mini gradients / modern UI
- ========================================================= */
-.post-pin--expanded .post-card{
- background: linear-gradient(135deg, rgba(56,189,248,0.16), rgba(7,18,37,0.98) 55%, rgba(2,6,23,0.98));
- border: 1px solid rgba(96,165,250,0.75);
- box-shadow: 0 18px 60px rgba(0,0,0,0.55), 0 0 24px rgba(56,189,248,0.22);
-}
-
-.sw-expanded-badge{
- display:inline-flex;
- align-items:center;
- justify-content:center;
- padding: 7px 12px;
- border-radius: 999px;
- font-weight: 900;
- font-size: 12px;
- letter-spacing: .04em;
- color: #d7f3ff;
- background: rgba(56,189,248,0.16);
- border: 1px solid rgba(56,189,248,0.35);
- margin-bottom: 10px;
-}
-
-.sw-expanded-title{
- font-size: 28px;
- font-weight: 950;
- line-height: 1.05;
- color: #f0f7ff;
- margin-bottom: 8px;
-}
-
-.sw-expanded-meta{
- font-size: 12px;
- font-weight: 700;
- color: rgba(181,199,230,0.95);
- margin-bottom: 10px;
-}
-
-.sw-expanded-snippet{
- font-size: 14px;
- line-height: 1.35;
- color: rgba(215,233,255,0.95);
- background: rgba(3,14,32,0.45);
- border: 1px solid rgba(90,190,255,0.22);
- border-radius: 14px;
- padding: 10px 12px;
-}
-
-.post-card-btn{
- background: rgba(56,189,248,0.14);
- border: 1px solid rgba(56,189,248,0.35);
- color: #e8f5ff;
- font-weight: 900;
- padding: 6px 12px;
-}
-
-.post-card-btn:active{
- transform: scale(0.98);
-}
-
-/* ===== CENTER MODAL CONTENT (pretty + consistent) ===== */
-.sw-modal{
- padding: 12px 14px;
-}
-
-.sw-modal-toprow{
- display:flex;
- align-items:flex-start;
- justify-content:space-between;
- gap:10px;
- margin-bottom: 10px;
-}
-
-.sw-modal-badge{
- display:inline-flex;
- align-items:center;
- justify-content:center;
- padding: 6px 10px;
- border-radius: 999px;
- font-size: 11px;
- font-weight: 900;
- letter-spacing: .06em;
- background: rgba(56,189,248,0.16);
- border: 1px solid rgba(90, 190, 255, 0.28);
- color:#D7F3FF;
- text-transform: uppercase;
-}
-
-.sw-modal-meta{
- margin-top: 6px;
- font-size: 11px;
- color:#9eb7ff;
- opacity:.95;
- display:flex;
- gap:6px;
- flex-wrap:wrap;
-}
-
-.sw-modal-x{
- border:none;
- border-radius:999px;
- width:34px;
- height:34px;
- background: rgba(3,14,32,0.55);
- color:#e8f5ff;
- font-weight:900;
- cursor:pointer;
- border:1px solid rgba(90,190,255,0.25);
- flex-shrink:0;
-}
-
-.sw-modal-hero{
- width:100%;
- height: 180px;
- border-radius: 16px;
- overflow:hidden;
- border: 1px solid rgba(90, 190, 255, 0.22);
- background: radial-gradient(circle at 30% 30%, rgba(56,189,248,0.18), rgba(3,14,32,0.85));
- box-shadow: 0 10px 24px rgba(0,0,0,0.35);
- margin-bottom: 10px;
-}
-
-.sw-modal-hero img{
- width:100%;
- height:100%;
- object-fit: cover;
- display:block;
-}
-
-.sw-modal-hero-fallback{
- width:100%;
- height:100%;
- background: radial-gradient(circle at 35% 35%, rgba(56,189,248,0.22), rgba(3,14,32,0.85));
-}
-
-.sw-modal-title{
- font-size: 22px;
- font-weight: 900;
- line-height: 26px;
- color:#F0F7FF;
- margin: 6px 0 8px;
-}
-
-.sw-modal-summary{
- font-size: 13px;
- line-height: 17px;
- color:#D7E9FF;
- opacity:.95;
- margin-bottom: 8px;
-}
-
-.sw-stat-row{
- display:flex;
- gap:8px;
- flex-wrap:wrap;
- margin: 6px 0 10px;
-}
-
-.sw-stat-pill{
- font-size: 11px;
- color:#c7e3ff;
- background: rgba(3, 14, 32, 0.58);
- border: 1px solid rgba(90, 190, 255, 0.22);
- padding: 6px 10px;
- border-radius: 999px;
-}
-
-.sw-modal-cta-row{
- display:flex;
- flex-direction:column;
- gap:10px;
- margin-bottom: 10px;
-}
-
-.sw-cta-primary{
- width:100%;
- border:none;
- border-radius: 14px;
- padding: 14px 12px;
- font-weight: 900;
- font-size: 14px;
- color:#e8f5ff;
- cursor:pointer;
- background: rgba(56,189,248,0.22);
- box-shadow: 0 10px 18px rgba(0,0,0,0.35);
-}
-
-.sw-cta-primary:disabled{
- opacity:.55;
- cursor:default;
-}
-
-.sw-cta-actions{
- display:flex;
- gap:8px;
- flex-wrap:wrap;
-}
-
-/* mobile tighten */
-@media (max-width: 640px){
- .sw-modal-hero{ height: 150px; }
- .sw-modal-title{ font-size: 20px; line-height: 24px; }
-}
-
-
-/* =========================================
- SW_CENTERED_MODAL_ANIM
- - fade + scale on open/close (slow)
- ========================================= */
-.sw-centered-backdrop{
- position: fixed;
- inset: 0;
- z-index: 9999999;
- background: rgba(0,0,0,0.08);
- backdrop-filter: blur(1px);
- display: flex;
- align-items: center;
- justify-content: center;
- padding: 12px;
- pointer-events: auto;
-
- opacity: 0;
- transition: opacity 440ms ease;
-}
-
-.sw-centered-modal{
- transform: scale(0.94);
- opacity: 0.0;
- transition: transform 440ms ease, opacity 440ms ease;
- will-change: transform, opacity;
-}
-
-.sw-centered-backdrop.sw-open{
- opacity: 1;
-}
-
-.sw-centered-modal.sw-open{
- transform: scale(1);
- opacity: 1.0;
-}
-
-/* closing state (optional hook) */
-.sw-centered-backdrop.sw-closing{
- opacity: 0;
-}
-
-
-/* =========================================
- SW_MINI_SMOOTH_MOVE
- - stop "sautillage/blink sec" while panning/zooming
- - MapLibre animates marker transforms every frame.
- - Any CSS transition/filter on marker subtree can cause shimmer/jitter on mobile.
- ========================================= */
-.post-pin{
- will-change: transform;
- transform: translate3d(0,0,0);
-}
-
-/* NO transitions on marker subtree (prevents bounce/lag while map moves) */
-.post-pin, .post-pin *{
- transition: none !important;
-}
-
-/* Make the mini template wrap GPU-friendly */
-.sw-template-mini-wrap{
- backface-visibility: hidden;
- transform: translate3d(-50%, calc(-100% - 12px), 0) scale(0.62);
- transform-origin: bottom center;
-}
-
-/* Mobile scale keeps same behavior, but still GPU */
-@media (max-width: 640px){
- .sw-template-mini-wrap{
- transform: translate3d(-50%, calc(-100% - 12px), 0) scale(0.52);
- }
-}
-
-/* Drop-shadow filters on triangles can shimmer on Android أثناء الحركة */
-.post-pin--compact .post-pin-pointer-small{
- filter: none;
-}
-
-
-@media (prefers-reduced-motion: reduce){
- .sw-centered-backdrop, .sw-centered-modal{
- transition: none !important;
- }
-}
-
-/* SW_MARKER_SMOOTH_APPEAR:BEGIN */
-.post-pin.sw-appear{
- opacity: 0;
- transition: opacity 280ms ease;
-}
-.post-pin.sw-appear.sw-appear-in{
- opacity: 1;
-}
-.post-pin.sw-disappear{
- opacity: 0;
- transition: opacity 280ms ease;
-}
-/* SW_MARKER_SMOOTH_APPEAR:END */
diff --git a/src/styles/posts.css.bak b/src/styles/posts.css.bak
deleted file mode 100644
index cfc9930..0000000
--- a/src/styles/posts.css.bak
+++ /dev/null
@@ -1,137 +0,0 @@
-/* Sociowall + Chat BELOW the map */
-.below-row{
- display:flex;
- gap:.6rem;
- align-items:stretch;
- min-width:0;
- flex-wrap: nowrap; /* ✅ keep side-by-side */
-}
-
-/* Small top nudge down (as requested) */
-.sociowall-panel,
-.chat-panel{
- max-width: 32vw;
- min-width: 160px;
- flex: 1 1 0; /* ✅ 1/4 */
- margin-top: 5px; /* ✅ descend 5px */
-}
-
-.sociowall-panel{
- flex: 3 1 0; /* ✅ 3/4 */
- min-width:0; /* IMPORTANT: prevents pushing chat */
- min-height: 160px;
- background: rgba(15, 23, 42, 0.96);
- border-radius: 14px;
- border: 1px solid rgba(148, 163, 184, 0.9);
- box-shadow: 0 10px 28px rgba(0,0,0,.9), 0 0 18px rgba(56,189,248,.45);
- padding: .45rem .55rem;
- display:flex;
- flex-direction:column;
-}
-
-.sociowall-header{
- font-size: .78rem;
- font-weight: 700;
- letter-spacing: .06em;
- text-transform: uppercase;
- color:#bfdbfe;
- margin-bottom:.25rem;
-}
-
-/* list scroll inside wall */
-.post-list{
- flex:1;
- overflow-y:auto;
- padding-right:.15rem;
- max-height: 44vh;
-}
-
-/* prevent long content from widening layout */
-.post-card{
- overflow:hidden;
- min-width:0;
- border-radius:10px;
- border:1px solid rgba(55, 65, 81, 0.9);
- background: rgba(15, 23, 42, 0.92);
- padding:.3rem .45rem;
- margin-bottom:.22rem;
- cursor:pointer;
-}
-
-/* SCALE the fixed template so it never forces width */
-.post-card .sw-wall-mini{
- --sw-wall-scale: 0.86;
- transform: scale(var(--sw-wall-scale));
- transform-origin: left top;
- width: calc(100% / var(--sw-wall-scale));
-}
-
-.post-list-header{ display:flex; align-items:center; gap:.5rem; margin-bottom:.25rem; font-size:.7rem; color:#cbd5f5; }
-.km-filter input[type="range"]{ width:160px; }
-
-.status-text{ font-size:.72rem; opacity:.85; margin:.15rem 0; }
-.status-error{ color:#fecaca; }
-
-/* ✅ Chat fixed column that can shrink a bit on narrow screens */
-.chat-panel{
- flex: 0 0 190px;
- width: 190px;
- min-width: 160px; /* allow shrink in portrait */
- max-width: min(220px, 42vw);
- min-height: 160px;
- background: rgba(15, 23, 42, 0.96);
- border-radius: 14px;
- border: 1px solid rgba(148, 163, 184, 0.9);
- box-shadow: 0 10px 28px rgba(0,0,0,.9), 0 0 18px rgba(56,189,248,.45);
- padding:.4rem .45rem;
- display:flex;
- flex-direction:column;
- overflow:hidden;
-}
-
-.chat-header{
- font-size:.78rem;
- font-weight:700;
- letter-spacing:.06em;
- text-transform:uppercase;
- color:#bfdbfe;
- margin-bottom:.2rem;
-}
-
-.chat-users{
- list-style:none;
- padding:0; margin:0;
- font-size:.76rem;
- overflow:auto;
- -webkit-overflow-scrolling: touch;
- max-height: 44vh;
-}
-
-.chat-users li{ display:flex; align-items:center; gap:.3rem; padding:.18rem .1rem; }
-.chat-users li::before{ content:"👤"; font-size:.72rem; opacity:.9; }
-
-/* Stack only ultra-ultra-small */
-@media (max-width: 340px){
- .below-row{ flex-direction: column; }
- .chat-panel{ width:100%; min-width:0; max-width:none; flex: 1 1 auto; }
- .post-list{ max-height: 46vh; }
-}
-
-/* SW_LAYOUT_RATIO_FIX:BEGIN */
-.below-row{ flex-wrap: nowrap !important; }
-
-.sociowall-panel{
- flex: 3 1 0 !important; /* ✅ 3/4 */
- width: auto !important;
- max-width: none !important;
- min-width: 0 !important;
-}
-
-.chat-panel{
- flex: 1 1 0 !important; /* ✅ 1/4 */
- width: auto !important;
- max-width: none !important;
- min-width: 140px !important;
-}
-/* SW_LAYOUT_RATIO_FIX:END */
-
diff --git a/src/styles/topbar.css.bak3 b/src/styles/topbar.css.bak3
deleted file mode 100644
index 979e0d1..0000000
--- a/src/styles/topbar.css.bak3
+++ /dev/null
@@ -1,61 +0,0 @@
-.topbar{
- position: sticky; top:0; z-index:100;
- width:100%;
- padding: .55rem .9rem;
- display:flex; align-items:center; justify-content:space-between; gap:.6rem;
- background: linear-gradient(135deg,#071225 0%,#0b2b5f 38%,#0e65c0 72%,#27a8ff 100%);
- border-bottom-left-radius:18px; border-bottom-right-radius:18px;
- box-shadow: 0 10px 24px rgba(0,0,0,.55), 0 0 18px rgba(56,189,248,.45);
- overflow:hidden;
-}
-
-.logo-circle{
- width:40px; height:40px; border-radius:50%; flex-shrink:0;
- background-image:url("/icons/logo-master.png");
- background-size:cover; background-position:center; background-repeat:no-repeat;
- box-shadow: 0 0 10px rgba(37,99,235,.8), 0 0 18px rgba(56,189,248,.6);
- color:transparent;
-}
-
-.title-block{ display:flex; flex-direction:column; line-height:1.05; min-width:0; }
-.main-title{ font-size:1.02rem; font-weight:800; letter-spacing:.04em; color:#f9fafb; }
-.sub-title{ font-size:.74rem; color:#dbeafe; opacity:.95; }
-
-.topbar-right{ display:flex; align-items:center; gap:.5rem; margin-left:auto; flex-wrap:wrap; }
-
-.theme-switch{ display:flex; gap:.28rem; }
-.theme-dot{
- width:22px; height:22px; border-radius:999px;
- border:1px solid rgba(148,163,184,.85);
- background:rgba(15,23,42,.9); color:#e5e7eb; font-size:.65rem;
- display:flex; align-items:center; justify-content:center; padding:0; cursor:pointer;
- box-shadow:0 0 6px rgba(15,23,42,.9); transition:transform .12s ease;
-}
-.theme-dot:hover{ transform:scale(1.06); }
-.theme-dot-active{ border-color:#facc15; box-shadow:0 0 10px rgba(250,204,21,.9),0 0 14px rgba(56,189,248,.55); }
-
-.btn-primary, .btn-secondary{
- padding:.32rem .85rem; font-size:.78rem; border-radius:999px; font-weight:700; cursor:pointer;
- white-space:nowrap; line-height:1;
-}
-.btn-primary{
- border:1px solid #22c55e;
- background:radial-gradient(circle at 30% 30%,#22c55e,#16a34a);
- color:#f9fafb;
- box-shadow:0 4px 10px rgba(22,163,74,.5),0 0 8px rgba(22,163,74,.6);
-}
-.btn-primary:disabled{ opacity:.6; cursor:default; }
-.btn-secondary{
- border:1px solid #bfdbfe;
- background:rgba(15,23,42,.25);
- color:#e0f2fe;
- box-shadow:0 3px 10px rgba(15,23,42,.6);
-}
-.btn-secondary:hover{ background:rgba(15,23,42,.45); }
-
-@media (max-width:640px){
- .topbar{ padding:.5rem .7rem; border-bottom-left-radius:16px; border-bottom-right-radius:16px; }
- .main-title{ font-size:1rem; }
- .sub-title{ font-size:.7rem; }
- .topbar-right{ width:100%; justify-content:flex-start; gap:.45rem; }
-}