-
+
+ setTimeFilter(code)} />
- )}
- {isCreating && (
-
-
- Create wire
-
-
-
- Move the map, aim with the crosshair — your wire will be pinned there.
-
-
-
-
-
-
setDraftTitle(e.target.value)}
- />
-
);
}
diff --git a/src/components/Map/templateSpecs.js b/src/components/Map/templateSpecs.js
index 0ad7d57..0d35c4e 100644
--- a/src/components/Map/templateSpecs.js
+++ b/src/components/Map/templateSpecs.js
@@ -17,19 +17,42 @@ export const TEMPLATE_SPECS = {
{ id: "meta", type: "text", x: 14, y: 88, w: 252, h: 16, bind: "data.source", style: "text.meta", maxLines: 1 }
],
},
+
+ /* Desktop/tablet full */
full_spec: {
- size: { w: 360, h: 520 },
+ size: { w: 360, h: 480 },
background: { type: "solid", value: "surface" },
radius: 22,
layers: [
- { id: "hero", type: "image", x: 0, y: 0, w: 360, h: 220, bind: "data.image" },
+ { id: "hero", type: "image", x: 0, y: 0, w: 360, h: 180, bind: "data.image" },
{ id: "badge", type: "chip", x: 16, y: 16, text: "NEWS", style: "chip.news" },
- { id: "title", type: "text", x: 16, y: 240, w: 328, h: 78, bind: "data.headline", style: "text.h1", maxLines: 3 },
- { id: "summary", type: "text", x: 16, y: 325, w: 328, h: 110, bind: "data.summary", style: "text.body", maxLines: 5 },
+ { id: "title", type: "text", x: 16, y: 200, w: 328, h: 70, bind: "data.headline", style: "text.h1", maxLines: 3 },
+ { id: "summary", type: "text", x: 16, y: 272, w: 328, h: 110, bind: "data.summary", style: "text.body", maxLines: 4 },
{
id: "cta",
type: "button",
- x: 16, y: 450, w: 328, h: 48,
+ x: 16, y: 402, w: 328, h: 48,
+ text: "Open source",
+ style: "button.primary",
+ action: { type: "open_url", bind: "data.url" }
+ }
+ ],
+ },
+
+ /* ✅ Mobile full (shorter) */
+ full_spec_mobile: {
+ size: { w: 320, h: 380 },
+ background: { type: "solid", value: "surface" },
+ radius: 20,
+ layers: [
+ { id: "hero", type: "image", x: 0, y: 0, w: 320, h: 120, bind: "data.image" },
+ { id: "badge", type: "chip", x: 14, y: 12, text: "NEWS", style: "chip.news" },
+ { id: "title", type: "text", x: 14, y: 140, w: 292, h: 58, bind: "data.headline", style: "text.h1", maxLines: 2 },
+ { id: "summary", type: "text", x: 14, y: 202, w: 292, h: 80, bind: "data.summary", style: "text.body", maxLines: 3 },
+ {
+ id: "cta",
+ type: "button",
+ x: 14, y: 300, w: 292, h: 46,
text: "Open source",
style: "button.primary",
action: { type: "open_url", bind: "data.url" }
@@ -49,14 +72,23 @@ function normCat(post) {
}
export function getTemplateKeyForPost(post) {
- // Future mapping: if (post.template_id === 101) return "news";
return normCat(post);
}
export function getTemplateSpecForPost(post, variant /* "mini"|"full" */) {
const key = getTemplateKeyForPost(post);
const t = TEMPLATE_SPECS[key] || TEMPLATE_SPECS.news;
- return variant === "full" ? t.full_spec : t.mini_spec;
+
+ if (variant === "full") {
+ try {
+ if (typeof window !== "undefined" && window.innerWidth <= 640 && t.full_spec_mobile) {
+ return t.full_spec_mobile;
+ }
+ } catch {}
+ return t.full_spec;
+ }
+
+ return t.mini_spec;
}
export function adaptPostToTemplateData(post) {
diff --git a/src/styles/layout.css b/src/styles/layout.css
index 4510a6b..a6f94d4 100644
--- a/src/styles/layout.css
+++ b/src/styles/layout.css
@@ -1,5 +1,20 @@
.app-root{ min-height:100vh; display:flex; flex-direction:column; }
-/* IMPORTANT: allow scrolling under the map */
+/* allow scrolling under the map */
.main-shell{ flex: 0 0 auto; display:block; padding:0; }
-.map-shell{ position:relative; width:100%; height:62vh; border-radius:0; overflow:hidden; border:none; background:#020617; }
+
+/* MAP HEIGHT (make map taller so Sociowall/Chat sit lower) */
+.map-shell{
+ position:relative;
+ width:100%;
+ height:68vh;
+ border-radius:0;
+ overflow:hidden;
+ border:none;
+ background:#020617;
+}
+
+/* Phones: taller map => wall+chat lower */
+@media (max-width: 640px){
+ .map-shell{ height:76vh; }
+}
diff --git a/src/styles/map.css b/src/styles/map.css
index 7fbb292..1e33848 100644
--- a/src/styles/map.css
+++ b/src/styles/map.css
@@ -1,13 +1,18 @@
-.map-page { display: flex; flex-direction: column; }
+.map-page {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+}
-/* Map stage (visible first). Then you scroll down for the wall. */
+/* Map stage should fill the map-shell height (no competing vh/clamp here) */
.map-stage {
position: relative;
width: 100%;
- height: clamp(520px, 72vh, 860px);
+ height: 100%;
}
-.map-container, .maplibre-container {
+.map-container,
+.maplibre-container {
position: absolute;
inset: 0;
width: 100%;
@@ -26,17 +31,19 @@
}
/* Below map area */
-.below-stage{
- padding: 0.25rem 0.7rem 1.0rem;
+.below-stage {
+ padding: 0.25rem 0.7rem 1rem;
}
-.below-row{
- display:flex;
- gap:.6rem;
- align-items:stretch;
+
+.below-row {
+ display: flex;
+ gap: 0.6rem;
+ align-items: stretch;
}
/* Mobile: stack */
-@media (max-width: 640px){
- .map-stage{ height: clamp(520px, 78vh, 900px); }
- .below-row{ flex-direction: column; }
+@media (max-width: 640px) {
+ .below-row {
+ flex-direction: column;
+ }
}
diff --git a/src/styles/mapMarkers.css b/src/styles/mapMarkers.css
index 41a7962..9fd4f6a 100644
--- a/src/styles/mapMarkers.css
+++ b/src/styles/mapMarkers.css
@@ -633,3 +633,34 @@
.post-pin--expanded .post-card-footer{ gap: 5px !important; }
.post-pin--expanded .post-card-btn{ font-size: 10px !important; padding: 3px 7px !important; }
}
+
+/* === FINAL OVERRIDES (safe) === */
+
+/* Keep pointers unchanged; only scale the mini template card */
+.sw-template-mini-wrap{
+ transform: translate(-50%, calc(-100% - 12px)) scale(0.62) !important;
+ transform-origin: bottom center;
+}
+
+@media (max-width: 640px){
+ .sw-template-mini-wrap{
+ transform: translate(-50%, calc(-100% - 12px)) scale(0.52) !important;
+ }
+}
+
+
+/* === SW MOBILE: make expanded popup shorter (no pointer change) === */
+@media (max-width: 640px){
+ .post-pin--expanded .post-card{
+ max-height: 58vh !important;
+ overflow: auto !important;
+ -webkit-overflow-scrolling: touch;
+ }
+ /* keep right panel from making it tall */
+ .sw-expanded-right{
+ display:none !important;
+ }
+ .sw-news-generated{
+ margin-top: 8px;
+ }
+}
diff --git a/src/styles/posts.css b/src/styles/posts.css
index 39bf383..563f856 100644
--- a/src/styles/posts.css
+++ b/src/styles/posts.css
@@ -5,6 +5,7 @@
align-items:stretch;
}
+/* Panels */
.sociowall-panel {
flex: 1.8;
min-height: 160px;
@@ -26,7 +27,7 @@
margin-bottom:.25rem;
}
-.post-list { flex: 1; overflow-y: auto; padding-right: .15rem; max-height: 44vh; }
+.post-list { flex: 1; overflow-y: auto; padding-right: .15rem; max-height: 42vh; }
.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; }
@@ -55,8 +56,6 @@
border-color: #bfdbfe;
box-shadow: 0 0 16px rgba(56,189,248,.6), 0 10px 22px rgba(15,23,42,.98);
}
-.post-card h3 { margin:0 0 .12rem 0; font-size:.8rem; }
-.post-card p { margin:0; font-size:.72rem; opacity:.9; }
.chat-panel {
width: 170px;
@@ -69,7 +68,6 @@
display:flex;
flex-direction:column;
- /* stays visible beside wall while scrolling inside the list */
position: sticky;
top: 10px;
align-self: flex-start;
@@ -87,11 +85,18 @@
.chat-users li { display:flex; align-items:center; gap:.3rem; padding:.18rem .1rem; }
.chat-users li::before { content:"👤"; font-size:.72rem; opacity:.9; }
-/* Mobile: stack */
+/* ✅ MOBILE: keep chat BESIDE sociowall (no stacking) */
@media (max-width: 640px){
- .below-row{ flex-direction: column; }
- .chat-panel{ width: 100%; min-width: 0; position: static; }
- .post-list{ max-height: 46vh; }
+ .below-row{ flex-direction: row; }
+ .sociowall-panel{ flex: 2.2; }
+ .chat-panel{
+ width: 34vw;
+ min-width: 140px;
+ max-width: 180px;
+ position: static;
+ top: auto;
+ }
+ .post-list{ max-height: 36vh; }
}
/* Guard: never render Sociowall overlay on top of the map */