// // The theme lives here. // // To theme this app, you need: // - 5 colour ramps. Easiest way to do this is to use the colour design // of our website. Or use the background image, or screenshot the page. // Then feed it into coolors.co. Image picker, and extra 5 colours // which work well together, and Export -> Open in generator. You've got // 5 base colours, but they'll need adjusting. Feed them into Claude, and // ask Claude to make a colour ramp. You can cut'n'paste a colour ramp // from this file from below to show Claude the structure to create. // That's 5 general theme colours sorted. // - There are a few other colours which follow. The graph UI can have // its own colours, but they need to be sympathetic to the overall // palette. // - There are some colours which form the callouts for thinking, observing // and answer in the agent assistant. // - After the colour ramps are defined there are palettes which specify // how the colours are used. These specify combinations for dark/light // mode. // // Claude Code knows how to manage this file, given base colours, it can // adjust everything that's here. import { createSystem, defaultConfig, defineConfig } from "@chakra-ui/react"; export const config = defineConfig({ // strictTokens: true, globalCss: { "#root": { color: "{colors.text}", backgroundColor: "{colors.background}", }, "html, body": { margin: 0, padding: 0, }, }, theme: { tokens: { colors: { // General theme colours, using a consistent palette e.g. made from // the company website or site design airForceBlue: { 50: { value: "#EDF5F9" }, 100: { value: "#DBEAF3" }, 200: { value: "#B7D5E7" }, 300: { value: "#93C0DB" }, 400: { value: "#6FABCF" }, 500: { value: "#558BB4" }, // Base color 600: { value: "#4A7BA2" }, 700: { value: "#3F6B90" }, 800: { value: "#345B7E" }, 900: { value: "#294B6C" }, }, skyBlue: { 50: { value: "#F0F7FA" }, 100: { value: "#E1EFF5" }, 200: { value: "#C3DFEB" }, 300: { value: "#A5CFE1" }, 400: { value: "#94C3D7" }, 500: { value: "#83B7CE" }, // Base color 600: { value: "#72A4BC" }, 700: { value: "#6191AA" }, 800: { value: "#507E98" }, 900: { value: "#3F6B86" }, }, deepPlum: { 50: { value: "#F9F8F9" }, 100: { value: "#F3F1F3" }, 200: { value: "#E7E3E7" }, 300: { value: "#DBD5DB" }, 400: { value: "#CFC7CF" }, 500: { value: "#A394A3" }, // Lightened base for usability 600: { value: "#7A6B7A" }, 700: { value: "#5C4D5C" }, 800: { value: "#3D2E3D" }, 900: { value: "#250219" }, // Original color }, darkViolet: { 50: { value: "#FAF9FB" }, 100: { value: "#F5F3F6" }, 200: { value: "#EBE7ED" }, 300: { value: "#E1DBE4" }, 400: { value: "#D7CFDB" }, 500: { value: "#9A7BA2" }, // Lightened base for usability 600: { value: "#7A5B82" }, 700: { value: "#5F4268" }, 800: { value: "#4F2F56" }, 900: { value: "#3F1D44" }, // Original color }, thistle: { 50: { value: "#FDFCFE" }, 100: { value: "#FAF8FC" }, 200: { value: "#F5F0F9" }, 300: { value: "#F0E8F6" }, 400: { value: "#E5D4F1" }, 500: { value: "#DAC0EC" }, // Base color 600: { value: "#C8A5E0" }, 700: { value: "#B68AD4" }, 800: { value: "#A46FC8" }, 900: { value: "#8B4FB5" }, }, // Extra colours which aren't part of the map // Desaturated orange // On medium-saturation orange, useful for accents where the // palette colours aren't provding accents. warmOrange: { 50: { value: "#FEFAF8" }, 100: { value: "#FDF5F0" }, 200: { value: "#FBEBE1" }, 300: { value: "#F9E1D2" }, 400: { value: "#F8BF9B" }, 500: { value: "#F79D65" }, // Base color 600: { value: "#F5853E" }, 700: { value: "#E66B1A" }, 800: { value: "#C55A15" }, 900: { value: "#A44A11" }, }, // A desaturated orange, this provides a more neutral base for // backgrounds - warmOrange is too saturated at the darker end warmNeutral: { 50: { value: "#FDFCFB" }, 100: { value: "#FAF8F6" }, 200: { value: "#F5F1ED" }, 300: { value: "#EFEAE4" }, 400: { value: "#E0D5CA" }, 500: { value: "#D1C1B0" }, // Desaturated warm base 600: { value: "#B8A394" }, 700: { value: "#9F8578" }, 800: { value: "#6B5B52" }, // Dark enough for backgrounds 900: { value: "#3A312B" }, // Very dark warm neutral }, // A desaturated yellow, harmonious with the orange yellowNeutral: { 50: { value: "#FEFEF8" }, 100: { value: "#FCFCF0" }, 200: { value: "#F8F6E1" }, 300: { value: "#F3F0D2" }, 400: { value: "#E8E2B8" }, 500: { value: "#DDD49E" }, // Much more yellow and lighter 600: { value: "#CFC284" }, 700: { value: "#BAA56A" }, 800: { value: "#8A7F52" }, // Lighter but still usable for backgrounds 900: { value: "#5A5238" }, // Warmer yellow-brown }, // Greens are useful for answers and success. Here are some. sageGreen: { 50: { value: "#F7FAF8" }, 100: { value: "#EFF5F1" }, 200: { value: "#DFEBE3" }, 300: { value: "#CFE1D5" }, 400: { value: "#B9D1BE" }, 500: { value: "#A4C2A8" }, // Base color 600: { value: "#8FB394" }, 700: { value: "#7AA480" }, 800: { value: "#65956C" }, 900: { value: "#508658" }, }, neutralGreen: { 50: { value: "#FDFEFD" }, 100: { value: "#EFF7F6" }, // Original color moved up 200: { value: "#DEF0ED" }, 300: { value: "#CDE9E4" }, 400: { value: "#BCE2DB" }, 500: { value: "#9DD4CA" }, // Usable mid-tone 600: { value: "#7EC6B9" }, 700: { value: "#5FB8A8" }, 800: { value: "#479085" }, // Slightly desaturated from #4A9A8A 900: { value: "#337062" }, // Slightly desaturated from #357C6C }, // Useful for off-white 'paper' colours. mintCream: { 50: { value: "#FDFEFD" }, 100: { value: "#EFF7F6" }, // Original color moved up 200: { value: "#DEF0ED" }, 300: { value: "#CDE9E4" }, 400: { value: "#BCE2DB" }, 500: { value: "#9DD4CA" }, // Usable mid-tone 600: { value: "#7EC6B9" }, 700: { value: "#5FB8A8" }, 800: { value: "#4A9A8A" }, 900: { value: "#357C6C" }, }, // Slightly blue-gray gray: { 50: { value: "#F7FAFC" }, // Lightest 100: { value: "#EDF2F7" }, 200: { value: "#E2E8F0" }, 300: { value: "#CBD5E0" }, 400: { value: "#A0AEC0" }, 500: { value: "#718096" }, // Mid-gray 600: { value: "#4A5568" }, 700: { value: "#2D3748" }, 800: { value: "#1A202C" }, 900: { value: "#171923" }, // Darkest }, }, fonts: { heading: { value: "Montserrat, sans-serif" }, body: { value: "Montserrat, sans-serif" }, mono: { value: "Roboto mono, monospace" }, }, }, semanticTokens: { colors: { background: { value: { base: "{colors.gray.50}", _dark: "{colors.gray.900}", }, }, text: { value: { base: "{colors.gray.900}", _dark: "{colors.gray.100}", }, }, primary: { solid: { value: { base: "{colors.airForceBlue.500}", _dark: "{colors.airForceBlue.500}", }, }, contrast: { value: { base: "{colors.airForceBlue.100}", _dark: "{colors.airForceBlue.900}", }, }, fg: { value: { base: "{colors.airForceBlue.700}", _dark: "{colors.airForceBlue.300}", }, }, muted: { value: { base: "{colors.airForceBlue.100}", _dark: "{colors.airForceBlue.900}", }, }, subtle: { value: { base: "{colors.airForceBlue.200}", _dark: "{colors.airForceBlue.800}", }, }, emphasized: { value: { base: "{colors.airForceBlue.300}", _dark: "{colors.airForceBlue.700}", }, }, focusRing: { value: { base: "{colors.airForceBlue.400}", _dark: "{colors.airForceBlue.600}", }, }, }, accent: { solid: { value: { base: "{colors.deepPlum.900}", _dark: "{colors.deepPlum.100}", }, }, contrast: { value: { base: "{colors.deepPlum.100}", _dark: "{colors.deepPlum.900}", }, }, fg: { value: { base: "{colors.deepPlum.700}", _dark: "{colors.deepPlum.200}", }, }, muted: { value: { base: "{colors.deepPlum.100}", _dark: "{colors.deepPlum.900}", }, }, subtle: { value: { base: "{colors.deepPlum.200}", _dark: "{colors.deepPlum.700}", }, }, emphasized: { value: { base: "{colors.deepPlum.300}", _dark: "{colors.deepPlum.600}", }, }, focusRing: { value: { base: "{colors.deepPlum.500}", _dark: "{colors.deepPlum.500}", }, }, }, // Palettes for message callouts observing: { solid: { value: { base: "{colors.warmNeutral.900}", _dark: "{colors.warmNeutral.100}", }, }, contrast: { value: { base: "{colors.warmNeutral.100}", _dark: "{colors.warmNeutral.900}", }, }, fg: { value: { base: "{colors.warmNeutral.700}", _dark: "{colors.warmNeutral.200}", }, }, muted: { value: { base: "{colors.warmNeutral.100}", _dark: "{colors.warmNeutral.900}", }, }, subtle: { value: { base: "{colors.warmNeutral.200}", _dark: "{colors.warmNeutral.700}", }, }, emphasized: { value: { base: "{colors.warmNeutral.300}", _dark: "{colors.warmNeutral.600}", }, }, focusRing: { value: { base: "{colors.warmNeutral.500}", _dark: "{colors.warmNeutral.500}", }, }, }, thinking: { solid: { value: { base: "{colors.deepPlum.800}", _dark: "{colors.deepPlum.200}", }, }, contrast: { value: { base: "{colors.deepPlum.200}", _dark: "{colors.deepPlum.800}", }, }, fg: { value: { base: "{colors.deepPlum.600}", _dark: "{colors.deepPlum.300}", }, }, muted: { value: { base: "{colors.deepPlum.200}", _dark: "{colors.deepPlum.700}", }, }, subtle: { value: { base: "{colors.deepPlum.300}", _dark: "{colors.deepPlum.600}", }, }, emphasized: { value: { base: "{colors.deepPlum.400}", _dark: "{colors.deepPlum.500}", }, }, focusRing: { value: { base: "{colors.deepPlum.500}", _dark: "{colors.deepPlum.500}", }, }, }, insightful: { solid: { value: { base: "{colors.neutralGreen.900}", _dark: "{colors.neutralGreen.100}", }, }, contrast: { value: { base: "{colors.neutralGreen.100}", _dark: "{colors.neutralGreen.900}", }, }, fg: { value: { base: "{colors.neutralGreen.700}", _dark: "{colors.neutralGreen.200}", }, }, muted: { value: { base: "{colors.neutralGreen.100}", _dark: "{colors.neutralGreen.900}", }, }, subtle: { value: { base: "{colors.neutralGreen.200}", _dark: "{colors.neutralGreen.700}", }, }, emphasized: { value: { base: "{colors.neutralGreen.300}", _dark: "{colors.neutralGreen.600}", }, }, focusRing: { value: { base: "{colors.neutralGreen.500}", _dark: "{colors.neutralGreen.500}", }, }, }, }, }, }, }); export const system = createSystem(defaultConfig, config);