Files

333 lines
17 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# animal-island-ui 设计提示词
## UI 工具提示词(适用于 v0 / Figma AI / Framer AI / Locofy
```
Design a UI in the style of "animal-island-ui" — an Animal Crossing-inspired React component library.
Reproduce every detail below as precisely as possible.
=== FONTS (REQUIRED — load from Google Fonts if not installed) ===
@import url('https://fonts.googleapis.com/css2?family=Nunito:wght@400;500;600;700;800;900&family=Noto+Sans+SC:wght@400;500;700&family=Zen+Maru+Gothic:wght@400;500;700&display=swap');
font-family: Nunito, 'Noto Sans SC', 'Zen Maru Gothic', -apple-system, 'PingFang SC', sans-serif;
Font weights:
- Body text: 500
- Buttons / headings: 600700
- Time digits: 900
- Placeholder: 400
- letter-spacing: 0.010.02em (wider on buttons/weekday labels)
=== COLOR PALETTE ===
Primary background: #f8f8f0 (warm parchment)
Content area background: rgb(247, 243, 223) (slightly warmer — use for cards, modals)
Page background (homepage): #7DC395 + url(home_bg.svg)
Page background (component page): url(content_bg_pc.jpg) center fixed
Text colors:
Primary (header/sidebar): #794f27
Body (inside components): #725d42
Secondary: #9f927d
Muted: #8a7b66
Disabled: #c4b89e
Placeholder: #c4b89e
Primary accent (mint teal):
Default: #19c8b9 | Hover: #3dd4c6 | Active: #11a89b | Light bg: #e6f9f6
Status:
Success: #6fba2c (active: #5a9e1e)
Warning: #f5c31c (active: #dba90e)
Error: #e05a5a (active: #c94444)
Switch ON green: #86d67a (border: #6fba2c)
Switch OFF gray: #d4c9b4 (border: #c4b89e)
Game-special:
Focus yellow: #ffcc00 (darker: #e0b800) — input focus highlight, NOT blue
Sidebar selected bg: #B7C6E5
Sidebar hover bg: #d6dff0
Modal confirm btn (custom footer): background #ffcc00, color #725d42
Borders:
Standard: 2px solid #9f927d
Input (normal): 2.5px solid #c4b89e | hover: #a89878 | large: 3px
Time component: 3px solid #d4cfc3
3D shadow colors (bottom box-shadow only — NO elevation shadow):
Button: 0 5px 0 0 #bdaea0 | hover: 0 6px | active: 0 1px
Input: 0 3px 0 0 #d4c9b4 | small: 0 2px | large: 0 4px
Switch OFF: 0 3px 0 0 #bdaea0
Switch ON: 0 3px 0 0 #5a9e1e
Card: 0 4px 10px rgba(107, 92, 67, 0.42)
Feature card hover: 0 8px 24px rgba(114, 93, 66, 0.15)
=== SHAPE & RADIUS ===
Buttons and inputs: border-radius: 50px (full pill/capsule — most important)
Default cards: border-radius: 20px
Title cards (organic): border-radius: 40px 35px 45px 38px / 38px 45px 35px 40px
Modals: SVG blob clip-path (see path below)
Sidebar menu items: border-radius: 12px
Collapse panel outer: border-radius: 18px
Version badge: border-radius: 10px
Code block: border-radius: 20px (dark #2b2118, border #3d3028)
Checkbox box: border-radius: 8px (22px square, middle size)
Minimum anywhere: 12px — NO sharp right-angle interactive elements
=== MODAL SVG BLOB CLIP-PATH (exact path) ===
<svg style="position:absolute;width:0;height:0" aria-hidden>
<defs>
<clipPath id="animal-modal-clip" clipPathUnits="objectBoundingBox">
<path d="M0.501,0.005 L0.501,0.005 L0.523,0.005 L0.549,0.006
C0.704,0.01,0.796,0.017,0.825,0.027 L0.827,0.028
C0.872,0.045,0.939,0.044,0.978,0.17
C1,0.254,1,0.365,0.99,0.505 L0.988,0.513
C0.979,0.558,0.971,0.598,0.965,0.633
C0.956,0.689,0.979,0.77,0.964,0.865
C0.953,0.928,0.921,0.966,0.869,0.979
C0.821,0.986,0.773,0.992,0.726,0.995
L0.712,0.996 L0.694,0.997
C0.648,1,0.586,1,0.507,1 L0.501,1 L0.464,1
C0.385,1,0.325,0.998,0.283,0.995
C0.234,0.992,0.184,0.987,0.133,0.979
C0.081,0.966,0.05,0.928,0.039,0.865
C0.023,0.77,0.047,0.689,0.037,0.633
C0.031,0.595,0.023,0.552,0.013,0.505
C-0.006,0.365,-0.002,0.254,0.024,0.17
C0.064,0.045,0.13,0.045,0.174,0.028 L0.175,0.028
C0.204,0.017,0.303,0.009,0.474,0.005 L0.501,0.005"/>
</clipPath>
</defs>
</svg>
Modal content: clip-path: url(#animal-modal-clip); padding: 48px 48px 32px 48px;
=== DEPTH & INTERACTION (Nintendo button press — most defining feature) ===
ALL clickable elements get a bottom box-shadow that simulates a game button:
Default: box-shadow: 0 5px 0 0 #bdaea0; transform: none;
Hover: box-shadow: 0 6px 0 0 #bdaea0; transform: translateY(-1px);
Active: box-shadow: 0 1px 0 0 #bdaea0; transform: translateY(2px);
Cards hover: transform: translateY(-4px) — gentle float, no button press
Switch handle: always has transform: translateY(-2px) — floats above track
transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1)
=== FOCUS STATES ===
Input focus: border-color: #ffcc00; box-shadow: 0 3px 0 0 #e0b800, 0 0 0 3px rgba(255,204,0,0.15)
Button focus: outline: 2px solid #19c8b9; outline-offset: 2px
Switch focus: outline: 2px solid #ffcc00; outline-offset: 2px
=== BUTTON SIZES (exact) ===
small: height 32px, padding 0 16px, font-size 12px, border-radius 12px
middle: height 45px, padding 0 20px, font-size 14px, border-radius 50px
large: height 48px, padding 0 32px, font-size 16px, border-radius 24px
font-weight: 600, letter-spacing: 0.02em, line-height: 1
=== INPUT SIZES (exact) ===
small: height 32px, padding 0 14px, font-size 12px, radius 40px, border 2.5px, shadow: 0 2px 0 0 #d4c9b4
middle: height 40px, padding 0 18px, font-size 14px, radius 50px, border 2.5px, shadow: 0 3px 0 0 #d4c9b4
large: height 48px, padding 0 22px, font-size 16px, radius 50px, border 3px, shadow: 0 4px 0 0 #d4c9b4
Input text: color #725d42, font-weight 500, letter-spacing 0.01em
=== SWITCH SIZES (exact) ===
default: min-width 52px, height 28px, border 2.5px
handle: 21×21px, top 2px, left 2px; ON position: left calc(100%-24px)
box-shadow handle: 0 3px 0 0 #bdaea0 (OFF) / 0 3px 0 0 #5a9e1e (ON)
small: min-width 38px, height 20px, border 2px
handle: 14×14px, top 1px, left 1px; ON position: left calc(100%-16px)
Inner text: font-size 11px, font-weight 700, color #fff, letter-spacing 0.02em
OFF padding: 0 8px 0 28px | ON padding: 0 28px 0 8px
=== LOADING ANIMATION (Button) ===
background-image: repeating-linear-gradient(-45deg, #0ec4b6, #0ec4b6 10px, #01b0a7 10px, #01b0a7 20px);
background-size: 28.28px 28.28px;
animation: animal-btn-loading 1s linear infinite;
@keyframes animal-btn-loading { 0% { background-position: 0 0; } 100% { background-position: -28.28px 0; } }
=== ACCORDION (Collapse) — no JS ===
display: grid; grid-template-rows: 0fr;
transition: grid-template-rows 0.3s cubic-bezier(0.4, 0, 0.2, 1);
expanded: grid-template-rows: 1fr;
inner wrapper: overflow: hidden;
=== TIME DISPLAY ===
Container: padding 16px 36px, gap 24px, background linear-gradient(180deg, #fff 0%, #f8f8f0 100%),
border 3px solid #d4cfc3, border-radius 18px
Date section right border: 3px solid rgba(159, 146, 125, 0.35), padding-right 24px
Weekday: color #6fba2c, font-weight 900, font-size 14px, letter-spacing 1.5px, UPPERCASE
Month/day: color #8b7355, font-weight 800, font-size 22px
Time digits: color #8b7355, font-weight 900, font-size 48px, letter-spacing 2px
Colon blink: animation blink 1s step-end infinite; @keyframes blink { 50% { opacity: 0; } }
=== SIDEBAR LAYOUT ===
Width: 220px, background: url(menu_bg.svg) center/cover no-repeat
Header: padding 20px 16px 12px, font-size 15px, font-weight 700, color #725d42
Category labels: font-size 11px, color #a0936e, font-weight 600, letter-spacing 0.5px, uppercase
Menu items: height 40px, padding-left 26px, font-size 14px, font-weight 600
inactive: color #8a7b66 | hover: background #d6dff0 | active: background #B7C6E5, color #fff
border-radius: 12px, margin: 1px 5px, transition: all 0.15s
=== NOOKPHONE CARD PALETTE (13 colors, incl. default) ===
default rgb(247,243,223) (#725d42 text) /
app-pink #f8a6b2 / purple #b77dee / app-blue #889df0 / app-yellow #f7cd67 (#725d42 text) /
app-orange #e59266 / app-teal #82d5bb / app-green #8ac68a / app-red #fc736d /
lime-green #d1da49 (#3d5a1a text) / yellow-green #ecdf52 (#725d42 text) /
brown #9a835a / warm-peach-pink #e18c6f
=== DECORATIVE ELEMENTS ===
- Collapse: teal circle icon (28px, #19c8b9 bg) with +/ that rotates 180° on expand
- Collapse: leaf SVG decoration, opacity 0.5→1, rotates 45° on expand
- Footer sea: SVG ocean wave illustration, height 80px, object-fit: contain
- Footer tree: webp forest image, height 60px, background-position: bottom center
- Dividers: illustrated lines (brown/teal/white/yellow/wave) — 12px height PNG/SVG
- Cursor: custom game-style finger pointer PNG
- Backgrounds: nature illustrations (leaf texture sidebar, island scene homepage)
=== NOOKPHONE DEVICE (decorative widget) ===
Phone shell: width 527px, height 788px, background #F8F4E8,
border-radius 136px (almost capsule), overflow hidden
Home screen: padding-top 40px, background #F8F4E8,
background-size 100% 200%, animation grasswave 8s ease-in-out infinite
(@keyframes grasswave { 0%,100% { background-position: 0% 0%; } 50% { background-position: 0% 100%; } })
Top bar: wifi icon (79×29) ← time 32px/800/letter-spacing 2px color #DDDBCC → location icon (36×36)
Colon blink: animation blink 1s steps(1) infinite (050% opacity 1, 51100% opacity 0)
Welcome text: 48px / 800 / color #725C4E / letter-spacing 2px / margin-top 20px
Apps grid: grid-template-columns: repeat(3, 1fr); gap 32px; padding 8px
App tile: 123×123px, border-radius 45px, flex center
App icon: background-size 70% auto (iconApp only: 100% auto)
Hover bounce: @keyframes iconBounce (0% scale 1 rotate 0, 50% scale 1.2 rotate -5deg, 100% scale 1.1 rotate -4deg), 0.3s ease-in-out forwards
Badge dot: 28×28 circle, top 0 left 0, background #FF544A, border 5px solid #F8F4E8
Page indicator: page svg 65×32, margin-top 74px
App palette: camera #B77DEE, app #889DF0 (with offset), critterpedia #F7CD67, diy #E59266,
shopping #F8A6B2, variant #82D5BB, design #8AC68A, map #FC736D, chat #D1DA49
=== FOOTER DECORATION ===
<Footer type="sea" /> width 100%, height 80px, background url(footer-sea.svg) center/contain no-repeat
(SVG viewBox 0 0 1440 186, coral #EC7175 / ocean #327A93 / #98D2E3 / #008077)
<Footer type="tree" /> (default) width 100%, height 60px, background url(footer-tree.webp) bottom center/cover
=== DIVIDER DECORATION ===
5 types — all width 100%, height 12px, background center/contain no-repeat:
line-brown (default, SVG viewBox 0 0 297 14, fill #D8D0C3)
line-teal (SVG)
line-white (PNG)
line-yellow (SVG)
wave-yellow (SVG)
=== CURSOR WRAPPER ===
<Cursor>{children}</Cursor> — applies ".animal-cursor, .animal-cursor * { cursor: url(cursor-icon.png) 4 0, auto !important; }"
Hotspot coordinates: (4, 0). Uses !important to override all child cursors.
=== TYPEWRITER (no markup wrapper) ===
Props: children (ReactNode), speed=90ms, trigger (any unknown; change to restart),
autoPlay=true, onDone?: () => void
Behavior: recursively truncates ReactNode tree by character count while preserving
element structure, className, and inline styles. Returns a plain fragment
(NO extra wrapping div/span) so it has ZERO layout impact.
=== COMPONENT INVENTORY (17 exports from src/index.ts) ===
Interactive: Button, Input, Switch, Modal, Collapse, Select, Tabs, Checkbox
Containers: Card (13 NookPhone colors)
Decorative: Time, Phone, Footer, Divider, Cursor, Typewriter, Icon, CodeBlock
=== CHECKBOX (sizes small 18 / middle 22 / large 28 px) ===
Unchecked box: background rgb(247,243,223); border 2.5px solid #c4b89e; border-radius 8px
Hover box: border-color #19c8b9; transform translateY(-1px)
Checked box: background #19c8b9; border-color #11a89b
Checkmark ✓: color #fff, font-weight 700, pop animation 0.15s
Label: color #725d42 (hover #794f27), font-weight 500, letter-spacing 0.01em
Focus ring: outline 2px solid #ffcc00; outline-offset 2px
Disabled: opacity 0.55, box bg #f0ece2, border #d4c9b4, label #c4b89e, cursor not-allowed
Group layout: horizontal flex gap 12px / vertical flex-direction column gap 8px
Per-option label font-size by size: small 12px / middle 14px / large 16px
=== CODE BLOCK (dark theme, JSX/TS only) ===
Container: padding 20px 24px; background #2b2118; border 1px solid #3d3028;
border-radius 20px; font-size 14px; line-height 1.7; tab-size 4;
font-family 'SF Mono','Fira Code','Cascadia Code',Consolas,monospace; font-weight 600;
white-space pre; overflow auto; color (default) #e8d5bc
Token colors:
comment #6b5e50 (/* */, //)
string #a8d4a0 (quoted strings, numeric literals)
keyword #d4a0e0 (import/export/const/return/true/false/null/async/await/type/interface...)
react #e06c75 (React, useState, useEffect, FC, ReactNode, CSSProperties...)
component #80c0e0 (PascalCase identifiers — JSX tags / type names)
func #61afef (lowercase identifier followed by `(`)
prop #e8c87a (identifier followed by `=`)
jsx #f0a870 (`<Tag`, `</Tag`, `/>`)
operator #d4b896 (`{}[]();,` and arithmetic / comparison / logical operators)
=== FORBIDDEN PATTERNS ===
✗ Sharp right-angle (0px radius) on any interactive element
✗ Pure black #000 or #111 text — always use warm brown tones
✗ Cold blue focus rings (#0066ff etc.) — use #ffcc00 or #19c8b9
✗ Cold gray backgrounds — always warm parchment
✗ Flat design without bottom box-shadow on interactive elements
✗ font-weight below 400 anywhere in the UI
✗ System monospace fonts for UI text (code blocks excluded)
```
---
## 图片生成提示词(适用于 Midjourney / DALL-E / Stable Diffusion
```
Pixel-perfect UI screenshot of "animal-island-ui" React component library website,
Animal Crossing Nintendo Switch life-sim game aesthetic,
Interface details:
- Warm parchment background rgb(247,243,223), NEVER pure white
- Pill-shaped buttons (border-radius 50px) with 3D bottom shadow in warm taupe #bdaea0,
buttons press down on click like Nintendo game buttons
- Organic blob-shaped modal dialog with irregular soft SVG silhouette
- Pastel NookPhone app icon color cards: pink #f8a6b2, lavender #b77dee, sky blue #889df0,
sunshine yellow #f7cd67, coral #e59266, seafoam #82d5bb, sage green #8ac68a
- Mint teal accent #19c8b9, warm brown text #725d42
- Sidebar 220px wide with leaf texture background, menu items highlight in light blue #B7C6E5
- Nunito rounded font family (Google Fonts), weight 600-700, friendly chubby letterforms
- Yellow focus highlight #ffcc00 on focused inputs (NOT blue)
- Switch toggle with floating 3D handle, green #86d67a when ON
- Collapse accordion with teal circle icon, leaf SVG decoration
- Time widget showing weekday in green #6fba2c, large 48px clock digits
- Nature decorations: leaf SVG icons, illustrated ocean wave footer, forest tree silhouette
- Diagonal stripe loading animation on active buttons
- Custom game-style finger cursor icon
- Soft warm diffuse lighting, cozy pastoral atmosphere, flat illustration style
- 4K resolution, UI design mockup
```
---
## 关键数值速查表
| Token | 精确值 | 用途 |
|---|---|---|
| 内容区背景 | `rgb(247, 243, 223)` | Modal、Card 内容区 |
| 主背景 | `#f8f8f0` | 按钮、通用背景 |
| 正文文字 | `#725d42` | 组件内正文 |
| Header 文字 | `#794f27` | 侧边栏、标题 |
| 主色调 | `#19c8b9` | 焦点环、Collapse 图标 |
| Switch ON 绿 | `#86d67a` | Switch 开启背景 |
| 成功绿 | `#6fba2c` | 星期文字、成功状态 |
| 按钮 3D 阴影 | `#bdaea0` | `0 5px 0 0 #bdaea0` |
| 输入框 3D 阴影 | `#d4c9b4` | `0 3px 0 0 #d4c9b4` |
| 焦点黄 | `#ffcc00` | 输入框 focus |
| Modal 确认按钮 | bg `#ffcc00`, color `#725d42` | 游戏黄主操作 |
| 侧边栏选中 | `#B7C6E5` | 菜单 active |
| 侧边栏 hover | `#d6dff0` | 菜单 hover |
| 按钮高度(中) | `45px` | middle size |
| pill 圆角 | `50px` | 按钮、输入框 |
| 有机圆角 | `40px 35px 45px 38px / 38px 45px 35px 40px` | title Card |
| 字体 | `Nunito, 'Noto Sans SC', 'Zen Maru Gothic'` | Google Fonts 加载 |
| 按钮字重 | `600` | 按钮文字 |
| 时间数字字重 | `900` | Time 组件 |
| 过渡 | `0.25s cubic-bezier(0.4,0,0.2,1)` | 通用动画 |
| Loading stripe | `28.28px` step, `-45deg`, `#0ec4b6/#01b0a7` | 按钮 loading |
| 侧边栏宽度 | `220px` | Desktop sidebar |
| Phone 外壳 | `527 × 788px``border-radius: 136px` | NookPhone 容器 |
| Phone app tile | `123 × 123px``border-radius: 45px` | 3×3 网格 |
| Phone 新消息点 | 28px 红圆 `#FF544A` + 5px 奶油描边 `#F8F4E8` | badge |
| Footer sea | `height: 80px`SVG `contain` | 海浪底部 |
| Footer tree | `height: 60px`webp `cover bottom` | 森林底部 |
| Divider | `height: 12px`5 种背景图 | 装饰分割线 |
| Cursor | `cursor: url(...) 4 0, auto !important` | 游戏手指光标 |
| Typewriter 默认速度 | `90ms/字` | 按字符打印,无包裹元素 |
| Google Fonts URL | `fonts.googleapis.com/css2?family=Nunito:wght@400;500;600;700;800;900&family=Zen+Maru+Gothic:wght@400;500;700&display=swap` | 在线加载 |