docs(style): document R2/Farsight design system and align frontend neutral tokens
Some checks are pending
Holocron Frontend CI / lint-and-test (push) Waiting to run
Some checks are pending
Holocron Frontend CI / lint-and-test (push) Waiting to run
- Add docs/STYLE.md describing the .settings/style reference, per-surface reproduction, and how holocron-frontend / holocron-sim docs map to it - Link the design system from README.md and AGENTS.md - Nudge holocron-frontend default-dark neutral tokens to reference values (bg-primary, text-primary/secondary/muted); keep tactical accents
This commit is contained in:
parent
ab72f2979c
commit
29e5bb3a8d
5 changed files with 124 additions and 5 deletions
|
|
@ -6,10 +6,11 @@
|
|||
{"_type":"issue","id":"holo-d8j.4","title":"git mv 7 component directories (holochron-* → holocron-*)","description":"After sed pass: git mv holochron-{cesium,frontend,keycloak,keycloak-postgresql,proxy,sim,trigger} → holocron-*. Preserves history. Run §5.3 special filename check after; rename leftovers with git mv individually.","acceptance_criteria":"7 dirs renamed; §5.3 grep clean; single commit.","status":"closed","priority":1,"issue_type":"task","owner":"joshua@innovationhub-act.org","created_at":"2026-05-25T12:47:12Z","created_by":"Joshua Belke","updated_at":"2026-05-28T13:31:13Z","closed_at":"2026-05-28T13:31:13Z","close_reason":"Directories already renamed by user (holochron-* → holocron-*); git detected renames via similarity index when staged.","dependencies":[{"issue_id":"holo-d8j.4","depends_on_id":"holo-d8j","type":"parent-child","created_at":"2026-05-25T08:47:12Z","created_by":"Joshua Belke","metadata":"{}"},{"issue_id":"holo-d8j.4","depends_on_id":"holo-d8j.3","type":"blocks","created_at":"2026-05-25T08:47:58Z","created_by":"Joshua Belke","metadata":"{}"}],"dependency_count":1,"dependent_count":2,"comment_count":0}
|
||||
{"_type":"issue","id":"holo-d8j.1","title":"Pre-flight: checkpoint r2d2 WIP, cut refactor/holocron-rename from dev","description":"Before any rename work: (1) commit or stash r2d2 WIP (staged .beads/issues.jsonl, modified vite.config.ts, untracked docker-compose.yml, .settings/kubeconfig.r2d2, holochron-frontend/.dual-graph/, holochron-frontend/CLAUDE.md). (2) git checkout dev \u0026\u0026 git pull --rebase. (3) git checkout -b refactor/holocron-rename. (4) make down + clean target/ + clean .dual-graph/ per plan §3.","acceptance_criteria":"On branch refactor/holocron-rename off latest dev; working tree clean; build artifacts cleaned.","status":"closed","priority":1,"issue_type":"task","owner":"joshua@innovationhub-act.org","created_at":"2026-05-25T12:47:11Z","created_by":"Joshua Belke","updated_at":"2026-05-28T13:31:12Z","closed_at":"2026-05-28T13:31:12Z","close_reason":"Branch cut deferred; user proceeded directly on r2d2 branch with the rename.","dependencies":[{"issue_id":"holo-d8j.1","depends_on_id":"holo-d8j","type":"parent-child","created_at":"2026-05-25T08:47:11Z","created_by":"Joshua Belke","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0}
|
||||
{"_type":"issue","id":"holo-d8j","title":"[epic] Refactor HALOCHRON → HOLOCRON site-wide rename","description":"Site-wide rename of all case variants of HALOCHRON/holochron → HOLOCRON/holocron per .settings/features/feature-refactor-holocron.md. ~3,177 text occurrences, 7 directory renames, 2 submodule path entries. Parent dir rename done by user after this epic completes.","status":"open","priority":1,"issue_type":"epic","owner":"joshua@innovationhub-act.org","created_at":"2026-05-25T12:46:52Z","created_by":"Joshua Belke","updated_at":"2026-05-25T12:46:52Z","dependency_count":0,"dependent_count":0,"comment_count":0}
|
||||
{"_type":"issue","id":"holo-jpa.3","title":"Build Holocron data mapping, dynamic layers, and Kubernetes configuration","description":"Implement the data-mapping and deployment configuration portion of the Holocron plan. Make layer/source mappings configurable from YAML and visible in the frontend, then package the app for Kubernetes as holocron at holocron.r2d2.office.ilab.zone.\n\nScope:\n- Add LayerDefinition/source mapping types and normalize YAML source config.\n- Derive display layers from source config plus existing UAV/USV/UUV/UGV/Contacts/Fused defaults.\n- Update layer filtering, ControlPanel, ReportPanel, and SettingsModal to support dynamic source-backed layers.\n- Add a frontend configuration UI to inspect/toggle sources and layer visibility.\n- Create deployment artifacts under deploy/holocron with Deployment, Service, Ingress, ConfigMap, Secret references, NetworkPolicy, values-production.yaml, and README.\n- Use holocron spelling in Kubernetes resource names, labels, image names, hostnames, and deployment docs.\n- Configure production host holocron.r2d2.office.ilab.zone and WS_PUBLIC_URL=wss://holocron.r2d2.office.ilab.zone/ws.\n- Keep the local YAML object fallback and local compose validation path working.","acceptance_criteria":"- Dynamic layers can be created from source config and toggled in the app.\n- Existing UAV/USV/UUV/UGV/Contacts/Fused behavior is preserved.\n- Settings exposes source/layer configuration without showing secrets.\n- Helm or Kubernetes manifests render deployable holocron resources for production.\n- Production values include holocron.r2d2.office.ilab.zone and runtime-mounted source config.\n- Tests cover layer mapping/reporting and source configuration behavior.\n- Deployment docs explain local validation, required secrets, install/upgrade, and rollback.","spec_id":"docs/plans/2026-05-24-holocron-k8s-mqtt-r2d2-integration.md","status":"in_progress","priority":1,"issue_type":"feature","assignee":"Joshua Belke","owner":"joshua@innovationhub-act.org","created_at":"2026-05-24T22:50:06Z","created_by":"Joshua Belke","updated_at":"2026-06-02T04:52:15Z","started_at":"2026-06-02T04:52:15Z","labels":["data-mapping","holocron","k8s","layers"],"dependencies":[{"issue_id":"holo-jpa.3","depends_on_id":"holo-jpa","type":"parent-child","created_at":"2026-05-24T18:50:06Z","created_by":"Joshua Belke","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
|
||||
{"_type":"issue","id":"holo-jpa.3","title":"Build Holocron data mapping, dynamic layers, and Kubernetes configuration","description":"Implement the data-mapping and deployment configuration portion of the Holocron plan. Make layer/source mappings configurable from YAML and visible in the frontend, then package the app for Kubernetes as holocron at holocron.r2d2.office.ilab.zone.\n\nScope:\n- Add LayerDefinition/source mapping types and normalize YAML source config.\n- Derive display layers from source config plus existing UAV/USV/UUV/UGV/Contacts/Fused defaults.\n- Update layer filtering, ControlPanel, ReportPanel, and SettingsModal to support dynamic source-backed layers.\n- Add a frontend configuration UI to inspect/toggle sources and layer visibility.\n- Create deployment artifacts under deploy/holocron with Deployment, Service, Ingress, ConfigMap, Secret references, NetworkPolicy, values-production.yaml, and README.\n- Use holocron spelling in Kubernetes resource names, labels, image names, hostnames, and deployment docs.\n- Configure production host holocron.r2d2.office.ilab.zone and WS_PUBLIC_URL=wss://holocron.r2d2.office.ilab.zone/ws.\n- Keep the local YAML object fallback and local compose validation path working.","acceptance_criteria":"- Dynamic layers can be created from source config and toggled in the app.\n- Existing UAV/USV/UUV/UGV/Contacts/Fused behavior is preserved.\n- Settings exposes source/layer configuration without showing secrets.\n- Helm or Kubernetes manifests render deployable holocron resources for production.\n- Production values include holocron.r2d2.office.ilab.zone and runtime-mounted source config.\n- Tests cover layer mapping/reporting and source configuration behavior.\n- Deployment docs explain local validation, required secrets, install/upgrade, and rollback.","notes":"K8s packaging + deploy DONE (2026-06-02): created Helm chart deploy/holocron (Chart.yaml, values.yaml, values.override.yaml, templates: deployment/service/ingress/configmap/secret/mosquitto/networkpolicy/NOTES). Built+pushed git.office.ilab.zone/raid/r2d2-holocron:sha-fab7c7c. Deployed to ns 'holocron': frontend + in-cluster mosquitto, nginx Ingress holocron.r2d2.office.ilab.zone (/ws-\u003e9002, /-\u003e3001). Verified via port-forward: /health 200 mqtt=connected, / 200, /api/config wsUrl=wss://.../ws, NO frame headers (iframe-safe). Reconfigured .settings/deploy skill+env for holocron. REMAINING for this bead: source registry types, multi-MQTT subs, dynamic layers, Settings source UI, R2-D2 REST adapter (plan Tasks 1-7). BLOCKER for public access: office edge must register holocron.r2d2 (Caddy/174.77.95.250) like flora/farsight.","spec_id":"docs/plans/2026-05-24-holocron-k8s-mqtt-r2d2-integration.md","status":"in_progress","priority":1,"issue_type":"feature","assignee":"Joshua Belke","owner":"joshua@innovationhub-act.org","created_at":"2026-05-24T22:50:06Z","created_by":"Joshua Belke","updated_at":"2026-06-02T05:01:32Z","started_at":"2026-06-02T04:52:15Z","labels":["data-mapping","holocron","k8s","layers"],"dependencies":[{"issue_id":"holo-jpa.3","depends_on_id":"holo-jpa","type":"parent-child","created_at":"2026-05-24T18:50:06Z","created_by":"Joshua Belke","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
|
||||
{"_type":"issue","id":"holo-jpa.2","title":"Integrate R2-D2 data and feed APIs","description":"Implement the R2-D2 external API portion of the Holocron plan once endpoint details are available. Model R2-D2 APIs as configurable server-side data sources so reference data and feeds can be enabled, disabled, cached, transformed, and rendered as app layers without exposing credentials to the browser.\n\nScope:\n- Add r2d2-rest source kind support.\n- Add server-side R2-D2 client and source cache.\n- Integrate data API endpoints for bases, ports, ICAOs, and related reference data.\n- Integrate feeds API endpoints such as critical underwater infrastructure.\n- Read base URLs and tokens from environment/Kubernetes secrets.\n- Return redacted source/auth status in config endpoints.\n- Surface stale/error state without blocking app startup.\n\nDetails still needed:\n- Base URLs for local/staging/production.\n- Auth method and required headers.\n- Example payloads for bases, ports, ICAOs, and feed items.\n- Pagination/filtering/cache semantics.\n- Refresh cadence and payload size expectations.\n- Feed geometry and display metadata requirements.","acceptance_criteria":"- R2-D2 credentials are server-only and redacted in all browser-visible config.\n- Enabled R2-D2 REST sources can be fetched through a server endpoint such as /api/sources/:sourceId/data.\n- Bases, ports, ICAOs, and feed items are transformed into map-ready assets or overlays with source/layer metadata.\n- API failure produces visible source error/stale state and does not crash the app.\n- Unit tests cover R2-D2 response transforms using fixture payloads.\n- Implementation is blocked until API contracts and sample payloads are provided.","spec_id":"docs/plans/2026-05-24-holocron-k8s-mqtt-r2d2-integration.md","status":"open","priority":1,"issue_type":"feature","owner":"joshua@innovationhub-act.org","created_at":"2026-05-24T22:49:55Z","created_by":"Joshua Belke","updated_at":"2026-05-24T22:49:55Z","labels":["api","feeds","holocron","r2d2"],"dependencies":[{"issue_id":"holo-jpa.2","depends_on_id":"holo-jpa","type":"parent-child","created_at":"2026-05-24T18:49:55Z","created_by":"Joshua Belke","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
|
||||
{"_type":"issue","id":"holo-jpa.1","title":"Implement configurable MQTT source integrations","description":"Implement the MQTT portion of the Holocron source plan. Replace the single hard-coded MQTT topic derived from MQTT_TOPIC_PREFIX with a source registry that can subscribe to multiple enabled topic groups such as demo, synthetic, exercise, and production. Keep local Mosquitto compatibility while allowing production to point at the cluster/R2-D2 broker.\n\nScope:\n- Add config/sources/config.yaml entries for MQTT sources.\n- Serve normalized source config from /api/config and /api/config/sources.\n- Subscribe server.cjs to all enabled MQTT topics.\n- Include sourceId, sourceLabel, and layer metadata in WebSocket asset_update messages.\n- Update publish allowlisting to use per-source publish_prefix values.\n- Preserve the existing single-topic local dev behavior as a fallback.","acceptance_criteria":"- /api/config/sources exposes demo, synthetic, exercise, and production-capable MQTT source definitions.\n- server.cjs subscribes to every enabled MQTT source topic after broker connection.\n- WebSocket clients receive source metadata for MQTT messages.\n- Publishing is only allowed to configured source publish prefixes.\n- Local docker compose with Mosquitto still works without a custom sources config.\n- Tests cover source config parsing and WebSocket topic subscription behavior.","spec_id":"docs/plans/2026-05-24-holocron-k8s-mqtt-r2d2-integration.md","status":"open","priority":1,"issue_type":"feature","owner":"joshua@innovationhub-act.org","created_at":"2026-05-24T22:49:44Z","created_by":"Joshua Belke","updated_at":"2026-05-24T22:49:44Z","labels":["holocron","k8s","mqtt"],"dependencies":[{"issue_id":"holo-jpa.1","depends_on_id":"holo-jpa","type":"parent-child","created_at":"2026-05-24T18:49:43Z","created_by":"Joshua Belke","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
|
||||
{"_type":"issue","id":"holo-jpa","title":"Deploy holochron to RAID-K8-ILAB cluster","description":"Stand up holochron in the RKE2 cluster (kubeconfig: .settings/kubeconfig.r2d2). Reachable internally at holocron.r2d2.office.ilab.zone. LoadBalancer via kube-vip (pool 192.168.3.120-220 + .10). Target LB IP: 192.168.3.120. See child issues for breakdown.","status":"open","priority":1,"issue_type":"epic","owner":"joshua@innovationhub-act.org","created_at":"2026-05-22T23:08:38Z","created_by":"Joshua Belke","updated_at":"2026-05-22T23:08:38Z","dependency_count":0,"dependent_count":0,"comment_count":0}
|
||||
{"_type":"issue","id":"holo-81a","title":"Align styling to .settings/style reference (docs + token nudges)","description":"Add docs/STYLE.md documenting the R2/Farsight design system in .settings/style, link from README.md and AGENTS.md, and nudge clearly-drifted structural tokens in holocron-frontend toward the reference palette. No brand reskin.","status":"closed","priority":2,"issue_type":"task","owner":"joshua@innovationhub-act.org","created_at":"2026-06-02T05:01:22Z","created_by":"Joshua Belke","updated_at":"2026-06-02T05:02:57Z","closed_at":"2026-06-02T05:02:57Z","close_reason":"Added docs/STYLE.md, linked from README/AGENTS; nudged frontend neutral tokens to reference palette","dependency_count":0,"dependent_count":0,"comment_count":0}
|
||||
{"_type":"issue","id":"holo-d8j.11","title":"DNS cutover: holochron-{dev,stg}.ilab.zone with TTL pre-lowering (HOL-5)","description":"Cut DNS for holochron-dev.ilab.zone and holochron-stg.ilab.zone. BEFORE cutover: drop TTL to 300s at least 24h ahead so the switch propagates fast. Keep old hostname as CNAME → new during transition, drop later. Coordinate with infra owner.","acceptance_criteria":"TTL lowered 24h+ pre-cutover; new hostnames resolve; old hostnames CNAME to new with sunset date documented.","status":"open","priority":2,"issue_type":"task","owner":"joshua@innovationhub-act.org","created_at":"2026-05-25T12:47:51Z","created_by":"Joshua Belke","updated_at":"2026-05-25T12:47:51Z","dependencies":[{"issue_id":"holo-d8j.11","depends_on_id":"holo-d8j","type":"parent-child","created_at":"2026-05-25T08:47:50Z","created_by":"Joshua Belke","metadata":"{}"},{"issue_id":"holo-d8j.11","depends_on_id":"holo-d8j.8","type":"blocks","created_at":"2026-05-25T08:48:01Z","created_by":"Joshua Belke","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0}
|
||||
{"_type":"issue","id":"holo-d8j.12","title":"MQTT topic prefix change with dual-publish window (HOL-6)","description":"Plan §7 row 3 was hard cutover from r2d2/halochron/* to r2d2/holocron/*. Better: dual-publish during transition window so subscribers migrate without coordination. Update holochron-cesium/server.js, public/app.js, test-publisher to publish on BOTH prefixes until consumers confirm cutover, then retire old prefix. Also purge mosquitto retained messages on old topics post-cutover.","acceptance_criteria":"Dual-publish active in dev/stg; consumer cutover tracked; old prefix retired and retained messages purged.","status":"open","priority":2,"issue_type":"task","owner":"joshua@innovationhub-act.org","created_at":"2026-05-25T12:47:51Z","created_by":"Joshua Belke","updated_at":"2026-05-25T12:47:51Z","dependencies":[{"issue_id":"holo-d8j.12","depends_on_id":"holo-d8j","type":"parent-child","created_at":"2026-05-25T08:47:50Z","created_by":"Joshua Belke","metadata":"{}"},{"issue_id":"holo-d8j.12","depends_on_id":"holo-d8j.8","type":"blocks","created_at":"2026-05-25T08:48:01Z","created_by":"Joshua Belke","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0}
|
||||
{"_type":"issue","id":"holo-d8j.10","title":"SonarQube: rename project key + migrate history (HOL-4)","description":"SonarQube project key 'project-team-holochron-holochron' needs rename. Decide: migrate project (preserves history) vs create new + archive old. Update sonar-project.properties on refactor branch. Coordinate with CI/CD owner.","acceptance_criteria":"New project key live; CI publishes to it; history strategy documented.","status":"open","priority":2,"issue_type":"task","owner":"joshua@innovationhub-act.org","created_at":"2026-05-25T12:47:30Z","created_by":"Joshua Belke","updated_at":"2026-05-25T12:47:30Z","dependencies":[{"issue_id":"holo-d8j.10","depends_on_id":"holo-d8j","type":"parent-child","created_at":"2026-05-25T08:47:30Z","created_by":"Joshua Belke","metadata":"{}"},{"issue_id":"holo-d8j.10","depends_on_id":"holo-d8j.8","type":"blocks","created_at":"2026-05-25T08:48:00Z","created_by":"Joshua Belke","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0}
|
||||
|
|
|
|||
12
AGENTS.md
12
AGENTS.md
|
|
@ -47,6 +47,18 @@ cp -rf source dest # NOT: cp -r source dest
|
|||
- `apt-get` - use `-y` flag
|
||||
- `brew` - use `HOMEBREW_NO_AUTO_UPDATE=1` env var
|
||||
|
||||
## Styling & Design System
|
||||
|
||||
UI styling follows the **R2 / Farsight** aesthetic. The canonical reference is
|
||||
`.settings/style/` — read its `README.md` first. `docs/STYLE.md` documents the
|
||||
palette, fonts, and how each app maps to the reference.
|
||||
|
||||
When adding or editing UI, take colors/fonts/radii/shadows from
|
||||
`.settings/style/`, not from a nearby component. Do **not** reskin either app's
|
||||
brand (`holocron-frontend` tactical accents, `holocron-sim/apps/docs` green Sim
|
||||
brand) to the R2 teal without an explicit decision — those divergences are
|
||||
intentional and recorded in `docs/STYLE.md`.
|
||||
|
||||
<!-- BEGIN BEADS INTEGRATION v:1 profile:minimal hash:7510c1e2 -->
|
||||
## Beads Issue Tracker
|
||||
|
||||
|
|
|
|||
|
|
@ -82,6 +82,14 @@ Flow: `.env` → Compose injects into container → server’s `process.env.MAPT
|
|||
|
||||
Shortly describe the technical stack of the project.
|
||||
|
||||
### Design system
|
||||
|
||||
UI styling follows the **R2 / Farsight** aesthetic. The canonical reference
|
||||
(palette, fonts, Fumadocs + Scalar themes) lives in
|
||||
[`.settings/style/`](.settings/style/README.md); see [`docs/STYLE.md`](docs/STYLE.md)
|
||||
for how the project's apps map to it and which tokens are aligned vs. intentionally
|
||||
divergent.
|
||||
|
||||
## Visible endpoints
|
||||
|
||||
Describe all exposed endpoints of the project.
|
||||
|
|
|
|||
96
docs/STYLE.md
Normal file
96
docs/STYLE.md
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
# Styling & Design System
|
||||
|
||||
The canonical design reference for this project lives in
|
||||
[`.settings/style/`](../.settings/style/README.md). That directory is a
|
||||
self-contained, copy-paste export of the **R2 / Farsight** aesthetic and is the
|
||||
source of truth — read its `README.md` first, then the per-surface files.
|
||||
|
||||
> When in doubt about a color, font, radius, shadow, or spacing token, take the
|
||||
> value from `.settings/style/`, not from an existing component.
|
||||
|
||||
## The aesthetic (R2 / Farsight)
|
||||
|
||||
Dark navy (`#0a0e1a`) surfaces with glassy panels, a **teal** accent
|
||||
(`#2dd4bf`), slate text, a teal→blue→violet brand bar across the top, subtle
|
||||
grid texture behind articles, **Inter** for UI and **JetBrains Mono** for code.
|
||||
|
||||
Core palette (full token list in `.settings/style/tailwind/tailwind.css`):
|
||||
|
||||
| Token | Value | Use |
|
||||
| ------------------ | --------------------------- | ---------------------------- |
|
||||
| `--r2-bg` | `#0a0e1a` | base background (navy) |
|
||||
| `--r2-bg-secondary`| `#111827` | raised surface |
|
||||
| `--r2-border` | `rgba(255,255,255,0.06)` | hairline borders |
|
||||
| `--r2-text` | `#f1f5f9` | primary text (slate-100) |
|
||||
| `--r2-text-secondary`| `#94a3b8` | secondary text (slate-400) |
|
||||
| `--r2-text-muted` | `#64748b` | muted text (slate-500) |
|
||||
| `--r2-accent` | `#2dd4bf` | teal accent / interactive |
|
||||
| `--r2-cyan` | `#22d3ee` | brand bar |
|
||||
| `--r2-blue` | `#3b82f6` | brand bar |
|
||||
| `--r2-violet` | `#8b5cf6` | brand bar |
|
||||
| `--r2-online` | `#10b981` | status: online |
|
||||
| `--r2-offline` | `#ef4444` | status: offline |
|
||||
| `--r2-degraded` | `#f59e0b` | status: degraded |
|
||||
|
||||
Fonts: `Inter` (UI) / `JetBrains Mono` (code). Radii: `6 / 10 / 14px`.
|
||||
Shadows: `--r2-card`, `--r2-card-hover`, `--r2-glow`.
|
||||
|
||||
## Reproducing each surface
|
||||
|
||||
The reference is split by surface — copy the matching folder into a new app:
|
||||
|
||||
- **`fumadocs/`** — the docs-site theme (Fumadocs 16.x + Tailwind v4, CSS-first,
|
||||
no `tailwind.config.js`). `global.css` is the whole theme; the root layout
|
||||
must carry `class="dark"` + `class="r2-theme"` or you get unstyled defaults.
|
||||
- **`scalar/`** — the API-reference GUI. `scalar.tsx` mirrors the R2 palette into
|
||||
Scalar's `--scalar-*` variables; `scalar-settings.md` documents every theme and
|
||||
airgap setting (telemetry off, AI agent disabled, no proxy).
|
||||
- **`tailwind/tailwind.css`** — framework-agnostic Tailwind v4 sheet exposing the
|
||||
palette as utilities (`bg-r2-bg`, `text-r2-accent`, `rounded-r2-md`,
|
||||
`font-r2-mono`, `shadow-r2-card`, …). Put `class="dark"` (or `r2-theme`) on
|
||||
`<html>`.
|
||||
|
||||
Full step-by-step instructions are in `.settings/style/README.md`.
|
||||
|
||||
## How this project's apps map to the reference
|
||||
|
||||
The two front-facing apps predate this export and each keep their own brand. They
|
||||
are **aligned in spirit, not pixel-identical** — that is intentional. Do not
|
||||
reskin either brand to teal without an explicit decision.
|
||||
|
||||
### `holocron-frontend` (Vite + React, Tailwind **v3**)
|
||||
|
||||
Tactical NATO operations UI. Uses a `[data-theme]` CSS-variable system
|
||||
(`src/index.css`) with a default dark theme plus `light` and `netbird` variants.
|
||||
Its **neutral/structural** tokens are aligned to the reference; its **accent /
|
||||
status** colors are deliberately tactical-branded (tactical green, alert red,
|
||||
warning amber) and are *not* the R2 teal.
|
||||
|
||||
| `holocron-frontend` var (default dark) | Reference token | Status |
|
||||
| -------------------------------------- | ---------------------- | ----------------- |
|
||||
| `--bg-primary: #0a0e1a` | `--r2-bg #0a0e1a` | aligned |
|
||||
| `--text-primary: #f1f5f9` | `--r2-text #f1f5f9` | aligned |
|
||||
| `--text-secondary: #94a3b8` | `--r2-text-secondary` | aligned |
|
||||
| `--text-muted: #64748b` | `--r2-text-muted` | aligned |
|
||||
| `--accent-cyan: #39d0d8` | `--r2-accent #2dd4bf` | tactical (kept) |
|
||||
| `--accent-green: #3fb950` | `--r2-online #10b981` | tactical (kept) |
|
||||
| `--accent-red: #f85149` | `--r2-offline #ef4444` | tactical (kept) |
|
||||
| `--warning-amber: #ffb627` | `--r2-degraded #f59e0b`| tactical (kept) |
|
||||
|
||||
> Note: this app is on **Tailwind v3** (`tailwind.config.js`), while the
|
||||
> reference is Tailwind v4 (CSS-first). The palette transfers; the build wiring
|
||||
> does not — don't copy `.settings/style/fumadocs/postcss.config.mjs` here.
|
||||
|
||||
### `holocron-sim/apps/docs` (Next.js + Fumadocs)
|
||||
|
||||
The simulator documentation site. Carries its own **green "Sim" brand**
|
||||
(`--color-fd-primary: #33c482`) with **Geist** fonts and the Fumadocs *neutral*
|
||||
preset — a deliberate divergence from the R2/Farsight teal+Inter docs theme in
|
||||
`.settings/style/fumadocs/`. If this site is ever re-themed to R2, the reference
|
||||
`fumadocs/global.css` is the drop-in target.
|
||||
|
||||
## Changelog
|
||||
|
||||
- 2026-06-02: Created. Nudged `holocron-frontend` neutral tokens
|
||||
(`--bg-primary`, `--text-primary/-secondary/-muted`) to the reference values;
|
||||
documented intentional divergences (tactical accents; Sim-green docs brand).
|
||||
|
|
@ -4,13 +4,15 @@
|
|||
|
||||
/* Design tokens (for components still using var() until fully migrated) */
|
||||
:root {
|
||||
--bg-primary: #0a0e14;
|
||||
/* Neutral/structural tokens aligned to the R2/Farsight reference
|
||||
(.settings/style). Accent/status colors below stay tactical-branded. */
|
||||
--bg-primary: #0a0e1a;
|
||||
--bg-secondary: #151b23;
|
||||
--bg-tertiary: #1e2730;
|
||||
--border-color: #2d3848;
|
||||
--text-primary: #e6edf3;
|
||||
--text-secondary: #8b949e;
|
||||
--text-muted: #6e7681;
|
||||
--text-primary: #f1f5f9;
|
||||
--text-secondary: #94a3b8;
|
||||
--text-muted: #64748b;
|
||||
--accent-cyan: #39d0d8;
|
||||
--accent-green: #3fb950;
|
||||
--accent-yellow: #d29922;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue