Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions design/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Desktop design bridge

The parent Listenbox repository's `DESIGN.md` is the visual authority. This
directory holds its generated token snapshot so the client repository can build
and check independently. Do not edit the snapshot or generated Dart values.

From the parent workspace, regenerate with
`dart apps/client2/tool/design.dart --source DESIGN.md`. `moon run
root:desktop-design-check` compares the snapshot with that canonical contract.
The check also participates in the parent lint workflow and affected CI tasks.

`moon run client:lint` verifies generated Dart against the snapshot and rejects
raw colors, type sizes/weights, corner radii, and seeded palettes in desktop
widgets. UI consumes
`DesignTokens` through `ListenboxTheme`; native controls receive explicit light
and dark color roles, system fonts, capsule actions, field geometry, and focus
states. Native action and field dimensions come from the component definitions.
Typography uses Flutter's nearest supported font-weight step. Layout
dimensions remain specific to this desktop surface.

The recording-studio identity is expressed through the quiet work area,
achromatic navigation, readable rows, and clear states. Product UI uses no
homepage imagery. Design changes belong in the parent contract and its linked
system files, followed by regeneration here.
286 changes: 286 additions & 0 deletions design/tokens.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,286 @@
{
"colors": {
"bg": "oklch(0.9851 0 0)",
"sheet": "oklch(1 0 0)",
"surface": "oklch(0.9702 0 0)",
"surface-hover": "oklch(0.9401 0 0)",
"navigation-active": "oklch(0.9219 0 0)",
"navigation-active-end": "oklch(0.9219 0 0)",
"surface-muted": "oklch(0.9612 0 0)",
"ink": "oklch(0.2435 0 0)",
"muted": "oklch(0.4532 0 0)",
"placeholder": "oklch(0.4962 0 0)",
"border": "oklch(0.8761 0 0)",
"divider": "oklch(0.9219 0 0)",
"border-strong": "oklch(0.6167 0 0)",
"primary": "oklch(0.3092 0 0)",
"primary-end": "oklch(0.3523 0 0)",
"primary-hover": "oklch(0.2264 0 0)",
"primary-hover-end": "oklch(0.2686 0 0)",
"primary-soft": "oklch(0.9642 0 0)",
"accent-soft": "oklch(0.931 0 0)",
"ocean-deep": "oklch(0.2603 0 0)",
"focus": "oklch(0.3092 0 0)",
"focus-inverse": "oklch(1 0 0)",
"rail": "oklch(0.9612 0 0)",
"rail-mobile": "oklch(0.9612 0 0)",
"rail-end": "oklch(0.9612 0 0)",
"rail-control": "oklch(1 0 0)",
"rail-control-end": "oklch(1 0 0)",
"rail-plan": "oklch(0.3092 0 0)",
"dark-bg": "oklch(0.2134 0 0)",
"dark-sheet": "oklch(0.252 0 0)",
"dark-surface": "oklch(0.2768 0 0)",
"dark-surface-hover": "oklch(0.329 0 0)",
"dark-ink": "oklch(0.9702 0 0)",
"dark-muted": "oklch(0.8015 0 0)",
"dark-border": "oklch(0.4349 0 0)",
"dark-divider": "oklch(0.3446 0 0)",
"dark-primary": "oklch(0.4532 0 0)",
"dark-primary-end": "oklch(0.4891 0 0)",
"dark-rail": "oklch(0.2478 0 0)",
"dark-rail-mobile": "oklch(0.2478 0 0)",
"dark-rail-end": "oklch(0.2478 0 0)",
"dark-rail-control": "oklch(0.2931 0 0)",
"dark-navigation-active": "oklch(0.3368 0 0)",
"dark-navigation-active-end": "oklch(0.3368 0 0)",
"success": "oklch(0.5368 0.0853 140.3)",
"warning": "oklch(0.726 0.1421 78.7)",
"danger": "oklch(0.5861 0.1563 27.2)",
"danger-soft": "oklch(0.9492 0.0198 37)",
"danger-strong": "oklch(0.4482 0.1273 26.6)",
"youtube": "#ff1612",
"spotify": "#1db954",
"apple-podcasts": "#8f32d2",
"rss": "#ff741f",
"dark-primary-hover": "oklch(0.5173 0 0)",
"dark-primary-hover-end": "oklch(0.5173 0 0)",
"dark-primary-soft": "oklch(0.3092 0 0)",
"dark-focus": "oklch(0.8545 0 0)",
"dark-accent-strong": "oklch(0.8545 0 0)",
"dark-placeholder": "oklch(0.7316 0 0)"
},
"typography": {
"display": {
"fontFamily": "ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"",
"fontSize": "clamp(3rem, 7vw, 5.5rem)",
"fontWeight": 700,
"lineHeight": 1.02,
"letterSpacing": "-0.025em"
},
"headline": {
"fontFamily": "ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"",
"fontSize": "clamp(2rem, 4vw, 3.5rem)",
"fontWeight": 700,
"lineHeight": 1.08,
"letterSpacing": "-0.02em"
},
"page-title": {
"fontFamily": "ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"",
"fontSize": "1.875rem",
"fontWeight": 700,
"lineHeight": 1,
"letterSpacing": "-0.025em"
},
"title": {
"fontFamily": "ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"",
"fontSize": "1.125rem",
"fontWeight": 650,
"lineHeight": 1.35,
"letterSpacing": "0em"
},
"body": {
"fontFamily": "ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"",
"fontSize": "1rem",
"fontWeight": 400,
"lineHeight": 1.6,
"letterSpacing": "0em"
},
"field": {
"fontFamily": "ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"",
"fontSize": "0.875rem",
"fontWeight": 400,
"lineHeight": 1.5,
"letterSpacing": "0em"
},
"label": {
"fontFamily": "ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"",
"fontSize": "0.875rem",
"fontWeight": 600,
"lineHeight": 1.25,
"letterSpacing": "0em"
},
"button": {
"fontFamily": "ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"",
"fontSize": "0.875rem",
"fontWeight": 700,
"lineHeight": 1.25,
"letterSpacing": "0em"
},
"homepage-display": {
"fontFamily": "ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"",
"fontSize": "clamp(28px, 6.4vw, 88px)",
"fontWeight": 680,
"lineHeight": 1.04,
"letterSpacing": "-0.035em"
},
"campaign-headline": {
"fontFamily": "ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"",
"fontSize": "clamp(36px, 4.2vw, 60px)",
"fontWeight": 720,
"lineHeight": 1.08,
"letterSpacing": "-0.035em"
},
"support": {
"fontFamily": "ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"",
"fontSize": "15px",
"fontWeight": 400,
"lineHeight": 1.6,
"letterSpacing": "0em"
},
"feature-title": {
"fontFamily": "ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"",
"fontSize": "17px",
"fontWeight": 700,
"lineHeight": 1.35,
"letterSpacing": "0em"
},
"code-label": {
"fontFamily": "ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
"fontSize": "13px",
"fontWeight": 400,
"lineHeight": 1.5,
"letterSpacing": "0em"
},
"badge-detail": {
"fontFamily": "ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"",
"fontSize": "0.6875rem",
"fontWeight": 900,
"lineHeight": 1.25,
"letterSpacing": "0.04em"
},
"eyebrow-compact": {
"fontFamily": "ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"",
"fontSize": "0.65rem",
"fontWeight": 700,
"lineHeight": 1.25,
"letterSpacing": "0.04em"
}
},
"rounded": {
"xs": "6px",
"sm": "10px",
"md": "14px",
"lg": "16px",
"xl": "20px",
"2xl": "24px",
"3xl": "32px",
"4xl": "40px",
"button": "999px",
"surface": "16px",
"media": "20px",
"panel": "24px",
"icon": "14px",
"pill": "999px"
},
"spacing": {
"xs": "4px",
"sm": "8px",
"md": "12px",
"lg": "16px",
"xl": "24px",
"2xl": "32px",
"3xl": "48px",
"4xl": "64px"
},
"components": {
"button-primary": {
"backgroundColor": "{colors.primary}",
"textColor": "{colors.sheet}",
"typography": "{typography.button}",
"rounded": "{rounded.button}",
"padding": "0 16px",
"height": "36px"
},
"button-primary-hover": {
"backgroundColor": "{colors.primary-hover}",
"textColor": "{colors.sheet}",
"typography": "{typography.button}",
"rounded": "{rounded.button}",
"padding": "0 16px",
"height": "36px"
},
"button-marketing-primary": {
"backgroundColor": "{colors.primary}",
"textColor": "{colors.sheet}",
"typography": "{typography.button}",
"rounded": "{rounded.button}",
"padding": "0 16px",
"height": "40px"
},
"button-secondary": {
"backgroundColor": "{colors.sheet}",
"textColor": "{colors.ink}",
"typography": "{typography.button}",
"rounded": "{rounded.button}",
"padding": "0 16px",
"height": "36px"
},
"input-default": {
"backgroundColor": "{colors.sheet}",
"textColor": "{colors.ink}",
"typography": "{typography.field}",
"rounded": "{rounded.md}",
"padding": "0 12px",
"height": "36px"
},
"chip-active": {
"backgroundColor": "{colors.primary-soft}",
"textColor": "{colors.primary}",
"typography": "{typography.label}",
"rounded": "{rounded.pill}",
"padding": "4px 10px"
},
"card-default": {
"backgroundColor": "{colors.sheet}",
"textColor": "{colors.ink}",
"rounded": "{rounded.surface}",
"padding": "16px"
},
"card-media": {
"backgroundColor": "{colors.sheet}",
"textColor": "{colors.ink}",
"rounded": "{rounded.media}",
"padding": "24px"
},
"panel-default": {
"backgroundColor": "{colors.sheet}",
"textColor": "{colors.ink}",
"rounded": "{rounded.panel}",
"padding": "24px"
},
"navigation-active": {
"backgroundColor": "{colors.navigation-active}",
"textColor": "{colors.ink}",
"typography": "{typography.label}",
"rounded": "{rounded.md}",
"padding": "8px 10px"
},
"team-picker": {
"backgroundColor": "{colors.rail-control}",
"textColor": "{colors.ink}",
"typography": "{typography.label}",
"rounded": "{rounded.md}",
"padding": "0 12px",
"height": "44px"
},
"button-hero": {
"backgroundColor": "{colors.sheet}",
"textColor": "{colors.ink}",
"typography": "{typography.button}",
"rounded": "{rounded.button}",
"padding": "0 22px",
"height": "52px"
}
}
}
1 change: 1 addition & 0 deletions moon.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ fileGroups:
- .moon/**/*.yml
- moon.yml
- tool/**/*.dart
- design/**/*
- packages/**/pubspec.yaml
- packages/**/lib/**/*.dart
- packages/**/bin/**/*.dart
Expand Down
Loading
Loading