{
  "schemaVersion": "1.0",
  "id": "lagoon-stretch",
  "version": "1.1.0",
  "name": "Lagoon Stretch",
  "tier": "free",
  "summary": "Calm botanical fitness UI: lagoon-teal actions on warm stone neutrals, rounded Sora headlines and soft, low-shadow surfaces.",
  "tags": {
    "industries": [
      "fitness",
      "wellness",
      "outdoor"
    ],
    "moods": [
      "calm",
      "organic",
      "natural",
      "gentle"
    ],
    "density": "comfortable",
    "contrast": "standard"
  },
  "rationale": {
    "overview": "Lagoon Stretch is for fitness products built around steady habits rather than intensity: yoga, trail running, mobility and mindful strength. It replaces the usual neon-on-black fitness palette with river teal, leaf green and warm stone. Screens should read as calm and encouraging, with one clear action per view and generous space between sections.",
    "color": "Lagoon (brand.700 #146b74 in light, brand.400 #46bfc7 in dark) is the only action hue. It carries primary buttons, links and the focus ring (brand.600 light, brand.400 dark). Neutrals are warm stone with a deliberate yellow-brown tint, used for every surface and text tone. Status scales follow the same chroma curve as brand: soft at 50–200, strongest at 400–600, deep and desaturated at 800–950. Success is a leaf green and warning a dried amber, both warm-leaning to sit with the stone neutrals. Danger is a clay red set far from teal in hue (ΔE2000 well above 18 in both modes), so errors never read as brand. In light mode, foreground on background and every *-foreground pair clear 5:1, and muted-foreground (neutral.700) clears 6:1 on both background and muted. In dark mode, background is neutral.950 #1a1814 and card is lifted one small step to #24211c. Popovers go to neutral.900 so they separate from cards. Dark primary brand.400 reaches 6.6:1 against its brand.950 foreground, so it reads bright without tipping into neon.",
    "typography": "The scale is a major third (1.25) from a 16px body: 12, 14, 16, 18, 20, 30, 38, 48. heading-lg skips the 25px step so heading tiers stay visually distinct. Sora (500/600/700) sets display-lg, display-md, heading-lg and heading-md. Tracking tightens with size: -0.03em at 48px, -0.025em at 38px, -0.02em at 30px and -0.01em at 20px. Plus Jakarta Sans (400/500/600/700) sets all functional text. Body sizes use 1.6 line height (body-sm 1.55) for comfortable reading of workout instructions. JetBrains Mono (400/500) is used for timers, rep counts and code, with tabular figures.",
    "layout": "Comfortable density on a 4px grid. Cards use 24px padding (space.6). Buttons and inputs are 44px tall, and content columns cap at 1120px. Major sections are separated by at least 32px (space.8), and by 48px (space.12) on marketing or summary screens.",
    "elevation": "Mostly flat. Cards sit on the page with a 1px border token and shadow.sm. shadow.md is for popovers and menus, and shadow.lg for sheets and dialogs. All shadows are tinted with warm brown rgba(43,40,35) instead of black. In dark mode, separation comes from surface lightness (background → card → popover) and the border token, not from shadow.",
    "shapes": "Rounded throughout. Controls use radius.md (10px), cards radius.lg (16px), and hero or media panels radius.xl (24px). radius.sm (6px) is the minimum, used for checkboxes and inline tags. radius.full is limited to badges, chips, avatars and progress tracks."
  },
  "primitives": {
    "color": {
      "brand": {
        "50": "#effcfc",
        "100": "#d5f6f7",
        "200": "#b0eaed",
        "300": "#7dd8dd",
        "400": "#46bfc7",
        "500": "#21a3ad",
        "600": "#148590",
        "700": "#146b74",
        "800": "#15555c",
        "900": "#13464b",
        "950": "#072c31"
      },
      "neutral": {
        "50": "#faf8f4",
        "100": "#f1eee8",
        "200": "#e2ded5",
        "300": "#cac5ba",
        "400": "#aaa598",
        "500": "#8b867a",
        "600": "#6f6a60",
        "700": "#585349",
        "800": "#413d35",
        "900": "#2b2823",
        "950": "#1a1814"
      },
      "success": {
        "50": "#f1faea",
        "100": "#ddf3cf",
        "200": "#bde6a6",
        "300": "#97d17a",
        "400": "#72b853",
        "500": "#529c38",
        "600": "#3d8126",
        "700": "#2e671c",
        "800": "#245117",
        "900": "#1b3d11",
        "950": "#0e2309"
      },
      "warning": {
        "50": "#fff8e6",
        "100": "#feedbc",
        "200": "#f9da88",
        "300": "#ecc254",
        "400": "#d7a427",
        "500": "#b6840c",
        "600": "#956a08",
        "700": "#745207",
        "800": "#593f07",
        "900": "#3f2c06",
        "950": "#271a03"
      },
      "danger": {
        "50": "#fff4f1",
        "100": "#fee3dc",
        "200": "#fbc7ba",
        "300": "#f59e8a",
        "400": "#ea7262",
        "500": "#d34f43",
        "600": "#b83731",
        "700": "#962828",
        "800": "#741c20",
        "900": "#55131a",
        "950": "#35090f"
      }
    },
    "font": {
      "display": {
        "family": "Sora",
        "fallback": "system-ui, sans-serif",
        "source": "google",
        "weights": [
          500,
          600,
          700
        ]
      },
      "sans": {
        "family": "Plus Jakarta 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
        ]
      }
    },
    "radius": {
      "none": 0,
      "sm": 6,
      "md": 10,
      "lg": 16,
      "xl": 24,
      "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(43, 40, 35, 0.06)",
      "md": "0 6px 16px -4px rgba(43, 40, 35, 0.12)",
      "lg": "0 20px 44px -10px rgba(43, 40, 35, 0.20)"
    }
  },
  "typography": {
    "display-lg": {
      "font": "display",
      "size": 48,
      "lineHeight": 1.08,
      "weight": 600,
      "letterSpacing": -0.03
    },
    "display-md": {
      "font": "display",
      "size": 38,
      "lineHeight": 1.12,
      "weight": 600,
      "letterSpacing": -0.025
    },
    "heading-lg": {
      "font": "display",
      "size": 30,
      "lineHeight": 1.2,
      "weight": 600,
      "letterSpacing": -0.02
    },
    "heading-md": {
      "font": "display",
      "size": 20,
      "lineHeight": 1.3,
      "weight": 500,
      "letterSpacing": -0.01
    },
    "heading-sm": {
      "font": "sans",
      "size": 16,
      "lineHeight": 1.4,
      "weight": 600,
      "letterSpacing": 0
    },
    "body-lg": {
      "font": "sans",
      "size": 18,
      "lineHeight": 1.6,
      "weight": 400,
      "letterSpacing": 0
    },
    "body-md": {
      "font": "sans",
      "size": 16,
      "lineHeight": 1.6,
      "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": 600,
      "letterSpacing": 0.005
    },
    "caption": {
      "font": "sans",
      "size": 12,
      "lineHeight": 1.4,
      "weight": 500,
      "letterSpacing": 0.01
    },
    "code": {
      "font": "mono",
      "size": 14,
      "lineHeight": 1.5,
      "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.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": "#24211c",
      "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": 600
    },
    "input": {
      "height": 44,
      "paddingX": "{space.4}",
      "radius": "{radius.md}",
      "typography": "{typography.body-md}",
      "borderWidth": 1
    },
    "card": {
      "padding": "{space.6}",
      "radius": "{radius.lg}",
      "shadow": "{shadow.sm}",
      "borderWidth": 1
    },
    "badge": {
      "height": 24,
      "paddingX": "{space.2}",
      "radius": "{radius.full}",
      "typography": "{typography.caption}"
    }
  },
  "guidance": {
    "do": [
      "Use one primary button per view (for example Start workout). Make other actions secondary (neutral.100 surface, light) or ghost buttons.",
      "Keep buttons and inputs at 44px height with radius.md (10px). Inputs use body-md (16px) so mobile browsers don't zoom on focus.",
      "Use Sora only from heading-md (20px) up. Set workout copy, form labels, lists and buttons in Plus Jakarta Sans.",
      "Set timers, rep counts and heart-rate figures in JetBrains Mono (code style) with font-variant-numeric: tabular-nums.",
      "Show keyboard focus as a 2px ring using the ring token (brand.600 light, brand.400 dark) with a 2px offset.",
      "Separate cards from the page with the 1px border token and shadow.sm. Use shadow.md for popovers and menus, and shadow.lg for sheets and dialogs.",
      "Pair success, warning and destructive colors with an icon or text label so meaning never depends on color alone.",
      "Leave at least space.8 (32px) between major sections, and space.12 (48px) on summary screens."
    ],
    "dont": [
      "Don't use destructive (danger.600 light, danger.400 dark) for streaks, intensity or effort indicators. Reserve it for errors and irreversible actions.",
      "Don't use pure black, pure white or cool grey page backgrounds. Light background is neutral.50, and dark background is neutral.950 with card #24211c.",
      "Don't use brand.500 or lighter as text or as the focus ring on light surfaces, because it falls below 3:1. Use brand.600 or darker.",
      "Don't place muted-foreground text on brand or status surfaces. Use the matching *-foreground token instead.",
      "Don't go below radius.sm (6px) on anything except dividers. Keep cards at radius.lg (16px).",
      "Don't set Sora below 20px, in all caps, or lighter than weight 500. Don't loosen letterSpacing on display-lg or display-md.",
      "Don't use neon colors, high-saturation gradients or black shadows. In dark mode, separate surfaces with lightness steps and the border token.",
      "Don't stack more than one accent surface (brand.100 light, brand.900 dark) per screen region. It is for selected states and gentle highlights."
    ]
  }
}
