understanding-prime-env 0.1.6 → 0.1.7
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/package.json +1 -1
- package/skills/understand-prime-env/SKILL.md +181 -219
package/package.json
CHANGED
|
@@ -7,322 +7,284 @@ description: Generate a rich, self-contained HTML report that fully explains a P
|
|
|
7
7
|
|
|
8
8
|
## Goal
|
|
9
9
|
|
|
10
|
-
Produce a single self-contained HTML file (`environment_overview.html`)
|
|
11
|
-
|
|
12
|
-
The page has **4 cards**, rendered in a dark gamified UI. Each card is a deep-dive, not a summary.
|
|
10
|
+
Produce a single self-contained HTML file (`environment_overview.html`). A researcher opens it and sees a **stack of 4 cards** — like a physical deck — each one peeking out behind the one in front. They click through the deck, one card at a time, in a satisfying progressive reveal. Each card is one chapter of the story. The whole experience should feel like flipping through a beautifully designed research brief.
|
|
13
11
|
|
|
14
12
|
---
|
|
15
13
|
|
|
16
14
|
## Step 1 — Read the source
|
|
17
15
|
|
|
18
|
-
Read **every `.py` file** in the current directory. Also read `pyproject.toml` and `README.md` if they exist. Do not skip helper files — reward logic is often split across modules (e.g. `*_checks.py`, `*_prompts.py`). Read
|
|
16
|
+
Read **every `.py` file** in the current directory. Also read `pyproject.toml` and `README.md` if they exist. Do not skip helper files — reward logic is often split across modules (e.g. `*_checks.py`, `*_prompts.py`). Read everything before writing a single line of HTML.
|
|
19
17
|
|
|
20
18
|
Extract exactly four things:
|
|
21
19
|
|
|
22
|
-
###
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
- 3–5
|
|
26
|
-
|
|
27
|
-
###
|
|
28
|
-
- Where
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
|
|
32
|
-
###
|
|
33
|
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
1. How the raw dataset row gets transformed into the actual prompt the model sees (system prompt + user message, any templating)
|
|
45
|
-
2. What the model is expected to produce (format, length, structure)
|
|
46
|
-
3. If there are tools or a sandbox: what tools, how they'd be called
|
|
47
|
-
4. How each reward function gets called on the model output — in what order, with what inputs
|
|
48
|
-
5. How the final score is computed from the individual reward outputs
|
|
49
|
-
6. What a **perfect response** looks like vs a **zero-score response**
|
|
50
|
-
|
|
51
|
-
Be specific. Trace through the actual code logic. This is theoretical (not executed) but must be grounded in what the code actually does.
|
|
20
|
+
### Card 1 — Environment
|
|
21
|
+
- Name, and one punchy paragraph (3–4 sentences) describing what task this trains a model to do
|
|
22
|
+
- GitHub URL if found anywhere in source or README — if not found, omit entirely
|
|
23
|
+
- 3–5 stat chips: dataset size, reward count, turn count, task type, etc.
|
|
24
|
+
|
|
25
|
+
### Card 2 — Dataset
|
|
26
|
+
- Where the data comes from: HuggingFace dataset name + split, hardcoded list, generator, etc. — one line
|
|
27
|
+
- Every field in a data row: name, type, purpose
|
|
28
|
+
- One complete example row with every field shown in full — real values if available, otherwise synthesize one that is indistinguishable from real (exact field names, value formats, constraints)
|
|
29
|
+
|
|
30
|
+
### Card 3 — Rewards
|
|
31
|
+
- Every reward function: name, exactly what it checks, precisely what makes it score 0 vs 1 (and any partial values)
|
|
32
|
+
- Any thresholds, regex patterns, or edge cases a model writer needs to know
|
|
33
|
+
- If rewards combine into a final score: the exact formula
|
|
34
|
+
|
|
35
|
+
### Card 4 — Rollout
|
|
36
|
+
- Step-by-step theoretical trace of one example running end-to-end:
|
|
37
|
+
1. How the raw row becomes the prompt the model sees
|
|
38
|
+
2. What the model is expected to produce
|
|
39
|
+
3. How each reward fires on the output
|
|
40
|
+
4. How the final score is computed
|
|
41
|
+
5. What a perfect response looks like vs a zero-score response
|
|
52
42
|
|
|
53
43
|
---
|
|
54
44
|
|
|
55
45
|
## Step 2 — Generate the HTML
|
|
56
46
|
|
|
57
|
-
Write a single **self-contained** HTML file to `./environment_overview.html`.
|
|
47
|
+
Write a single **self-contained** HTML file to `./environment_overview.html`. Zero external dependencies — all CSS and JS inline.
|
|
58
48
|
|
|
59
49
|
---
|
|
60
50
|
|
|
61
|
-
###
|
|
51
|
+
### The Core Mechanic — Card Stack Reveal
|
|
62
52
|
|
|
63
|
-
The
|
|
53
|
+
The entire UI is a **centered card deck**. All four cards occupy the same position. The active card is front and center at full size. Cards behind it peek out — each one slightly smaller, slightly lower, slightly darker — giving the illusion of a physical stack.
|
|
64
54
|
|
|
65
|
-
**Color palette:**
|
|
66
55
|
```
|
|
67
|
-
|
|
68
|
-
Card
|
|
69
|
-
Card
|
|
70
|
-
|
|
71
|
-
Card 1 accent — purple: #a855f7 glow: rgba(168,85,247,0.25)
|
|
72
|
-
Card 2 accent — cyan: #22d3ee glow: rgba(34,211,238,0.25)
|
|
73
|
-
Card 3 accent — amber: #f59e0b glow: rgba(245,158,11,0.25)
|
|
74
|
-
Card 4 accent — rose: #f43f5e glow: rgba(244,63,94,0.25)
|
|
75
|
-
|
|
76
|
-
Text primary: #f1f5f9
|
|
77
|
-
Text secondary: #94a3b8
|
|
78
|
-
Text muted: #475569
|
|
79
|
-
Code text: #e2e8f0
|
|
56
|
+
░░░░░░░░░░░░░░░░ ← Card 4 (furthest back, barely visible)
|
|
57
|
+
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ← Card 3
|
|
58
|
+
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ← Card 2
|
|
59
|
+
██████████████████████████ ← Card 1 (active, full size, full opacity)
|
|
80
60
|
```
|
|
81
61
|
|
|
82
|
-
|
|
62
|
+
Clicking anywhere on the active card — or the "Continue →" button — triggers the reveal: the active card flies out (slides left + slight rotation + fade), and the next card scales up to the front with a spring animation. A progress indicator shows position (● ● ○ ○).
|
|
63
|
+
|
|
64
|
+
When card 4 is shown, "Continue →" becomes "Done ✓" and clicking it does nothing (or fades the stack out gracefully).
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
### Visual Design
|
|
69
|
+
|
|
70
|
+
**Background:** Full-viewport dark canvas.
|
|
83
71
|
```css
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
background:
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
background: linear-gradient(135deg, var(--card-accent), transparent 60%);
|
|
95
|
-
z-index: -1;
|
|
72
|
+
body {
|
|
73
|
+
background: #07090f;
|
|
74
|
+
background-image:
|
|
75
|
+
radial-gradient(ellipse at 20% 20%, rgba(168,85,247,0.06) 0%, transparent 50%),
|
|
76
|
+
radial-gradient(ellipse at 80% 80%, rgba(34,211,238,0.04) 0%, transparent 50%);
|
|
77
|
+
min-height: 100vh;
|
|
78
|
+
display: flex;
|
|
79
|
+
flex-direction: column;
|
|
80
|
+
align-items: center;
|
|
81
|
+
justify-content: center;
|
|
96
82
|
}
|
|
97
83
|
```
|
|
98
84
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
**Typography:**
|
|
85
|
+
**Card base:**
|
|
102
86
|
```css
|
|
103
|
-
|
|
104
|
-
|
|
87
|
+
.card {
|
|
88
|
+
position: absolute;
|
|
89
|
+
width: min(600px, 90vw);
|
|
90
|
+
background: #0d1117;
|
|
91
|
+
border-radius: 24px;
|
|
92
|
+
padding: 40px 44px 36px;
|
|
93
|
+
transform-origin: center bottom;
|
|
94
|
+
will-change: transform, opacity;
|
|
95
|
+
}
|
|
105
96
|
```
|
|
106
97
|
|
|
107
|
-
|
|
98
|
+
**Stack offset** (CSS, applied via `data-depth` attribute 0–3, 0 = active):
|
|
99
|
+
```
|
|
100
|
+
depth 0: scale(1.00) translateY(0px) opacity: 1 (active)
|
|
101
|
+
depth 1: scale(0.96) translateY(18px) opacity: 0.65 z-index: -1
|
|
102
|
+
depth 2: scale(0.92) translateY(36px) opacity: 0.35 z-index: -2
|
|
103
|
+
depth 3: scale(0.88) translateY(54px) opacity: 0.15 z-index: -3
|
|
104
|
+
```
|
|
108
105
|
|
|
109
|
-
|
|
106
|
+
Each card has a unique accent. Apply via a CSS custom property `--accent` and `--glow` set on the card element itself. The gradient border and glow use this accent.
|
|
110
107
|
|
|
111
108
|
```
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
│ 🌐 Env │ 📦 Dataset │ ⚡ Rewards │ 🎯 Rollout │
|
|
117
|
-
│ purple │ cyan │ amber │ rose │
|
|
118
|
-
├──────────────┴──────────────┴──────────────┴────────────────┤
|
|
119
|
-
│ FOOTER: generated timestamp · PI branding │
|
|
120
|
-
└─────────────────────────────────────────────────────────────┘
|
|
109
|
+
Card 1: --accent: #a855f7 --glow: rgba(168,85,247,0.3) (purple)
|
|
110
|
+
Card 2: --accent: #22d3ee --glow: rgba(34,211,238,0.3) (cyan)
|
|
111
|
+
Card 3: --accent: #f59e0b --glow: rgba(245,158,11,0.3) (amber)
|
|
112
|
+
Card 4: --accent: #f43f5e --glow: rgba(244,63,94,0.3) (rose)
|
|
121
113
|
```
|
|
122
114
|
|
|
123
|
-
|
|
115
|
+
**Gradient border** on the active card only:
|
|
116
|
+
```css
|
|
117
|
+
.card[data-depth="0"] {
|
|
118
|
+
box-shadow:
|
|
119
|
+
0 0 0 1.5px var(--accent),
|
|
120
|
+
0 0 60px var(--glow),
|
|
121
|
+
0 32px 80px rgba(0,0,0,0.6);
|
|
122
|
+
}
|
|
123
|
+
.card[data-depth="1"],
|
|
124
|
+
.card[data-depth="2"],
|
|
125
|
+
.card[data-depth="3"] {
|
|
126
|
+
box-shadow: 0 0 0 1px rgba(255,255,255,0.06);
|
|
127
|
+
}
|
|
128
|
+
```
|
|
124
129
|
|
|
125
|
-
|
|
130
|
+
**Typography:**
|
|
131
|
+
```css
|
|
132
|
+
font-family: -apple-system, 'SF Pro Display', 'Helvetica Neue', sans-serif;
|
|
133
|
+
font-family: ui-monospace, 'Cascadia Code', 'Fira Code', monospace; /* code only */
|
|
134
|
+
```
|
|
126
135
|
|
|
127
136
|
---
|
|
128
137
|
|
|
129
|
-
###
|
|
130
|
-
|
|
131
|
-
Full-width header above the cards:
|
|
132
|
-
- Large environment name: `font-size: clamp(2rem, 5vw, 4rem)`, `font-weight: 800`, white with a subtle purple text-shadow glow: `text-shadow: 0 0 40px rgba(168,85,247,0.4)`
|
|
133
|
-
- Below: one sentence tagline in `#94a3b8`
|
|
134
|
-
- Top-right: a `⬡ PRIME INTELLECT` badge — `background: rgba(168,85,247,0.1)`, `border: 1px solid rgba(168,85,247,0.3)`, `color: #a855f7`, `border-radius: 6px`, `padding: 4px 12px`, `font-size: 0.7rem`, `letter-spacing: 0.12em`
|
|
135
|
-
- Background: `radial-gradient(ellipse at 30% 0%, rgba(168,85,247,0.12) 0%, transparent 60%), radial-gradient(ellipse at 80% 100%, rgba(34,211,238,0.06) 0%, transparent 50%)`
|
|
136
|
-
- A thin `border-bottom: 1px solid #1e293b` separates the hero from the cards
|
|
137
|
-
|
|
138
|
-
On page load: env name fades + slides up 16px (`animation: heroIn 0.6s ease-out`). Tagline follows 150ms later.
|
|
138
|
+
### Card Content Specs
|
|
139
139
|
|
|
140
|
-
|
|
140
|
+
Each card has the same shell structure:
|
|
141
141
|
|
|
142
|
-
|
|
142
|
+
```
|
|
143
|
+
┌────────────────────────────────────────────┐
|
|
144
|
+
│ LABEL (0.65rem, accent, caps, tracking) │
|
|
145
|
+
│ TITLE (1.6rem, 700, white) │
|
|
146
|
+
│ ───────────────────────────────────── │
|
|
147
|
+
│ │
|
|
148
|
+
│ [BODY — unique per card, see below] │
|
|
149
|
+
│ │
|
|
150
|
+
│ ──────────────────────────────────────── │
|
|
151
|
+
│ [progress dots] [Continue → button] │
|
|
152
|
+
└────────────────────────────────────────────┘
|
|
153
|
+
```
|
|
143
154
|
|
|
144
|
-
**
|
|
155
|
+
**Progress dots:** 4 dots, `width: 7px height: 7px border-radius: 50%`. Active dot: accent color, `width: 20px border-radius: 4px` (pill). Inactive: `rgba(255,255,255,0.15)`. Transition: `width 0.3s ease`.
|
|
145
156
|
|
|
146
|
-
**
|
|
147
|
-
- A paragraph of prose describing what task this environment trains a model to do — written in plain English, no jargon beyond what the researcher already knows
|
|
148
|
-
- GitHub link (if found): a pill button — `background: rgba(168,85,247,0.1)`, `border: 1px solid rgba(168,85,247,0.3)`, hover brightens, shows `↗` arrow. If no GitHub link found, omit this element entirely.
|
|
149
|
-
- Stat chips row at the bottom: 3–5 pill badges (e.g. `64 prompts`, `2 rewards`, `single-turn`, `math reasoning`). Each chip: `background: rgba(168,85,247,0.08)`, `border: 1px solid rgba(168,85,247,0.2)`, `color: #c4b5fd`, `border-radius: 99px`, `padding: 3px 10px`, `font-size: 0.72rem`
|
|
157
|
+
**Continue button:** `background: var(--accent)`, `color: #000`, `font-weight: 700`, `font-size: 0.82rem`, `border-radius: 99px`, `padding: 8px 20px`, `border: none`, `cursor: pointer`. Hover: `opacity: 0.85`.
|
|
150
158
|
|
|
151
159
|
---
|
|
152
160
|
|
|
153
|
-
|
|
161
|
+
#### Card 1 Body — Environment
|
|
154
162
|
|
|
155
|
-
**
|
|
163
|
+
- **Env name**: `font-size: 1.6rem`, `font-weight: 800`, white
|
|
164
|
+
- **Description**: 3–4 sentences, `font-size: 0.9rem`, `color: #94a3b8`, `line-height: 1.65`, `margin: 14px 0`
|
|
165
|
+
- **GitHub link** (only if URL was found in source): pill button — `background: rgba(255,255,255,0.05)`, `border: 1px solid rgba(255,255,255,0.1)`, `color: #e2e8f0`, `border-radius: 99px`, `padding: 5px 14px`, `font-size: 0.78rem`. Shows `↗ GitHub`. Hover: `border-color: var(--accent)`, `color: var(--accent)`. If no URL found, this element does not exist.
|
|
166
|
+
- **Stat chips**: row of 3–5 pills. `background: rgba(168,85,247,0.08)`, `border: 1px solid rgba(168,85,247,0.2)`, `color: #c4b5fd`, `border-radius: 99px`, `padding: 4px 11px`, `font-size: 0.73rem`
|
|
156
167
|
|
|
157
|
-
|
|
168
|
+
---
|
|
158
169
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
```
|
|
163
|
-
or
|
|
170
|
+
#### Card 2 Body — Dataset
|
|
171
|
+
|
|
172
|
+
**Source line** — monospace, one line:
|
|
164
173
|
```
|
|
165
|
-
|
|
174
|
+
HuggingFace · openai/gsm8k · train split
|
|
166
175
|
```
|
|
167
|
-
Style: `background: rgba(34,211,238,0.05)`, `border-left: 3px solid #22d3ee`, `padding: 8px 14px`, `border-radius: 0 6px 6px 0`,
|
|
168
|
-
|
|
169
|
-
**② Field anatomy** — a compact table showing every field in a data row:
|
|
170
|
-
|
|
171
|
-
| Field | Type | Description |
|
|
172
|
-
|-------|------|-------------|
|
|
176
|
+
Style: `background: rgba(34,211,238,0.05)`, `border-left: 3px solid #22d3ee`, `padding: 8px 14px`, `border-radius: 0 6px 6px 0`, `font-size: 0.82rem`, `color: #67e8f9`
|
|
173
177
|
|
|
174
|
-
|
|
178
|
+
**Field list** — compact, beneath the source line:
|
|
179
|
+
Each field on one line: `field_name` in cyan monospace + `·` + type/purpose in muted text. `font-size: 0.8rem`, `line-height: 1.8`.
|
|
175
180
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
-
|
|
181
|
+
**Example row** — the main content:
|
|
182
|
+
A clean structured display. Label: `EXAMPLE ROW` in `0.65rem` cyan caps. Then each field:
|
|
183
|
+
- Field name: cyan monospace, `font-size: 0.78rem`
|
|
184
|
+
- Value: white, `font-size: 0.82rem`, `line-height: 1.5`
|
|
185
|
+
- Long text values (prompts, answers): wrapped in a soft box — `background: rgba(255,255,255,0.03)`, `border-radius: 6px`, `padding: 8px 12px`, `margin-top: 2px`
|
|
186
|
+
- Full content — never truncated
|
|
179
187
|
|
|
180
188
|
---
|
|
181
189
|
|
|
182
|
-
|
|
190
|
+
#### Card 3 Body — Rewards
|
|
183
191
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
**Body:** For each reward function, a reward block:
|
|
192
|
+
For each reward function, a compact block:
|
|
187
193
|
|
|
188
194
|
```
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
│ Checks that response contains <answer>...</ │
|
|
194
|
-
│ answer> tags and inner content is numeric │
|
|
195
|
-
│ │
|
|
196
|
-
│ SCORES 0 if tags missing or content non-num │
|
|
197
|
-
│ SCORES 1 if tags present and content is int │
|
|
198
|
-
└─────────────────────────────────────────────────┘
|
|
195
|
+
format_reward [float]
|
|
196
|
+
Checks response contains <answer>…</answer>
|
|
197
|
+
✗ 0 tags absent or inner content non-numeric
|
|
198
|
+
✓ 1 tags present, content is a valid integer
|
|
199
199
|
```
|
|
200
200
|
|
|
201
|
-
-
|
|
202
|
-
- `[float]`
|
|
203
|
-
-
|
|
204
|
-
-
|
|
205
|
-
- Block background:
|
|
206
|
-
- Blocks separated by `12px` gap
|
|
201
|
+
- Name: monospace, `color: #fcd34d`, `font-weight: 600`, `font-size: 0.88rem`
|
|
202
|
+
- `[float]` badge: `font-size: 0.68rem`, `color: #6b7280`, right-aligned via `display: flex justify-content: space-between`
|
|
203
|
+
- Description line: `color: #94a3b8`, `font-size: 0.8rem`, `margin: 4px 0 6px`
|
|
204
|
+
- `✗ 0` / `✓ 1` lines: `font-size: 0.78rem`, `✗` in `#f87171`, `✓` in `#4ade80`, text in `#94a3b8`
|
|
205
|
+
- Block: `background: rgba(245,158,11,0.05)`, `border: 1px solid rgba(245,158,11,0.12)`, `border-radius: 10px`, `padding: 12px 14px`, `margin-bottom: 10px`
|
|
207
206
|
|
|
208
|
-
If
|
|
207
|
+
If composite formula exists — after all reward blocks:
|
|
209
208
|
```
|
|
210
209
|
background: rgba(245,158,11,0.08)
|
|
211
|
-
border: 1px solid rgba(245,158,11,0.
|
|
212
|
-
border-radius: 8px
|
|
213
|
-
|
|
214
|
-
font-family: monospace
|
|
215
|
-
color: #fcd34d
|
|
216
|
-
font-size: 0.9rem
|
|
210
|
+
border: 1px solid rgba(245,158,11,0.25)
|
|
211
|
+
border-radius: 8px · padding: 10px 14px
|
|
212
|
+
font-family: monospace · color: #fcd34d · font-size: 0.85rem
|
|
217
213
|
```
|
|
218
214
|
|
|
219
215
|
---
|
|
220
216
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
**Header:** `🎯 Rollout` label.
|
|
217
|
+
#### Card 4 Body — Rollout
|
|
224
218
|
|
|
225
|
-
|
|
219
|
+
Numbered steps. Each step:
|
|
226
220
|
|
|
227
221
|
```
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
The
|
|
231
|
-
|
|
232
|
-
math problem step by step..." followed by
|
|
233
|
-
the problem text as the user message.
|
|
222
|
+
01
|
|
223
|
+
Data → Prompt
|
|
224
|
+
The problem field is inserted into "Solve step by step…"
|
|
225
|
+
as the user message. No system prompt.
|
|
234
226
|
```
|
|
235
227
|
|
|
236
|
-
-
|
|
237
|
-
-
|
|
238
|
-
-
|
|
239
|
-
-
|
|
240
|
-
- Between steps:
|
|
228
|
+
- Number: `font-size: 2rem`, `font-weight: 800`, `color: var(--accent)`, `opacity: 0.25`, `line-height: 1`
|
|
229
|
+
- Title: `font-size: 0.88rem`, `font-weight: 700`, `color: #f1f5f9`, `margin: 2px 0`
|
|
230
|
+
- Description: `font-size: 0.8rem`, `color: #94a3b8`, `line-height: 1.55`
|
|
231
|
+
- Left connector: `border-left: 2px solid rgba(244,63,94,0.15)`, `padding-left: 16px`, `margin-left: 12px`, except on last step
|
|
232
|
+
- Between steps: `margin-bottom: 16px`
|
|
241
233
|
|
|
242
|
-
|
|
243
|
-
1. **Data → Prompt** — how the raw row becomes the model's input
|
|
244
|
-
2. **Model response** — what the model is expected to produce (format, structure)
|
|
245
|
-
3. **Reward evaluation** — how each reward function is called and what it receives
|
|
246
|
-
4. **Score computation** — how the final score is derived
|
|
247
|
-
5. **Perfect vs zero** — what a max-score response looks like vs a zero-score response (concrete examples if possible)
|
|
234
|
+
Always 5 steps: Data→Prompt · Model Response · Reward Evaluation · Score Computation · Perfect vs Zero.
|
|
248
235
|
|
|
249
236
|
---
|
|
250
237
|
|
|
251
|
-
###
|
|
252
|
-
|
|
253
|
-
All guarded by `@media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation: none !important; } }`.
|
|
238
|
+
### Reveal Animation
|
|
254
239
|
|
|
255
240
|
```css
|
|
256
|
-
@keyframes
|
|
257
|
-
|
|
258
|
-
to { opacity: 1; transform: translateY(0); }
|
|
241
|
+
@keyframes flyOut {
|
|
242
|
+
to { transform: translateX(-120%) rotate(-8deg); opacity: 0; }
|
|
259
243
|
}
|
|
260
|
-
@keyframes
|
|
261
|
-
from {
|
|
262
|
-
to {
|
|
244
|
+
@keyframes riseUp {
|
|
245
|
+
from { transform: scale(0.96) translateY(18px); opacity: 0.65; }
|
|
246
|
+
to { transform: scale(1) translateY(0); opacity: 1; }
|
|
263
247
|
}
|
|
264
248
|
```
|
|
265
249
|
|
|
266
|
-
|
|
250
|
+
On click:
|
|
251
|
+
1. Active card: `flyOut 0.45s cubic-bezier(0.4, 0, 0.2, 1) forwards`
|
|
252
|
+
2. After 80ms: next card transitions from depth-1 styles to depth-0 styles — `riseUp 0.5s cubic-bezier(0.34, 1.56, 0.64, 1)` (spring overshoot)
|
|
253
|
+
3. All remaining cards shift their `data-depth` attributes down by 1
|
|
254
|
+
4. Progress dots update with a `0.3s` width transition
|
|
267
255
|
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
### JavaScript (inline, vanilla)
|
|
271
|
-
|
|
272
|
-
```js
|
|
273
|
-
// Card hover glow
|
|
274
|
-
document.querySelectorAll('.card').forEach(card => {
|
|
275
|
-
card.addEventListener('mousemove', (e) => {
|
|
276
|
-
const rect = card.getBoundingClientRect();
|
|
277
|
-
const x = ((e.clientX - rect.left) / rect.width) * 100;
|
|
278
|
-
const y = ((e.clientY - rect.top) / rect.height) * 100;
|
|
279
|
-
card.style.setProperty('--mouse-x', x + '%');
|
|
280
|
-
card.style.setProperty('--mouse-y', y + '%');
|
|
281
|
-
});
|
|
282
|
-
});
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
Add a radial gradient spotlight that follows the mouse inside each card:
|
|
256
|
+
Guard all animations:
|
|
286
257
|
```css
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
position: absolute;
|
|
290
|
-
inset: 0;
|
|
291
|
-
border-radius: 16px;
|
|
292
|
-
background: radial-gradient(
|
|
293
|
-
circle at var(--mouse-x, 50%) var(--mouse-y, 50%),
|
|
294
|
-
rgba(255,255,255,0.03) 0%,
|
|
295
|
-
transparent 60%
|
|
296
|
-
);
|
|
297
|
-
pointer-events: none;
|
|
258
|
+
@media (prefers-reduced-motion: reduce) {
|
|
259
|
+
*, *::before, *::after { animation: none !important; transition: none !important; }
|
|
298
260
|
}
|
|
299
261
|
```
|
|
300
262
|
|
|
301
263
|
---
|
|
302
264
|
|
|
303
|
-
###
|
|
265
|
+
### Page Chrome
|
|
304
266
|
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
267
|
+
**Top:** Environment name in small muted text, centered, `font-size: 0.75rem`, `color: #334155`, `letter-spacing: 0.08em`, `margin-bottom: 32px`.
|
|
268
|
+
|
|
269
|
+
**Bottom:** `Generated by Claude · Prime Intellect · <timestamp>` — `font-size: 0.68rem`, `color: #1e293b`, `margin-top: 28px`.
|
|
308
270
|
|
|
309
|
-
|
|
271
|
+
Nothing else. No nav, no sidebar, no header. The cards are the whole UI.
|
|
310
272
|
|
|
311
273
|
---
|
|
312
274
|
|
|
313
275
|
## Step 3 — Confirm and report
|
|
314
276
|
|
|
315
|
-
After writing the file
|
|
316
|
-
-
|
|
277
|
+
After writing the file:
|
|
278
|
+
- Give the full path and `open environment_overview.html`
|
|
317
279
|
- Two sentences: what the environment trains and how it scores
|
|
318
280
|
|
|
319
281
|
## Anti-patterns
|
|
320
282
|
|
|
321
|
-
- Do not
|
|
322
|
-
- Do not
|
|
323
|
-
- Do not
|
|
324
|
-
- Do not
|
|
325
|
-
- Do not
|
|
326
|
-
- Do not add tabs,
|
|
283
|
+
- Do not dump all content at once — each card is one focused chapter
|
|
284
|
+
- Do not truncate the example row — every field, every value, in full
|
|
285
|
+
- Do not invent a GitHub URL — only include it if found in the source
|
|
286
|
+
- Do not hallucinate reward weights, field names, or dataset content
|
|
287
|
+
- Do not skip helper modules — they contain the core reward logic
|
|
288
|
+
- Do not add tabs, sidebars, scroll-within-cards, or any structure beyond the 4-card deck
|
|
289
|
+
- Do not use a light theme — dark only
|
|
327
290
|
- Do not use Inter, Roboto, or any Google Font
|
|
328
|
-
- If a GitHub URL is not found in the source, omit the GitHub button entirely — never invent a URL
|