Repository navigation
web: Gable light, a calm light mode beside Industrial Dark - #147
Merged
Merged
Conversation
Every colour the desk draws is now an RGB channel variable (--gb-*) in the design system tokens: :root holds Industrial Dark exactly as before and :root[data-theme="light"] holds the Gable light palette. The Tailwind theme reads them (white, black, zinc, slate, gray and the status palettes, the brand aliases, plate and backdrop, glow and elevation shadows). A theme module and a sun or moon control in the desk header and on the front door let a person set light or dark for themselves, stored per signed in subject and applied before the first render. The 250 arbitrary hex colour classes in the apps became tokens, picture plates and switch knobs use plate, modal veils use backdrop, and a check keeps the sweep swept. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: colton <colton@futurebuild.ai>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: colton <colton@futurebuild.ai>
The counter's till open, till close and return dialogs read the colour variables instead of fixed hex. A white label on a solid status fill (text-white on bg-red-600 and the like) is text-plate, so it stays a white label in dark and reads against the deepened fill in light. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: colton <colton@futurebuild.ai>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: colton <colton@futurebuild.ai>
Chart.js colours (series, grid, ticks, tooltip) are read from the variables at render and the charts draw again when the mode changes. The route map's line, stop markers and popup follow the mode, and its tile filter is dark only. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: colton <colton@futurebuild.ai>
Inline backgrounds become tokens, the dealer accent falls back to the mode's Gable green, and the status colours read the variables. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: colton <colton@futurebuild.ai>
Hex status colours on reconciliation, matching, the product geometry preview and the millwork configurators read the variables; photo scrims are backdrop; wells that were a black veil are deep space; a white label on a solid fill is plate. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: colton <colton@futurebuild.ai>
The CRM activity modal, account activity feed, portal account page, report builder and saved reports drew white cards with gray text and 50 to 900 tints, which invert in light. They now use the same card, edge, text and tint tokens as the rest of the desk. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: colton <colton@futurebuild.ai>
…ck and Tech Admin Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: colton <colton@futurebuild.ai>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: colton <colton@futurebuild.ai> # Conflicts: # web/apps/desk/src/pages/millwork/BlueprintVerifier.ts
…ollow the mode Each place that had moved onto a nearest token gets its own token whose dark value is exactly today's value (the counter dialogs, the glow shadow sizes, the configurator text, the scanner dialog and matrix row hover) and whose light value is the palette's nearest step; the dark unchanged leg pins them. Secondary chips and tags read the voice tokens: today's neutrals in dark, sage in light. The boot screens apply the stored mode before the first paint from a same origin script (the CSP refuses inline ones) and read the variables. One check guards every literal colour across web/apps. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: colton <colton@futurebuild.ai>
…ight polish Dark: drop color-scheme from :root; the portal ground and panel, the scanner body and badge, the margin modal inputs, the media tab badge and photo buttons and the route map note each get a token whose dark value is today's; the dark leg lists every dark variable (none unlisted, none different). Guard: the allowlist names file plus literal plus reason, hex takes three to eight digits, named colours in a style are caught. Fuchsia is themed. A person's key holds only their own choice and a storage listener follows other tabs. The revenue chart tick, the donut's fulfilled series, the counter tiles and picture plates, the portal hover row and a portal brand colour that does not read on the light card follow light only. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: colton <colton@futurebuild.ai>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Gable light: a calm light mode beside Industrial Dark. Industrial Dark is the default and draws exactly as before; light is the alternative a person sets for themselves and keeps. Palette values are used as given; nothing else from their source is in this PR.
What it is
tokens.css): every colour is an RGB channel variable (--gb-*).:rootholds today's values exactly (Tailwind v3 defaults, the brand hex);:root[data-theme="light"]holds the light palette and the semantic HSL values.color-schemeis set only in the light block.white,black, the neutral and status palettes (now includingfuchsia, derived for light) readrgb(var(--gb-...) / <alpha-value>). Glow and elevation shadows read variables (no glow in light).plate,backdrop,gable-green-hover,gable-green-tint; the till dialog colours (till-*);pale,well,well-hover; the portal ground and panel;chip-ground,shade,photo-btn,map-note; the glow sizes;chart-tick,chart-fulfilled;picture-plate,tile,hover-row.voice,voice-soft,voice-text,voice-fill): today's neutrals in dark, sage in light, for the counter's category chips, the quote's "Material list" tag and "draft" chip.theme.tsand<gable-theme-toggle>(a native button named "Light mode" / "Dark mode") in the desk header and on the front door. Stored per signed in subject undergable_theme:<subject>, last used undergable_theme; a person's key only ever holds their own choice; astoragelistener follows other tabs; applied at the app entry before the first render and on sign in.index.htmlpages load/theme-boot.js(a same origin script, because the CSP refuses inline ones) and read the variables, so there is no dark flash.web/apps(no-literal-colour.test.ts): no hex of three to eight digits, norgb()literal, no arbitrary hex class, no literal white or black surface, no named colour in a style. The allowlist names file plus literal plus reason, and the rest of the file is still scanned. Its failure message names the file, the literal and the token to use.Tests
Dark: every dark variable is listed and pinned (none unlisted, none different). Light: every value equals the palette; the derived fuchsia ramp; no glow. Contrast: every pair computed from the token values. The switch, the control, the boot script, the sweep guard and its planted cases.
For the principal's ruling
🤖 Generated with Claude Code