chore: import upstream snapshot with attribution
Test / test (push) Failing after 1s
Test / npm-registry-smoke-windows (push) Has been cancelled

This commit is contained in:
wehub-resource-sync
2026-07-13 12:18:57 +08:00
commit e6ed586119
131 changed files with 17114 additions and 0 deletions
+210
View File
@@ -0,0 +1,210 @@
---
name: Atmospheric Glass
colors:
surface: "#0b1326"
surface-dim: "#0b1326"
surface-bright: "#31394d"
surface-container-lowest: "#060e20"
surface-container-low: "#131b2e"
surface-container: "#171f33"
surface-container-high: "#222a3d"
surface-container-highest: "#2d3449"
on-surface: "#dae2fd"
on-surface-variant: "#c4c7c8"
inverse-surface: "#dae2fd"
inverse-on-surface: "#283044"
outline: "#8e9192"
outline-variant: "#444748"
surface-tint: "#c6c6c7"
primary: "#ffffff"
on-primary: "#2f3131"
primary-container: "#e2e2e2"
on-primary-container: "#636565"
inverse-primary: "#5d5f5f"
secondary: "#adc9eb"
on-secondary: "#14324e"
secondary-container: "#304b68"
on-secondary-container: "#9fbbdd"
tertiary: "#ffffff"
on-tertiary: "#620040"
tertiary-container: "#ffd8e7"
on-tertiary-container: "#ab3779"
error: "#ffb4ab"
on-error: "#690005"
error-container: "#93000a"
on-error-container: "#ffdad6"
primary-fixed: "#e2e2e2"
primary-fixed-dim: "#c6c6c7"
on-primary-fixed: "#1a1c1c"
on-primary-fixed-variant: "#454747"
secondary-fixed: "#d0e4ff"
secondary-fixed-dim: "#adc9eb"
on-secondary-fixed: "#001d35"
on-secondary-fixed-variant: "#2d4965"
tertiary-fixed: "#ffd8e7"
tertiary-fixed-dim: "#ffafd3"
on-tertiary-fixed: "#3d0026"
on-tertiary-fixed-variant: "#85145a"
background: "#0b1326"
on-background: "#dae2fd"
surface-variant: "#2d3449"
typography:
display-lg:
fontFamily: Inter
fontSize: 84px
fontWeight: "700"
lineHeight: 90px
letterSpacing: -0.04em
headline-lg:
fontFamily: Inter
fontSize: 32px
fontWeight: "600"
lineHeight: 40px
letterSpacing: -0.02em
headline-md:
fontFamily: Inter
fontSize: 24px
fontWeight: "500"
lineHeight: 32px
body-lg:
fontFamily: Inter
fontSize: 18px
fontWeight: "400"
lineHeight: 28px
body-md:
fontFamily: Inter
fontSize: 16px
fontWeight: "400"
lineHeight: 24px
label-sm:
fontFamily: Inter
fontSize: 12px
fontWeight: "600"
lineHeight: 16px
letterSpacing: 0.05em
rounded:
sm: 0.25rem
DEFAULT: 0.5rem
md: 0.75rem
lg: 1rem
xl: 1.5rem
full: 9999px
spacing:
unit: 8px
container-padding: 24px
card-gap: 16px
section-margin: 40px
glass-padding: 20px
components:
glass-card-standard:
backgroundColor: rgba(255, 255, 255, 0.1)
textColor: "{colors.primary}"
rounded: "{rounded.lg}"
padding: "{spacing.glass-padding}"
glass-card-elevated:
backgroundColor: rgba(255, 255, 255, 0.2)
textColor: "{colors.primary}"
rounded: "{rounded.xl}"
padding: "{spacing.glass-padding}"
button-primary:
backgroundColor: "{colors.primary}"
textColor: "{colors.on-primary}"
typography: "{typography.label-sm}"
rounded: "{rounded.xl}"
height: 48px
padding: 0 24px
button-primary-hover:
backgroundColor: "{colors.primary-fixed-dim}"
button-ghost:
backgroundColor: rgba(255, 255, 255, 0.05)
textColor: "{colors.primary}"
typography: "{typography.label-sm}"
rounded: "{rounded.xl}"
input-field:
backgroundColor: rgba(255, 255, 255, 0.1)
textColor: "{colors.primary}"
typography: "{typography.body-md}"
rounded: "{rounded.xl}"
padding: 20px
height: 48px
weather-display-large:
textColor: "{colors.primary}"
typography: "{typography.display-lg}"
metric-label:
textColor: "{colors.on-surface-variant}"
typography: "{typography.label-sm}"
list-item-interactive:
backgroundColor: transparent
rounded: "{rounded.md}"
padding: 12px
list-item-interactive-hover:
backgroundColor: rgba(255, 255, 255, 0.1)
---
## Brand & Style
This design system centers on a high-fidelity Glassmorphism aesthetic designed to evoke a sense of clarity, depth, and modern sophistication. The brand personality is ethereal yet functional, transforming complex meteorological data into a serene visual experience.
The UI relies on a "vibrant-minimalist" approach: the background provides the energy through multi-colored abstract gradients (pinks, purples, and blues), while the interface elements act as frosted crystalline lenses that focus the user's attention. The emotional response is intended to be calm and premium, utilizing transparency and blur to simulate physical layers of glass floating in a fluid, digital space.
## Colors
The color strategy prioritizes luminosity and contrast. Because the background is a vibrant, multi-colored abstract composition, the UI components utilize a monochromatic white palette with varying alpha channels to maintain legibility.
- **Primary Canvas:** A multi-stop linear or radial gradient background featuring Deep Blue (#1E3A8A), Vivid Purple (#7E22CE), and Soft Pink (#DB2777).
- **Surface Alpha:** Component backgrounds are never solid. They range from `rgba(255, 255, 255, 0.1)` for secondary depth to `0.2` for primary interaction areas.
- **Accents:** Semantic colors for weather conditions (e.g., Warning Yellow, Rain Blue) should be applied with high saturation but low opacity fills to maintain the glass effect.
- **Text:** Strictly white (#FFFFFF) or high-tint silver (#E2E8F0) to ensure WCAG compliance against the vibrant background.
## Typography
The design system utilizes **Inter** for its neutral, geometric clarity which balances the organic nature of the blurred backgrounds.
- **Hierarchy:** Large display sizes are used for temperature readings to create a clear focal point.
- **Legibility:** On frosted glass, font weight is increased by one tier (e.g., using Medium instead of Regular) to counteract the visual noise of the background blur.
- **Treatment:** Subtle text-shadows (`0px 2px 4px rgba(0,0,0,0.15)`) may be applied to small labels to ensure they "pop" against lighter areas of the background gradient.
## Layout & Spacing
The layout follows a fluid, contextual model. Elements are grouped into "Glass Containers" that float within the safe areas of the viewport.
- **Rhythm:** An 8px base grid governs all dimensions.
- **Grouping:** Related weather metrics (humidity, wind, UV index) are housed in a CSS grid or flex layout with 16px gaps.
- **Negative Space:** Generous outer margins (24px+) are maintained to ensure the vibrant background is visible, reinforcing the "floating" nature of the interface.
## Elevation & Depth
Depth in this design system is not achieved through darkness, but through the physics of light and refraction.
- **The Glass Stack:**
- **Level 1 (Base):** Dynamic background gradient with a slight grain texture.
- **Level 2 (Standard Card):** `backdrop-filter: blur(20px)`, `background: rgba(255, 255, 255, 0.1)`.
- **Level 3 (Elevated/Modals):** `backdrop-filter: blur(40px)`, `background: rgba(255, 255, 255, 0.2)`.
- **Edge Definition:** Every glass surface must have a 1px solid border at `rgba(255, 255, 255, 0.2)`. A secondary inner "shine" border (top and left only) can be used to simulate a light source.
- **Shadows:** Use extremely soft, spread-out shadows (`box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.1)`) to separate the glass layers from the background without making the UI feel "heavy."
## Shapes
The shape language is organic and approachable. This design system uses "Rounded" (Level 2) settings to complement the fluid nature of the background.
- **Cards:** Use `1rem` (16px) for standard weather cards.
- **Action Elements:** Buttons and search bars use `rounded-xl` (1.5rem / 24px) to create a soft, tactile feel.
- **Icons:** Weather iconography should be line-based with rounded caps (2px stroke width) to match the border weights of the containers.
## Components
### Glass Containers
Standard cards use a 20px blur for general metrics, while elevated cards (modals or focal points) use 40px blur and higher opacity to sit physically higher in the stack. All glass elements must feature a 1px white border to simulate light refraction on the edges.
### Action Elements
Buttons use the `rounded-xl` setting to maintain a soft, organic feel. Primary buttons are solid white for maximum contrast, while ghost buttons utilize backdrop filters to remain integrated with the atmospheric background.
### Inputs & Interaction
Interactive list items and text inputs use subtle hover states and light blurs rather than solid color changes, preserving the "crystalline" transparency of the UI.
### Typography Application
Large weather displays utilize subtle text shadows to maintain legibility against the unpredictable colors of the background gradient. Metric labels should remain secondary in hierarchy using the silver-tinted `on-surface-variant` color.
+11
View File
@@ -0,0 +1,11 @@
# Atmospheric Glass
A glassmorphism-driven weather application design system. Frosted crystalline panels float over vibrant gradient backgrounds, transforming complex meteorological data into a serene, premium visual experience. Uses a monochromatic white palette with varying alpha channels for luminosity and depth.
## Files
| File | Description |
|------|-------------|
| `DESIGN.md` | The complete design system specification in DESIGN.md format, including both structured YAML design tokens (frontmatter) and human-readable style guidance (markdown body). |
| `tailwind.config.js` | A Tailwind CSS v3 theme configuration derived from the design tokens in the DESIGN.md frontmatter. Covers colors, typography, border-radius, and spacing. Component tokens are intentionally excluded — Tailwind's utility-first approach handles component styling through composition of these primitives. |
| `design_tokens.json` | A [Design Tokens Community Group](https://www.designtokens.org/) JSON file containing all design tokens from the DESIGN.md frontmatter, including component-level tokens. This format is interoperable with tools like Figma, Style Dictionary, and other token pipelines. |
@@ -0,0 +1,909 @@
{
"name": {
"$type": "string",
"$value": "Atmospheric Glass"
},
"colors": {
"surface": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.043,
0.075,
0.149
],
"hex": "#0b1326"
}
},
"surface-dim": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.043,
0.075,
0.149
],
"hex": "#0b1326"
}
},
"surface-bright": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.192,
0.224,
0.302
],
"hex": "#31394d"
}
},
"surface-container-lowest": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.024,
0.055,
0.125
],
"hex": "#060e20"
}
},
"surface-container-low": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.075,
0.106,
0.18
],
"hex": "#131b2e"
}
},
"surface-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.09,
0.122,
0.2
],
"hex": "#171f33"
}
},
"surface-container-high": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.133,
0.165,
0.239
],
"hex": "#222a3d"
}
},
"surface-container-highest": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.176,
0.204,
0.286
],
"hex": "#2d3449"
}
},
"on-surface": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.855,
0.886,
0.992
],
"hex": "#dae2fd"
}
},
"on-surface-variant": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.769,
0.78,
0.784
],
"hex": "#c4c7c8"
}
},
"inverse-surface": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.855,
0.886,
0.992
],
"hex": "#dae2fd"
}
},
"inverse-on-surface": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.157,
0.188,
0.267
],
"hex": "#283044"
}
},
"outline": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.557,
0.569,
0.573
],
"hex": "#8e9192"
}
},
"outline-variant": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.267,
0.278,
0.282
],
"hex": "#444748"
}
},
"surface-tint": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.776,
0.776,
0.78
],
"hex": "#c6c6c7"
}
},
"primary": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
1.0,
1.0
],
"hex": "#ffffff"
}
},
"on-primary": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.184,
0.192,
0.192
],
"hex": "#2f3131"
}
},
"primary-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.886,
0.886,
0.886
],
"hex": "#e2e2e2"
}
},
"on-primary-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.388,
0.396,
0.396
],
"hex": "#636565"
}
},
"inverse-primary": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.365,
0.373,
0.373
],
"hex": "#5d5f5f"
}
},
"secondary": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.678,
0.788,
0.922
],
"hex": "#adc9eb"
}
},
"on-secondary": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.078,
0.196,
0.306
],
"hex": "#14324e"
}
},
"secondary-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.188,
0.294,
0.408
],
"hex": "#304b68"
}
},
"on-secondary-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.624,
0.733,
0.867
],
"hex": "#9fbbdd"
}
},
"tertiary": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
1.0,
1.0
],
"hex": "#ffffff"
}
},
"on-tertiary": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.384,
0.0,
0.251
],
"hex": "#620040"
}
},
"tertiary-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
0.847,
0.906
],
"hex": "#ffd8e7"
}
},
"on-tertiary-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.671,
0.216,
0.475
],
"hex": "#ab3779"
}
},
"error": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
0.706,
0.671
],
"hex": "#ffb4ab"
}
},
"on-error": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.412,
0.0,
0.02
],
"hex": "#690005"
}
},
"error-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.576,
0.0,
0.039
],
"hex": "#93000a"
}
},
"on-error-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
0.855,
0.839
],
"hex": "#ffdad6"
}
},
"primary-fixed": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.886,
0.886,
0.886
],
"hex": "#e2e2e2"
}
},
"primary-fixed-dim": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.776,
0.776,
0.78
],
"hex": "#c6c6c7"
}
},
"on-primary-fixed": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.102,
0.11,
0.11
],
"hex": "#1a1c1c"
}
},
"on-primary-fixed-variant": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.271,
0.278,
0.278
],
"hex": "#454747"
}
},
"secondary-fixed": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.816,
0.894,
1.0
],
"hex": "#d0e4ff"
}
},
"secondary-fixed-dim": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.678,
0.788,
0.922
],
"hex": "#adc9eb"
}
},
"on-secondary-fixed": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.0,
0.114,
0.208
],
"hex": "#001d35"
}
},
"on-secondary-fixed-variant": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.176,
0.286,
0.396
],
"hex": "#2d4965"
}
},
"tertiary-fixed": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
0.847,
0.906
],
"hex": "#ffd8e7"
}
},
"tertiary-fixed-dim": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
0.686,
0.827
],
"hex": "#ffafd3"
}
},
"on-tertiary-fixed": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.239,
0.0,
0.149
],
"hex": "#3d0026"
}
},
"on-tertiary-fixed-variant": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.522,
0.078,
0.353
],
"hex": "#85145a"
}
},
"background": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.043,
0.075,
0.149
],
"hex": "#0b1326"
}
},
"on-background": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.855,
0.886,
0.992
],
"hex": "#dae2fd"
}
},
"surface-variant": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.176,
0.204,
0.286
],
"hex": "#2d3449"
}
}
},
"typography": {
"display-lg": {
"$type": "typography",
"$value": {
"fontFamily": "Inter",
"fontSize": {
"value": 84,
"unit": "px"
},
"fontWeight": 700,
"lineHeight": {
"value": 90,
"unit": "px"
},
"letterSpacing": {
"value": -0.04,
"unit": "em"
}
}
},
"headline-lg": {
"$type": "typography",
"$value": {
"fontFamily": "Inter",
"fontSize": {
"value": 32,
"unit": "px"
},
"fontWeight": 600,
"lineHeight": {
"value": 40,
"unit": "px"
},
"letterSpacing": {
"value": -0.02,
"unit": "em"
}
}
},
"headline-md": {
"$type": "typography",
"$value": {
"fontFamily": "Inter",
"fontSize": {
"value": 24,
"unit": "px"
},
"fontWeight": 500,
"lineHeight": {
"value": 32,
"unit": "px"
}
}
},
"body-lg": {
"$type": "typography",
"$value": {
"fontFamily": "Inter",
"fontSize": {
"value": 18,
"unit": "px"
},
"fontWeight": 400,
"lineHeight": {
"value": 28,
"unit": "px"
}
}
},
"body-md": {
"$type": "typography",
"$value": {
"fontFamily": "Inter",
"fontSize": {
"value": 16,
"unit": "px"
},
"fontWeight": 400,
"lineHeight": {
"value": 24,
"unit": "px"
}
}
},
"label-sm": {
"$type": "typography",
"$value": {
"fontFamily": "Inter",
"fontSize": {
"value": 12,
"unit": "px"
},
"fontWeight": 600,
"lineHeight": {
"value": 16,
"unit": "px"
},
"letterSpacing": {
"value": 0.05,
"unit": "em"
}
}
}
},
"rounded": {
"sm": {
"$type": "dimension",
"$value": {
"value": 0.25,
"unit": "rem"
}
},
"DEFAULT": {
"$type": "dimension",
"$value": {
"value": 0.5,
"unit": "rem"
}
},
"md": {
"$type": "dimension",
"$value": {
"value": 0.75,
"unit": "rem"
}
},
"lg": {
"$type": "dimension",
"$value": {
"value": 1,
"unit": "rem"
}
},
"xl": {
"$type": "dimension",
"$value": {
"value": 1.5,
"unit": "rem"
}
},
"full": {
"$type": "dimension",
"$value": {
"value": 9999,
"unit": "px"
}
}
},
"spacing": {
"unit": {
"$type": "dimension",
"$value": {
"value": 8,
"unit": "px"
}
},
"container-padding": {
"$type": "dimension",
"$value": {
"value": 24,
"unit": "px"
}
},
"card-gap": {
"$type": "dimension",
"$value": {
"value": 16,
"unit": "px"
}
},
"section-margin": {
"$type": "dimension",
"$value": {
"value": 40,
"unit": "px"
}
},
"glass-padding": {
"$type": "dimension",
"$value": {
"value": 20,
"unit": "px"
}
}
},
"components": {
"glass-card-standard": {
"backgroundColor": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
1.0,
1.0
],
"alpha": 0.1
}
},
"textColor": "{colors.primary}",
"rounded": "{rounded.lg}",
"padding": "{spacing.glass-padding}"
},
"glass-card-elevated": {
"backgroundColor": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
1.0,
1.0
],
"alpha": 0.2
}
},
"textColor": "{colors.primary}",
"rounded": "{rounded.xl}",
"padding": "{spacing.glass-padding}"
},
"button-primary": {
"backgroundColor": "{colors.primary}",
"textColor": "{colors.on-primary}",
"typography": "{typography.label-sm}",
"rounded": "{rounded.xl}",
"height": {
"$type": "dimension",
"$value": {
"value": 48,
"unit": "px"
}
},
"padding": {
"$type": "dimension",
"$value": "0 24px"
}
},
"button-primary-hover": {
"backgroundColor": "{colors.primary-fixed-dim}"
},
"button-ghost": {
"backgroundColor": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
1.0,
1.0
],
"alpha": 0.05
}
},
"textColor": "{colors.primary}",
"typography": "{typography.label-sm}",
"rounded": "{rounded.xl}"
},
"input-field": {
"backgroundColor": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
1.0,
1.0
],
"alpha": 0.1
}
},
"textColor": "{colors.primary}",
"typography": "{typography.body-md}",
"rounded": "{rounded.xl}",
"padding": {
"$type": "dimension",
"$value": {
"value": 20,
"unit": "px"
}
},
"height": {
"$type": "dimension",
"$value": {
"value": 48,
"unit": "px"
}
}
},
"weather-display-large": {
"textColor": "{colors.primary}",
"typography": "{typography.display-lg}"
},
"metric-label": {
"textColor": "{colors.on-surface-variant}",
"typography": "{typography.label-sm}",
"textTransform": {
"$type": "string",
"$value": "uppercase"
}
},
"list-item-interactive": {
"backgroundColor": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0,
0,
0
],
"alpha": 0
}
},
"rounded": "{rounded.md}",
"padding": {
"$type": "dimension",
"$value": {
"value": 12,
"unit": "px"
}
}
},
"list-item-interactive-hover": {
"backgroundColor": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
1.0,
1.0
],
"alpha": 0.1
}
}
}
}
}
@@ -0,0 +1,141 @@
// Copyright 2026 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
/** @type {import('tailwindcss').Config} */
module.exports = {
darkMode: "class",
theme: {
extend: {
colors: {
"surface": "#0b1326",
"surface-dim": "#0b1326",
"surface-bright": "#31394d",
"surface-container-lowest": "#060e20",
"surface-container-low": "#131b2e",
"surface-container": "#171f33",
"surface-container-high": "#222a3d",
"surface-container-highest": "#2d3449",
"on-surface": "#dae2fd",
"on-surface-variant": "#c4c7c8",
"inverse-surface": "#dae2fd",
"inverse-on-surface": "#283044",
"outline": "#8e9192",
"outline-variant": "#444748",
"surface-tint": "#c6c6c7",
"primary": "#ffffff",
"on-primary": "#2f3131",
"primary-container": "#e2e2e2",
"on-primary-container": "#636565",
"inverse-primary": "#5d5f5f",
"secondary": "#adc9eb",
"on-secondary": "#14324e",
"secondary-container": "#304b68",
"on-secondary-container": "#9fbbdd",
"tertiary": "#ffffff",
"on-tertiary": "#620040",
"tertiary-container": "#ffd8e7",
"on-tertiary-container": "#ab3779",
"error": "#ffb4ab",
"on-error": "#690005",
"error-container": "#93000a",
"on-error-container": "#ffdad6",
"primary-fixed": "#e2e2e2",
"primary-fixed-dim": "#c6c6c7",
"on-primary-fixed": "#1a1c1c",
"on-primary-fixed-variant": "#454747",
"secondary-fixed": "#d0e4ff",
"secondary-fixed-dim": "#adc9eb",
"on-secondary-fixed": "#001d35",
"on-secondary-fixed-variant": "#2d4965",
"tertiary-fixed": "#ffd8e7",
"tertiary-fixed-dim": "#ffafd3",
"on-tertiary-fixed": "#3d0026",
"on-tertiary-fixed-variant": "#85145a",
"background": "#0b1326",
"on-background": "#dae2fd",
"surface-variant": "#2d3449",
},
fontFamily: {
"display-lg": ["Inter"],
"headline-lg": ["Inter"],
"headline-md": ["Inter"],
"body-lg": ["Inter"],
"body-md": ["Inter"],
"label-sm": ["Inter"],
},
fontSize: {
"display-lg": [
"84px",
{
lineHeight: "90px",
letterSpacing: "-0.04em",
fontWeight: "700",
},
],
"headline-lg": [
"32px",
{
lineHeight: "40px",
letterSpacing: "-0.02em",
fontWeight: "600",
},
],
"headline-md": [
"24px",
{
lineHeight: "32px",
fontWeight: "500",
},
],
"body-lg": [
"18px",
{
lineHeight: "28px",
fontWeight: "400",
},
],
"body-md": [
"16px",
{
lineHeight: "24px",
fontWeight: "400",
},
],
"label-sm": [
"12px",
{
lineHeight: "16px",
letterSpacing: "0.05em",
fontWeight: "600",
},
],
},
borderRadius: {
"sm": "0.25rem",
"DEFAULT": "0.5rem",
"md": "0.75rem",
"lg": "1rem",
"xl": "1.5rem",
"full": "9999px",
},
spacing: {
"unit": "8px",
"container-padding": "24px",
"card-gap": "16px",
"section-margin": "40px",
"glass-padding": "20px",
},
},
},
};
+219
View File
@@ -0,0 +1,219 @@
---
name: Paws & Paths
colors:
surface: "#f9f9ff"
surface-dim: "#d3daea"
surface-bright: "#f9f9ff"
surface-container-lowest: "#ffffff"
surface-container-low: "#f0f3ff"
surface-container: "#e7eefe"
surface-container-high: "#e2e8f8"
surface-container-highest: "#dce2f3"
on-surface: "#151c27"
on-surface-variant: "#534434"
inverse-surface: "#2a313d"
inverse-on-surface: "#ebf1ff"
outline: "#867461"
outline-variant: "#d8c3ad"
surface-tint: "#855300"
primary: "#855300"
on-primary: "#ffffff"
primary-container: "#f59e0b"
on-primary-container: "#613b00"
inverse-primary: "#ffb95f"
secondary: "#0058be"
on-secondary: "#ffffff"
secondary-container: "#2170e4"
on-secondary-container: "#fefcff"
tertiary: "#00658b"
on-tertiary: "#ffffff"
tertiary-container: "#1abdff"
on-tertiary-container: "#004966"
error: "#ba1a1a"
on-error: "#ffffff"
error-container: "#ffdad6"
on-error-container: "#93000a"
primary-fixed: "#ffddb8"
primary-fixed-dim: "#ffb95f"
on-primary-fixed: "#2a1700"
on-primary-fixed-variant: "#653e00"
secondary-fixed: "#d8e2ff"
secondary-fixed-dim: "#adc6ff"
on-secondary-fixed: "#001a42"
on-secondary-fixed-variant: "#004395"
tertiary-fixed: "#c5e7ff"
tertiary-fixed-dim: "#7fd0ff"
on-tertiary-fixed: "#001e2d"
on-tertiary-fixed-variant: "#004c6a"
background: "#f9f9ff"
on-background: "#151c27"
surface-variant: "#dce2f3"
typography:
display:
fontFamily: Plus Jakarta Sans
fontSize: 44px
fontWeight: "800"
lineHeight: 52px
letterSpacing: -0.02em
headline-lg:
fontFamily: Plus Jakarta Sans
fontSize: 32px
fontWeight: "700"
lineHeight: 40px
letterSpacing: -0.01em
headline-md:
fontFamily: Plus Jakarta Sans
fontSize: 24px
fontWeight: "700"
lineHeight: 32px
title-lg:
fontFamily: Plus Jakarta Sans
fontSize: 20px
fontWeight: "600"
lineHeight: 28px
body-lg:
fontFamily: Plus Jakarta Sans
fontSize: 18px
fontWeight: "400"
lineHeight: 28px
body-md:
fontFamily: Plus Jakarta Sans
fontSize: 16px
fontWeight: "400"
lineHeight: 24px
label-md:
fontFamily: Plus Jakarta Sans
fontSize: 14px
fontWeight: "600"
lineHeight: 20px
letterSpacing: 0.01em
label-sm:
fontFamily: Plus Jakarta Sans
fontSize: 12px
fontWeight: "500"
lineHeight: 16px
rounded:
sm: 0.25rem
DEFAULT: 0.5rem
md: 0.75rem
lg: 1rem
xl: 1.5rem
full: 9999px
spacing:
base: 8px
xs: 4px
sm: 12px
md: 24px
lg: 40px
xl: 64px
gutter: 16px
margin: 24px
components:
button-primary:
backgroundColor: "{colors.primary}"
textColor: "{colors.on-primary}"
typography: "{typography.label-md}"
rounded: "{rounded.lg}"
padding: "{spacing.md}"
button-primary-hover:
backgroundColor: "{colors.primary-container}"
textColor: "{colors.on-primary-container}"
button-secondary:
backgroundColor: "{colors.secondary}"
textColor: "{colors.on-secondary}"
typography: "{typography.label-md}"
rounded: "{rounded.lg}"
padding: "{spacing.md}"
button-secondary-hover:
backgroundColor: "{colors.secondary-container}"
textColor: "{colors.on-secondary-container}"
card-profile:
backgroundColor: "{colors.surface-container-lowest}"
rounded: "{rounded.xl}"
padding: "{spacing.md}"
card-walk-stat:
backgroundColor: "{colors.secondary-container}"
textColor: "{colors.on-secondary-container}"
rounded: "{rounded.md}"
padding: "{spacing.sm}"
input-field:
backgroundColor: "{colors.surface-container-low}"
textColor: "{colors.on-surface}"
typography: "{typography.body-md}"
rounded: "{rounded.DEFAULT}"
padding: "{spacing.sm}"
list-item-walker:
backgroundColor: transparent
padding: "{spacing.sm}"
rounded: "{rounded.md}"
list-item-walker-hover:
backgroundColor: "{colors.surface-container-high}"
badge-status:
backgroundColor: "{colors.tertiary-container}"
textColor: "{colors.on-tertiary-container}"
typography: "{typography.label-sm}"
rounded: "{rounded.full}"
padding: "{spacing.xs}"
---
## Brand & Style
The design system is built to evoke the joyful energy of a walk in the park balanced with the reliability of a premium professional service. The brand personality is optimistic, trustworthy, and active.
The chosen style is **Modern Corporate** with a friendly, human-centric twist. It utilizes clean layouts and significant whitespace to reduce cognitive load for busy pet owners. The interface feels light and airy, avoiding heavy borders in favor of soft shadows and tonal shifts to create a welcoming, "best-in-class" digital environment.
## Colors
The palette centers on "Golden Retriever" orange to drive action and signal energy. This is balanced by "Sky Walk" blue, which provides a calming counterpoint for administrative tasks and scheduling.
- **Primary:** Use for main actions, active states, and highlights.
- **Secondary:** Use for secondary information, trust indicators, and navigation accents.
- **Neutral:** A range of soft grays used for backgrounds and borders to keep the UI feeling "premium."
- **Deep Charcoal:** Used for all primary text to ensure high legibility and a grounded, professional feel.
## Typography
This design system utilizes **Plus Jakarta Sans** for its friendly, rounded terminals and exceptional legibility. It maintains a contemporary look while feeling more approachable than standard geometric sans-serifs.
- **Headlines:** Bold weights are used to create a clear hierarchy and guide the eye quickly to key information.
- **Body:** Generous line heights are applied to the body text to maintain the "premium and clean" feel.
- **Labels:** Used for buttons and small metadata, utilizing a medium or semi-bold weight to remain distinct even at small scales.
## Layout & Spacing
The layout follows a **Fixed Grid** model for mobile-first consistency, utilizing a 4-column system for handheld devices.
- **Whitespace:** A "generous" philosophy is applied. Never crowd elements; use `lg` and `xl` spacing for section vertical separation to maintain a high-end aesthetic.
- **Rhythm:** Spacing is strictly based on an 8px scale.
- **Containers:** Content should be centered with a maximum width on larger screens, ensuring the "Paths" (user journeys) feel focused and intentional.
## Elevation & Depth
This design system uses **Ambient Shadows** and **Tonal Layers** to define the interface's verticality.
- **Surfaces:** Main backgrounds use the lightest neutral tint. Interactive cards sit one level above on a pure white surface.
- **Shadows:** Shadows are highly diffused and soft (Blur: 20px-40px, Opacity: 4-8%) with a subtle hint of the primary orange or secondary blue mixed into the shadow color to prevent a "dirty" gray look.
- **Interactions:** Elements should subtly lift on hover or tap, increasing shadow spread to provide tactile feedback.
## Shapes
The shape language is defined by **Rounded** corners, mirroring the soft features of a pet and making the app feel safe and friendly.
- **Buttons:** Main CTA buttons use a `12px` (rounded-lg) radius to feel substantial and clickable.
- **Cards:** Dog profiles and walker cards use a `1.5rem` (rounded-xl) radius to create a soft, containerized look.
- **Inputs:** Form fields use a `0.5rem` radius to maintain a professional yet modern appearance.
- **Icons:** Icons should feature rounded caps and corners to harmonize with the UI's structural elements.
## Components
### Buttons & Inputs
Buttons use `rounded-lg` (12px) to feel substantial and friendly, while form fields use a smaller `DEFAULT` radius to maintain structural alignment. All interactive states should utilize a subtle 150ms ease-in-out transition for background color shifts.
### Cards & Elevation
The `card-profile` is the hero container, utilizing `rounded-xl` and a tinted ambient shadow to create a "lifted" appearance against the `surface` background. Use `card-walk-stat` for high-contrast data visualization within the blue secondary palette.
### Lists & Navigation
List items should maintain a wide touch target and use `surface-container-high` for hover states to provide clear feedback without visual clutter. Use the `badge-status` for pet availability or walk progress indicators, ensuring the typography remains legible at the smaller scale.
+11
View File
@@ -0,0 +1,11 @@
# Paws & Paths
A warm, friendly design system for a dog-walking and pet care platform. Built around "Golden Retriever" orange primary and "Sky Walk" blue secondary colors, with Plus Jakarta Sans typography for an approachable yet premium feel.
## Files
| File | Description |
|------|-------------|
| `DESIGN.md` | The complete design system specification in DESIGN.md format, including both structured YAML design tokens (frontmatter) and human-readable style guidance (markdown body). |
| `tailwind.config.js` | A Tailwind CSS v3 theme configuration derived from the design tokens in the DESIGN.md frontmatter. Covers colors, typography, border-radius, and spacing. Component tokens are intentionally excluded — Tailwind's utility-first approach handles component styling through composition of these primitives. |
| `design_tokens.json` | A [Design Tokens Community Group](https://www.designtokens.org/) JSON file containing all design tokens from the DESIGN.md frontmatter, including component-level tokens. This format is interoperable with tools like Figma, Style Dictionary, and other token pipelines. |
+876
View File
@@ -0,0 +1,876 @@
{
"name": {
"$type": "string",
"$value": "Paws & Paths"
},
"colors": {
"surface": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.976,
0.976,
1.0
],
"hex": "#f9f9ff"
}
},
"surface-dim": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.827,
0.855,
0.918
],
"hex": "#d3daea"
}
},
"surface-bright": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.976,
0.976,
1.0
],
"hex": "#f9f9ff"
}
},
"surface-container-lowest": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
1.0,
1.0
],
"hex": "#ffffff"
}
},
"surface-container-low": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.941,
0.953,
1.0
],
"hex": "#f0f3ff"
}
},
"surface-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.906,
0.933,
0.996
],
"hex": "#e7eefe"
}
},
"surface-container-high": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.886,
0.91,
0.973
],
"hex": "#e2e8f8"
}
},
"surface-container-highest": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.863,
0.886,
0.953
],
"hex": "#dce2f3"
}
},
"on-surface": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.082,
0.11,
0.153
],
"hex": "#151c27"
}
},
"on-surface-variant": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.325,
0.267,
0.204
],
"hex": "#534434"
}
},
"inverse-surface": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.165,
0.192,
0.239
],
"hex": "#2a313d"
}
},
"inverse-on-surface": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.922,
0.945,
1.0
],
"hex": "#ebf1ff"
}
},
"outline": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.525,
0.455,
0.38
],
"hex": "#867461"
}
},
"outline-variant": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.847,
0.765,
0.678
],
"hex": "#d8c3ad"
}
},
"surface-tint": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.522,
0.325,
0.0
],
"hex": "#855300"
}
},
"primary": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.522,
0.325,
0.0
],
"hex": "#855300"
}
},
"on-primary": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
1.0,
1.0
],
"hex": "#ffffff"
}
},
"primary-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.961,
0.62,
0.043
],
"hex": "#f59e0b"
}
},
"on-primary-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.38,
0.231,
0.0
],
"hex": "#613b00"
}
},
"inverse-primary": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
0.725,
0.373
],
"hex": "#ffb95f"
}
},
"secondary": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.0,
0.345,
0.745
],
"hex": "#0058be"
}
},
"on-secondary": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
1.0,
1.0
],
"hex": "#ffffff"
}
},
"secondary-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.129,
0.439,
0.894
],
"hex": "#2170e4"
}
},
"on-secondary-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.996,
0.988,
1.0
],
"hex": "#fefcff"
}
},
"tertiary": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.0,
0.396,
0.545
],
"hex": "#00658b"
}
},
"on-tertiary": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
1.0,
1.0
],
"hex": "#ffffff"
}
},
"tertiary-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.102,
0.741,
1.0
],
"hex": "#1abdff"
}
},
"on-tertiary-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.0,
0.286,
0.4
],
"hex": "#004966"
}
},
"error": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.729,
0.102,
0.102
],
"hex": "#ba1a1a"
}
},
"on-error": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
1.0,
1.0
],
"hex": "#ffffff"
}
},
"error-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
0.855,
0.839
],
"hex": "#ffdad6"
}
},
"on-error-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.576,
0.0,
0.039
],
"hex": "#93000a"
}
},
"primary-fixed": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
0.867,
0.722
],
"hex": "#ffddb8"
}
},
"primary-fixed-dim": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
0.725,
0.373
],
"hex": "#ffb95f"
}
},
"on-primary-fixed": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.165,
0.09,
0.0
],
"hex": "#2a1700"
}
},
"on-primary-fixed-variant": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.396,
0.243,
0.0
],
"hex": "#653e00"
}
},
"secondary-fixed": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.847,
0.886,
1.0
],
"hex": "#d8e2ff"
}
},
"secondary-fixed-dim": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.678,
0.776,
1.0
],
"hex": "#adc6ff"
}
},
"on-secondary-fixed": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.0,
0.102,
0.259
],
"hex": "#001a42"
}
},
"on-secondary-fixed-variant": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.0,
0.263,
0.584
],
"hex": "#004395"
}
},
"tertiary-fixed": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.773,
0.906,
1.0
],
"hex": "#c5e7ff"
}
},
"tertiary-fixed-dim": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.498,
0.816,
1.0
],
"hex": "#7fd0ff"
}
},
"on-tertiary-fixed": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.0,
0.118,
0.176
],
"hex": "#001e2d"
}
},
"on-tertiary-fixed-variant": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.0,
0.298,
0.416
],
"hex": "#004c6a"
}
},
"background": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.976,
0.976,
1.0
],
"hex": "#f9f9ff"
}
},
"on-background": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.082,
0.11,
0.153
],
"hex": "#151c27"
}
},
"surface-variant": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.863,
0.886,
0.953
],
"hex": "#dce2f3"
}
}
},
"typography": {
"display": {
"$type": "typography",
"$value": {
"fontFamily": "Plus Jakarta Sans",
"fontSize": {
"value": 44,
"unit": "px"
},
"fontWeight": 800,
"lineHeight": {
"value": 52,
"unit": "px"
},
"letterSpacing": {
"value": -0.02,
"unit": "em"
}
}
},
"headline-lg": {
"$type": "typography",
"$value": {
"fontFamily": "Plus Jakarta Sans",
"fontSize": {
"value": 32,
"unit": "px"
},
"fontWeight": 700,
"lineHeight": {
"value": 40,
"unit": "px"
},
"letterSpacing": {
"value": -0.01,
"unit": "em"
}
}
},
"headline-md": {
"$type": "typography",
"$value": {
"fontFamily": "Plus Jakarta Sans",
"fontSize": {
"value": 24,
"unit": "px"
},
"fontWeight": 700,
"lineHeight": {
"value": 32,
"unit": "px"
}
}
},
"title-lg": {
"$type": "typography",
"$value": {
"fontFamily": "Plus Jakarta Sans",
"fontSize": {
"value": 20,
"unit": "px"
},
"fontWeight": 600,
"lineHeight": {
"value": 28,
"unit": "px"
}
}
},
"body-lg": {
"$type": "typography",
"$value": {
"fontFamily": "Plus Jakarta Sans",
"fontSize": {
"value": 18,
"unit": "px"
},
"fontWeight": 400,
"lineHeight": {
"value": 28,
"unit": "px"
}
}
},
"body-md": {
"$type": "typography",
"$value": {
"fontFamily": "Plus Jakarta Sans",
"fontSize": {
"value": 16,
"unit": "px"
},
"fontWeight": 400,
"lineHeight": {
"value": 24,
"unit": "px"
}
}
},
"label-md": {
"$type": "typography",
"$value": {
"fontFamily": "Plus Jakarta Sans",
"fontSize": {
"value": 14,
"unit": "px"
},
"fontWeight": 600,
"lineHeight": {
"value": 20,
"unit": "px"
},
"letterSpacing": {
"value": 0.01,
"unit": "em"
}
}
},
"label-sm": {
"$type": "typography",
"$value": {
"fontFamily": "Plus Jakarta Sans",
"fontSize": {
"value": 12,
"unit": "px"
},
"fontWeight": 500,
"lineHeight": {
"value": 16,
"unit": "px"
}
}
}
},
"rounded": {
"sm": {
"$type": "dimension",
"$value": {
"value": 0.25,
"unit": "rem"
}
},
"DEFAULT": {
"$type": "dimension",
"$value": {
"value": 0.5,
"unit": "rem"
}
},
"md": {
"$type": "dimension",
"$value": {
"value": 0.75,
"unit": "rem"
}
},
"lg": {
"$type": "dimension",
"$value": {
"value": 1,
"unit": "rem"
}
},
"xl": {
"$type": "dimension",
"$value": {
"value": 1.5,
"unit": "rem"
}
},
"full": {
"$type": "dimension",
"$value": {
"value": 9999,
"unit": "px"
}
}
},
"spacing": {
"base": {
"$type": "dimension",
"$value": {
"value": 8,
"unit": "px"
}
},
"xs": {
"$type": "dimension",
"$value": {
"value": 4,
"unit": "px"
}
},
"sm": {
"$type": "dimension",
"$value": {
"value": 12,
"unit": "px"
}
},
"md": {
"$type": "dimension",
"$value": {
"value": 24,
"unit": "px"
}
},
"lg": {
"$type": "dimension",
"$value": {
"value": 40,
"unit": "px"
}
},
"xl": {
"$type": "dimension",
"$value": {
"value": 64,
"unit": "px"
}
},
"gutter": {
"$type": "dimension",
"$value": {
"value": 16,
"unit": "px"
}
},
"margin": {
"$type": "dimension",
"$value": {
"value": 24,
"unit": "px"
}
}
},
"components": {
"button-primary": {
"backgroundColor": "{colors.primary}",
"textColor": "{colors.on-primary}",
"typography": "{typography.label-md}",
"rounded": "{rounded.lg}",
"padding": "{spacing.md}"
},
"button-primary-hover": {
"backgroundColor": "{colors.primary-container}",
"textColor": "{colors.on-primary-container}"
},
"button-secondary": {
"backgroundColor": "{colors.secondary}",
"textColor": "{colors.on-secondary}",
"typography": "{typography.label-md}",
"rounded": "{rounded.lg}",
"padding": "{spacing.md}"
},
"button-secondary-hover": {
"backgroundColor": "{colors.secondary-container}",
"textColor": "{colors.on-secondary-container}"
},
"card-profile": {
"backgroundColor": "{colors.surface-container-lowest}",
"rounded": "{rounded.xl}",
"padding": "{spacing.md}"
},
"card-walk-stat": {
"backgroundColor": "{colors.secondary-container}",
"textColor": "{colors.on-secondary-container}",
"rounded": "{rounded.md}",
"padding": "{spacing.sm}"
},
"input-field": {
"backgroundColor": "{colors.surface-container-low}",
"textColor": "{colors.on-surface}",
"typography": "{typography.body-md}",
"rounded": "{rounded.DEFAULT}",
"padding": "{spacing.sm}"
},
"list-item-walker": {
"backgroundColor": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0,
0,
0
],
"alpha": 0
}
},
"padding": "{spacing.sm}",
"rounded": "{rounded.md}"
},
"list-item-walker-hover": {
"backgroundColor": "{colors.surface-container-high}"
},
"badge-status": {
"backgroundColor": "{colors.tertiary-container}",
"textColor": "{colors.on-tertiary-container}",
"typography": "{typography.label-sm}",
"rounded": "{rounded.full}",
"padding": "{spacing.xs}"
}
}
}
+160
View File
@@ -0,0 +1,160 @@
// Copyright 2026 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
/** @type {import('tailwindcss').Config} */
module.exports = {
darkMode: "class",
theme: {
extend: {
colors: {
"surface": "#f9f9ff",
"surface-dim": "#d3daea",
"surface-bright": "#f9f9ff",
"surface-container-lowest": "#ffffff",
"surface-container-low": "#f0f3ff",
"surface-container": "#e7eefe",
"surface-container-high": "#e2e8f8",
"surface-container-highest": "#dce2f3",
"on-surface": "#151c27",
"on-surface-variant": "#534434",
"inverse-surface": "#2a313d",
"inverse-on-surface": "#ebf1ff",
"outline": "#867461",
"outline-variant": "#d8c3ad",
"surface-tint": "#855300",
"primary": "#855300",
"on-primary": "#ffffff",
"primary-container": "#f59e0b",
"on-primary-container": "#613b00",
"inverse-primary": "#ffb95f",
"secondary": "#0058be",
"on-secondary": "#ffffff",
"secondary-container": "#2170e4",
"on-secondary-container": "#fefcff",
"tertiary": "#00658b",
"on-tertiary": "#ffffff",
"tertiary-container": "#1abdff",
"on-tertiary-container": "#004966",
"error": "#ba1a1a",
"on-error": "#ffffff",
"error-container": "#ffdad6",
"on-error-container": "#93000a",
"primary-fixed": "#ffddb8",
"primary-fixed-dim": "#ffb95f",
"on-primary-fixed": "#2a1700",
"on-primary-fixed-variant": "#653e00",
"secondary-fixed": "#d8e2ff",
"secondary-fixed-dim": "#adc6ff",
"on-secondary-fixed": "#001a42",
"on-secondary-fixed-variant": "#004395",
"tertiary-fixed": "#c5e7ff",
"tertiary-fixed-dim": "#7fd0ff",
"on-tertiary-fixed": "#001e2d",
"on-tertiary-fixed-variant": "#004c6a",
"background": "#f9f9ff",
"on-background": "#151c27",
"surface-variant": "#dce2f3",
},
fontFamily: {
"display": ["Plus Jakarta Sans"],
"headline-lg": ["Plus Jakarta Sans"],
"headline-md": ["Plus Jakarta Sans"],
"title-lg": ["Plus Jakarta Sans"],
"body-lg": ["Plus Jakarta Sans"],
"body-md": ["Plus Jakarta Sans"],
"label-md": ["Plus Jakarta Sans"],
"label-sm": ["Plus Jakarta Sans"],
},
fontSize: {
"display": [
"44px",
{
lineHeight: "52px",
letterSpacing: "-0.02em",
fontWeight: "800",
},
],
"headline-lg": [
"32px",
{
lineHeight: "40px",
letterSpacing: "-0.01em",
fontWeight: "700",
},
],
"headline-md": [
"24px",
{
lineHeight: "32px",
fontWeight: "700",
},
],
"title-lg": [
"20px",
{
lineHeight: "28px",
fontWeight: "600",
},
],
"body-lg": [
"18px",
{
lineHeight: "28px",
fontWeight: "400",
},
],
"body-md": [
"16px",
{
lineHeight: "24px",
fontWeight: "400",
},
],
"label-md": [
"14px",
{
lineHeight: "20px",
letterSpacing: "0.01em",
fontWeight: "600",
},
],
"label-sm": [
"12px",
{
lineHeight: "16px",
fontWeight: "500",
},
],
},
borderRadius: {
"sm": "0.25rem",
"DEFAULT": "0.5rem",
"md": "0.75rem",
"lg": "1rem",
"xl": "1.5rem",
"full": "9999px",
},
spacing: {
"base": "8px",
"xs": "4px",
"sm": "12px",
"md": "24px",
"lg": "40px",
"xl": "64px",
"gutter": "16px",
"margin": "24px",
},
},
},
};
+210
View File
@@ -0,0 +1,210 @@
---
name: Totality Festival Design System
colors:
surface: "#121318"
surface-dim: "#121318"
surface-bright: "#38393f"
surface-container-lowest: "#0d0e13"
surface-container-low: "#1a1b21"
surface-container: "#1e1f25"
surface-container-high: "#292a2f"
surface-container-highest: "#34343a"
on-surface: "#e3e1e9"
on-surface-variant: "#d0c6ab"
inverse-surface: "#e3e1e9"
inverse-on-surface: "#2f3036"
outline: "#999077"
outline-variant: "#4d4732"
surface-tint: "#e9c400"
primary: "#fff6df"
on-primary: "#3a3000"
primary-container: "#ffd700"
on-primary-container: "#705e00"
inverse-primary: "#705d00"
secondary: "#bdf4ff"
on-secondary: "#00363d"
secondary-container: "#00e3fd"
on-secondary-container: "#00616d"
tertiary: "#fcf3ff"
on-tertiary: "#3b2754"
tertiary-container: "#e7d1ff"
on-tertiary-container: "#6b5586"
error: "#ffb4ab"
on-error: "#690005"
error-container: "#93000a"
on-error-container: "#ffdad6"
primary-fixed: "#ffe16d"
primary-fixed-dim: "#e9c400"
on-primary-fixed: "#221b00"
on-primary-fixed-variant: "#544600"
secondary-fixed: "#9cf0ff"
secondary-fixed-dim: "#00daf3"
on-secondary-fixed: "#001f24"
on-secondary-fixed-variant: "#004f58"
tertiary-fixed: "#eedbff"
tertiary-fixed-dim: "#d6bcf4"
on-tertiary-fixed: "#25113e"
on-tertiary-fixed-variant: "#523d6c"
background: "#121318"
on-background: "#e3e1e9"
surface-variant: "#34343a"
typography:
headline-xl:
fontFamily: Space Grotesk
fontSize: 72px
fontWeight: "700"
lineHeight: 80px
letterSpacing: -0.04em
headline-lg:
fontFamily: Space Grotesk
fontSize: 48px
fontWeight: "600"
lineHeight: 56px
letterSpacing: -0.02em
headline-md:
fontFamily: Space Grotesk
fontSize: 32px
fontWeight: "600"
lineHeight: 40px
letterSpacing: 0em
body-lg:
fontFamily: Inter
fontSize: 18px
fontWeight: "400"
lineHeight: 28px
letterSpacing: 0em
body-md:
fontFamily: Inter
fontSize: 16px
fontWeight: "400"
lineHeight: 24px
letterSpacing: 0em
label-md:
fontFamily: Space Grotesk
fontSize: 14px
fontWeight: "500"
lineHeight: 20px
letterSpacing: 0.1em
rounded:
sm: 0.125rem
DEFAULT: 0.25rem
md: 0.375rem
lg: 0.5rem
xl: 0.75rem
full: 9999px
spacing:
unit: 8px
container-max: 1280px
gutter: 24px
margin-mobile: 16px
margin-desktop: 64px
components:
button-primary:
backgroundColor: "{colors.primary}"
textColor: "{colors.on-primary}"
typography: "{typography.label-md}"
rounded: "{rounded.lg}"
padding: 12px
height: 48px
button-primary-hover:
backgroundColor: "{colors.primary-fixed}"
button-secondary:
backgroundColor: transparent
textColor: "{colors.secondary}"
typography: "{typography.label-md}"
rounded: "{rounded.lg}"
padding: 12px
height: 48px
button-secondary-hover:
backgroundColor: rgba(0, 227, 253, 0.1)
card-glass-level-2:
backgroundColor: rgba(52, 52, 58, 0.2)
rounded: "{rounded.xl}"
padding: "{spacing.gutter}"
card-glass-interactive-hover:
backgroundColor: rgba(56, 57, 63, 0.4)
input-field:
backgroundColor: "{colors.surface-container-lowest}"
textColor: "{colors.on-surface}"
typography: "{typography.body-md}"
rounded: "{rounded.lg}"
padding: 12px
list-item-hover:
backgroundColor: "{colors.surface-container-high}"
textColor: "{colors.primary}"
rounded: "{rounded.md}"
padding: 8px
hero-headline:
textColor: "{colors.primary}"
typography: "{typography.headline-xl}"
badge-celestial:
backgroundColor: "{colors.tertiary-container}"
textColor: "{colors.on-tertiary-container}"
typography: "{typography.label-md}"
rounded: "{rounded.full}"
padding: 4px
---
## Brand & Style
The design system captures the visceral tension and awe of a solar eclipse. It targets an audience of celestial enthusiasts, music lovers, and seekers of rare experiences. The aesthetic is "Cosmic Premium," blending the stark mystery of deep space with the explosive brilliance of the solar corona.
To achieve this, the design system utilizes **Glassmorphism** and **High-Contrast** movements. Surfaces appear as translucent obsidian slabs floating over nebula-like gradients, creating a sense of immense depth. High-energy accents represent the "diamond ring" effect, ensuring that while the interface is dark, it feels luminous and alive rather than heavy or muted.
## Colors
The palette is anchored in the transition from shadow to light.
- **Primary (Amber/White-Gold):** Represents the solar corona and the "diamond ring" flash. Used for critical CTAs and high-importance highlights.
- **Secondary (Soft Cyan):** Represents the atmospheric thinning and the ethereal glow of the sky during totality. Used for interactive states and secondary information.
- **Tertiary (Deep Indigo):** Provides the "midnight" depth, used for subtle atmospheric gradients and deep backgrounds.
- **Neutral (Obsidian/Charcoal):** A near-black foundation that ensures the vibrant accents pop with maximum intensity.
Gradient usage is mandatory: use radial gradients for backgrounds to simulate the circular nature of the eclipse, moving from `Neutral` at the edges to `Tertiary` or `Secondary` in the focal centers.
## Typography
This design system uses a dual-font strategy to balance cinematic impact with utility.
- **Space Grotesk** is the voice of the festival. Its geometric, technical quirks suggest a futuristic and astronomical tone. It should be used for all headers and labels. Large headings should use tight letter spacing to feel "locked" and monumental.
- **Inter** provides a neutral, highly legible counterpoint for long-form content and descriptions, ensuring that even in low-light environments, the information remains accessible.
For a truly cinematic feel, apply a subtle text-shadow or "glow" to `headline-xl` elements when they appear on the darkest backgrounds, using a low-opacity version of the Primary color.
## Layout & Spacing
The layout philosophy follows a **Fixed Grid** model for desktop to maintain a prestigious, editorial feel, while transitioning to a fluid model for mobile.
A 12-column grid is used for desktop layouts, with generous outer margins to simulate the isolation of a celestial body in the void. Spacing is governed by an 8px base unit, but "negative space" is prioritized—elements should be allowed to breathe, echoing the vastness of space. Component groups should use tight internal spacing (e.g., 8px or 16px) but wide external margins (e.g., 64px or 80px) to create distinct "islands" of content.
## Elevation & Depth
Depth in this design system is achieved through **Glassmorphism** and light-based layering rather than traditional drop shadows.
- **Level 1 (Base):** Deep obsidian/neutral background.
- **Level 2 (Panels):** Semi-transparent surfaces (10-20% opacity) with a `20px` backdrop blur. These layers should have a `1px` inner stroke of white at 10% opacity to define the edge, simulating a glass refraction.
- **Level 3 (Interactive):** Elements that are hovered or active should emit an "Ambient Glow." This is a soft, diffused shadow tinted with the `Secondary` or `Primary` color, creating the effect of light bleeding from behind the object.
## Shapes
The shape language is "Soft-Technical." While the overall feel is geometric, a small corner radius is applied to all components to prevent the UI from feeling too aggressive or "sharp."
Buttons and input fields should utilize the `rounded-lg` (8px) setting for a modern feel. For specific decorative elements, such as image containers or featured cards, the `rounded-xl` (12px) setting can be used to soften the composition. Circles and perfect arcs are encouraged as supporting graphic elements to mirror the orbital theme of the festival.
## Components
### Action Elements
Buttons utilize `Space Grotesk` for a technical, high-impact feel; the Primary button mimics the "diamond ring" flash with a luminous amber glow on hover. Secondary buttons remain ethereal with a cyan outline, suggesting the sky's transition during totality.
### Containers & Surfaces
Cards implement level-2 glassmorphism using a semi-transparent `surface-variant` fill and a fine 1px inner stroke to simulate light refraction on glass edges. For interactive states, cards should expand their "Ambient Glow" using the Secondary Cyan color to indicate focus.
### Inputs & Selection
Input fields are anchored in the deepest `surface-container-lowest` to provide maximum contrast for entered text. Focus states use the Secondary Cyan border to maintain the cosmic color story without distracting from content.
### Typography Application
`headline-xl` should always be paired with a subtle primary-colored glow when placed on dark backgrounds to ensure it feels "radiant" rather than static. List items use a tighter `rounded-md` corner to differentiate them from larger, more prominent layout containers.
+11
View File
@@ -0,0 +1,11 @@
# Totality Festival
A dark, immersive design system for a solar eclipse music festival. The "Cosmic Premium" aesthetic blends deep-space obsidian with explosive corona gold and atmospheric cyan, using glassmorphism and ambient glow effects to capture the visceral drama of totality.
## Files
| File | Description |
|------|-------------|
| `DESIGN.md` | The complete design system specification in DESIGN.md format, including both structured YAML design tokens (frontmatter) and human-readable style guidance (markdown body). |
| `tailwind.config.js` | A Tailwind CSS v3 theme configuration derived from the design tokens in the DESIGN.md frontmatter. Covers colors, typography, border-radius, and spacing. Component tokens are intentionally excluded — Tailwind's utility-first approach handles component styling through composition of these primitives. |
| `design_tokens.json` | A [Design Tokens Community Group](https://www.designtokens.org/) JSON file containing all design tokens from the DESIGN.md frontmatter, including component-level tokens. This format is interoperable with tools like Figma, Style Dictionary, and other token pipelines. |
@@ -0,0 +1,911 @@
{
"name": {
"$type": "string",
"$value": "Totality Festival Design System"
},
"colors": {
"surface": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.071,
0.075,
0.094
],
"hex": "#121318"
}
},
"surface-dim": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.071,
0.075,
0.094
],
"hex": "#121318"
}
},
"surface-bright": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.22,
0.224,
0.247
],
"hex": "#38393f"
}
},
"surface-container-lowest": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.051,
0.055,
0.075
],
"hex": "#0d0e13"
}
},
"surface-container-low": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.102,
0.106,
0.129
],
"hex": "#1a1b21"
}
},
"surface-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.118,
0.122,
0.145
],
"hex": "#1e1f25"
}
},
"surface-container-high": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.161,
0.165,
0.184
],
"hex": "#292a2f"
}
},
"surface-container-highest": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.204,
0.204,
0.227
],
"hex": "#34343a"
}
},
"on-surface": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.89,
0.882,
0.914
],
"hex": "#e3e1e9"
}
},
"on-surface-variant": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.816,
0.776,
0.671
],
"hex": "#d0c6ab"
}
},
"inverse-surface": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.89,
0.882,
0.914
],
"hex": "#e3e1e9"
}
},
"inverse-on-surface": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.184,
0.188,
0.212
],
"hex": "#2f3036"
}
},
"outline": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.6,
0.565,
0.467
],
"hex": "#999077"
}
},
"outline-variant": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.302,
0.278,
0.196
],
"hex": "#4d4732"
}
},
"surface-tint": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.914,
0.769,
0.0
],
"hex": "#e9c400"
}
},
"primary": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
0.965,
0.875
],
"hex": "#fff6df"
}
},
"on-primary": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.227,
0.188,
0.0
],
"hex": "#3a3000"
}
},
"primary-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
0.843,
0.0
],
"hex": "#ffd700"
}
},
"on-primary-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.439,
0.369,
0.0
],
"hex": "#705e00"
}
},
"inverse-primary": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.439,
0.365,
0.0
],
"hex": "#705d00"
}
},
"secondary": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.741,
0.957,
1.0
],
"hex": "#bdf4ff"
}
},
"on-secondary": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.0,
0.212,
0.239
],
"hex": "#00363d"
}
},
"secondary-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.0,
0.89,
0.992
],
"hex": "#00e3fd"
}
},
"on-secondary-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.0,
0.38,
0.427
],
"hex": "#00616d"
}
},
"tertiary": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.988,
0.953,
1.0
],
"hex": "#fcf3ff"
}
},
"on-tertiary": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.231,
0.153,
0.329
],
"hex": "#3b2754"
}
},
"tertiary-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.906,
0.82,
1.0
],
"hex": "#e7d1ff"
}
},
"on-tertiary-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.42,
0.333,
0.525
],
"hex": "#6b5586"
}
},
"error": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
0.706,
0.671
],
"hex": "#ffb4ab"
}
},
"on-error": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.412,
0.0,
0.02
],
"hex": "#690005"
}
},
"error-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.576,
0.0,
0.039
],
"hex": "#93000a"
}
},
"on-error-container": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
0.855,
0.839
],
"hex": "#ffdad6"
}
},
"primary-fixed": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
1.0,
0.882,
0.427
],
"hex": "#ffe16d"
}
},
"primary-fixed-dim": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.914,
0.769,
0.0
],
"hex": "#e9c400"
}
},
"on-primary-fixed": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.133,
0.106,
0.0
],
"hex": "#221b00"
}
},
"on-primary-fixed-variant": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.329,
0.275,
0.0
],
"hex": "#544600"
}
},
"secondary-fixed": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.612,
0.941,
1.0
],
"hex": "#9cf0ff"
}
},
"secondary-fixed-dim": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.0,
0.855,
0.953
],
"hex": "#00daf3"
}
},
"on-secondary-fixed": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.0,
0.122,
0.141
],
"hex": "#001f24"
}
},
"on-secondary-fixed-variant": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.0,
0.31,
0.345
],
"hex": "#004f58"
}
},
"tertiary-fixed": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.933,
0.859,
1.0
],
"hex": "#eedbff"
}
},
"tertiary-fixed-dim": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.839,
0.737,
0.957
],
"hex": "#d6bcf4"
}
},
"on-tertiary-fixed": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.145,
0.067,
0.243
],
"hex": "#25113e"
}
},
"on-tertiary-fixed-variant": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.322,
0.239,
0.424
],
"hex": "#523d6c"
}
},
"background": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.071,
0.075,
0.094
],
"hex": "#121318"
}
},
"on-background": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.89,
0.882,
0.914
],
"hex": "#e3e1e9"
}
},
"surface-variant": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.204,
0.204,
0.227
],
"hex": "#34343a"
}
}
},
"typography": {
"headline-xl": {
"$type": "typography",
"$value": {
"fontFamily": "Space Grotesk",
"fontSize": {
"value": 72,
"unit": "px"
},
"fontWeight": 700,
"lineHeight": {
"value": 80,
"unit": "px"
},
"letterSpacing": {
"value": -0.04,
"unit": "em"
}
}
},
"headline-lg": {
"$type": "typography",
"$value": {
"fontFamily": "Space Grotesk",
"fontSize": {
"value": 48,
"unit": "px"
},
"fontWeight": 600,
"lineHeight": {
"value": 56,
"unit": "px"
},
"letterSpacing": {
"value": -0.02,
"unit": "em"
}
}
},
"headline-md": {
"$type": "typography",
"$value": {
"fontFamily": "Space Grotesk",
"fontSize": {
"value": 32,
"unit": "px"
},
"fontWeight": 600,
"lineHeight": {
"value": 40,
"unit": "px"
},
"letterSpacing": {
"value": 0,
"unit": "em"
}
}
},
"body-lg": {
"$type": "typography",
"$value": {
"fontFamily": "Inter",
"fontSize": {
"value": 18,
"unit": "px"
},
"fontWeight": 400,
"lineHeight": {
"value": 28,
"unit": "px"
},
"letterSpacing": {
"value": 0,
"unit": "em"
}
}
},
"body-md": {
"$type": "typography",
"$value": {
"fontFamily": "Inter",
"fontSize": {
"value": 16,
"unit": "px"
},
"fontWeight": 400,
"lineHeight": {
"value": 24,
"unit": "px"
},
"letterSpacing": {
"value": 0,
"unit": "em"
}
}
},
"label-md": {
"$type": "typography",
"$value": {
"fontFamily": "Space Grotesk",
"fontSize": {
"value": 14,
"unit": "px"
},
"fontWeight": 500,
"lineHeight": {
"value": 20,
"unit": "px"
},
"letterSpacing": {
"value": 0.1,
"unit": "em"
}
}
}
},
"rounded": {
"sm": {
"$type": "dimension",
"$value": {
"value": 0.125,
"unit": "rem"
}
},
"DEFAULT": {
"$type": "dimension",
"$value": {
"value": 0.25,
"unit": "rem"
}
},
"md": {
"$type": "dimension",
"$value": {
"value": 0.375,
"unit": "rem"
}
},
"lg": {
"$type": "dimension",
"$value": {
"value": 0.5,
"unit": "rem"
}
},
"xl": {
"$type": "dimension",
"$value": {
"value": 0.75,
"unit": "rem"
}
},
"full": {
"$type": "dimension",
"$value": {
"value": 9999,
"unit": "px"
}
}
},
"spacing": {
"unit": {
"$type": "dimension",
"$value": {
"value": 8,
"unit": "px"
}
},
"container-max": {
"$type": "dimension",
"$value": {
"value": 1280,
"unit": "px"
}
},
"gutter": {
"$type": "dimension",
"$value": {
"value": 24,
"unit": "px"
}
},
"margin-mobile": {
"$type": "dimension",
"$value": {
"value": 16,
"unit": "px"
}
},
"margin-desktop": {
"$type": "dimension",
"$value": {
"value": 64,
"unit": "px"
}
}
},
"components": {
"button-primary": {
"backgroundColor": "{colors.primary}",
"textColor": "{colors.on-primary}",
"typography": "{typography.label-md}",
"rounded": "{rounded.lg}",
"padding": {
"$type": "dimension",
"$value": {
"value": 12,
"unit": "px"
}
},
"height": {
"$type": "dimension",
"$value": {
"value": 48,
"unit": "px"
}
}
},
"button-primary-hover": {
"backgroundColor": "{colors.primary-fixed}"
},
"button-secondary": {
"backgroundColor": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0,
0,
0
],
"alpha": 0
}
},
"textColor": "{colors.secondary}",
"typography": "{typography.label-md}",
"rounded": "{rounded.lg}",
"padding": {
"$type": "dimension",
"$value": {
"value": 12,
"unit": "px"
}
},
"height": {
"$type": "dimension",
"$value": {
"value": 48,
"unit": "px"
}
}
},
"button-secondary-hover": {
"backgroundColor": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.0,
0.89,
0.992
],
"alpha": 0.1
}
}
},
"card-glass-level-2": {
"backgroundColor": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.204,
0.204,
0.227
],
"alpha": 0.2
}
},
"rounded": "{rounded.xl}",
"padding": "{spacing.gutter}"
},
"card-glass-interactive-hover": {
"backgroundColor": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [
0.22,
0.224,
0.247
],
"alpha": 0.4
}
}
},
"input-field": {
"backgroundColor": "{colors.surface-container-lowest}",
"textColor": "{colors.on-surface}",
"typography": "{typography.body-md}",
"rounded": "{rounded.lg}",
"padding": {
"$type": "dimension",
"$value": {
"value": 12,
"unit": "px"
}
}
},
"list-item-hover": {
"backgroundColor": "{colors.surface-container-high}",
"textColor": "{colors.primary}",
"rounded": "{rounded.md}",
"padding": {
"$type": "dimension",
"$value": {
"value": 8,
"unit": "px"
}
}
},
"hero-headline": {
"textColor": "{colors.primary}",
"typography": "{typography.headline-xl}"
},
"badge-celestial": {
"backgroundColor": "{colors.tertiary-container}",
"textColor": "{colors.on-tertiary-container}",
"typography": "{typography.label-md}",
"rounded": "{rounded.full}",
"padding": {
"$type": "dimension",
"$value": {
"value": 4,
"unit": "px"
}
}
}
}
}
@@ -0,0 +1,144 @@
// Copyright 2026 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
/** @type {import('tailwindcss').Config} */
module.exports = {
darkMode: "class",
theme: {
extend: {
colors: {
"surface": "#121318",
"surface-dim": "#121318",
"surface-bright": "#38393f",
"surface-container-lowest": "#0d0e13",
"surface-container-low": "#1a1b21",
"surface-container": "#1e1f25",
"surface-container-high": "#292a2f",
"surface-container-highest": "#34343a",
"on-surface": "#e3e1e9",
"on-surface-variant": "#d0c6ab",
"inverse-surface": "#e3e1e9",
"inverse-on-surface": "#2f3036",
"outline": "#999077",
"outline-variant": "#4d4732",
"surface-tint": "#e9c400",
"primary": "#fff6df",
"on-primary": "#3a3000",
"primary-container": "#ffd700",
"on-primary-container": "#705e00",
"inverse-primary": "#705d00",
"secondary": "#bdf4ff",
"on-secondary": "#00363d",
"secondary-container": "#00e3fd",
"on-secondary-container": "#00616d",
"tertiary": "#fcf3ff",
"on-tertiary": "#3b2754",
"tertiary-container": "#e7d1ff",
"on-tertiary-container": "#6b5586",
"error": "#ffb4ab",
"on-error": "#690005",
"error-container": "#93000a",
"on-error-container": "#ffdad6",
"primary-fixed": "#ffe16d",
"primary-fixed-dim": "#e9c400",
"on-primary-fixed": "#221b00",
"on-primary-fixed-variant": "#544600",
"secondary-fixed": "#9cf0ff",
"secondary-fixed-dim": "#00daf3",
"on-secondary-fixed": "#001f24",
"on-secondary-fixed-variant": "#004f58",
"tertiary-fixed": "#eedbff",
"tertiary-fixed-dim": "#d6bcf4",
"on-tertiary-fixed": "#25113e",
"on-tertiary-fixed-variant": "#523d6c",
"background": "#121318",
"on-background": "#e3e1e9",
"surface-variant": "#34343a",
},
fontFamily: {
"headline-xl": ["Space Grotesk"],
"headline-lg": ["Space Grotesk"],
"headline-md": ["Space Grotesk"],
"body-lg": ["Inter"],
"body-md": ["Inter"],
"label-md": ["Space Grotesk"],
},
fontSize: {
"headline-xl": [
"72px",
{
lineHeight: "80px",
letterSpacing: "-0.04em",
fontWeight: "700",
},
],
"headline-lg": [
"48px",
{
lineHeight: "56px",
letterSpacing: "-0.02em",
fontWeight: "600",
},
],
"headline-md": [
"32px",
{
lineHeight: "40px",
letterSpacing: "0em",
fontWeight: "600",
},
],
"body-lg": [
"18px",
{
lineHeight: "28px",
letterSpacing: "0em",
fontWeight: "400",
},
],
"body-md": [
"16px",
{
lineHeight: "24px",
letterSpacing: "0em",
fontWeight: "400",
},
],
"label-md": [
"14px",
{
lineHeight: "20px",
letterSpacing: "0.1em",
fontWeight: "500",
},
],
},
borderRadius: {
"sm": "0.125rem",
"DEFAULT": "0.25rem",
"md": "0.375rem",
"lg": "0.5rem",
"xl": "0.75rem",
"full": "9999px",
},
spacing: {
"unit": "8px",
"container-max": "1280px",
"gutter": "24px",
"margin-mobile": "16px",
"margin-desktop": "64px",
},
},
},
};