Claude Opus 5.5
OBLT 電動自行車互動式3D模型,滑鼠懸停時可顯示內部零件的「X光」效果
提示詞
# OBLT E-bike Header
一個全視窗、深色電影感的 OBLT 品牌電動自行車產品頁首,以 React(client component)、純 CSS,以及互動式跟隨游標的「x-ray」聚光燈揭示效果打造——移動滑鼠時,會擦去自行車的外觀照片,露出下方的內部碳纖維/變速箱結構。僅使用 React 建立(不使用動畫函式庫)。
## 技術堆疊(實際匯入的函式庫)
- 僅使用 React — `useRef`、`useState` 與 `MouseEvent` 型別。不使用 framer-motion、GSAP 或圖示函式庫。所有動畫皆以手寫 CSS keyframes + inline 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`,絕不套用至全域)。
## Section 容器
- 根 `<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 間隔「stage」,最後是固定於底部的內容。
## 結構,依區段說明
### 1. Reveal 背景(`.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-ray 圖層**(`.vt-bg-xray`,z-index 1):包含自行車 X-ray/內部圖片(相同的 cover/center 尺寸設定)。此圖層由游標位置驅動的 radial gradient 遮罩(詳見 Animations)。`will-change: -webkit-mask-image, mask-image;` 以及 `transition: -webkit-mask-image .12s linear, mask-image .12s linear;`。
- **Veil 覆蓋層**(`.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 橫線,radius 2px,gap 5px。在 `.open` 狀態下:橫線 1 `translateY(7px) rotate(45deg)`,橫線 2 `opacity:0`,橫線 3 `translateY(-7px) rotate(-45deg)`。Transition `transform .25s ease, opacity .2s ease`。
- **行動版下拉選單**(`.vt-mobile-menu`,僅在 `menuOpen` 時 render):絕對定位於導覽列下方(`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. Stage 間隔區(`.vt-stage`,z-index 30,`flex: 1 1 0%`)
- `display: flex; align-items: flex-start; justify-content: flex-end; padding-top: 22px;`。目前的 markup 中,它是一個空的 `aria-hidden` 間隔元素(`.vt-hint` 的脈動圓點樣式存在於 CSS 中,但 hint 元素並未 render)。
- (參考:`.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>` 包含 word-stagger 元件。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(stroke `#E0E1CC`);按鈕 hover 時 `.circ` 縮放至 `1.1`(`transition: transform .25s ease`)。
## 素材(所有 URL)
- 外觀照片(基礎圖層):`https://cdn.jiro.build/ARS/OBLT%20E%20Bike/bike-exterior.png`
- X-ray/內部照片(揭示圖層):`https://cdn.jiro.build/ARS/OBLT%20E%20Bike/bike-xray-original.png`
- CTA 箭頭圖示:inline SVG,16×16,`viewBox="0 0 24 24"`,`stroke="currentColor"`,`stroke-width="2.2"`,圓角端點/接角,path:
```
M5 12h14M13 6l6 6-6 6
```
## 動畫
### 游標「x-ray」聚光燈(核心互動)
- State:`hovering`(bool)與 `pos`(相對於 section bounding rect 的 px 座標 `{x,y}`)。`handleMove` 計算 `e.clientX - rect.left`、`e.clientY - http://rect.top`。
- 常數:`RADIUS = 165` px(聚光燈半徑)、`FEATHER = 45` px(柔和邊緣)。內部完全透明半徑 = `RADIUS - FEATHER` = 120px。
- X-ray 圖層的 `maskImage`/`WebkitMaskImage` 以 inline 方式設定。Hover 時:
```
radial-gradient(circle 165px at {x}px {y}px, #000 0, #000 120px, transparent 165px)
```
未 Hover 時(收合至無):
```
radial-gradient(circle 0px at 50% 50%, transparent 0, transparent 0)
```
- 遮罩以 `.12s linear` 進行 transition,讓揭示效果平順地追隨游標。注意:在 CSS `mask` 中,不透明的(`#000`)區域會保留該圖層——圓形區域會揭示 X-ray 圖片,而該圖層其餘部分會被隱藏(顯示下方的外觀圖片)。
### 標題單字上移(`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`)。
- 選用的上標星號(`.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`。
## Responsive
- **≤1000px**:padding `24px 28px 32px`;導覽列變為 `1fr auto`(logo + right);中央 `.vt-menu` 與 `.vt-explore` 隱藏;顯示漢堡按鈕;`.vt-bottom` 收合為單欄(`gap:16px`);標題與右側區塊佔滿寬度;`.vt-right` `transform:none; align-self:start; margin-top:4px; max-width:520px`。
- **≤600px**:padding `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-ray 手電筒,在一對疊加的照片上移動。
- 編輯感的超大型標題(line-height 0.85、緊密的 `-0.07em` 字距)固定於左下方;輔助文案與 CTA 位於右下方。
- 以交錯、平滑(`cubic-bezier(.16,1,.3,1)`)的進場動畫建立層次。
## 常見錯誤與避免方式
- 不要反轉遮罩邏輯:radial gradient 中的不透明 `#000` 會揭示 X-ray 圖層;透明環帶會隱藏它。若邏輯顛倒,內部結構會出現在游標以外的所有區域。
- 保持 `RADIUS - FEATHER`(120px)為內部實心停止點,並以 `RADIUS`(165px)作為透明停止點——這個 45px 的區段就是柔和羽化範圍。
- 滑鼠座標必須相對於 section rect(`getBoundingClientRect`),而非視窗。
- 遮罩 transition 僅為 `.12s linear`——較長或帶有 easing 的 transition 會讓聚光燈產生延遲感。
- 標題上的 `white-space: nowrap` 在桌面版是刻意設定;僅在 ≤600px 時切換為 `normal`。
- 所有 reset 與 Almarai `@import` 都必須限定於元件;不要修改全域 `body`/`html`。
## Page title
OBLT — Ready For The Ride
## Integration(建置安全性 — 不可略過)
- 將此區段加入一個**新的**元件檔案,使用獨特名稱。除新增其 import 與 render 外,不要編輯或覆寫任何現有檔案。
- 在**所有現有區段之後** render;保持所有先前建立的區段完全不變——絕不替換或移除它們。
- 如果不存在專案,建立一個最小化 React + Tailwind app;如果已存在專案,直接使用現有專案——不要重新建立腳手架,也不要變更 Tailwind/build 設定或版本。
- 保持自包含:將字型與任何 reset 限定於此區段;絕不設定全域 `body`/`html`/`*` 樣式或全域字型。
- 僅安裝此區段所指定的函式庫。# 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.
此提示詞的權利屬於作者 @iamtanzil_。任何商業使用(推廣 AI 工具、聚合平台、Telegram 機器人)由你自行負責,mozgi.io 不承擔任何責任。 詳情 →











