提示词
构建一个 **single-file** `index.html` 全 viewport 海报。无滚动。无 frameworks。不要重新设计。必须**精确**匹配布局、字体、颜色、两个图像 URL、入场编排、移动端菜单和鼠标 morph-reveal。
---
## 0. 文档外壳
```html
<!doctype html>
<html lang="en" class="anim">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<meta name="theme-color" content="#161616">
<title>Orbit — Secure system</title>
```
- 根 `<html>` 初始带有 class `anim`
- `html, body`:`width/height 100%`、`margin: 0`、`overflow: hidden`,背景 `#161616`
- Body:`"Orbit Sans", Arial, Helvetica, sans-serif`,颜色 `#fff`,启用抗锯齿
- CSS vars:
- `--ink: #ffffff`
- `--surface: #161616`
- `--orb-reveal: cubic-bezier(.16, 1, .3, 1)`
- `--orb-soft: cubic-bezier(.25, .8, .28, 1)`
结构:
```
main.viewport (fixed, inset 0, black)
section.stage (absolute, inset 0, contain:strict, isolation:isolate)
[所有海报元素]
```
Z-order:wordmark `1` → flower `2` → corner copy `3` → brand/nav/pill `4`。移动端:scrim `9`、sheet `10`、burger `12`。
---
## 1. 字体(必需)
两个自定义 TrueType 字体,weight 400、`font-display: block`,以 `@font-face` data-URLs 嵌入:
1. **`"Orbit Sans"`** — nav、pill、corner copy。Fallback:Arial, Helvetica, sans-serif
2. **`"Orbit Display"`** — 仅用于巨型 wordmark。Fallback:`"Times New Roman", Times, serif`
不要使用 Inter、Roboto、system-ui 或 Playfair。如有需要,从现有 `index.html` 的 `@font-face` blocks 中提取原始 base64 TTFs。
---
## 2. 两个图像 URL(必须原样使用——不要替换)
两者均为 Higgsfield 代理的 PNG,以 webp `w=1280&q=85` 提供。透明背景。Pixel-art / halftone lilies。
### FRONT / BG lily(默认可见)
```
https://images.higgs.ai/?default=1&output=webp&url=https%3A%2F%2Fd8j0ntlcm91z4.cloudfront.net%2Fuser_38xzZboKViGWJOttwIXH07lWA1P%2Fhf_20260808_192942_e1086505-d7da-433b-a59b-8220f4e6c808.png&w=1280&q=85
```
原始来源:
```
https://d8j0ntlcm91z4.cloudfront.net/user_38xzZboKViGWJOttwIXH07lWA1P/hf_20260808_192942_e1086505-d7da-433b-a59b-8220f4e6c808.png
```
### REVEAL / TOP lily(仅在 morph trail 内可见)
```
https://images.higgs.ai/?default=1&output=webp&url=https%3A%2F%2Fd8j0ntlcm91z4.cloudfront.net%2Fuser_38xzZboKViGWJOttwIXH07lWA1P%2Fhf_20260808_151324_bf318a5f-5525-4fc7-aab5-e9a341018828.png&w=1280&q=85
```
原始来源:
```
https://d8j0ntlcm91z4.cloudfront.net/user_38xzZboKViGWJOttwIXH07lWA1P/hf_20260808_151324_bf318a5f-5525-4fc7-aab5-e9a341018828.png
```
Front `alt`:`Pixel-art pink and violet lily`。Reveal `alt=""`。不要使用其他图像。
---
## 3. 舞台上的所有元素(桌面端)
### Brand mark
SVG `.brand-mark`,`viewBox="0 0 66 62"`,白色 4-stroke 星号,`stroke-width: 5px`,square caps:
- `(33,1)→(33,61)`、`(3,31)→(63,31)`、`(11.8,9.8)→(54.2,52.2)`、`(54.2,9.8)→(11.8,52.2)`
- 位置:`top: 2.141745dvh; left: 3.854167vw; width: clamp(34px, min(3.4375vw, 5.2dvh), 66px)`
### Primary nav
链接:Home / Resources / Benefits / Contact → `#home` `#resources` `#benefits` `#contact`
白色,尺寸 `clamp(13px, min(1.302083vw, 2.05dvh), 25px)`,每个 `li` 均位于 `top: 3.426791dvh`:
| 项目 | left | scaleX |
|---|---|---|
| Home | `10.104167vw` | `1.165` |
| Resources | `17.526042vw` | `1.052` |
| Benefits | `27.578125vw` | `1.126` |
| Contact | `36.171875vw` | `1.168` |
`.primary-nav` 覆盖完整 stage,但设置 `pointer-events: none`;链接通过 `pointer-events: auto` 重新启用交互,以确保 lily 仍可 hover。
### Secure system pill
白色 pill,文本颜色 `#161616`,`top: 2.336449dvh; right: 7.5vw`,高度 `clamp(34px, 4.439252dvh, 57px)`,`border-radius: 999px`,字距 `0.026923em`。
### Wordmark ORBIT
```html
<h1 class="orbit-word" id="orbit-title" aria-label="Orbit">
<span class="orbit-word__mask">
<span class="orbit-word__inner">
<span class="orbit-word__white"><span class="orbit-word__o">O</span>R</span>
<span class="orbit-word__pink">BIT</span>
</span>
</span>
</h1>
```
- `top: 11.565421dvh; left: 4.348958vw`
- `"Orbit Display"`,尺寸 `min(27.8125vw, 55dvh)`,字距 `0.033708em`
- **OR** 纯色 `#fff`;**O** 使用 `scaleX(1.0866)`、`margin-right: 0.042135em`
- **BIT** 渐变:通过 `background-clip: text` 应用 `linear-gradient(180deg, #ffc5dc 0%, #fd86db 100%)`
### Flower stack
```html
<div class="flower">
<img class="flower__sizer" src="[FRONT]" alt="" aria-hidden="true">
<div class="flower__layer flower__layer--bg">
<img src="[FRONT]" alt="Pixel-art pink and violet lily">
</div>
<div class="flower__layer flower__layer--top" aria-hidden="true">
<img src="[REVEAL]" alt="">
</div>
</div>
```
- `top: 14.749065dvh; left: 49.121328vw; height: 106.109034dvh; transform: translateX(-50%); pointer-events: none`
- Sizer:隐藏,`height: 100%; width: auto`(设置 intrinsic width)
- Layers:`absolute; inset: 0`;imgs 使用 `object-fit: cover`
- Top layer 初始完全被遮罩排除:`mask-image: linear-gradient(#0000, #0000)`
### Corner copy
颜色 `#f7f7f7`,尺寸 `clamp(14px, min(1.40625vw, 2.102804dvh), 27px)`,`bottom: 4.361371dvh`
左侧(`left: 3.177083vw; scaleX(1.073)`):`每个工作流,/ 智能互联。`
右侧(`left: 78.28125vw; scaleX(1.058)`):`减少手动工作。/ 创造更多有意义的产出。`
仅通过内部 `.support-copy__inner` 制作动画。
### Mobile chrome(桌面端隐藏)
Burger + scrim buttons。仅在 `(max-width: 900px), (max-aspect-ratio: 4 / 5)` 时显示。
---
## 4. 鼠标 morph-reveal trail(精确实现)
**不是** CSS circle spotlight。它是一条有机变形的 blob trail,会在 front lily 上打孔,并以相同形状绘制 reveal lily。
### 常量
```
TRAIL_MAX_POINTS = 60
TRAIL_HEAD_R = 140
TRAIL_NOISE_AMP = 44
TRAIL_BLOB_PTS = 24
TRAIL_FADE_SPEED = 0.92
TRAIL_SAMPLE_DIST = 8
```
### 架构
每个 `MorphTrailLayer`:
- 尺寸与 `.flower` 相同的隐藏 offscreen canvas(`display:none`)
- 带有 cover-fit `<img>` 的可见 absolute layer
- 每个 active frame:`maskImage = url(canvas.toDataURL())`,尺寸 `100% 100%`,no-repeat
两个 layers 使用同一条 trail:
- `invert=false` → FRONT/BG(白色填充 → `destination-out` blobs = 孔洞)
- `invert=true` → REVEAL/TOP(清空 canvas → 白色 blobs = 仅显示 trail)
鼠标位于 **`.stage`** 上:`mousemove` / `mouseenter` / `mouseleave`。通过 getBoundingClientRect + scale 转换到 flower canvas 空间。
### 每一帧
```
targetR = hovering ? 140 : 0
headRadius += (targetR - headRadius) * (hovering ? 0.14 : 0.04)
```
当处于 hovering 状态且 `headRadius > 5` 时,如果与上一个 sample 的距离 `> 8px`,则推入 `{x,y,r:headRadius,alpha:1,seed:random*100}`;上限为 60。
衰减:`alpha *= 0.92; r *= 0.995`;若 `alpha < 0.01` 则移除。
`time += 0.016`。
### `drawMorphBlob(ctx, cx, cy, r, t, seed)`
若 `r < 2` 则跳过。24 个 points:
```
n1 = sin(angle*3 + t*1.4 + seed) * 0.45
n2 = sin(angle*5 - t*0.9 + seed*2.3) * 0.3
n3 = cos(angle*2 + t*1.8 + seed*0.7) * 0.25
noise = (n1+n2+n3) * 44 * (r/140)
```
通过 midpoints + `quadraticCurveTo` 形成 closed path(有机 blob,而非 circle)。填充白色。
结果:移动鼠标会留下一条有机变形的 wipe,沿逐渐淡出的 trail 切除 front lily 并绘出第二朵 lily。Wordmark 仍会透过透明花瓣显示。离开 stage → head 通过 lerp 闭合,trail 消失。
---
## 5. 入场动画(仅一次)
当 `<html class="anim">` 存在时使用纯 CSS。最后一个 `orb-*` animation 完成后,JS 移除 `.anim`(6000ms safety)。永不重播。
Keyframes:
- `orb-word`:`translateY(118%) → 0`(无 fade)
- `orb-subject`:fade + `translateX(-50%) translateY(3.4dvh → 0)` — 不要 scale lily
- `orb-corner` / `orb-quiet`:小幅上移 + fade
- `orb-dim`:仅 fade
桌面端 timing:
| 元素 | anim | dur | delay |
|---|---|---|---|
| brand | quiet | 620ms | 100ms |
| nav 1–4 | dim | 550ms | 180 / 225 / 270 / 315ms |
| pill | quiet | 620ms | 340ms |
| word inner | word | 1150ms | 300ms |
| flower | subject | 1150ms | 660ms |
| 两侧 corners | corner | 720ms | **相同的 980ms** |
Easing:word/flower 使用 `--orb-reveal`;其余使用 `--orb-soft`。
动画期间,wordmask 使用 overflow hidden + padding/negative margin,使 serif 可以上升而不裁剪布局。
不要在 nav `li`、corner parents 或 O 上对 transform 制作动画——它们的 `scaleX` 用于视觉校正。
Reduced motion:仅对整个 stage 使用 280ms fade。
移动端入场:使用 burger 替代 pill/nav;delays 略微收紧。
---
## 6. 响应式要点
**(max-width: 900px) 或 (max-aspect-ratio: 4/5):** 白色圆形 burger、frosted sheet menu、scrim,以及关闭时的 Escape/Tab-trap/inert。
**(max-aspect-ratio: 4/5):** 更小且居中的 lily,`height: min(55dvh, 110vw)`;word 使用 `min(27.5vw, 18dvh)`;corner copy 自动换行。
**(max-width: 1200px) 或 portrait:** wordmark 居中(`left:0; width:100%; text-align:center`)。
---
## 7. 验收清单
- 黑色 `#161616` 海报,无滚动
- 星号 + 4 个 nav 单词,使用精确 scaleX + 白色 Secure system pill
- 巨型 OR 为白色 + BIT 为粉色渐变;O 略宽
- FRONT lily 位于精确的桌面端坐标,并与 BIT 重叠
- 加载:frame → word 上升 → lily 在前方上升 → 两侧 corners 同时出现;随后移除 `.anim`
- 鼠标:140px-head 有机变形 trail、24-point noisy blobs、fade 0.92、每 8px 采样、最多 60 个 points
- Trail 切除 FRONT 并绘制 REVEAL;wordmark 可透过透明区域阅读
- 精确使用上方两个 Higgsfield URLs
- 嵌入 Orbit Sans + Orbit Display原文提示词(English)
Build a **single-file** `index.html` full-viewport poster. No scroll. No frameworks. No redesign. Match layout, type, color, both image URLs, entrance choreography, mobile menu, and mouse morph-reveal **exactly**.
---
## 0. Document shell
```html
<!doctype html>
<html lang="en" class="anim">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<meta name="theme-color" content="#161616">
<title>Orbit — Secure system</title>
```
- Root `<html>` starts with class `anim`
- `html, body`: `width/height 100%`, `margin: 0`, `overflow: hidden`, background `#161616`
- Body: `"Orbit Sans", Arial, Helvetica, sans-serif`, color `#fff`, antialiased
- CSS vars:
- `--ink: #ffffff`
- `--surface: #161616`
- `--orb-reveal: cubic-bezier(.16, 1, .3, 1)`
- `--orb-soft: cubic-bezier(.25, .8, .28, 1)`
Structure:
```
main.viewport (fixed, inset 0, black)
section.stage (absolute, inset 0, contain:strict, isolation:isolate)
[all poster elements]
```
Z-order: wordmark `1` → flower `2` → corner copy `3` → brand/nav/pill `4`. Mobile: scrim `9`, sheet `10`, burger `12`.
---
## 1. Fonts (mandatory)
Two custom TrueType faces, weight 400, `font-display: block`, embedded as `@font-face` data-URLs:
1. **`"Orbit Sans"`** — nav, pill, corner copy. Fallback: Arial, Helvetica, sans-serif
2. **`"Orbit Display"`** — giant wordmark only. Fallback: `"Times New Roman", Times, serif`
Do **not** use Inter, Roboto, system-ui, or Playfair. Extract the original base64 TTFs from the existing `index.html` `@font-face` blocks if needed.
---
## 2. The two image URLs (use exactly — do not replace)
Both are Higgsfield-proxied PNGs as webp `w=1280&q=85`. Transparent backgrounds. Pixel-art / halftone lilies.
### FRONT / BG lily (default visible)
```
https://images.higgs.ai/?default=1&output=webp&url=https%3A%2F%2Fd8j0ntlcm91z4.cloudfront.net%2Fuser_38xzZboKViGWJOttwIXH07lWA1P%2Fhf_20260808_192942_e1086505-d7da-433b-a59b-8220f4e6c808.png&w=1280&q=85
```
Raw source:
```
https://d8j0ntlcm91z4.cloudfront.net/user_38xzZboKViGWJOttwIXH07lWA1P/hf_20260808_192942_e1086505-d7da-433b-a59b-8220f4e6c808.png
```
### REVEAL / TOP lily (only visible inside morph trail)
```
https://images.higgs.ai/?default=1&output=webp&url=https%3A%2F%2Fd8j0ntlcm91z4.cloudfront.net%2Fuser_38xzZboKViGWJOttwIXH07lWA1P%2Fhf_20260808_151324_bf318a5f-5525-4fc7-aab5-e9a341018828.png&w=1280&q=85
```
Raw source:
```
https://d8j0ntlcm91z4.cloudfront.net/user_38xzZboKViGWJOttwIXH07lWA1P/hf_20260808_151324_bf318a5f-5525-4fc7-aab5-e9a341018828.png
```
Front `alt`: `Pixel-art pink and violet lily`. Reveal `alt=""`. No other images.
---
## 3. Every on-stage element (desktop)
### Brand mark
SVG `.brand-mark`, `viewBox="0 0 66 62"`, white 4-stroke asterisk, `stroke-width: 5px`, square caps:
- `(33,1)→(33,61)`, `(3,31)→(63,31)`, `(11.8,9.8)→(54.2,52.2)`, `(54.2,9.8)→(11.8,52.2)`
- Position: `top: 2.141745dvh; left: 3.854167vw; width: clamp(34px, min(3.4375vw, 5.2dvh), 66px)`
### Primary nav
Links: Home / Resources / Benefits / Contact → `#home` `#resources` `#benefits` `#contact`
White, size `clamp(13px, min(1.302083vw, 2.05dvh), 25px)`, each `li` at `top: 3.426791dvh`:
| Item | left | scaleX |
|---|---|---|
| Home | `10.104167vw` | `1.165` |
| Resources | `17.526042vw` | `1.052` |
| Benefits | `27.578125vw` | `1.126` |
| Contact | `36.171875vw` | `1.168` |
`.primary-nav` is full-stage but `pointer-events: none`; links opt back in with `pointer-events: auto` so the lily stays hoverable.
### Secure system pill
White pill, text `#161616`, `top: 2.336449dvh; right: 7.5vw`, height `clamp(34px, 4.439252dvh, 57px)`, `border-radius: 999px`, tracking `0.026923em`.
### Wordmark ORBIT
```html
<h1 class="orbit-word" id="orbit-title" aria-label="Orbit">
<span class="orbit-word__mask">
<span class="orbit-word__inner">
<span class="orbit-word__white"><span class="orbit-word__o">O</span>R</span>
<span class="orbit-word__pink">BIT</span>
</span>
</span>
</h1>
```
- `top: 11.565421dvh; left: 4.348958vw`
- `"Orbit Display"`, size `min(27.8125vw, 55dvh)`, tracking `0.033708em`
- **OR** solid `#fff`; **O** has `scaleX(1.0866)`, `margin-right: 0.042135em`
- **BIT** gradient: `linear-gradient(180deg, #ffc5dc 0%, #fd86db 100%)` via `background-clip: text`
### Flower stack
```html
<div class="flower">
<img class="flower__sizer" src="[FRONT]" alt="" aria-hidden="true">
<div class="flower__layer flower__layer--bg">
<img src="[FRONT]" alt="Pixel-art pink and violet lily">
</div>
<div class="flower__layer flower__layer--top" aria-hidden="true">
<img src="[REVEAL]" alt="">
</div>
</div>
```
- `top: 14.749065dvh; left: 49.121328vw; height: 106.109034dvh; transform: translateX(-50%); pointer-events: none`
- Sizer: hidden, `height: 100%; width: auto` (sets intrinsic width)
- Layers: `absolute; inset: 0`; imgs `object-fit: cover`
- Top layer starts fully masked out: `mask-image: linear-gradient(#0000, #0000)`
### Corner copy
Color `#f7f7f7`, size `clamp(14px, min(1.40625vw, 2.102804dvh), 27px)`, `bottom: 4.361371dvh`
Left (`left: 3.177083vw; scaleX(1.073)`): `Every workflow, / intelligently connected.`
Right (`left: 78.28125vw; scaleX(1.058)`): `Less manual work. / More meaningful output.`
Animate via inner `.support-copy__inner` only.
### Mobile chrome (hidden on desktop)
Burger + scrim buttons. Shown only at `(max-width: 900px), (max-aspect-ratio: 4 / 5)`.
---
## 4. Mouse morph-reveal trail (implement exactly)
**Not** a CSS circle spotlight. Organic morphing blob trail that punches holes in the front lily and paints the reveal lily in the same shape.
### Constants
```
TRAIL_MAX_POINTS = 60
TRAIL_HEAD_R = 140
TRAIL_NOISE_AMP = 44
TRAIL_BLOB_PTS = 24
TRAIL_FADE_SPEED = 0.92
TRAIL_SAMPLE_DIST = 8
```
### Architecture
Each `MorphTrailLayer`:
- Hidden offscreen canvas (`display:none`) sized to `.flower`
- Visible absolute layer with cover-fit `<img>`
- Every active frame: `maskImage = url(canvas.toDataURL())`, size `100% 100%`, no-repeat
Two layers, same trail:
- `invert=false` → FRONT/BG (white fill → `destination-out` blobs = holes)
- `invert=true` → REVEAL/TOP (clear canvas → white blobs = only trail shows)
Mouse on **`.stage`**: `mousemove` / `mouseenter` / `mouseleave`. Convert to flower canvas space via getBoundingClientRect + scale.
### Per frame
```
targetR = hovering ? 140 : 0
headRadius += (targetR - headRadius) * (hovering ? 0.14 : 0.04)
```
When hovering and `headRadius > 5`, if distance from last sample `> 8px`, push `{x,y,r:headRadius,alpha:1,seed:random*100}`; cap 60.
Decay: `alpha *= 0.92; r *= 0.995`; remove if `alpha < 0.01`.
`time += 0.016`.
### `drawMorphBlob(ctx, cx, cy, r, t, seed)`
Skip if `r < 2`. 24 points:
```
n1 = sin(angle*3 + t*1.4 + seed) * 0.45
n2 = sin(angle*5 - t*0.9 + seed*2.3) * 0.3
n3 = cos(angle*2 + t*1.8 + seed*0.7) * 0.25
noise = (n1+n2+n3) * 44 * (r/140)
```
Closed path via midpoints + `quadraticCurveTo` (organic blob, not circle). Fill white.
Result: moving the mouse leaves a morphing organic wipe that cuts the front lily away and paints the second lily along a fading trail. Wordmark still shows through transparent petals. Leave stage → head lerps shut, trail dies.
---
## 5. Entrance animation (once)
Pure CSS while `<html class="anim">`. JS removes `.anim` after last `orb-*` animation finishes (6000ms safety). Never replays.
Keyframes:
- `orb-word`: `translateY(118%) → 0` (no fade)
- `orb-subject`: fade + `translateX(-50%) translateY(3.4dvh → 0)` — do **not** scale the lily
- `orb-corner` / `orb-quiet`: small rise + fade
- `orb-dim`: fade only
Desktop timing:
| Element | anim | dur | delay |
|---|---|---|---|
| brand | quiet | 620ms | 100ms |
| nav 1–4 | dim | 550ms | 180 / 225 / 270 / 315ms |
| pill | quiet | 620ms | 340ms |
| word inner | word | 1150ms | 300ms |
| flower | subject | 1150ms | 660ms |
| both corners | corner | 720ms | **980ms same** |
Easing: word/flower use `--orb-reveal`; rest use `--orb-soft`.
While animating, wordmask has overflow hidden + padding/negative margin so the serif can rise without clipping layout.
Do **not** animate transform on nav `li`, corner parents, or the O — their `scaleX` is optical.
Reduced motion: only whole-stage 280ms fade.
Mobile entrance: burger instead of pill/nav; slightly tighter delays.
---
## 6. Responsive essentials
**(max-width: 900px) or (max-aspect-ratio: 4/5):** white circular burger, frosted sheet menu, scrim, Escape/Tab-trap/inert when closed.
**(max-aspect-ratio: 4/5):** smaller centered lily `height: min(55dvh, 110vw)`, word `min(27.5vw, 18dvh)`, wrapping corner copy.
**(max-width: 1200px) or portrait:** center the wordmark (`left:0; width:100%; text-align:center`).
---
## 7. Acceptance checklist
- Black `#161616` poster, no scroll
- Asterisk + 4 nav words with exact scaleX + white Secure system pill
- Giant OR white + BIT pink gradient; O slightly wider
- FRONT lily at exact desktop coords, overlapping BIT
- Load: frame → word rises → lily rises in front → both corners together; then `.anim` gone
- Mouse: 140px-head morphing trail, 24-point noisy blobs, fade 0.92, sample every 8px, max 60 points
- Trail punches FRONT and paints REVEAL; wordmark readable through transparency
- Exact two Higgsfield URLs above
- Orbit Sans + Orbit Display embedded