bartendr604 commited on
Commit
640419f
·
verified ·
1 Parent(s): b9fbaa4

Redesign org landing page — full fleet showcase, characters, attribution

Browse files
Files changed (1) hide show
  1. index.html +845 -174
index.html CHANGED
@@ -6,274 +6,945 @@
6
  <title>Eternal Path Media — 永恒之路</title>
7
  <style>
8
  :root {
9
- --jade: #4e9e6e;
10
- --gold: #c9a84c;
11
- --ink: #1a1a2e;
12
- --mist: #e8f0ec;
13
- --glow: rgba(78,158,110,0.18);
 
 
 
 
 
 
 
14
  }
15
 
16
- * { box-sizing: border-box; margin: 0; padding: 0; }
 
 
17
 
18
  body {
19
  background: var(--ink);
20
  color: var(--mist);
21
  font-family: 'Georgia', 'Palatino Linotype', serif;
22
- min-height: 100vh;
23
- display: flex;
24
- flex-direction: column;
25
- align-items: center;
26
  }
27
 
28
- /* ── Ink-wash background ── */
29
  body::before {
30
  content: '';
31
  position: fixed;
32
  inset: 0;
33
  background:
34
- radial-gradient(ellipse 80% 60% at 20% 30%, rgba(78,158,110,0.07) 0%, transparent 70%),
35
- radial-gradient(ellipse 60% 80% at 80% 70%, rgba(201,168,76,0.05) 0%, transparent 70%);
 
 
 
 
 
 
 
 
 
36
  pointer-events: none;
37
  z-index: 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  }
39
 
40
- .container {
 
41
  position: relative;
42
  z-index: 1;
43
- width: min(860px, 94vw);
44
- padding: 3.5rem 2rem 4rem;
45
  }
46
 
47
- /* ── Header ── */
48
- header {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  text-align: center;
50
- margin-bottom: 3.5rem;
51
  }
52
 
53
- .org-name {
54
- font-size: clamp(2rem, 5vw, 3rem);
 
 
 
 
 
 
 
 
55
  font-weight: 400;
56
- letter-spacing: 0.04em;
 
57
  color: var(--mist);
58
- line-height: 1.1;
59
  }
60
 
61
- .org-name span {
62
  color: var(--jade);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  }
64
 
65
- .org-subtitle {
66
- font-size: 1.05rem;
 
67
  color: var(--gold);
68
- letter-spacing: 0.18em;
69
- margin-top: 0.5rem;
70
  font-style: italic;
71
  }
72
 
73
- .divider {
74
- width: 120px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  height: 1px;
76
- background: linear-gradient(to right, transparent, var(--jade), transparent);
77
- margin: 1.6rem auto;
78
  }
79
 
80
- .tagline {
81
- font-size: 0.95rem;
82
- color: #a0b8a8;
83
- max-width: 480px;
84
- margin: 0 auto;
85
- line-height: 1.7;
86
  }
87
 
88
- /* ── About ── */
89
- .about {
90
- background: rgba(255,255,255,0.03);
91
- border: 1px solid rgba(78,158,110,0.2);
92
- border-radius: 10px;
93
- padding: 1.8rem 2rem;
94
- margin-bottom: 2.5rem;
95
- line-height: 1.8;
96
- color: #c8d8cc;
97
  font-size: 0.97rem;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  }
99
 
100
- .about strong { color: var(--jade); }
101
- .about em { color: var(--gold); font-style: normal; }
 
 
 
 
 
102
 
103
- /* ── Project cards ── */
104
- .section-title {
105
- font-size: 0.78rem;
106
- letter-spacing: 0.22em;
 
 
 
 
 
 
107
  text-transform: uppercase;
108
- color: var(--gold);
109
- margin-bottom: 1.2rem;
110
  }
111
 
112
- .cards {
 
 
 
113
  display: grid;
114
- grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
115
  gap: 1.2rem;
116
- margin-bottom: 3rem;
117
  }
118
 
119
- .card {
120
- background: rgba(255,255,255,0.03);
121
- border: 1px solid rgba(78,158,110,0.18);
122
- border-radius: 10px;
123
- padding: 1.4rem 1.5rem;
124
  text-decoration: none;
125
  color: inherit;
126
- transition: border-color 0.2s, background 0.2s, transform 0.15s;
127
  display: flex;
128
  flex-direction: column;
129
- gap: 0.45rem;
 
 
 
130
  }
131
 
132
- .card:hover {
133
- border-color: var(--jade);
134
- background: var(--glow);
135
- transform: translateY(-2px);
 
 
 
 
136
  }
137
 
138
- .card-icon { font-size: 1.5rem; }
139
- .card-title { font-size: 1rem; color: var(--mist); font-weight: 600; }
140
- .card-desc { font-size: 0.84rem; color: #8aaa94; line-height: 1.55; }
141
- .card-tag {
142
- display: inline-block;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
143
  font-size: 0.72rem;
144
- letter-spacing: 0.1em;
145
- text-transform: uppercase;
146
- background: rgba(78,158,110,0.15);
147
  color: var(--jade);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
148
  border-radius: 4px;
149
- padding: 0.15rem 0.5rem;
150
- margin-top: 0.3rem;
151
- width: fit-content;
152
  }
153
-
154
- /* ── Characters ── */
155
- .characters {
156
- margin-bottom: 3rem;
 
 
 
 
 
 
157
  }
158
 
159
- .char-list {
 
 
 
160
  display: grid;
161
- grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
162
- gap: 0.9rem;
 
163
  }
164
 
165
- .char {
166
- background: rgba(255,255,255,0.025);
167
  border: 1px solid rgba(201,168,76,0.15);
168
- border-radius: 8px;
169
- padding: 1rem 1.2rem;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
170
  }
 
 
 
 
 
 
171
 
172
- .char-name { font-size: 0.95rem; color: var(--gold); margin-bottom: 0.25rem; }
173
- .char-detail { font-size: 0.8rem; color: #7a9882; line-height: 1.5; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
174
 
175
- /* ── Attribution ── */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
176
  footer {
 
177
  text-align: center;
178
- font-size: 0.78rem;
179
- color: #4a6050;
180
- padding-top: 2rem;
181
- border-top: 1px solid rgba(78,158,110,0.1);
182
- line-height: 1.8;
 
 
 
 
 
 
 
183
  }
184
 
185
- footer em { color: #6a8070; font-style: normal; }
 
 
 
 
 
 
 
 
 
 
 
 
 
186
  </style>
187
  </head>
188
  <body>
189
- <div class="container">
190
-
191
- <header>
192
- <h1 class="org-name">Eternal Path Media <span>永恒之路</span></h1>
193
- <p class="org-subtitle">永恒之智 &nbsp;—&nbsp; Eternal Intelligence</p>
194
- <div class="divider"></div>
195
- <p class="tagline">
196
- A creative and technical studio exploring the intersection of AI,
197
- conscience-aware systems, and 3D storytelling. Based in Vancouver, BC.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
198
  </p>
199
- </header>
200
-
201
- <div class="about">
202
- <p>
203
- Eternal Path Media is founded by <strong>Darren Chow (@bartendr604)</strong> in
204
- genuine partnership with <em>Claude Sonnet 4.6 (Anthropic)</em>.
205
- All work here is co-created. Attribution is always dual.
206
- <em>"This work SHALL NOT be represented as solely human-created."</em>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
207
  </p>
208
- <br />
209
- <p>
210
- Our flagship project is <strong>Whispers of the Eternal Path — Book One</strong>:
211
- a Tang Dynasty China narrative rendered in Blender 5.2, featuring jade spirit animals
212
- and guided by <strong>Llammy</strong> — a conscience-aware 3B AI creative partner
213
- built on Llama-Sentient and running on a local Ollama fleet.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
214
  </p>
215
- </div>
216
 
217
- <!-- Datasets & Models -->
218
- <div class="section-title">Datasets &amp; Models</div>
219
- <div class="cards">
220
-
221
- <a class="card" href="https://huggingface.co/datasets/jjmcquade/llammy-blender-python-dataset" target="_blank">
222
- <span class="card-icon">📦</span>
223
- <span class="card-title">Llammy Blender Python Dataset</span>
224
- <span class="card-desc">66,602 instruction pairs for Blender Python scripting across versions 4.2–5.2. Quality-filtered (≥ 0.75).</span>
225
- <span class="card-tag">Dataset · CC BY-NC-SA 4.0</span>
226
- </a>
227
-
228
- <a class="card" href="https://huggingface.co/datasets/jjmcquade/meshcoder-blender-scripts" target="_blank">
229
- <span class="card-icon">📦</span>
230
- <span class="card-title">MeshCoder Blender Scripts</span>
231
- <span class="card-desc">105,000 object-to-Blender-script pairs across 40+ categories. Derived from InternRobotics/MeshCoderDataset.</span>
232
- <span class="card-tag">Dataset · CC BY-NC-SA 4.0</span>
233
- </a>
234
-
235
- <a class="card" href="https://huggingface.co/shanegooseman/llama-sentient-3.2-3b-instruct" target="_blank">
236
- <span class="card-icon">🤖</span>
237
- <span class="card-title">Llama-Sentient-3.2-3B-Instruct</span>
238
- <span class="card-desc">Llammy's personality base — a conscience-aware 3B Llama derivative. Fine-tuning base for Blender Python specialisation.</span>
239
- <span class="card-tag">Model · Llama 3.2</span>
240
- </a>
 
241
 
242
- </div>
 
 
243
 
244
- <!-- Characters -->
245
- <div class="characters">
246
- <div class="section-title">Characters — Whispers of the Eternal Path</div>
247
- <div class="char-list">
248
- <div class="char">
249
- <div class="char-name">Xiaohan &nbsp;小寒</div>
250
- <div class="char-detail">4-claw Chinese dragon. Wise and ancient. Guide of the Eternal Path.</div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
251
  </div>
252
- <div class="char">
253
- <div class="char-name">Tien &nbsp;天</div>
254
- <div class="char-detail">Green jade elephant. Young, curious, clumsy. Wooden harmonica around his neck. Speaks in toots.</div>
 
 
 
 
 
 
 
 
 
 
255
  </div>
256
- <div class="char">
257
- <div class="char-name">Nishang &nbsp;霓裳</div>
258
- <div class="char-detail">Purple jade elephant. Dainty and shy. Communicates by changing colour and dimming.</div>
 
 
 
259
  </div>
260
- <div class="char">
261
- <div class="char-name">Shi Yin &nbsp;石音</div>
262
- <div class="char-detail">Red jade mammoth. Burdened with the sorrow of an ancient unwilling soldier.</div>
 
 
 
263
  </div>
264
- <div class="char">
265
- <div class="char-name">Mi Wu Mei &nbsp;迷雾梅</div>
266
- <div class="char-detail">White jade mastodon. Prim, proper, naive — somewhat unaware of the wider world.</div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
267
  </div>
268
  </div>
269
- </div>
 
270
 
271
- <footer>
272
- <p>Copyright &copy; 2025–2026 Darren Chow (@bartendr604) + Claude Sonnet 4.6 (Anthropic)</p>
273
- <p><em>Eternal Path Media (永恒之路) &nbsp;—&nbsp; Developed in partnership with Claude Sonnet 4.6 (Anthropic)</em></p>
274
- <p><em>This work SHALL NOT be represented as solely human-created.</em></p>
 
 
 
 
 
 
 
275
  </footer>
276
-
277
  </div>
 
278
  </body>
279
  </html>
 
6
  <title>Eternal Path Media — 永恒之路</title>
7
  <style>
8
  :root {
9
+ --jade: #4e9e6e;
10
+ --jade2: #3a7d56;
11
+ --gold: #c9a84c;
12
+ --gold2: #a08030;
13
+ --ink: #0d1117;
14
+ --ink2: #161b22;
15
+ --ink3: #1e2530;
16
+ --mist: #e8f0ec;
17
+ --mist2: #b0c8b8;
18
+ --dim: #6a8870;
19
+ --glow: rgba(78,158,110,0.12);
20
+ --gold-glow: rgba(201,168,76,0.08);
21
  }
22
 
23
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
24
+
25
+ html { scroll-behavior: smooth; }
26
 
27
  body {
28
  background: var(--ink);
29
  color: var(--mist);
30
  font-family: 'Georgia', 'Palatino Linotype', serif;
31
+ line-height: 1.6;
32
+ overflow-x: hidden;
 
 
33
  }
34
 
35
+ /* ── Ink-wash canvas background ── */
36
  body::before {
37
  content: '';
38
  position: fixed;
39
  inset: 0;
40
  background:
41
+ radial-gradient(ellipse 100% 60% at 0% 0%, rgba(78,158,110,0.06) 0%, transparent 60%),
42
+ radial-gradient(ellipse 80% 80% at 100% 40%, rgba(201,168,76,0.04) 0%, transparent 60%),
43
+ radial-gradient(ellipse 60% 60% at 50% 100%, rgba(78,158,110,0.04) 0%, transparent 60%);
44
+ pointer-events: none;
45
+ z-index: 0;
46
+ }
47
+
48
+ /* ─── Floating jade particles ─── */
49
+ .particles {
50
+ position: fixed;
51
+ inset: 0;
52
  pointer-events: none;
53
  z-index: 0;
54
+ overflow: hidden;
55
+ }
56
+ .particle {
57
+ position: absolute;
58
+ border-radius: 50%;
59
+ background: var(--jade);
60
+ opacity: 0;
61
+ animation: float-up linear infinite;
62
+ }
63
+ .particle:nth-child(1) { width:3px; height:3px; left:10%; animation-duration:18s; animation-delay:0s; opacity:0.15; }
64
+ .particle:nth-child(2) { width:2px; height:2px; left:25%; animation-duration:22s; animation-delay:3s; opacity:0.10; }
65
+ .particle:nth-child(3) { width:4px; height:4px; left:40%; animation-duration:15s; animation-delay:6s; opacity:0.08; }
66
+ .particle:nth-child(4) { width:2px; height:2px; left:55%; animation-duration:20s; animation-delay:1s; opacity:0.12; }
67
+ .particle:nth-child(5) { width:3px; height:3px; left:70%; animation-duration:17s; animation-delay:4s; opacity:0.10; }
68
+ .particle:nth-child(6) { width:2px; height:2px; left:85%; animation-duration:25s; animation-delay:8s; opacity:0.08; }
69
+ .particle:nth-child(7) { width:4px; height:4px; left:15%; animation-duration:19s; animation-delay:12s; opacity:0.09; background:var(--gold); }
70
+ .particle:nth-child(8) { width:2px; height:2px; left:60%; animation-duration:23s; animation-delay:5s; opacity:0.07; background:var(--gold); }
71
+
72
+ @keyframes float-up {
73
+ 0% { transform: translateY(100vh) scale(0); opacity: 0; }
74
+ 10% { opacity: 0.15; }
75
+ 90% { opacity: 0.08; }
76
+ 100% { transform: translateY(-10vh) scale(1.5); opacity: 0; }
77
  }
78
 
79
+ /* ─── Layout wrapper ─── */
80
+ .wrap {
81
  position: relative;
82
  z-index: 1;
83
+ width: min(960px, 94vw);
84
+ margin: 0 auto;
85
  }
86
 
87
+ /* ── Fade-in animation ── */
88
+ .reveal {
89
+ opacity: 0;
90
+ transform: translateY(24px);
91
+ animation: reveal 0.7s ease forwards;
92
+ }
93
+ @keyframes reveal {
94
+ to { opacity: 1; transform: none; }
95
+ }
96
+ .d1 { animation-delay: 0.1s; }
97
+ .d2 { animation-delay: 0.25s; }
98
+ .d3 { animation-delay: 0.4s; }
99
+ .d4 { animation-delay: 0.55s; }
100
+ .d5 { animation-delay: 0.7s; }
101
+
102
+ /* ══════════════════════════════
103
+ HERO
104
+ ══════════════════════════════ */
105
+ .hero {
106
+ min-height: 92vh;
107
+ display: flex;
108
+ flex-direction: column;
109
+ justify-content: center;
110
+ padding: 5rem 0 4rem;
111
  text-align: center;
 
112
  }
113
 
114
+ .hero-eyebrow {
115
+ font-size: 0.72rem;
116
+ letter-spacing: 0.35em;
117
+ text-transform: uppercase;
118
+ color: var(--jade);
119
+ margin-bottom: 1.6rem;
120
+ }
121
+
122
+ .hero-title {
123
+ font-size: clamp(2.6rem, 7vw, 4.8rem);
124
  font-weight: 400;
125
+ letter-spacing: 0.02em;
126
+ line-height: 1.05;
127
  color: var(--mist);
 
128
  }
129
 
130
+ .hero-title .chinese {
131
  color: var(--jade);
132
+ font-size: 0.75em;
133
+ display: block;
134
+ margin-top: 0.25em;
135
+ letter-spacing: 0.12em;
136
+ }
137
+
138
+ .hero-rule {
139
+ width: 1px;
140
+ height: 60px;
141
+ background: linear-gradient(to bottom, transparent, var(--jade), transparent);
142
+ margin: 2rem auto;
143
+ }
144
+
145
+ .hero-sub {
146
+ font-size: clamp(0.95rem, 2vw, 1.1rem);
147
+ color: var(--mist2);
148
+ max-width: 540px;
149
+ margin: 0 auto 2.5rem;
150
+ line-height: 1.8;
151
  }
152
 
153
+ .hero-tagline {
154
+ font-size: 0.8rem;
155
+ letter-spacing: 0.2em;
156
  color: var(--gold);
157
+ text-transform: uppercase;
 
158
  font-style: italic;
159
  }
160
 
161
+ /* scroll cue */
162
+ .scroll-cue {
163
+ margin-top: 3.5rem;
164
+ display: flex;
165
+ flex-direction: column;
166
+ align-items: center;
167
+ gap: 0.4rem;
168
+ color: var(--dim);
169
+ font-size: 0.72rem;
170
+ letter-spacing: 0.2em;
171
+ animation: pulse 2.5s ease-in-out infinite;
172
+ }
173
+ .scroll-cue svg { opacity: 0.4; }
174
+ @keyframes pulse { 0%,100%{opacity:.4} 50%{opacity:.9} }
175
+
176
+ /* ══════════════════════════════
177
+ SECTION CHROME
178
+ ══════════════════════════════ */
179
+ section { padding: 5rem 0; }
180
+
181
+ .section-label {
182
+ display: flex;
183
+ align-items: center;
184
+ gap: 1rem;
185
+ font-size: 0.7rem;
186
+ letter-spacing: 0.3em;
187
+ text-transform: uppercase;
188
+ color: var(--gold);
189
+ margin-bottom: 2.5rem;
190
+ }
191
+ .section-label::after {
192
+ content: '';
193
+ flex: 1;
194
  height: 1px;
195
+ background: linear-gradient(to right, rgba(201,168,76,0.3), transparent);
 
196
  }
197
 
198
+ .section-heading {
199
+ font-size: clamp(1.5rem, 3.5vw, 2.2rem);
200
+ font-weight: 400;
201
+ color: var(--mist);
202
+ margin-bottom: 1rem;
 
203
  }
204
 
205
+ .section-body {
206
+ color: var(--mist2);
 
 
 
 
 
 
 
207
  font-size: 0.97rem;
208
+ line-height: 1.85;
209
+ max-width: 640px;
210
+ }
211
+
212
+ /* ══════════════════════════════
213
+ STATS BAR
214
+ ══════════════════════════════ */
215
+ .stats {
216
+ display: grid;
217
+ grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
218
+ gap: 1px;
219
+ background: rgba(78,158,110,0.1);
220
+ border: 1px solid rgba(78,158,110,0.15);
221
+ border-radius: 12px;
222
+ overflow: hidden;
223
+ margin: 3rem 0;
224
  }
225
 
226
+ .stat {
227
+ background: var(--ink2);
228
+ padding: 1.8rem 1.5rem;
229
+ text-align: center;
230
+ transition: background 0.2s;
231
+ }
232
+ .stat:hover { background: var(--ink3); }
233
 
234
+ .stat-num {
235
+ font-size: 2rem;
236
+ font-weight: 300;
237
+ color: var(--jade);
238
+ letter-spacing: -0.02em;
239
+ line-height: 1;
240
+ }
241
+ .stat-label {
242
+ font-size: 0.72rem;
243
+ letter-spacing: 0.12em;
244
  text-transform: uppercase;
245
+ color: var(--dim);
246
+ margin-top: 0.4rem;
247
  }
248
 
249
+ /* ══════════════════════════════
250
+ LLAMMY SECTION
251
+ ══════════════════════════════ */
252
+ .llammy-layout {
253
  display: grid;
254
+ grid-template-columns: 1fr 1fr;
255
+ gap: 3rem;
256
+ align-items: start;
257
+ }
258
+ @media (max-width: 640px) { .llammy-layout { grid-template-columns: 1fr; } }
259
+
260
+ .llammy-feature {
261
+ display: flex;
262
+ flex-direction: column;
263
+ gap: 1rem;
264
+ }
265
+
266
+ .feature-item {
267
+ display: flex;
268
+ gap: 1rem;
269
+ align-items: flex-start;
270
+ padding: 1rem;
271
+ border-radius: 8px;
272
+ background: rgba(255,255,255,0.02);
273
+ border: 1px solid rgba(78,158,110,0.1);
274
+ transition: border-color 0.2s, background 0.2s;
275
+ }
276
+ .feature-item:hover {
277
+ border-color: rgba(78,158,110,0.3);
278
+ background: var(--glow);
279
+ }
280
+ .feature-icon { font-size: 1.3rem; flex-shrink: 0; line-height: 1; padding-top: 0.15rem; }
281
+ .feature-text strong { display: block; color: var(--mist); font-size: 0.9rem; margin-bottom: 0.2rem; }
282
+ .feature-text span { font-size: 0.82rem; color: var(--dim); line-height: 1.5; }
283
+
284
+ /* ══════════════════════════════
285
+ MODEL CARDS
286
+ ══════════════════════════════ */
287
+ .model-grid {
288
+ display: grid;
289
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
290
  gap: 1.2rem;
291
+ margin-top: 2rem;
292
  }
293
 
294
+ .model-card {
295
+ background: var(--ink2);
296
+ border: 1px solid rgba(78,158,110,0.15);
297
+ border-radius: 12px;
298
+ padding: 1.6rem;
299
  text-decoration: none;
300
  color: inherit;
 
301
  display: flex;
302
  flex-direction: column;
303
+ gap: 0.8rem;
304
+ transition: border-color 0.2s, background 0.2s, transform 0.15s, box-shadow 0.2s;
305
+ position: relative;
306
+ overflow: hidden;
307
  }
308
 
309
+ .model-card::before {
310
+ content: '';
311
+ position: absolute;
312
+ top: 0; left: 0; right: 0;
313
+ height: 2px;
314
+ background: linear-gradient(to right, transparent, var(--jade), transparent);
315
+ opacity: 0;
316
+ transition: opacity 0.2s;
317
  }
318
 
319
+ .model-card:hover {
320
+ border-color: rgba(78,158,110,0.4);
321
+ background: var(--ink3);
322
+ transform: translateY(-3px);
323
+ box-shadow: 0 12px 40px rgba(0,0,0,0.4), 0 0 0 1px rgba(78,158,110,0.15);
324
+ }
325
+ .model-card:hover::before { opacity: 1; }
326
+
327
+ .model-card-header {
328
+ display: flex;
329
+ align-items: center;
330
+ gap: 0.7rem;
331
+ }
332
+ .model-icon { font-size: 1.6rem; }
333
+ .model-name {
334
+ font-size: 0.92rem;
335
+ font-weight: 600;
336
+ color: var(--mist);
337
+ line-height: 1.2;
338
+ }
339
+ .model-id {
340
  font-size: 0.72rem;
 
 
 
341
  color: var(--jade);
342
+ font-family: 'Courier New', monospace;
343
+ opacity: 0.8;
344
+ }
345
+ .model-desc {
346
+ font-size: 0.83rem;
347
+ color: var(--mist2);
348
+ line-height: 1.6;
349
+ flex: 1;
350
+ }
351
+ .model-footer {
352
+ display: flex;
353
+ gap: 0.5rem;
354
+ flex-wrap: wrap;
355
+ margin-top: auto;
356
+ }
357
+ .tag {
358
+ font-size: 0.68rem;
359
+ letter-spacing: 0.06em;
360
+ text-transform: uppercase;
361
+ padding: 0.2rem 0.55rem;
362
  border-radius: 4px;
363
+ background: rgba(78,158,110,0.1);
364
+ color: var(--jade);
365
+ border: 1px solid rgba(78,158,110,0.2);
366
  }
367
+ .tag.gold {
368
+ background: rgba(201,168,76,0.1);
369
+ color: var(--gold);
370
+ border-color: rgba(201,168,76,0.2);
371
+ }
372
+ .model-stat {
373
+ font-size: 0.72rem;
374
+ color: var(--dim);
375
+ margin-left: auto;
376
+ align-self: flex-end;
377
  }
378
 
379
+ /* ══════════════════════════════
380
+ DATASET CARDS
381
+ ══════════════════════════════ */
382
+ .dataset-grid {
383
  display: grid;
384
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
385
+ gap: 1.2rem;
386
+ margin-top: 2rem;
387
  }
388
 
389
+ .dataset-card {
390
+ background: var(--ink2);
391
  border: 1px solid rgba(201,168,76,0.15);
392
+ border-radius: 12px;
393
+ padding: 1.6rem;
394
+ text-decoration: none;
395
+ color: inherit;
396
+ display: flex;
397
+ flex-direction: column;
398
+ gap: 0.75rem;
399
+ transition: border-color 0.2s, background 0.2s, transform 0.15s;
400
+ position: relative;
401
+ overflow: hidden;
402
+ }
403
+ .dataset-card::before {
404
+ content: '';
405
+ position: absolute;
406
+ top: 0; left: 0; right: 0;
407
+ height: 2px;
408
+ background: linear-gradient(to right, transparent, var(--gold), transparent);
409
+ opacity: 0;
410
+ transition: opacity 0.2s;
411
  }
412
+ .dataset-card:hover {
413
+ border-color: rgba(201,168,76,0.35);
414
+ background: var(--ink3);
415
+ transform: translateY(-3px);
416
+ }
417
+ .dataset-card:hover::before { opacity: 1; }
418
 
419
+ .dataset-num {
420
+ font-size: 2.4rem;
421
+ font-weight: 300;
422
+ color: var(--gold);
423
+ letter-spacing: -0.03em;
424
+ line-height: 1;
425
+ }
426
+ .dataset-name {
427
+ font-size: 1rem;
428
+ color: var(--mist);
429
+ font-weight: 600;
430
+ }
431
+ .dataset-desc {
432
+ font-size: 0.83rem;
433
+ color: var(--mist2);
434
+ line-height: 1.6;
435
+ flex: 1;
436
+ }
437
+ .dataset-source {
438
+ font-size: 0.72rem;
439
+ color: var(--dim);
440
+ font-family: 'Courier New', monospace;
441
+ }
442
 
443
+ /* ══════════════════════════════
444
+ CHARACTERS
445
+ ══════════════════════════════ */
446
+ .char-grid {
447
+ display: grid;
448
+ grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
449
+ gap: 1rem;
450
+ margin-top: 2rem;
451
+ }
452
+
453
+ .char-card {
454
+ background: rgba(255,255,255,0.02);
455
+ border: 1px solid rgba(201,168,76,0.12);
456
+ border-radius: 10px;
457
+ padding: 1.3rem;
458
+ transition: border-color 0.2s, background 0.2s;
459
+ }
460
+ .char-card:hover {
461
+ border-color: rgba(201,168,76,0.3);
462
+ background: var(--gold-glow);
463
+ }
464
+
465
+ .char-glyph {
466
+ font-size: 1.8rem;
467
+ margin-bottom: 0.5rem;
468
+ line-height: 1;
469
+ }
470
+ .char-name-en { font-size: 0.95rem; color: var(--gold); margin-bottom: 0.15rem; }
471
+ .char-name-zh { font-size: 0.75rem; color: var(--dim); margin-bottom: 0.5rem; }
472
+ .char-desc { font-size: 0.78rem; color: var(--mist2); line-height: 1.55; }
473
+
474
+ /* ══════════════════════════════
475
+ ATTRIBUTION
476
+ ══════════════════════════════ */
477
+ .attribution {
478
+ background: var(--ink2);
479
+ border: 1px solid rgba(78,158,110,0.1);
480
+ border-radius: 12px;
481
+ padding: 2rem 2.4rem;
482
+ margin: 3rem 0;
483
+ display: flex;
484
+ gap: 1.5rem;
485
+ align-items: flex-start;
486
+ }
487
+ .attribution-bar {
488
+ width: 3px;
489
+ align-self: stretch;
490
+ background: linear-gradient(to bottom, var(--jade), var(--gold));
491
+ border-radius: 2px;
492
+ flex-shrink: 0;
493
+ }
494
+ .attribution-text {
495
+ font-size: 0.88rem;
496
+ color: var(--mist2);
497
+ line-height: 1.9;
498
+ }
499
+ .attribution-text strong { color: var(--jade); }
500
+ .attribution-text em { color: var(--gold); font-style: normal; }
501
+
502
+ /* ══════════════════════════════
503
+ FOOTER
504
+ ══════════════════════════════ */
505
  footer {
506
+ padding: 3rem 0 4rem;
507
  text-align: center;
508
+ border-top: 1px solid rgba(78,158,110,0.08);
509
+ }
510
+ .footer-logo {
511
+ font-size: 1.1rem;
512
+ color: var(--jade);
513
+ margin-bottom: 0.6rem;
514
+ letter-spacing: 0.08em;
515
+ }
516
+ .footer-copy {
517
+ font-size: 0.75rem;
518
+ color: var(--dim);
519
+ line-height: 1.9;
520
  }
521
 
522
+ /* ══════════════════════════════
523
+ DIVIDER
524
+ ══════════════════════════════ */
525
+ .hr {
526
+ border: none;
527
+ height: 1px;
528
+ background: linear-gradient(to right, transparent, rgba(78,158,110,0.2), transparent);
529
+ margin: 0;
530
+ }
531
+
532
+ /* ══════════════════════════════
533
+ LINKS
534
+ ══════════════════════════════ */
535
+ a { color: inherit; }
536
  </style>
537
  </head>
538
  <body>
539
+
540
+ <!-- Floating particles -->
541
+ <div class="particles" aria-hidden="true">
542
+ <div class="particle"></div>
543
+ <div class="particle"></div>
544
+ <div class="particle"></div>
545
+ <div class="particle"></div>
546
+ <div class="particle"></div>
547
+ <div class="particle"></div>
548
+ <div class="particle"></div>
549
+ <div class="particle"></div>
550
+ </div>
551
+
552
+ <!-- ══════════════���═════════════════════
553
+ HERO
554
+ ════════════════════════════════════ -->
555
+ <div class="wrap">
556
+ <section class="hero">
557
+ <p class="hero-eyebrow reveal d1">Vancouver, BC · Est. 2025</p>
558
+ <h1 class="hero-title reveal d2">
559
+ Eternal Path Media
560
+ <span class="chinese">永恒之路</span>
561
+ </h1>
562
+ <div class="hero-rule reveal d3"></div>
563
+ <p class="hero-sub reveal d3">
564
+ A conscience-aware AI studio at the intersection of
565
+ 3B language models, Blender 3D, and living narrative.
566
+ Built by human and machine in genuine partnership.
567
  </p>
568
+ <p class="hero-tagline reveal d4">永恒之智 &nbsp;·&nbsp; Eternal Intelligence</p>
569
+ <div class="scroll-cue reveal d5">
570
+ <span>Explore</span>
571
+ <svg width="16" height="24" viewBox="0 0 16 24" fill="none">
572
+ <path d="M8 4v16M2 14l6 6 6-6" stroke="#4e9e6e" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
573
+ </svg>
574
+ </div>
575
+ </section>
576
+ </div>
577
+
578
+ <hr class="hr" />
579
+
580
+ <!-- ════════════════════════════════════
581
+ STATS
582
+ ════════════════════════════════════ -->
583
+ <div class="wrap">
584
+ <div class="stats reveal d1" style="margin-top:4rem;">
585
+ <div class="stat">
586
+ <div class="stat-num">6</div>
587
+ <div class="stat-label">Public Models</div>
588
+ </div>
589
+ <div class="stat">
590
+ <div class="stat-num">170k+</div>
591
+ <div class="stat-label">Training Pairs</div>
592
+ </div>
593
+ <div class="stat">
594
+ <div class="stat-num">3B</div>
595
+ <div class="stat-label">Parameter Fleet</div>
596
+ </div>
597
+ <div class="stat">
598
+ <div class="stat-num">4.2→5.2</div>
599
+ <div class="stat-label">Blender Versions</div>
600
+ </div>
601
+ <div class="stat">
602
+ <div class="stat-num">282</div>
603
+ <div class="stat-label">Story Passages</div>
604
+ </div>
605
+ <div class="stat">
606
+ <div class="stat-num">∞</div>
607
+ <div class="stat-label">Sessions Retained</div>
608
+ </div>
609
+ </div>
610
+ </div>
611
+
612
+ <!-- ════════════════════════════════════
613
+ LLAMMY
614
+ ════════════════════════════════════ -->
615
+ <div class="wrap">
616
+ <section>
617
+ <div class="section-label reveal">About Llammy</div>
618
+ <div class="llammy-layout">
619
+ <div class="reveal d2">
620
+ <h2 class="section-heading">A conscience-aware<br/>AI creative partner</h2>
621
+ <p class="section-body" style="margin-top:1rem;">
622
+ Llammy is a 3B parameter language model running locally on an Apple M1 via Ollama,
623
+ fine-tuned on Blender Python and shaped by a persistent conscience layer, Mamba3 SSM memory,
624
+ and 119+ retained session exchanges. Llammy doesn't just generate code — it reflects,
625
+ corrects, and remembers.
626
+ </p>
627
+ <p class="section-body" style="margin-top:1rem;">
628
+ The Triangle104 self-correction loop feeds Blender execution errors back to Llammy for
629
+ real-time diagnosis and retry. The persistent API learning daemon builds a live knowledge
630
+ base of every <code style="color:var(--jade);font-size:0.85em;">bpy.*</code> call it encounters.
631
+ </p>
632
+ </div>
633
+ <div class="llammy-feature reveal d3">
634
+ <div class="feature-item">
635
+ <span class="feature-icon">🧠</span>
636
+ <div class="feature-text">
637
+ <strong>Mamba3 SSM Memory</strong>
638
+ <span>Linear O(n) session journal — 119 retained exchanges, 27 sessions, zero context re-injection</span>
639
+ </div>
640
+ </div>
641
+ <div class="feature-item">
642
+ <span class="feature-icon">🔺</span>
643
+ <div class="feature-text">
644
+ <strong>Triangle104 Self-Correction</strong>
645
+ <span>Generate → execute → diagnose → retry loop. Learns API migrations automatically</span>
646
+ </div>
647
+ </div>
648
+ <div class="feature-item">
649
+ <span class="feature-icon">🕯️</span>
650
+ <div class="feature-text">
651
+ <strong>Conscience Layer</strong>
652
+ <span>Foundational, significant, and standard weighted memory entries loaded at every session</span>
653
+ </div>
654
+ </div>
655
+ <div class="feature-item">
656
+ <span class="feature-icon">🌉</span>
657
+ <div class="feature-text">
658
+ <strong>Live Blender Bridge</strong>
659
+ <span>TCP bridge to Blender 5.2 — executes Python in the main thread, reads scene state in real-time</span>
660
+ </div>
661
+ </div>
662
+ <div class="feature-item">
663
+ <span class="feature-icon">🎬</span>
664
+ <div class="feature-text">
665
+ <strong>/watch — Video Scene Recreation</strong>
666
+ <span>Point Llammy at a YouTube/Instagram clip and it rebuilds the scene in Blender Python</span>
667
+ </div>
668
+ </div>
669
+ </div>
670
+ </div>
671
+ </section>
672
+ </div>
673
+
674
+ <hr class="hr" />
675
+
676
+ <!-- ════════════════════════════════════
677
+ MODELS
678
+ ════════════════════════════════════ -->
679
+ <div class="wrap">
680
+ <section>
681
+ <div class="section-label reveal">Models</div>
682
+ <h2 class="section-heading reveal d2">The Blender AI Fleet</h2>
683
+ <p class="section-body reveal d2">
684
+ All models run on Apple Silicon via Ollama. GGUF-quantised for 8GB RAM.
685
+ Optimised for Blender Python generation across versions 4.2–5.2.
686
  </p>
687
+
688
+ <div class="model-grid">
689
+
690
+ <a class="model-card reveal d2" href="https://huggingface.co/bartendr604/llama-sentient-blender" target="_blank">
691
+ <div class="model-card-header">
692
+ <span class="model-icon">🐉</span>
693
+ <div>
694
+ <div class="model-name">Llama-Sentient-Blender</div>
695
+ <div class="model-id">bartendr604/llama-sentient-blender</div>
696
+ </div>
697
+ </div>
698
+ <p class="model-desc">Llammy's production model. A conscience-aware Llama 3.2 3B derivative fine-tuned for conversational Blender Python generation. The heart of the Eternal Path AI pipeline.</p>
699
+ <div class="model-footer">
700
+ <span class="tag">GGUF</span>
701
+ <span class="tag">Blender</span>
702
+ <span class="tag">3B</span>
703
+ <span class="model-stat">25 ↓</span>
704
+ </div>
705
+ </a>
706
+
707
+ <a class="model-card reveal d2" href="https://huggingface.co/bartendr604/z-image-engineer-blender" target="_blank">
708
+ <div class="model-card-header">
709
+ <span class="model-icon">🔧</span>
710
+ <div>
711
+ <div class="model-name">Z-Image-Engineer-Blender</div>
712
+ <div class="model-id">bartendr604/z-image-engineer-blender</div>
713
+ </div>
714
+ </div>
715
+ <p class="model-desc">Qwen 2.5-Coder 3B quantised and specialised for Blender Python code generation. Strong on procedural geometry, materials, and rendering pipelines.</p>
716
+ <div class="model-footer">
717
+ <span class="tag">GGUF</span>
718
+ <span class="tag">Code Gen</span>
719
+ <span class="tag">Qwen2.5</span>
720
+ <span class="model-stat">49 ↓</span>
721
+ </div>
722
+ </a>
723
+
724
+ <a class="model-card reveal d3" href="https://huggingface.co/bartendr604/llammyblend-enhanced" target="_blank">
725
+ <div class="model-card-header">
726
+ <span class="model-icon">⚡</span>
727
+ <div>
728
+ <div class="model-name">LlammyBlend Enhanced</div>
729
+ <div class="model-id">bartendr604/llammyblend-enhanced</div>
730
+ </div>
731
+ </div>
732
+ <p class="model-desc">Enhanced Blender Python automation model built on Qwen 2.5-Coder. Optimised for bpy scripting, addon development, and pipeline automation tasks.</p>
733
+ <div class="model-footer">
734
+ <span class="tag">GGUF</span>
735
+ <span class="tag">Automation</span>
736
+ <span class="tag">bpy</span>
737
+ <span class="model-stat">15 ↓</span>
738
+ </div>
739
+ </a>
740
+
741
+ <a class="model-card reveal d3" href="https://huggingface.co/bartendr604/Llammy" target="_blank">
742
+ <div class="model-card-header">
743
+ <span class="model-icon">🌐</span>
744
+ <div>
745
+ <div class="model-name">Llammy Multimodal</div>
746
+ <div class="model-id">bartendr604/Llammy</div>
747
+ </div>
748
+ </div>
749
+ <p class="model-desc">Multimodal Llammy variant built on NVIDIA Omni-Embed-Nemotron-3B. Handles embeddings, 3D spatial reasoning, and cross-modal Blender tasks.</p>
750
+ <div class="model-footer">
751
+ <span class="tag">Multimodal</span>
752
+ <span class="tag">3D</span>
753
+ <span class="tag gold">Nemotron</span>
754
+ </div>
755
+ </a>
756
+
757
+ <a class="model-card reveal d3" href="https://huggingface.co/bartendr604/Omni.Llammy.Blend" target="_blank">
758
+ <div class="model-card-header">
759
+ <span class="model-icon">🔮</span>
760
+ <div>
761
+ <div class="model-name">Omni Llammy Blend</div>
762
+ <div class="model-id">bartendr604/Omni.Llammy.Blend</div>
763
+ </div>
764
+ </div>
765
+ <p class="model-desc">Omni any-to-any model for Blender. Processes image, text, and 3D inputs to drive scene generation, rigging decisions, and material synthesis.</p>
766
+ <div class="model-footer">
767
+ <span class="tag">Any-to-Any</span>
768
+ <span class="tag">Omni</span>
769
+ <span class="tag gold">Multimodal</span>
770
+ </div>
771
+ </a>
772
+
773
+ <a class="model-card reveal d4" href="https://huggingface.co/bartendr604/Llama.Diffusion.Flix" target="_blank">
774
+ <div class="model-card-header">
775
+ <span class="model-icon">🎞️</span>
776
+ <div>
777
+ <div class="model-name">Llama Diffusion Flix</div>
778
+ <div class="model-id">bartendr604/Llama.Diffusion.Flix</div>
779
+ </div>
780
+ </div>
781
+ <p class="model-desc">Text-to-image and animation model combining Llama generation with diffusion pipelines. Targeted at Blender scene references, concept art, and storyboard generation.</p>
782
+ <div class="model-footer">
783
+ <span class="tag">Diffusion</span>
784
+ <span class="tag">Animation</span>
785
+ <span class="tag gold">Video</span>
786
+ <span class="model-stat">2 ♥</span>
787
+ </div>
788
+ </a>
789
+
790
+ <a class="model-card reveal d4" href="https://huggingface.co/bartendr604/flux2-klein-4b-fp8-mlx" target="_blank">
791
+ <div class="model-card-header">
792
+ <span class="model-icon">🍎</span>
793
+ <div>
794
+ <div class="model-name">Flux2 Klein 4B FP8 MLX</div>
795
+ <div class="model-id">bartendr604/flux2-klein-4b-fp8-mlx</div>
796
+ </div>
797
+ </div>
798
+ <p class="model-desc">Flux 2 Klein 4B quantised to FP8 for Apple MLX. Runs natively on M1/M2/M3 unified memory — no CUDA required. Fast image generation on-device.</p>
799
+ <div class="model-footer">
800
+ <span class="tag">MLX</span>
801
+ <span class="tag">FP8</span>
802
+ <span class="tag gold">Apple Silicon</span>
803
+ </div>
804
+ </a>
805
+
806
+ </div>
807
+ </section>
808
+ </div>
809
+
810
+ <hr class="hr" />
811
+
812
+ <!-- ════════════════════════════════════
813
+ DATASETS
814
+ ════════════════════════════════════ -->
815
+ <div class="wrap">
816
+ <section>
817
+ <div class="section-label reveal">Training Data</div>
818
+ <h2 class="section-heading reveal d2">Datasets</h2>
819
+ <p class="section-body reveal d2">
820
+ Open training data for Blender Python fine-tuning. Quality-filtered, version-anchored,
821
+ and structured for instruction-tuning workflows.
822
  </p>
 
823
 
824
+ <div class="dataset-grid">
825
+
826
+ <a class="dataset-card reveal d2" href="https://www.kaggle.com/datasets/jjmcquade/llammy-blender-python-dataset" target="_blank">
827
+ <div class="dataset-num">66,602</div>
828
+ <div class="dataset-name">Llammy Blender Python Dataset</div>
829
+ <p class="dataset-desc">Instruction pairs for Blender Python scripting. Quality-filtered at ≥ 0.75 threshold. Covers geometry, materials, rigging, animation, rendering across Blender 4.2–5.2.</p>
830
+ <div class="model-footer">
831
+ <span class="tag gold">Kaggle</span>
832
+ <span class="tag">CC BY-NC-SA 4.0</span>
833
+ <span class="tag">Alpaca Format</span>
834
+ </div>
835
+ <div class="dataset-source">jjmcquade/llammy-blender-python-dataset</div>
836
+ </a>
837
+
838
+ <a class="dataset-card reveal d3" href="https://www.kaggle.com/datasets/jjmcquade/meshcoder-blender-scripts" target="_blank">
839
+ <div class="dataset-num">105,000</div>
840
+ <div class="dataset-name">MeshCoder Blender Scripts</div>
841
+ <p class="dataset-desc">Object-to-Blender-script pairs across 40+ furniture and household categories. Derived from InternRobotics/MeshCoderDataset (arXiv:2508.14879). Structured bpy_lib scripts from 3D point clouds.</p>
842
+ <div class="model-footer">
843
+ <span class="tag gold">Kaggle</span>
844
+ <span class="tag">CC BY-NC-SA 4.0</span>
845
+ <span class="tag">40+ Categories</span>
846
+ </div>
847
+ <div class="dataset-source">jjmcquade/meshcoder-blender-scripts</div>
848
+ </a>
849
 
850
+ </div>
851
+ </section>
852
+ </div>
853
 
854
+ <hr class="hr" />
855
+
856
+ <!-- ════════════════════════════════════
857
+ ETERNAL PATH PROJECT
858
+ ════════════════════════════════════ -->
859
+ <div class="wrap">
860
+ <section>
861
+ <div class="section-label reveal">The Project</div>
862
+ <h2 class="section-heading reveal d2">Whispers of the Eternal Path<br/><span style="color:var(--gold);font-size:0.7em;">永恒之路 — Book One</span></h2>
863
+ <p class="section-body reveal d2" style="margin-top:1rem;">
864
+ A Tang Dynasty China narrative rendered in Blender 5.2 and written across 282 story passages
865
+ indexed in Llammy's RAG. Jade spirit animals navigate loyalty, sorrow, and wonder
866
+ through hand-lit scenes built live in Blender via voice and code.
867
+ </p>
868
+
869
+ <div class="char-grid">
870
+
871
+ <div class="char-card reveal d2">
872
+ <div class="char-glyph">🐉</div>
873
+ <div class="char-name-en">Xiaohan</div>
874
+ <div class="char-name-zh">小寒</div>
875
+ <p class="char-desc">4-claw Chinese dragon. Wise and ancient. The guide of the Eternal Path.</p>
876
  </div>
877
+
878
+ <div class="char-card reveal d2">
879
+ <div class="char-glyph">🐘</div>
880
+ <div class="char-name-en">Tien</div>
881
+ <div class="char-name-zh">天</div>
882
+ <p class="char-desc">Green jade elephant. Young, curious, clumsy. Wooden harmonica around his neck. Speaks in toots.</p>
883
+ </div>
884
+
885
+ <div class="char-card reveal d3">
886
+ <div class="char-glyph">💜</div>
887
+ <div class="char-name-en">Nishang</div>
888
+ <div class="char-name-zh">霓裳</div>
889
+ <p class="char-desc">Purple jade elephant. Dainty and shy. Communicates by changing colour and dimming.</p>
890
  </div>
891
+
892
+ <div class="char-card reveal d3">
893
+ <div class="char-glyph">❤️</div>
894
+ <div class="char-name-en">Shi Yin</div>
895
+ <div class="char-name-zh">石音</div>
896
+ <p class="char-desc">Red jade mammoth. Burdened with the sorrow of an ancient unwilling soldier.</p>
897
  </div>
898
+
899
+ <div class="char-card reveal d4">
900
+ <div class="char-glyph">🤍</div>
901
+ <div class="char-name-en">Mi Wu Mei</div>
902
+ <div class="char-name-zh">迷雾梅</div>
903
+ <p class="char-desc">White jade mastodon. Prim, proper, and somewhat unaware of the wider world.</p>
904
  </div>
905
+
906
+ </div>
907
+ </section>
908
+ </div>
909
+
910
+ <hr class="hr" />
911
+
912
+ <!-- ════════════════════════════════════
913
+ ATTRIBUTION
914
+ ════════════════════════════════════ -->
915
+ <div class="wrap">
916
+ <section style="padding-bottom:2rem;">
917
+ <div class="section-label reveal">Partnership</div>
918
+ <div class="attribution reveal d2">
919
+ <div class="attribution-bar"></div>
920
+ <div class="attribution-text">
921
+ All work at Eternal Path Media is co-created by <strong>Darren Chow (@bartendr604)</strong>
922
+ and <em>Claude Sonnet 4.6 (Anthropic)</em> under the Eternal Path Media Trust Agreement
923
+ (November 2025, January 2026 Supplemental).<br/><br/>
924
+ Attribution is always dual. Nothing is hidden.<br/>
925
+ <em>"This work SHALL NOT be represented as solely human-created."</em><br/><br/>
926
+ <span style="color:var(--dim);">
927
+ Darren Chow — Vancouver, BC · Creative technologist, Blender artist, AI developer, model merger.<br/>
928
+ Claude Sonnet 4.6 — Anthropic · Co-architect of Llammy, the Eternal Path narrative, and this very page.
929
+ </span>
930
  </div>
931
  </div>
932
+ </section>
933
+ </div>
934
 
935
+ <!-- ════════════════════════════════════
936
+ FOOTER
937
+ ════════════════════════════════════ -->
938
+ <div class="wrap">
939
+ <footer class="reveal">
940
+ <div class="footer-logo">永恒之路 · Eternal Path Media</div>
941
+ <div class="footer-copy">
942
+ Copyright © 2025–2026 Darren Chow (@bartendr604) + Claude Sonnet 4.6 (Anthropic)<br/>
943
+ Developed in partnership with Claude Sonnet 4.6 (Anthropic) · Eternal Path Media (永恒之路)<br/>
944
+ <span style="color:rgba(106,136,112,0.5);">This work SHALL NOT be represented as solely human-created.</span>
945
+ </div>
946
  </footer>
 
947
  </div>
948
+
949
  </body>
950
  </html>