diff --git a/PLAN.md b/PLAN.md
index 96b01c3..488cf6f 100644
--- a/PLAN.md
+++ b/PLAN.md
@@ -33,7 +33,9 @@ Ideascape is in **Exploration mode**. Published entries are concept previews, no
- [x] Expand the catalog with bold, measurable infrastructure concepts and explicit operating boundaries
- [x] Refine broad launch previews into bounded tests with decision-grade evidence
- [x] Replace generic previews with issue-driven Colorado Springs civic campaigns
+- [x] Give every demo a threat scenario, control boundary, and proof requirement consistent with the security claim policy
- [x] Add persistent light and dark themes
+- [x] Restrict the rendered palette to black, white, neutral grays, and bright orange
## Phase 3 — Validation evidence and campaign design
diff --git a/README.md b/README.md
index 86ed6e4..4076131 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,7 @@ Ideascape is an exploration-mode concept-validation platform for learning which
- Public, unauthenticated idea discovery at `/ideas` and detail pages at `/ideas/:slug`
- Twenty-one deterministic demo concepts, seeded through versioned Supabase migrations
+- A concept-specific security case on every demo: threat scenario, control boundary, and proof required before expansion
- Three issue-driven Colorado Springs campaigns covering plate-reader surveillance, dangerous crossings, and inaccessible transit stops
- URL-persistent text search and category filtering, including a direct permission-first technology view at `/ideas?category=technology`
- Same-category recommendations on detail pages with accessible full-card links back into the catalog
@@ -32,7 +33,8 @@ Ideascape is an exploration-mode concept-validation platform for learning which
- Email/password, Google, and GitHub OAuth-capable authentication with safe post-auth return paths
- Public member profiles plus owner-only profile updates
- Private creator drafts and editing at `/ideas/new` and `/ideas/:id/edit`
-- Persistent, system-aware light and dark themes using the warm orange visual system
+- Persistent, system-aware light and dark themes restricted to black, white,
+ neutral grays, and `#ff5a1f` bright orange
- Route-level code splitting for non-home pages
- Supabase row-level security and pgTAP coverage for profiles, ideas, media, categories, and interest signals
@@ -64,7 +66,7 @@ Fresh databases contain these published concept previews:
20. [Model Commons Lab](https://ideascape-gamma.vercel.app/ideas/model-commons-lab)
21. [Flock Off Colorado Springs](https://ideascape-gamma.vercel.app/ideas/glass-box-sensor-network)
-Each concept uses a stable UUID and slug, polished multi-paragraph copy, and a locally hosted SVG illustration so local resets and production verification remain reproducible. The earliest five broad previews now define bounded first tests, required permissions, privacy limits, measurable continuation evidence, and explicit stop conditions instead of assuming that backing or an operating program already exists. Those five concepts and Project Time Capsule also ask one focused, private-answer validation question so practical demand, permissions, and pilot capability can be evaluated as aggregate evidence rather than public member activity. Three previously generic previews are now sharp Colorado Springs campaigns: challenge the plate-reader dragnet through public records and lawful organizing, force a dangerous Academy Boulevard crossing into the engineering record, and turn Mountain Metro's own accessibility findings into five concrete stop fixes. Technology-forward previews remain permission-first: device and home-lab work stays inside written scope, compute jobs follow transparent acceptable-use controls, mesh nodes use legal spectrum and opt-in relays, repair documentation has lawful provenance, software archives preserve license provenance, heat recovery fails back to the original cooling path, and local-model comparisons use approved task packs.
+Each concept uses a stable UUID and slug, polished multi-paragraph copy, and a locally hosted SVG illustration so local resets and production verification remain reproducible. Every demo now uses the landing page's security-claim discipline: it names a concrete threat scenario, an authorization, privacy, safety, provenance, or fail-safe control boundary, and measurable proof required before the concept earns a larger test. The earliest five broad previews define bounded first tests, required permissions, privacy limits, measurable continuation evidence, and explicit stop conditions instead of assuming that backing or an operating program already exists. Those five concepts and Project Time Capsule also ask one focused, private-answer validation question so practical demand, permissions, and pilot capability can be evaluated as aggregate evidence rather than public member activity. Three previously generic previews are now sharp Colorado Springs campaigns: challenge the plate-reader dragnet through public records and lawful organizing, force a dangerous Academy Boulevard crossing into the engineering record, and turn Mountain Metro's own accessibility findings into five concrete stop fixes.
## Stack
diff --git a/docs/PROJECT_STATUS.md b/docs/PROJECT_STATUS.md
index d56e8fd..94ee749 100644
--- a/docs/PROJECT_STATUS.md
+++ b/docs/PROJECT_STATUS.md
@@ -19,7 +19,7 @@ Ideascape is in **Exploration mode**. The twenty-one published entries are conce
## Current focus
-1. Learn which concepts produce practical participation intent, not only passive curiosity.
+1. Learn which concepts produce practical participation intent, not only passive curiosity, while testing each one inside a published security case.
2. Use focused private-answer questions across six bounded concepts to test practical demand, permissions, and pilot capability through aggregate evidence.
3. Use the Project Time Capsule readiness dashboard to compare aggregate evidence with the published continue, revise, and archive thresholds.
4. Use the private operations dashboard to watch aggregate membership, concepts, validation, pilot intake, and published-concept activity without opening respondent-level records.
@@ -28,13 +28,15 @@ Ideascape is in **Exploration mode**. The twenty-one published entries are conce
## Delivered
- React/TypeScript/Vite application foundation, CI, and route-level code splitting
-- Responsive orange visual system with persistent system-aware light and dark themes
+- Responsive light/dark visual system restricted to black, white, neutral grays,
+ and `#ff5a1f` bright orange
- Supabase authentication with email, Google, and GitHub-capable OAuth flows
- Safe internal return paths across email authentication, OAuth, and callback failures
- Public profiles with owner-only updates
- Idea, category, media, lifecycle, and private interest-signal schema
- Private draft creation and editing
- Public idea discovery and detail routes with twenty-one deterministic demo concepts, including thirteen permission-first or technology-forward previews
+- Catalog badges and detail-page security cases connecting all twenty-one demos to a concrete threat scenario, control boundary, and proof requirement
- Three localized Colorado Springs campaigns with explicit demands, public-record evidence, permitted field tests, and anti-tampering boundaries
- Five early previews refined into bounded, permissioned tests with measurable continue, revise, and stop evidence
- Shareable, URL-persistent discovery search and category filters with useful zero-result recovery
diff --git a/index.html b/index.html
index 4ba3bb4..4161a8c 100644
--- a/index.html
+++ b/index.html
@@ -7,7 +7,7 @@
name="description"
content="Explore IdeaScape concept previews and signal which ideas you would like to see happen. No payment or commitment."
/>
-
+
diff --git a/src/App.test.tsx b/src/App.test.tsx
index a191414..27fe2d0 100644
--- a/src/App.test.tsx
+++ b/src/App.test.tsx
@@ -200,6 +200,9 @@ describe("App", () => {
name: /security before custody/i,
});
expect(securityModel).toHaveTextContent(/no custody is live/i);
+ expect(securityModel).toHaveTextContent(
+ /every seeded concept.*threat scenario.*control boundary.*proof required/i,
+ );
expect(
within(securityModel).getByRole("heading", {
name: /a milestone is claimed too early/i,
diff --git a/src/App.tsx b/src/App.tsx
index fbea882..14d0f52 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -265,11 +265,11 @@ function HomePage() {
Field sample / 021
- Permission checked
+ Permission checked