{
  "name": "HempRoster",
  "version": 1,
  "meta": {
    "source": "code",
    "paths": {
      "tokens": ["site/src/styles/global.css", "site/src/lib/roster.js", "site/src/components/PlayerCard.astro"],
      "design": ["design/canvas/Identity.dc.html", "design/canvas/Card.dc.html", "design/canvas/Badges.dc.html"],
      "fonts": ["site/node_modules/@fontsource/big-shoulders-display", "site/node_modules/@fontsource-variable/archivo", "site/node_modules/@fontsource/ibm-plex-mono"]
    },
    "synced": "2026-10-16"
  },
  "color": {
    "themes": [{ "id": "light", "name": "Card stock" }],
    "tokens": [
      { "name": "color-turf", "value": "#0f2a1a", "usage": "Dark grounds: site header, hero, scoreboard band, the primary logo lockup. Text on it is color-chalk (14.0:1), color-mist (9.8:1) or color-scoreboard (9.2:1)." },
      { "name": "color-turf-deep", "value": "#0b2014", "usage": "Footer ground, one step darker than color-turf. Footer copy is color-footer-text (9.3:1)." },
      { "name": "color-field", "value": "#2e5e0e", "usage": "Primary green, shared with HempAware. Fill of the green button (white text 7.7:1) and ROSTER in the light wordmark. Text on color-chalk 7.0:1." },
      { "name": "color-field-ink", "value": "#1f4a0a", "usage": "Link text on color-chalk (9.4:1) and white (10.3:1); the SAY label in voice examples." },
      { "name": "color-chalk", "value": "#f6f4ee", "usage": "Page ground and Rolodex notch fill. Body text on it is color-ink (16.2:1); secondary text color-bench (7.6:1)." },
      { "name": "color-ink", "value": "#16181a", "usage": "All body text, card and tab outlines, the outline button, the Rookie stamp ground. Reads on chalk, paper, manila (14.2:1) and every light position color." },
      { "name": "color-scoreboard", "value": "#f2c230", "usage": "Highlight fill: the yellow button, Verified Player seal, Starting Lineup label and ring, ROSTER on turf, jersey block on the member badge. Ink text on it 10.6:1. Never text on white or chalk (1.7:1)." },
      { "name": "color-scoreboard-deep", "value": "#a57f0c", "usage": "The 3px pressed-edge shadow under the yellow button only. Not a text color." },
      { "name": "color-manila", "value": "#efe5cc", "usage": "Card backs (the stats side), table header rows, the vocabulary table head. Ink text 14.2:1, color-stat-label 5.9:1." },
      { "name": "color-bench", "value": "#4a4f4a", "usage": "Secondary text: card meta line, taglines, breadcrumbs, help copy. 7.6:1 on chalk, 8.4:1 on paper, 6.7:1 on manila." },
      { "name": "color-chalkline", "value": "#d9d4c7", "usage": "Hairline dividers between table rows and list items. Decorative only, never the sole boundary of a control." },
      { "name": "color-leaf", "value": "#7dbb4f", "usage": "The hemp leaf in the mark on dark grounds, and Hemp in the by HempAware byline on turf (6.7:1)." },
      { "name": "color-sky", "value": "#c7daf5", "usage": "Aware in the by HempAware byline on turf (10.8:1). On light grounds use color-aware-blue instead." },
      { "name": "color-mist", "value": "#c9d1c7", "usage": "Muted text on turf: the header byline, captions on dark bands (9.8:1)." },
      { "name": "color-paper", "value": "#ffffff", "usage": "Player Card front face, form inputs, tables and panels on chalk. Ink text 17.8:1." },
      { "name": "color-paper-unclaimed", "value": "#fbfaf6", "usage": "Front face of an unclaimed card in the design canvas, paired with a dashed outline. The live site still uses color-paper here." },
      { "name": "color-stat-label", "value": "#5a5546", "usage": "Mono stat labels and the source line on the card back, on color-manila (5.9:1)." },
      { "name": "color-chip-line", "value": "#cfc8b6", "usage": "1px border of info chips (Home, Est.) on the card front. Decorative; the chip text carries the meaning." },
      { "name": "color-unclaimed", "value": "#8a3a1f", "usage": "Unclaimed chip text and its dashed border, and the NOT label in voice examples. 7.8:1 on paper." },
      { "name": "color-aware-blue", "value": "#226ce0", "usage": "Aware in the by HempAware byline on white or chalk (4.9:1). HempAware's own blue; nowhere else." },
      { "name": "color-footer-text", "value": "#b7c2b4", "usage": "Footer body copy and links on color-turf-deep (9.3:1)." },
      { "name": "position-grower", "value": "#3e7b27", "usage": "Growers tab and table pill. White text, 5.2:1." },
      { "name": "position-processor", "value": "#e39b2d", "usage": "Processors tab and table pill. Ink text, 7.6:1." },
      { "name": "position-manufacturer", "value": "#b8432a", "usage": "Manufacturers tab and table pill. White text, 5.4:1." },
      { "name": "position-brand", "value": "#2b4fa3", "usage": "Brands tab and table pill. White text, 7.6:1." },
      { "name": "position-retailer", "value": "#6fc2b4", "usage": "Retailers tab and table pill. Ink text, 8.5:1." },
      { "name": "position-lab", "value": "#7a5ba8", "usage": "Labs tab and table pill. White text, 5.4:1." },
      { "name": "position-distributor", "value": "#b03a6e", "usage": "Distributors tab and table pill. White text, 5.7:1." },
      { "name": "position-service", "value": "#5b6770", "usage": "Services tab and table pill. White text, 5.8:1." }
    ]
  },
  "type": {
    "fonts": [
      { "family": "Big Shoulders Display", "file": "fonts/big-shoulders-display-latin-800-normal.woff2", "weight": "800", "style": "normal" },
      { "family": "Big Shoulders Display", "file": "fonts/big-shoulders-display-latin-900-normal.woff2", "weight": "900", "style": "normal" },
      { "family": "Archivo", "file": "fonts/archivo-latin-wght-normal.woff2", "weight": "100 900", "style": "normal" },
      { "family": "Archivo", "file": "fonts/archivo-latin-wght-italic.woff2", "weight": "100 900", "style": "italic" },
      { "family": "IBM Plex Mono", "file": "fonts/ibm-plex-mono-latin-400-normal.woff2", "weight": "400", "style": "normal" },
      { "family": "IBM Plex Mono", "file": "fonts/ibm-plex-mono-latin-600-normal.woff2", "weight": "600", "style": "normal" }
    ],
    "families": {
      "display": "\"Big Shoulders Display\", Impact, \"Arial Narrow\", sans-serif",
      "sans": "Archivo, system-ui, sans-serif",
      "mono": "\"IBM Plex Mono\", ui-monospace, Menlo, monospace"
    },
    "groups": [
      {
        "name": "Display",
        "family": "display",
        "styles": [
          { "name": "display-hero", "fontSize": "128px", "lineHeight": 0.92, "fontWeight": 900, "sample": "Different fields. Same team.", "usage": "Home page hero only. Uppercase. Scales down to 56px on phones." },
          { "name": "display-1", "fontSize": "84px", "lineHeight": 0.92, "fontWeight": 900, "sample": "Hemp processors", "usage": "Page H1 on Position, Home Team and Player pages. Uppercase. Scales down to 44px." },
          { "name": "display-2", "fontSize": "64px", "lineHeight": 0.92, "fontWeight": 900, "sample": "Rookie Class", "usage": "Home page section heads. Uppercase." },
          { "name": "display-3", "fontSize": "44px", "lineHeight": 0.92, "fontWeight": 900, "sample": "The rules, up front", "usage": "Section heads on Pricing and long pages. Uppercase." },
          { "name": "display-4", "fontSize": "34px", "lineHeight": 0.92, "fontWeight": 900, "sample": "The full roster", "usage": "Section heads inside a page (Player Cards, Questions). Uppercase." },
          { "name": "jersey", "fontSize": "38px", "lineHeight": 0.85, "fontWeight": 900, "sample": "0427", "usage": "The card number on the card front. Always four digits." },
          { "name": "wordmark", "fontSize": "28px", "lineHeight": 1, "fontWeight": 900, "letterSpacing": "0.02em", "sample": "HEMPROSTER", "usage": "The header wordmark: HEMP in chalk or ink, ROSTER in scoreboard (on turf) or field (on light)." },
          { "name": "card-name", "fontSize": "24px", "lineHeight": 0.95, "fontWeight": 800, "sample": "Blue Forest Farms", "usage": "Company name on the card front. Uppercase, two lines at most." },
          { "name": "button", "fontSize": "19px", "lineHeight": 1, "fontWeight": 800, "letterSpacing": "0.06em", "sample": "Get on the roster", "usage": "Every button label. Uppercase." },
          { "name": "tab", "fontSize": "15px", "lineHeight": 1, "fontWeight": 800, "letterSpacing": "0.1em", "sample": "Grower", "usage": "Position tabs and the Stats tab. Uppercase." }
        ]
      },
      {
        "name": "Text",
        "family": "sans",
        "styles": [
          { "name": "lead", "fontSize": "18px", "lineHeight": 1.5, "fontWeight": 400, "sample": "Every hemp company gets a free Player Card.", "usage": "Intro paragraph under a page H1." },
          { "name": "body", "fontSize": "16px", "lineHeight": 1.5, "fontWeight": 400, "sample": "Claim your card to add licenses, products and contacts.", "usage": "Default running text and form inputs." },
          { "name": "body-sm", "fontSize": "15px", "lineHeight": 1.5, "fontWeight": 400, "sample": "Colorado Dept. of Agriculture", "usage": "Roster table cells and rule cards." },
          { "name": "tagline", "fontSize": "14px", "lineHeight": 1.4, "fontWeight": 400, "sample": "Hemp hurd, hempcrete blocks and lime binder.", "usage": "Card taglines, breadcrumbs, help text. color-bench." },
          { "name": "meta", "fontSize": "13px", "lineHeight": 1.4, "fontWeight": 400, "sample": "Grower · Pueblo, CO", "usage": "The position and place line under a card name; the header byline at 600." },
          { "name": "label", "fontSize": "14px", "lineHeight": 1.3, "fontWeight": 700, "sample": "Work email", "usage": "Form field labels." }
        ]
      },
      {
        "name": "Mono",
        "family": "mono",
        "styles": [
          { "name": "eyebrow", "fontSize": "13px", "lineHeight": 1.3, "fontWeight": 400, "letterSpacing": "0.16em", "sample": "POSITIONS", "usage": "Section eyebrows above display heads. Uppercase." },
          { "name": "table-head", "fontSize": "12px", "lineHeight": 1.3, "fontWeight": 400, "letterSpacing": "0.1em", "sample": "COMPANY", "usage": "Table header cells on color-manila. Uppercase." },
          { "name": "chip", "fontSize": "10.5px", "lineHeight": 1.2, "fontWeight": 400, "letterSpacing": "0.06em", "sample": "HOME CO", "usage": "Info and Unclaimed chips on the card front. Uppercase." },
          { "name": "stat-label", "fontSize": "10px", "lineHeight": 1.3, "fontWeight": 400, "letterSpacing": "0.08em", "sample": "LICENSE", "usage": "Stat labels on the card back, in color-stat-label." },
          { "name": "jersey-label", "fontSize": "9.5px", "lineHeight": 1.2, "fontWeight": 400, "letterSpacing": "0.14em", "sample": "NO.", "usage": "The NO. label above the jersey number." }
        ]
      }
    ]
  },
  "shadow": {
    "tokens": [
      { "name": "shadow-card", "value": "3px 4px 0 rgba(22, 24, 26, 0.14)", "usage": "Both faces of a Player Card. A hard offset, never a blur." },
      { "name": "shadow-lineup", "value": "0 0 0 4px #f2c230, 0 0 0 5.5px #16181a, 4px 7px 0 5px rgba(22, 24, 26, 0.2)", "usage": "A Starting Lineup card: a scoreboard ring, an ink keyline, then the offset shadow." },
      { "name": "shadow-button", "value": "0 3px 0 #a57f0c", "usage": "The pressed edge under the yellow button only." }
    ]
  },
  "spacing": {
    "tokens": [
      { "name": "space-gutter", "value": "24px", "usage": "Page side padding (.wrap) above 640px wide." },
      { "name": "space-gutter-sm", "value": "16px", "usage": "Page side padding at 640px and below." },
      { "name": "space-card-top", "value": "16px", "usage": "Card front top padding." },
      { "name": "space-card-x", "value": "18px", "usage": "Card side padding and the tab row inset." },
      { "name": "space-card-bottom", "value": "24px", "usage": "Card bottom padding, leaving room for the Rolodex notches." },
      { "name": "space-card-gap", "value": "10px", "usage": "Gap between rows inside a card front." },
      { "name": "space-btn-y", "value": "12px", "usage": "Button vertical padding (10px on the outline button to offset its 2px border)." },
      { "name": "space-btn-x", "value": "20px", "usage": "Button side padding (18px on the outline button)." },
      { "name": "space-tab-x", "value": "14px", "usage": "Position tab side padding." },
      { "name": "space-field-y", "value": "10px", "usage": "Input and table cell vertical padding." },
      { "name": "space-field-x", "value": "12px", "usage": "Input and table cell side padding." }
    ]
  },
  "size": {
    "tokens": [
      { "name": "size-wrap", "value": "1280px", "usage": "Maximum content width (.wrap)." },
      { "name": "size-card-w", "value": "380px", "usage": "Player Card width; shrinks to the column on phones." },
      { "name": "size-card-h", "value": "262px", "usage": "Player Card height, tab row included." },
      { "name": "size-tab-h", "value": "30px", "usage": "Position tab height." },
      { "name": "size-flip", "value": "34px", "usage": "Round flip button on the card." },
      { "name": "size-logo-ring", "value": "54px", "usage": "Logo or monogram ring on the card front." }
    ]
  },
  "radius": {
    "tokens": [
      { "name": "radius-stamp", "value": "3px", "usage": "The Rookie stamp." },
      { "name": "radius-chip", "value": "4px", "usage": "Info chips, table position pills, the Starting Lineup label." },
      { "name": "radius-button", "value": "6px", "usage": "Buttons, inputs and the claim box on the card back." },
      { "name": "radius-tab", "value": "8px", "usage": "Top two corners of a position tab only; the bottom is square and joins the card." },
      { "name": "radius-card", "value": "10px", "usage": "Player Card body and the member badge." },
      { "name": "radius-table", "value": "12px", "usage": "Roster table frame." },
      { "name": "radius-panel", "value": "14px", "usage": "Pricing plans and other large panels." },
      { "name": "radius-pill", "value": "999px", "usage": "The Verified Player seal." },
      { "name": "radius-round", "value": "50%", "usage": "Logo ring and flip button." }
    ]
  },
  "stroke": {
    "tokens": [
      { "name": "stroke-hair", "value": "1px", "usage": "Chip borders, table row dividers, the dashed claim box." },
      { "name": "stroke-outline", "value": "1.5px", "usage": "The house line: card bodies, tabs, inputs, table frames, the flip button. Always color-ink." },
      { "name": "stroke-heavy", "value": "2px", "usage": "Outline button, member badge, featured pricing plan." },
      { "name": "stroke-ring", "value": "2.5px", "usage": "Logo ring on the card front, in the position color; dashed when unclaimed." },
      { "name": "stroke-rule", "value": "3px", "usage": "Focus outline and heavy section rules." }
    ]
  }
}
