デザイン&モーション · nexu-io/html-anything

web-proto-soft

Apple風スタイル: シルバー/クリームのキャンバス + 2層ベゼルカード + button-in-button + スプリングモーション

L1 基本 · ソース登録のみV1 コミット固定Dual-pass Audit
Author nexu-ioGitHub nexu-io/html-anything ↗Stars 8827License Apache-2.0(仓库根 LICENSE 文件;GitHub API license.spdx_id = Apache-2.0)Commit 553ed98c28
管理レベルは Skill の能力と推奨統制措置を示すものであり、品質や安全性の認証、利用可否の判定ではありません。使用の可否はユーザーおよび管理者が決定します。Agent 環境によって制約が異なるため、自動保護を仮定しないでください。第三者製 Skill の著作権は原著作者に帰属し、利用リスクは利用者が負います。

1仕組みと動作原理

本スキルは実行可能プログラムではなく、html-anythingの「テンプレート」です。loader.tsによって実行時にディスクから読み込まれる単一ディレクトリ(SKILL.md + example.html[/example.md])であり、テンプレートの追加はディレクトリの追加のみで完結し、TypeScriptコードの変更は不要です。

next/src/lib/templates/loader.ts
Adding a template = adding a folder. No TS code change required; the API
SKILLS_DIRはアプリケーションのcwd基準でsrc/lib/templates/skillsに固定されています。listSkills()は第1階層のサブディレクトリを走査し、isValidBundledIdでフィルタリングした上で、ディレクトリごとにSKILL.mdを読み込んでfrontmatterをパースします。そのため、「セレクター用メタデータ」と「生成用プロンプト本文」は同一ファイルに由来します。

frontmatterはセレクターやAPI向けのメタデータ(zh_name/en_name/emoji/description/category/scenario/aspect_hint/featured/recommended/tags)であり、fmToMeta()によってSkillMetaへとマッピングされます。frontmatter以降の本文がモデルへ渡される実際の仕様となります。

next/src/lib/templates/loader.ts
zhName: fm.zh_name ?? fm.name ?? id,
idはディレクトリ名から取得されます。exampleメタデータ(example_id/name/format/tagline/desc/source_url)は、ディレクトリにexample.md/htmlが存在する場合にのみSkillExampleMetaとして生成されます。一覧APIではbodyが意図的に除外されています(コード内コメント: Body is excluded so we can return the entire registry in one cheap fetch)。

生成時、テンプレート本文はプロンプトのbodyとして扱われます。/api/convertはassemblePrompt()を用いて「グローバルデザイン指示 + 本テンプレート本文 + ユーザーコンテンツ」を1つのプロンプトに組み立ててホストのローカルagent CLIに渡し、生成されたHTMLをstdout経由でストリーミングキャプチャします。

next/src/app/api/convert/route.ts
prompt = assemblePrompt({ body: skill.body, content, format });
同ルートにはeditFromHtml/editFromContentによる「差分最小化編集」のブランチも存在します。このパイプライン上において、テンプレート本文は単なる文字列に過ぎず、評価や実行は一切行われません。

テンプレート本文の前にはグローバル共通指示(SHARED_DESIGN_DIRECTIVES)が付与され、技術面およびコンテンツ面の規約が全テンプレート共通で適用されます。サンプルHTMLに見られる外部CDNやフォントリンクはこれに由来します(ホストシェルによる注入であり、テンプレート自体の要件ではありません)。

next/src/lib/templates/shared.ts
通过 CDN 引入 Tailwind v3 Play (https://cdn.tailwindcss.com) 与所需的 Google Fonts。
テンプレート本文はスタイル、レイアウト、コンポーネントのみを担当し、これらの厳格な要件を重複して記述しません。評価対象はテンプレート自身のディレクトリのみであり、当該エンドポイントはホストシェルの動作としてsecurity.reasonに記載されています。

成果物はstdoutテキストとして返却されます。グローバル指示によりエージェントによるファイルシステムへのアクセスは明示的に禁止されており、ディスク保存はフロントエンド側が担当します。したがって、テンプレートディレクトリにはスクリプトもファイル書き込み機能も存在しません。

next/src/lib/templates/shared.ts
**禁止使用 Write / Edit / MultiEdit / Bash / Create / 任何文件系统工具**。
原文指示には「HTMLをいかなる.htmlファイルにも書き込まず……フロントエンドがstdoutテキストを直接キャプチャし、ファイルのディスク保存はフロントエンド側が担当する」と記載されています。成果物は最終的にフロントエンドによってタスク履歴へ記録され、エクスポートされます。

example.htmlはパッケージに同梱された事前レンダリング済みのサンプルです。/api/templates/<id>/previewはiframe向けにtext/htmlとしてそのまま返却し(セレクター内インラインプレビュー用)、/api/templates/<id>/exampleはexample.mdとexample.htmlをセットで返却します。

next/src/app/api/templates/[id]/preview/route.ts
return new Response(skill.exampleHtml, {
サンプルはプレビューやドキュメント表示にのみ使用され、プロンプト生成には関与しません(生成にはSKILL.md本文のみを使用)。そのため、サンプル内の外部リンクはテンプレート自体の機能境界に影響を与えません。

本文では「Appleクオリティのソフトな質感」を4つの実行可能な要素に分解しています。シルバー/クリームのキャンバス + ambient mesh背景、2層ベゼル(double-bezel)カード、button-in-button CTA、スプリング微小バウンドアニメーションです。

next/src/lib/templates/skills/web-proto-soft/SKILL.md
- Double-bezel 卡片 (内外两层圆角 + 高光)
「- Silver / cream canvas + ambient mesh background」「- Button-in-button CTA」「- Spring motion (微反発のあるhover)」といった指定が揃っており、いずれも構造レベルの指示です。

2層ベゼルは角丸変数のペアによって実装されています。外層は--shell-radius 2.25rem、内層は--core-radius = shell - 0.4remとし、--innerlightハイライトと組み合わせて「ネストされたベゼル」の視覚効果を生み出します。

next/src/lib/templates/skills/web-proto-soft/example.html
--shell-radius: 2.25rem;
同一の変数ブロック内で--core-radius: calc(2.25rem - 0.4rem)および--innerlight: rgba(255,255,255,0.65)が定義されており、サンプルコードのコメントではこの領域がBENTO (double-bezel cards)と明記されています。

スプリングアニメーションは専用のイージング曲線(--ease-spring: cubic-bezier(0.16, 1.16, 0.3, 1)、ベジェのオーバーシュート値 > 1)によって実現され、非弾性遷移向けに通常の--easeも併用されます。

next/src/lib/templates/skills/web-proto-soft/example.html
--ease-spring: cubic-bezier(0.16, 1.16, 0.3, 1);
サンプルではこれがhoverの移動(transition: transform 360ms var(--ease-spring))に適用されており、「微反発」の技術的根拠となっています。

ambient mesh背景は、2つの大きなぼかし色斑(.mesh::before/::after)がゆっくりと漂う構成であり、prefers-reduced-motionに対するアニメーション無効化処理も施されています。

next/src/lib/templates/skills/web-proto-soft/example.html
@media (prefers-reduced-motion: reduce) { .mesh::before, .mesh::after { animation: none; } }
これは3つのプロトタイプの中で唯一reduced-motionを明示的に処理しているサンプルであり、vfx-text-cursor本文の要件とも共通する優れた点です。

CLI側にはキーワードによる直接マッチング機能が存在します。skills-matcher.tsがユーザー入力内のキーワードを本テンプレートidへ直接マッピングし、ヒット時はconfidence=ヒット数×2+3を付与します。閾値3に達した場合はローカルルールが適用され、モデルによるテンプレート選択は行われません。

cli/src/skills-matcher.ts
[["苹果", "Apple", "iOS", "soft", "squircle"], "web-proto-soft"],
苹果/Apple/iOS/soft/squircleが本テンプレートに直接マッチします。また、他の2つのプロトタイプと共通のdesignシナリオシグナルを使用しています。

CLIフォールバックマッチングで使用される閾値定数:AI要約マッチングを有効にするにはコンテンツ長が60文字を超えている必要があり、強シグナルの閾値は3です。

cli/src/skills-matcher.ts
const MIN_CONTENT_LENGTH_FOR_AI = 60;
さらにSCENARIO_SIGNALSによりテンプレートのscenarioに応じてキーワードの重み付けが行われ、fallbackMatchがtags/zhName/descriptionを用いてスコアリングします。両レイヤーが不発の場合にのみ、エージェントを呼び出して要約マッチングを行います。

ホストシェルはsandbox="allow-scripts allow-same-origin"が設定されたiframeを使用してサンプル/成果物をレンダリングします(スクリプトおよび同一オリジンアクセスを許可)。これは製品シェル側の設計判断であり、リスクとして記載されていますが、本スキルの安全性評価には影響しません。

next/src/components/template-picker.tsx
sandbox="allow-scripts allow-same-origin"
preview-pane.tsx / deck-viewer.tsxと同様の実装です。サンプルHTML内のインラインJSはブラウザでのプレビュー時にのみ実行され、スキル自体はいかなるスクリプトも実行しません。

2コア機能

01シルバー/クリームのキャンバス + ambient mesh背景(reduced-motion対応を含む)
02Double-bezelカード(shell/core 2層角丸 + 内部ハイライト)
03Button-in-button CTA
04スプリング微小バウンドイージング
05squircle大角丸デザインシステム
06表示時のrevealマイクロインタラクション

3外部依存関係

KindDependency / Endpoint
networkGoogle Fonts(Plus Jakarta Sans / JetBrains Mono)
networkGoogle Fonts 静态资源域(preconnect)

4推奨統制措置と判定根拠

安全運用のための推奨統制措置
Agent 向け
自動ロード可能
管理者向け
ソースとバージョンの記録
判定根拠(ファイルパスと抜粋)
  • SKILL.md: スクリプト実行や外部への副作用を伴わない、純粋なプロンプト指示およびルールテキストのみで構成
監査ノート: 。評価対象=本スキルディレクトリ(next/src/lib/templates/skills/web-proto-soft/)。全ファイルを精査した結果、スクリプトなし、クレデンシャル読み取りなし、ディスク書き込みなしを確認。ディレクトリ内に出現するエンドポイントはGoogle Fonts(Plus Jakarta Sans / JetBrains Mono)およびGoogle Fonts静的リソースドメイン(preconnect)のみであり、これらもすべて「成果物サンプル」であるexample.html内に限定されています。SKILL.md本文はレイアウト、スタイル、フォントファミリー名を指定するのみで、実行時の外部インターフェースには一切言及していないため、純粋な指示テンプレート=greenと判定します。ホスト側の補足(判定には非算入):html-anything製品シェルはassemblePrompt()を介して本文をプロンプトに組み込み、ローカルagent CLIを起動してcdn.tailwindcss.com + Google Fontsの要件を注入します(next/src/lib/templates/shared.ts)。また、プレビュー用iframeにはsandbox="allow-scripts allow-same-origin"が使用されています(next/src/components/template-picker.tsx)。

5二重目の独立検証

  • [ok] skill 目录文件清单 — find 得 SKILL.md + example.html,无 scripts/references。
  • [ok] 外部端点仅字体 — example.html 仅 fonts.googleapis.com css2 与 fonts.gstatic.com preconnect;无 <script src> 外链;SKILL.md 正文无 URL。
  • [ok] Double-bezel 是否落地 — --shell-radius/--core-radius 变量 + BENTO 注释区块 + .b-card .core 结构(grep 命中 .b-card .core 与 .hero-preview .core)。
  • [discrepancy] Button-in-button 是否在示例中 — SKILL.md 写了「- Button-in-button CTA」,但示例中未找到该结构的类名或嵌套按钮标记(对 example.html grep 无 in-btn/btn-in-btn 类命中),属示例只演示其余三条。
  • [ok] spring 缓动是否真实使用 — --ease-spring 定义于 :root,并在 .hero-preview 等元素上以 transition: transform 360ms var(--ease-spring) 使用。
  • [ok] reduced-motion 处理 — 存在 @media (prefers-reduced-motion: reduce) 关闭 .mesh 动画;同系列的 brutalist/editorial 未见同等处理。
  • [ok] CLI 匹配器路由 — cli/src/skills-matcher.ts 存在 [["苹果", "Apple", "iOS", "soft", "squircle"], "web-proto-soft"] 行。
  • [ok] 判级 green 自证 — 目录零脚本文件(示例内联 reveal 属产物示例)、零凭证、零写盘;正文无运行时接口 → green。

6結論

  • 「高級感」のパラメータ化:2層角丸はcalc計算、アニメーションはオーバーシュートベジェで定義されており、モデルが感覚ではなく具体的な数値として再現可能
  • アクセシビリティへの配慮:meshアニメーションに対してprefers-reduced-motionによる無効化を明示的に実装
  • 高いコンポーネント性:BENTOカード、ピル、メタ要素などのブロックがサンプル内で体系化されており、そのまま再利用可能
  • 抑制されたモーション演出:ホバー時の移動と初回表示のrevealのみに抑え、スクロール過剰演出を排除して「ambient」な世界観に合致
  • 最適な用途: コンシューマー向け製品の公式サイト、AI/SaaSツールのLP、「滑らかで上質」な質感が求められるブランドページに最適です。また、3つのスタイルプロトタイプにおけるモダン寄りなリファレンスとしても適しています。
    不向きな用途: 無骨で硬質なインダストリアル感が求められるページ(brutalistを推奨)、情報密度が極めて高い管理画面(2層ベゼルや大きな角丸が有効表示面積を圧迫するため)には適していません。
    Install Agent-Ready
    ① Verified Mirror 2026-09-15
    Option A · Direct DownloadDownload web-proto-soft.tar.gz
    sha256: d75a8b1932228559…
    Option B · Copy Guide for Agent
    install.json
    Agent はこの JSON ガイドから自動的にダウンロードして検証します。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit 553ed98c28.