{
  "schemaVersion": "1.0",
  "id": "glowstick-pipeline",
  "version": "1.1.0",
  "name": "Glowstick Pipeline",
  "tier": "free",
  "summary": "Dark-first CRM interface: green-black surfaces, one luminous lime accent and wide display type for late-night pipeline work.",
  "tags": {
    "industries": [
      "crm",
      "sales",
      "customer-success"
    ],
    "moods": [
      "nocturnal",
      "cinematic",
      "luminous",
      "focused"
    ],
    "density": "comfortable",
    "contrast": "standard"
  },
  "rationale": {
    "overview": "Glowstick Pipeline is for CRM tools that sales and account teams keep open for hours, often after dark. Dark mode is the primary design and light mode is the companion; both use the same semantic tokens. Surfaces are green-tinted near-blacks, and a single lime accent (primary, ring, active stage chips) marks the next action. Glow appears only on the focus ring and the primary button hover, never as decoration.",
    "color": "Brand is a lime green at OKLCH hue ~130 with chroma peaking at brand.400–500 and tapering toward 50 and 950. Neutrals carry the same hue at low chroma, so neutral.950 (#0a110b) reads as tinted night rather than grey. Dark: primary brand.400 on neutral.950 is about 9.9:1, and primary-foreground brand.950 on brand.400 is about 8:1. Light: primary brand.700 with white text is about 5.3:1, and ring brand.600 on neutral.50 is about 3.4:1. Destructive uses the crimson danger ramp (hue ~5), far from the brand hue in both modes: danger.600 with white is about 5.6:1, danger.400 with danger.950 about 6.3:1. Success is a cooler emerald (success.700 light, success.400 dark) so a 'Won' badge is not confused with the primary button. Warning is a warm amber that sits next to the lime on the hue wheel. Light muted-foreground is neutral.600, about 6.5:1 on background and 5.8:1 on muted. Dark muted-foreground is neutral.300, about 7:1 on muted.",
    "typography": "The scale is a major third (1.25) rounded to the 4px grid: 12, 14, 16, 20, 24, 32, 40. Unbounded (500/600) is used only for display-lg 40px, display-md 32px and heading-lg 24px. Because the face is wide, tracking tightens as size grows: -0.025em at 40px, -0.02em at 32px, -0.015em at 24px. Onest (400/500/600) covers all UI text. Body uses line-height 1.55–1.6 for long notes and 1.5 at 14px for table cells. JetBrains Mono (400/500) at code 13px is for deal IDs, API keys and timestamps.",
    "layout": "Comfortable density on a 4px grid. Content max width is 1280px and cards use space.6 (24px) padding. Table rows are 48px, and buttons and inputs are 40px. Badges are 22px with space.2 padding, so long contact lists stay scannable on dark surfaces.",
    "elevation": "In dark mode, depth comes from lightness steps rather than shadow: background neutral.950, card neutral.900, popover/secondary/muted neutral.800, each with a 1px border. Cards use shadow.sm; popovers and dialogs use shadow.md and shadow.lg. Shadows are pure black at 35–70% opacity, so they read on dark surfaces without colored halos.",
    "shapes": "radius.md (8px) for buttons and inputs, radius.lg (12px) for cards, radius.xl (20px) for hero and summary panels. radius.full is used only for status badges and pipeline stage chips."
  },
  "primitives": {
    "color": {
      "brand": {
        "50": "#f2fbe9",
        "100": "#e0f7cb",
        "200": "#c3efa0",
        "300": "#9fe170",
        "400": "#7bcf48",
        "500": "#5db52c",
        "600": "#479820",
        "700": "#377a19",
        "800": "#2b5e16",
        "900": "#1f4412",
        "950": "#112a08"
      },
      "neutral": {
        "50": "#f4f8f3",
        "100": "#e5ece4",
        "200": "#cdd8cb",
        "300": "#aebcac",
        "400": "#8a9d88",
        "500": "#687a66",
        "600": "#4d5e4c",
        "700": "#364436",
        "800": "#222e23",
        "900": "#151e16",
        "950": "#0a110b"
      },
      "success": {
        "50": "#e4ffec",
        "100": "#c9f9d8",
        "200": "#afe7c1",
        "300": "#8dd0a4",
        "400": "#65b683",
        "500": "#389c64",
        "600": "#23824f",
        "700": "#16683d",
        "800": "#0a502d",
        "900": "#01381d",
        "950": "#00220f"
      },
      "warning": {
        "50": "#fff6e6",
        "100": "#ffe8c2",
        "200": "#f7d293",
        "300": "#e2b66b",
        "400": "#ca9837",
        "500": "#ae7c00",
        "600": "#906600",
        "700": "#745100",
        "800": "#583d00",
        "900": "#3e2a00",
        "950": "#261800"
      },
      "danger": {
        "50": "#fff4f5",
        "100": "#ffe3e6",
        "200": "#ffc6ce",
        "300": "#ff9dac",
        "400": "#f66e89",
        "500": "#e1436b",
        "600": "#c02d56",
        "700": "#9c2043",
        "800": "#791231",
        "900": "#580521",
        "950": "#390011"
      }
    },
    "font": {
      "display": {
        "family": "Unbounded",
        "fallback": "system-ui, sans-serif",
        "source": "google",
        "weights": [
          500,
          600
        ]
      },
      "sans": {
        "family": "Onest",
        "fallback": "system-ui, sans-serif",
        "source": "google",
        "weights": [
          400,
          500,
          600
        ]
      },
      "mono": {
        "family": "JetBrains Mono",
        "fallback": "ui-monospace, monospace",
        "source": "google",
        "weights": [
          400,
          500
        ]
      }
    },
    "radius": {
      "none": 0,
      "sm": 4,
      "md": 8,
      "lg": 12,
      "xl": 20,
      "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": "0 1px 2px rgba(0, 0, 0, 0.35)",
      "md": "0 6px 18px -4px rgba(0, 0, 0, 0.55)",
      "lg": "0 24px 56px -12px rgba(0, 0, 0, 0.70)"
    }
  },
  "typography": {
    "display-lg": {
      "font": "display",
      "size": 40,
      "lineHeight": 1.1,
      "weight": 600,
      "letterSpacing": -0.025
    },
    "display-md": {
      "font": "display",
      "size": 32,
      "lineHeight": 1.15,
      "weight": 600,
      "letterSpacing": -0.02
    },
    "heading-lg": {
      "font": "display",
      "size": 24,
      "lineHeight": 1.25,
      "weight": 500,
      "letterSpacing": -0.015
    },
    "heading-md": {
      "font": "sans",
      "size": 20,
      "lineHeight": 1.3,
      "weight": 600,
      "letterSpacing": -0.01
    },
    "heading-sm": {
      "font": "sans",
      "size": 16,
      "lineHeight": 1.4,
      "weight": 600,
      "letterSpacing": -0.005
    },
    "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.25,
      "weight": 500,
      "letterSpacing": 0.005
    },
    "caption": {
      "font": "sans",
      "size": 12,
      "lineHeight": 1.4,
      "weight": 500,
      "letterSpacing": 0.01
    },
    "code": {
      "font": "mono",
      "size": 13,
      "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.700}",
      "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.600}"
    },
    "dark": {
      "background": "{color.neutral.950}",
      "foreground": "{color.neutral.50}",
      "card": "{color.neutral.900}",
      "card-foreground": "{color.neutral.50}",
      "popover": "{color.neutral.800}",
      "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.300}",
      "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.800}",
      "input": "{color.neutral.700}",
      "ring": "{color.brand.400}"
    }
  },
  "components": {
    "button": {
      "height": 40,
      "paddingX": "{space.4}",
      "radius": "{radius.md}",
      "typography": "{typography.label}",
      "fontWeight": 600
    },
    "input": {
      "height": 40,
      "paddingX": "{space.3}",
      "radius": "{radius.md}",
      "typography": "{typography.body-sm}",
      "borderWidth": 1
    },
    "card": {
      "padding": "{space.6}",
      "radius": "{radius.lg}",
      "shadow": "{shadow.sm}",
      "borderWidth": 1
    },
    "badge": {
      "height": 22,
      "paddingX": "{space.2}",
      "radius": "{radius.full}",
      "typography": "{typography.caption}"
    }
  },
  "guidance": {
    "do": [
      "Review every screen in dark mode first, then confirm that light mode works with the same semantic tokens and no per-mode overrides.",
      "Use one primary button per view (brand.400 in dark, brand.700 in light), such as 'Add contact' or 'Log deal'. Make all other actions secondary or ghost.",
      "Build depth in dark mode with background neutral.950, card neutral.900 and popover/muted neutral.800, each with a 1px border token.",
      "Set Unbounded only at heading-lg (24px), display-md (32px) and display-lg (40px). Use Onest for tables, forms, buttons and body text.",
      "On every interactive element, show keyboard focus with a 2px ring token (brand.400 dark, brand.600 light) and a 2px offset.",
      "Set deal IDs, API keys and timestamps in JetBrains Mono at the code style (13px). Right-align numeric table columns in Onest with tabular figures.",
      "Pair success, warning and destructive badges (22px, radius.full, caption) with an icon or text label such as 'Won', 'At risk' or 'Lost'.",
      "Use muted-foreground (neutral.600 light, neutral.300 dark) for table metadata, helper text under 40px inputs, and captions."
    ],
    "dont": [
      "Don't use brand green for errors or success green for primary actions. Destructive buttons and 'Lost' stages use the danger ramp only.",
      "Don't use pure black (#000000) or untinted grey for surfaces. Take every surface from the neutral ramp.",
      "Don't apply glow or colored shadows anywhere except the focus ring and the primary button hover state.",
      "Don't set Unbounded below 20px, in all caps, or for paragraph text.",
      "Don't put white text on brand.400. In dark mode, primary-foreground is brand.950.",
      "Don't nest more than three surface levels (background, card, popover/muted) in one view.",
      "Don't use muted-foreground for body copy. Use foreground at body-md (16px) or body-sm (14px).",
      "Don't track display-lg or display-md wider than their tokens; positive tracking on Unbounded makes headings fall apart."
    ]
  }
}
