すべての UI を Nunjucks マクロとして定義した、オブジェクト指向の Web コンポーネント集。
再利用性・拡張性・保守性を備えた「部品」が、ページを構造化します。
英語小見出し(シアン・Roboto Mono)と日本語大見出しの組み合わせ。dark=true で白文字。
{{ sectionHeader("Subtitle", "タイトル") }}
{{ sectionHeader("Subtitle", "タイトル", dark=true) }}
IntersectionObserver でスクロール検知。delay(ms)で連鎖的なアニメーションが可能。{% call %} パターン使用。
{% call fadeIn(200) %}
この要素はスクロールでフェードイン
{% endcall %}
感性と論理が交わる場所。
動きでコミュニケーションする。
大きなアルファベット文字 + 日本語タイトル + 説明文。哲学・理念セクションに使用。
{{ philosophyCard("A", "アート", "説明文") }}
使わないライブラリは入れない。必要なものだけを、正しく使う。
Lucide アイコン + 見出し + 本文の横型カード。スタンス・特長セクションに使用。
{{ stanceCard("zap", "見出し", "本文テキスト") }}
ブランドサイト・採用ページ・LP
ポートフォリオ・作品集・ブログ
Lucide アイコン + 見出し(<br> 対応)+ 説明の縦型カード。ターゲット顧客紹介に使用。
{{ targetCard("building-2", "企業・
店舗", "説明文") }}
¥200,000〜
5〜10ページ程度のコーポレートサイト。Canvas エフェクト付きで差別化。
タイトル・タグ・価格・説明・注記の5要素。サービス紹介・料金表セクションに使用。
{{ serviceCard("プラン名", "タグ", "¥xx", "説明文", "注記(省略可)") }}
HTML <details> ベースのアコーディオン FAQ。CSS アニメーションで開閉。
{{ faqItem("質問文", "回答文") }}
「準備中」「Coming Soon」などの一時的なプレースホルダー表示。オプションでボタンも追加可。
{{ contentPlaceholder("タイトル", "サブテキスト", "/url/", "ボタンラベル") }}
float-animation 付きのロゴコンテナ。{% call %} パターンで任意の SVG を内包。
{% call heroLogo() %}
{% endcall %}
CSS アニメーションでループする SVG ウェーブ区切り。Hero セクション下端のグラデーション溶け込みに使用。
{{ heroWave() }}
{{ heroWave("rgba(2,93,204,0.05)", "rgba(2,93,204,0.10)",
"rgba(0,198,255,0.05)", "#f8fafc") }}
[ ランダム選択・JavaScript 注入 ]
AK² Lab
Artistic intuition meets calculated motion.
コピーが配列から JS でランダム選択され注入されます。
ヒーローの headline / en / desc を配列から JS でランダム選択・DOMに注入するコピーカルーセル。
{% set copies = [
{ headline: "見出し", en: "English", desc: "説明
" }
] %}
{{ heroContent(copies, site.fullName) }}
section-effects.js を utils: [section-effects] でロード。
親セクションに position: relative を設定。section-bg-canvas クラスの canvas が自動的に描画ループを開始します。
お問い合わせフォーム一式。action で送信先を指定。form-group / form-label / form-input / form-textarea のクラスで構成。
{{ contactForm("https://example.com/submit") }}
High-Durability Archives
「こんなサイト、作れますか?」のイメージを膨らませるために。
内部ページ用ヒーローセクション(シングルトン)。subtitle / title / lead / note を受け取り section.page-hero を生成。extraClass でページ固有クラスを追加可。
{{ pageHero(
"Samples",
"High-Durability Archives",
"リード文(HTML可)",
"infoメモ(省略可)",
"section--samples-hero") }}
プログラム処理なし。開いた瞬間に表示。
攻撃できる箇所が存在しない構造。
Lucide アイコン + 見出し + 説明文の特長アイテム。features-grid 内でループ使用。データはページのフロントマターで管理。
{{ featureItem("zap", "爆速表示", "説明文") }}
_data/samples.json の1要素を受け取り、画像・タグ・特長リスト・ページ数・CTAボタンを含むカードを描画。index で fade-in の連鎖遅延を制御。
{% for s in samples %}
{{ sampleCard(s, loop.index0) }}
{% endfor %}
行動喚起セクション(シングルトン)。title / text / linkUrl / linkText を受け取り section.section--cta を生成。背景グラデーションは gradient で変更可。
{{ ctaSection(
"見出し",
"本文(HTML可)",
"/#contact",
"ボタンラベル") }}
Typography
パーツ集サブページ共通ラッパー(シングルトン)。パンくずナビ・番号付き h1・fade-in-section を自動生成。bg 省略時は section--white、設定時はインライン背景色。breadcrumbLabel で h1 と異なるパンくず末尾を指定可。
{% call partsSubPage("01", "Typography") %}
...コンテンツ...
{% endcall %}
{# 背景色あり + 異なるパンくずラベル #}
{% call partsSubPage("06", "Motion & Animation", "", "Motion") %}
...
{% endcall %}
Canvasエフェクト
ボタンスタイル
数値ラベルの統計アイテム。parts-stats グリッド内でループ使用。データはフロントマターで管理。
{% for s in stats %}
{{ partsStatItem(s.number, s.label) }}
{% endfor %}
Noto Serif JP・Lato・Roboto Mono の3書体を収録。
詳しく見る →Canvas エフェクト統合カタログ。
詳しく見る →Nunjucks マクロで実装したUI集。
詳しく見る →番号付きカテゴリーカード。theme で外観を切替。"dark"(Effects 用ダーク背景)/ "highlight"(Components 用ブルー背景)/ 省略(デフォルト白)。データはフロントマターで管理。
{% for c in categories %}
{{ partsCategoryCard(c.num, c.title, c.desc, c.url,
c.theme | default("")) }}
{% endfor %}
フォントファミリー比較ブロック。cls に font-sans / font-english / font-mono を指定。sub でサブテキスト(小さいspan)を追加。
{{ typoFontBlock(
"Noto Serif JP / 明朝体",
"美しさの中には論理が宿る",
"font-sans",
"AK² Lab — Art & Kinetic Laboratory",
"伝統と格調。") }}
タイプスケール一覧の1行。label(スケール名)/ size(px表示)/ text(サンプル)/ style(インラインスタイル)。データはフロントマターで管理。
{% for s in scales %}
{{ typoScaleRow(s.label, s.size, s.text, s.style) }}
{% endfor %}
カラーパレットのスウォッチ1枚。hexLabel は hex 値またはラベル文字列(Gradient など)。style に background や color・border を自由に指定。
{{ colorSwatch("#025DCC", "Primary Blue", "background:#025DCC") }}
{{ colorSwatch("Gradient", "Brand Gradient",
"background:linear-gradient(135deg,#025DCC,#00C6FF)") }}
モーションデモアイテム。caller() パターンでデモコンテンツを注入。motion-demo / motion-info / motion-title / motion-desc / motion-code の構造を生成。
{% call motionItem("Float", "説明文", "animation: gentle-float ...") %}
...
{% endcall %}
各マクロは1つの役割のみ持つ。sectionHeader はヘッダーのみ、fadeIn はアニメーションのみ担当。
一度定義すれば全ページで使用可能。変更は1ヶ所を修正するだけで全ページに反映される。
Canvas(z:1)/ Content(z:10)/ Header(z:50)の明確な3層分離。エフェクトとコンテンツが干渉しない。
「何を表示するか」を宣言するだけ。実装の詳細(HTML構造、CSS クラス名)はマクロが隠蔽する。