{
  "schemaVersion": "1.0",
  "id": "sapling-broadside",
  "version": "1.1.0",
  "name": "Sapling Broadside",
  "tier": "free",
  "summary": "Retro-modern nonprofit system: leaf-green actions, bold Unbounded headlines and hard-edged print shadows on green-tinted neutrals.",
  "tags": {
    "industries": [
      "nonprofit",
      "civic-tech",
      "community"
    ],
    "moods": [
      "optimistic",
      "retro",
      "confident",
      "approachable"
    ],
    "density": "comfortable",
    "contrast": "high"
  },
  "rationale": {
    "overview": "Sapling Broadside is for nonprofit donation, volunteer sign-up and membership flows. Display headlines use the wide Unbounded face, floating layers use hard offset shadows, and one leaf green marks every action. These details come from 1970s and 1980s printed bulletins and early desktop software. Every text pair in both modes is 5:1 or higher, so the retro styling never reduces legibility.",
    "color": "Fernfield (brand) is the only action hue. Primary is brand.700 (#146d3d) in light mode, which gives 6.4:1 against primary-foreground white. In dark mode primary is brand.400 (#55c57f) with brand.950 text, which gives 7.9:1. Ring is brand.600 in light mode and brand.400 in dark mode, and both clear 3:1 against background. All neutral steps share one hue near 145° at low chroma. The 700 step was corrected so it no longer drifts blue, and muted-foreground (neutral.700) now reaches 6.7:1 on muted. Destructive is crimson, danger.600 in light mode and danger.400 in dark mode, and sits nearly opposite the brand on the hue wheel. Success has been pulled back from cyan to a cool green-teal, with success.700 (#0e6b55) giving 6.5:1 with white. It stays separate from Fernfield, but both share the same temperature. Warning is a warm mustard that matches the yellow undertone of the brand greens.",
    "typography": "Display and heading sizes step up by about 1.25: 18, 24, 30, 38, 48. Unbounded at 600/700 is used only for display-lg, display-md and heading-lg (30px and up). Because the face is wide, its letterSpacing tightens from -0.01em at 30px to -0.025em at 48px. Onest at 400/500/600 sets heading-md and below, body text, labels, buttons and form fields. Body line height is 1.6 at body-lg, 1.55 at body-md and 1.5 at body-sm. JetBrains Mono at 400/500 is used only for receipt IDs, transaction references and code.",
    "layout": "Comfortable density on a 4px base grid using the space tokens. Content columns cap at 1152px. Campaign sections are separated by 48px (space.12) to 80px (space.20) of vertical spacing, so each block reads as its own printed panel. Buttons and inputs share a 40px height so they align when placed side by side in forms.",
    "elevation": "Surfaces are mostly flat and separated by 1px border (neutral.200 light, neutral.800 dark) lines. Cards use shadow.sm. The hard offset shadows, shadow.md (3px) and shadow.lg (6px), are the signature print detail and are used only on popovers, dialogs and toasts. In dark mode the offset shadow barely shows against neutral.950, so floating layers depend on their 1px border and the lifted popover surface (neutral.900).",
    "shapes": "Rounding is tight, close to print-era corners: radius.md (6px) on buttons and inputs, radius.lg (10px) on cards and radius.xl (16px) on dialogs. radius.full is used only for badges and avatar chips."
  },
  "primitives": {
    "color": {
      "brand": {
        "50": "#f0fbf2",
        "100": "#dcf6e2",
        "200": "#b8ebc6",
        "300": "#8bdba3",
        "400": "#55c57f",
        "500": "#2fa862",
        "600": "#1c8a4d",
        "700": "#146d3d",
        "800": "#0e5230",
        "900": "#093822",
        "950": "#04200f"
      },
      "neutral": {
        "50": "#f4f8f5",
        "100": "#e6ede8",
        "200": "#d0dbd4",
        "300": "#b2c0b7",
        "400": "#92a097",
        "500": "#74837a",
        "600": "#5c6b62",
        "700": "#46544c",
        "800": "#323e38",
        "900": "#212a25",
        "950": "#121a15"
      },
      "success": {
        "50": "#e9faf3",
        "100": "#cff4e4",
        "200": "#a6e8cf",
        "300": "#74d5b3",
        "400": "#45bb96",
        "500": "#239e7a",
        "600": "#158563",
        "700": "#0e6b55",
        "800": "#0b5444",
        "900": "#083b31",
        "950": "#04231d"
      },
      "warning": {
        "50": "#fff9e6",
        "100": "#fff0c2",
        "200": "#fbe08f",
        "300": "#f2c95a",
        "400": "#deb036",
        "500": "#c4941a",
        "600": "#a37510",
        "700": "#7f5a0c",
        "800": "#5f4309",
        "900": "#3f2c06",
        "950": "#251a03"
      },
      "danger": {
        "50": "#fff4f6",
        "100": "#ffe4e9",
        "200": "#ffc8d3",
        "300": "#ff9fb1",
        "400": "#f66e89",
        "500": "#e1436b",
        "600": "#c02d56",
        "700": "#9c2043",
        "800": "#791231",
        "900": "#580521",
        "950": "#390011"
      }
    },
    "font": {
      "display": {
        "family": "Unbounded",
        "fallback": "Arial Black, sans-serif",
        "source": "google",
        "weights": [
          600,
          700
        ]
      },
      "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": 2,
      "md": 6,
      "lg": 10,
      "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": "0 1px 2px rgba(18, 26, 21, 0.08)",
      "md": "3px 3px 0 rgba(18, 26, 21, 0.85)",
      "lg": "6px 6px 0 rgba(18, 26, 21, 1)"
    }
  },
  "typography": {
    "display-lg": {
      "font": "display",
      "size": 48,
      "lineHeight": 1.08,
      "weight": 700,
      "letterSpacing": -0.025
    },
    "display-md": {
      "font": "display",
      "size": 38,
      "lineHeight": 1.12,
      "weight": 700,
      "letterSpacing": -0.02
    },
    "heading-lg": {
      "font": "display",
      "size": 30,
      "lineHeight": 1.2,
      "weight": 600,
      "letterSpacing": -0.01
    },
    "heading-md": {
      "font": "sans",
      "size": 24,
      "lineHeight": 1.3,
      "weight": 600,
      "letterSpacing": -0.01
    },
    "heading-sm": {
      "font": "sans",
      "size": 18,
      "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.01
    },
    "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.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.200}",
      "warning-foreground": "{color.warning.900}",
      "border": "{color.neutral.200}",
      "input": "{color.neutral.300}",
      "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.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": 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": [
      "Give each view one primary button for its main action, such as Donate or Join. Set every other action to the secondary or ghost variant.",
      "Set campaign headlines in Unbounded at heading-lg (30px), display-md (38px) or display-lg (48px), and write them in sentence case.",
      "Use shadow.md or shadow.lg only on popovers, dialogs and toasts. In dark mode, keep their 1px border, because the offset shadow barely shows on neutral.950.",
      "Pair every success, warning and destructive badge or alert with an icon and a text label, so status never depends on color alone.",
      "Use muted-foreground only for captions, helper text and placeholder text at 12px or larger. Long text belongs in foreground at body-md (16px) or larger.",
      "Show keyboard focus on every button, input and link with a 2px ring outline offset 2px from the element."
    ],
    "dont": [
      "Don't use primary green for errors, failed payments or validation messages. Use destructive with an error icon.",
      "Don't set Unbounded below 30px, and don't use it for form labels, table cells, badges or button text. Use Onest at label or heading-md instead.",
      "Don't place body-sm (14px) or smaller text on the accent surface (brand.100 light, brand.900 dark) for more than one line.",
      "Don't introduce pure black, #000 or neutral grey hex values. Every surface, border and text color must come from the green-tinted neutral ramp.",
      "Don't show more than one element with shadow.md or shadow.lg in the same view, such as a dialog over an open popover.",
      "Don't put body text directly on success, warning or destructive fills. Use their paired -foreground tokens only for short labels in badges, alerts and buttons."
    ]
  }
}
