Picture-i Admin
← 機能表に戻る

DESIGN SYSTEM

Picture-iDesign Guidelines v2.0

このガイドラインに従うことで、一貫性のある美しいUIを維持できます。
例外は認めません。

Design Philosophy

Minimal & Clean

装飾を最小限に。余白を恐れるな。

Consistent

同じ要素には同じスタイル。例外なし。

Intentional

すべてのデザイン決定に理由がある。

Color System

Primary Palette

900

Text, CTA

800

Dark BG

600

Secondary

400

Inactive

200

Border

100

Light BG

Accent Color

ONLY AMBER

amber-400

SSR, Primary accent

amber-500

Hover state

yellow-300

Gradient end

blue, purple, pink, cyan などの派手な色は禁止

Background Rules

Light Mode Pages

#F5F3EE

Warm gray - 温かみのある背景

Dark Mode Pages

gradient 900→800

ガチャ、プレビュー系

Semantic Tokens

NEW

ハードコードされた色ではなく、意味を持つセマンティックトークンを使用することで、 テーマ切り替えとデザイン変更が容易になります。

Text

--pi-text-primary

見出し、本文

neutral-900 / white
--pi-text-secondary

補足テキスト

neutral-600 / neutral-400
--pi-text-muted

非活性、プレースホルダー

neutral-400 / neutral-500
--pi-text-accent

強調、リンク

amber-400

Background

--pi-bg-primary

ページ背景

#F5F3EE / neutral-950
--pi-bg-surface

カード、パネル

white / neutral-900
--pi-bg-elevated

モーダル、ヘッダー

white/80 / neutral-800
--pi-bg-accent

SSRバッジ、CTA

amber-400

Border

--pi-border-default

通常のボーダー

neutral-200 / neutral-800
--pi-border-subtle

控えめなボーダー

neutral-100 / neutral-700
--pi-border-focus

フォーカス状態

neutral-900 / amber-400

State

--pi-state-success

成功、完了

green-500
--pi-state-warning

警告、注意

amber-500
--pi-state-error

エラー、危険

red-500
--pi-state-info

情報

neutral-500

Usage Example

/* CSS Variables (globals.css) */
:root {
  --pi-text-primary: theme('colors.neutral.900');
  --pi-bg-primary: #F5F3EE;
  --pi-bg-surface: theme('colors.white');
}

.dark {
  --pi-text-primary: theme('colors.white');
  --pi-bg-primary: theme('colors.neutral.950');
  --pi-bg-surface: theme('colors.neutral.900');
}

/* Tailwind config */
colors: {
  'pi-text': 'var(--pi-text-primary)',
  'pi-bg': 'var(--pi-bg-primary)',
}

Typography

Noto Sans JP

唯一許可されたフォント
あいうえお Aa 123

Heading 1

ページタイトル

あいうえお Aa 123

Heading 2

セクション

あいうえお Aa 123

Heading 3

カード見出し

あいうえお Aa 123

Body

本文

あいうえお Aa 123

Caption

補足テキスト

あいうえお Aa 123

Micro

バッジ、ラベル

Do

  • font-bold は見出しのみ
  • 本文は font-medium または font-normal
  • 行間は適度に(leading-relaxed)
  • 英語は tracking-wide

Don't

  • font-black, font-thin は禁止
  • イタリック体は使わない
  • アンダーライン装飾は禁止
  • text-shadow は禁止

Icon System

CRITICAL

Approved Icons (Lucide)

以下のアイコンのみ使用可。シンプルで視認性の高いものを厳選。

禁止アイコン・スタイル

アイコンの種類:

  • • 絵文字風のアイコン
  • • 手書き風アイコン
  • • 3D風アイコン
  • • グラデーション塗りのアイコン
  • • 過度に装飾されたアイコン

使い方:

  • • stroke-width を変更しない(デフォルト: 2)
  • • アイコンに影をつけない
  • • 回転・歪みアニメーション禁止
  • • アイコン単体での過度な強調禁止
  • • テキストなしのアイコンボタンは最小限に

Icon Sizes

12px

バッジ内

16px

インライン

20px

ボタン、ナビ

24px

リスト

32px

カード

40px

ヒーロー

Spacing & Layout

Spacing Scale (4px base)

4px

8px

12px

16px

24px

32px

40px

48px

Border Radius

lg / 8px

ボタン小

xl / 12px

入力、アイコン背景

2xl / 16px

カード、モーダル

full

バッジ、アバター

rounded-sm, rounded-md は原則禁止。統一感を保つため。

Container Width

max-w-smモーダル
max-w-mdフォーム
max-w-2xlコンテンツ
max-w-3xlメインレイアウト
max-w-4xlワイドコンテンツ

Responsive Design

PC/SP対応

Breakpoints

モバイルファースト設計。PC最適化には lg: を使用。

default< 640pxモバイル(デフォルト)基準
sm:≥ 640px大型モバイル微調整
lg:≥ 1024pxデスクトップPC対応
xl:≥ 1280px大画面グリッド拡張

Container Width(PC拡張)

PCでは横幅を活用。lg:max-w-*xl で拡張。

max-w-2xllg:max-w-4xl通常コンテンツ672px → 896px
max-w-3xllg:max-w-5xl写真一覧・LP768px → 1024px
max-w-smlg:max-w-mdモーダル384px → 448px

Grid Columns(PC拡張)

PCではカラム数を増やして一覧性を向上。

grid-cols-1lg:grid-cols-2

カード一覧: 商品カテゴリ、ガチャセット

grid-cols-2lg:grid-cols-4 xl:grid-cols-5

商品グリッド: 写真一覧

grid-cols-3lg:grid-cols-6

サムネイル: フォトギャラリー

Header(PC対応)

SP(モバイル)

flex-col          // ナビ縦並び
w-[18px] h-[18px] // アイコン
text-[9px]        // ラベル
px-4 py-2.5       // パディング

PC(デスクトップ)

lg:flex-row       // ナビ横並び
lg:w-5 lg:h-5     // アイコン拡大
lg:text-xs        // ラベル拡大
lg:px-6 lg:py-3   // パディング拡大

2カラムレイアウト(PC専用)

ガチャ画面など、PCでは左右分割で情報量を増やす。

<div className="lg:grid lg:grid-cols-2 lg:gap-8 lg:items-start">
  {/* 左カラム: 画像(sticky) */}
  <div className="lg:sticky lg:top-20">
    <Image ... />
  </div>

  {/* 右カラム: オプション */}
  <div className="mt-6 lg:mt-0">
    <PlanSelection ... />
  </div>
</div>

Common Patterns

Grid Columns

grid grid-cols-2 sm:grid-cols-3
grid grid-cols-3 sm:grid-cols-4

写真グリッド: 2列 → 3列

Padding / Gap

px-3 sm:px-4
gap-2 sm:gap-3
p-4 sm:p-5

微調整: 12px → 16px

Text Size

text-2xl sm:text-4xl   // 見出し
text-sm sm:text-base   // 本文
text-[10px] sm:text-xs // キャプション

Icon / Element Size

w-4 h-4 sm:w-5 sm:h-5  // アイコン
w-20 h-20 sm:w-24 sm:h-24 // サムネイル

Hidden / Show

hidden sm:inline  // sm以上で表示
sm:hidden         // smで非表示

テキスト短縮・切り替え

Flex Direction

flex flex-col lg:flex-row

モバイル縦 → PC横

Safe Area (iOS対応)

Header

pt-[env(safe-area-inset-top)]

ノッチ・Dynamic Island対応

Footer

pb-[env(safe-area-inset-bottom)]

ホームインジケータ対応

Do

  • モバイルファーストで書く(lg: でPC拡張)
  • PCでは max-w を lg:max-w-*xl で拡張
  • PCではグリッド列数を増やす(lg:grid-cols-*)
  • PCナビは横並び(lg:flex-row)
  • safe-area-inset でノッチ対応
  • 2カラムレイアウトにはlg:stickyを活用

Don't

  • max-w-2xl 固定でPCの横幅を無駄にしない
  • PC専用デザインを先に作らない
  • モバイルでの見た目を犠牲にしない
  • 固定ピクセル幅(w-[500px]等)
  • 3段階以上のブレークポイント変更

Standard Layout Template

// コンテナ
<div className="max-w-3xl mx-auto px-3 sm:px-4 py-6 sm:py-8">

  // セクション見出し
  <h2 className="text-lg sm:text-xl font-bold mb-3 sm:mb-4">

  // グリッド
  <div className="grid grid-cols-2 sm:grid-cols-3 gap-3 sm:gap-4">

  // フレックス
  <div className="flex items-center gap-2 sm:gap-3">

  // ボタン
  <button className="p-2 sm:p-3 rounded-lg">

  // テキスト切り替え
  <span className="hidden sm:inline">詳細テキスト</span>
  <span className="sm:hidden">短縮</span>
</div>

Z-Index Scale

レイヤーの重なり順を統一するためのスケール。

z-00デフォルト、背景背景画像
z-1010浮いた要素カード、ボタン
z-2020固定ナビHeader, 固定ボトムバー
z-3030ドロワーサイドメニュー
z-4040オーバーレイ背景の暗転
z-5050モーダル確認ダイアログ

Visual Stack

z-0: Background
z-10: Card
z-20: Header
z-40: Overlay
z-50: Modal

z-index は 10 単位で使用。中間値(z-15等)は使わない。

Components

Buttons

Button Rules:

  • • padding: py-3 px-6 (標準) / py-4 px-8 (大)
  • • border-radius: rounded-xl (標準) / rounded-2xl (CTA)
  • • font: font-bold (Primary) / font-medium (Secondary)
  • • グラデーションボタンは禁止(BorderBeamで代用)

Cards

Light Card

bg-white shadow-sm

Dark Card

bg-neutral-800 border

カードには必ず rounded-2xl を使用。shadow は shadow-sm のみ。

Badges

DefaultSSRSRRN完了発送中

バッジは rounded-full + text-xs + font-bold で統一

Form Inputs

focus: ring-2 ring-neutral-900 (light) / ring-amber-400 (dark)

Effects & Animation

Glassmorphism

bg
bg-white/80 backdrop-blur-xl border-white/20

Header Navigation と特別なUIにのみ使用

Border Beam (SSR専用)

SSR

SSRカードの演出にのみ使用。乱用禁止。

Duration & Easing

一貫したアニメーション体験のため、標準化されたデュレーションとイージングを使用。

Duration Scale

100ms

instant

ホバー、フォーカス

150ms

fast

ボタン、トグル

200ms

normal

モーダル、ドロワー

300ms

slow

ページ遷移

Easing Functions

ease-out

cubic-bezier(0, 0, 0.2, 1)

デフォルト、要素の出現

ease-in-out

cubic-bezier(0.4, 0, 0.2, 1)

位置移動、変形

ease-in

cubic-bezier(0.4, 0, 1, 1)

要素の退出

spring

stiffness: 500, damping: 35

カード、インタラクション

// CSS Variables
:root {
  --pi-duration-instant: 100ms;
  --pi-duration-fast: 150ms;
  --pi-duration-normal: 200ms;
  --pi-duration-slow: 300ms;
  --pi-ease-out: cubic-bezier(0, 0, 0.2, 1);
  --pi-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
}

// Tailwind Classes
transition-all duration-150 ease-out
transition-transform duration-200 ease-in-out

Motion Patterns

Page Transition

initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.3, ease: "easeOut" }}

Spring Animation

type: "spring"
stiffness: 500
damping: 35

Stagger Children

staggerChildren: 0.1
delayChildren: 0.2

Interactive

whileHover={{ scale: 1.02 }}
whileTap={{ scale: 0.95 }}

bounce, elastic, wiggle などの過度なアニメーションは禁止

Loading States

Skeleton Loading

コンテンツ読み込み中は Skeleton で表示。シンプルなパルスアニメーション。

Card Skeleton

List Skeleton

Code

// Skeleton base
<div className="bg-neutral-200 rounded animate-pulse" />

// Light mode: bg-neutral-200
// Dark mode: bg-neutral-700

Spinner

ボタン内や小さなローディング表示に使用。

16px

24px

32px

<div className="w-4 h-4 border-2 border-neutral-400 border-t-white rounded-full animate-spin" />

Empty / Error States

データがありません

Empty State

エラーが発生しました

Error State

Golden Rules

MUST READ

必ず守ること

  • Neutral カラーパレットを使う
  • Lucide Icons のみ使用
  • rounded-xl / rounded-2xl を使う
  • shadow-sm のみ(shadowは控えめに)
  • 余白はたっぷり取る
  • font-weight は 400-700 の範囲
  • アニメーションは subtle に
  • 一貫性を最優先する

絶対にやらないこと

  • 派手な色(blue, pink, cyan等)を使う
  • カスタムアイコン、絵文字を使う
  • グラデーションテキスト
  • shadow-lg, shadow-2xl の乱用
  • 要素を詰め込みすぎる
  • font-thin, font-black を使う
  • 派手なアニメーション
  • デザインシステムの例外を作る

Accessibility

A11Y

Touch Targets

モバイルファーストのため、タッチターゲットは最小44x44pxを確保。

32px NG

?

40px 要注意

44px OK

48px 推奨

// ボタン・リンクの最小サイズ
min-h-[44px] min-w-[44px]

// パディングで確保
p-3 (48px with icon)

Focus States

キーボード操作時のフォーカスリングを必ず表示。

// Focus visible
focus-visible:ring-2
focus-visible:ring-amber-400
focus-visible:ring-offset-2

Color Contrast

テキストと背景のコントラスト比 4.5:1 以上を確保。

neutral-900 on white21:1
neutral-600 on 1005.7:1
white on neutral-90021:1
neutral-400 on 8005.5:1

WCAG 2.1 Level AA 準拠

Web Content Accessibility Guidelines

1.4.3PASS

Contrast (Minimum)

4.5:1

2.4.7PASS

Focus Visible

-

2.5.5PASS

Target Size

44px

Screen Reader Support

スクリーンリーダー対応のための ARIA 属性とセマンティック HTML の使用。

aria-label

アイコンのみボタン

aria-describedby

入力フィールドの補足説明

aria-live

動的コンテンツの通知

role

カスタム要素の役割定義

// アイコンボタンの例
<button
  aria-label="カートに追加"
  className="p-3 bg-neutral-900 rounded-xl"
>
  <ShoppingCart className="w-5 h-5" />
</button>

// 画像の代替テキスト
<Image
  src={photo}
  alt="商品名: フォトブック A4サイズ"
/>

Reduced Motion Support

motion-reduce メディアクエリで視覚障害やモーション酔いへの配慮。

// Framer Motion での対応
const prefersReducedMotion =
  window.matchMedia('(prefers-reduced-motion: reduce)').matches;

<motion.div
  initial={prefersReducedMotion ? {} : { opacity: 0, y: 20 }}
  animate={{ opacity: 1, y: 0 }}
  transition={prefersReducedMotion ? { duration: 0 } : { duration: 0.3 }}
/>

// CSS での対応
@media (prefers-reduced-motion: reduce) {
  * {
    animation-duration: 0.01ms !important;
    transition-duration: 0.01ms !important;
  }
}

Do

  • タッチターゲット 44px以上
  • フォーカスリングを表示
  • コントラスト比 4.5:1 以上
  • 適切な alt テキスト
  • フォームのラベル明示
  • aria-label でアイコンを説明
  • prefers-reduced-motion 対応

Don't

  • 小さすぎるボタン(32px未満)
  • outline: none でフォーカス非表示
  • 薄い色のテキスト(neutral-300等)
  • 画像の alt を空にする
  • 色だけで情報を伝える
  • 自動再生動画・点滅要素
  • キーボード操作の無効化

Photo Standards

Standard

3:4

Cheki

1:1.35 + margin

Thumbnail

1:1

Artist Themes

8 THEMES

アーティストごとに固有のテーマカラーを定義。ヘッダー、ボタン、アクセントに適用。

星野ひかり

artist-001

#ec4899
#f472b6

月城あおい

artist-002

#3b82f6
#60a5fa

桜庭りん

artist-003

#a855f7
#c084fc

天音みく

artist-004

#10b981
#34d399

紅葉かえで

artist-005

#f97316
#fb923c

白雪まゆ

artist-006

#94a3b8
#cbd5e1

灰原しおり

artist-007

#6b7280
#9ca3af

黒崎れい

artist-008

#171717
#262626

Theme Usage

適用箇所

  • • ヘッダーのアーティスト名(グラデーション)
  • • ヘッダー上部のアクセントライン
  • • CTAボタン・リンクの色
  • • カテゴリアイコンの背景
  • • NEWバッジ・タグ

コード参照

// テーマ取得
import { getArtistTheme } from "@/lib/artist-themes";

const theme = getArtistTheme(artistId);

// 使用例
style={{ color: theme.primaryHex }}
className={`bg-gradient-to-r ${theme.gradient}`}

Picture-i Design System v2.0

このガイドラインに従わないデザインは reject されます。