{
  "schemaVersion": "1.0",
  "id": "ticker-cerulean",
  "version": "1.1.0",
  "name": "Ticker Cerulean",
  "tier": "free",
  "summary": "Retro-modern fintech UI: teletext-era cerulean, hard-offset shadows and chunky grotesque headlines on true-neutral surfaces with modern spacing.",
  "tags": {
    "industries": [
      "fintech",
      "banking",
      "payments"
    ],
    "moods": [
      "retro",
      "confident",
      "playful",
      "clear"
    ],
    "density": "comfortable",
    "contrast": "standard"
  },
  "rationale": {
    "overview": "Ticker Cerulean is for money apps that want personality and still need to read as trustworthy. It borrows three cues from 70s/80s print and early terminal software: one saturated cerulean, grotesque display headlines, and zero-blur offset shadows. Spacing, contrast and type sizes follow current practice. Text pairs hold at least 4.5:1 in both modes, and most hold 5:1 or more, so the retro cues never compete with reading balances and amounts.",
    "color": "Cerulean (OKLCH hue about 230) is the only action color. It is used for primary, links, ring and selected states. Primary is brand.600 #0f6d98 in light mode: 5.7:1 with white text and 5.5:1 against background. In dark mode primary is brand.400 #46a6d3: 6.8:1 against background and 5.9:1 with brand.950 text. Neutrals are deliberately untinted grey, so cerulean stays the only chromatic voice. Status hues sit far from the brand. Danger is a clear red, more than 40 CIEDE2000 units from primary in both modes. Success is a deep emerald (success.700 in light mode, 7:1 with white). Warning is a 70s mustard fill (warning.200 light, warning.400 dark) with warning.900 or warning.950 text. Both status hues hold their chroma at steps 400–700 like the brand ramp, so the five ramps read as one family. muted-foreground is neutral.600 in light mode (5.5:1 on background, 5.1:1 on muted). In dark mode it is neutral.400 #a8a8a8 (7.4:1 on background, 5.1:1 on muted).",
    "typography": "The scale uses a 1.4 ratio for display and headings: 20, 28, 40, 56px. Text sizes step 12, 14, 16, 18px. Bricolage Grotesque (600/700) sets display-lg, display-md, heading-lg and heading-md, at 20px and above only. Tracking tightens as size grows: -0.01em at 20px, -0.015em at 28px, -0.025em at 40px, -0.03em at 56px. Figtree (400–700) sets heading-sm, body, label and caption. body-md is 16px with 1.55 line height. JetBrains Mono (400/500) sets the code style at 14px for account numbers, IBANs and transaction IDs.",
    "layout": "Comfortable density on a 4px grid. Content max-width is 1200px. Cards use space.6 (24px) padding. Buttons and inputs are 44px tall. Page sections are separated by space.12–space.16 (48–64px) gaps instead of rules.",
    "elevation": "Elevation is graphic: hard offsets with 0 blur, like print misregistration. shadow.sm (2px offset) plus a 1px border is used on cards and buttons. shadow.md (3px) is for menus and popovers, and shadow.lg (6px) is for dialogs. Dark surfaces absorb the offset shadow, so in dark mode separation comes from card neutral.900 on background neutral.950 and from the neutral.700 border.",
    "shapes": "Moderate rounding: radius.md (8px) on buttons and inputs, radius.lg (12px) on cards. This is an 80s software window softened for today. radius.full is used only for badges and status chips."
  },
  "primitives": {
    "color": {
      "brand": {
        "50": "#eef8fc",
        "100": "#d8eef8",
        "200": "#b2ddf0",
        "300": "#7fc4e4",
        "400": "#46a6d3",
        "500": "#1c88b8",
        "600": "#0f6d98",
        "700": "#0e567a",
        "800": "#0f445f",
        "900": "#0f3649",
        "950": "#0a2330"
      },
      "neutral": {
        "50": "#fafafa",
        "100": "#f2f2f2",
        "200": "#e2e2e2",
        "300": "#cbcbcb",
        "400": "#a8a8a8",
        "500": "#808080",
        "600": "#666666",
        "700": "#4d4d4d",
        "800": "#363636",
        "900": "#222222",
        "950": "#121212"
      },
      "success": {
        "50": "#effaf3",
        "100": "#d6f3e0",
        "200": "#aee6c3",
        "300": "#7dd2a0",
        "400": "#4cb97d",
        "500": "#2a9d62",
        "600": "#1d8050",
        "700": "#176640",
        "800": "#124f33",
        "900": "#0c3a25",
        "950": "#062315"
      },
      "warning": {
        "50": "#fff8e1",
        "100": "#ffefb8",
        "200": "#fbdf85",
        "300": "#f0c850",
        "400": "#dcae1f",
        "500": "#bd920a",
        "600": "#9a7500",
        "700": "#7b5c00",
        "800": "#5e4500",
        "900": "#433000",
        "950": "#2a1d00"
      },
      "danger": {
        "50": "#fff2f2",
        "100": "#ffe1e1",
        "200": "#ffc2c3",
        "300": "#ff9496",
        "400": "#f66269",
        "500": "#de3a45",
        "600": "#bf2535",
        "700": "#9b1b2a",
        "800": "#771420",
        "900": "#560c16",
        "950": "#36050b"
      }
    },
    "font": {
      "display": {
        "family": "Bricolage Grotesque",
        "fallback": "system-ui, sans-serif",
        "source": "google",
        "weights": [
          600,
          700
        ]
      },
      "sans": {
        "family": "Figtree",
        "fallback": "system-ui, sans-serif",
        "source": "google",
        "weights": [
          400,
          500,
          600,
          700
        ]
      },
      "mono": {
        "family": "JetBrains Mono",
        "fallback": "ui-monospace, monospace",
        "source": "google",
        "weights": [
          400,
          500
        ]
      }
    },
    "radius": {
      "none": 0,
      "sm": 4,
      "md": 8,
      "lg": 12,
      "xl": 16,
      "full": 9999
    },
    "space": {
      "0": 0,
      "1": 4,
      "2": 8,
      "3": 12,
      "4": 16,
      "5": 20,
      "6": 24,
      "8": 32,
      "10": 40,
      "12": 48,
      "16": 64,
      "20": 80,
      "24": 96,
      "0.5": 2,
      "1.5": 6
    },
    "shadow": {
      "sm": "2px 2px 0 rgba(18, 18, 18, 0.16)",
      "md": "3px 3px 0 rgba(18, 18, 18, 0.2)",
      "lg": "6px 6px 0 rgba(18, 18, 18, 0.24)"
    }
  },
  "typography": {
    "display-lg": {
      "font": "display",
      "size": 56,
      "lineHeight": 1.05,
      "weight": 700,
      "letterSpacing": -0.03
    },
    "display-md": {
      "font": "display",
      "size": 40,
      "lineHeight": 1.1,
      "weight": 700,
      "letterSpacing": -0.025
    },
    "heading-lg": {
      "font": "display",
      "size": 28,
      "lineHeight": 1.2,
      "weight": 600,
      "letterSpacing": -0.015
    },
    "heading-md": {
      "font": "display",
      "size": 20,
      "lineHeight": 1.3,
      "weight": 600,
      "letterSpacing": -0.01
    },
    "heading-sm": {
      "font": "sans",
      "size": 16,
      "lineHeight": 1.4,
      "weight": 700,
      "letterSpacing": 0
    },
    "body-lg": {
      "font": "sans",
      "size": 18,
      "lineHeight": 1.6,
      "weight": 400,
      "letterSpacing": 0
    },
    "body-md": {
      "font": "sans",
      "size": 16,
      "lineHeight": 1.55,
      "weight": 400,
      "letterSpacing": 0
    },
    "body-sm": {
      "font": "sans",
      "size": 14,
      "lineHeight": 1.5,
      "weight": 400,
      "letterSpacing": 0
    },
    "label": {
      "font": "sans",
      "size": 14,
      "lineHeight": 1.3,
      "weight": 600,
      "letterSpacing": 0.005
    },
    "caption": {
      "font": "sans",
      "size": 12,
      "lineHeight": 1.4,
      "weight": 500,
      "letterSpacing": 0.02
    },
    "code": {
      "font": "mono",
      "size": 14,
      "lineHeight": 1.5,
      "weight": 400,
      "letterSpacing": 0
    }
  },
  "semantic": {
    "light": {
      "background": "{color.neutral.50}",
      "foreground": "{color.neutral.950}",
      "card": "#ffffff",
      "card-foreground": "{color.neutral.950}",
      "popover": "#ffffff",
      "popover-foreground": "{color.neutral.950}",
      "primary": "{color.brand.600}",
      "primary-foreground": "#ffffff",
      "secondary": "{color.neutral.100}",
      "secondary-foreground": "{color.neutral.900}",
      "muted": "{color.neutral.100}",
      "muted-foreground": "{color.neutral.600}",
      "accent": "{color.brand.100}",
      "accent-foreground": "{color.brand.900}",
      "destructive": "{color.danger.600}",
      "destructive-foreground": "#ffffff",
      "success": "{color.success.700}",
      "success-foreground": "#ffffff",
      "warning": "{color.warning.200}",
      "warning-foreground": "{color.warning.900}",
      "border": "{color.neutral.200}",
      "input": "{color.neutral.400}",
      "ring": "{color.brand.500}"
    },
    "dark": {
      "background": "{color.neutral.950}",
      "foreground": "{color.neutral.50}",
      "card": "{color.neutral.900}",
      "card-foreground": "{color.neutral.50}",
      "popover": "{color.neutral.900}",
      "popover-foreground": "{color.neutral.50}",
      "primary": "{color.brand.400}",
      "primary-foreground": "{color.brand.950}",
      "secondary": "{color.neutral.800}",
      "secondary-foreground": "{color.neutral.100}",
      "muted": "{color.neutral.800}",
      "muted-foreground": "{color.neutral.400}",
      "accent": "{color.brand.900}",
      "accent-foreground": "{color.brand.100}",
      "destructive": "{color.danger.400}",
      "destructive-foreground": "{color.danger.950}",
      "success": "{color.success.400}",
      "success-foreground": "{color.success.950}",
      "warning": "{color.warning.400}",
      "warning-foreground": "{color.warning.950}",
      "border": "{color.neutral.700}",
      "input": "{color.neutral.600}",
      "ring": "{color.brand.400}"
    }
  },
  "components": {
    "button": {
      "height": 44,
      "paddingX": "{space.5}",
      "radius": "{radius.md}",
      "typography": "{typography.label}",
      "fontWeight": 600,
      "shadow": "{shadow.sm}"
    },
    "input": {
      "height": 44,
      "paddingX": "{space.3}",
      "radius": "{radius.md}",
      "typography": "{typography.body-md}",
      "borderWidth": 1
    },
    "card": {
      "padding": "{space.6}",
      "radius": "{radius.lg}",
      "shadow": "{shadow.sm}",
      "borderWidth": 1
    },
    "badge": {
      "height": 24,
      "paddingX": "{space.2}",
      "radius": "{radius.full}",
      "typography": "{typography.caption}"
    }
  },
  "guidance": {
    "do": [
      "Use one primary button per view: brand.600 with white text in light mode, brand.400 with brand.950 text in dark mode. Make other actions secondary or ghost.",
      "Show focus with a 2px ring (brand.500 light, brand.400 dark) offset 2px from the control on every button, input and badge link.",
      "Use Bricolage Grotesque only for display-lg, display-md, heading-lg and heading-md (20px and above). Use Figtree for heading-sm, body, label and caption, including all buttons and table cells.",
      "Build elevation from zero-blur offsets plus a 1px border: shadow.sm for cards and buttons, shadow.md for menus and popovers, shadow.lg for dialogs. In dark mode, rely on the card (neutral.900) and border (neutral.700) for separation.",
      "Set currency amounts in Figtree with font-feature-settings 'tnum' and right-align them in tables. Use the code style (JetBrains Mono 14px) for account numbers, IBANs and transaction IDs.",
      "Pair every success, warning and destructive fill with an icon or text label so status never relies on color alone.",
      "Keep buttons and inputs at 44px height, and separate page sections with space.12 (48px) or space.16 (64px)."
    ],
    "dont": [
      "Don't add blur to shadows. Every shadow token keeps a 0 blur radius; soft ambient shadows remove the print-offset cue.",
      "Don't introduce warm or cool greys. Surfaces, borders and muted text use only the untinted neutral ramp.",
      "Don't use brand blue for errors or danger red for primary actions. Destructive is danger.600 in light mode and danger.400 in dark mode.",
      "Don't set Bricolage Grotesque below 20px, in body copy, or in all caps.",
      "Don't exceed radius.lg (12px) on cards or radius.md (8px) on buttons and inputs. Use radius.full only on badges.",
      "Don't use muted-foreground for text below 12px or inside accent surfaces. Accent (brand.100 light, brand.900 dark) is for selected rows and highlights, with accent-foreground text."
    ]
  }
}
