{
  "schemaVersion": "1.0",
  "id": "beetroot-harrow",
  "version": "1.1.0",
  "name": "Beetroot Harrow",
  "tier": "free",
  "summary": "Magazine-style agriculture UI: beet-red accents on ink-and-paper neutrals, tall grotesk headlines, and spacious editorial layouts.",
  "tags": {
    "industries": [
      "agriculture",
      "publishing",
      "food-systems"
    ],
    "moods": [
      "editorial",
      "grounded",
      "confident",
      "calm"
    ],
    "density": "spacious",
    "contrast": "high"
  },
  "rationale": {
    "overview": "Beetroot Harrow is for agriculture products that read like a magazine: grower journals, crop-market briefings, co-op newsletters and field-report dashboards. Instead of the usual leaf-green farm palette it uses warm ink on newsprint plus one beetroot-red accent (brand). Hierarchy comes from type size, weight and whitespace, not from fills or icons. A typical screen has one display-lg or display-md headline, body text capped at 68ch, a narrow metadata sidebar, and section gaps of space.16 or more.",
    "color": "All five scales share a warm bias. Neutrals are tinted toward yellow-brown: background is neutral.50 (#faf7f2), text is neutral.950 (#191715), and no flat grey is used. Brand (beet red, hue about 355°) is the only action color. It is used for primary buttons, links, focus rings and the 2px section rule. Light primary is brand.600 with white text (about 6.2:1). Dark primary is brand.400 with brand.950 text (about 6:1). Success is shifted toward a warm field green (success.700 for light fills, about 6.9:1 with white). Warning is wheat ochre, used as a pale fill (warning.200 with warning.900 text). Destructive is a cooler magenta-crimson (danger, hue about 325°). It stays at least ΔE2000 18 from primary in both modes (danger.600 vs brand.600 in light, danger.400 vs brand.400 in dark), so a delete button is never mistaken for the primary action. Every scale darkens monotonically from 50 to 950 with chroma peaking at 400–600.",
    "typography": "Familjen Grotesk is the display voice for display-lg through heading-md, at weights 600–700. Rubik handles all functional text: body, forms, tables, buttons, labels and heading-sm. JetBrains Mono is used only for sample IDs, field codes and coordinates (the code style, 14px). The display ladder uses a 1.333 ratio (perfect fourth): 64 / 48 / 36 / 27px. Tracking tightens as size grows: -0.03em at 64px, -0.025em at 48px, -0.02em at 36px and -0.012em at 27px. Body sizes are 18 / 16 / 14px, with line heights of 1.6–1.65 for long reading. Caption (12px, weight 500, +0.04em) works as an uppercase overline.",
    "layout": "Spacious density on a 4px grid. Within a component, use space.2 to space.6. Between blocks, use space.8 to space.12. Between sections, use space.16 to space.24. Cap reading columns at 68ch and page width at 1280px. Prefer asymmetric two-column layouts: a main column of about 8 of 12 columns plus a sidebar of about 4 of 12 columns for captions, metadata and related figures. Cards use space.8 padding and never go below space.6.",
    "elevation": "Mostly flat, like paper. Separation comes from 1px border hairlines (neutral.200 in light, neutral.800 in dark) and whitespace. Cards get shadow.sm, which is barely visible. shadow.md is for popovers and menus, and shadow.lg is for dialogs. In dark mode, depth comes from lighter surfaces rather than shadows: background is neutral.950, card and popover are neutral.900, and secondary and muted are neutral.800.",
    "shapes": "Corners are small, like trimmed print stock: radius.md (4px) on buttons and inputs, radius.lg (6px) on cards, radius.xl (10px) only on dialogs. radius.full is reserved for badges and filter chips. Editorial devices are 1px hairline rules between list items and a 2px brand rule above section headings."
  },
  "primitives": {
    "color": {
      "brand": {
        "50": "#fff3f3",
        "100": "#ffe2e3",
        "200": "#ffc4c8",
        "300": "#ff9aa2",
        "400": "#f06a77",
        "500": "#d94455",
        "600": "#b8283a",
        "700": "#961d2e",
        "800": "#741523",
        "900": "#550c17",
        "950": "#370509"
      },
      "neutral": {
        "50": "#faf7f2",
        "100": "#f1ede6",
        "200": "#e0dad1",
        "300": "#c8c1b6",
        "400": "#a9a195",
        "500": "#8a8277",
        "600": "#6e675d",
        "700": "#565049",
        "800": "#3d3934",
        "900": "#2a2723",
        "950": "#191715"
      },
      "success": {
        "50": "#f1f9ea",
        "100": "#ddf2d0",
        "200": "#bde3a9",
        "300": "#94cf7d",
        "400": "#6bb556",
        "500": "#4c9a3c",
        "600": "#3a7f2f",
        "700": "#2d6526",
        "800": "#214c1d",
        "900": "#163514",
        "950": "#0b200a"
      },
      "warning": {
        "50": "#fff8e6",
        "100": "#ffedbd",
        "200": "#fbdc8b",
        "300": "#eec45a",
        "400": "#d9a82c",
        "500": "#b98a10",
        "600": "#966d06",
        "700": "#765403",
        "800": "#583d01",
        "900": "#3d2a00",
        "950": "#261a00"
      },
      "danger": {
        "50": "#fdf2fa",
        "100": "#fbe0f3",
        "200": "#f6c1e7",
        "300": "#ee92d4",
        "400": "#e05cba",
        "500": "#c33a9c",
        "600": "#a51f7d",
        "700": "#841962",
        "800": "#63104a",
        "900": "#470834",
        "950": "#2c0120"
      }
    },
    "font": {
      "display": {
        "family": "Familjen Grotesk",
        "fallback": "system-ui, sans-serif",
        "source": "google",
        "weights": [
          500,
          600,
          700
        ]
      },
      "sans": {
        "family": "Rubik",
        "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": 2,
      "md": 4,
      "lg": 6,
      "xl": 10,
      "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(25, 23, 21, 0.06)",
      "md": "0 6px 16px -4px rgba(25, 23, 21, 0.14)",
      "lg": "0 20px 48px -10px rgba(25, 23, 21, 0.24)"
    }
  },
  "typography": {
    "display-lg": {
      "font": "display",
      "size": 64,
      "lineHeight": 1.02,
      "weight": 700,
      "letterSpacing": -0.03
    },
    "display-md": {
      "font": "display",
      "size": 48,
      "lineHeight": 1.06,
      "weight": 700,
      "letterSpacing": -0.025
    },
    "heading-lg": {
      "font": "display",
      "size": 36,
      "lineHeight": 1.12,
      "weight": 600,
      "letterSpacing": -0.02
    },
    "heading-md": {
      "font": "display",
      "size": 27,
      "lineHeight": 1.22,
      "weight": 600,
      "letterSpacing": -0.012
    },
    "heading-sm": {
      "font": "sans",
      "size": 16,
      "lineHeight": 1.4,
      "weight": 600,
      "letterSpacing": 0
    },
    "body-lg": {
      "font": "sans",
      "size": 18,
      "lineHeight": 1.65,
      "weight": 400,
      "letterSpacing": 0
    },
    "body-md": {
      "font": "sans",
      "size": 16,
      "lineHeight": 1.65,
      "weight": 400,
      "letterSpacing": 0
    },
    "body-sm": {
      "font": "sans",
      "size": 14,
      "lineHeight": 1.55,
      "weight": 400,
      "letterSpacing": 0
    },
    "label": {
      "font": "sans",
      "size": 14,
      "lineHeight": 1.25,
      "weight": 500,
      "letterSpacing": 0.01
    },
    "caption": {
      "font": "sans",
      "size": 12,
      "lineHeight": 1.45,
      "weight": 500,
      "letterSpacing": 0.04
    },
    "code": {
      "font": "mono",
      "size": 14,
      "lineHeight": 1.55,
      "weight": 400,
      "letterSpacing": 0
    }
  },
  "semantic": {
    "light": {
      "background": "{color.neutral.50}",
      "foreground": "{color.neutral.950}",
      "card": "#fffdf9",
      "card-foreground": "{color.neutral.950}",
      "popover": "#fffdf9",
      "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.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.200}",
      "warning-foreground": "{color.warning.900}",
      "border": "{color.neutral.200}",
      "input": "{color.neutral.300}",
      "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.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": 44,
      "paddingX": "{space.5}",
      "radius": "{radius.md}",
      "typography": "{typography.label}",
      "fontWeight": 500
    },
    "input": {
      "height": 44,
      "paddingX": "{space.4}",
      "radius": "{radius.md}",
      "typography": "{typography.body-md}",
      "borderWidth": 1
    },
    "card": {
      "padding": "{space.8}",
      "radius": "{radius.lg}",
      "shadow": "{shadow.sm}",
      "borderWidth": 1
    },
    "badge": {
      "height": 24,
      "paddingX": "{space.2}",
      "radius": "{radius.full}",
      "typography": "{typography.caption}"
    }
  },
  "guidance": {
    "do": [
      "Use Familjen Grotesk only for display-lg (64px), display-md (48px), heading-lg (36px) and heading-md (27px), with the letterSpacing set in each style. Use Rubik for heading-sm and all functional text.",
      "Limit each section to three type levels, for example heading-md title, body-md text and caption metadata.",
      "Give each view one primary button (primary: brand.600 light, brand.400 dark). Render other actions as secondary (neutral.100 / neutral.800) or ghost buttons.",
      "Cap running text at 68ch. Separate page sections with space.16–space.24 and blocks inside a section with space.8–space.12.",
      "Open each section with a 2px brand.600 top rule (brand.400 in dark), a caption overline in uppercase, then a heading-md title.",
      "Pair every success, warning and destructive badge or alert with an icon or text label, so status never depends on color alone.",
      "Set yields, prices and measurements in Rubik with font-feature-settings: 'tnum', right-aligned in table cells.",
      "Show focus with a 2px ring outline (brand.500 light, brand.400 dark) offset 2px from buttons, inputs and links."
    ],
    "dont": [
      "Don't use brand red for errors or deletions. Use destructive (danger.600 light, danger.400 dark), which differs from primary by at least ΔE2000 18.",
      "Don't use #000000 text or #ffffff page backgrounds. Text is neutral.950 on neutral.50 in light mode, and neutral.50 on neutral.950 in dark mode.",
      "Don't round buttons or inputs beyond radius.md (4px) or cards beyond radius.lg (6px). Use radius.full only for badges and filter chips.",
      "Don't put anything heavier than shadow.sm on cards. shadow.md is for popovers and menus, shadow.lg for dialogs. In dark mode, rely on the neutral.900 card surface for lift.",
      "Don't set Familjen Grotesk below 24px or use it for labels, table cells, inputs or button text.",
      "Don't use success green decoratively. It marks only confirmed, healthy or completed states.",
      "Don't go below space.6 card padding or below space.12 vertical gaps between sections."
    ]
  }
}
