@ryuenn3123/agentic-senior-core 6.15.1 → 6.16.0
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/.agents/plugins/agentic-senior-core/.codex-plugin/plugin.json +1 -1
- package/.agents/plugins/agentic-senior-core/commands/asc-reference.md +1 -1
- package/.agents/plugins/agentic-senior-core/commands/asc-reference.toml +2 -3
- package/.agents/plugins/agentic-senior-core/commands/asc-test.md +2 -0
- package/.agents/plugins/agentic-senior-core/commands/asc-test.toml +3 -0
- package/.agents/plugins/agentic-senior-core/hooks/lib/known-ui-slop-patterns.json +81 -1
- package/.agents/plugins/agentic-senior-core/plugin.json +1 -1
- package/.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md +3 -2
- package/.agents/plugins/agentic-senior-core/skills/asc/SKILL.md +15 -6
- package/.agents/plugins/agentic-senior-core/skills/asc/references/writing-skills.md +72 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-develop/SKILL.md +3 -4
- package/.agents/plugins/agentic-senior-core/skills/asc-reference/SKILL.md +55 -67
- package/.agents/plugins/agentic-senior-core/skills/asc-reference/references/api.md +108 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-reference/references/database.md +97 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-reference/references/infrastructure.md +102 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-reference/references/resilience.md +87 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-review/SKILL.md +20 -7
- package/.agents/plugins/agentic-senior-core/skills/asc-test/SKILL.md +104 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-test/references/e2e-playwright.md +89 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-test/references/flaky-tests.md +96 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-test/references/regression-proof.md +58 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-test/references/tdd-cycle.md +62 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-test/references/test-design.md +75 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-test/references/uat.md +62 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-ui/SKILL.md +61 -174
- package/.agents/plugins/agentic-senior-core/skills/asc-ui/references/accessibility.md +102 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-ui/references/copy-i18n.md +103 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-ui/references/craft/browser-surfaces.md +69 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-ui/references/craft/color-surfaces.md +46 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-ui/references/craft/motion.md +55 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-ui/references/craft/typography.md +49 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-ui/references/divergence.md +127 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-ui/references/mobile-responsive.md +115 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-ui/references/modes/experience.md +27 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-ui/references/modes/operate.md +53 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-ui/references/modes/persuade.md +72 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-ui/references/modes/read.md +43 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-ui/references/redesign-audit.md +71 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-ui/references/reflexes.md +59 -0
- package/.agents/plugins/agentic-senior-core/skills/asc-ui/references/states-feedback.md +148 -0
- package/README.md +1 -1
- package/gemini-extension.json +1 -1
- package/package.json +1 -1
- package/plugin.yaml +3 -1
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# UX Writing, Microcopy & Internationalization (i18n)
|
|
2
|
+
|
|
3
|
+
UI microcopy is an operational tool, not marketing collateral. Every word on screen either reduces user uncertainty or costs attention.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. The 50% Reduction Rule
|
|
8
|
+
|
|
9
|
+
Draft the copy, then delete half the words without losing meaning. Remove polite throat-clearing, redundant labels, and ornamental adjectives.
|
|
10
|
+
|
|
11
|
+
| Verbose / Conversational | Direct Operational Copy | Rationale |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| "In order to get started, please enter your email address below." | "Email address" | Input labels require no preamble. |
|
|
14
|
+
| "Are you sure you want to delete this repository? This action cannot be undone." | "Delete `octocat/hello-world`? This permanently removes all code and history." | Name the exact target and concrete consequence. |
|
|
15
|
+
| "We couldn't seem to find any results matching your search criteria." | "No results for \"billing\"." | State the outcome, mirror the query. |
|
|
16
|
+
| "Successfully updated your preferences." | "Preferences saved." | Past participle, 2 words, passive verb eliminated. |
|
|
17
|
+
| "Click here to view our comprehensive documentation." | "View documentation →" | Never write "click here"; state the destination. |
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 2. Action Controls: Verb + Noun Grammar
|
|
22
|
+
|
|
23
|
+
Buttons and mutation triggers must name their concrete target. Never use ambiguous lone affirmations.
|
|
24
|
+
|
|
25
|
+
- **Banned:** `Submit`, `OK`, `Yes`, `Proceed`, `Continue`, `Go`, `Done`.
|
|
26
|
+
- **Enforced:** `Create project`, `Invite member`, `Deploy branch`, `Delete webhook`, `Export CSV`.
|
|
27
|
+
|
|
28
|
+
Exception: Standard multi-step navigation controls in fixed wizards (`Back`, `Next`) where the step indicator supplies the context.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 3. Marketing Buzzword Blacklist
|
|
33
|
+
|
|
34
|
+
The following words are banned in operational interfaces:
|
|
35
|
+
|
|
36
|
+
`seamless`, `seamlessly`, `empower`, `empowering`, `robust`, `effortless`, `effortlessly`, `cutting-edge`, `game-changing`, `elevate`, `unlock`, `dive in`, `delightful`, `next-generation`, `supercharge`, `blazing-fast`.
|
|
37
|
+
|
|
38
|
+
When tempted to write an adjective, state the measurable property instead:
|
|
39
|
+
- Instead of: *"A robust, blazing-fast pipeline."*
|
|
40
|
+
- Write: *"Builds complete in under 45 seconds with isolated caching."*
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 4. Single-Language Purity & Anti-Gado-Gado
|
|
45
|
+
|
|
46
|
+
Interfaces must maintain strict language purity. Mixing two languages within the same surface causes cognitive friction and feels unpolished.
|
|
47
|
+
|
|
48
|
+
### 4.1 Strict Monolingual Surface
|
|
49
|
+
Choose one language for the entire surface and enforce it across headings, labels, errors, and tooltips:
|
|
50
|
+
- **English UI:** All copy, actions, and timestamps in English.
|
|
51
|
+
- **Indonesian UI:** All copy, actions, and timestamps in standard Indonesian (KBBI/PUEBI).
|
|
52
|
+
|
|
53
|
+
### 4.2 Ban Hybrid Neologisms (Indonesian Context)
|
|
54
|
+
Never prefix Indonesian grammatical affixes (`di-`, `meng-`, `ter-`, `pe-`) onto raw English stems:
|
|
55
|
+
|
|
56
|
+
| Hybrid Neologism (Banned) | Standard Indonesian | Pure English Alternative |
|
|
57
|
+
|---|---|---|
|
|
58
|
+
| `di-submit` | `Dikirim` / `Diserahkan` | `Submitted` |
|
|
59
|
+
| `meng-generate` | `Menghasilkan` / `Membuat` | `Generating` |
|
|
60
|
+
| `di-cancel` | `Dibatalkan` | `Cancelled` |
|
|
61
|
+
| `meng-handle` | `Menangani` | `Handling` |
|
|
62
|
+
| `di-approve` | `Disetujui` | `Approved` |
|
|
63
|
+
| `meng-update` | `Memperbarui` | `Updating` |
|
|
64
|
+
| `di-delete` | `Dihapus` | `Deleted` |
|
|
65
|
+
| `me-restore` | `Memulihkan` | `Restoring` |
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## 5. Dynamic Text Expansion & Internationalization Layout
|
|
70
|
+
|
|
71
|
+
Text length varies drastically between languages:
|
|
72
|
+
- German and Dutch expand +20% to +35% compared to English.
|
|
73
|
+
- Indonesian expands +15% to +30% for verb-rich phrases.
|
|
74
|
+
- Japanese and Chinese are visually dense and vertically taller.
|
|
75
|
+
|
|
76
|
+
### 5.1 Layout Rules for Expanding Strings
|
|
77
|
+
1. **Never set fixed widths on action buttons:**
|
|
78
|
+
```html
|
|
79
|
+
<!-- BANNED: clips or overflows in German/Indonesian -->
|
|
80
|
+
<button class="w-[120px] truncate">Save settings</button>
|
|
81
|
+
|
|
82
|
+
<!-- ENFORCED: content-driven width with min-width safety -->
|
|
83
|
+
<button class="min-w-[5rem] px-4 py-2">Save settings</button>
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
2. **Support multi-line wrapping for headings and table headers:**
|
|
87
|
+
- Avoid `white-space: nowrap` on containers holding localized strings unless horizontally scrolling is explicitly designed.
|
|
88
|
+
- Use `hyphens: auto` or flex wrapping on dense metric cards.
|
|
89
|
+
|
|
90
|
+
3. **Isolate placeholders and interpolated values:**
|
|
91
|
+
- Never assemble sentences by concatenating translated strings:
|
|
92
|
+
```javascript
|
|
93
|
+
// BANNED: grammar breaks in right-to-left or verb-final languages
|
|
94
|
+
const msg = t("Deleted") + " " + count + " " + t("items");
|
|
95
|
+
|
|
96
|
+
// ENFORCED: parameterized translation tokens
|
|
97
|
+
const msg = t("deleted_items_count", { count });
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
4. **Numeric and Date Formatting:**
|
|
101
|
+
- Use `Intl.NumberFormat` and `Intl.DateTimeFormat` with the active locale.
|
|
102
|
+
- Never hardcode date patterns (`MM/DD/YYYY` fails in locales expecting `DD/MM/YYYY` or `YYYY-MM-DD`).
|
|
103
|
+
|
package/.agents/plugins/agentic-senior-core/skills/asc-ui/references/craft/browser-surfaces.md
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Craft: Themed Browser Surfaces
|
|
2
|
+
|
|
3
|
+
Grounded in: Impeccable Browser Surfaces Standard and Web Platform Craft.
|
|
4
|
+
|
|
5
|
+
> **Why This Matters:** The parts of the viewport you did not author still carry the design. Text selection, input carets, custom scrollbars, and focus rings all ship with unstyled browser defaults that belong to no design system. Theming these surfaces from the project palette is the clearest signal of intentional human craft.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Text Selection Highlight
|
|
10
|
+
|
|
11
|
+
- **Theme the Selection:**
|
|
12
|
+
- Standard browser selection (harsh electric blue) frequently clashes with custom brand palettes.
|
|
13
|
+
- Apply semantic selection tokens matching the brand accent:
|
|
14
|
+
```css
|
|
15
|
+
::selection {
|
|
16
|
+
background-color: var(--primary);
|
|
17
|
+
color: var(--primary-foreground);
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
```html
|
|
21
|
+
<!-- Tailwind root or body -->
|
|
22
|
+
<body class="selection:bg-primary selection:text-primary-foreground">
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 2. Form Carets & Native Focus
|
|
28
|
+
|
|
29
|
+
- **Input Caret Color:**
|
|
30
|
+
- Style the text cursor to match the primary brand token:
|
|
31
|
+
```css
|
|
32
|
+
input, textarea {
|
|
33
|
+
caret-color: var(--primary);
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
- **Consistent Focus Visible:**
|
|
37
|
+
- Never let the browser default blue outline show on interactive elements:
|
|
38
|
+
```css
|
|
39
|
+
:focus-visible {
|
|
40
|
+
outline: 2px solid var(--ring);
|
|
41
|
+
outline-offset: 2px;
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 3. Custom Scrollbar Theming
|
|
48
|
+
|
|
49
|
+
- **Subtle Scrollbars for Overflow Containers:**
|
|
50
|
+
- Default browser scrollbars on Windows/Linux are bulky and intrusive.
|
|
51
|
+
- Style internal scroll containers (`overflow-y-auto`, `overflow-x-auto`) with sleek, low-contrast scrollbars:
|
|
52
|
+
```css
|
|
53
|
+
.custom-scrollbar {
|
|
54
|
+
scrollbar-width: thin;
|
|
55
|
+
scrollbar-color: var(--border) transparent;
|
|
56
|
+
}
|
|
57
|
+
.custom-scrollbar::-webkit-scrollbar {
|
|
58
|
+
width: 6px;
|
|
59
|
+
height: 6px;
|
|
60
|
+
}
|
|
61
|
+
.custom-scrollbar::-webkit-scrollbar-thumb {
|
|
62
|
+
background-color: var(--border);
|
|
63
|
+
border-radius: 9999px;
|
|
64
|
+
}
|
|
65
|
+
.custom-scrollbar::-webkit-scrollbar-track {
|
|
66
|
+
background: transparent;
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Craft: Color Systems & Surface Elevation
|
|
2
|
+
|
|
3
|
+
Grounded in: Apple HIG, Google Material Design 3, and Refactoring UI Color Strategies.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Token-First Color Architecture
|
|
8
|
+
|
|
9
|
+
- **Semantic Tokens Only:**
|
|
10
|
+
- Every surface, border, and text color must resolve through declared CSS variables or semantic framework tokens:
|
|
11
|
+
- Backgrounds: `bg-background`, `bg-card`, `bg-muted`, `bg-popover`.
|
|
12
|
+
- Text: `text-foreground`, `text-muted-foreground`, `text-primary-foreground`.
|
|
13
|
+
- Borders: `border-border`, `border-input`, `border-primary`.
|
|
14
|
+
- **Zero Raw Hex Literals in Markup:** Never write inline hex values (`#6366f1`, `#3b82f6`) or arbitrary utility classes (`bg-blue-600`) outside the root token definition.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 2. The 60-30-10 Distribution Rule
|
|
19
|
+
|
|
20
|
+
- **60% Dominant Neutral Surface:**
|
|
21
|
+
- The canvas base floor (tinted neutral like slate, zinc, or warm stone—never dead `#000000` or sterile `#ffffff`).
|
|
22
|
+
- **30% Structural Neutral Containers:**
|
|
23
|
+
- Cards, table backgrounds, navigation headers, sidebars, and divider lines.
|
|
24
|
+
- **10% Purposeful Accent:**
|
|
25
|
+
- The dedicated brand accent hue.
|
|
26
|
+
- **Accent Exclusivity:** Accent color is reserved strictly for interactive affordances: Primary CTA button, active navigation indicator, unread dot, selected checkbox.
|
|
27
|
+
- **Forbidden:** Never use the accent color as background wallpaper, card borders, or decorative section dividers.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 3. Surface Elevation & The "Ghost Card" Ban
|
|
32
|
+
|
|
33
|
+
- **Stepped Tonal Elevation:**
|
|
34
|
+
- Build depth through background tone steps rather than heavy drop shadows:
|
|
35
|
+
- *Base Canvas:* `bg-background` (Level 0)
|
|
36
|
+
- *Containers & Cards:* `bg-card` (Level 1)
|
|
37
|
+
- *Recessed Inset Wells (Search bars, secondary filters, code blocks):* `bg-muted/50`
|
|
38
|
+
- **Declare Elevation Once (Ban The Ghost Card):**
|
|
39
|
+
- Never apply both a distinct 1px border AND a wide, blurry drop shadow to the same container (`border border-slate-200 shadow-lg`). This creates an unnatural "ghost card".
|
|
40
|
+
- Choose one clear depth language:
|
|
41
|
+
- *Border-Driven:* Crisp 1px hairline border with alpha (`border-border/60`) and zero or minimal shadow (`shadow-xs`).
|
|
42
|
+
- *Shadow-Driven:* Floating elevation (`shadow-md`) with borderless or subtle color shift.
|
|
43
|
+
- **Tinted Secondary Text on Colored Surfaces:**
|
|
44
|
+
- When placing secondary text on a colored or dark surface, tint the text using the parent background hue or foreground token (`text-primary-foreground/70`).
|
|
45
|
+
- **Never use neutral gray text (`text-slate-400`) on a saturated or colored background.** It produces a muddy, dirty optical illusion.
|
|
46
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Craft: Motion & Micro-Interactions
|
|
2
|
+
|
|
3
|
+
Grounded in: W3C Motion Specifications, Google Material Motion, and Apple HIG Fluid Interfaces.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. The Core Motion Philosophy: "One Authored Moment"
|
|
8
|
+
|
|
9
|
+
- **Choreography Over Chaos:**
|
|
10
|
+
- Limit motion to **one authored focal moment** per view (e.g. an interactive slider responding smoothly, or a key metric settling into place).
|
|
11
|
+
- Never scatter uncoordinated entrance animations across every section. Staggered fade-ins on 10 consecutive cards signal generic AI generation and slow down task execution.
|
|
12
|
+
- **Ease-Out from a Visible Default:**
|
|
13
|
+
- Content should be visible and readable by default if scripts or animation fail to execute.
|
|
14
|
+
- Motion must feel natural and physical: fast deceleration / exponential ease-out (`cubic-bezier(0.16, 1, 0.3, 1)`). Avoid linear or cartoonish bouncy transitions.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 2. Technical Performance Floor
|
|
19
|
+
|
|
20
|
+
- **The Absolute Ban on `transition: all`:**
|
|
21
|
+
- Never write `transition: all` or `transition-all` in production CSS/Tailwind.
|
|
22
|
+
- `transition: all` forces the browser engine to recalculate geometry, repaints, and layout costs on every frame whenever any property shifts.
|
|
23
|
+
- **The Law:** Target only specific, GPU-accelerated compositing properties:
|
|
24
|
+
```css
|
|
25
|
+
/* Good */
|
|
26
|
+
transition: transform 150ms cubic-bezier(0.16, 1, 0.3, 1), opacity 150ms ease-out;
|
|
27
|
+
```
|
|
28
|
+
```html
|
|
29
|
+
<!-- Good Tailwind -->
|
|
30
|
+
<button class="transition-colors duration-150 active:scale-[0.98]">
|
|
31
|
+
```
|
|
32
|
+
- **Never Animate Layout Properties:**
|
|
33
|
+
- Never animate `width`, `height`, `top`, `left`, `margin`, or `padding`. Animate `transform: scale()` or `transform: translate3d()` instead.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 3. Accessibility & Reduced Motion
|
|
38
|
+
|
|
39
|
+
- **Mandatory Reduced Motion Fallback:**
|
|
40
|
+
- Every CSS animation and transition must respect the user's operating system preferences:
|
|
41
|
+
```css
|
|
42
|
+
@media (prefers-reduced-motion: reduce) {
|
|
43
|
+
*, ::before, ::after {
|
|
44
|
+
animation-duration: 0.01ms !important;
|
|
45
|
+
animation-iteration-count: 1 !important;
|
|
46
|
+
transition-duration: 0.01ms !important;
|
|
47
|
+
scroll-behavior: auto !important;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
```html
|
|
52
|
+
<!-- Tailwind -->
|
|
53
|
+
<div class="transition-transform duration-200 motion-reduce:transition-none">
|
|
54
|
+
```
|
|
55
|
+
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Craft: Typography & Typesetting
|
|
2
|
+
|
|
3
|
+
Grounded in: Refactoring UI, Bringhurst's The Elements of Typographic Style, and W3C Type Best Practices.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Font Roles & Typographic Contrast
|
|
8
|
+
|
|
9
|
+
- **Strict Dual-Role System:**
|
|
10
|
+
- *Display Role:* Conveys brand character and emotional tone (used for H1, hero headlines, large section markers).
|
|
11
|
+
- *Body/Functional Role:* Maximizes optical legibility at scale (used for paragraphs, tables, form inputs, button labels, navigation).
|
|
12
|
+
- Never mix more than two font families on a single screen unless one is a dedicated monospace face for literal code.
|
|
13
|
+
- **Weight Contrast Before Size Inflation:**
|
|
14
|
+
- Build strong typographic hierarchy by varying font weights (`font-bold` vs `font-normal`) and contrast tokens (`text-foreground` vs `text-muted-foreground`) before jumping to oversized font sizes.
|
|
15
|
+
- A clean 24px `font-bold` title paired with a 14px `text-muted-foreground` subtitle establishes clearer hierarchy than inflating the title to 48px with identical gray values.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 2. Tracking, Leading & Measure
|
|
20
|
+
|
|
21
|
+
- **Tracking (Letter-Spacing) Floor:**
|
|
22
|
+
- Large display headings (> 32px): Tighten tracking slightly (`tracking-tight` / `-0.02em` to `-0.03em`).
|
|
23
|
+
- **The -0.04em Floor:** Never track tighter than `-0.04em`. Extreme negative tracking collides letterforms and destroys legibility.
|
|
24
|
+
- Body text (14px–18px): Standard tracking (`tracking-normal` / `0em`). Never tighten body prose.
|
|
25
|
+
- Uppercase tags/codes: Subtle positive tracking (`tracking-wider` / `+0.05em`).
|
|
26
|
+
- **Leading (Line-Height) Matching:**
|
|
27
|
+
- Large headings: `leading-tight` (1.1 to 1.25). Loose leading on large display text creates disjointed lines.
|
|
28
|
+
- Body prose: `leading-relaxed` (1.6 to 1.75). Tight leading on body text causes reading fatigue.
|
|
29
|
+
- **Line Measure Floor:**
|
|
30
|
+
- Cap continuous reading prose at **65–75 characters per line** (`max-w-prose` / ~680px).
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 3. Tabular Numbers & Numeric Craft
|
|
35
|
+
|
|
36
|
+
- **Tabular Numerals (`tabular-nums`):**
|
|
37
|
+
- All numbers that change, compare, or align in columns **MUST** carry `tabular-nums` (via CSS `font-variant-numeric: tabular-nums` or Tailwind class `tabular-nums`).
|
|
38
|
+
- Applies to: prices, balances, data table columns, timers, percentages, and metrics.
|
|
39
|
+
- *Distinction from font-mono:* Use `tabular-nums` with the standard sans-serif face. Do not force `font-mono` on numbers unless the numbers represent technical addresses, hashes, or code tokens.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 4. The Absolute Ban on Eyebrows & Tracked Heading Kickers
|
|
44
|
+
|
|
45
|
+
- **Zero Eyebrow Labels:**
|
|
46
|
+
- Never place a small, uppercase, tracked kicker label above a heading (e.g. `FEATURES`, `WHAT WE DO`, `WHY CHOOSE US`).
|
|
47
|
+
- An eyebrow is the defining hallmark of generic AI template generation. It adds zero informational value and insults the reader's intelligence.
|
|
48
|
+
- Let the heading carry its own weight. Delete the kicker entirely.
|
|
49
|
+
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Anti-Convergence & Visual Divergence
|
|
2
|
+
|
|
3
|
+
Second-order AI design slop occurs when models converge on the same "safe" contemporary aesthetic: dark mode by default, 3 identical rounded cards, purple/indigo gradients, floating pill badges, and generic hero text.
|
|
4
|
+
|
|
5
|
+
Distinct engineering craft rejects pre-baked template habits in favor of material-derived identity.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. The Mirror Test
|
|
10
|
+
|
|
11
|
+
Before rendering a visual layout, apply the Mirror Test:
|
|
12
|
+
|
|
13
|
+
> *"Would an adjacent, generic prompt from another user receive this exact combination of layout, typography, and card containers?"*
|
|
14
|
+
|
|
15
|
+
If the answer is yes:
|
|
16
|
+
1. Break one fundamental structural assumption (e.g., if you naturally reached for a 3-card grid, replace it with a dense comparison table or an asymmetric 70/30 narrative layout).
|
|
17
|
+
2. Shift the focal anchor from generic text to the project's concrete material (a live code terminal, real data payload, interactive simulator, or high-fidelity architecture diagram).
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 2. Material-First Architecture
|
|
22
|
+
|
|
23
|
+
Template-first design forces real content into arbitrary boxes. Material-first design derives the container from the inventory of existing data.
|
|
24
|
+
|
|
25
|
+
### 2.1 The Material Inventory Protocol
|
|
26
|
+
Inspect what real assets and content actually exist before writing markup:
|
|
27
|
+
- **Available Material:**
|
|
28
|
+
- Are there real numbers and metrics? $\to$ Display an authentic data table with sorting/filtering.
|
|
29
|
+
- Is there actual CLI or API interaction? $\to$ Lead with a live syntax-highlighted code block or terminal view.
|
|
30
|
+
- Are there real product screenshots? $\to$ Full-bleed product stage with zoom/interactive callouts.
|
|
31
|
+
- **Absent Material:**
|
|
32
|
+
- No customer quotes? $\to$ Zero fake testimonial sliders or generic placeholder personas.
|
|
33
|
+
- No partner companies? $\to$ Zero generic "Trusted by 10,000+ teams" logo walls.
|
|
34
|
+
- No enterprise compliance certifications? $\to$ Zero unverified security badges.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 3. Divergence Axes: How to Build Character
|
|
39
|
+
|
|
40
|
+
When establishing the visual language for a new product, vary decisions along four distinct axes:
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
Axis 1: Layout Posture
|
|
44
|
+
(Symmetric Grid ◄──────► Asymmetric Split / Rail)
|
|
45
|
+
│
|
|
46
|
+
Axis 2: Typographic Voice │ Axis 3: Surface Tone
|
|
47
|
+
(Technical Monospace / Geometric ◄┼► Editorial Serif / Humanist)
|
|
48
|
+
│
|
|
49
|
+
Axis 4: Density Scale
|
|
50
|
+
(Spacious & Airy ◄──────► Terminal-Dense Compact)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 3.1 Layout Posture
|
|
54
|
+
- **Asymmetric Split:** 65% primary visual canvas or working editor, 35% contextual rail or inspector.
|
|
55
|
+
- **Single-Column Narrative:** Focused long-form reading measure with side-margin notes (Tufte style).
|
|
56
|
+
- **Dense Data Stream:** Compact horizontal list rows separated by hairline borders rather than boxed cards.
|
|
57
|
+
|
|
58
|
+
### 3.2 Typographic Character
|
|
59
|
+
Diverge from the generic "Inter on everything" default by matching font pairing to the product domain:
|
|
60
|
+
- **Developer / Systems Engineering:** Modern neo-grotesque heading + technical monospace code/metrics.
|
|
61
|
+
- **Analytical / Financial / Publishing:** Editorial serif heading (`Newsreader`, `Fraunces`, `Instrument Serif`) paired with crisp sans-serif body (`Geist Sans`, `Plus Jakarta Sans`).
|
|
62
|
+
- **High-Velocity Productivity Tool:** Compact sans-serif with tight tracking and high x-height (`DM Sans`, `General Sans`).
|
|
63
|
+
|
|
64
|
+
### 3.3 Surface Tone
|
|
65
|
+
- **Warm Editorial:** Cream or paper-tinted backgrounds (`#faf9f6`), deep ink text (`#1c1917`), subtle warm borders.
|
|
66
|
+
- **Technical Monolith:** Deep slate or obsidian canvas (`#090a0f`), cool steel borders (`#1e2230`), crisp laser accents.
|
|
67
|
+
- **High-Key Precision (Clean Light):** Stark white canvas (`#ffffff`), zinc-900 typography, zero shadow elevation (pure 1px border geometry).
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 4. Single Signature Element
|
|
72
|
+
|
|
73
|
+
A memorable, production-grade interface requires exactly **one** standout signature interaction or visual focal point. Attempting to make every button and card special produces visual noise.
|
|
74
|
+
|
|
75
|
+
Examples of strong signature elements:
|
|
76
|
+
1. **Interactive calculation slider:** Allows prospective users to adjust sliders and immediately see concrete pricing or ROI recalculations.
|
|
77
|
+
2. **Live terminal sandbox:** Interactive terminal tab allowing command execution or simulated payload inspection.
|
|
78
|
+
3. **Master status indicator:** Distinct physical-style LED or pulsing node visualizing live system cluster health.
|
|
79
|
+
4. **Architectural node diagram:** Interactive SVG graph mapping dependencies or data flows.
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## 5. The Three Waves of AI Tells (Chronological Slop Registry)
|
|
84
|
+
|
|
85
|
+
Slop is not static. As soon as AI models are instructed to avoid one set of clichés, they converge on the next fashionable alternative.
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
┌────────────────────────────────────────────────────────┐
|
|
89
|
+
│ THE THREE WAVES OF AI DESIGN TELLS │
|
|
90
|
+
├────────────────────────────────────────────────────────┤
|
|
91
|
+
│ Wave 1 (2023–2024): The Neon Starter Pack │
|
|
92
|
+
│ Violet/cyan gradients, glassmorphism, floating drop │
|
|
93
|
+
│ shadows, 3 identical cards with icon chips, emoji dots.│
|
|
94
|
+
├────────────────────────────────────────────────────────┤
|
|
95
|
+
│ Wave 2 (2025): The Pseudo-Technical Bento │
|
|
96
|
+
│ Uppercase tracked eyebrows, pill badges ("Beta"), │
|
|
97
|
+
│ bento card grids, dark canvas with neon ambient halos. │
|
|
98
|
+
├────────────────────────────────────────────────────────┤
|
|
99
|
+
│ Wave 3 (2025–2026): "The Fix That Became the Look" │
|
|
100
|
+
│ Yellow-cream parchment (#FDFBF7) + terracotta/rust, │
|
|
101
|
+
│ giant italic serif display, broadsheet newspaper grids,│
|
|
102
|
+
│ performative index numbers (01 / 02), fake coordinates.│
|
|
103
|
+
└────────────────────────────────────────────────────────┘
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### 5.1 Defending Against Wave 3 (Editorial Slop)
|
|
107
|
+
The remedy published for Wave 1 and 2 was "warm it up and make it editorial". Models adopted this wholesale, making warm editorial the most instantly recognizable AI tell of 2026:
|
|
108
|
+
- **Terracotta & Cream Monoculture:** Banned as an unprompted AI reflex. Warmth must come from low-chroma stone, authentic product photography, or deep rich ink—not default yellow-cream backgrounds paired with rust orange.
|
|
109
|
+
- **Oversized Italic Serif Cliché:** Do not use italic serif display as a superficial shortcut to "luxury" or "premium" unless the client's actual brand specifically requires it.
|
|
110
|
+
- **Broadsheet Cosplay:** Hairline 1px borders dividing zero-radius dense columns to mimic an 1890s newspaper is an artificial costume. Structure must emerge from clear spatial scale and tonal contrast.
|
|
111
|
+
- **Performative Agency Metadata:** Banned decorative index numbering (`01`, `02`, `(001)`), fake coordinates (`37.77° N`), and version stamps (`©2026 — Scroll`) that convey zero operational data.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## 6. Substance Over Restraint (Anti-Sterile Empty Voids)
|
|
116
|
+
|
|
117
|
+
Stripping away slop ornaments (cards, borders, badges, gradients) is only the first half of design engineering.
|
|
118
|
+
|
|
119
|
+
> **THE SUBSTANCE INVARIANT:**
|
|
120
|
+
> A page that loses its decorative clutter without gaining substantive weight becomes an uninspired, sterile wireframe. Users and jurors rightly prefer a rich interface with minor tells over an empty, depressing void.
|
|
121
|
+
|
|
122
|
+
### How to Build Substance Without Slop
|
|
123
|
+
1. **Bold Typographic Scale Disparity:** Set primary headlines with dramatic scale confidence (e.g. `text-5xl` or `text-6xl` bold display paired with tight `leading-[1.1]`, balanced against crisp `text-sm` body).
|
|
124
|
+
2. **Full-Field Color Anchors:** Instead of scattering small floating cards, ground layouts with full-bleed background tone shifts (e.g., transitioning from a clean light canvas into a deep, tinted section floor).
|
|
125
|
+
3. **Authentic Interface Fragments:** For software products, construct working, interactive HTML/CSS UI components (a data table with real rows, an interactive calculation filter, or live code tabs) rather than empty illustrations or placeholder diagrams.
|
|
126
|
+
|
|
127
|
+
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# Mobile Ergonomics & Responsive Reflow
|
|
2
|
+
|
|
3
|
+
Mobile interfaces are governed by physical human constraints: thumb reach, screen boundaries, variable virtual keyboards, and shifting viewport chrome.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Viewport Units: The Dynamic Viewport Rule
|
|
8
|
+
|
|
9
|
+
Mobile browsers dynamically hide and reveal top address bars and bottom navigation chrome during scrolling.
|
|
10
|
+
|
|
11
|
+
- **Banned:** `height: 100vh` or `h-screen`. Causes bottom controls to hide under the browser navigation bar on iOS Safari and Android Chrome.
|
|
12
|
+
- **Enforced:** `min-height: 100dvh` (dynamic viewport height) or modern fallback cascade:
|
|
13
|
+
|
|
14
|
+
```css
|
|
15
|
+
.full-screen-container {
|
|
16
|
+
min-height: 100vh; /* Fallback for legacy webviews */
|
|
17
|
+
min-height: 100dvh; /* Dynamic viewport for modern browsers */
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
In Tailwind CSS: `min-h-dvh` or `h-dvh`.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 2. Touch Target Geometry: 44px Floor & 8px Clearance
|
|
26
|
+
|
|
27
|
+
Every interactive element on a touchscreen must provide a physical target large enough for human fingertip variance without accidental trigger of adjacent controls (WCAG 2.5.5 / 2.5.8).
|
|
28
|
+
|
|
29
|
+
- **Minimum bounding box:** 44 × 44 physical pixels (or CSS pixels at standard DPI).
|
|
30
|
+
- **Minimum clearance:** $\ge 8\text{px}$ between adjacent interactive tap targets.
|
|
31
|
+
|
|
32
|
+
### Visual Size vs. Hit Target
|
|
33
|
+
If an icon or button must visually appear smaller than 44px (e.g. a 20px close `×` button), expand the tap target via pseudo-elements or padding:
|
|
34
|
+
|
|
35
|
+
```html
|
|
36
|
+
<!-- Visual size 20px, hit target 44px -->
|
|
37
|
+
<button
|
|
38
|
+
type="button"
|
|
39
|
+
class="relative p-3 -m-3 inline-flex items-center justify-center text-muted-foreground hover:text-foreground"
|
|
40
|
+
aria-label="Close dialog"
|
|
41
|
+
>
|
|
42
|
+
<svg class="w-5 h-5" aria-hidden="true">...</svg>
|
|
43
|
+
</button>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 3. Zero Horizontal Scroll Leaks
|
|
49
|
+
|
|
50
|
+
Unintended horizontal scrolling destroys mobile ergonomics.
|
|
51
|
+
|
|
52
|
+
1. **Root Containment:**
|
|
53
|
+
Set `overflow-x: clip` on the outermost app shell or `body`. Prefer `clip` over `hidden` because `clip` prevents horizontal spill without breaking `position: sticky`.
|
|
54
|
+
|
|
55
|
+
2. **Contain Preformatted and Table Content:**
|
|
56
|
+
Never let wide tables or code blocks stretch the page width:
|
|
57
|
+
```html
|
|
58
|
+
<!-- Code block isolation -->
|
|
59
|
+
<div class="w-full max-w-full overflow-x-auto rounded-md border border-border">
|
|
60
|
+
<pre class="p-4 text-xs"><code>...</code></pre>
|
|
61
|
+
</div>
|
|
62
|
+
|
|
63
|
+
<!-- Table container isolation -->
|
|
64
|
+
<div class="w-full max-w-full overflow-x-auto">
|
|
65
|
+
<table class="w-full min-w-[600px] text-left">...</table>
|
|
66
|
+
</div>
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
3. **Break Long Strings:**
|
|
70
|
+
Apply `break-words` or `overflow-wrap: anywhere` on user-generated content, URLs, commit hashes, and file paths.
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 4. Mobile Reflow Strategies
|
|
75
|
+
|
|
76
|
+
Desktop density cannot be shrunk linearly to fit mobile screens; it must be refactored into mobile-native structures.
|
|
77
|
+
|
|
78
|
+
### 4.1 Dense Table to Stacked Card Reflow
|
|
79
|
+
On screens `< 640px` (`sm:` breakpoint), convert dense multi-column tabular rows into stacked card summaries:
|
|
80
|
+
|
|
81
|
+
```html
|
|
82
|
+
<!-- Responsive Table Reflow -->
|
|
83
|
+
<div class="block sm:hidden space-y-3">
|
|
84
|
+
<!-- Mobile Card Representation -->
|
|
85
|
+
<div class="p-4 rounded-lg border border-border bg-card">
|
|
86
|
+
<div class="flex items-center justify-between font-medium">
|
|
87
|
+
<span>INV-2048</span>
|
|
88
|
+
<span class="text-xs px-2 py-0.5 rounded bg-emerald-500/10 text-emerald-500">Paid</span>
|
|
89
|
+
</div>
|
|
90
|
+
<div class="mt-2 text-sm text-muted-foreground flex justify-between">
|
|
91
|
+
<span>Acme Corp</span>
|
|
92
|
+
<span class="font-mono tabular-nums text-foreground">$1,200.00</span>
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
95
|
+
</div>
|
|
96
|
+
|
|
97
|
+
<div class="hidden sm:block overflow-x-auto">
|
|
98
|
+
<table class="w-full">
|
|
99
|
+
<!-- Desktop Table Representation -->
|
|
100
|
+
</table>
|
|
101
|
+
</div>
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### 4.2 The Thumb Zone & Sticky Action Bars
|
|
105
|
+
Position high-frequency primary actions within natural one-handed thumb sweep:
|
|
106
|
+
- Place primary conversion buttons or form submission bars at the bottom of the viewport on mobile:
|
|
107
|
+
```html
|
|
108
|
+
<div class="sm:static fixed bottom-0 inset-x-0 p-4 bg-background/80 backdrop-blur-md border-t border-border z-20">
|
|
109
|
+
<button class="w-full py-3 bg-primary text-primary-foreground font-medium rounded-lg">
|
|
110
|
+
Confirm order ($48.00)
|
|
111
|
+
</button>
|
|
112
|
+
</div>
|
|
113
|
+
```
|
|
114
|
+
- Account for iOS bottom home indicator safe area using `pb-[env(safe-area-inset-bottom,1rem)]`.
|
|
115
|
+
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Surface Mode: Experience (Showcase, Media & Portfolios)
|
|
2
|
+
|
|
3
|
+
Use for: Creative portfolios, design galleries, interactive product demos, and media showcases.
|
|
4
|
+
|
|
5
|
+
> **Core Principle:** The visitor is inside the work itself. Interface chrome recedes entirely so the visual artifact, artwork, or interaction leads from the first viewport. The UI serves as a quiet frame for the subject.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Canvas Treatment & Spatial Composition
|
|
10
|
+
|
|
11
|
+
- **Receding Interface Chrome:**
|
|
12
|
+
- Navigation headers, footers, and control sidebars should be lightweight, semi-transparent or edge-aligned, maximizing the uninhibited canvas area.
|
|
13
|
+
- Background surface: Neutral darkroom or gallery tint (`bg-neutral-950` or warm museum white `bg-stone-50`) chosen specifically to elevate the subject's colors without competition.
|
|
14
|
+
- **Full-Bleed Media Presentation:**
|
|
15
|
+
- Let high-resolution media fill containers naturally with `object-cover` or `object-contain`.
|
|
16
|
+
- Provide full-screen zoom or modal lightbox views for high-resolution visual inspection.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 2. Interaction & Micro-Choreography
|
|
21
|
+
|
|
22
|
+
- **Tactile Exploration:**
|
|
23
|
+
- Interactive previews, drag-to-compare sliders, or spatial hover panning.
|
|
24
|
+
- Smooth, seamless transitions between overview grid cards and full-fidelity artifact inspection.
|
|
25
|
+
- **Restraint Over Distraction:**
|
|
26
|
+
- Never add cartoonish particle effects, cursor trails, or autoplaying audio. The craftsmanship of the showcased work is the emotional center.
|
|
27
|
+
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Surface Mode: Operate (Productivity & Task Execution)
|
|
2
|
+
|
|
3
|
+
Use for: Dashboards, data grids, admin consoles, editors, settings, financial ledgers, logistics tools, and developer tools.
|
|
4
|
+
|
|
5
|
+
> **Core Principle:** The visitor completes a task. Scanability, dense data alignment, low cognitive friction, and native expectations outrank emotional expression. Brand identity lives in the precision of micro-details, not loud decorative containers.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Information Density & Layout Geometry
|
|
10
|
+
|
|
11
|
+
- **Two-Pane Master-Detail Canvas:**
|
|
12
|
+
- Fixed-width contextual left rail (240px–280px) for navigation or entity selection.
|
|
13
|
+
- Fluid, high-density right canvas for inspection, editing, and execution.
|
|
14
|
+
- Breadcrumb trails with root-to-leaf path (`Projects / Acme / Billing`).
|
|
15
|
+
- **Dense Data Matrix (Tables):**
|
|
16
|
+
- Table headers must be `sticky top-0` with opaque background and hairline bottom border.
|
|
17
|
+
- Compact vertical padding: `py-2` to `py-2.5` (row height 36px–40px).
|
|
18
|
+
- Hover feedback: `hover:bg-muted/40` across the entire row.
|
|
19
|
+
- Text alignment rule: Left-align text strings, right-align numeric figures and monetary amounts, center status chips and icon actions.
|
|
20
|
+
- Numeric values must use `tabular-nums` for vertical column alignment.
|
|
21
|
+
- **Progressive Disclosure alih-alih Modal Popups:**
|
|
22
|
+
- Avoid popping modals for inline edits or sub-entity creation. Use expandable rows, sliding side sheets (drawers), or inline input switches.
|
|
23
|
+
- Reserve dialogs strictly for destructive confirmations (delete, revoke) or complex isolated workflows (import wizard).
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 2. Interactive Controls & Action Semantics
|
|
28
|
+
|
|
29
|
+
- **Button Heights & Hierarchy:**
|
|
30
|
+
- Primary button: `h-8` or `h-9` (32px–36px), solid semantic token (`bg-primary text-primary-foreground`).
|
|
31
|
+
- Secondary button: `h-8` or `h-9`, outline or ghost (`border border-input bg-background hover:bg-muted`).
|
|
32
|
+
- Icon-only buttons: Strict 1:1 aspect ratio (`h-8 w-8`), padded to meet the 44x44px touch target on touch devices.
|
|
33
|
+
- **Keyboard Affordances:**
|
|
34
|
+
- Display keyboard shortcuts next to menu items and tooltips (`⌘K`, `Esc`, `↵`).
|
|
35
|
+
- Full keyboard tabbing through tables and forms without trapped focus.
|
|
36
|
+
- **Inline Filter Bars:**
|
|
37
|
+
- Place search inputs, filter dropdowns, and date range pickers in a cohesive horizontal toolbar directly above data grids.
|
|
38
|
+
- Show active filter count chips with single-click dismissal (`Active (3) [×]`).
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## 3. Status Badges & Telemetry
|
|
43
|
+
|
|
44
|
+
- **Semantic Indicator Pattern:**
|
|
45
|
+
- Always pair a color with a text label or icon (never rely on color alone).
|
|
46
|
+
- Use subtle tinted badge backgrounds with high-contrast text:
|
|
47
|
+
- Success: `bg-emerald-500/10 text-emerald-700 dark:text-emerald-400`
|
|
48
|
+
- Warning: `bg-amber-500/10 text-amber-700 dark:text-amber-400`
|
|
49
|
+
- Danger: `bg-rose-500/10 text-rose-700 dark:text-rose-400`
|
|
50
|
+
- Neutral/Inactive: `bg-muted text-muted-foreground`
|
|
51
|
+
- **Zero Decorative Halos:**
|
|
52
|
+
- Never wrap status dots or cards in glowing radial blurs (`shadow-[0_0_12px_#10b981]`). Keep indicators solid and functional.
|
|
53
|
+
|