{
  "schemaVersion": "1.0",
  "id": "turnpike-haul",
  "version": "1.1.0",
  "name": "Turnpike Haul",
  "tier": "free",
  "summary": "Logistics UI with burnt-amber actions, oversized DM Serif Display headlines and warm-stone neutrals for dispatch and ops teams.",
  "tags": {
    "industries": [
      "logistics",
      "supply-chain",
      "freight"
    ],
    "moods": [
      "bold",
      "energetic",
      "confident",
      "disciplined"
    ],
    "density": "comfortable",
    "contrast": "high"
  },
  "rationale": {
    "overview": "Turnpike Haul serves logistics products whose users are dispatchers and ops staff working long shifts. The preset uses three layers. Large DM Serif Display headlines (heading-lg 36px to display-lg 72px) set the tone. One amber action color marks the single place to act, like a loading-dock marker. Underneath sits a calm warm-stone UI in DM Sans with 48px table rows and 1px borders.",
    "color": "Amber is the only action color. It covers primary buttons, links, ring and active nav states.\n\nIn light mode, primary is brand.600 (#a35800). It gives 5.3:1 with white text and 5.0:1 against background (neutral.50). This is up from 4.75:1 in 1.0.\n\nIn dark mode, primary is brand.400 (#f7ab26) with brand.950 text, at about 9:1. The page is a deep warm neutral.950, so the amber glows without going neon.\n\nNeutrals are stone tinted toward the brand hue (about 35–40°), so amber reads as native. Destructive is crimson-magenta (danger.600 light, danger.400 dark), roughly 120° of hue away from amber, which keeps ΔE far above 18.\n\nThe status ramps follow the same chroma curve as brand: soft 50–200, saturated 400–600, deep 800–950.\n- Warning is a warm yellow (about 48°). It sits close to the brand temperature but clearly yellower than amber (about 37°).\n- Success is a slightly yellow-leaning green, so it does not turn cool against the stone surfaces.",
    "typography": "Weights are limited to what each family ships.\n- DM Serif Display ships only weight 400. It is used for heading-lg (36px), display-md (54px) and display-lg (72px). Display steps grow by about ×1.5 (24 → 36 → 54), with display-lg capped at 72. Tracking tightens with size: −0.015, −0.025 and −0.03em.\n- DM Sans (400/500/600/700) runs the functional ramp: 12, 14, 16, 18, 20 and 24px. Body text uses line heights of 1.5–1.6. heading-md is 24px/700 and heading-sm is 20px/600.\n- DM Mono (400/500) is used for typography.code at 14px. It renders shipment IDs, container codes and timestamps.",
    "layout": "Comfortable density on a 4px base grid. Content max-width is 1280px. Data tables use 48px rows with 16px (space.4) cell padding. Dashboard cards sit on a 24px (space.6) gutter and use 24px internal padding, so KPI numbers set in display-md have room.",
    "elevation": "Mostly flat with borders doing the separation work.\n- Cards use a 1px border token and shadow.sm.\n- shadow.md is reserved for menus and popovers, and shadow.lg for dialogs.\n- All shadows are tinted with neutral.900 (rgba 43, 39, 35) instead of pure black.\n- In dark mode, card (neutral.900) is one step lifter than background (neutral.950). That lift stands in for shadow.",
    "shapes": "Radii are tight to read as engineered: radius.md (8px) on buttons and inputs, radius.lg (12px) on cards, radius.xl (16px) on dialogs. radius.full is reserved for status badges such as In transit, Delayed and Delivered."
  },
  "primitives": {
    "color": {
      "brand": {
        "50": "#fff8e8",
        "100": "#ffefc7",
        "200": "#ffdd8f",
        "300": "#ffc54d",
        "400": "#f7ab26",
        "500": "#e08a00",
        "600": "#a35800",
        "700": "#854700",
        "800": "#663500",
        "900": "#482400",
        "950": "#2d1400"
      },
      "neutral": {
        "50": "#faf7f2",
        "100": "#f1ece4",
        "200": "#e0d9cf",
        "300": "#c8c0b4",
        "400": "#a9a094",
        "500": "#8b8276",
        "600": "#70685d",
        "700": "#585148",
        "800": "#403a33",
        "900": "#2b2723",
        "950": "#1a1714"
      },
      "success": {
        "50": "#edfbef",
        "100": "#d3f3da",
        "200": "#aee4bb",
        "300": "#82cd96",
        "400": "#5cb374",
        "500": "#3a9757",
        "600": "#267d45",
        "700": "#1a6437",
        "800": "#104c29",
        "900": "#08351c",
        "950": "#031f10"
      },
      "warning": {
        "50": "#fffae0",
        "100": "#fff3b3",
        "200": "#fbe372",
        "300": "#ecc93a",
        "400": "#d4ad12",
        "500": "#b28e00",
        "600": "#8f7100",
        "700": "#6f5700",
        "800": "#523f00",
        "900": "#392b00",
        "950": "#221900"
      },
      "danger": {
        "50": "#fff4f5",
        "100": "#ffe3e6",
        "200": "#ffc6ce",
        "300": "#ff9dac",
        "400": "#f66e89",
        "500": "#e1436b",
        "600": "#c02d56",
        "700": "#9c2043",
        "800": "#791231",
        "900": "#580521",
        "950": "#390011"
      }
    },
    "font": {
      "display": {
        "family": "DM Serif Display",
        "fallback": "Georgia, serif",
        "source": "google",
        "weights": [
          400
        ]
      },
      "sans": {
        "family": "DM Sans",
        "fallback": "system-ui, sans-serif",
        "source": "google",
        "weights": [
          400,
          500,
          600,
          700
        ]
      },
      "mono": {
        "family": "DM Mono",
        "fallback": "ui-monospace, monospace",
        "source": "google",
        "weights": [
          400,
          500
        ]
      }
    },
    "radius": {
      "none": 0,
      "sm": 4,
      "md": 8,
      "lg": 12,
      "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(43, 39, 35, 0.08)",
      "md": "0 6px 16px -4px rgba(43, 39, 35, 0.16)",
      "lg": "0 20px 44px -10px rgba(43, 39, 35, 0.28)"
    }
  },
  "typography": {
    "display-lg": {
      "font": "display",
      "size": 72,
      "lineHeight": 1.02,
      "weight": 400,
      "letterSpacing": -0.03
    },
    "display-md": {
      "font": "display",
      "size": 54,
      "lineHeight": 1.05,
      "weight": 400,
      "letterSpacing": -0.025
    },
    "heading-lg": {
      "font": "display",
      "size": 36,
      "lineHeight": 1.12,
      "weight": 400,
      "letterSpacing": -0.015
    },
    "heading-md": {
      "font": "sans",
      "size": 24,
      "lineHeight": 1.25,
      "weight": 700,
      "letterSpacing": -0.012
    },
    "heading-sm": {
      "font": "sans",
      "size": 20,
      "lineHeight": 1.35,
      "weight": 600,
      "letterSpacing": -0.006
    },
    "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.3,
      "weight": 600,
      "letterSpacing": 0.005
    },
    "caption": {
      "font": "sans",
      "size": 12,
      "lineHeight": 1.45,
      "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.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.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": 44,
      "paddingX": "{space.5}",
      "radius": "{radius.md}",
      "typography": "{typography.label}",
      "fontWeight": 700
    },
    "input": {
      "height": 44,
      "paddingX": "{space.3}",
      "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 'Book shipment' or 'Dispatch'). Use secondary or ghost variants for every other button.",
      "Show focus with a 2px ring token at 2px offset on buttons, inputs and table rows, in both modes.",
      "Set display-lg (72px), display-md (54px) and heading-lg (36px) in DM Serif Display at weight 400, with the token letterSpacing (−0.03, −0.025 and −0.015em).",
      "Render shipment IDs, tracking numbers, container codes and timestamps with typography.code (DM Mono 14px/400).",
      "Build status badges from components.badge (24px tall, radius.full, caption type). Pair each with an icon and a text label: success = Delivered, warning = Delayed, destructive = Failed or Exception.",
      "Keep table rows at least 48px tall. Right-align numeric columns with font-feature-settings: 'tnum'.",
      "Separate cards with a 1px border token and shadow.sm. Reserve shadow.md for menus and popovers, and shadow.lg for dialogs.",
      "In dark mode, place cards on card (neutral.900) over background (neutral.950). Don't add shadows for lift."
    ],
    "dont": [
      "Don't use brand.400 or brand.500 for text or icons on light surfaces. Their contrast is about 2.5:1 on neutral.50. Use brand.600 or darker.",
      "Don't use DM Serif Display below 36px (heading-lg), with synthetic bold, or in buttons, labels, inputs or table cells.",
      "Don't use destructive for anything except errors and irreversible actions such as 'Cancel shipment'. Primary amber must never signal failure.",
      "Don't use warning yellow as a brand accent or as a primary button fill. It marks Delayed and at-risk states only.",
      "Don't put white text on brand.400 or brand.500. Use brand.950 text on those bright amber fills, and white only on brand.600 and darker.",
      "Don't place more than one amber-filled element in the same toolbar, card footer or dialog.",
      "Don't use pure black (#000), cool greys or untinted shadows. Take every surface, border and text color from the neutral ramp."
    ]
  }
}
