@caddis/cli 0.0.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +150 -1
- package/bundles/antigravity-plugin/agents/code-reviewer.md +47 -0
- package/bundles/antigravity-plugin/agents/preflight.md +53 -0
- package/bundles/antigravity-plugin/guard_agy.py +338 -0
- package/bundles/antigravity-plugin/hooks.json +36 -0
- package/bundles/antigravity-plugin/mcp_config.json +8 -0
- package/bundles/antigravity-plugin/mcp_ping_server.py +55 -0
- package/bundles/antigravity-plugin/plugin.json +5 -0
- package/bundles/antigravity-plugin/session_end_agy.py +57 -0
- package/bundles/antigravity-plugin/skills/_registry.md +115 -0
- package/bundles/antigravity-plugin/skills/add-rules/SKILL.md +45 -0
- package/bundles/antigravity-plugin/skills/api-design/SKILL.md +249 -0
- package/bundles/antigravity-plugin/skills/backend-development/SKILL.md +305 -0
- package/bundles/antigravity-plugin/skills/best-practices/SKILL.md +500 -0
- package/bundles/antigravity-plugin/skills/best-practices/agents/best-practices-referencer.md +263 -0
- package/bundles/antigravity-plugin/skills/best-practices/agents/codebase-context-builder.md +326 -0
- package/bundles/antigravity-plugin/skills/best-practices/agents/task-intent-analyzer.md +245 -0
- package/bundles/antigravity-plugin/skills/best-practices/references/anti-patterns.md +571 -0
- package/bundles/antigravity-plugin/skills/best-practices/references/before-after-examples.md +1114 -0
- package/bundles/antigravity-plugin/skills/best-practices/references/best-practices-guide.md +513 -0
- package/bundles/antigravity-plugin/skills/best-practices/references/common-workflows.md +692 -0
- package/bundles/antigravity-plugin/skills/best-practices/references/prompt-patterns.md +547 -0
- package/bundles/antigravity-plugin/skills/brainstorming/SKILL.md +57 -0
- package/bundles/antigravity-plugin/skills/ci-cd-pipeline/SKILL.md +315 -0
- package/bundles/antigravity-plugin/skills/code-documentation/SKILL.md +271 -0
- package/bundles/antigravity-plugin/skills/code-review/SKILL.md +122 -0
- package/bundles/antigravity-plugin/skills/codebase-audit/SKILL.md +204 -0
- package/bundles/antigravity-plugin/skills/context-curator/SKILL.md +157 -0
- package/bundles/antigravity-plugin/skills/cross-review/SKILL.md +40 -0
- package/bundles/antigravity-plugin/skills/css-architecture/SKILL.md +305 -0
- package/bundles/antigravity-plugin/skills/css-architecture/references/RESPONSIVE-DESIGN.md +604 -0
- package/bundles/antigravity-plugin/skills/database-design/SKILL.md +177 -0
- package/bundles/antigravity-plugin/skills/db-diagram/SKILL.md +148 -0
- package/bundles/antigravity-plugin/skills/db-diagram/scripts/sql_to_graph.py +1212 -0
- package/bundles/antigravity-plugin/skills/digress/SKILL.md +61 -0
- package/bundles/antigravity-plugin/skills/draw-io/SKILL.md +162 -0
- package/bundles/antigravity-plugin/skills/draw-io/references/aws-icons.md +677 -0
- package/bundles/antigravity-plugin/skills/draw-io/references/layout-guidelines.md +142 -0
- package/bundles/antigravity-plugin/skills/draw-io/references/troubleshooting.md +118 -0
- package/bundles/antigravity-plugin/skills/draw-io/references/workflows.md +103 -0
- package/bundles/antigravity-plugin/skills/draw-io/scripts/convert-drawio-to-png.sh +25 -0
- package/bundles/antigravity-plugin/skills/draw-io/scripts/find_aws_icon.py +79 -0
- package/bundles/antigravity-plugin/skills/error-handling/SKILL.md +260 -0
- package/bundles/antigravity-plugin/skills/excalidraw-db/SKILL.md +38 -0
- package/bundles/antigravity-plugin/skills/fastapi-dev/SKILL.md +300 -0
- package/bundles/antigravity-plugin/skills/feature-plan/SKILL.md +198 -0
- package/bundles/antigravity-plugin/skills/frontend-design/SKILL.md +193 -0
- package/bundles/antigravity-plugin/skills/frontend-design/references/my-tech-stack.md +127 -0
- package/bundles/antigravity-plugin/skills/gh-cli/SKILL.md +195 -0
- package/bundles/antigravity-plugin/skills/git-commit/SKILL.md +285 -0
- package/bundles/antigravity-plugin/skills/golden-plan/SKILL.md +577 -0
- package/bundles/antigravity-plugin/skills/handoff/SKILL.md +100 -0
- package/bundles/antigravity-plugin/skills/implement/SKILL.md +114 -0
- package/bundles/antigravity-plugin/skills/javascript-typescript/SKILL.md +142 -0
- package/bundles/antigravity-plugin/skills/kb/SKILL.md +60 -0
- package/bundles/antigravity-plugin/skills/mermaid-db/SKILL.md +33 -0
- package/bundles/antigravity-plugin/skills/mermaid-diagrams/SKILL.md +236 -0
- package/bundles/antigravity-plugin/skills/mermaid-diagrams/references/ENHANCEMENTS.md +264 -0
- package/bundles/antigravity-plugin/skills/mermaid-diagrams/references/MERMAID-SUMMARY.md +137 -0
- package/bundles/antigravity-plugin/skills/mermaid-diagrams/references/advanced-features.md +556 -0
- package/bundles/antigravity-plugin/skills/mermaid-diagrams/references/architecture-diagrams.md +192 -0
- package/bundles/antigravity-plugin/skills/mermaid-diagrams/references/c4-diagrams.md +410 -0
- package/bundles/antigravity-plugin/skills/mermaid-diagrams/references/class-diagrams.md +361 -0
- package/bundles/antigravity-plugin/skills/mermaid-diagrams/references/erd-diagrams.md +510 -0
- package/bundles/antigravity-plugin/skills/mermaid-diagrams/references/flowcharts.md +450 -0
- package/bundles/antigravity-plugin/skills/mermaid-diagrams/references/sequence-diagrams.md +394 -0
- package/bundles/antigravity-plugin/skills/mermaid-diagrams/references/troubleshooting.md +335 -0
- package/bundles/antigravity-plugin/skills/mermaid-diagrams/references/workflows.md +418 -0
- package/bundles/antigravity-plugin/skills/migrate-dir/SKILL.md +68 -0
- package/bundles/antigravity-plugin/skills/mockup/SKILL.md +242 -0
- package/bundles/antigravity-plugin/skills/particle-art/SKILL.md +243 -0
- package/bundles/antigravity-plugin/skills/particle-art/references/canvas-utils.ts +171 -0
- package/bundles/antigravity-plugin/skills/particle-art/references/dot-field.template.tsx +203 -0
- package/bundles/antigravity-plugin/skills/particle-art/references/flow-field.template.tsx +263 -0
- package/bundles/antigravity-plugin/skills/particle-art/references/node-shape.template.tsx +261 -0
- package/bundles/antigravity-plugin/skills/particle-art/references/shape-sampler.ts +281 -0
- package/bundles/antigravity-plugin/skills/particle-art/references/stipple-morph.template.tsx +167 -0
- package/bundles/antigravity-plugin/skills/particle-art/references/stipple.template.tsx +175 -0
- package/bundles/antigravity-plugin/skills/particle-art/references/trail-ghost.template.tsx +266 -0
- package/bundles/antigravity-plugin/skills/particle-art/references/usage-examples.md +320 -0
- package/bundles/antigravity-plugin/skills/playwright/API_REFERENCE.md +653 -0
- package/bundles/antigravity-plugin/skills/playwright/SKILL.md +454 -0
- package/bundles/antigravity-plugin/skills/playwright/lib/helpers.js +441 -0
- package/bundles/antigravity-plugin/skills/playwright/package.json +26 -0
- package/bundles/antigravity-plugin/skills/playwright/run.js +228 -0
- package/bundles/antigravity-plugin/skills/prd/SKILL.md +107 -0
- package/bundles/antigravity-plugin/skills/preflight/SKILL.md +435 -0
- package/bundles/antigravity-plugin/skills/python/SKILL.md +388 -0
- package/bundles/antigravity-plugin/skills/react-best-practices/SKILL.md +269 -0
- package/bundles/antigravity-plugin/skills/react-dev/README.md +404 -0
- package/bundles/antigravity-plugin/skills/react-dev/SKILL.md +459 -0
- package/bundles/antigravity-plugin/skills/react-dev/examples/generic-components.md +579 -0
- package/bundles/antigravity-plugin/skills/react-dev/examples/server-components.md +579 -0
- package/bundles/antigravity-plugin/skills/react-dev/references/event-handlers.md +574 -0
- package/bundles/antigravity-plugin/skills/react-dev/references/hooks.md +456 -0
- package/bundles/antigravity-plugin/skills/react-dev/references/react-19-patterns.md +638 -0
- package/bundles/antigravity-plugin/skills/react-dev/references/react-router.md +1002 -0
- package/bundles/antigravity-plugin/skills/react-dev/references/tanstack-router.md +587 -0
- package/bundles/antigravity-plugin/skills/refactoring/SKILL.md +486 -0
- package/bundles/antigravity-plugin/skills/resume/SKILL.md +36 -0
- package/bundles/antigravity-plugin/skills/security-review/SKILL.md +196 -0
- package/bundles/antigravity-plugin/skills/setup-project-ai/SKILL.md +61 -0
- package/bundles/antigravity-plugin/skills/ship/SKILL.md +107 -0
- package/bundles/antigravity-plugin/skills/ship-merge/SKILL.md +103 -0
- package/bundles/antigravity-plugin/skills/ship-pr/SKILL.md +102 -0
- package/bundles/antigravity-plugin/skills/skill-creator/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin/skills/skill-creator/SKILL.md +491 -0
- package/bundles/antigravity-plugin/skills/skill-creator/agents/analyzer.md +274 -0
- package/bundles/antigravity-plugin/skills/skill-creator/agents/comparator.md +202 -0
- package/bundles/antigravity-plugin/skills/skill-creator/agents/grader.md +223 -0
- package/bundles/antigravity-plugin/skills/skill-creator/assets/eval_review.html +146 -0
- package/bundles/antigravity-plugin/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/bundles/antigravity-plugin/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/bundles/antigravity-plugin/skills/skill-creator/references/schemas.md +430 -0
- package/bundles/antigravity-plugin/skills/skill-creator/scripts/__init__.py +0 -0
- package/bundles/antigravity-plugin/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/bundles/antigravity-plugin/skills/skill-creator/scripts/generate_report.py +326 -0
- package/bundles/antigravity-plugin/skills/skill-creator/scripts/improve_description.py +247 -0
- package/bundles/antigravity-plugin/skills/skill-creator/scripts/package_skill.py +136 -0
- package/bundles/antigravity-plugin/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/bundles/antigravity-plugin/skills/skill-creator/scripts/run_eval.py +310 -0
- package/bundles/antigravity-plugin/skills/skill-creator/scripts/run_loop.py +328 -0
- package/bundles/antigravity-plugin/skills/skill-creator/scripts/utils.py +47 -0
- package/bundles/antigravity-plugin/skills/sql/SKILL.md +321 -0
- package/bundles/antigravity-plugin/skills/tdd/SKILL.md +37 -0
- package/bundles/antigravity-plugin/skills/tdd-workflow/SKILL.md +188 -0
- package/bundles/antigravity-plugin/skills/technical-writing/SKILL.md +286 -0
- package/bundles/antigravity-plugin/skills/test-strategy/SKILL.md +155 -0
- package/bundles/antigravity-plugin/skills/ui-brief/SKILL.md +84 -0
- package/bundles/antigravity-plugin/skills/ui-review/SKILL.md +176 -0
- package/bundles/antigravity-plugin/skills/ui-review/references/framework-fixes.md +471 -0
- package/bundles/antigravity-plugin/skills/ui-review/references/visual-checklist.md +236 -0
- package/bundles/antigravity-plugin/skills/usage-review/SKILL.md +77 -0
- package/bundles/antigravity-plugin/skills/use-model/SKILL.md +64 -0
- package/bundles/antigravity-plugin/skills/using-git-worktrees/SKILL.md +217 -0
- package/bundles/antigravity-plugin/skills/version/SKILL.md +18 -0
- package/bundles/antigravity-plugin/skills/warm-editorial-ui/DESIGN_TOKENS.md +487 -0
- package/bundles/antigravity-plugin/skills/warm-editorial-ui/IMPLEMENTATION_GUIDE.md +177 -0
- package/bundles/antigravity-plugin/skills/warm-editorial-ui/SKILL.md +732 -0
- package/bundles/antigravity-plugin/skills/webapp-testing/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin/skills/webapp-testing/SKILL.md +97 -0
- package/bundles/antigravity-plugin/skills/webapp-testing/examples/console_logging.py +35 -0
- package/bundles/antigravity-plugin/skills/webapp-testing/examples/element_discovery.py +40 -0
- package/bundles/antigravity-plugin/skills/webapp-testing/examples/static_html_automation.py +33 -0
- package/bundles/antigravity-plugin/skills/webapp-testing/scripts/with_server.py +106 -0
- package/bundles/antigravity-plugin/skills/windows-deployment/SKILL.md +880 -0
- package/bundles/antigravity-plugin/skills/writing-plans/SKILL.md +384 -0
- package/bundles/antigravity-plugin/statusline-command-agy.sh +91 -0
- package/bundles/antigravity-plugin/warm_start_agy.py +149 -0
- package/bundles/manifest.json +6 -0
- package/dist/cli.js +5363 -0
- package/package.json +61 -4
|
@@ -0,0 +1,487 @@
|
|
|
1
|
+
# RevSight Design Tokens
|
|
2
|
+
|
|
3
|
+
This document captures the current visual token system used by the RevSight mockup in `mobile-revenue-assurance/project`.
|
|
4
|
+
|
|
5
|
+
Source of truth:
|
|
6
|
+
- `styles.css` for theme tokens
|
|
7
|
+
- `src/shell.jsx` for selectable accent options
|
|
8
|
+
|
|
9
|
+
## Design Direction
|
|
10
|
+
|
|
11
|
+
The current theme uses:
|
|
12
|
+
- Warm neutral light surfaces
|
|
13
|
+
- Cool slate dark surfaces
|
|
14
|
+
- A strong operational red as the default brand/accent
|
|
15
|
+
- A premium solid-control treatment for search, dropdowns, compact buttons, and filter chips
|
|
16
|
+
- Utility-oriented semantic colors for success, warning, error, and info states
|
|
17
|
+
|
|
18
|
+
Default accent:
|
|
19
|
+
- `Signal Red`
|
|
20
|
+
|
|
21
|
+
Default fonts:
|
|
22
|
+
- Primary UI: `DM Sans`
|
|
23
|
+
- Data-heavy tables: `IBM Plex Sans`
|
|
24
|
+
- Mono/code/IDs: `JetBrains Mono`
|
|
25
|
+
|
|
26
|
+
## Light Theme Tokens
|
|
27
|
+
|
|
28
|
+
### Brand
|
|
29
|
+
|
|
30
|
+
- `--brand-primary`: `#E10A0A`
|
|
31
|
+
- `--brand-primary-strong`: `#B90707`
|
|
32
|
+
- `--brand-primary-soft`: `#FFECEC`
|
|
33
|
+
- `--brand-primary-tint`: `#FFF3F3`
|
|
34
|
+
|
|
35
|
+
### Accent Options
|
|
36
|
+
|
|
37
|
+
- `Signal Red`: `#E10A0A`
|
|
38
|
+
- `Cobalt`: `#2563EB`
|
|
39
|
+
- `Evergreen`: `#15803D`
|
|
40
|
+
- `Slate`: `#334155`
|
|
41
|
+
|
|
42
|
+
### Surfaces
|
|
43
|
+
|
|
44
|
+
- `--bg-default`: `#F2EFEB`
|
|
45
|
+
- `--bg-subtle`: `#EEE8E0`
|
|
46
|
+
- `--surface-default`: `#FFFFFF`
|
|
47
|
+
- `--surface-subtle`: `#F6F3EF`
|
|
48
|
+
- `--card-default`: `#FFFFFF`
|
|
49
|
+
|
|
50
|
+
### Text
|
|
51
|
+
|
|
52
|
+
- `--text-primary`: `#11100F`
|
|
53
|
+
- `--text-secondary`: `#2D2925`
|
|
54
|
+
- `--text-muted`: `#5B554E`
|
|
55
|
+
- `--text-muted-2`: `#81786F`
|
|
56
|
+
|
|
57
|
+
### Borders
|
|
58
|
+
|
|
59
|
+
- `--border-default`: `#D8D1C7`
|
|
60
|
+
- `--border-subtle`: `#E5E2DC`
|
|
61
|
+
- `--border-strong`: `#B9AEA1`
|
|
62
|
+
|
|
63
|
+
### Semantic Colors
|
|
64
|
+
|
|
65
|
+
- `--color-success`: `#16A34A`
|
|
66
|
+
- `--color-success-soft`: `#F0FDF4`
|
|
67
|
+
- `--color-warning`: `#D97706`
|
|
68
|
+
- `--color-warning-soft`: `#FFFBEB`
|
|
69
|
+
- `--color-danger`: `#DC2626`
|
|
70
|
+
- `--color-danger-soft`: `#FEF2F2`
|
|
71
|
+
- `--color-info`: `#2563EB`
|
|
72
|
+
- `--color-info-soft`: `#EFF6FF`
|
|
73
|
+
- `--color-support`: `#7C3AED`
|
|
74
|
+
- `--color-support-soft`: `#F5F3FF`
|
|
75
|
+
|
|
76
|
+
### Chart Palette
|
|
77
|
+
|
|
78
|
+
- `--chart-1`: `#E10A0A`
|
|
79
|
+
- `--chart-2`: `#2563EB`
|
|
80
|
+
- `--chart-3`: `#16A34A`
|
|
81
|
+
- `--chart-4`: `#D97706`
|
|
82
|
+
- `--chart-5`: `#7C3AED`
|
|
83
|
+
- `--chart-6`: `#334155`
|
|
84
|
+
- `--chart-7`: `#11100F`
|
|
85
|
+
|
|
86
|
+
## Dark Theme Tokens
|
|
87
|
+
|
|
88
|
+
### Surfaces
|
|
89
|
+
|
|
90
|
+
- `--bg-default`: `#0B1118`
|
|
91
|
+
- `--bg-subtle`: `#101824`
|
|
92
|
+
- `--surface-default`: `#151D28`
|
|
93
|
+
- `--surface-subtle`: `#101824`
|
|
94
|
+
- `--card-default`: `#18212D`
|
|
95
|
+
|
|
96
|
+
### Text
|
|
97
|
+
|
|
98
|
+
- `--text-primary`: `#EEF3F8`
|
|
99
|
+
- `--text-secondary`: `#CBD5E1`
|
|
100
|
+
- `--text-muted`: `#9AA8B8`
|
|
101
|
+
- `--text-muted-2`: `#748194`
|
|
102
|
+
|
|
103
|
+
### Borders
|
|
104
|
+
|
|
105
|
+
- `--border-default`: `#314159`
|
|
106
|
+
- `--border-subtle`: `#243244`
|
|
107
|
+
- `--border-strong`: `#52657C`
|
|
108
|
+
|
|
109
|
+
### Brand
|
|
110
|
+
|
|
111
|
+
- `--brand-primary`: `#FF4A4A`
|
|
112
|
+
- `--brand-primary-strong`: `#FFD6D6`
|
|
113
|
+
- `--brand-primary-soft`: `rgba(255, 74, 74, 0.14)`
|
|
114
|
+
- `--brand-primary-tint`: `rgba(255, 74, 74, 0.10)`
|
|
115
|
+
|
|
116
|
+
### Semantic Colors
|
|
117
|
+
|
|
118
|
+
- `--color-success`: `#4ADE80`
|
|
119
|
+
- `--color-success-soft`: `rgba(63, 185, 80, 0.12)`
|
|
120
|
+
- `--color-warning`: `#FBBF24`
|
|
121
|
+
- `--color-warning-soft`: `rgba(227, 179, 65, 0.12)`
|
|
122
|
+
- `--color-danger`: `#F85149`
|
|
123
|
+
- `--color-danger-soft`: `rgba(248, 81, 73, 0.12)`
|
|
124
|
+
- `--color-info`: `#38BDF8`
|
|
125
|
+
- `--color-info-soft`: `rgba(88, 166, 255, 0.12)`
|
|
126
|
+
- `--color-support`: `#A78BFA`
|
|
127
|
+
- `--color-support-soft`: `rgba(167, 139, 250, 0.12)`
|
|
128
|
+
|
|
129
|
+
### Chart Palette
|
|
130
|
+
|
|
131
|
+
- `--chart-1`: `#FF4A4A`
|
|
132
|
+
- `--chart-2`: `#38BDF8`
|
|
133
|
+
- `--chart-3`: `#4ADE80`
|
|
134
|
+
- `--chart-4`: `#FBBF24`
|
|
135
|
+
- `--chart-5`: `#A78BFA`
|
|
136
|
+
- `--chart-6`: `#94A3B8`
|
|
137
|
+
- `--chart-7`: `#EEF3F8`
|
|
138
|
+
|
|
139
|
+
## Dark Mode Guidance
|
|
140
|
+
|
|
141
|
+
Dark mode is not just an inverted light theme. It should feel like a deliberate cool-slate operational workspace.
|
|
142
|
+
|
|
143
|
+
### Dark Mode Intent
|
|
144
|
+
|
|
145
|
+
- Keep dark mode cooler and cleaner than light mode
|
|
146
|
+
- Preserve the same information hierarchy as light mode
|
|
147
|
+
- Use brighter accents only where emphasis is needed
|
|
148
|
+
- Avoid flooding the UI with saturated red, blue, or purple fills
|
|
149
|
+
|
|
150
|
+
### Dark Mode Surface Rules
|
|
151
|
+
|
|
152
|
+
- Use `--bg-default` for the app shell and main page background
|
|
153
|
+
- Use `--bg-subtle` for recessed regions and background layering
|
|
154
|
+
- Use `--surface-default` for primary panels, cards, drawers, and top bars
|
|
155
|
+
- Use `--surface-subtle` for nested panes, secondary trays, and subdued UI blocks
|
|
156
|
+
- Use `--card-default` where a slightly lifted panel needs stronger separation from the background
|
|
157
|
+
|
|
158
|
+
### Dark Mode Text Rules
|
|
159
|
+
|
|
160
|
+
- Use `--text-primary` for headings, KPI values, table values, and core content
|
|
161
|
+
- Use `--text-secondary` for labels, subtitles, and standard supporting text
|
|
162
|
+
- Use `--text-muted` and `--text-muted-2` for low-priority metadata only
|
|
163
|
+
- Do not use muted text for anything interactive or operationally important
|
|
164
|
+
|
|
165
|
+
### Dark Mode Border and Separation Rules
|
|
166
|
+
|
|
167
|
+
- Use `--border-default` for standard panel outlines and table dividers
|
|
168
|
+
- Use `--border-subtle` for softer internal separators
|
|
169
|
+
- Use `--border-strong` only when an outline needs more emphasis, such as active or pinned containers
|
|
170
|
+
- Prefer separation through tone and spacing first, borders second
|
|
171
|
+
|
|
172
|
+
### Dark Mode Accent Rules
|
|
173
|
+
|
|
174
|
+
- Keep `--brand-primary` reserved for primary actions, selected states, active nav highlights, and critical emphasis
|
|
175
|
+
- Use `--brand-primary-tint` for selected fills and soft highlighted backgrounds
|
|
176
|
+
- Avoid large blocks of pure red background unless the element is intentionally urgent
|
|
177
|
+
- In dark mode, red should signal action and leakage emphasis, not become the background system
|
|
178
|
+
|
|
179
|
+
### Dark Mode Semantic Rules
|
|
180
|
+
|
|
181
|
+
- `--color-success` should indicate healthy, recovered, or resolved states
|
|
182
|
+
- `--color-warning` should indicate watch, pending, or caution states
|
|
183
|
+
- `--color-danger` should indicate leakage, failures, fraud, or breached thresholds
|
|
184
|
+
- `--color-info` should indicate neutral informational metrics and non-failure operational states
|
|
185
|
+
- `--color-support` should be used sparingly for secondary emphasis, special statuses, or supporting charts
|
|
186
|
+
|
|
187
|
+
### Dark Mode Data Visualization Rules
|
|
188
|
+
|
|
189
|
+
- Keep chart backgrounds neutral and let the data colors carry meaning
|
|
190
|
+
- Prefer `--chart-1` and `--chart-2` for primary series
|
|
191
|
+
- Use `--color-danger` or `--chart-1` for problem-series emphasis
|
|
192
|
+
- Use `--chart-6` and `--chart-7` for supporting axes, baselines, or neutral comparison series
|
|
193
|
+
- Do not place too many saturated series adjacent to each other without neutral spacing or hierarchy
|
|
194
|
+
|
|
195
|
+
### Dark Mode Interaction Rules
|
|
196
|
+
|
|
197
|
+
- Hover states should shift tone subtly, not flash brighter versions of the base color
|
|
198
|
+
- Selected states should use tint plus border or text reinforcement
|
|
199
|
+
- Focus states should remain clearly visible against dark surfaces
|
|
200
|
+
- Destructive actions should still be distinguishable from normal primary actions
|
|
201
|
+
|
|
202
|
+
### Dark Mode Accessibility Notes
|
|
203
|
+
|
|
204
|
+
- Maintain strong contrast between `--text-primary` and dark surfaces
|
|
205
|
+
- Avoid using tinted semantic soft colors as the only signal for status
|
|
206
|
+
- Pair color with iconography, labels, dots, or badges for critical states
|
|
207
|
+
- Check charts, badges, table chips, and nav highlights for readability on both light and dark themes
|
|
208
|
+
|
|
209
|
+
## Do and Don't
|
|
210
|
+
|
|
211
|
+
### Do
|
|
212
|
+
|
|
213
|
+
- Use `DM Sans` as the default UI font across the application
|
|
214
|
+
- Use `IBM Plex Sans` only where denser operational data needs clearer scanning
|
|
215
|
+
- Use `JetBrains Mono` for IDs, technical values, and code-like metadata
|
|
216
|
+
- Keep page backgrounds neutral and let panels/cards create structure
|
|
217
|
+
- Use `Signal Red` for primary actions, active states, and revenue-risk emphasis
|
|
218
|
+
- Use semantic colors consistently for health, warning, error, and informational states
|
|
219
|
+
- Use tinted fills for selected and active states instead of heavy saturated blocks
|
|
220
|
+
- Keep chart colors intentional and limited to meaningful comparisons
|
|
221
|
+
- Preserve the same hierarchy and spacing rules in both light and dark mode
|
|
222
|
+
- Test important UI surfaces in both themes before treating the design as final
|
|
223
|
+
|
|
224
|
+
### Don't
|
|
225
|
+
|
|
226
|
+
- Do not use the accent color as a generic background color for large regions
|
|
227
|
+
- Do not mix multiple accent options in the same view without a clear rule
|
|
228
|
+
- Do not use muted text for important KPIs, controls, or critical statuses
|
|
229
|
+
- Do not rely on color alone to communicate severity or state
|
|
230
|
+
- Do not overuse purple/support colors where info, warning, or danger are clearer
|
|
231
|
+
- Do not make dark mode a simple inverted copy of light mode
|
|
232
|
+
- Do not introduce low-contrast gray-on-gray combinations in panels, tables, or drawers
|
|
233
|
+
- Do not overload charts with too many saturated series at once
|
|
234
|
+
- Do not use IBM Plex Sans or JetBrains Mono as the default font for the whole UI
|
|
235
|
+
- Do not add new colors casually without updating this token note and the shared theme tokens
|
|
236
|
+
|
|
237
|
+
## Implementation Checklist
|
|
238
|
+
|
|
239
|
+
- Confirm the app uses `DM Sans` as the default UI font
|
|
240
|
+
- Confirm `IBM Plex Sans` is limited to dense tables and operational data views
|
|
241
|
+
- Confirm `JetBrains Mono` is limited to IDs, technical metadata, and code-like values
|
|
242
|
+
- Confirm all page backgrounds, panels, cards, drawers, and top bars map to the documented surface tokens
|
|
243
|
+
- Confirm text colors use the documented hierarchy: primary, secondary, and muted
|
|
244
|
+
- Confirm borders and dividers use the shared border tokens instead of hard-coded colors
|
|
245
|
+
- Confirm the default accent is `Signal Red`
|
|
246
|
+
- Confirm alternate accents, if exposed to users, are limited to `Signal Red`, `Cobalt`, `Evergreen`, and `Slate`
|
|
247
|
+
- Confirm primary actions, selected states, and active navigation use the accent system consistently
|
|
248
|
+
- Confirm success, warning, danger, and info states use the semantic tokens consistently across badges, chips, KPIs, and alerts
|
|
249
|
+
- Confirm charts use the shared chart palette and do not introduce ad hoc series colors
|
|
250
|
+
- Confirm both light mode and dark mode are implemented using the documented tokens rather than one-off overrides
|
|
251
|
+
- Confirm hover, active, selected, and focus states remain legible in both themes
|
|
252
|
+
- Confirm search boxes, dropdowns, chips, icon actions, and utility buttons use the shared control tokens
|
|
253
|
+
- Confirm tables, drawers, sidebars, and detail panes maintain sufficient contrast in both themes
|
|
254
|
+
- Confirm critical states are not communicated by color alone and include supporting labels, icons, or badges where needed
|
|
255
|
+
- Confirm any new token added during implementation is documented in this file and reflected in the shared theme source
|
|
256
|
+
|
|
257
|
+
## Typography Tokens
|
|
258
|
+
|
|
259
|
+
- `--font-sans`: `"DM Sans", system-ui, -apple-system, "Segoe UI", sans-serif`
|
|
260
|
+
- `--font-display`: `"DM Sans", system-ui, -apple-system, "Segoe UI", sans-serif`
|
|
261
|
+
- `--font-data`: `"IBM Plex Sans", "DM Sans", system-ui, sans-serif`
|
|
262
|
+
- `--font-mono`: `"JetBrains Mono", "IBM Plex Mono", ui-monospace, Menlo, monospace`
|
|
263
|
+
|
|
264
|
+
Usage guidance:
|
|
265
|
+
- Use `DM Sans` for the majority of the application UI
|
|
266
|
+
- Use `IBM Plex Sans` for tables and dense operational data
|
|
267
|
+
- Use `JetBrains Mono` for IDs, code-style values, and technical metadata
|
|
268
|
+
|
|
269
|
+
## Radius Tokens
|
|
270
|
+
|
|
271
|
+
- `--radius-sm`: `4px`
|
|
272
|
+
- `--radius-md`: `6px`
|
|
273
|
+
- `--radius-lg`: `10px`
|
|
274
|
+
- `--radius-control`: `10px`
|
|
275
|
+
|
|
276
|
+
## Spacing and Layout Tokens
|
|
277
|
+
|
|
278
|
+
- `--row-height-default`: `36px`
|
|
279
|
+
- `--space-default`: `16px`
|
|
280
|
+
- `--space-tight`: `10px`
|
|
281
|
+
- `--sidebar-width`: `232px`
|
|
282
|
+
- `--topbar-height`: `56px`
|
|
283
|
+
|
|
284
|
+
## Elevation Tokens
|
|
285
|
+
|
|
286
|
+
### Light
|
|
287
|
+
|
|
288
|
+
- `--shadow-sm`: `0 1px 2px rgba(35,34,31,0.04), 0 1px 1px rgba(35,34,31,0.03)`
|
|
289
|
+
- `--shadow-md`: `0 2px 8px rgba(35,34,31,0.06), 0 1px 2px rgba(35,34,31,0.04)`
|
|
290
|
+
- `--shadow-lg`: `0 12px 32px rgba(35,34,31,0.12), 0 2px 6px rgba(35,34,31,0.06)`
|
|
291
|
+
|
|
292
|
+
### Dark
|
|
293
|
+
|
|
294
|
+
- `--shadow-sm`: `0 1px 2px rgba(0,0,0,0.42)`
|
|
295
|
+
- `--shadow-md`: `0 8px 24px rgba(0,0,0,0.36)`
|
|
296
|
+
- `--shadow-lg`: `0 18px 44px rgba(0,0,0,0.48)`
|
|
297
|
+
|
|
298
|
+
## Premium Control Tokens
|
|
299
|
+
|
|
300
|
+
These tokens define the higher-end control styling used on search boxes, dropdowns, text inputs, chips, compact icon actions, and utility buttons.
|
|
301
|
+
|
|
302
|
+
### Light
|
|
303
|
+
|
|
304
|
+
- `--control-bg`: `#FBF8F4`
|
|
305
|
+
- `--control-bg-hover`: `#FFFFFF`
|
|
306
|
+
- `--control-bg-active`: `#FFFFFF`
|
|
307
|
+
- `--control-border`: `#D4CCC1`
|
|
308
|
+
- `--control-border-strong`: `#B9AEA1`
|
|
309
|
+
- `--control-ring`: `color-mix(in oklab, var(--accent-tint) 84%, white)`
|
|
310
|
+
- `--shadow-control`: `0 1px 0 rgba(255,255,255,0.78) inset, 0 1px 2px rgba(35,34,31,0.05)`
|
|
311
|
+
- `--shadow-control-strong`: `0 1px 0 rgba(255,255,255,0.86) inset, 0 10px 24px rgba(35,34,31,0.08)`
|
|
312
|
+
|
|
313
|
+
### Dark
|
|
314
|
+
|
|
315
|
+
- `--control-bg`: `#1B2532`
|
|
316
|
+
- `--control-bg-hover`: `#202C3B`
|
|
317
|
+
- `--control-bg-active`: `#223041`
|
|
318
|
+
- `--control-border`: `#3A4B61`
|
|
319
|
+
- `--control-border-strong`: `#5A6E87`
|
|
320
|
+
- `--control-ring`: `color-mix(in oklab, var(--accent-tint) 76%, rgba(255,255,255,0.06))`
|
|
321
|
+
- `--shadow-control`: `0 1px 0 rgba(255,255,255,0.05) inset, 0 1px 2px rgba(0,0,0,0.22)`
|
|
322
|
+
- `--shadow-control-strong`: `0 1px 0 rgba(255,255,255,0.08) inset, 0 12px 28px rgba(0,0,0,0.32)`
|
|
323
|
+
|
|
324
|
+
## Recommended Usage Rules
|
|
325
|
+
|
|
326
|
+
### Backgrounds and Surfaces
|
|
327
|
+
|
|
328
|
+
- App/page background: `--bg-default`
|
|
329
|
+
- Secondary app background or subtle pane fills: `--bg-subtle`
|
|
330
|
+
- Main panels, cards, drawers: `--surface-default` or `--card-default`
|
|
331
|
+
- Sub-panels, selected states, secondary controls: `--surface-subtle`
|
|
332
|
+
- Keep cards, KPI tiles, chart containers, and tables on solid surfaces with clear borders
|
|
333
|
+
- Keep app chrome, filters, drawers, modals, and compact controls on solid token surfaces with clear borders
|
|
334
|
+
- Search boxes, dropdowns, text inputs, chips, compact icon actions, and utility buttons should use the shared control background, border, shadow, and focus-ring tokens rather than raw surface tokens
|
|
335
|
+
|
|
336
|
+
### Text
|
|
337
|
+
|
|
338
|
+
- Main content and headings: `--text-primary`
|
|
339
|
+
- Secondary labels and subtitles: `--text-secondary`
|
|
340
|
+
- Metadata and low-priority text: `--text-muted` or `--text-muted-2`
|
|
341
|
+
|
|
342
|
+
### Borders
|
|
343
|
+
|
|
344
|
+
- Standard border: `--border-default`
|
|
345
|
+
- Softer separators and inner dividers: `--border-subtle`
|
|
346
|
+
- Strong outline emphasis: `--border-strong`
|
|
347
|
+
- Premium control outline: `--control-border`
|
|
348
|
+
- Hover and raised control outline: `--control-border-strong`
|
|
349
|
+
|
|
350
|
+
### Actions and States
|
|
351
|
+
|
|
352
|
+
- Primary actions: `--brand-primary`
|
|
353
|
+
- Active nav/selected states: `--brand-primary` with `--brand-primary-tint`
|
|
354
|
+
- Positive or recovered states: `--color-success`
|
|
355
|
+
- Warning/watch states: `--color-warning`
|
|
356
|
+
- Leakage-critical/error states: `--color-danger`
|
|
357
|
+
- Informational data states: `--color-info`
|
|
358
|
+
- Secondary highlight or special status: `--color-support`
|
|
359
|
+
- Focus rings for premium controls should come from `--control-ring`
|
|
360
|
+
|
|
361
|
+
### Data Visualization
|
|
362
|
+
|
|
363
|
+
- Use `--chart-1` through `--chart-7` in sequence
|
|
364
|
+
- Prefer `--chart-1` and `--chart-2` for primary series
|
|
365
|
+
- Reserve `--color-danger` or `--chart-1` for revenue leakage/problem emphasis
|
|
366
|
+
|
|
367
|
+
## Suggested Standard Naming
|
|
368
|
+
|
|
369
|
+
If these tokens are later formalized into a shared design system, use a consistent naming model like:
|
|
370
|
+
|
|
371
|
+
- `color-bg-default`
|
|
372
|
+
- `color-bg-subtle`
|
|
373
|
+
- `color-surface-default`
|
|
374
|
+
- `color-surface-subtle`
|
|
375
|
+
- `color-text-primary`
|
|
376
|
+
- `color-text-secondary`
|
|
377
|
+
- `color-text-muted`
|
|
378
|
+
- `color-border-default`
|
|
379
|
+
- `color-border-subtle`
|
|
380
|
+
- `color-border-strong`
|
|
381
|
+
- `color-brand-primary`
|
|
382
|
+
- `color-brand-primary-soft`
|
|
383
|
+
- `color-brand-primary-tint`
|
|
384
|
+
- `color-semantic-success`
|
|
385
|
+
- `color-semantic-warning`
|
|
386
|
+
- `color-semantic-danger`
|
|
387
|
+
- `color-semantic-info`
|
|
388
|
+
- `font-sans`
|
|
389
|
+
- `font-data`
|
|
390
|
+
- `font-mono`
|
|
391
|
+
- `radius-sm`
|
|
392
|
+
- `radius-md`
|
|
393
|
+
- `radius-lg`
|
|
394
|
+
- `shadow-sm`
|
|
395
|
+
- `shadow-md`
|
|
396
|
+
- `shadow-lg`
|
|
397
|
+
|
|
398
|
+
## CSS Reference Block
|
|
399
|
+
|
|
400
|
+
```css
|
|
401
|
+
:root {
|
|
402
|
+
--brand-primary: #E10A0A;
|
|
403
|
+
--brand-primary-strong: #B90707;
|
|
404
|
+
--brand-primary-soft: #FFECEC;
|
|
405
|
+
--brand-primary-tint: #FFF3F3;
|
|
406
|
+
|
|
407
|
+
--accent-signal-red: #E10A0A;
|
|
408
|
+
--accent-cobalt: #2563EB;
|
|
409
|
+
--accent-evergreen: #15803D;
|
|
410
|
+
--accent-slate: #334155;
|
|
411
|
+
|
|
412
|
+
--bg-default: #F2EFEB;
|
|
413
|
+
--bg-subtle: #EEE8E0;
|
|
414
|
+
--surface-default: #FFFFFF;
|
|
415
|
+
--surface-subtle: #F6F3EF;
|
|
416
|
+
--card-default: #FFFFFF;
|
|
417
|
+
|
|
418
|
+
--text-primary: #11100F;
|
|
419
|
+
--text-secondary: #2D2925;
|
|
420
|
+
--text-muted: #5B554E;
|
|
421
|
+
--text-muted-2: #81786F;
|
|
422
|
+
|
|
423
|
+
--border-default: #D8D1C7;
|
|
424
|
+
--border-subtle: #E5E2DC;
|
|
425
|
+
--border-strong: #B9AEA1;
|
|
426
|
+
|
|
427
|
+
--color-success: #16A34A;
|
|
428
|
+
--color-success-soft: #F0FDF4;
|
|
429
|
+
--color-warning: #D97706;
|
|
430
|
+
--color-warning-soft: #FFFBEB;
|
|
431
|
+
--color-danger: #DC2626;
|
|
432
|
+
--color-danger-soft: #FEF2F2;
|
|
433
|
+
--color-info: #2563EB;
|
|
434
|
+
--color-info-soft: #EFF6FF;
|
|
435
|
+
--color-support: #7C3AED;
|
|
436
|
+
--color-support-soft: #F5F3FF;
|
|
437
|
+
|
|
438
|
+
--chart-1: #E10A0A;
|
|
439
|
+
--chart-2: #2563EB;
|
|
440
|
+
--chart-3: #16A34A;
|
|
441
|
+
--chart-4: #D97706;
|
|
442
|
+
--chart-5: #7C3AED;
|
|
443
|
+
--chart-6: #334155;
|
|
444
|
+
--chart-7: #11100F;
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
[data-theme="dark"] {
|
|
448
|
+
--bg-default: #0B1118;
|
|
449
|
+
--bg-subtle: #101824;
|
|
450
|
+
--surface-default: #151D28;
|
|
451
|
+
--surface-subtle: #101824;
|
|
452
|
+
--card-default: #18212D;
|
|
453
|
+
|
|
454
|
+
--text-primary: #EEF3F8;
|
|
455
|
+
--text-secondary: #CBD5E1;
|
|
456
|
+
--text-muted: #9AA8B8;
|
|
457
|
+
--text-muted-2: #748194;
|
|
458
|
+
|
|
459
|
+
--border-default: #314159;
|
|
460
|
+
--border-subtle: #243244;
|
|
461
|
+
--border-strong: #52657C;
|
|
462
|
+
|
|
463
|
+
--brand-primary: #FF4A4A;
|
|
464
|
+
--brand-primary-strong: #FFD6D6;
|
|
465
|
+
--brand-primary-soft: rgba(255, 74, 74, 0.14);
|
|
466
|
+
--brand-primary-tint: rgba(255, 74, 74, 0.10);
|
|
467
|
+
|
|
468
|
+
--color-success: #4ADE80;
|
|
469
|
+
--color-success-soft: rgba(63, 185, 80, 0.12);
|
|
470
|
+
--color-warning: #FBBF24;
|
|
471
|
+
--color-warning-soft: rgba(227, 179, 65, 0.12);
|
|
472
|
+
--color-danger: #F85149;
|
|
473
|
+
--color-danger-soft: rgba(248, 81, 73, 0.12);
|
|
474
|
+
--color-info: #38BDF8;
|
|
475
|
+
--color-info-soft: rgba(88, 166, 255, 0.12);
|
|
476
|
+
--color-support: #A78BFA;
|
|
477
|
+
--color-support-soft: rgba(167, 139, 250, 0.12);
|
|
478
|
+
|
|
479
|
+
--chart-1: #FF4A4A;
|
|
480
|
+
--chart-2: #38BDF8;
|
|
481
|
+
--chart-3: #4ADE80;
|
|
482
|
+
--chart-4: #FBBF24;
|
|
483
|
+
--chart-5: #A78BFA;
|
|
484
|
+
--chart-6: #94A3B8;
|
|
485
|
+
--chart-7: #EEF3F8;
|
|
486
|
+
}
|
|
487
|
+
```
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# RevSight Implementation Guide
|
|
2
|
+
|
|
3
|
+
This document is the practical implementation companion to [DESIGN_TOKENS.md](DESIGN_TOKENS.md).
|
|
4
|
+
|
|
5
|
+
Use it when rebuilding the mockup as a standard React web application.
|
|
6
|
+
|
|
7
|
+
## Purpose
|
|
8
|
+
|
|
9
|
+
This guide exists to make sure the UI is implemented consistently without:
|
|
10
|
+
- drifting from the approved color palette
|
|
11
|
+
- breaking light/dark theme behavior
|
|
12
|
+
- overusing one-off colors, spacing, or typography
|
|
13
|
+
- distorting the mockup structure during React implementation
|
|
14
|
+
|
|
15
|
+
## Source Of Truth
|
|
16
|
+
|
|
17
|
+
Use these files as the main references:
|
|
18
|
+
|
|
19
|
+
- [DESIGN_TOKENS.md](DESIGN_TOKENS.md)
|
|
20
|
+
- [styles.css](styles.css)
|
|
21
|
+
- [src/shell.jsx](src/shell.jsx)
|
|
22
|
+
- [index.html](index.html)
|
|
23
|
+
|
|
24
|
+
If implementation decisions conflict with ad hoc styling in a page, prefer the token system and shell patterns.
|
|
25
|
+
|
|
26
|
+
## Core Implementation Rules
|
|
27
|
+
|
|
28
|
+
- Keep `DM Sans` as the default font across the application
|
|
29
|
+
- Use `IBM Plex Sans` only in data-dense tables or operational views
|
|
30
|
+
- Use `JetBrains Mono` only for IDs, case references, technical values, and code-like metadata
|
|
31
|
+
- Do not hard-code colors when a token already exists
|
|
32
|
+
- Do not introduce new accent colors without updating the token source and documentation
|
|
33
|
+
- Do not replace the neutral surface system with saturated backgrounds
|
|
34
|
+
- Do not treat dark mode as a separate design language; it should preserve the same hierarchy and layout
|
|
35
|
+
|
|
36
|
+
## Theme Architecture
|
|
37
|
+
|
|
38
|
+
Implement theme support through shared root-level tokens.
|
|
39
|
+
|
|
40
|
+
### Required Pattern
|
|
41
|
+
|
|
42
|
+
- Light mode tokens should live at `:root`
|
|
43
|
+
- Dark mode tokens should be activated with `[data-theme="dark"]`
|
|
44
|
+
- Theme state should be applied at the document root
|
|
45
|
+
- Components should consume semantic or surface tokens instead of hard-coded hex values
|
|
46
|
+
|
|
47
|
+
### Required Theme Behavior
|
|
48
|
+
|
|
49
|
+
- The UI must support both light and dark mode
|
|
50
|
+
- The sidebar footer toggle should switch between those modes
|
|
51
|
+
- Theme changes should affect surfaces, text, borders, charts, badges, and interactive states
|
|
52
|
+
- Theme changes should not require per-page custom overrides
|
|
53
|
+
|
|
54
|
+
## Layout Rules
|
|
55
|
+
|
|
56
|
+
The mockup is built around an app-shell layout, not a marketing-page layout.
|
|
57
|
+
|
|
58
|
+
### Sidebar
|
|
59
|
+
|
|
60
|
+
- Left navigation must remain fixed
|
|
61
|
+
- The navigation area inside the sidebar should scroll independently when content exceeds the viewport
|
|
62
|
+
- The sidebar footer should stay pinned at the bottom
|
|
63
|
+
- Collapsed and expanded sidebar states must preserve icon alignment and navigation clarity
|
|
64
|
+
|
|
65
|
+
### Main Pane
|
|
66
|
+
|
|
67
|
+
- The main content region must be fully visible and vertically scrollable
|
|
68
|
+
- The top bar should remain stable while the user works through long data views
|
|
69
|
+
- Avoid adding bottom whitespace caused by unnecessary wrapper heights, transforms, zoom rules, or extra body padding
|
|
70
|
+
|
|
71
|
+
### Right Detail Pane
|
|
72
|
+
|
|
73
|
+
- Drawers and detail panes should render at full available height
|
|
74
|
+
- The drawer body should scroll internally when content is long
|
|
75
|
+
- Header and close behavior should remain visible while content scrolls
|
|
76
|
+
|
|
77
|
+
## Component Styling Rules
|
|
78
|
+
|
|
79
|
+
### Cards And Panels
|
|
80
|
+
|
|
81
|
+
- Use shared surface, border, and shadow tokens
|
|
82
|
+
- Keep app chrome, drawers, modals, filters, search, and compact controls on solid token surfaces
|
|
83
|
+
- Keep cards, KPI tiles, chart containers, and table surfaces solid so data remains readable and borders stay clear
|
|
84
|
+
- Keep cards visually restrained; rely on spacing and hierarchy before decoration
|
|
85
|
+
- Use accent tint and border emphasis for selection states instead of heavy fills
|
|
86
|
+
|
|
87
|
+
### Search, Dropdowns, And Inputs
|
|
88
|
+
|
|
89
|
+
- Use the shared premium control tokens for search boxes, selects, text inputs, chips, compact icon actions, and utility buttons
|
|
90
|
+
- Keep controls solid and layered with subtle gradient fills, not flat gray blocks and not translucent blur
|
|
91
|
+
- Use `--control-border` at rest and `--control-border-strong` on hover or raised states
|
|
92
|
+
- Use `--shadow-control` for default controls and `--shadow-control-strong` for hover emphasis
|
|
93
|
+
- Use `--control-ring` for focus treatment instead of ad hoc box-shadow colors
|
|
94
|
+
- Keep control radii slightly softer than default panel radii so the UI feels more deliberate and polished
|
|
95
|
+
- Dropdowns should use the same surface language as search and inputs, including the chevron treatment and focus ring
|
|
96
|
+
|
|
97
|
+
### Tables
|
|
98
|
+
|
|
99
|
+
- Use `IBM Plex Sans` for denser data tables where scanning matters
|
|
100
|
+
- Preserve strong contrast for headers, row values, and hover states
|
|
101
|
+
- Use semantic colors carefully for statuses, but keep row backgrounds mostly neutral
|
|
102
|
+
|
|
103
|
+
### Badges And Status Indicators
|
|
104
|
+
|
|
105
|
+
- Use semantic tokens consistently:
|
|
106
|
+
- success for healthy/resolved/recovered
|
|
107
|
+
- warning for watch/pending/caution
|
|
108
|
+
- danger for leakage/failure/fraud/critical
|
|
109
|
+
- info for neutral operational information
|
|
110
|
+
- Pair important state colors with text or icon support
|
|
111
|
+
|
|
112
|
+
### Charts
|
|
113
|
+
|
|
114
|
+
- Use the documented chart palette
|
|
115
|
+
- Avoid introducing ad hoc chart colors from individual pages
|
|
116
|
+
- Keep chart backgrounds neutral
|
|
117
|
+
- Use danger/red for leakage emphasis only where meaningfully required
|
|
118
|
+
|
|
119
|
+
## React Implementation Expectations
|
|
120
|
+
|
|
121
|
+
### State And Theme
|
|
122
|
+
|
|
123
|
+
- Theme state should be centralized and shared
|
|
124
|
+
- Accent selection, density, and sidebar state should come from the same shell-level settings model
|
|
125
|
+
- Components should respond to tokens and settings rather than duplicating style logic locally
|
|
126
|
+
|
|
127
|
+
### Component Structure
|
|
128
|
+
|
|
129
|
+
- Keep shell concerns in the shell layer
|
|
130
|
+
- Keep page-level components focused on data presentation and interaction
|
|
131
|
+
- Keep reusable visual primitives shared where possible
|
|
132
|
+
|
|
133
|
+
### Styling Approach
|
|
134
|
+
|
|
135
|
+
- Prefer token-driven CSS over inline hard-coded values
|
|
136
|
+
- Inline styles are acceptable for small dynamic layout adjustments, not for replacing the theme system
|
|
137
|
+
- Repeated visual patterns should become reusable classes or primitives
|
|
138
|
+
|
|
139
|
+
## Dark Mode Implementation Guidance
|
|
140
|
+
|
|
141
|
+
- Use the same component structure in both light and dark mode
|
|
142
|
+
- Change tone, contrast, and emphasis through tokens only
|
|
143
|
+
- Keep dark surfaces cool and restrained
|
|
144
|
+
- Reserve brighter reds and blues for action, status, and chart emphasis
|
|
145
|
+
- Ensure table rows, nav states, chips, and drawer content remain readable in dark mode
|
|
146
|
+
- Check that muted text is still legible and not overly dim against slate surfaces
|
|
147
|
+
|
|
148
|
+
## Accessibility And QA Checks
|
|
149
|
+
|
|
150
|
+
Before considering the React implementation complete, verify:
|
|
151
|
+
|
|
152
|
+
- text contrast is acceptable in both light and dark themes
|
|
153
|
+
- active, selected, hover, and focus states are visible in both themes
|
|
154
|
+
- search boxes, dropdowns, chips, compact icon actions, and utility buttons feel visually consistent with each other
|
|
155
|
+
- charts remain readable for multi-series comparisons
|
|
156
|
+
- status colors are not the sole indicator of meaning
|
|
157
|
+
- the sidebar, topbar, main pane, and right drawer behave correctly at common desktop sizes
|
|
158
|
+
- the layout remains usable on smaller laptop widths without visual breakage
|
|
159
|
+
|
|
160
|
+
## Handoff Checklist For The Next Agent
|
|
161
|
+
|
|
162
|
+
- Read [DESIGN_TOKENS.md](DESIGN_TOKENS.md) first
|
|
163
|
+
- Reuse the theme tokens already present in [styles.css](styles.css)
|
|
164
|
+
- Preserve the shell behavior already established in [src/shell.jsx](src/shell.jsx)
|
|
165
|
+
- Do not swap the font system back to generic defaults
|
|
166
|
+
- Do not reintroduce terracotta or unrelated editorial accent colors
|
|
167
|
+
- Do not hard-code page-specific colors that bypass the token system
|
|
168
|
+
- Verify the final implementation in both light and dark mode before closing the task
|
|
169
|
+
|
|
170
|
+
## Practical Standard
|
|
171
|
+
|
|
172
|
+
If a future implementation decision is unclear, follow this order:
|
|
173
|
+
|
|
174
|
+
1. Use the existing token system.
|
|
175
|
+
2. Reuse an existing shell or component pattern.
|
|
176
|
+
3. Add a new token only if the current system cannot express the need cleanly.
|
|
177
|
+
4. Update [DESIGN_TOKENS.md](DESIGN_TOKENS.md) if a new token is introduced.
|