define-typography
Define typography scale and text system. Creates modular scales, text styles, and responsive typography.
What this skill does
# Define Typography Command
Design a comprehensive typography system with scales, styles, and responsive rules.
## Usage
```bash
/cms:define-typography --scale modular --ratio 1.25
/cms:define-typography --scale musical --base-size 18
/cms:define-typography --scale custom
```
## Scale Options
- **modular**: Mathematical scale with consistent ratio
- **musical**: Based on musical intervals (perfect fourth, major third)
- **custom**: User-defined sizes
## Common Ratios
| Name | Ratio | Use Case |
|------|-------|----------|
| Minor Second | 1.067 | Subtle, minimal |
| Major Second | 1.125 | Subtle hierarchy |
| Minor Third | 1.200 | Body-friendly |
| Major Third | 1.250 | Versatile (default) |
| Perfect Fourth | 1.333 | Strong hierarchy |
| Augmented Fourth | 1.414 | Bold, dramatic |
| Perfect Fifth | 1.500 | Very dramatic |
| Golden Ratio | 1.618 | Classic, elegant |
## Workflow
### Step 1: Parse Arguments
Extract scale type, base size, and ratio from command.
### Step 2: Gather Requirements
Use AskUserQuestion to understand:
- What is the primary reading context (blog, app, marketing)?
- What devices are being targeted?
- Are there existing brand fonts to incorporate?
- What is the desired visual personality?
### Step 3: Invoke Skills
Invoke `design-token-management` skill for token generation.
### Step 4: Generate Type Scale
**Modular Scale (1.25 ratio, 16px base):**
```yaml
typography:
base_size: 16
ratio: 1.25
unit: rem
scale:
# Calculated: base * ratio^n
xs: # 16 / 1.25^2 = 10.24 → 0.64rem
size: 0.64rem
line_height: 1.5
sm: # 16 / 1.25 = 12.8 → 0.8rem
size: 0.8rem
line_height: 1.5
base: # 16 = 1rem
size: 1rem
line_height: 1.5
lg: # 16 * 1.25 = 20 → 1.25rem
size: 1.25rem
line_height: 1.4
xl: # 16 * 1.25^2 = 25 → 1.563rem
size: 1.563rem
line_height: 1.3
2xl: # 16 * 1.25^3 = 31.25 → 1.953rem
size: 1.953rem
line_height: 1.3
3xl: # 16 * 1.25^4 = 39.06 → 2.441rem
size: 2.441rem
line_height: 1.2
4xl: # 16 * 1.25^5 = 48.83 → 3.052rem
size: 3.052rem
line_height: 1.1
5xl: # 16 * 1.25^6 = 61.04 → 3.815rem
size: 3.815rem
line_height: 1.1
```
### Step 5: Define Text Styles
**Semantic Text Styles:**
```yaml
text_styles:
# Headings
display:
font_family: "{fonts.heading}"
font_size: "{scale.5xl}"
font_weight: 800
line_height: 1.1
letter_spacing: -0.02em
text_transform: none
responsive:
mobile:
font_size: "{scale.3xl}"
h1:
font_family: "{fonts.heading}"
font_size: "{scale.4xl}"
font_weight: 700
line_height: 1.2
letter_spacing: -0.02em
margin_bottom: "{spacing.4}"
responsive:
mobile:
font_size: "{scale.2xl}"
h2:
font_family: "{fonts.heading}"
font_size: "{scale.3xl}"
font_weight: 700
line_height: 1.2
letter_spacing: -0.01em
margin_bottom: "{spacing.3}"
responsive:
mobile:
font_size: "{scale.xl}"
h3:
font_family: "{fonts.heading}"
font_size: "{scale.2xl}"
font_weight: 600
line_height: 1.3
margin_bottom: "{spacing.2}"
h4:
font_family: "{fonts.heading}"
font_size: "{scale.xl}"
font_weight: 600
line_height: 1.3
margin_bottom: "{spacing.2}"
h5:
font_family: "{fonts.heading}"
font_size: "{scale.lg}"
font_weight: 600
line_height: 1.4
h6:
font_family: "{fonts.heading}"
font_size: "{scale.base}"
font_weight: 600
line_height: 1.4
text_transform: uppercase
letter_spacing: 0.05em
# Body text
body:
font_family: "{fonts.body}"
font_size: "{scale.base}"
font_weight: 400
line_height: 1.6
color: "{colors.text.primary}"
body_large:
font_family: "{fonts.body}"
font_size: "{scale.lg}"
font_weight: 400
line_height: 1.5
color: "{colors.text.primary}"
body_small:
font_family: "{fonts.body}"
font_size: "{scale.sm}"
font_weight: 400
line_height: 1.5
color: "{colors.text.secondary}"
# Special text
lead:
font_family: "{fonts.body}"
font_size: "{scale.xl}"
font_weight: 400
line_height: 1.5
color: "{colors.text.secondary}"
caption:
font_family: "{fonts.body}"
font_size: "{scale.xs}"
font_weight: 400
line_height: 1.4
color: "{colors.text.tertiary}"
text_transform: uppercase
letter_spacing: 0.05em
label:
font_family: "{fonts.body}"
font_size: "{scale.sm}"
font_weight: 500
line_height: 1.4
code:
font_family: "{fonts.mono}"
font_size: 0.875em
font_weight: 400
background: "{colors.bg.code}"
padding: 0.125em 0.25em
border_radius: "{radii.sm}"
blockquote:
font_family: "{fonts.body}"
font_size: "{scale.lg}"
font_style: italic
line_height: 1.6
border_left: 4px solid "{colors.brand.primary}"
padding_left: "{spacing.4}"
margin: "{spacing.6} 0"
```
### Step 6: Generate CSS
**CSS Output:**
```css
/* Typography Scale */
:root {
--font-size-xs: 0.64rem;
--font-size-sm: 0.8rem;
--font-size-base: 1rem;
--font-size-lg: 1.25rem;
--font-size-xl: 1.563rem;
--font-size-2xl: 1.953rem;
--font-size-3xl: 2.441rem;
--font-size-4xl: 3.052rem;
--font-size-5xl: 3.815rem;
--font-family-heading: 'Inter', system-ui, sans-serif;
--font-family-body: 'Inter', system-ui, sans-serif;
--font-family-mono: 'JetBrains Mono', monospace;
}
/* Text Style Classes */
.text-display {
font-family: var(--font-family-heading);
font-size: var(--font-size-5xl);
font-weight: 800;
line-height: 1.1;
letter-spacing: -0.02em;
}
.text-h1 {
font-family: var(--font-family-heading);
font-size: var(--font-size-4xl);
font-weight: 700;
line-height: 1.2;
letter-spacing: -0.02em;
margin-bottom: 1rem;
}
.text-body {
font-family: var(--font-family-body);
font-size: var(--font-size-base);
font-weight: 400;
line-height: 1.6;
}
.text-lead {
font-family: var(--font-family-body);
font-size: var(--font-size-xl);
font-weight: 400;
line-height: 1.5;
color: var(--color-text-secondary);
}
/* Responsive Typography */
@media (max-width: 768px) {
.text-display {
font-size: var(--font-size-3xl);
}
.text-h1 {
font-size: var(--font-size-2xl);
}
}
/* Prose (long-form content) */
.prose {
font-family: var(--font-family-body);
font-size: var(--font-size-lg);
line-height: 1.7;
max-width: 65ch;
}
.prose h1, .prose h2, .prose h3, .prose h4 {
font-family: var(--font-family-heading);
margin-top: 2em;
margin-bottom: 0.5em;
}
.prose p {
margin-bottom: 1.25em;
}
.prose code {
font-family: var(--font-family-mono);
font-size: 0.875em;
background: var(--color-bg-code);
padding: 0.125em 0.25em;
border-radius: 0.25rem;
}
```
### Step 7: Font Loading Strategy
**Font Configuration:**
```yaml
fonts:
strategy: swap # font-display value
families:
- name: Inter
source: google # or self-hosted, adobe
weights: [400, 500, 600, 700, 800]
styles: [normal, italic]
subsets: [latin, latin-ext]
preload: true
variable: true
- name: JetBrains Mono
source: google
weights: [400, 700]
styles: [normal]
subsets: [latin]
preload: false
loading:
preload_critical: true
preconnect: true
subset_critical: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
fallbacks:
sans: "system-ui, -apple-system, sans-serif"
serif: "Georgia, Times New Roman, serif"
mono: "Menlo, Monaco, Consolas, monospace"
```
**HTML Head:**
```html
<!-- Preconnect to font sources -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<!-- Preload critical fonts -->
<link rel="preload" href="/fonts/inter-var.woff2" as="font" type="font/woff2" crossorigin>
<!-- Load fonts with display swRelated in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.