ai21.net
言語

OBLT Eバイク・ヘッダー

OBLT Eバイク・ヘッダー — 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バイク・ヘッダー

ブランド **OBLT** のための、フルビューポートで暗くシネマティックな Eバイク製品ヘッダー。React(クライアントコンポーネント)と純粋な CSS で構築し、カーソルに追従するインタラクティブな「X線」スポットライト・リビールを備える — マウスを動かすとバイクの外観写真が拭い去られ、その下にあるカーボン/ギアボックスの内部構造が露出する。React のみで構築(アニメーションライブラリなし)。

## 技術スタック(実際にインポートするライブラリ)
- React のみ — `useRef`、`useState`、そして `MouseEvent` 型。framer-motion なし、GSAP なし、アイコンライブラリなし。アニメーションはすべて手書きの CSS キーフレーム + インライン CSS の `mask-image`。
- SVG アイコン(CTA の矢印)は手動でインライン化しており、ライブラリ由来ではない。

## フォントとグローバルスタイル
- Google フォント 1 つを `<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)
3 つの積み重ねレイヤー:
- **ベースの外観画像**(`.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;`。
- **ロゴ**(左、`.vt-logo`): テキスト `OBLT` の後に `.` の span。`font-size: 28px; font-weight: 700; letter-spacing: 0.5px; color: #E0E1CC;`(ドットも `#E0E1CC`)。
- **中央メニュー**(`.vt-menu`、gap 40px): 3 つのリンク — `E-bikes`、`Features`、`Connect`。各: `font-size: 16px; font-weight: 400; letter-spacing: .3px; color: #E0E1CC; opacity: .85; transition: opacity .2s ease;` ホバー → 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;` ホバー → opacity .65。
  - **ハンバーガー**(`.vt-burger`、デスクトップでは非表示): 34×34px、`#E0E1CC` のバー 3 本(22×2px)、radius 2px、gap 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` でアニメーション。ホバー → `gap: 14px`。内側の円 `.circ`: 40×40px、`border-radius:50%; background:#000;`、SVG(stroke `#E0E1CC`)を含む。ボタンホバー時 `.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"`、round の cap/join、パス:
  ```
  M5 12h14M13 6l6 6-6 6
  ```

## アニメーション

### カーソル「X線」スポットライト(シグネチャー・インタラクション)
- 状態: `hovering`(真偽値)と `pos`(セクションのバウンディング矩形に対する px 単位の {x,y})。`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)。各単語は `wpuUp` でアニメーションし、`cubic-bezier(.16,1,.3,1) both`、デフォルト `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**: padding `24px 28px 32px`、ナビは `1fr auto`(ロゴ + 右)になり、中央の `.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`、ロゴ `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線トーチとして機能する。
- エディトリアルな特大見出し(line-height 0.85、タイトな `-0.07em` トラッキング)を左下に固定し、サポートコピー + CTA を右下に配置。
- 階層を作るための、ずらしたイージング(`cubic-bezier(.16,1,.3,1)`)付きのエントランス。

## 避けるべきよくある間違い
- マスクのロジックを反転させないこと: 放射状グラデーションの不透明な `#000` は X線レイヤーを表示し、透明なリングはそれを隠す。これを逆にすると、カーソルの下以外のすべての場所で内部が表示されてしまう。
- `RADIUS - FEATHER`(120px)を内側のソリッドストップ、`RADIUS`(165px)を透明ストップとして維持すること — その 45px の帯がソフトフェザー。
- マウス座標はビューポートではなく、セクション矩形(`getBoundingClientRect`)に対して相対でなければならない。
- マスクのトランジションは `.12s linear` のみ — より長い/イージング付きのトランジションではスポットライトが遅れて感じられる。
- 見出しの `white-space: nowrap` はデスクトップでは意図的。`normal` に切り替えるのは ≤600px のみ。
- すべてのリセットと Almarai の `@import` をコンポーネントにスコープすること。グローバルの `body`/`html` に触れないこと。

## ページタイトル
OBLT — Ready For The Ride

## 統合(ビルドの安全性 — 省略しないこと)
- このセクションを固有の名前を持つ**新しい**コンポーネントファイルとして追加すること。そのインポートを追加してレンダリングする場合を除き、既存ファイルを編集・上書きしないこと。
- すべての既存セクションの**後**にレンダリングすること。以前に構築されたすべてのセクションはそのまま維持し、決して置き換えたり削除したりしないこと。
- プロジェクトが存在しない場合は、最小限の React + Tailwind アプリを作成すること。存在する場合はそのまま使用し、Tailwind/ビルド設定やバージョンを再スキャフォールドしたり変更したりしないこと。
- 自己完結させること: フォントとすべてのリセットをこのセクションにスコープし、グローバルの `body`/`html`/`*` スタイルやグローバルフォントを決して設定しないこと。
- このセクションが名指しするライブラリのみをインストールすること。

出典

原作者
iamtanzil_
公開日
2026-09-25(由推文 ID 反解)
原典
元の投稿を見る ↗
収録元
yihui-dev/awesome-opus5-5-videos · iamtanzil-120030 · MIT