yuanflow-cli 0.1.43 → 0.1.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. package/README.md +34 -4
  2. package/package.json +1 -1
  3. package/skills/yuanflow-skill/README.md +7 -0
  4. package/skills/yuanflow-skill/SKILL.md +24 -9
  5. package/skills/yuanflow-skill//345/243/260/351/237/263/345/205/213/351/232/206/SKILL.md +146 -0
  6. package/skills/yuanflow-skill//345/243/260/351/237/263/345/244/215/345/210/273/SKILL.md +103 -0
  7. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/SKILL.md +77 -0
  8. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/agents/openai.yaml +8 -0
  9. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/assets/templates/editorial-publishing.html +65 -0
  10. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/assets/templates/lifestyle-collage.html +49 -0
  11. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/assets/templates/product-brand.html +50 -0
  12. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/assets/templates/social-campaign.html +49 -0
  13. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/assets/templates/technical-diagram.html +45 -0
  14. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/overview.html +272 -0
  15. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/references/commercial-system.md +56 -0
  16. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/references/layout-playbook.md +98 -0
  17. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/references/quality-check.md +58 -0
  18. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/references/style-atlas.md +728 -0
  19. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/references/use-case-recipes.md +116 -0
  20. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/scripts/check_visual_card.py +92 -0
  21. package/src/agent-protocol.js +3 -0
  22. package/src/cli.js +24 -0
  23. package/src/voice-tools.js +471 -0
@@ -0,0 +1,49 @@
1
+ <!doctype html>
2
+ <html lang="zh-CN" data-parent-style="lifestyle-collage">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <title>Lifestyle Collage Template</title>
7
+ <style>
8
+ :root { --paper:#f2ece6; --ink:#25211d; --muted:#82766b; --line:rgba(37,33,29,.18); --accent:#7f8d74; --serif:"Songti SC","STSong","SimSun",serif; --sans:system-ui,sans-serif; --mono:ui-monospace,monospace; }
9
+ * { box-sizing:border-box; }
10
+ body { margin:0; padding:48px; background:#1d1b19; font-family:var(--sans); }
11
+ .sheet { display:flex; flex-direction:column; align-items:center; gap:42px; }
12
+ .poster { position:relative; overflow:hidden; background:var(--paper); color:var(--ink); isolation:isolate; }
13
+ .poster[data-ratio="xhs"] { width:1080px; height:1440px; }
14
+ .poster[data-ratio="article"] { width:1600px; height:900px; }
15
+ .lc-pad { height:100%; padding:88px; display:flex; flex-direction:column; position:relative; z-index:2; }
16
+ [data-ratio="article"] .lc-pad { padding:76px 110px; }
17
+ .lc-title { font-family:var(--serif); font-size:104px; line-height:1.08; font-weight:500; margin:0 0 34px; }
18
+ .soft-photo { height:560px; margin:0; border-radius:28px; overflow:hidden; background:#d8d0c6; box-shadow:0 20px 60px rgba(37,33,29,.14); }
19
+ .soft-photo img { width:100%; height:100%; object-fit:cover; }
20
+ .note-list { display:flex; gap:18px; margin-top:auto; }
21
+ .note-list p,.specimen-tags span { padding:18px 24px; background:rgba(255,255,255,.36); border:1px solid var(--line); }
22
+ .collage-desk { --paper:#ead8ba; --ink:#2d2014; --muted:#7d6750; --accent:#315d93; }
23
+ .paper-stack { flex:1; position:relative; }
24
+ .paper-stack figure { position:absolute; width:48%; height:42%; background:#f6ead6; box-shadow:0 14px 30px rgba(45,32,20,.18); margin:0; }
25
+ .paper-stack figure:nth-child(1) { left:4%; top:10%; transform:rotate(-5deg); }
26
+ .paper-stack figure:nth-child(2) { right:8%; top:22%; transform:rotate(4deg); }
27
+ .paper-stack figure:nth-child(3) { left:22%; bottom:8%; transform:rotate(-2deg); }
28
+ .stamp,.timecode { font-family:var(--mono); letter-spacing:.14em; color:var(--accent); }
29
+ .botanical-organic { --paper:#eef0df; --ink:#172418; --muted:#62715e; --accent:#3f7d4a; }
30
+ .specimen { height:520px; margin:0 0 34px; display:grid; place-items:center; background:rgba(63,125,74,.10); border:1px solid var(--line); }
31
+ .specimen img { max-width:80%; max-height:80%; object-fit:contain; }
32
+ .specimen-tags { display:flex; gap:16px; margin-top:auto; }
33
+ .film-contact-sheet { --paper:#1b1712; --ink:#f2dec1; --muted:#b69d78; --line:rgba(242,222,193,.2); --accent:#e0a34d; }
34
+ .frames { display:grid; grid-template-columns:repeat(2,1fr); gap:22px; margin-top:auto; }
35
+ .frames figure { height:260px; margin:0; background:#30271d; border:10px solid #0b0907; }
36
+ </style>
37
+ </head>
38
+ <body>
39
+ <main class="sheet">
40
+ <section class="poster lifestyle-collage soft-studio" data-ratio="xhs" data-style="soft-studio">
41
+ <main class="lc-pad soft">
42
+ <h1 class="lc-title">周末整理<br>工作台</h1>
43
+ <figure class="soft-photo"><img src="assets/table.jpg" alt=""></figure>
44
+ <div class="note-list"><p>光线</p><p>收纳</p><p>节奏</p></div>
45
+ </main>
46
+ </section>
47
+ </main>
48
+ </body>
49
+ </html>
@@ -0,0 +1,50 @@
1
+ <!doctype html>
2
+ <html lang="zh-CN" data-parent-style="product-brand">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <title>Product Brand Template</title>
7
+ <style>
8
+ :root { --paper:#f8f7f2; --ink:#101214; --muted:#6f757c; --line:rgba(16,18,20,.16); --accent:#0d6efd; --accent2:#16a34a; --sans:system-ui,sans-serif; --serif:"Songti SC","STSong","SimSun",serif; --mono:ui-monospace,monospace; }
9
+ * { box-sizing:border-box; }
10
+ body { margin:0; padding:48px; background:#191a1b; font-family:var(--sans); }
11
+ .sheet { display:flex; flex-direction:column; align-items:center; gap:42px; }
12
+ .poster { position:relative; overflow:hidden; background:var(--paper); color:var(--ink); isolation:isolate; }
13
+ .poster[data-ratio="xhs"] { width:1080px; height:1440px; }
14
+ .poster[data-ratio="article"] { width:1600px; height:900px; }
15
+ .poster[data-ratio="wide"] { width:2100px; height:900px; }
16
+ .pb-pad { height:100%; padding:88px; display:flex; flex-direction:column; position:relative; z-index:2; }
17
+ [data-ratio="article"] .pb-pad, [data-ratio="wide"] .pb-pad { padding:76px 110px; }
18
+ .pb-title { margin:0; font-size:104px; line-height:1.04; font-weight:300; letter-spacing:-.02em; max-width:860px; }
19
+ .product-hero { flex:1; margin:44px 0; display:grid; place-items:center; background:radial-gradient(circle at center, rgba(13,110,253,.14), transparent 54%); }
20
+ .product-hero img { max-width:78%; max-height:78%; object-fit:contain; filter:drop-shadow(0 34px 42px rgba(16,18,20,.22)); }
21
+ .callouts,.feature-tags { display:flex; gap:16px; margin-top:auto; }
22
+ .callouts span,.feature-tags span { padding:16px 22px; border:1px solid var(--line); background:#fff; font-size:28px; }
23
+ .luxury-minimal { --paper:#10100f; --ink:#f4ead7; --muted:#a89777; --line:rgba(244,234,215,.18); --accent:#d0a85a; }
24
+ .luxury .pb-title { font-family:var(--serif); font-weight:500; margin-top:auto; }
25
+ .isolated { background:transparent; border:1px solid var(--line); }
26
+ .small-label { font-family:var(--mono); letter-spacing:.14em; color:var(--muted); text-transform:uppercase; }
27
+ .brand-system { --paper:#f5f3ed; --ink:#121212; --muted:#626262; --accent:#c8372d; --accent2:#243c72; }
28
+ .palette { display:flex; gap:18px; margin:54px 0; }
29
+ .palette span { width:120px; height:120px; background:var(--accent); }
30
+ .palette span:nth-child(2) { background:var(--accent2); }
31
+ .palette span:nth-child(3) { background:var(--ink); }
32
+ .component-row { display:flex; gap:18px; margin-top:auto; }
33
+ .component-row button { border:0; padding:20px 28px; background:var(--accent); color:white; font-size:24px; }
34
+ .component-row button:nth-child(2) { background:transparent; color:var(--ink); border:1px solid var(--line); }
35
+ .screen-frame { margin:44px 0 0; height:520px; border:1px solid var(--line); background:#fff; padding:28px; }
36
+ .screen-frame img { width:100%; height:100%; object-fit:contain; }
37
+ </style>
38
+ </head>
39
+ <body>
40
+ <main class="sheet">
41
+ <section class="poster product-brand product-cutout" data-ratio="xhs" data-style="product-cutout">
42
+ <main class="pb-pad">
43
+ <h1 class="pb-title">一个工具<br>解决三件事</h1>
44
+ <figure class="product-hero"><img src="assets/product.png" alt=""></figure>
45
+ <div class="callouts"><span>快</span><span>稳</span><span>可控</span></div>
46
+ </main>
47
+ </section>
48
+ </main>
49
+ </body>
50
+ </html>
@@ -0,0 +1,49 @@
1
+ <!doctype html>
2
+ <html lang="zh-CN" data-parent-style="social-campaign">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <title>Social Campaign Template</title>
7
+ <style>
8
+ :root { --paper:#fff04a; --ink:#111; --accent:#ff3b7f; --accent2:#00a1ff; --mono:ui-monospace,monospace; --sans:system-ui,sans-serif; }
9
+ * { box-sizing: border-box; }
10
+ body { margin:0; padding:48px; background:#181818; font-family:var(--sans); }
11
+ .sheet { display:flex; flex-direction:column; align-items:center; gap:42px; }
12
+ .poster { position:relative; overflow:hidden; background:var(--paper); color:var(--ink); isolation:isolate; }
13
+ .poster[data-ratio="xhs"] { width:1080px; height:1440px; }
14
+ .poster[data-ratio="poster"] { width:1200px; height:1800px; }
15
+ .poster[data-ratio="wide"] { width:2100px; height:900px; }
16
+ .sc-pad { height:100%; padding:78px; display:flex; flex-direction:column; position:relative; z-index:2; }
17
+ .sc-title { margin:0; font-size:142px; line-height:.95; font-weight:900; letter-spacing:-.03em; max-width:880px; }
18
+ .burst,.warning,.event-meta,.ticket { font-family:var(--mono); letter-spacing:.14em; text-transform:uppercase; }
19
+ .burst { align-self:flex-start; background:var(--accent); color:#fff; padding:14px 18px; transform:rotate(-4deg); margin-bottom:28px; }
20
+ .cutout-stage { flex:1; margin:38px 0; background:rgba(255,255,255,.28); border:5px solid var(--ink); display:grid; place-items:center; }
21
+ .cutout-stage img { max-width:72%; max-height:72%; object-fit:contain; }
22
+ .badge-row { display:flex; gap:16px; margin-top:auto; }
23
+ .badge-row span { border:4px solid var(--ink); padding:16px 24px; font-size:34px; font-weight:800; background:#fff; }
24
+ .neo-brutalist { --paper:#f5f5f0; --accent:#ff4a00; }
25
+ .brutal { border:8px solid var(--ink); }
26
+ .warning { background:var(--accent); padding:16px 20px; font-size:26px; margin-bottom:34px; }
27
+ .hard-rows { margin-top:auto; border-top:6px solid var(--ink); }
28
+ .hard-rows p { margin:0; padding:26px 0; border-bottom:4px solid var(--ink); font-size:46px; font-weight:900; }
29
+ .maximal-poster { --paper:#101010; --ink:#f7f03a; --accent:#f0185c; --accent2:#00d4ff; }
30
+ .repeat-word { position:absolute; inset:60px 20px auto; font-size:118px; font-weight:900; color:var(--accent); opacity:.55; line-height:.85; }
31
+ .maximal .sc-title { margin-top:auto; color:var(--ink); text-shadow:8px 8px 0 var(--accent); }
32
+ .event-key-visual { --paper:#151414; --ink:#fff1d0; --accent:#ffcf33; --accent2:#ff5a3d; }
33
+ .key-shape { width:520px; height:520px; background:linear-gradient(135deg,var(--accent),var(--accent2)); margin:auto; transform:rotate(12deg); }
34
+ .ticket { border-top:2px solid rgba(255,241,208,.4); padding-top:22px; font-size:24px; color:var(--ink); }
35
+ </style>
36
+ </head>
37
+ <body>
38
+ <main class="sheet">
39
+ <section class="poster social-campaign pop-magazine" data-ratio="xhs" data-style="pop-magazine">
40
+ <main class="sc-pad">
41
+ <p class="burst">SAVE THIS</p>
42
+ <h1 class="sc-title">这 6 个<br>真的好用</h1>
43
+ <div class="cutout-stage"><img src="assets/item.png" alt=""></div>
44
+ <div class="badge-row"><span>实测</span><span>清单</span><span>避坑</span></div>
45
+ </main>
46
+ </section>
47
+ </main>
48
+ </body>
49
+ </html>
@@ -0,0 +1,45 @@
1
+ <!doctype html>
2
+ <html lang="zh-CN" data-parent-style="technical-diagram">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <title>Technical Diagram Template</title>
7
+ <style>
8
+ :root { --paper:#fafaf8; --ink:#0a0a0a; --muted:#737373; --line:#d4d4d2; --accent:#002fa7; --sans:system-ui,sans-serif; --mono:ui-monospace,monospace; }
9
+ * { box-sizing:border-box; }
10
+ body { margin:0; padding:48px; background:#1b1b1b; font-family:var(--sans); }
11
+ .sheet { display:flex; flex-direction:column; align-items:center; gap:42px; }
12
+ .poster { position:relative; overflow:hidden; background:var(--paper); color:var(--ink); isolation:isolate; }
13
+ .poster[data-ratio="xhs"] { width:1080px; height:1440px; }
14
+ .poster[data-ratio="article"] { width:1600px; height:900px; }
15
+ .poster[data-ratio="wide"] { width:2100px; height:900px; }
16
+ .td-pad { height:100%; padding:88px; display:flex; flex-direction:column; position:relative; z-index:2; }
17
+ [data-ratio="article"] .td-pad, [data-ratio="wide"] .td-pad { padding:76px 110px; }
18
+ .td-meta,.legend,.terminal { font-family:var(--mono); letter-spacing:.14em; text-transform:uppercase; color:var(--muted); margin:0 0 28px; }
19
+ .td-title { margin:0; font-size:118px; line-height:1.04; font-weight:250; letter-spacing:-.02em; max-width:860px; }
20
+ .td-matrix { margin-top:auto; display:grid; grid-template-columns:repeat(2,1fr); gap:22px; }
21
+ .td-matrix div,.hud-grid div,.node-map span,.flow span { border:1px solid var(--line); padding:30px; font-size:34px; background:rgba(0,0,0,.03); }
22
+ .blueprint-technical { --paper:#092448; --ink:#e6f2ff; --muted:#9db9d6; --line:rgba(230,242,255,.26); --accent:#58c7ff; }
23
+ .blueprint::before { content:""; position:absolute; inset:0; opacity:.22; background-image:linear-gradient(to right,var(--ink) 1px,transparent 1px),linear-gradient(to bottom,var(--ink) 1px,transparent 1px); background-size:48px 48px; }
24
+ .node-map { margin-top:auto; display:grid; grid-template-columns:repeat(3,1fr); gap:28px; position:relative; z-index:2; }
25
+ .cyber-interface { --paper:#090b12; --ink:#edf4ff; --muted:#8aa0bf; --line:rgba(237,244,255,.22); --accent:#00e0ff; }
26
+ .cyber { background:radial-gradient(circle at 80% 20%, rgba(0,224,255,.18), transparent 34%); }
27
+ .terminal { color:var(--accent); }
28
+ .hud-grid { margin-top:auto; display:grid; grid-template-columns:repeat(3,1fr); gap:24px; }
29
+ .calm-diagram { --paper:#f7f5ef; --ink:#1f2933; --muted:#6b7280; --line:#d8d4c8; --accent:#4c6fff; }
30
+ .flow { margin-top:auto; display:grid; grid-template-columns:repeat(4,1fr); gap:20px; }
31
+ .flow span { border-color:var(--accent); text-align:center; }
32
+ </style>
33
+ </head>
34
+ <body>
35
+ <main class="sheet">
36
+ <section class="poster technical-diagram swiss-data" data-ratio="xhs" data-style="swiss-data">
37
+ <main class="td-pad">
38
+ <p class="td-meta">SYSTEM / 01</p>
39
+ <h1 class="td-title">一个流程<br>四个节点</h1>
40
+ <div class="td-matrix"><div>输入</div><div>处理</div><div>验证</div><div>输出</div></div>
41
+ </main>
42
+ </section>
43
+ </main>
44
+ </body>
45
+ </html>
@@ -0,0 +1,272 @@
1
+ <!doctype html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <title>YuanFlow Visual Card Sample Wall</title>
7
+ <style>
8
+ :root {
9
+ --bg: #121212;
10
+ --text: #f4eee4;
11
+ --muted: #aaa195;
12
+ --line: rgba(244,238,228,.14);
13
+ --serif: "Songti SC", "STSong", "SimSun", serif;
14
+ --sans: system-ui, sans-serif;
15
+ --mono: ui-monospace, monospace;
16
+ }
17
+ * { box-sizing: border-box; }
18
+ body {
19
+ margin: 0;
20
+ background:
21
+ radial-gradient(circle at 18% 0%, rgba(200,55,45,.20), transparent 32%),
22
+ radial-gradient(circle at 86% 10%, rgba(0,47,167,.18), transparent 30%),
23
+ var(--bg);
24
+ color: var(--text);
25
+ font-family: var(--sans);
26
+ -webkit-font-smoothing: antialiased;
27
+ }
28
+ main { max-width: 1680px; margin: 0 auto; padding: 64px 36px 96px; }
29
+ h1, h2, h3, p { margin: 0; }
30
+ .hero { margin-bottom: 64px; }
31
+ .kicker {
32
+ font-family: var(--mono);
33
+ font-size: 13px;
34
+ letter-spacing: .18em;
35
+ text-transform: uppercase;
36
+ color: #d6a84f;
37
+ margin-bottom: 18px;
38
+ }
39
+ h1 {
40
+ max-width: 1040px;
41
+ font-family: var(--serif);
42
+ font-size: clamp(46px, 6vw, 104px);
43
+ line-height: 1.04;
44
+ font-weight: 500;
45
+ letter-spacing: .02em;
46
+ }
47
+ .lead {
48
+ max-width: 900px;
49
+ margin-top: 20px;
50
+ color: var(--muted);
51
+ font-size: 20px;
52
+ line-height: 1.7;
53
+ }
54
+ .group { margin-top: 76px; }
55
+ .group-head {
56
+ display: flex;
57
+ align-items: end;
58
+ justify-content: space-between;
59
+ gap: 24px;
60
+ border-bottom: 1px solid var(--line);
61
+ padding-bottom: 20px;
62
+ margin-bottom: 26px;
63
+ }
64
+ h2 {
65
+ font-family: var(--serif);
66
+ font-size: 42px;
67
+ line-height: 1.15;
68
+ font-weight: 500;
69
+ }
70
+ .group-head p {
71
+ max-width: 520px;
72
+ color: var(--muted);
73
+ line-height: 1.6;
74
+ text-align: right;
75
+ }
76
+ .wall {
77
+ display: grid;
78
+ grid-template-columns: repeat(4, minmax(0, 1fr));
79
+ gap: 22px;
80
+ align-items: stretch;
81
+ }
82
+ @media (max-width: 1200px) { .wall { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
83
+ @media (max-width: 720px) {
84
+ main { padding: 42px 18px 72px; }
85
+ .wall { grid-template-columns: 1fr; }
86
+ .group-head { display: block; }
87
+ .group-head p { text-align: left; margin-top: 12px; }
88
+ }
89
+ .sample {
90
+ min-height: 520px;
91
+ overflow: hidden;
92
+ position: relative;
93
+ color: var(--ink);
94
+ background: var(--paper);
95
+ border: 1px solid rgba(255,255,255,.12);
96
+ box-shadow: 0 20px 50px rgba(0,0,0,.22);
97
+ }
98
+ .sample.wide { grid-column: span 2; min-height: 380px; }
99
+ @media (max-width: 720px) { .sample.wide { grid-column: span 1; } }
100
+ .pad { height: 100%; padding: 34px; display: flex; flex-direction: column; position: relative; z-index: 2; }
101
+ .label {
102
+ font-family: var(--mono);
103
+ font-size: 10px;
104
+ letter-spacing: .15em;
105
+ text-transform: uppercase;
106
+ color: var(--muted2);
107
+ margin-bottom: 18px;
108
+ }
109
+ .title {
110
+ font-size: 46px;
111
+ line-height: 1.08;
112
+ font-weight: 650;
113
+ max-width: 340px;
114
+ }
115
+ .deck {
116
+ margin-top: 16px;
117
+ font-size: 16px;
118
+ line-height: 1.55;
119
+ color: var(--muted2);
120
+ max-width: 300px;
121
+ }
122
+ .foot {
123
+ margin-top: auto;
124
+ border-top: 1px solid var(--line2);
125
+ padding-top: 12px;
126
+ display: flex;
127
+ justify-content: space-between;
128
+ font-family: var(--mono);
129
+ font-size: 10px;
130
+ letter-spacing: .12em;
131
+ color: var(--muted2);
132
+ text-transform: uppercase;
133
+ }
134
+ .photo {
135
+ margin-top: 26px;
136
+ min-height: 170px;
137
+ background:
138
+ linear-gradient(135deg, rgba(255,255,255,.45), rgba(0,0,0,.08)),
139
+ var(--soft);
140
+ border: 1px solid var(--line2);
141
+ }
142
+ .grain::before {
143
+ content: "";
144
+ position: absolute;
145
+ inset: 0;
146
+ opacity: .24;
147
+ background-image: radial-gradient(currentColor 1px, transparent 1.5px);
148
+ background-size: 4px 4px;
149
+ pointer-events: none;
150
+ mix-blend-mode: multiply;
151
+ }
152
+
153
+ .mag { --paper:#f3f0e8; --ink:#0a0a0b; --muted2:#68625a; --line2:rgba(10,10,11,.2); --soft:#d8d2c6; font-family:var(--serif); }
154
+ .mag .title { font-family:var(--serif); font-weight:500; letter-spacing:.04em; }
155
+ .chinese { --paper:#f5ead8; --ink:#25180f; --muted2:#7a6048; --line2:rgba(37,24,15,.18); --soft:#dfcdb4; font-family:var(--serif); }
156
+ .chinese .title { writing-mode: vertical-rl; letter-spacing:.16em; height: 260px; font-family:var(--serif); font-weight:500; }
157
+ .newspaper { --paper:#f4f0e7; --ink:#111; --muted2:#5e5850; --line2:rgba(17,17,17,.24); --soft:#d8d0c3; font-family:var(--serif); }
158
+ .newspaper .columns { display:grid; grid-template-columns:1fr 1fr; gap:16px; margin-top:24px; }
159
+ .newspaper .columns p { border-top:1px solid var(--line2); padding-top:12px; font-size:14px; line-height:1.55; }
160
+ .museum { --paper:#efeee9; --ink:#1b1915; --muted2:#706b62; --line2:rgba(27,25,21,.18); --soft:#d8d6ce; font-family:var(--serif); }
161
+ .museum .object { margin:auto 0 28px; height:230px; background:radial-gradient(circle,#c7c4b9,transparent 64%); border:1px solid var(--line2); }
162
+
163
+ .pop { --paper:#fff04a; --ink:#111; --muted2:#4f3d00; --line2:#111; --soft:#fff8a8; }
164
+ .pop .title { font-size:58px; font-weight:900; letter-spacing:-.04em; }
165
+ .badge-row { display:flex; flex-wrap:wrap; gap:8px; margin-top:auto; }
166
+ .badge-row span { border:3px solid var(--ink); background:white; padding:8px 11px; font-size:18px; font-weight:900; }
167
+ .brutal { --paper:#f5f5f0; --ink:#050505; --muted2:#333; --line2:#050505; --soft:#ff4a00; border:6px solid #050505; }
168
+ .brutal .title { font-size:60px; line-height:.96; font-weight:950; }
169
+ .brutal .rows { margin-top:auto; border-top:4px solid #050505; }
170
+ .brutal .rows p { margin:0; padding:12px 0; border-bottom:3px solid #050505; font-size:22px; font-weight:900; }
171
+ .maximal { --paper:#101010; --ink:#f7f03a; --muted2:#f36b2b; --line2:rgba(247,240,58,.35); --soft:#f0185c; }
172
+ .maximal .title { font-size:66px; font-weight:950; text-shadow:5px 5px 0 #f0185c; }
173
+ .maximal .repeat { position:absolute; inset:26px auto auto 18px; font-size:76px; font-weight:950; color:#f0185c; opacity:.38; line-height:.85; }
174
+ .event { --paper:#151414; --ink:#fff1d0; --muted2:#d5b986; --line2:rgba(255,241,208,.25); --soft:#ffcf33; }
175
+ .event .shape { width:190px; height:190px; background:linear-gradient(135deg,#ffcf33,#ff5a3d); margin:auto; transform:rotate(12deg); }
176
+
177
+ .swiss { --paper:#fafaf8; --ink:#0a0a0a; --muted2:#737373; --line2:#d4d4d2; --soft:#f0f0ee; }
178
+ .swiss .title { font-weight:250; letter-spacing:-.03em; }
179
+ .matrix { display:grid; grid-template-columns:1fr 1fr; gap:10px; margin-top:auto; }
180
+ .matrix div { background:var(--soft); padding:18px; font-size:22px; border:1px solid var(--line2); }
181
+ .blueprint { --paper:#092448; --ink:#e6f2ff; --muted2:#9db9d6; --line2:rgba(230,242,255,.25); --soft:#123660; }
182
+ .blueprint::after { content:""; position:absolute; inset:0; opacity:.16; background-image:linear-gradient(to right,var(--ink) 1px,transparent 1px),linear-gradient(to bottom,var(--ink) 1px,transparent 1px); background-size:28px 28px; }
183
+ .cyber { --paper:#090b12; --ink:#edf4ff; --muted2:#8aa0bf; --line2:rgba(237,244,255,.22); --soft:#00e0ff; }
184
+ .cyber .terminal { margin-top:auto; border:1px solid var(--line2); padding:18px; color:#00e0ff; font-family:var(--mono); }
185
+ .calm { --paper:#f7f5ef; --ink:#1f2933; --muted2:#6b7280; --line2:#d8d4c8; --soft:#e8ebf8; }
186
+ .flow { display:flex; gap:10px; margin-top:auto; }
187
+ .flow span { flex:1; border:1px solid #4c6fff; padding:16px 8px; text-align:center; }
188
+
189
+ .soft { --paper:#f2ece6; --ink:#25211d; --muted2:#82766b; --line2:rgba(37,33,29,.18); --soft:#d8d0c6; font-family:var(--serif); }
190
+ .soft .photo { border-radius:20px; box-shadow:0 14px 42px rgba(37,33,29,.15); }
191
+ .collage { --paper:#ead8ba; --ink:#2d2014; --muted2:#7d6750; --line2:rgba(45,32,20,.18); --soft:#f6ead6; font-family:var(--serif); }
192
+ .papers { position:relative; flex:1; }
193
+ .papers span { position:absolute; width:54%; height:36%; background:#f6ead6; box-shadow:0 12px 25px rgba(45,32,20,.18); }
194
+ .papers span:nth-child(1){left:2%;top:10%;transform:rotate(-5deg)} .papers span:nth-child(2){right:5%;top:24%;transform:rotate(4deg)} .papers span:nth-child(3){left:24%;bottom:8%;transform:rotate(-2deg)}
195
+ .botanical { --paper:#eef0df; --ink:#172418; --muted2:#62715e; --line2:rgba(23,36,24,.18); --soft:#d2dfc8; font-family:var(--serif); }
196
+ .botanical .leaf { margin:auto; width:220px; height:280px; border-radius:70% 0 70% 0; background:#3f7d4a; transform:rotate(-18deg); opacity:.82; }
197
+ .film { --paper:#1b1712; --ink:#f2dec1; --muted2:#b69d78; --line2:rgba(242,222,193,.2); --soft:#30271d; font-family:var(--serif); }
198
+ .frames { display:grid; grid-template-columns:1fr 1fr; gap:10px; margin-top:auto; }
199
+ .frames span { height:88px; background:#30271d; border:6px solid #0b0907; }
200
+
201
+ .product { --paper:#f8f7f2; --ink:#101214; --muted2:#6f757c; --line2:rgba(16,18,20,.16); --soft:#e8eef8; }
202
+ .product .object { margin:auto; width:210px; height:210px; border-radius:28px; background:linear-gradient(145deg,rgba(255,255,255,.65),rgba(0,0,0,.08)),#0d6efd; box-shadow:0 30px 60px rgba(16,18,20,.22); transform:rotate(-6deg); }
203
+ .luxury { --paper:#10100f; --ink:#f4ead7; --muted2:#a89777; --line2:rgba(244,234,215,.18); --soft:#d0a85a; font-family:var(--serif); }
204
+ .luxury .title { font-family:var(--serif); font-weight:500; margin-top:auto; }
205
+ .brand { --paper:#f5f3ed; --ink:#121212; --muted2:#626262; --line2:rgba(18,18,18,.16); --soft:#c8372d; }
206
+ .palette { display:flex; gap:10px; margin-top:auto; }
207
+ .palette span { width:54px; height:54px; background:#c8372d; } .palette span:nth-child(2){background:#243c72} .palette span:nth-child(3){background:#121212}
208
+ .app { --paper:#f8f7f2; --ink:#101214; --muted2:#6f757c; --line2:rgba(16,18,20,.16); --soft:#fff; }
209
+ .screen { height:190px; border:1px solid var(--line2); background:#fff; padding:16px; margin-top:auto; display:grid; grid-template-columns:1fr 1fr 1fr; gap:10px; }
210
+ .screen span { background:#eef1f5; border:1px solid #d6dbe2; }
211
+ </style>
212
+ </head>
213
+ <body>
214
+ <main>
215
+ <section class="hero">
216
+ <p class="kicker">YuanFlow Visual Card Skill / Sample Wall</p>
217
+ <h1>母风格样张墙:从系统说明页改为真实视觉预览</h1>
218
+ <p class="lead">5 个母风格各自有独立模板骨架。子风格不是换颜色,而是换字体、材料、版式、图像处理和内容节奏。</p>
219
+ </section>
220
+
221
+ <section class="group">
222
+ <div class="group-head"><h2>Editorial Publishing</h2><p>文章插图、文化内容、研究摘要、精致封面。</p></div>
223
+ <div class="wall">
224
+ <article class="sample mag grain"><div class="pad"><p class="label">Magazine Paper</p><h3 class="title">在信息里<br>找到一条路</h3><div class="photo"></div><div class="foot"><span>观察</span><span>结论</span></div></div></article>
225
+ <article class="sample chinese grain"><div class="pad"><p class="label">Chinese Literary</p><h3 class="title">春山慢记</h3><p class="deck">把一段路写成一页安静的注脚。</p><div class="foot"><span>本地旅行</span><span>卷二</span></div></div></article>
226
+ <article class="sample newspaper"><div class="pad"><p class="label">Data Newspaper</p><h3 class="title">三组数据解释<br>本轮变化</h3><div class="columns"><p>核心观察一,来自真实材料。</p><p>核心观察二,配合一组小图表。</p></div><div class="foot"><span>Report</span><span>2026</span></div></div></article>
227
+ <article class="sample museum"><div class="pad"><p class="label">Museum Label</p><div class="object"></div><h3 class="title">Object<br>Study 01</h3><p class="deck">材料、功能与设计判断。</p></div></article>
228
+ </div>
229
+ </section>
230
+
231
+ <section class="group">
232
+ <div class="group-head"><h2>Social Campaign</h2><p>小红书封面、活动视觉、爆款图、强观点海报。</p></div>
233
+ <div class="wall">
234
+ <article class="sample pop"><div class="pad"><p class="label">Pop Magazine</p><h3 class="title">这 6 个<br>真的好用</h3><div class="photo"></div><div class="badge-row"><span>实测</span><span>清单</span><span>避坑</span></div></div></article>
235
+ <article class="sample brutal"><div class="pad"><p class="label">Neo Brutalist</p><h3 class="title">别再这样<br>做封面</h3><div class="rows"><p>01 字太小</p><p>02 图太散</p><p>03 没焦点</p></div></div></article>
236
+ <article class="sample maximal"><div class="repeat">FLOW FLOW FLOW</div><div class="pad"><p class="label">Maximal Poster</p><h3 class="title">年度<br>灵感大会</h3><div class="foot"><span>06.18</span><span>LIVE</span></div></div></article>
237
+ <article class="sample event"><div class="pad"><p class="label">Event Key Visual</p><h3 class="title">AI 内容<br>工作坊</h3><div class="shape"></div><div class="foot"><span>Online</span><span>Free Entry</span></div></div></article>
238
+ </div>
239
+ </section>
240
+
241
+ <section class="group">
242
+ <div class="group-head"><h2>Technical Diagram</h2><p>产品解释、系统架构、AI 工作流、文章图解。</p></div>
243
+ <div class="wall">
244
+ <article class="sample swiss"><div class="pad"><p class="label">Swiss Data</p><h3 class="title">一个流程<br>四个节点</h3><div class="matrix"><div>输入</div><div>处理</div><div>验证</div><div>输出</div></div></div></article>
245
+ <article class="sample blueprint"><div class="pad"><p class="label">Blueprint Technical</p><h3 class="title">Runtime<br>Control Map</h3><div class="matrix"><div>Agent</div><div>Tool</div><div>Memory</div><div>Guard</div></div></div></article>
246
+ <article class="sample cyber"><div class="pad"><p class="label">Cyber Interface</p><h3 class="title">自动化<br>进入可控状态</h3><div class="terminal">~/yuanflow/run --visual</div></div></article>
247
+ <article class="sample calm"><div class="pad"><p class="label">Calm Diagram</p><h3 class="title">从想法<br>到图像</h3><div class="flow"><span>提炼</span><span>转译</span><span>排版</span><span>验证</span></div></div></article>
248
+ </div>
249
+ </section>
250
+
251
+ <section class="group">
252
+ <div class="group-head"><h2>Lifestyle Collage</h2><p>旅行、读书、生活方式、照片故事、自然食材。</p></div>
253
+ <div class="wall">
254
+ <article class="sample soft"><div class="pad"><p class="label">Soft Studio</p><h3 class="title">周末整理<br>工作台</h3><div class="photo"></div><div class="badge-row"><span>光线</span><span>收纳</span><span>节奏</span></div></div></article>
255
+ <article class="sample collage"><div class="pad"><p class="label">Collage Desk</p><h3 class="title">本周<br>灵感桌面</h3><div class="papers"><span></span><span></span><span></span></div><div class="foot"><span>Archive</span><span>06</span></div></div></article>
256
+ <article class="sample botanical"><div class="pad"><p class="label">Botanical Organic</p><div class="leaf"></div><h3 class="title">春天的<br>食材清单</h3><div class="foot"><span>Fresh</span><span>Seasonal</span></div></div></article>
257
+ <article class="sample film"><div class="pad"><p class="label">Film Contact Sheet</p><h3 class="title">一天里的<br>六个画面</h3><div class="frames"><span></span><span></span><span></span><span></span></div><div class="foot"><span>Roll 02</span><span>18:42</span></div></div></article>
258
+ </div>
259
+ </section>
260
+
261
+ <section class="group">
262
+ <div class="group-head"><h2>Product Brand</h2><p>产品推荐、App 功能图、品牌系统、商业封面。</p></div>
263
+ <div class="wall">
264
+ <article class="sample product"><div class="pad"><p class="label">Product Cutout</p><h3 class="title">一个工具<br>解决三件事</h3><div class="object"></div><div class="badge-row"><span>快</span><span>稳</span><span>可控</span></div></div></article>
265
+ <article class="sample luxury"><div class="pad"><p class="label">Luxury Minimal</p><div class="photo"></div><h3 class="title">Quiet<br>Precision</h3><div class="foot"><span>Object</span><span>2026</span></div></div></article>
266
+ <article class="sample brand"><div class="pad"><p class="label">Brand System</p><h3 class="title">Visual<br>System</h3><div class="palette"><span></span><span></span><span></span></div><div class="foot"><span>Tokens</span><span>Components</span></div></div></article>
267
+ <article class="sample app"><div class="pad"><p class="label">App Feature</p><h3 class="title">新版工作台<br>少点三次</h3><div class="screen"><span></span><span></span><span></span></div><div class="badge-row"><span>自动</span><span>批量</span><span>可见</span></div></div></article>
268
+ </div>
269
+ </section>
270
+ </main>
271
+ </body>
272
+ </html>
@@ -0,0 +1,56 @@
1
+ # Commercial System
2
+
3
+ This skill is designed as a long-term reusable production system, not a one-off prompt style.
4
+
5
+ ## Fixed Backbone
6
+
7
+ Keep these stable across every task:
8
+
9
+ - Intake: purpose, platform, ratio, source material, required copy, image/screenshot availability, and rights constraints.
10
+ - Planning: one page = one visual idea; page role must be named before HTML is built.
11
+ - Ratio: use fixed pixel boards from `layout-playbook.md`; compose each ratio separately.
12
+ - Typography: mobile-readable text; cut copy before shrinking below readable sizes.
13
+ - Evidence: real screenshots/photos/data must stay truthful and legible.
14
+ - Output: task folder with `index.html`, `assets/`, optional `output/`, and source notes when web assets are used.
15
+ - Validation: run `quality-check.md`; run `scripts/check_visual_card.py` on HTML when practical.
16
+
17
+ ## Flexible Design Layer
18
+
19
+ Change these to create meaningful variants:
20
+
21
+ - Style family: e.g. Editorial Paper, Pop Magazine, Blueprint Technical, Luxury Minimal.
22
+ - Palette: controlled 2-4 color system; one primary accent.
23
+ - Layout module: cover, image-led, object-callout, matrix, ledger, diagram, quote, contact sheet.
24
+ - Material: paper, film, blueprint, museum wall, screen, collage, studio backdrop, dark interface.
25
+ - Image treatment: full-bleed, framed, cutout, screenshot chrome, generated object, texture-only, photo grid.
26
+ - Copy rhythm: title-heavy, data-heavy, quote-led, annotation-led, checklist-led.
27
+
28
+ ## Decision Matrix
29
+
30
+ | User asks for | Fixed output decision | Flexible direction |
31
+ | --- | --- | --- |
32
+ | 小红书封面/图文 | 3:4, cover + pages, thumbnail-first title | Pop Magazine, Chinese Editorial, Soft Studio, Product Cutout |
33
+ | 公众号封面 | 21:9 + optional 1:1, separate compositions | Editorial Paper, Luxury Minimal, Event Key Visual |
34
+ | 文章插图 | 16:9 / 4:3, one concept image | Calm Diagram, Museum Label, Blueprint Technical, Editorial Paper |
35
+ | 设计稿/设计图 | ratio by use, explain or persuade first | Swiss Data, Blueprint Technical, Product Cutout, Maximal Poster |
36
+ | 产品功能图 | object/screenshot + callouts | Product Cutout, Swiss Data, Cyber Interface |
37
+ | 活动/课程海报 | poster or 3:4, title/date/location hierarchy | Event Key Visual, Maximal Poster, Neo-Brutalist |
38
+ | 风格探索 | same content, 3-6 variants | Change style + layout + image treatment, not color only |
39
+
40
+ ## Commercial Constraints
41
+
42
+ - Do not invent data, product specs, rankings, endorsements, user quotes, awards, or press mentions.
43
+ - Do not use real brand logos as decoration unless the user supplies them or the use is clearly contextual.
44
+ - Do not put final Chinese/English title text inside generated image assets; final text belongs in HTML for editability.
45
+ - Do not produce a style that depends on a single fragile effect. It should still work if the image changes.
46
+ - Do not make parent templates too specific. Keep them reusable through style tokens and modules.
47
+
48
+ ## Maturity Criteria
49
+
50
+ A generated result is mature enough for reuse when:
51
+
52
+ - The same HTML structure can accept a new topic with only copy/image/style-token changes.
53
+ - The page role is clear without reading source notes.
54
+ - Style identity survives grayscale thumbnail review.
55
+ - The design has at least one memorable visual decision.
56
+ - The output can be revised by changing HTML/CSS, not by regenerating the whole image.
@@ -0,0 +1,98 @@
1
+ # Layout Playbook
2
+
3
+ ## Ratios
4
+
5
+ - Rednote 3:4: `1080x1440`, best for cover and carousel pages.
6
+ - Square cover: `1080x1080`, best for WeChat square, avatar-like covers, quote cards.
7
+ - WeChat main: `2100x900`, compose as wide cover, not a crop.
8
+ - Article illustration: `1600x900`, `1440x1080`, or `1500x1000`.
9
+ - Poster: `1200x1800` or `1080x1620`.
10
+
11
+ ## Fixed Composition Rules
12
+
13
+ - Keep safe margins: 72-96px on 1080-wide cards, 96-140px on wide covers.
14
+ - Use fixed pixel boards for export. Do not build poster content with `vw` or `vh`.
15
+ - Keep each page to one main idea and one main focal point.
16
+ - Use footer/meta as a quiet anchor, not as a second title.
17
+ - Use a stable page sequence for carousels; vary the layout rhythm inside the sequence.
18
+
19
+ ## Cover Layouts
20
+
21
+ - Big title + hero image: use when the image is evidence or mood.
22
+ - Big title + abstract system block: use for tools, concepts, frameworks.
23
+ - Type-only title: use for strong thesis, quotes, premium covers.
24
+ - Split object cover: title on one side, product/person/object on the other.
25
+ - Full-bleed photo cover: only if the photo has a quiet zone for text.
26
+ - Event key visual: title + date/location + one dominant visual mark.
27
+ - Product cutout cover: object/screenshot + 2-4 callouts + benefit title.
28
+ - Newspaper cover: headline + data strip + one chart or photo.
29
+
30
+ ## Content Page Layouts
31
+
32
+ - Checklist: 4-6 rows, one point per row.
33
+ - Matrix: 6-12 cells, one highlighted cell maximum.
34
+ - Before/After: top/bottom on 3:4, left/right on 21:9.
35
+ - Evidence feature: screenshot/photo takes 45%-65% of page.
36
+ - Diagram: 3-5 nodes or steps, one flow direction.
37
+ - Pull quote: one sentence plus source/context anchors.
38
+ - Contact sheet: 3-6 photos, each with short captions.
39
+ - Object study: one object, three annotations, one conclusion.
40
+ - Exploded callout: one object/screenshot with 3-5 labeled callouts.
41
+ - Timeline: 4-7 moments with one clear time axis.
42
+ - Scorecard: 4-6 criteria with ratings or short judgments.
43
+ - Myth/fact: paired rows for misconception correction.
44
+ - Recipe/process: ingredients/resources at top, steps below.
45
+
46
+ ## Page Sequencing For Rednote
47
+
48
+ 1. Cover: hook + visual promise.
49
+ 2. Context: why this matters.
50
+ 3. Evidence: screenshot/photo/data.
51
+ 4. Method: steps or framework.
52
+ 5. Detail: checklist, comparison, matrix.
53
+ 6. Result: takeaway or before/after.
54
+ 7. Closing: comment prompt or summary.
55
+
56
+ Use 5-9 pages for most posts. If a page has only one weak point, merge it with the previous page.
57
+
58
+ Recommended rhythm:
59
+
60
+ - Page 1: cover hook.
61
+ - Page 2: context or promise.
62
+ - Page 3: evidence or visual proof.
63
+ - Page 4: method / framework.
64
+ - Page 5: checklist / comparison / matrix.
65
+ - Page 6: example / case / before-after.
66
+ - Page 7: summary / save-worthy list.
67
+ - Page 8-9: optional FAQ, resource list, comment prompt.
68
+
69
+ ## Article Illustration
70
+
71
+ - Do not force full carousel logic into article images.
72
+ - Make one strong concept image: title optional, labels useful, paragraph text minimal.
73
+ - For technical articles, use Calm Diagram, Blueprint Technical, Swiss Data, or Cyber Interface.
74
+ - For essays, use Editorial Paper, Chinese Editorial, Museum Label, Film Contact Sheet, or Luxury Minimal.
75
+ - Prefer one diagram, one object, one scene, or one metaphor. Avoid mini-posters with too many slogans.
76
+
77
+ ## Design Graphics
78
+
79
+ - Define the intended function first: explain, compare, decorate, summarize, brand, or persuade.
80
+ - If it explains: diagram/matrix/checklist.
81
+ - If it persuades: cover/poster/quote.
82
+ - If it decorates an article: image-led or object-led with light labels.
83
+ - If it summarizes: data-led, ledger, or contact sheet.
84
+
85
+ ## Layout Module Library
86
+
87
+ - `hero-title`: large title + subtitle + footer.
88
+ - `image-led`: image well or full-bleed image + title in safe zone.
89
+ - `object-callout`: cutout or screenshot + label pins.
90
+ - `matrix-grid`: 6-12 cells, one accent maximum.
91
+ - `ledger-list`: 4-7 rows with number/title/short note.
92
+ - `data-chart`: bars, towers, score rows, or stat blocks.
93
+ - `diagram-flow`: 3-5 nodes connected by lines/arrows.
94
+ - `quote-page`: one core sentence with source/context anchors.
95
+ - `contact-sheet`: 3-6 image frames with captions.
96
+ - `split-compare`: before/after, old/new, pro/con, A/B.
97
+
98
+ Choose one primary module per page. A secondary module is allowed only if it supports the primary idea.