{
  "schemaVersion": "1.0",
  "id": "seasalt-digest",
  "version": "1.1.0",
  "name": "Seasalt Digest",
  "tier": "free",
  "summary": "Calm clinical analytics UI: sage-grey neutrals, one muted amber action color and a serif reserved for report titles.",
  "tags": {
    "industries": [
      "data-analytics",
      "healthcare",
      "research"
    ],
    "moods": [
      "calm",
      "clinical",
      "reassuring",
      "clean"
    ],
    "density": "comfortable",
    "contrast": "standard"
  },
  "rationale": {
    "overview": "Seasalt Digest is for dashboards and reports read by analysts, clinicians and operations leads who need to trust the numbers. Surfaces are a quiet green-grey (neutral, OKLCH hue about 175). Charts and tables get the space. One warm amber (brand, hue about 55) marks the single thing to act on. Status colors are desaturated, so a dashboard full of badges never reads as an alarm.",
    "color": "All scales follow the same curve. Chroma peaks at steps 400–600 and tapers toward 50 and 950, so no mid-step turns muddy. Neutrals carry a deliberate low-chroma green tint at every step, and shadows use the same tint (neutral.950, rgb 17 24 23). Amber is the only warm accent. It is used for primary (light brand.600, 5.1:1 with white; dark brand.400, 6.8:1 with brand.950), for ring and for selected states. Destructive is a cool crimson (danger.600 light, danger.400 dark), well over ΔE 18 from amber in both modes. Success is a sage-leaning green and warning a yellow-ochre, so both sit beside the warm brand without clashing. Contrast in light mode: muted-foreground neutral.700 is about 6.4:1 on muted and 7.4:1 on background. Contrast in dark mode: neutral.300 is about 5.9:1 on muted and 10:1 on background.",
    "typography": "The scale follows a ~1.25 (major third) ratio: 12, 14, 16, 20, 30, 38 and 48px, with the 24–25px step left out on purpose so headings separate clearly from body. Playfair Display (500/600) is used only for heading-lg (30px) and above. Letter spacing tightens as size grows: -0.012em at 30px down to -0.022em at 48px. Source Sans 3 (400/500/600) carries all functional UI. body-md is 16px with a 1.6 line height for long report reading. IBM Plex Mono (400/500) sets IDs, query snippets and exact values at 14px.",
    "layout": "Comfortable density on a 4px base grid. Content max width is 1280px and dashboard cards use a 24px ({space.6}) gutter. Table rows are at least 44px tall. Card padding is {space.6}. Separate groups with whitespace ({space.8} between sections) rather than divider lines.",
    "elevation": "Nearly flat. Cards use a 1px border token and shadow.sm. shadow.md is for dropdowns, popovers and tooltips. shadow.lg is for dialogs only. In dark mode, depth comes from surface steps (background neutral.950 → card neutral.900 → muted neutral.800) rather than from shadows.",
    "shapes": "Restrained rounding: radius.sm 6px for checkboxes and tags, radius.md 10px for buttons and inputs, radius.lg 14px for cards and panels, radius.xl 20px for dialogs. radius.full is used only for badges and filter chips."
  },
  "primitives": {
    "color": {
      "brand": {
        "50": "#fff7ef",
        "100": "#ffeadb",
        "200": "#fbd2b0",
        "300": "#f2b27c",
        "400": "#e48d4c",
        "500": "#c76e2b",
        "600": "#a65a1f",
        "700": "#844619",
        "800": "#653514",
        "900": "#49250d",
        "950": "#2d1405"
      },
      "neutral": {
        "50": "#f4f7f6",
        "100": "#e8eeed",
        "200": "#d3dcda",
        "300": "#b8c4c1",
        "400": "#94a39f",
        "500": "#75857f",
        "600": "#5d6c67",
        "700": "#4a5753",
        "800": "#364140",
        "900": "#1f2827",
        "950": "#111817"
      },
      "success": {
        "50": "#eff9f3",
        "100": "#d8f1e2",
        "200": "#b3e2c7",
        "300": "#86cca4",
        "400": "#5bb283",
        "500": "#3a9767",
        "600": "#287b51",
        "700": "#1b6441",
        "800": "#144d32",
        "900": "#0d3624",
        "950": "#052015"
      },
      "warning": {
        "50": "#fffaeb",
        "100": "#fff1c7",
        "200": "#fde28e",
        "300": "#f0ca57",
        "400": "#d9ae2c",
        "500": "#b88f0b",
        "600": "#967206",
        "700": "#765905",
        "800": "#594205",
        "900": "#3f2e05",
        "950": "#261b02"
      },
      "danger": {
        "50": "#fff3f5",
        "100": "#ffe2e8",
        "200": "#ffc5d0",
        "300": "#fb94aa",
        "400": "#ef6288",
        "500": "#d63a68",
        "600": "#b52552",
        "700": "#931b42",
        "800": "#721234",
        "900": "#520a26",
        "950": "#340316"
      }
    },
    "font": {
      "display": {
        "family": "Playfair Display",
        "fallback": "Georgia, serif",
        "source": "google",
        "weights": [
          500,
          600
        ]
      },
      "sans": {
        "family": "Source Sans 3",
        "fallback": "system-ui, sans-serif",
        "source": "google",
        "weights": [
          400,
          500,
          600
        ]
      },
      "mono": {
        "family": "IBM Plex Mono",
        "fallback": "ui-monospace, monospace",
        "source": "google",
        "weights": [
          400,
          500
        ]
      }
    },
    "radius": {
      "none": 0,
      "sm": 6,
      "md": 10,
      "lg": 14,
      "xl": 20,
      "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(17, 24, 23, 0.06)",
      "md": "0 6px 16px -4px rgba(17, 24, 23, 0.11)",
      "lg": "0 18px 44px -10px rgba(17, 24, 23, 0.20)"
    }
  },
  "typography": {
    "display-lg": {
      "font": "display",
      "size": 48,
      "lineHeight": 1.08,
      "weight": 500,
      "letterSpacing": -0.022
    },
    "display-md": {
      "font": "display",
      "size": 38,
      "lineHeight": 1.12,
      "weight": 500,
      "letterSpacing": -0.018
    },
    "heading-lg": {
      "font": "display",
      "size": 30,
      "lineHeight": 1.2,
      "weight": 600,
      "letterSpacing": -0.012
    },
    "heading-md": {
      "font": "sans",
      "size": 20,
      "lineHeight": 1.3,
      "weight": 600,
      "letterSpacing": -0.006
    },
    "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.5,
      "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": "#ffffff",
      "card-foreground": "{color.neutral.950}",
      "popover": "#ffffff",
      "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.400}",
      "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": [
      "Use one primary button (brand.600 light, brand.400 dark) per view; render all other actions as secondary or ghost buttons.",
      "Show focus as a 2px ring token with a 2px offset on buttons, inputs and table rows; do not replace it with a color change alone.",
      "Set numeric table columns in Source Sans 3 with font-feature-settings: 'tnum' and right-align them.",
      "Use Playfair Display only for heading-lg (30px), display-md (38px) and display-lg (48px) page and report titles.",
      "Separate dashboard cards with a 1px border token and {space.6} (24px) gutters.",
      "Keep table rows at least 44px tall; use the muted token for row hover and zebra striping, and accent for the selected row.",
      "Pair every success, warning and destructive badge or alert with an icon or text label.",
      "Use typography.code (IBM Plex Mono 14px) for IDs, query text and exact raw values."
    ],
    "dont": [
      "Don't use amber (primary or brand.*) for errors or negative trends; use destructive with an icon or label.",
      "Don't give more than one series per chart group a brand color; draw supporting series in neutral.500 to neutral.700.",
      "Don't use #000000 or untinted grey; take every neutral, border and shadow from the green-grey neutral ramp.",
      "Don't apply shadow.md or shadow.lg to cards; reserve md for popovers and dropdowns and lg for dialogs.",
      "Don't set Playfair Display below 24px, in all caps, or inside buttons, badges, inputs or table cells.",
      "Don't put long body text on the accent (brand.100 / brand.900) surface; limit accent to selected rows and highlights.",
      "Don't use the warning token as a text color on background or card; set warning-foreground text on the warning surface."
    ]
  }
}
