{
  "schemaVersion": "1.0",
  "id": "stagehand-floodlight",
  "version": "1.1.0",
  "name": "Stagehand Floodlight",
  "tier": "free",
  "summary": "Raw, high-contrast event UI: square corners, solid offset shadows, heavy Fraunces headlines and electric cyan on teal-tinted concrete.",
  "tags": {
    "industries": [
      "events",
      "ticketing",
      "festivals"
    ],
    "moods": [
      "brutalist",
      "bold",
      "raw",
      "deliberate"
    ],
    "density": "comfortable",
    "contrast": "high"
  },
  "rationale": {
    "overview": "Stagehand Floodlight is for festivals, club nights, conferences and ticket drops. Each surface is a slab with a 2px border. Each shadow is a solid offset block in ink (#0e1413). Display headlines are set in Fraunces 900. There are no gradients, blurs or rounded corners. The model is a poster pasted on a concrete wall: legible at a glance, with one cyan action per view.",
    "color": "Brand cyan (hue ~185°) is the only action color. Light mode uses primary brand.700 #006d76: about 5.6:1 on background and 6.1:1 under white text. Dark mode uses brand.400 #22c9d4: about 9.2:1 on background and 7.7:1 under brand.950 text. Neutrals are cold concrete tinted toward the same teal hue, with chroma held low and even from 50 to 950. Ink (neutral.950) is the default foreground and the shadow color. Success is shifted cool, toward ~155°, so it sits next to cyan without competing. Warning is a lemon signal yellow (warning.300 light, warning.400 dark) that always carries warning.950 text. Destructive is red (danger.600 light, danger.400 dark), roughly 170° away from the brand hue, so it can never be confused with primary. Light borders are ink, not hairline grey. Dark borders are neutral.400.",
    "typography": "The scale steps by a ratio of about 1.4 from heading-sm 20px: 20 / 28 / 40 / 56 / 76. Body sizes run 14 / 16 / 18 below it. Fraunces ships 700 and 900 here: 900 for display-lg and display-md, 700 for heading-lg. Display tracking tightens with size (-0.035 at 76px, -0.03 at 56px, -0.02 at 40px). Instrument Sans (400–700) handles all UI text, with headings and labels at 700 and body at 400. Body line heights are 1.5–1.55. JetBrains Mono (400/500/700) sets captions, dates, venues and ticket codes at 12–14px.",
    "layout": "The base grid is 4px. Padding inside bordered blocks is generous: cards use space.6 (24px), sections use space.16–24. Sections are full width, divided by 2px rules in the border token, with content capped at 1280px. Asymmetric columns are allowed. Buttons and inputs are 48px tall. Badges are 24px tall.",
    "elevation": "There is no blur and no ambient shadow. Elevation is a solid ink offset of shadow.sm 2px, shadow.md 4px or shadow.lg 8px, always paired with a 2px border. Cards use shadow.md; dialogs and popovers use shadow.lg. On hover, the element translates 2px toward its shadow and drops to shadow.sm; on active, it translates 4px and the shadow is removed. In dark mode the ink shadow nearly disappears against neutral.950. There, depth comes from the card fill (neutral.900, one step above background) plus the neutral.400 border.",
    "shapes": "Every radius is 0 except radius.full, which is reserved for avatars and status dots of 8px or less. Buttons, inputs, cards, badges, menus, dialogs and images all have square corners. Borders are 2px and solid, never dashed or translucent."
  },
  "primitives": {
    "color": {
      "brand": {
        "50": "#e9fdfd",
        "100": "#c9f8fa",
        "200": "#9aeff3",
        "300": "#5fe0e8",
        "400": "#22c9d4",
        "500": "#00acb8",
        "600": "#008994",
        "700": "#006d76",
        "800": "#00545b",
        "900": "#003d43",
        "950": "#00282c"
      },
      "neutral": {
        "50": "#f4f7f7",
        "100": "#e6eceb",
        "200": "#cfd8d7",
        "300": "#b0bcbb",
        "400": "#8d9b9a",
        "500": "#6e7c7b",
        "600": "#566362",
        "700": "#424e4d",
        "800": "#2e3837",
        "900": "#1c2423",
        "950": "#0e1413"
      },
      "success": {
        "50": "#e8fbf1",
        "100": "#c6f4dc",
        "200": "#93e7bd",
        "300": "#57d398",
        "400": "#26b977",
        "500": "#109a5f",
        "600": "#097c4c",
        "700": "#06623d",
        "800": "#044c30",
        "900": "#023522",
        "950": "#012115"
      },
      "warning": {
        "50": "#fffbe0",
        "100": "#fff4b0",
        "200": "#ffe866",
        "300": "#ffd91f",
        "400": "#f2c200",
        "500": "#d1a100",
        "600": "#a67f00",
        "700": "#7d6000",
        "800": "#5a4500",
        "900": "#3d2f00",
        "950": "#261d00"
      },
      "danger": {
        "50": "#fff1f1",
        "100": "#ffdede",
        "200": "#ffc0c0",
        "300": "#ff9494",
        "400": "#ff6262",
        "500": "#ee3434",
        "600": "#cc1b1b",
        "700": "#a50f12",
        "800": "#7f080c",
        "900": "#5c0407",
        "950": "#3b0104"
      }
    },
    "font": {
      "display": {
        "family": "Fraunces",
        "fallback": "Georgia, serif",
        "source": "google",
        "weights": [
          700,
          900
        ]
      },
      "sans": {
        "family": "Instrument Sans",
        "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,
          700
        ]
      }
    },
    "radius": {
      "none": 0,
      "sm": 0,
      "md": 0,
      "lg": 0,
      "xl": 0,
      "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 0 #0e1413",
      "md": "4px 4px 0 0 #0e1413",
      "lg": "8px 8px 0 0 #0e1413"
    }
  },
  "typography": {
    "display-lg": {
      "font": "display",
      "size": 76,
      "lineHeight": 0.95,
      "weight": 900,
      "letterSpacing": -0.035
    },
    "display-md": {
      "font": "display",
      "size": 56,
      "lineHeight": 1,
      "weight": 900,
      "letterSpacing": -0.03
    },
    "heading-lg": {
      "font": "display",
      "size": 40,
      "lineHeight": 1.08,
      "weight": 700,
      "letterSpacing": -0.02
    },
    "heading-md": {
      "font": "sans",
      "size": 28,
      "lineHeight": 1.2,
      "weight": 700,
      "letterSpacing": -0.015
    },
    "heading-sm": {
      "font": "sans",
      "size": 20,
      "lineHeight": 1.3,
      "weight": 700,
      "letterSpacing": -0.005
    },
    "body-lg": {
      "font": "sans",
      "size": 18,
      "lineHeight": 1.55,
      "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.2,
      "weight": 700,
      "letterSpacing": 0.04
    },
    "caption": {
      "font": "mono",
      "size": 12,
      "lineHeight": 1.4,
      "weight": 500,
      "letterSpacing": 0.03
    },
    "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.700}",
      "primary-foreground": "#ffffff",
      "secondary": "{color.neutral.100}",
      "secondary-foreground": "{color.neutral.900}",
      "muted": "{color.neutral.100}",
      "muted-foreground": "{color.neutral.700}",
      "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.300}",
      "warning-foreground": "{color.warning.950}",
      "border": "{color.neutral.950}",
      "input": "{color.neutral.700}",
      "ring": "{color.brand.700}"
    },
    "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.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.400}",
      "input": "{color.neutral.500}",
      "ring": "{color.brand.400}"
    }
  },
  "components": {
    "button": {
      "height": 48,
      "paddingX": "{space.5}",
      "radius": "{radius.none}",
      "typography": "{typography.label}",
      "fontWeight": 700
    },
    "input": {
      "height": 48,
      "paddingX": "{space.4}",
      "radius": "{radius.none}",
      "typography": "{typography.body-md}",
      "borderWidth": 2
    },
    "card": {
      "padding": "{space.6}",
      "radius": "{radius.none}",
      "shadow": "{shadow.md}",
      "borderWidth": 2
    },
    "badge": {
      "height": 24,
      "paddingX": "{space.2}",
      "radius": "{radius.none}",
      "typography": "{typography.caption}"
    }
  },
  "guidance": {
    "do": [
      "Set radius.none (0) on buttons, inputs, cards, badges, menus, dialogs and images. Use radius.full only for avatars and status dots 8px or smaller.",
      "Give every card, input and button a solid 2px border: the border token for cards and buttons, the input token for inputs.",
      "Use shadow.md on cards and shadow.lg on dialogs and popovers. On hover, translate 2px toward the shadow and switch to shadow.sm; on active, translate 4px and remove the shadow.",
      "Show focus as a 2px solid ring-token outline with a 2px offset on every interactive element. Never rely on a shadow change alone.",
      "Set display-lg (76px) and display-md (56px) in Fraunces 900 with their negative letterSpacing, and keep headlines to two lines or fewer.",
      "Set buttons, labels and nav items in Instrument Sans 700 using the label style (14px, +0.04 tracking). Set dates, times, venues and ticket codes in JetBrains Mono using caption (12px) or code (14px).",
      "Use one primary button per view for the main action, such as 'Get tickets'. Make all other actions secondary buttons with a 2px border.",
      "Use the warning token with warning-foreground text for sold-out and last-tickets badges, and always include a text label."
    ],
    "dont": [
      "Don't use blurred shadows, gradients, glassmorphism or translucent borders.",
      "Don't round any corner above 0, including images, tags, tooltips and dropdowns.",
      "Don't use cyan for errors or destructive actions. Use destructive (danger.600 in light, danger.400 in dark) with destructive-foreground text.",
      "Don't set Fraunces below 40px (heading-lg). Use Instrument Sans for heading-md (28px) and everything smaller.",
      "Don't use muted-foreground for primary content or for text smaller than 14px (body-sm).",
      "Don't use untinted grey. Take every neutral from the teal-tinted neutral ramp.",
      "Don't put primary-colored text on the accent surface. Use accent-foreground (brand.900 in light, brand.100 in dark).",
      "Don't put white text on the warning token. Use warning-foreground (warning.950) in both modes."
    ]
  }
}
