{
  "$schema": "https://www.designtokens.org/schemas/2025.10/format.json",
  "$description": "Designesy design system contract v0.4.0 — W3C DTCG 2025.10 format. Custom types (spring, sound) declared via $extensions.designesy.",
  "color": {
    "text": {
      "primary": {
        "$value": {
          "colorSpace": "srgb",
          "components": [
            0.9607843137254902,
            0.9607843137254902,
            0.9686274509803922
          ],
          "alpha": 1
        },
        "$type": "color",
        "$description": "Primary text / foreground"
      },
      "secondary": {
        "$value": {
          "colorSpace": "srgb",
          "components": [
            0.6274509803921569,
            0.6274509803921569,
            0.6274509803921569
          ],
          "alpha": 1
        },
        "$type": "color",
        "$description": "Secondary text"
      },
      "muted_dim": {
        "$value": {
          "colorSpace": "srgb",
          "components": [
            0.49019607843137253,
            0.49019607843137253,
            0.49019607843137253
          ],
          "alpha": 1
        },
        "$type": "color",
        "$description": "Tertiary / meta text"
      }
    },
    "foundation": {
      "black": {
        "$value": {
          "colorSpace": "srgb",
          "components": [
            0.00392156862745098,
            0.00392156862745098,
            0.00784313725490196
          ],
          "alpha": 1
        },
        "$type": "color",
        "$description": "Page background"
      }
    },
    "surface": {
      "black": {
        "$value": {
          "colorSpace": "srgb",
          "components": [
            0.0392156862745098,
            0.0392156862745098,
            0.047058823529411764
          ],
          "alpha": 1
        },
        "$type": "color",
        "$description": "Card / panel base"
      },
      "raised": {
        "$value": {
          "colorSpace": "srgb",
          "components": [
            0.07058823529411765,
            0.07058823529411765,
            0.08627450980392157
          ],
          "alpha": 1
        },
        "$type": "color",
        "$description": "Elevated surface"
      },
      "lifted": {
        "$value": {
          "colorSpace": "srgb",
          "components": [
            0.08627450980392157,
            0.08627450980392157,
            0.10588235294117647
          ],
          "alpha": 1
        },
        "$type": "color",
        "$description": "Lifted / hover panel"
      }
    },
    "signal": {
      "blue": {
        "$value": {
          "colorSpace": "srgb",
          "components": [
            0.00392156862745098,
            0.2,
            0.796078431372549
          ],
          "alpha": 1
        },
        "$type": "color",
        "$description": "Brand accent (internal token name; public products avoid this vocabulary)"
      },
      "light": {
        "$value": {
          "colorSpace": "srgb",
          "components": [
            0.2,
            0.34509803921568627,
            0.9098039215686274
          ],
          "alpha": 1
        },
        "$type": "color",
        "$description": "Accent hover / focus lift"
      },
      "access": {
        "$value": {
          "colorSpace": "srgb",
          "components": [
            0.36470588235294116,
            0.4823529411764706,
            1
          ],
          "alpha": 1
        },
        "$type": "color",
        "$description": "Accessible signal (AA contrast on dark surfaces)"
      },
      "on_blue": {
        "$value": {
          "colorSpace": "srgb",
          "components": [
            1,
            1,
            1
          ],
          "alpha": 1
        },
        "$type": "color",
        "$description": "Text on signal fill"
      }
    },
    "activation": {
      "yellow": {
        "$value": {
          "colorSpace": "srgb",
          "components": [
            0.996078431372549,
            0.8,
            0.20392156862745098
          ],
          "alpha": 1
        },
        "$type": "color",
        "$description": "Activation highlight (reserved)"
      }
    },
    "status": {
      "ok": {
        "$value": {
          "colorSpace": "srgb",
          "components": [
            0.2901960784313726,
            0.8705882352941177,
            0.5019607843137255
          ],
          "alpha": 1
        },
        "$type": "color",
        "$description": "Verification status — pass"
      },
      "warn": {
        "$value": {
          "colorSpace": "srgb",
          "components": [
            0.9803921568627451,
            0.8,
            0.08235294117647059
          ],
          "alpha": 1
        },
        "$type": "color",
        "$description": "Verification status — warn"
      },
      "error": {
        "$value": {
          "colorSpace": "srgb",
          "components": [
            0.9725490196078431,
            0.44313725490196076,
            0.44313725490196076
          ],
          "alpha": 1
        },
        "$type": "color",
        "$description": "Verification status — fail"
      }
    },
    "border": {
      "subtle": {
        "$value": {
          "colorSpace": "srgb",
          "components": [
            1,
            1,
            1
          ],
          "alpha": 0.12
        },
        "$type": "color",
        "$description": "Default border"
      },
      "strong": {
        "$value": {
          "colorSpace": "srgb",
          "components": [
            1,
            1,
            1
          ],
          "alpha": 0.22
        },
        "$type": "color",
        "$description": "Emphasized border"
      },
      "faint": {
        "$value": {
          "colorSpace": "srgb",
          "components": [
            1,
            1,
            1
          ],
          "alpha": 0.06
        },
        "$type": "color",
        "$description": "Subtle divider"
      }
    },
    "surface_effects": {
      "soft": {
        "$value": {
          "colorSpace": "srgb",
          "components": [
            1,
            1,
            1
          ],
          "alpha": 0.03
        },
        "$type": "color",
        "$description": "Soft fill / note background"
      },
      "hover": {
        "$value": {
          "colorSpace": "srgb",
          "components": [
            1,
            1,
            1
          ],
          "alpha": 0.06
        },
        "$type": "color",
        "$description": "Hover wash"
      },
      "wash": {
        "$value": {
          "colorSpace": "srgb",
          "components": [
            0.00392156862745098,
            0.2,
            0.796078431372549
          ],
          "alpha": 0.14
        },
        "$type": "color",
        "$description": "Accent wash / badge fill"
      }
    }
  },
  "radius": {
    "default": {
      "$value": "6px",
      "$type": "dimension",
      "$description": "Default corner radius"
    },
    "sm": {
      "$value": "4px",
      "$type": "dimension",
      "$description": "Compact controls / nav chips"
    },
    "lg": {
      "$value": "12px",
      "$type": "dimension",
      "$description": "Cards / panels / large surfaces"
    },
    "xl": {
      "$value": "16px",
      "$type": "dimension",
      "$description": "Hero / modal / flagship surfaces"
    }
  },
  "shadow": {
    "sm": {
      "$value": {
        "offsetX": "0",
        "offsetY": "1px",
        "blur": "3px",
        "spread": "0",
        "color": "rgba(0, 0, 0, 0.4)"
      },
      "$type": "shadow"
    },
    "md": {
      "$value": {
        "offsetX": "0",
        "offsetY": "8px",
        "blur": "30px",
        "spread": "0",
        "color": "rgba(0, 0, 0, 0.35)"
      },
      "$type": "shadow"
    },
    "lg": {
      "$value": {
        "offsetX": "0",
        "offsetY": "24px",
        "blur": "80px",
        "spread": "0",
        "color": "rgba(0, 0, 0, 0.5)"
      },
      "$type": "shadow"
    }
  },
  "motion": {
    "duration": {
      "default": {
        "$value": {
          "value": 0.6,
          "unit": "s"
        },
        "$type": "duration",
        "$description": "Primary entrance duration"
      },
      "quick": {
        "$value": {
          "value": 150,
          "unit": "ms"
        },
        "$type": "duration",
        "$description": "Close, swap, tooltip (transitions.dev cross-ref)"
      },
      "fast": {
        "$value": {
          "value": 250,
          "unit": "ms"
        },
        "$type": "duration",
        "$description": "Open, hover transition, icon swap"
      },
      "medium": {
        "$value": {
          "value": 350,
          "unit": "ms"
        },
        "$type": "duration",
        "$description": "Panel close, toast"
      },
      "slow": {
        "$value": {
          "value": 400,
          "unit": "ms"
        },
        "$type": "duration",
        "$description": "Panel open, skeleton reveal"
      }
    },
    "ease": {
      "default": {
        "$value": [
          0.22,
          0.61,
          0.36,
          1
        ],
        "$type": "cubicBezier",
        "$description": "Default ease"
      },
      "out": {
        "$value": [
          0.23,
          1,
          0.32,
          1
        ],
        "$type": "cubicBezier",
        "$description": "Exit / settle"
      },
      "in_out": {
        "$value": [
          0.77,
          0,
          0.175,
          1
        ],
        "$type": "cubicBezier",
        "$description": "Symmetric motion"
      },
      "drawer": {
        "$value": [
          0.32,
          0.72,
          0,
          1
        ],
        "$type": "cubicBezier",
        "$description": "Drawer / panel slide"
      }
    },
    "spring": {
      "default": {
        "$value": "0.4s response, 1 damping",
        "$type": "string",
        "$description": "Default spring physics for natural motion",
        "$extensions": {
          "designesy": {
            "type": "spring",
            "response": 0.4,
            "damping": 1
          }
        }
      },
      "momentum": {
        "$value": "0.3s response, 0.8 damping",
        "$type": "string",
        "$description": "Momentum spring for continued motion",
        "$extensions": {
          "designesy": {
            "type": "spring",
            "response": 0.3,
            "damping": 0.8
          }
        }
      }
    }
  },
  "interaction": {
    "hover_fill": {
      "$value": "var(--surface-hover)",
      "$type": "color",
      "$description": "Interactive hover wash"
    },
    "press_fill": {
      "$value": "var(--surface-soft)",
      "$type": "color",
      "$description": "Press / active fill"
    },
    "focus_ring": {
      "$value": "var(--signal-light)",
      "$type": "color",
      "$description": "Keyboard focus indicator color"
    }
  },
  "fontFamily": {
    "sans": {
      "$value": "var(--font-sans), -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, Helvetica, sans-serif",
      "$type": "fontFamily",
      "$description": "Primary UI and body stack — Schibsted Grotesk, self-hosted at build time via next/font (--font-sans). A newsroom-commissioned grotesque drawn for sustained reading, chosen to share Fraunces's editorial register. Replaced Geist 2026-09-16 (anti-slop rule S1 flags geist as an overused family). System fonts cover fallback."
    },
    "serif": {
      "$value": "var(--font-display), 'Iowan Old Style', 'Palatino Linotype', 'Times New Roman', serif",
      "$type": "fontFamily",
      "$description": "Editorial serif for headlines — the trust/authority signal. Fraunces, self-hosted at build time via next/font (--font-display), with opsz + SOFT + WONK axes."
    },
    "display": {
      "$value": "var(--serif)",
      "$type": "fontFamily",
      "$description": "Display/headline face — Fraunces (aliased to --serif). Hybrid system: serif headlines + sans UI."
    },
    "mono": {
      "$value": "var(--font-mono), ui-monospace, 'SF Mono', 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, monospace",
      "$type": "fontFamily",
      "$description": "Mono stack for check IDs, score readouts, token names — Geist Mono, self-hosted via next/font (--font-mono). Unchanged by the 2026-09-16 body-face swap: S1 names the sans only, and a monospace is the correct choice for numeric readouts regardless of the body face."
    }
  },
  "sound": {
    "brand": {
      "$value": "sparkle",
      "$type": "string",
      "$description": "Brand wordmark contact",
      "$extensions": {
        "designesy": {
          "type": "sound",
          "cue": "sparkle"
        }
      }
    },
    "nav": {
      "$value": "tick",
      "$type": "string",
      "$description": "Navigation and wayfinding",
      "$extensions": {
        "designesy": {
          "type": "sound",
          "cue": "tick"
        }
      }
    },
    "invite": {
      "$value": "chime",
      "$type": "string",
      "$description": "Primary invitation / machine surfaces",
      "$extensions": {
        "designesy": {
          "type": "sound",
          "cue": "chime"
        }
      }
    },
    "action": {
      "$value": "press",
      "$type": "string",
      "$description": "Pointer-down on actionable surfaces",
      "$extensions": {
        "designesy": {
          "type": "sound",
          "cue": "press"
        }
      }
    },
    "resolve": {
      "$value": "release",
      "$type": "string",
      "$description": "Pointer-up default resolve",
      "$extensions": {
        "designesy": {
          "type": "sound",
          "cue": "release"
        }
      }
    },
    "complete": {
      "$value": "success",
      "$type": "string",
      "$description": "High-value resolve",
      "$extensions": {
        "designesy": {
          "type": "sound",
          "cue": "success"
        }
      }
    },
    "reveal": {
      "$value": "bloom",
      "$type": "string",
      "$description": "Content / experiment reveal",
      "$extensions": {
        "designesy": {
          "type": "sound",
          "cue": "bloom"
        }
      }
    },
    "list": {
      "$value": "whisper",
      "$type": "string",
      "$description": "Dense list / surface scan",
      "$extensions": {
        "designesy": {
          "type": "sound",
          "cue": "whisper"
        }
      }
    },
    "switch": {
      "$value": "toggle",
      "$type": "string",
      "$description": "State toggle",
      "$extensions": {
        "designesy": {
          "type": "sound",
          "cue": "toggle"
        }
      }
    },
    "contact": {
      "$value": "droplet",
      "$type": "string",
      "$description": "Contact / outbound mail",
      "$extensions": {
        "designesy": {
          "type": "sound",
          "cue": "droplet"
        }
      }
    }
  },
  "$extensions": {
    "designesy": {
      "version": "0.4.0",
      "typography": {
        "source_lab": "Cadence",
        "adopted_in": "0.1.3",
        "rules": [
          "Font smoothing on root: -webkit-font-smoothing: antialiased + -moz-osx-font-smoothing: grayscale",
          "Rem-based scale: every text size is a rem multiple of the 16px root — never px",
          "Line-height by role: headings 1.05–1.1, body 1.5–1.6, display 1 — never a single global line-height",
          "Tracking by size: negative for headings (-0.02 to -0.04em), positive for labels (0.03–0.18em), zero for body",
          "Cap the measure: body text 520–580px max, layout shell 1080px — text wider than 75ch loses readers",
          "Wrap deliberately: text-wrap: balance on headings, text-wrap: pretty on body",
          "Tabular numbers: font-variant-numeric: tabular-nums for all data, stats, and numerical tables",
          "Selection: ::selection styled with a token color — never default browser blue",
          "user-select: none on UI chrome (buttons, labels, meta) — body text stays selectable",
          "16px input floor on mobile — inputs never below 16px to avoid iOS auto-zoom",
          "No decorative display fonts: system stack is the contract for public UI"
        ],
        "verified_against": "Live CSS audit (48,755 bytes) — font smoothing, line-heights, letter-spacing, text-wrap, tabular-nums, ::selection, user-select, rem scale, font-synthesis, text-underline-position, text-decoration-skip-ink, logical inline properties all parsed",
        "verification": [
          "https://www.designesy.org/labs/cadence",
          "https://www.designesy.org/review/cadence"
        ],
        "unverified": [
          "Block-axis logical properties (margin-block-start/end) not yet migrated — only inline-axis (margin-inline, padding-inline) done",
          "border-left decorative accents not yet migrated to border-inline-start — visual regression risk needs testing",
          "inset left/right positioning not yet migrated to inset-inline — absolute positioning needs case-by-case review"
        ]
      },
      "takt": {
        "source_lab": "Takt",
        "adopted_in": "0.1.2",
        "rules": [
          "Concentric border radius: outerRadius = innerRadius + padding on every nested pair",
          "Press scale 0.96 on cells and buttons; 0.985 on cards and rows — never below 0.95",
          "Image outlines: 1px at 0.1 opacity, pure black in light mode, pure white in dark mode — never tinted neutrals",
          "Minimum hit area: 44px for touch, 40px for desktop — extend with pseudo-element when needed",
          "Stagger enter animations: ~80–100ms per semantic chunk; skip animation on page load",
          "Soften exits: small fixed translateY, softer than enter — no full-height collapse",
          "Never use transition: all — every transition names its specific properties",
          "Spare will-change: only transform, opacity, or filter — only when a stutter was observed"
        ],
        "verified_against": "Live CSS audit (47,680 bytes) — all transitions, scales, will-change, radii, outlines parsed",
        "verification": [
          "https://www.designesy.org/labs/takt",
          "https://www.designesy.org/review/takt"
        ],
        "unverified": [
          "Image outline rule — no image surfaces on designesy.org yet",
          "Mobile hit area 44px — desktop 40px confirmed only"
        ]
      },
      "acoustic": {
        "adopted_in": "0.3.0",
        "engine": "Cuelume v0.2.2 (MIT)",
        "preference_key": "designesy:sound",
        "reduced_motion_proxy": true,
        "token_type": "Custom $type: sound via $extensions.designesy — net-new relative to W3C DTCG 2025.10",
        "cues": [
          {
            "token": "--cue:brand",
            "cue": "sparkle",
            "role": "Brand wordmark contact"
          },
          {
            "token": "--cue:nav",
            "cue": "tick",
            "role": "Navigation and wayfinding"
          },
          {
            "token": "--cue:invite",
            "cue": "chime",
            "role": "Primary invitation / machine surfaces"
          },
          {
            "token": "--cue:action",
            "cue": "press",
            "role": "Pointer-down on actionable surfaces"
          },
          {
            "token": "--cue:resolve",
            "cue": "release",
            "role": "Pointer-up default resolve"
          },
          {
            "token": "--cue:complete",
            "cue": "success",
            "role": "High-value resolve"
          },
          {
            "token": "--cue:reveal",
            "cue": "bloom",
            "role": "Content / experiment reveal"
          },
          {
            "token": "--cue:list",
            "cue": "whisper",
            "role": "Dense list / surface scan"
          },
          {
            "token": "--cue:switch",
            "cue": "toggle",
            "role": "State toggle"
          },
          {
            "token": "--cue:contact",
            "cue": "droplet",
            "role": "Contact / outbound mail"
          }
        ],
        "mapping_rules": [
          "Brand marks earn sparkle — hero wordmark, topbar logo, footer mark",
          "One primary cue family per role — do not randomize per page",
          "Hover sounds are fine-pointer only; touch maps hover cue to single tap",
          "No ambient audio — Cuelume is interaction-only",
          "No focus sounds — sounds fire on pointer and click, not on focus",
          "Every cue must trace to the acoustic token document"
        ]
      },
      "verification": {
        "checks": 40,
        "categories": 13,
        "a11y_floor": "60% (a11y < 60% caps score at C/70)",
        "standards": "WCAG 2.1 AA + APCA + DTCG 2025.10 + EU AI Act Art 50"
      }
    }
  }
}