# Visual language ## Character Design for a Windows user opening a small control surface to check routing, recover a service, or apply one deliberate configuration change. The UI should feel soft, precise, dependable, and slightly terminal-like, not like a network administration dashboard. ## Composition - Make current system state and the next safe action dominant. - Keep the summary power control visually centered and pair it with a compact vertical route chain. - Use open space, typography, subtle surface shifts, localized light, and state color before frames or dividers. - Keep service rows compact: status, human-readable detail, one primary action, then secondary actions. - Preserve the existing tabs and operational grouping; visual consistency does not justify moving ownership or hiding actions. ## Typography and geometry - Use JetBrains Mono with uppercase tracked micro-labels only for metadata. - Use weight and color before large size jumps. Use tabular numerals for changing values. - Reserve equal space for mutually exclusive labels and feedback. - Use 8px controls, 10px surfaces, and pills only for status tokens. - Keep icon-only hit areas at least 40px and align icons in flex/grid rather than guessed offsets. ## Color and light - Base dark surfaces on green-tinted OKLCH neutrals around hue 145. - Use blue-green `oklch(0.68 0.11 185)` as the primary active/focus accent. - Use orange `oklch(0.71 0.12 72)` for direct/local-route distinction, never as general decoration. - Keep warning/error colors semantic. Do not recolor destructive actions with the route accent. - Prefer localized `drop-shadow`, text glow, or a soft radial light layer over filled accent containers. - Keep inactive power neutral even on hover; color communicates state, not clickability alone. ## Surfaces and controls - Use quiet translucent cloud surfaces for tooltips and transient overlays. - Inputs are inset and slightly darker than surrounding surfaces. - Avoid nested cards. Group related controls with spacing and one subtle surface shift. - Keep persistent work surfaces borderless by default. Use a border only when it communicates input focus, destructive confirmation, or another essential state. - Render statuses and counters as a glowing dot or quiet value plus text, not as bordered badge capsules. - Let service rows, route nodes, app rows, and server rows float on the shared canvas; reveal their surface only on hover, focus, selection, or active work. - Prefer a short luminous underline or localized glow for selection and keyboard focus over a rectangular focus frame. - Use shared `src/ui` primitives and preserve their default, hover, active, focus, disabled, loading, empty, and error states. ## Route checks - Keep the route description, endpoint, and check action in a stable three-part row. Reserve the action width so mode changes and endpoint length never move the button. - Present the endpoint as the named route target, not as a detached badge or a second result. - Reveal a borderless result surface only while a check is running or after it completes. Show every returned probe in a structured table with separate status, external IP, and latency columns; do not compress unlike values into mixed badges or hardcode a fixed probe count. - Keep the summary short. Put verbose URLs, request methods, status codes, and errors in a calm structured detail cloud opened by hovering or focusing the result surface. - Animate result arrival and status light, while preserving the same geometry and honoring reduced motion. ## Route modes and managed lists - Present external and local proxy routes as two peer choices above the content they replace. Keep the chooser mounted while the mode body crossfades in from the selected direction. - Reserve the same configuration-stage height for both routes and place it before route diagnostics, so mode-specific labels and controls remain aligned even when check results expand. - Use the blue-green accent for the external route and the warm route accent for Local sing-box. A small status light and quiet surface shift are enough; do not add a long selection rule. - A green service light means running, not merely installed. Installed-without-service, stopped, and missing states remain warning-colored. - Hovering service and application rows reveals a neutral side marker and slight positional response. Do not place a green radial wash behind the entire row. - Application grouping is display-only. Preserve saved order as the default, provide explicit Processes, EXE files, and Folders sections with counts, and keep alphabetical sorting as a separate option. Remount only the visible list surface so changes can fade into place.