ai21.net
语言

OBLT E-bike Header

演示视频

OBLT E-bike Header — 1

提示词

# OBLT E-bike Header

A full-viewport, dark, cinematic e-bike product header for the brand **OBLT**, built in React (client component) with pure CSS and an interactive cursor-following "x-ray" spotlight reveal — moving the mouse wipes away the bike's exterior photo to expose its internal carbon/gearbox structure underneath. Built with React only (no animation libraries).

## Tech stack (libraries actually imported)
- React only — `useRef`, `useState`, and the `MouseEvent` type. No framer-motion, no GSAP, no icon library. All animation is hand-written CSS keyframes + an inline CSS `mask-image`.
- SVG icon (the CTA arrow) is hand-inlined, not from a library.

## Fonts & global styles
- Single Google font, imported inside a `<style>` block:
  ```
  @import url('https://fonts.googleapis.com/css2?family=Almarai:wght@300;400;700;800&display=swap');
  ```
- Font stack: `"Almarai","Helvetica Neue",Helvetica,Arial,sans-serif`.
- `-webkit-font-smoothing: antialiased`. `box-sizing: border-box` applied to the root and all descendants (scoped to `.vt-header`, never global).

## Section container
- Root `<header className="vt-header">` is the mouse-tracking element (handlers: `onMouseEnter`, `onMouseMove`, `onMouseLeave`).
- Styles: `position: relative; display: flex; flex-direction: column; min-height: 100vh; overflow: hidden; padding: 32px 56px 44px; background-color: #272727; color: #fff;`.
- Internal vertical flow: top nav, then a flex-grow spacer "stage", then bottom content pinned to the base.

## Structure, section by section

### 1. Reveal background (`.vt-bg`, absolute inset:0, z-index 0, pointer-events:none)
Three stacked layers:
- **Base exterior image** (`.vt-bg-img`): the full bike exterior photo, `object-fit: cover; object-position: center;`, fills the layer. `user-select:none`, `-webkit-user-drag:none`, `referrerPolicy="no-referrer"`.
- **X-ray layer** (`.vt-bg-xray`, z-index 1): contains the bike x-ray/internal image (same cover/center sizing). This layer is masked by a radial gradient driven by cursor position (see Animations). `will-change: -webkit-mask-image, mask-image;` and `transition: -webkit-mask-image .12s linear, mask-image .12s linear;`.
- **Veil overlay** (`.vt-bg-veil`, z-index 2): a vertical darkening gradient so text stays legible top & bottom:
  ```
  linear-gradient(180deg, rgba(39,38,38,.62) 0%, rgba(39,38,38,.10) 26%, rgba(39,38,38,.10) 60%, rgba(39,38,38,.82) 100%)
  ```

### 2. Top nav (`.vt-nav`, z-index 30)
- `display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 24px;`.
- **Logo** (left, `.vt-logo`): text `OBLT` followed by a `.` span. `font-size: 28px; font-weight: 700; letter-spacing: 0.5px; color: #E0E1CC;` (dot is also `#E0E1CC`).
- **Center menu** (`.vt-menu`, gap 40px): three links — `E-bikes`, `Features`, `Connect`. Each: `font-size: 16px; font-weight: 400; letter-spacing: .3px; color: #E0E1CC; opacity: .85; transition: opacity .2s ease;` hover → opacity 1.
- **Right cluster** (`.vt-nav-right`, gap 18px): an uppercase explore link plus a hamburger button.
  - `.vt-explore` link text: `Explore the bike` — `font-size: 14px; font-weight: 700; letter-spacing: 1.5px; text-transform: uppercase; color: #E0E1CC;` hover → opacity .65.
  - **Hamburger** (`.vt-burger`, hidden on desktop): 34×34px, three `#E0E1CC` bars 22×2px, radius 2px, gap 5px. On `.open`: bar 1 `translateY(7px) rotate(45deg)`, bar 2 `opacity:0`, bar 3 `translateY(-7px) rotate(-45deg)`. Transition `transform .25s ease, opacity .2s ease`.
- **Mobile dropdown** (`.vt-mobile-menu`, rendered only when `menuOpen`): absolutely positioned below the nav (`top:100%; margin-top:16px; z-index:40`), `background: rgba(20,19,19,.97); backdrop-filter: blur(10px); border: 1px solid rgba(255,255,255,.1); border-radius: 16px; padding: 8px 18px;`. Links (`E-bikes`, `Features`, `Connect`, `Explore the bike`): `color:#E0E1CC; font-size:18px; padding:14px 4px; border-bottom:1px solid rgba(255,255,255,.08)`; last link `border-bottom:none; font-weight:700`. Each link closes the menu on click.

### 3. Stage spacer (`.vt-stage`, z-index 30, `flex: 1 1 0%`)
- `display: flex; align-items: flex-start; justify-content: flex-end; padding-top: 22px;`. In the current markup it is an empty `aria-hidden` spacer (the `.vt-hint` pulsing-dot styles exist in CSS but the hint element is not rendered).
- (Reference: `.vt-hint` styled as an uppercase 11px/600 label with a 36px circle dot, `border:1px solid rgba(46,211,176,.5); color:#2ed3b1;` running `vtPulse 1.8s ease-in-out infinite`.)

### 4. Bottom content (`.vt-bottom`, z-index 30)
12-column grid: `grid-template-columns: repeat(12, 1fr); align-items: end; gap: 18px 32px;`.
- **Headline** (`.vt-headline`, `grid-column: 1 / span 8`): `<h1>` containing the word-stagger component. h1 style: `color: #E0E1CC; font-weight: 500; font-size: clamp(36px, 7vw, 116px); line-height: 0.85; letter-spacing: -0.07em; white-space: nowrap; margin:0;`. Text: **Ready For The Ride**.
- **Right block** (`.vt-right`, `grid-column: 9 / span 4; align-self: end; transform: translateY(22px);`):
  - Paragraph (verbatim): `An integrated gearbox, battery, and motor engineered in carbon and built to be seen. Every system, in the open.` Style: `font-size: 16px; line-height: 1.2; color: rgba(225,224,204,.7);` animates in via `vtFadeUp .8s cubic-bezier(.16,1,.3,1) both` with `animation-delay: .5s`.
  - **CTA button** (`.vt-cta`): label **Reserve yours** plus a circular arrow. Pill: `color:#000; background:#E0E1CC; border:none; border-radius:9999px; padding:6px 6px 6px 22px; font-size: clamp(14px, 1vw, 16px); font-weight:500; display:inline-flex; align-items:center; gap:10px;`. Animates via `vtFadeUp .8s cubic-bezier(.16,1,.3,1) both`, `animation-delay: .7s`. Hover → `gap: 14px`. Inner circle `.circ`: 40×40px, `border-radius:50%; background:#000;` containing the SVG (stroke `#E0E1CC`); on button hover `.circ` scales to `1.1` (`transition: transform .25s ease`).

## Assets (every URL)
- Exterior photo (base layer): `https://cdn.jiro.build/ARS/OBLT%20E%20Bike/bike-exterior.png`
- X-ray / internals photo (revealed layer): `https://cdn.jiro.build/ARS/OBLT%20E%20Bike/bike-xray-original.png`
- CTA arrow icon: inline SVG, 16×16, `viewBox="0 0 24 24"`, `stroke="currentColor"`, `stroke-width="2.2"`, round caps/joins, path:
  ```
  M5 12h14M13 6l6 6-6 6
  ```

## Animations

### Cursor "x-ray" spotlight (signature interaction)
- State: `hovering` (bool) and `pos` ({x,y} in px relative to the section's bounding rect). `handleMove` computes `e.clientX - rect.left`, `e.clientY - http://rect.top`.
- Constants: `RADIUS = 165` px (spotlight radius), `FEATHER = 45` px (soft edge). Inner fully-clear radius = `RADIUS - FEATHER` = 120px.
- The x-ray layer's `maskImage` / `WebkitMaskImage` is set inline. When hovering:
  ```
  radial-gradient(circle 165px at {x}px {y}px, #000 0, #000 120px, transparent 165px)
  ```
  When not hovering (collapsed to nothing):
  ```
  radial-gradient(circle 0px at 50% 50%, transparent 0, transparent 0)
  ```
- Mask transitions at `.12s linear` so the reveal trails the cursor smoothly. NOTE: in CSS `mask`, opaque (`#000`) areas KEEP the layer — so the circle reveals the x-ray image while the rest of that layer is hidden (showing the exterior beneath).

### Headline word pull-up (`WordsPullUp` component)
- Splits the headline on spaces; each word is an `inline-block` span (`margin-right: 0.22em`, last word 0). Each word animates `wpuUp` with `cubic-bezier(.16,1,.3,1) both`, default `duration = 0.6s`, staggered by `delayStep = 0.08s` (`animationDelay: i * 0.08s`).
- Keyframes:
  ```
  @keyframes wpuUp { from { transform: translateY(20px); opacity: 0; } to { transform: translateY(0); opacity: 1; } }
  ```
- Optional superscript asterisk (`.wpu-ast`, `font-size:0.31em; vertical-align:top; top:0.15em; left:-0.05em;`) — not enabled here (`asterisk` defaults false).
- Respects `@media (prefers-reduced-motion: reduce)` → `.wpu-word { animation: none; }`.

### Fade-up for right block (`vtFadeUp`)
```
@keyframes vtFadeUp { from { transform: translateY(20px); opacity: 0; } to { transform: translateY(0); opacity: 1; } }
```
Paragraph delay `.5s`, CTA delay `.7s`; both `.8s cubic-bezier(.16,1,.3,1) both`.

### Pulse (defined for hint dot)
```
@keyframes vtPulse { 0%,100%{transform:scale(1);opacity:.7} 50%{transform:scale(1.12);opacity:1} }
```
Applied `vtPulse 1.8s ease-in-out infinite`.

## Responsive
- **≤1000px**: padding `24px 28px 32px`; nav becomes `1fr auto` (logo + right); center `.vt-menu` and `.vt-explore` hidden; hamburger shown; `.vt-bottom` collapses to single column (`gap:16px`); headline & right span full width; `.vt-right` `transform:none; align-self:start; margin-top:4px; max-width:520px`.
- **≤600px**: padding `18px 20px 26px`; logo `font-size:22px`; headline `white-space:normal; font-size: clamp(40px, 13vw, 72px); line-height:0.92`; paragraph `font-size:15px; margin-bottom:16px`; CTA `font-size:14px; padding:5px 5px 5px 20px`; `.circ` 36×36px.

## Key design principles
- Dark stage (`#272727`) with a single warm-cream accent (`#E0E1CC`) and a teal accent (`#2ed3b1`) reserved for the (optional) pulse hint.
- The product reveal IS the hero: cursor acts as an x-ray torch over a layered photo pair.
- Editorial oversized headline (line-height 0.85, tight `-0.07em` tracking) anchored bottom-left; supporting copy + CTA bottom-right.
- Staggered, eased (`cubic-bezier(.16,1,.3,1)`) entrance for hierarchy.

## Common mistakes to avoid
- Don't invert the mask logic: opaque `#000` in the radial gradient REVEALS the x-ray layer; the transparent ring hides it. Getting this backwards shows internals everywhere except under the cursor.
- Keep `RADIUS - FEATHER` (120px) as the inner solid stop and `RADIUS` (165px) as the transparent stop — that 45px band is the soft feather.
- Mouse coordinates must be relative to the section rect (`getBoundingClientRect`), not the viewport.
- Mask transition is `.12s linear` only — a longer/eased transition makes the spotlight feel laggy.
- `white-space: nowrap` on the headline is intentional on desktop; only switch to `normal` at ≤600px.
- Scope all resets and the Almarai `@import` to the component; do not touch global `body`/`html`.

## Page title
OBLT — Ready For The Ride

## Integration (build-safety — do not skip)
- Add this section as a **new** component file with a unique name. Don't edit or overwrite any existing file except to add its import and render it.
- Render it **after** all existing sections; keep every previously built section exactly as-is — never replace or remove them.
- If no project exists, create a minimal React + Tailwind app; if one exists, use it as-is — don't re-scaffold or change the Tailwind/build config or version.
- Keep it self-contained: scope its fonts and any resets to this section; never set global `body`/`html`/`*` styles or a global font.
- Install only the libraries this section names.

中文译文

# OBLT E-bike 页头

一个全视口、深色、电影感的 E-bike 产品页头,面向品牌 **OBLT**,使用 React(客户端组件)配合纯 CSS 构建,并带有一个跟随光标的交互式「X 光」聚光揭示效果 —— 移动鼠标会擦除自行车的外观照片,露出其下方内部的碳纤维/变速箱结构。仅使用 React 构建(无动画库)。

## 技术栈(实际导入的库)
- 仅 React —— `useRef`、`useState` 以及 `MouseEvent` 类型。不使用 framer-motion,不使用 GSAP,不使用图标库。所有动画都是手写的 CSS keyframes + 内联 CSS `mask-image`。
- SVG 图标(CTA 箭头)为手工内联,不是来自图标库。

## 字体与全局样式
- 单一 Google 字体,在 `<style>` 块内导入:
  ```
  @import url('https://fonts.googleapis.com/css2?family=Almarai:wght@300;400;700;800&display=swap');
  ```
- 字体栈:`"Almarai","Helvetica Neue",Helvetica,Arial,sans-serif`。
- `-webkit-font-smoothing: antialiased`。`box-sizing: border-box` 应用于根元素及所有后代(作用域限定在 `.vt-header`,绝不全局)。

## 区块容器
- 根元素 `<header className="vt-header">` 是鼠标追踪元素(处理器:`onMouseEnter`、`onMouseMove`、`onMouseLeave`)。
- 样式:`position: relative; display: flex; flex-direction: column; min-height: 100vh; overflow: hidden; padding: 32px 56px 44px; background-color: #272727; color: #fff;`。
- 内部纵向流:顶部导航,然后是一个 flex-grow 的间隔「舞台」,然后是固定在底部的底部内容。

## 结构,逐区块说明

### 1. 揭示背景(`.vt-bg`,absolute inset:0,z-index 0,pointer-events:none)
三个堆叠图层:
- **底层外观图**(`.vt-bg-img`):完整的自行车外观照片,`object-fit: cover; object-position: center;`,填满该图层。`user-select:none`、`-webkit-user-drag:none`、`referrerPolicy="no-referrer"`。
- **X 光图层**(`.vt-bg-xray`,z-index 1):包含自行车的 X 光/内部图像(同样是 cover/center 的尺寸方式)。该图层由一个由光标位置驱动的径向渐变遮罩(见「动画」)。`will-change: -webkit-mask-image, mask-image;` 以及 `transition: -webkit-mask-image .12s linear, mask-image .12s linear;`。
- **薄纱叠层**(`.vt-bg-veil`,z-index 2):一层纵向变暗渐变,让顶部与底部的文字保持可读:
  ```
  linear-gradient(180deg, rgba(39,38,38,.62) 0%, rgba(39,38,38,.10) 26%, rgba(39,38,38,.10) 60%, rgba(39,38,38,.82) 100%)
  ```

### 2. 顶部导航(`.vt-nav`,z-index 30)
- `display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 24px;`。
- **Logo**(左侧,`.vt-logo`):文本 `OBLT` 后跟一个 `.` span。`font-size: 28px; font-weight: 700; letter-spacing: 0.5px; color: #E0E1CC;`(点也是 `#E0E1CC`)。
- **中间菜单**(`.vt-menu`,gap 40px):三个链接 —— `E-bikes`、`Features`、`Connect`。每个都是:`font-size: 16px; font-weight: 400; letter-spacing: .3px; color: #E0E1CC; opacity: .85; transition: opacity .2s ease;`,hover → opacity 1。
- **右侧栏组**(`.vt-nav-right`,gap 18px):一个大写的 explore 链接,外加一个汉堡按钮。
  - `.vt-explore` 链接文本:`Explore the bike` —— `font-size: 14px; font-weight: 700; letter-spacing: 1.5px; text-transform: uppercase; color: #E0E1CC;`,hover → opacity .65。
  - **汉堡按钮**(`.vt-burger`,桌面端隐藏):34×34px,三根 `#E0E1CC` 色条,22×2px,圆角 2px,间距 5px。在 `.open` 状态下:第 1 根条 `translateY(7px) rotate(45deg)`,第 2 根条 `opacity:0`,第 3 根条 `translateY(-7px) rotate(-45deg)`。过渡 `transform .25s ease, opacity .2s ease`。
- **移动端下拉菜单**(`.vt-mobile-menu`,仅在 `menuOpen` 时渲染):绝对定位在导航下方(`top:100%; margin-top:16px; z-index:40`),`background: rgba(20,19,19,.97); backdrop-filter: blur(10px); border: 1px solid rgba(255,255,255,.1); border-radius: 16px; padding: 8px 18px;`。链接(`E-bikes`、`Features`、`Connect`、`Explore the bike`):`color:#E0E1CC; font-size:18px; padding:14px 4px; border-bottom:1px solid rgba(255,255,255,.08)`;最后一个链接 `border-bottom:none; font-weight:700`。每个链接点击后都会关闭菜单。

### 3. 舞台间隔(`.vt-stage`,z-index 30,`flex: 1 1 0%`)
- `display: flex; align-items: flex-start; justify-content: flex-end; padding-top: 22px;`。在当前标记中,它是一个空的 `aria-hidden` 间隔元素(`.vt-hint` 的脉冲圆点样式在 CSS 中存在,但提示元素并未渲染)。
- (参考:`.vt-hint` 被样式化为大写的 11px/600 标签,带一个 36px 的圆形圆点,`border:1px solid rgba(46,211,176,.5); color:#2ed3b1;`,运行 `vtPulse 1.8s ease-in-out infinite`。)

### 4. 底部内容(`.vt-bottom`,z-index 30)
12 列网格:`grid-template-columns: repeat(12, 1fr); align-items: end; gap: 18px 32px;`。
- **主标题**(`.vt-headline`,`grid-column: 1 / span 8`):包含逐词错落组件的 `<h1>`。h1 样式:`color: #E0E1CC; font-weight: 500; font-size: clamp(36px, 7vw, 116px); line-height: 0.85; letter-spacing: -0.07em; white-space: nowrap; margin:0;`。文本:**Ready For The Ride**。
- **右侧块**(`.vt-right`,`grid-column: 9 / span 4; align-self: end; transform: translateY(22px);`):
  - 段落(逐字):`An integrated gearbox, battery, and motor engineered in carbon and built to be seen. Every system, in the open.` 样式:`font-size: 16px; line-height: 1.2; color: rgba(225,224,204,.7);`,通过 `vtFadeUp .8s cubic-bezier(.16,1,.3,1) both` 以 `animation-delay: .5s` 动画入场。
  - **CTA 按钮**(`.vt-cta`):标签 **Reserve yours** 外加一个圆形箭头。胶囊:`color:#000; background:#E0E1CC; border:none; border-radius:9999px; padding:6px 6px 6px 22px; font-size: clamp(14px, 1vw, 16px); font-weight:500; display:inline-flex; align-items:center; gap:10px;`。通过 `vtFadeUp .8s cubic-bezier(.16,1,.3,1) both` 动画,`animation-delay: .7s`。Hover → `gap: 14px`。内部圆圈 `.circ`:40×40px,`border-radius:50%; background:#000;`,内含 SVG(描边 `#E0E1CC`);按钮 hover 时 `.circ` 缩放至 `1.1`(`transition: transform .25s ease`)。

## 素材(每个 URL)
- 外观照片(底层):`https://cdn.jiro.build/ARS/OBLT%20E%20Bike/bike-exterior.png`
- X 光 / 内部照片(被揭示的图层):`https://cdn.jiro.build/ARS/OBLT%20E%20Bike/bike-xray-original.png`
- CTA 箭头图标:内联 SVG,16×16,`viewBox="0 0 24 24"`,`stroke="currentColor"`,`stroke-width="2.2"`,圆头端点/连接,路径:
  ```
  M5 12h14M13 6l6 6-6 6
  ```

## 动画

### 光标「X 光」聚光(标志性交互)
- 状态:`hovering`(布尔值)和 `pos`({x,y},单位为 px,相对于该区块的 bounding rect)。`handleMove` 计算 `e.clientX - rect.left`、`e.clientY - http://rect.top`。
- 常量:`RADIUS = 165` px(聚光半径),`FEATHER = 45` px(柔和边缘)。内部完全通透的半径 = `RADIUS - FEATHER` = 120px。
- X 光图层的 `maskImage` / `WebkitMaskImage` 以内联方式设置。悬停时:
  ```
  radial-gradient(circle 165px at {x}px {y}px, #000 0, #000 120px, transparent 165px)
  ```
  未悬停时(收缩为空):
  ```
  radial-gradient(circle 0px at 50% 50%, transparent 0, transparent 0)
  ```
- 遮罩以 `.12s linear` 过渡,使揭示效果平滑地跟随光标。注意:在 CSS 的 `mask` 中,不透明(`#000`)区域会保留该图层 —— 因此圆形区域会揭示 X 光图像,而该图层的其余部分被隐藏(露出下方外观图)。

### 主标题逐词上拉(`WordsPullUp` 组件)
- 按空格拆分标题;每个词是一个 `inline-block` span(`margin-right: 0.22em`,最后一个词为 0)。每个词以 `cubic-bezier(.16,1,.3,1) both` 播放 `wpuUp` 动画,默认 `duration = 0.6s`,以 `delayStep = 0.08s` 错落(`animationDelay: i * 0.08s`)。
- 关键帧:
  ```
  @keyframes wpuUp { from { transform: translateY(20px); opacity: 0; } to { transform: translateY(0); opacity: 1; } }
  ```
- 可选的上标星号(`.wpu-ast`,`font-size:0.31em; vertical-align:top; top:0.15em; left:-0.05em;`)—— 此处未启用(`asterisk` 默认为 false)。
- 遵循 `@media (prefers-reduced-motion: reduce)` → `.wpu-word { animation: none; }`。

### 右侧块的上浮(`vtFadeUp`)
```
@keyframes vtFadeUp { from { transform: translateY(20px); opacity: 0; } to { transform: translateY(0); opacity: 1; } }
```
段落延迟 `.5s`,CTA 延迟 `.7s`;两者都是 `.8s cubic-bezier(.16,1,.3,1) both`。

### 脉冲(为提示圆点定义)
```
@keyframes vtPulse { 0%,100%{transform:scale(1);opacity:.7} 50%{transform:scale(1.12);opacity:1} }
```
应用为 `vtPulse 1.8s ease-in-out infinite`。

## 响应式
- **≤1000px**:内边距 `24px 28px 32px`;导航变为 `1fr auto`(logo + 右侧);中间的 `.vt-menu` 与 `.vt-explore` 隐藏;汉堡按钮显示;`.vt-bottom` 坍缩为单列(`gap:16px`);主标题与右侧块占满整宽;`.vt-right` `transform:none; align-self:start; margin-top:4px; max-width:520px`。
- **≤600px**:内边距 `18px 20px 26px`;logo `font-size:22px`;主标题 `white-space:normal; font-size: clamp(40px, 13vw, 72px); line-height:0.92`;段落 `font-size:15px; margin-bottom:16px`;CTA `font-size:14px; padding:5px 5px 5px 20px`;`.circ` 36×36px。

## 关键设计原则
- 深色舞台(`#272727`),配以单一的暖奶油色点缀(`#E0E1CC`),以及一个留给(可选的)脉冲提示的青色点缀(`#2ed3b1`)。
- 产品揭示本身就是主角:光标如同一把 X 光手电,在一对分层的照片之上扫过。
- 编辑风格的超大主标题(行高 0.85,紧凑的 `-0.07em` 字距)锚定在左下方;辅助文案 + CTA 位于右下方。
- 为建立层级,入场动画采用错落、缓动(`cubic-bezier(.16,1,.3,1)`)。

## 需要避免的常见错误
- 不要反转遮罩逻辑:径向渐变中的不透明 `#000` 会揭示 X 光图层;透明环会隐藏它。搞反的话,除了光标下方,各处都会显示内部结构。
- 将 `RADIUS - FEATHER`(120px)保持为内部实心停点、`RADIUS`(165px)保持为透明停点 —— 那 45px 的带宽就是柔和羽化。
- 鼠标坐标必须相对于区块的 rect(`getBoundingClientRect`),而不是视口。
- 遮罩过渡只用 `.12s linear` —— 更长或带缓动的过渡会让聚光显得迟滞。
- 主标题上的 `white-space: nowrap` 在桌面端是有意为之;仅在 ≤600px 时切换为 `normal`。
- 将所有重置样式和 Almarai 的 `@import` 都限定在该组件内;不要触碰全局的 `body`/`html`。

## 页面标题
OBLT — Ready For The Ride

## 集成(构建安全 —— 不要跳过)
- 将此区块作为一个使用唯一名称的 **新** 组件文件添加。除添加它的 import 并渲染它之外,不要编辑或覆盖任何已有文件。
- 在所有已有区块 **之后** 渲染它;保持每一处此前构建的区块完全原样 —— 绝不替换或移除它们。
- 如果项目不存在,创建一个最小的 React + Tailwind 应用;如果已存在,就按原样使用 —— 不要重新搭建脚手架,也不要更改 Tailwind/构建配置或版本。
- 保持自包含:将其字体和任何重置样式都限定在此区块内;绝不要设置全局的 `body`/`html`/`*` 样式或全局字体。
- 只安装此区块所点名的库。

溯源

原作者
iamtanzil_
发布日期
2026-09-25(由推文 ID 反解)
原始出处
查看原帖 ↗
收录来源
yihui-dev/awesome-opus5-5-videos · iamtanzil-120030 · MIT