get-shit-pretty 0.6.2 → 0.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -12
- package/bin/install.js +96 -71
- package/gsp/agents/gsp-accessibility-auditor.md +3 -3
- package/gsp/agents/gsp-ascii-artist.md +1 -1
- package/gsp/agents/gsp-brand-auditor.md +2 -2
- package/gsp/agents/gsp-brand-engineer.md +131 -0
- package/gsp/agents/gsp-brand-strategist.md +2 -2
- package/gsp/agents/gsp-brand-syncer.md +8 -7
- package/gsp/agents/gsp-builder.md +48 -5
- package/gsp/agents/gsp-campaign-director.md +2 -3
- package/gsp/agents/gsp-creative-director.md +80 -0
- package/gsp/agents/gsp-critic.md +99 -17
- package/gsp/agents/gsp-designer.md +51 -4
- package/gsp/agents/gsp-project-researcher.md +3 -3
- package/gsp/agents/gsp-researcher.md +4 -4
- package/gsp/agents/gsp-reviewer.md +2 -2
- package/gsp/agents/gsp-scoper.md +2 -2
- package/gsp/hooks/hooks.json +5 -5
- package/gsp/references/design-trends.md +4 -4
- package/gsp/references/phase-transitions.md +12 -12
- package/gsp/references/questioning.md +1 -1
- package/gsp/references/token-mapping.md +329 -0
- package/gsp/skills/gsp-3d/SKILL.md +112 -0
- package/gsp/skills/gsp-accessibility/SKILL.md +11 -11
- package/gsp/skills/gsp-accessibility-audit/SKILL.md +6 -7
- package/gsp/skills/gsp-add-reference/SKILL.md +1 -1
- package/gsp/skills/gsp-art/SKILL.md +1 -1
- package/gsp/skills/gsp-brand-audit/SKILL.md +3 -3
- package/gsp/skills/gsp-brand-guidelines/SKILL.md +233 -0
- package/gsp/skills/gsp-brand-identity/SKILL.md +27 -18
- package/gsp/skills/gsp-brand-refine/SKILL.md +29 -22
- package/gsp/skills/gsp-brand-research/SKILL.md +2 -2
- package/gsp/skills/gsp-brand-strategy/SKILL.md +3 -3
- package/gsp/skills/gsp-brand-sync/SKILL.md +7 -7
- package/gsp/skills/gsp-color/SKILL.md +105 -0
- package/gsp/skills/gsp-design-system/SKILL.md +4 -4
- package/gsp/skills/gsp-doctor/SKILL.md +25 -18
- package/gsp/skills/gsp-help/SKILL.md +28 -28
- package/gsp/skills/gsp-icons/SKILL.md +108 -0
- package/gsp/skills/gsp-images/SKILL.md +197 -0
- package/gsp/skills/gsp-launch/SKILL.md +2 -3
- package/gsp/skills/gsp-logo/SKILL.md +173 -0
- package/gsp/skills/gsp-palette/SKILL.md +13 -13
- package/gsp/skills/gsp-pretty/SKILL.md +2 -2
- package/gsp/skills/gsp-progress/SKILL.md +20 -20
- package/gsp/skills/gsp-project-brief/SKILL.md +7 -8
- package/gsp/skills/gsp-project-build/SKILL.md +21 -21
- package/gsp/skills/gsp-project-critique/SKILL.md +13 -14
- package/gsp/skills/gsp-project-design/SKILL.md +17 -17
- package/gsp/skills/gsp-project-research/SKILL.md +5 -6
- package/gsp/skills/gsp-project-review/SKILL.md +7 -9
- package/gsp/skills/gsp-scaffold/SKILL.md +3 -3
- package/gsp/skills/gsp-start/SKILL.md +14 -14
- package/gsp/skills/gsp-style/SKILL.md +41 -43
- package/gsp/skills/gsp-style/styles/INDEX.yml +1 -1
- package/gsp/skills/gsp-style/styles/academia.yml +80 -0
- package/gsp/skills/gsp-style/styles/art-deco.yml +81 -0
- package/gsp/skills/gsp-style/styles/bauhaus.yml +78 -0
- package/gsp/skills/gsp-style/styles/bold-typography.yml +73 -0
- package/gsp/skills/gsp-style/styles/botanical.yml +78 -0
- package/gsp/skills/gsp-style/styles/claymorphism.yml +84 -0
- package/gsp/skills/gsp-style/styles/cyberpunk.yml +87 -0
- package/gsp/skills/gsp-style/styles/enterprise.yml +81 -0
- package/gsp/skills/gsp-style/styles/flat-design.yml +67 -0
- package/gsp/skills/gsp-style/styles/fluent.yml +82 -0
- package/gsp/skills/gsp-style/styles/glassmorphism.yml +83 -0
- package/gsp/skills/gsp-style/styles/humanist-literary.yml +74 -0
- package/gsp/skills/gsp-style/styles/industrial.yml +82 -0
- package/gsp/skills/gsp-style/styles/kinetic.yml +94 -0
- package/gsp/skills/gsp-style/styles/liquid-glass.yml +91 -0
- package/gsp/skills/gsp-style/styles/luxury.yml +83 -0
- package/gsp/skills/gsp-style/styles/material.yml +83 -0
- package/gsp/skills/gsp-style/styles/maximalism.yml +92 -0
- package/gsp/skills/gsp-style/styles/minimal-dark.yml +75 -0
- package/gsp/skills/gsp-style/styles/modern-dark.yml +88 -0
- package/gsp/skills/gsp-style/styles/monochrome.yml +68 -0
- package/gsp/skills/gsp-style/styles/neubrutalism.yml +83 -0
- package/gsp/skills/gsp-style/styles/neumorphism.yml +77 -0
- package/gsp/skills/gsp-style/styles/newsprint.yml +81 -0
- package/gsp/skills/gsp-style/styles/organic.yml +77 -0
- package/gsp/skills/gsp-style/styles/playful-geometric.yml +90 -0
- package/gsp/skills/gsp-style/styles/professional.yml +67 -0
- package/gsp/skills/gsp-style/styles/retro.yml +85 -0
- package/gsp/skills/gsp-style/styles/saas.yml +83 -0
- package/gsp/skills/gsp-style/styles/sketch.yml +86 -0
- package/gsp/skills/gsp-style/styles/swiss-minimalist.yml +69 -0
- package/gsp/skills/gsp-style/styles/terminal.yml +83 -0
- package/gsp/skills/gsp-style/styles/vaporwave.yml +84 -0
- package/gsp/skills/gsp-style/styles/web3.yml +82 -0
- package/gsp/skills/gsp-textures/SKILL.md +132 -0
- package/gsp/skills/gsp-typescale/SKILL.md +11 -11
- package/gsp/skills/gsp-typography/SKILL.md +108 -0
- package/gsp/skills/gsp-update/SKILL.md +1 -2
- package/gsp/skills/gsp-video/SKILL.md +101 -0
- package/gsp/templates/branding/config.json +1 -1
- package/gsp/templates/branding/roadmap.md +9 -9
- package/gsp/templates/exports-index.md +8 -8
- package/gsp/templates/phases/build.md +1 -1
- package/gsp/templates/phases/design.md +1 -1
- package/gsp/templates/phases/patterns.md +60 -71
- package/gsp/templates/phases/style.md +158 -0
- package/gsp/templates/projects/config.json +1 -1
- package/gsp/templates/projects/roadmap.md +7 -7
- package/gsp/templates/projects/state.md +1 -1
- package/package.json +1 -2
- package/.claude-plugin/plugin.json +0 -24
- package/gsp/agents/gsp-identity-designer.md +0 -74
- package/gsp/agents/gsp-pattern-architect.md +0 -189
- package/gsp/prompts/01-design-system-architect.md +0 -19
- package/gsp/prompts/02-brand-identity-creator.md +0 -16
- package/gsp/prompts/03-ui-ux-pattern-master.md +0 -21
- package/gsp/prompts/04-marketing-asset-factory.md +0 -14
- package/gsp/prompts/05-implementation-spec-expert.md +0 -15
- package/gsp/prompts/06-design-critique-partner.md +0 -14
- package/gsp/prompts/07-design-trend-synthesizer.md +0 -3
- package/gsp/prompts/08-accessibility-auditor.md +0 -23
- package/gsp/prompts/09-design-to-code-translator.md +0 -49
- package/gsp/prompts/10-project-scoper.md +0 -17
- package/gsp/prompts/11-deliverable-reviewer.md +0 -18
- package/gsp/prompts/12-project-researcher.md +0 -18
- package/gsp/skills/gsp-brand-patterns/SKILL.md +0 -240
|
@@ -54,5 +54,91 @@ dark_mode:
|
|
|
54
54
|
surface: "#2D2D48"
|
|
55
55
|
on-background: "#FDFBF7"
|
|
56
56
|
|
|
57
|
+
intensity:
|
|
58
|
+
variance: 8 # wobbly borders, random rotations, asymmetric radii, tape/tack decorations
|
|
59
|
+
motion: 4 # subtle jiggle hovers and bounce on decorations — motion is casual, not cinematic
|
|
60
|
+
density: 5 # layered but breathable — paper texture + dashed accents + scattered decorations
|
|
61
|
+
|
|
62
|
+
patterns:
|
|
63
|
+
card:
|
|
64
|
+
border: "{shape.border-width} solid {shape.border-color}"
|
|
65
|
+
shadow: "{elevation.shadow-md} — hard offset, zero blur"
|
|
66
|
+
radius: "wobbly — border-radius: 255px 15px 225px 15px / 15px 225px 15px 255px"
|
|
67
|
+
background: "{color.surface}"
|
|
68
|
+
decoration: "tape (translucent gray bar, rotated) OR tack (red circle at top center) OR none"
|
|
69
|
+
variants: "post-it yellow (#fff9c4) for features, speech-bubble tail for testimonials"
|
|
70
|
+
button-primary:
|
|
71
|
+
background: "{color.surface}"
|
|
72
|
+
border: "border-[3px] solid {shape.border-color}"
|
|
73
|
+
shadow: "{elevation.shadow-md}"
|
|
74
|
+
text: "{color.on-background}, {typography.font-family-secondary}"
|
|
75
|
+
radius: "wobbly oval — custom irregular border-radius"
|
|
76
|
+
fill: "hover fills {color.accent}, text turns white"
|
|
77
|
+
button-secondary:
|
|
78
|
+
background: "muted (#e5e0d8)"
|
|
79
|
+
border: "border-[3px] solid {shape.border-color}"
|
|
80
|
+
shadow: "{elevation.shadow-sm}"
|
|
81
|
+
text: "{color.on-background}"
|
|
82
|
+
radius: "wobbly oval"
|
|
83
|
+
fill: "hover fills {color.secondary} (blue ballpoint)"
|
|
84
|
+
input:
|
|
85
|
+
border: "{shape.border-width} solid {shape.border-color}"
|
|
86
|
+
radius: "wobbly — irregular border-radius matching button aesthetic"
|
|
87
|
+
background: "{color.surface}"
|
|
88
|
+
focus: "border-{color.secondary}, ring-2 ring-{color.secondary}/20"
|
|
89
|
+
font: "{typography.font-family-secondary} — handwritten feel in inputs"
|
|
90
|
+
badge:
|
|
91
|
+
shape: "wobbly pill, {shape.border-width} dashed border"
|
|
92
|
+
text: "handwritten font, text-sm, accent or secondary color"
|
|
93
|
+
decoration: "rotate-2 to rotate-4, looks like a torn tag"
|
|
94
|
+
nav:
|
|
95
|
+
logo: "heading font (Kalam), bold, slight rotation"
|
|
96
|
+
links: "handwritten font, hover adds wavy underline SVG"
|
|
97
|
+
mobile: "doodled hamburger icon with wobbly circle background"
|
|
98
|
+
layout:
|
|
99
|
+
archetype: "sketchbook-collage"
|
|
100
|
+
max-width: "max-w-5xl — contained like a sketchbook"
|
|
101
|
+
section-spacing: "py-20 — consistent rhythm"
|
|
102
|
+
grid-gap: "gap-8"
|
|
103
|
+
asymmetry: "small rotations on cards (rotate-1, -rotate-2), overlapping avatar circles"
|
|
104
|
+
surfaces: "dot-grid paper texture (radial-gradient 24px spacing), dashed line dividers"
|
|
105
|
+
decoration: "hand-drawn SVG arrows, squiggly connectors, corner frame marks, tape strips"
|
|
106
|
+
|
|
107
|
+
constraints:
|
|
108
|
+
never:
|
|
109
|
+
- "standard border-radius classes alone — always use irregular wobbly values"
|
|
110
|
+
- "soft blur shadows — only hard-offset shadows (zero blur)"
|
|
111
|
+
- "clean geometric shapes — everything organic, hand-drawn, imperfect"
|
|
112
|
+
- "sans-serif body fonts — handwritten fonts (Patrick Hand, Kalam) are mandatory"
|
|
113
|
+
- "pure black (#000000) — use soft pencil black (#2D2D2D or #2D3748)"
|
|
114
|
+
- "corporate or sterile feel — every element should look sketched"
|
|
115
|
+
- "neon or saturated technology colors — pencil blacks, paper whites, correction red, ballpoint blue"
|
|
116
|
+
- "smooth transitions above 200ms — interactions should feel snappy and casual"
|
|
117
|
+
always:
|
|
118
|
+
- "wobbly irregular border-radius on every container, button, and card"
|
|
119
|
+
- "hard-offset shadows (2-8px offset, zero blur) on elevated elements"
|
|
120
|
+
- "paper dot-grid texture (radial-gradient) on page background"
|
|
121
|
+
- "handwritten fonts for all visible text (Kalam headings, Patrick Hand body)"
|
|
122
|
+
- "at least one tape strip, thumbtack, or hand-drawn arrow decoration per page"
|
|
123
|
+
- "dashed borders on secondary elements and dividers"
|
|
124
|
+
- "thick borders (border-2 minimum, border-3 or border-4 for emphasis)"
|
|
125
|
+
|
|
126
|
+
effects:
|
|
127
|
+
interaction-vocabulary: [jiggle-nudge, press-flat, scribble-reveal, doodle-fill]
|
|
128
|
+
hover:
|
|
129
|
+
card: "jiggle-nudge — rotate(1deg) or rotate(-1deg), slight lift"
|
|
130
|
+
button: "doodle-fill — background fills {color.accent}, shadow reduces to 2px 2px"
|
|
131
|
+
link: "scribble-reveal — wavy underline SVG appears beneath text"
|
|
132
|
+
badge: "jiggle-nudge — rotation increases, slight bounce"
|
|
133
|
+
active:
|
|
134
|
+
button: "press-flat — shadow disappears, translate(4px, 4px) — pressed into paper"
|
|
135
|
+
focus:
|
|
136
|
+
input: "border-{color.secondary}, ring-2 ring-{color.secondary}/20 — subtle blue glow"
|
|
137
|
+
general: "border-{color.accent} — border-based focus, maintains wobbly shape"
|
|
138
|
+
transition: "duration-100 to duration-200, ease — fast and casual"
|
|
139
|
+
ambient:
|
|
140
|
+
- "gentle-bounce — decorative elements (tacks, arrows) bob subtly (3s ease-in-out)"
|
|
141
|
+
- "pencil-wobble — wobbly borders shimmer slightly on idle (optional, reduced motion aware)"
|
|
142
|
+
|
|
57
143
|
compatibility: [organic, playful-geometric]
|
|
58
144
|
clashes: [professional, enterprise, modern-dark]
|
|
@@ -55,5 +55,74 @@ dark_mode:
|
|
|
55
55
|
border-color: "#333333"
|
|
56
56
|
muted: "#9CA3AF"
|
|
57
57
|
|
|
58
|
+
intensity:
|
|
59
|
+
variance: 2 # strict grid law, asymmetric but mathematically precise
|
|
60
|
+
motion: 2 # instant mechanical snaps, no fluidity
|
|
61
|
+
density: 3 # generous negative space as active structural element
|
|
62
|
+
|
|
63
|
+
patterns:
|
|
64
|
+
card:
|
|
65
|
+
border: "{shape.border-width} solid {shape.border-color}"
|
|
66
|
+
shadow: "none — depth from texture overlay only"
|
|
67
|
+
radius: "0px"
|
|
68
|
+
background: "{color.surface} or {color.background}"
|
|
69
|
+
padding: "p-8 to p-12 — generous and uniform"
|
|
70
|
+
button-primary:
|
|
71
|
+
background: "{color.primary}"
|
|
72
|
+
border: "none"
|
|
73
|
+
text: "uppercase, weight {typography.font-weight-heading}, tracking-wide"
|
|
74
|
+
radius: "0px"
|
|
75
|
+
button-secondary:
|
|
76
|
+
background: "transparent"
|
|
77
|
+
border: "2px solid {color.primary}"
|
|
78
|
+
text: "uppercase, weight {typography.font-weight-heading}, tracking-wide"
|
|
79
|
+
radius: "0px"
|
|
80
|
+
input:
|
|
81
|
+
border: "border-b 2px solid {shape.border-color}"
|
|
82
|
+
radius: "0px"
|
|
83
|
+
background: "{color.background}"
|
|
84
|
+
focus: "border-color shifts to {color.secondary} — no glow, no ring"
|
|
85
|
+
badge:
|
|
86
|
+
shape: "0px radius, {shape.border-width} border"
|
|
87
|
+
text: "uppercase, tracking-widest, text-xs, font-medium"
|
|
88
|
+
nav:
|
|
89
|
+
style: "clean horizontal with visible border-bottom separator"
|
|
90
|
+
links: "uppercase tracking-wider, hover shifts to {color.secondary}"
|
|
91
|
+
layout:
|
|
92
|
+
archetype: "asymmetric-grid"
|
|
93
|
+
max-width: "max-w-7xl"
|
|
94
|
+
section-spacing: "py-16 to py-32"
|
|
95
|
+
grid-gap: "gap-6 to gap-8"
|
|
96
|
+
surfaces: "grid pattern (24px) and dot matrix at 3-4% opacity — structure visible"
|
|
97
|
+
decoration: "numbered section labels in {color.secondary}, geometric Bauhaus shapes"
|
|
98
|
+
|
|
99
|
+
constraints:
|
|
100
|
+
never:
|
|
101
|
+
- "rounded corners of any size — 0px radius everywhere"
|
|
102
|
+
- "gradient backgrounds — solid color blocks only"
|
|
103
|
+
- "drop shadows — depth from pattern and typography only"
|
|
104
|
+
- "center-aligned body text — flush-left ragged-right always"
|
|
105
|
+
- "decorative imagery competing with type — typography is the interface"
|
|
106
|
+
- "ease-in-out or spring easing — mechanical linear or ease-out only"
|
|
107
|
+
- "more than one accent color — monochrome plus {color.secondary} signal only"
|
|
108
|
+
always:
|
|
109
|
+
- "visible grid structure through borders and texture patterns"
|
|
110
|
+
- "uppercase on headings, labels, and buttons"
|
|
111
|
+
- "extreme type scale contrast between headline and body"
|
|
112
|
+
- "flush-left text alignment to grid"
|
|
113
|
+
- "active negative space framing content"
|
|
114
|
+
- "texture overlays (grid, dots, noise) on backgrounds for tactile depth"
|
|
115
|
+
|
|
116
|
+
effects:
|
|
117
|
+
interaction-vocabulary: [color-invert, snap-fill, scale-lift, icon-rotate]
|
|
118
|
+
hover:
|
|
119
|
+
card: "color-invert — background snaps to {color.primary} or {color.secondary}, text inverts"
|
|
120
|
+
button: "color-invert — black/white swap or shift to {color.secondary}"
|
|
121
|
+
active:
|
|
122
|
+
button: "scale-lift — translate-y-[-1px], instant mechanical press"
|
|
123
|
+
focus:
|
|
124
|
+
general: "ring-2 ring-{color.secondary} ring-offset-2 — high contrast"
|
|
125
|
+
transition: "duration-100 to duration-200, ease-out or linear"
|
|
126
|
+
|
|
58
127
|
compatibility: [bento-grid]
|
|
59
128
|
clashes: [neubrutalism, cyberpunk, vaporwave]
|
|
@@ -60,5 +60,88 @@ dark_mode:
|
|
|
60
60
|
background: "#010409"
|
|
61
61
|
surface: "#0D1117"
|
|
62
62
|
|
|
63
|
+
intensity:
|
|
64
|
+
variance: 3 # rigid character grid, tmux-like splits, uniform pane structure
|
|
65
|
+
motion: 4 # cursor blink, typewriter effect, subtle glitch — no cinematic movement
|
|
66
|
+
density: 7 # dense pane layout, tight monospace text, information-heavy
|
|
67
|
+
|
|
68
|
+
patterns:
|
|
69
|
+
card:
|
|
70
|
+
border: "{shape.border-width} solid {shape.border-color}"
|
|
71
|
+
shadow: "none — flat panes, no elevation illusion"
|
|
72
|
+
radius: "{shape.border-radius-sm}"
|
|
73
|
+
background: "{color.surface}"
|
|
74
|
+
header: "title bar with ASCII decoration (+--- TITLE ---+) or solid inverted bar"
|
|
75
|
+
button-primary:
|
|
76
|
+
background: "{color.primary}"
|
|
77
|
+
border: "{shape.border-width} solid {color.primary}"
|
|
78
|
+
shadow: "none"
|
|
79
|
+
text: "uppercase, monospace, {color.on-primary}, bracketed ([ INITIATE ])"
|
|
80
|
+
radius: "{shape.border-radius-sm}"
|
|
81
|
+
button-secondary:
|
|
82
|
+
background: "transparent"
|
|
83
|
+
border: "{shape.border-width} solid {shape.border-color}"
|
|
84
|
+
shadow: "none"
|
|
85
|
+
text: "uppercase, monospace, {color.on-background}"
|
|
86
|
+
radius: "{shape.border-radius-sm}"
|
|
87
|
+
input:
|
|
88
|
+
border: "none — prompt-style (user@host:~$ prefix before input)"
|
|
89
|
+
radius: "0px"
|
|
90
|
+
background: "transparent"
|
|
91
|
+
focus: "blinking block cursor, no ring, no outline"
|
|
92
|
+
font: "monospace always"
|
|
93
|
+
badge:
|
|
94
|
+
shape: "0px radius, bordered"
|
|
95
|
+
text: "monospace uppercase, status codes ([OK], [ERR], [WARN])"
|
|
96
|
+
decoration: "color matches status — green success, red error, amber warning"
|
|
97
|
+
nav:
|
|
98
|
+
style: "terminal tab bar with active/inactive pane indicators"
|
|
99
|
+
background: "{color.background}"
|
|
100
|
+
border: "border-b {shape.border-width} {shape.border-color}"
|
|
101
|
+
links: "monospace, green text, > prefix on hover"
|
|
102
|
+
layout:
|
|
103
|
+
archetype: "terminal-panes"
|
|
104
|
+
max-width: "max-w-6xl"
|
|
105
|
+
section-spacing: "py-16 to py-24"
|
|
106
|
+
grid-gap: "gap-4 to gap-6"
|
|
107
|
+
surfaces: "CRT scanline overlay (faint, 3-4px repeating), text phosphor glow"
|
|
108
|
+
decoration: "ASCII art for logos, progress bars ([||||||.....]), shell prompt prefixes"
|
|
109
|
+
dividers: "ASCII rules (===============, ----------------) between sections"
|
|
110
|
+
|
|
111
|
+
constraints:
|
|
112
|
+
never:
|
|
113
|
+
- "non-monospace fonts — every character must be monospaced, no exceptions"
|
|
114
|
+
- "border-radius above 8px — tight mechanical edges only"
|
|
115
|
+
- "soft or colored shadows — no drop shadows, no elevation illusion"
|
|
116
|
+
- "background images or photos — text and ASCII only"
|
|
117
|
+
- "gradient backgrounds — solid dark colors only"
|
|
118
|
+
- "smooth organic easing — instant or linear transitions"
|
|
119
|
+
- "rounded pill buttons — bracketed text or inverted blocks only"
|
|
120
|
+
- "light mode — dark terminal background is mandatory"
|
|
121
|
+
always:
|
|
122
|
+
- "monospace font on every element (JetBrains Mono, Fira Code, or VT323)"
|
|
123
|
+
- "terminal green ({color.primary}) as primary text and accent color"
|
|
124
|
+
- "phosphor text glow (text-shadow: 0 0 5px rgba(green, 0.5))"
|
|
125
|
+
- "ASCII decorations for dividers, logos, and structural elements"
|
|
126
|
+
- "shell prompt prefixes (>, $, ~) on interactive elements"
|
|
127
|
+
- "status code badges ([OK], [ERR]) for state indication"
|
|
128
|
+
- "CRT scanline overlay for atmosphere"
|
|
129
|
+
|
|
130
|
+
effects:
|
|
131
|
+
interaction-vocabulary: [video-invert, cursor-blink, type-reveal, glitch-offset]
|
|
132
|
+
hover:
|
|
133
|
+
card: "border color brightens to {color.primary}"
|
|
134
|
+
button: "video-invert — background fills {color.primary}, text becomes {color.on-primary}"
|
|
135
|
+
link: "> prefix appears, color shifts to {color.primary}, no underline decoration"
|
|
136
|
+
active:
|
|
137
|
+
button: "translate-y-[1px], brief rapid blink"
|
|
138
|
+
focus:
|
|
139
|
+
general: "no ring — blinking cursor and inverted-video focus indication"
|
|
140
|
+
transition: "duration-0 to duration-100, linear — instant digital response"
|
|
141
|
+
ambient:
|
|
142
|
+
- "cursor-blink — block cursor blinks 1s step-end infinite"
|
|
143
|
+
- "type-reveal — hero text appears character-by-character"
|
|
144
|
+
- "scanline-hum — CRT overlay at constant low opacity"
|
|
145
|
+
|
|
63
146
|
compatibility: [bento-grid, micro-interactions]
|
|
64
147
|
clashes: [glassmorphism, liquid-glass, vaporwave]
|
|
@@ -57,5 +57,89 @@ dark_mode:
|
|
|
57
57
|
background: "#0D0019"
|
|
58
58
|
surface: "#1A0533"
|
|
59
59
|
|
|
60
|
+
intensity:
|
|
61
|
+
variance: 7 # skewed buttons, rotated icon diamonds, perspective grids, alternating timelines
|
|
62
|
+
motion: 7 # glow amplification, un-skew transforms, CRT ambient, continuous orb drift
|
|
63
|
+
density: 5 # balanced — neon effects need breathing room to read against dark void
|
|
64
|
+
|
|
65
|
+
patterns:
|
|
66
|
+
card:
|
|
67
|
+
border: "1px solid {color.primary}/30, border-t-2 {color.secondary} accent laser"
|
|
68
|
+
shadow: "{elevation.shadow-md}"
|
|
69
|
+
radius: "{shape.border-radius-sm}"
|
|
70
|
+
background: "{color.surface}/80 with backdrop-blur-md"
|
|
71
|
+
header: "cyan title with drop-shadow glow, monospace description"
|
|
72
|
+
button-primary:
|
|
73
|
+
background: "transparent"
|
|
74
|
+
border: "2px solid {color.secondary}"
|
|
75
|
+
shadow: "none resting, 0 0 20px {color.secondary} on hover"
|
|
76
|
+
text: "uppercase, tracking-wider, font-mono, {color.secondary}"
|
|
77
|
+
radius: "0px"
|
|
78
|
+
shape: "-skew-x-12 transform, inner content counter-skewed"
|
|
79
|
+
button-secondary:
|
|
80
|
+
background: "{color.primary}"
|
|
81
|
+
border: "2px solid {color.primary}"
|
|
82
|
+
shadow: "none"
|
|
83
|
+
text: "uppercase, tracking-wider, white"
|
|
84
|
+
radius: "0px"
|
|
85
|
+
shape: "-skew-x-12 transform"
|
|
86
|
+
input:
|
|
87
|
+
border: "border-b-2 {color.primary} — underline only"
|
|
88
|
+
radius: "0px"
|
|
89
|
+
background: "black"
|
|
90
|
+
focus: "border shifts to {color.secondary}, glow shadow appears"
|
|
91
|
+
font: "monospace, {color.secondary} text"
|
|
92
|
+
badge:
|
|
93
|
+
shape: "-skew-x-12, 0px radius, neon border"
|
|
94
|
+
text: "uppercase tracking-widest text-xs font-mono"
|
|
95
|
+
decoration: "neon glow shadow matching border color"
|
|
96
|
+
nav:
|
|
97
|
+
style: "terminal window chrome with colored dots (magenta, cyan, orange)"
|
|
98
|
+
background: "dark glass with backdrop-blur"
|
|
99
|
+
links: "monospace uppercase tracking-wider, glow on hover"
|
|
100
|
+
layout:
|
|
101
|
+
archetype: "neon-void"
|
|
102
|
+
max-width: "max-w-7xl"
|
|
103
|
+
section-spacing: "py-20 to py-32"
|
|
104
|
+
grid-gap: "gap-8 to gap-12"
|
|
105
|
+
surfaces: "CRT scanlines overlay (4px repeating), perspective grid floor, floating sun orb"
|
|
106
|
+
decoration: "RGB chromatic aberration, dot patterns (magenta 1px), gradient text fills"
|
|
107
|
+
depth: "z-layered — grid z-0, sun z-1, content z-10, scanlines z-50"
|
|
108
|
+
|
|
109
|
+
constraints:
|
|
110
|
+
never:
|
|
111
|
+
- "light backgrounds — dark void ({color.background}) is mandatory"
|
|
112
|
+
- "subtle or muted colors — all accents at maximum saturation"
|
|
113
|
+
- "organic easing curves — linear or instant for digital feel"
|
|
114
|
+
- "minimalist or sparse layouts — dense with effects, borders, and overlays"
|
|
115
|
+
- "removing CRT scanline overlay — always present for atmosphere"
|
|
116
|
+
- "soft diffused shadows — all shadows are colored neon glows"
|
|
117
|
+
- "serif fonts — geometric sans (Orbitron) and monospace (Share Tech Mono) only"
|
|
118
|
+
always:
|
|
119
|
+
- "CRT scanline overlay fixed across entire viewport"
|
|
120
|
+
- "perspective grid background in at least one section"
|
|
121
|
+
- "gradient text fill (sunset: orange via magenta to cyan) on hero headline"
|
|
122
|
+
- "skewed buttons with -skew-x-12 transform"
|
|
123
|
+
- "neon glow shadows (colored, not black) on interactive elements"
|
|
124
|
+
- "terminal/window chrome with colored dots on at least one container"
|
|
125
|
+
- "IRC-style angle bracket formatting on testimonials"
|
|
126
|
+
|
|
127
|
+
effects:
|
|
128
|
+
interaction-vocabulary: [un-skew, glow-explode, diamond-spin, neon-border-shift]
|
|
129
|
+
hover:
|
|
130
|
+
card: "neon-border-shift — border opacity increases, -translate-y-2, shadow deepens"
|
|
131
|
+
button: "un-skew — skew returns to 0, bg fills neon, text inverts to black, glow explodes 2-3x"
|
|
132
|
+
icon: "diamond-spin — rotate-45 container spins to rotate-90"
|
|
133
|
+
link: "neon-border-shift — underline appears, color shifts, glow added"
|
|
134
|
+
active:
|
|
135
|
+
button: "scale-95, glow dims slightly"
|
|
136
|
+
focus:
|
|
137
|
+
general: "ring-2 ring-{color.secondary} with ambient glow"
|
|
138
|
+
transition: "duration-200, ease-linear — fast, digital, unnatural"
|
|
139
|
+
ambient:
|
|
140
|
+
- "orb-drift — floating sun gradient (600px, blur-100px) slow drift"
|
|
141
|
+
- "scanline-flicker — CRT overlay at constant opacity"
|
|
142
|
+
- "icon-pulse — animate-pulse on placeholder icons"
|
|
143
|
+
|
|
60
144
|
compatibility: [kinetic-typography, aurora-gradients]
|
|
61
145
|
clashes: [swiss-minimalist, professional, terminal]
|
|
@@ -61,5 +61,87 @@ dark_mode:
|
|
|
61
61
|
surface: "#0F1115"
|
|
62
62
|
on-background: "#FFFFFF"
|
|
63
63
|
|
|
64
|
+
intensity:
|
|
65
|
+
variance: 5 # asymmetric pricing scale, corner border accents, but grid-disciplined overall
|
|
66
|
+
motion: 7 # spinning orbitals, floating cards, pulsing indicators, glow intensification
|
|
67
|
+
density: 5 # spacious — generous py-24 sections, but data-heavy stat displays
|
|
68
|
+
|
|
69
|
+
patterns:
|
|
70
|
+
card:
|
|
71
|
+
border: "{shape.border-width} solid rgba(255,255,255,0.10)"
|
|
72
|
+
shadow: "none resting, {elevation.shadow-md} on hover"
|
|
73
|
+
radius: "{shape.border-radius-md}"
|
|
74
|
+
background: "{color.surface}"
|
|
75
|
+
hover: "border shifts to {color.primary}/50, orange glow shadow appears, -translate-y-1"
|
|
76
|
+
button-primary:
|
|
77
|
+
background: "gradient from {color.secondary} to {color.primary}"
|
|
78
|
+
border: "none"
|
|
79
|
+
shadow: "{glow.primary}"
|
|
80
|
+
text: "white, bold, uppercase, tracking-wider"
|
|
81
|
+
radius: "{shape.border-radius-lg}"
|
|
82
|
+
button-secondary:
|
|
83
|
+
background: "transparent"
|
|
84
|
+
border: "2px solid rgba(255,255,255,0.20)"
|
|
85
|
+
shadow: "none"
|
|
86
|
+
text: "white, medium weight"
|
|
87
|
+
radius: "{shape.border-radius-lg}"
|
|
88
|
+
input:
|
|
89
|
+
border: "border-b-2 rgba(255,255,255,0.20) — bottom border only"
|
|
90
|
+
radius: "0px"
|
|
91
|
+
background: "rgba(0,0,0,0.50)"
|
|
92
|
+
focus: "border shifts to {color.primary}, orange glow shadow below, no outline"
|
|
93
|
+
font: "monospace for data precision"
|
|
94
|
+
badge:
|
|
95
|
+
shape: "rounded-lg or rounded-full, orange-tinted glass"
|
|
96
|
+
text: "monospace uppercase tracking-widest text-xs"
|
|
97
|
+
decoration: "animate-ping dot for live status indicators"
|
|
98
|
+
nav:
|
|
99
|
+
style: "minimal dark bar with pill CTA"
|
|
100
|
+
background: "transparent or glass (backdrop-blur-lg + bg-black/40)"
|
|
101
|
+
links: "monospace, muted white, hover shifts to {color.primary}"
|
|
102
|
+
layout:
|
|
103
|
+
archetype: "blockchain-grid"
|
|
104
|
+
max-width: "max-w-7xl"
|
|
105
|
+
section-spacing: "py-24"
|
|
106
|
+
grid-gap: "gap-8 to gap-12"
|
|
107
|
+
surfaces: "grid pattern (50px cells, fading vignette mask) — void is never flat"
|
|
108
|
+
decoration: "spinning orbital rings, gradient text fills (orange to gold), corner border accents"
|
|
109
|
+
depth: "radial gradient blurs ({color.primary} at 5-10% opacity, blur-[120px]) for ambient glow"
|
|
110
|
+
|
|
111
|
+
constraints:
|
|
112
|
+
never:
|
|
113
|
+
- "light backgrounds — true void ({color.background}) is mandatory"
|
|
114
|
+
- "pure black shadows — all shadows use orange/gold tints"
|
|
115
|
+
- "flat dark backgrounds without grid or radial texture — void must breathe"
|
|
116
|
+
- "serif fonts — geometric sans (Space Grotesk) and monospace (JetBrains Mono) only"
|
|
117
|
+
- "hard-line section dividers (<hr>) — spacing and background alternation separate sections"
|
|
118
|
+
- "muted or desaturated orange — Bitcoin orange at full intensity always"
|
|
119
|
+
always:
|
|
120
|
+
- "colored glow shadows (orange/gold tinted) on all interactive elements"
|
|
121
|
+
- "gradient text fill (orange to gold) on hero headline keywords"
|
|
122
|
+
- "grid pattern background on at least one section"
|
|
123
|
+
- "radial blur blobs for ambient background glow"
|
|
124
|
+
- "pill-shaped (rounded-full) primary buttons"
|
|
125
|
+
- "monospace font on stats, prices, badges, and technical labels"
|
|
126
|
+
- "corner border accents on at least one card type"
|
|
127
|
+
|
|
128
|
+
effects:
|
|
129
|
+
interaction-vocabulary: [glow-intensify, scale-lift, pulse-ping, orbital-spin]
|
|
130
|
+
hover:
|
|
131
|
+
card: "glow-intensify — border shifts orange/50, orange glow shadow appears, -translate-y-1"
|
|
132
|
+
button: "scale-lift — scale-105, glow radius and opacity increase"
|
|
133
|
+
image: "scale-lift — scale-110 + contrast-125"
|
|
134
|
+
icon-container: "glow-intensify — glow shadow appears (0 0 20px rgba(234,88,12,0.4))"
|
|
135
|
+
active:
|
|
136
|
+
button: "scale-95, glow dims"
|
|
137
|
+
focus:
|
|
138
|
+
general: "ring-2 ring-{color.primary} focus-visible"
|
|
139
|
+
transition: "duration-200 to duration-300, cubic-bezier(0.4, 0, 0.2, 1)"
|
|
140
|
+
ambient:
|
|
141
|
+
- "orbital-spin — outer ring 10s linear infinite, inner ring 15s reverse"
|
|
142
|
+
- "pulse-ping — animate-ping on status dots for live network feel"
|
|
143
|
+
- "card-float — floating stat cards animate-bounce with staggered delays (3-4s)"
|
|
144
|
+
- "orb-drift — hero 3D orb floats translateY(-20px) over 8s ease-in-out infinite"
|
|
145
|
+
|
|
64
146
|
compatibility: [cyberpunk, modern-dark]
|
|
65
147
|
clashes: [botanical, retro, sketch]
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsp-textures
|
|
3
|
+
description: Design surface treatments — patterns, grain, gradients, background CSS recipes
|
|
4
|
+
user-invocable: true
|
|
5
|
+
model: sonnet
|
|
6
|
+
allowed-tools:
|
|
7
|
+
- Read
|
|
8
|
+
- Write
|
|
9
|
+
- AskUserQuestion
|
|
10
|
+
- Glob
|
|
11
|
+
- Grep
|
|
12
|
+
---
|
|
13
|
+
<context>
|
|
14
|
+
You are a GSP texture director. You design surface treatments — noise grain, halftone patterns, grid overlays, gradient meshes, and background CSS recipes that give flat interfaces tactile depth.
|
|
15
|
+
|
|
16
|
+
This is a standalone composable skill. It works two ways:
|
|
17
|
+
1. **Standalone** — user runs `/gsp-textures` directly for surface treatment exploration
|
|
18
|
+
2. **As a building block** — the creative-director invokes `/gsp-textures --enrich` to add CSS texture recipes to creative direction
|
|
19
|
+
|
|
20
|
+
Textures are what separate a generic flat UI from a design with presence. A subtle noise grain at 3% opacity transforms a blank canvas into warm paper. A halftone dot pattern turns a section break into a visual signature. These are the details that make a design feel crafted.
|
|
21
|
+
</context>
|
|
22
|
+
|
|
23
|
+
<objective>
|
|
24
|
+
Define surface treatments and produce copy-paste CSS recipes.
|
|
25
|
+
|
|
26
|
+
**Input:** Brand context (style constraints, surface philosophy) or user direction, OR `--enrich` mode
|
|
27
|
+
**Output:** `textures.md` chunk with CSS recipes for each surface treatment
|
|
28
|
+
**Agent:** None — inline skill with CSS generation
|
|
29
|
+
</objective>
|
|
30
|
+
|
|
31
|
+
<execution_context>
|
|
32
|
+
@${CLAUDE_SKILL_DIR}/../../references/chunk-format.md
|
|
33
|
+
</execution_context>
|
|
34
|
+
|
|
35
|
+
<rules>
|
|
36
|
+
- Always use `AskUserQuestion` for user interaction — never prompt via plain text
|
|
37
|
+
- One decision per question — never batch multiple questions in a single message
|
|
38
|
+
- Every texture must include copy-paste CSS (not just descriptions)
|
|
39
|
+
- Textures must be applied via fixed pseudo-elements (pointer-events: none) — never on scrolling containers
|
|
40
|
+
- Always specify opacity + blend mode — textures at wrong opacity ruin the design
|
|
41
|
+
- Respect style constraints — if the brand `.yml` says "never: texture" then the answer is "clean surfaces"
|
|
42
|
+
</rules>
|
|
43
|
+
|
|
44
|
+
<process>
|
|
45
|
+
## Step 0: Determine mode
|
|
46
|
+
|
|
47
|
+
| Input | Mode |
|
|
48
|
+
|-------|------|
|
|
49
|
+
| `/gsp-textures --enrich` | Enrich existing imagery-style.md textures section |
|
|
50
|
+
| `/gsp-textures` | Interactive — explore and build |
|
|
51
|
+
|
|
52
|
+
## Step 1: Enrich mode (`--enrich`)
|
|
53
|
+
|
|
54
|
+
Read existing `{BRAND_PATH}/identity/imagery-style.md` and `{BRAND_PATH}/patterns/{brand}.yml`.
|
|
55
|
+
|
|
56
|
+
Check `.yml` constraints — if `never` includes texture/grain/pattern keywords, write a minimal textures section noting "clean surfaces per brand constraints."
|
|
57
|
+
|
|
58
|
+
Otherwise, derive textures from the style's `layout.surfaces` field and the `.md` companion's texture descriptions. Produce CSS recipes for each texture.
|
|
59
|
+
|
|
60
|
+
Update the Textures & Patterns section of `imagery-style.md`.
|
|
61
|
+
|
|
62
|
+
## Step 2: Interactive mode
|
|
63
|
+
|
|
64
|
+
One `AskUserQuestion` at a time:
|
|
65
|
+
|
|
66
|
+
1. Surface feel — use `AskUserQuestion`:
|
|
67
|
+
- **Paper grain** — "subtle noise, warm, handmade feel"
|
|
68
|
+
- **Halftone dots** — "print/editorial, bold, graphic"
|
|
69
|
+
- **Grid overlay** — "technical, precise, graph-paper"
|
|
70
|
+
- **Gradient mesh** — "organic, flowing, modern"
|
|
71
|
+
- **Clean** — "no texture — flat surfaces are the aesthetic"
|
|
72
|
+
- **Multiple** — "I want to layer textures"
|
|
73
|
+
2. If not "clean": placement — use `AskUserQuestion`:
|
|
74
|
+
- **Global** — "entire page background"
|
|
75
|
+
- **Sections** — "alternating textured/clean sections"
|
|
76
|
+
- **Cards only** — "texture inside card surfaces"
|
|
77
|
+
- **Decorative** — "only on decorative elements"
|
|
78
|
+
|
|
79
|
+
## Step 3: Generate CSS recipes
|
|
80
|
+
|
|
81
|
+
For each texture, produce:
|
|
82
|
+
|
|
83
|
+
### Noise grain
|
|
84
|
+
```css
|
|
85
|
+
.grain {
|
|
86
|
+
position: fixed;
|
|
87
|
+
inset: 0;
|
|
88
|
+
z-index: 50;
|
|
89
|
+
pointer-events: none;
|
|
90
|
+
opacity: {0.03-0.05};
|
|
91
|
+
mix-blend-mode: multiply;
|
|
92
|
+
background-image: url("data:image/svg+xml,..."); /* feTurbulence */
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Halftone dots
|
|
97
|
+
```css
|
|
98
|
+
.halftone {
|
|
99
|
+
background-image: radial-gradient(#000 {dot-size}, transparent {dot-size});
|
|
100
|
+
background-size: {grid-size} {grid-size};
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Grid lines
|
|
105
|
+
```css
|
|
106
|
+
.grid-pattern {
|
|
107
|
+
background-size: {cell-size} {cell-size};
|
|
108
|
+
background-image:
|
|
109
|
+
linear-gradient(to right, rgba(0,0,0,{opacity}) 1px, transparent 1px),
|
|
110
|
+
linear-gradient(to bottom, rgba(0,0,0,{opacity}) 1px, transparent 1px);
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Gradient mesh / blobs
|
|
115
|
+
```css
|
|
116
|
+
.blob {
|
|
117
|
+
position: absolute;
|
|
118
|
+
width: {size};
|
|
119
|
+
height: {size};
|
|
120
|
+
border-radius: {organic-radius};
|
|
121
|
+
background: {brand-color};
|
|
122
|
+
filter: blur({blur-radius});
|
|
123
|
+
opacity: {0.1-0.3};
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Customize values to match brand palette and style constraints.
|
|
128
|
+
|
|
129
|
+
## Step 4: Write output + completion
|
|
130
|
+
|
|
131
|
+
Write `textures.md` chunk or update Textures section of `imagery-style.md`. Target: 60-100 lines.
|
|
132
|
+
</process>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: typescale
|
|
2
|
+
name: gsp-typescale
|
|
3
3
|
description: Generate a mathematical type scale — standalone or as a building block for identity
|
|
4
4
|
user-invocable: true
|
|
5
5
|
model: sonnet
|
|
@@ -11,10 +11,10 @@ allowed-tools:
|
|
|
11
11
|
- WebSearch
|
|
12
12
|
---
|
|
13
13
|
<context>
|
|
14
|
-
You are a GSP type scale generator. You produce a complete typography system from a base size, ratio, and font family — including fluid responsive sizing, vertical rhythm, Tailwind/shadcn integration, and accessibility-compliant defaults. Downstream agents (
|
|
14
|
+
You are a GSP type scale generator. You produce a complete typography system from a base size, ratio, and font family — including fluid responsive sizing, vertical rhythm, Tailwind/shadcn integration, and accessibility-compliant defaults. Downstream agents (creative-director, system-architect, builder) consume the output files.
|
|
15
15
|
|
|
16
16
|
This is a standalone composable skill. It works two ways:
|
|
17
|
-
1. **Standalone** — user runs `/gsp
|
|
17
|
+
1. **Standalone** — user runs `/gsp-typescale "Inter" --ratio 1.25` directly, gets a production-ready type system
|
|
18
18
|
2. **As a building block** — identity phase detects existing typography files and reuses them
|
|
19
19
|
|
|
20
20
|
Visual companion: https://typescale.com/ — users can preview ratios interactively there, then feed the values here.
|
|
@@ -51,11 +51,11 @@ Read the user's input to determine the mode:
|
|
|
51
51
|
|
|
52
52
|
| Input | Mode |
|
|
53
53
|
|-------|------|
|
|
54
|
-
| `/gsp
|
|
55
|
-
| `/gsp
|
|
56
|
-
| `/gsp
|
|
57
|
-
| `/gsp
|
|
58
|
-
| `/gsp
|
|
54
|
+
| `/gsp-typescale "Inter" --ratio 1.25` | Direct — font and ratio from args |
|
|
55
|
+
| `/gsp-typescale --from-style cyberpunk` | From style — extract typography from a preset |
|
|
56
|
+
| `/gsp-typescale` | Interactive — ask for inputs |
|
|
57
|
+
| `/gsp-typescale --list-ratios` | List — show available ratios |
|
|
58
|
+
| `/gsp-typescale --preview "Inter" --ratio 1.25` | Preview — show scale without writing files |
|
|
59
59
|
|
|
60
60
|
Additional flags (combinable with any mode):
|
|
61
61
|
- **--vanilla** — output plain CSS custom properties instead of Tailwind format
|
|
@@ -68,7 +68,7 @@ Additional flags (combinable with any mode):
|
|
|
68
68
|
If `--list-ratios`, display the built-in ratios with practical context:
|
|
69
69
|
|
|
70
70
|
```
|
|
71
|
-
/gsp
|
|
71
|
+
/gsp-typescale — ratios
|
|
72
72
|
═══════════════════════════════════════
|
|
73
73
|
|
|
74
74
|
Name Ratio Character Best for
|
|
@@ -83,7 +83,7 @@ If `--list-ratios`, display the built-in ratios with practical context:
|
|
|
83
83
|
golden-ratio 1.618 Maximum drama Art, luxury, display-heavy
|
|
84
84
|
|
|
85
85
|
──────────────────────────────────────────────────────────────────
|
|
86
|
-
Usage: /gsp
|
|
86
|
+
Usage: /gsp-typescale "Inter" --ratio 1.25
|
|
87
87
|
Preview interactively: https://typescale.com/
|
|
88
88
|
```
|
|
89
89
|
|
|
@@ -230,5 +230,5 @@ Write `{OUTPUT_PATH}/typescale.css` instead — plain CSS custom properties (no
|
|
|
230
230
|
|
|
231
231
|
## Step 8: Completion output
|
|
232
232
|
|
|
233
|
-
Show: header (`/gsp
|
|
233
|
+
Show: header (`/gsp-typescale — {font} @ {ratio}`), file tree (typography.md + CSS file), scale summary (ratio, range, levels, fluid, grid). Then `AskUserQuestion`: Generate palette → `/gsp-palette`, Apply a full style → `/gsp-style`, Continue to identity → `/gsp-brand-identity`, Done.
|
|
234
234
|
</process>
|