feat(mobile): rooms, live and upload capture, and the altitude-band identity

The Now feed mixes sensor, eye, track, number, witness and room cards
across Orbit, Sky, Ground and Inside, ordered so neighbours differ, with
composited thumbnails and live public-camera frames.

Every situation has a room: typed, place- and time-anchored posts,
evidence badges, bridging-rated notes and a cited Known / Disputed /
Unknown local synthesis, with cross-tab presence over BroadcastChannel.
Example posts are labelled as such.

Capture adds Live (10 s segments sealed into a hash chain, shown on the
globe as a view frustum) and Upload (EXIF placement, Unverified tier),
and an attach sheet that files any capture into a nearby situation.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01VVYRAqiQj9Y1V9ZfG1RcDH
This commit is contained in:
Claude committed 2026-10-19 02:49:03 +00:00
1 parent ba1673a6db
commit 8b7fcb09df
38 files changed
+9837 -1081

No files matched your search

+19 -23
View File
@@ -20,7 +20,7 @@
display: block;
width: 100%;
text-align: left;
border-radius: 24px;
border-radius: 8px;
overflow: hidden;
background: var(--ground-2);
box-shadow: inset 0 0 0 0.5px var(--hairline);
@@ -200,7 +200,7 @@
.th-ba.big {
height: auto;
aspect-ratio: 16 / 10;
border-radius: 20px;
border-radius: 8px;
overflow: hidden;
margin: 4px 0 14px;
}
@@ -311,7 +311,7 @@
}
.obs-list {
border-radius: 18px;
border-radius: 8px;
background: var(--ground-2);
overflow: hidden;
}
@@ -443,7 +443,7 @@
.hyp {
padding: 12px 14px;
border-radius: 18px;
border-radius: 8px;
background: var(--ground-2);
box-shadow: inset 3px 0 0 var(--orbit);
}
@@ -607,7 +607,7 @@
min-height: 36px;
min-width: 44px;
padding: 0 8px;
border-radius: 18px;
border-radius: 8px;
font-size: var(--t-cap);
font-weight: 700;
color: var(--ink-2);
@@ -631,7 +631,7 @@
.composer {
margin-top: 14px;
padding: 12px;
border-radius: 18px;
border-radius: 8px;
background:
linear-gradient(
160deg,
@@ -686,7 +686,7 @@
align-items: center;
gap: 14px;
padding: 12px;
border-radius: 20px;
border-radius: 8px;
background:
linear-gradient(120deg, rgba(255, 209, 102, 0.14), transparent),
var(--ground-2);
@@ -784,7 +784,7 @@
.ledger {
position: relative;
border-radius: 18px;
border-radius: 8px;
background: var(--ground-1);
box-shadow: inset 0 0 0 0.5px var(--hairline);
padding: 4px 0;
@@ -997,17 +997,13 @@
display: grid;
place-items: center;
font-size: 1.6rem;
color: #05070b;
background: conic-gradient(
from 200deg,
var(--sky),
var(--orbit),
var(--hazards),
var(--eyes),
var(--ground-sig),
var(--sea),
var(--sky)
);
color: var(--b-inside);
background:
radial-gradient(circle, rgba(235, 199, 119, 0.12), transparent 70%),
var(--ground-2);
box-shadow:
inset 0 0 0 1.5px var(--b-inside),
0 0 0 4px rgba(235, 199, 119, 0.08);
}
.you-id b {
@@ -1026,7 +1022,7 @@
gap: 4px;
margin: 0 calc(var(--gutter) + var(--safe-r)) 0
calc(var(--gutter) + var(--safe-l));
border-radius: 18px;
border-radius: 8px;
overflow: hidden;
}
@@ -1069,7 +1065,7 @@
margin: 0 calc(var(--gutter) + var(--safe-r)) 0
calc(var(--gutter) + var(--safe-l));
padding: 22px 18px;
border-radius: 18px;
border-radius: 8px;
border: 1px dashed rgba(255, 255, 255, 0.12);
text-align: center;
color: var(--ink-3);
@@ -1086,7 +1082,7 @@
margin: 0 calc(var(--gutter) + var(--safe-r)) 0
calc(var(--gutter) + var(--safe-l));
padding: 16px;
border-radius: 18px;
border-radius: 8px;
display: flex;
gap: 14px;
align-items: center;
@@ -1167,7 +1163,7 @@
gap: 12px;
align-items: flex-start;
padding: 14px;
border-radius: 18px;
border-radius: 8px;
font-size: var(--t-cap);
color: var(--ink-3);
line-height: 1.4;