guanwei 1.1.1

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 (157) hide show
  1. package/LICENSE +21 -0
  2. package/README.en.md +202 -0
  3. package/README.md +247 -0
  4. package/dist/assets/index-CsOD5rSo.js +102 -0
  5. package/dist/assets/index-CsOD5rSo.js.map +1 -0
  6. package/dist/assets/index-DQx62TUr.css +1 -0
  7. package/dist/favicon.svg +12 -0
  8. package/dist/index.html +15 -0
  9. package/eslint.config.js +28 -0
  10. package/index.html +25 -0
  11. package/package.json +96 -0
  12. package/postcss.config.js +10 -0
  13. package/public/favicon.svg +12 -0
  14. package/scripts/guanwei +245 -0
  15. package/scripts/install.sh +79 -0
  16. package/scripts/release.sh +42 -0
  17. package/scripts/setup.bat +36 -0
  18. package/scripts/setup.sh +123 -0
  19. package/server/src/data/db.json +12059 -0
  20. package/server/src/data/guanwei.db +0 -0
  21. package/server/src/data/lifeContext.ts +423 -0
  22. package/server/src/data/spreads.ts +255 -0
  23. package/server/src/data/tarotCards.ts +2353 -0
  24. package/server/src/index.ts +71 -0
  25. package/server/src/routes/ai.ts +376 -0
  26. package/server/src/routes/divine.ts +140 -0
  27. package/server/src/routes/hour.ts +40 -0
  28. package/server/src/routes/tarot.ts +129 -0
  29. package/server/src/routes/users.ts +140 -0
  30. package/server/src/services/chartBrief.ts +131 -0
  31. package/server/src/services/divineStore.ts +188 -0
  32. package/server/src/services/hourInference.ts +150 -0
  33. package/server/src/services/llmProvider.ts +181 -0
  34. package/server/src/services/promptBuilder.ts +327 -0
  35. package/server/src/services/relativesCheck.ts +139 -0
  36. package/server/src/services/sixRelatives.ts +70 -0
  37. package/server/src/services/skills.ts +116 -0
  38. package/server/src/types/index.ts +104 -0
  39. package/server/src/utils/semanticAnalyzer.ts +555 -0
  40. package/server/src/utils/tarotEngine.ts +849 -0
  41. package/server/tsconfig.json +18 -0
  42. package/shared/core/data/classics.ts +276 -0
  43. package/shared/core/data/courses.ts +211 -0
  44. package/shared/core/data/duanyu.ts +148 -0
  45. package/shared/core/data/ganzhi.ts +53 -0
  46. package/shared/core/data/gua64.ts +93 -0
  47. package/shared/core/data/liuren.ts +18 -0
  48. package/shared/core/data/liuyao.ts +73 -0
  49. package/shared/core/data/qimen.ts +27 -0
  50. package/shared/core/data/region-full.ts +3 -0
  51. package/shared/core/data/region.ts +310 -0
  52. package/shared/core/data/tarotSpreads.ts +78 -0
  53. package/shared/core/data/xiaoliuren.ts +18 -0
  54. package/shared/core/data/ziwei.ts +97 -0
  55. package/shared/core/data/zodiac.ts +20 -0
  56. package/shared/core/engine/astrology.ts +169 -0
  57. package/shared/core/engine/bazi.ts +306 -0
  58. package/shared/core/engine/calendar.ts +127 -0
  59. package/shared/core/engine/daily.ts +133 -0
  60. package/shared/core/engine/liuren.ts +86 -0
  61. package/shared/core/engine/liuyao.ts +93 -0
  62. package/shared/core/engine/meihua.ts +87 -0
  63. package/shared/core/engine/qimen.ts +78 -0
  64. package/shared/core/engine/questionFit.ts +94 -0
  65. package/shared/core/engine/tarot.ts +69 -0
  66. package/shared/core/engine/trueSolarTime.ts +86 -0
  67. package/shared/core/engine/xiaoliuren.ts +19 -0
  68. package/shared/core/engine/ziwei.ts +217 -0
  69. package/shared/core/engine/ziweiInterpret.ts +161 -0
  70. package/shared/core/types.ts +206 -0
  71. package/src/App.tsx +69 -0
  72. package/src/arts/registry.ts +31 -0
  73. package/src/assets/react.svg +1 -0
  74. package/src/components/Backdrop.tsx +27 -0
  75. package/src/components/BambooArt.tsx +41 -0
  76. package/src/components/CalendarInput.tsx +131 -0
  77. package/src/components/DateInput.tsx +103 -0
  78. package/src/components/Disclaimer.tsx +12 -0
  79. package/src/components/Empty.tsx +8 -0
  80. package/src/components/ErrorBoundary.tsx +38 -0
  81. package/src/components/HomeSideAnchor.tsx +62 -0
  82. package/src/components/InkVein.tsx +10 -0
  83. package/src/components/LifeEventsInput.tsx +47 -0
  84. package/src/components/LocationPicker.tsx +117 -0
  85. package/src/components/Motes.tsx +65 -0
  86. package/src/components/Navigation.tsx +80 -0
  87. package/src/components/ProfileForm.tsx +40 -0
  88. package/src/components/ProfilePicker.tsx +40 -0
  89. package/src/components/QuestionFields.tsx +47 -0
  90. package/src/components/ReportView.tsx +211 -0
  91. package/src/components/ResultCard.tsx +40 -0
  92. package/src/components/SealButton.tsx +18 -0
  93. package/src/components/SiteFooter.tsx +17 -0
  94. package/src/components/SiteNav.tsx +103 -0
  95. package/src/components/SongDialog.tsx +64 -0
  96. package/src/components/SongSearchSelect.tsx +81 -0
  97. package/src/components/SongSelect.tsx +61 -0
  98. package/src/components/StarField.tsx +119 -0
  99. package/src/components/TarotCard.tsx +129 -0
  100. package/src/components/TimeShichenInput.tsx +29 -0
  101. package/src/components/arts/AstrologyArt.tsx +141 -0
  102. package/src/components/arts/BaziArt.tsx +269 -0
  103. package/src/components/arts/LiurenArt.tsx +87 -0
  104. package/src/components/arts/LiuyaoArt.tsx +111 -0
  105. package/src/components/arts/MeihuaArt.tsx +105 -0
  106. package/src/components/arts/QimenArt.tsx +86 -0
  107. package/src/components/arts/TarotArt.tsx +110 -0
  108. package/src/components/arts/XiaoliurenArt.tsx +93 -0
  109. package/src/components/arts/ZiweiArt.tsx +296 -0
  110. package/src/data/arts.ts +84 -0
  111. package/src/data/lifeContext.ts +423 -0
  112. package/src/data/sample-report.json +146 -0
  113. package/src/data/shichen.ts +21 -0
  114. package/src/data/spreads.ts +255 -0
  115. package/src/data/tarotCards.ts +2353 -0
  116. package/src/hooks/useAIInterpret.ts +76 -0
  117. package/src/hooks/useDivine.ts +39 -0
  118. package/src/hooks/useTheme.ts +29 -0
  119. package/src/index.css +190 -0
  120. package/src/lib/utils.ts +6 -0
  121. package/src/main.tsx +12 -0
  122. package/src/pages/AboutPage.tsx +25 -0
  123. package/src/pages/AcademyPage.tsx +128 -0
  124. package/src/pages/AstrologyPage.tsx +33 -0
  125. package/src/pages/AuthPage.tsx +263 -0
  126. package/src/pages/BaZiPage.tsx +33 -0
  127. package/src/pages/ClassicsPage.tsx +120 -0
  128. package/src/pages/DemoPage.tsx +161 -0
  129. package/src/pages/HistoryPage.tsx +133 -0
  130. package/src/pages/Home.tsx +179 -0
  131. package/src/pages/HomePage.tsx +174 -0
  132. package/src/pages/ModulePage.tsx +320 -0
  133. package/src/pages/SpreadEditor.tsx +230 -0
  134. package/src/pages/SpreadEditorPage.tsx +105 -0
  135. package/src/pages/SpreadLibrary.tsx +199 -0
  136. package/src/pages/SpreadLibraryPage.tsx +17 -0
  137. package/src/pages/TarotPage.tsx +738 -0
  138. package/src/pages/ZiWeiPage.tsx +33 -0
  139. package/src/services/api.ts +342 -0
  140. package/src/stores/useDivinationStore.ts +22 -0
  141. package/src/styles/song.css +1066 -0
  142. package/src/styles/tokens.css +60 -0
  143. package/src/types/index.ts +104 -0
  144. package/src/utils/astrologyCalc.ts +61 -0
  145. package/src/utils/comboEngine.ts +134 -0
  146. package/src/utils/dst.ts +24 -0
  147. package/src/utils/panTone.ts +206 -0
  148. package/src/utils/recordStore.ts +60 -0
  149. package/src/utils/semanticAnalyzer.ts +555 -0
  150. package/src/utils/spreadStorage.ts +32 -0
  151. package/src/utils/storage.ts +27 -0
  152. package/src/utils/tarotEngine.ts +849 -0
  153. package/src/utils/userStore.ts +234 -0
  154. package/src/vite-env.d.ts +1 -0
  155. package/tailwind.config.js +52 -0
  156. package/tsconfig.json +40 -0
  157. package/vite.config.ts +34 -0
@@ -0,0 +1,1066 @@
1
+ /* ============================================================
2
+ 观微 · 宋式美学组件样式(基于参考项目同构移植)
3
+ ============================================================ */
4
+
5
+ *{margin:0;padding:0;box-sizing:border-box}
6
+ html{scroll-behavior:smooth}
7
+ body{
8
+ font-family:var(--font-song);
9
+ color:var(--ink);
10
+ background:var(--paper);
11
+ font-size:var(--fs-base);
12
+ line-height:1.85;
13
+ -webkit-font-smoothing:antialiased;
14
+ overflow-x:hidden;
15
+ }
16
+ ::selection{background:var(--cinnabar);color:var(--paper)}
17
+ img,svg{display:block;max-width:100%}
18
+ a{color:inherit;text-decoration:none}
19
+ button{font-family:inherit;cursor:pointer;background:none;border:none;color:inherit}
20
+ input,select,textarea{font-family:inherit;color:inherit}
21
+
22
+ /* —— 宣纸纹理层 —— */
23
+ #paper-grain{
24
+ position:fixed;inset:0;z-index:-2;pointer-events:none;
25
+ background:
26
+ radial-gradient(120% 90% at 12% 0%, rgba(255,255,255,.55), transparent 55%),
27
+ radial-gradient(100% 80% at 100% 100%, rgba(198,188,160,.22), transparent 60%);
28
+ }
29
+ #paper-grain::after{
30
+ content:"";position:absolute;inset:0;
31
+ background-image:
32
+ repeating-linear-gradient(0deg, rgba(55,52,44,.016) 0 1px, transparent 1px 3px),
33
+ repeating-linear-gradient(90deg, rgba(55,52,44,.012) 0 1px, transparent 1px 5px);
34
+ opacity:.5;
35
+ }
36
+
37
+ /* —— 水墨远山(全局底景)—— */
38
+ #mountains{
39
+ position:fixed;left:0;right:0;bottom:0;height:38vh;z-index:-1;pointer-events:none;
40
+ opacity:.5;
41
+ }
42
+
43
+ /* ============ 布局骨架 ============ */
44
+ .wrap{max-width:1200px;margin:0 auto;padding:0 clamp(1.25rem,4vw,3rem)}
45
+
46
+ /* ============ 顶部导航 ============ */
47
+ .site-head{
48
+ position:sticky;top:0;z-index:50;
49
+ backdrop-filter:blur(8px);
50
+ background:linear-gradient(180deg, rgba(245,241,231,.92), rgba(245,241,231,.72));
51
+ border-bottom:1px solid var(--line-soft);
52
+ }
53
+ .head-inner{
54
+ display:flex;align-items:center;justify-content:space-between;
55
+ padding-block:.8rem;
56
+ gap:1rem;
57
+ }
58
+ .brand{display:flex;align-items:baseline;gap:.6rem;flex-shrink:0}
59
+ .brand .seal{
60
+ align-self:center;
61
+ font-family:var(--font-kai);
62
+ font-size:.72rem;letter-spacing:.12em;
63
+ color:var(--cinnabar);
64
+ border:1.5px solid var(--cinnabar);
65
+ padding:.28rem .34rem;
66
+ line-height:1;
67
+ border-radius:2px;
68
+ }
69
+ .brand .name{font-family:var(--font-kai);font-size:1.45rem;letter-spacing:.32em;color:var(--ink)}
70
+ .brand .sub{font-size:var(--fs-xs);color:var(--ink-faint);letter-spacing:.3em;white-space:nowrap}
71
+ .nav-links{display:flex;align-items:center;gap:clamp(.6rem,2vw,1.6rem);flex-wrap:wrap;justify-content:flex-end}
72
+ .nav-links a{
73
+ font-size:var(--fs-sm);letter-spacing:.18em;color:var(--ink-soft);
74
+ padding:.3rem 0;position:relative;transition:color var(--dur-fast) var(--ease-out);
75
+ }
76
+ .nav-links a::after{
77
+ content:"";position:absolute;left:0;right:0;bottom:0;height:1px;
78
+ background:var(--cinnabar);transform:scaleX(0);transform-origin:right;
79
+ transition:transform var(--dur-mid) var(--ease-out);
80
+ }
81
+ .nav-links a:hover{color:var(--ink)}
82
+ .nav-links a:hover::after{transform:scaleX(1);transform-origin:left}
83
+ .nav-links a.active{color:var(--cinnabar)}
84
+
85
+ /* ============ 视图切换 ============ */
86
+ .view{display:none;animation:viewIn .9s var(--ease-out) both}
87
+ .view.active{display:block}
88
+ @keyframes viewIn{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}
89
+
90
+ /* ============ HERO ============ */
91
+ .hero{position:relative;min-height:calc(100vh - 76px);display:flex;flex-direction:column;justify-content:center;padding-block:var(--sp-6)}
92
+ .hero-kicker{
93
+ display:flex;align-items:center;gap:1rem;
94
+ font-size:var(--fs-sm);letter-spacing:.5em;color:var(--ink-faint);
95
+ margin-bottom:var(--sp-3);
96
+ }
97
+ .hero-kicker::before{content:"";width:3.5rem;height:1px;background:var(--ink-faint)}
98
+ .hero-title{
99
+ font-family:var(--font-kai);
100
+ font-size:var(--fs-display);
101
+ letter-spacing:.12em;
102
+ line-height:1.05;
103
+ color:var(--ink);
104
+ text-shadow:0 2px 30px rgba(255,255,255,.6);
105
+ }
106
+ .hero-title .accent{color:var(--celadon-deep);font-family:var(--font-zm)}
107
+ .hero-line{
108
+ margin-top:var(--sp-4);
109
+ font-size:var(--fs-lg);
110
+ color:var(--ink-soft);
111
+ max-width:34ch;
112
+ line-height:2;
113
+ letter-spacing:.08em;
114
+ }
115
+ .hero-line em{font-style:normal;color:var(--cinnabar)}
116
+ .hero-desc{
117
+ margin-top:var(--sp-3);
118
+ max-width:52ch;color:var(--ink-faint);font-size:var(--fs-sm);
119
+ letter-spacing:.14em;line-height:2.1;
120
+ }
121
+ .hero-actions{margin-top:var(--sp-5);display:flex;gap:1rem;flex-wrap:wrap}
122
+
123
+ /* —— 印章式按钮 —— */
124
+ .btn-seal{
125
+ position:relative;
126
+ padding:.85rem 2.2rem;
127
+ font-family:var(--font-kai);font-size:1.05rem;letter-spacing:.35em;
128
+ color:var(--cinnabar);
129
+ border:1.5px solid var(--cinnabar);
130
+ border-radius:2px;
131
+ transition:all var(--dur-mid) var(--ease-out);
132
+ overflow:hidden;
133
+ display:inline-block;
134
+ cursor:pointer;
135
+ }
136
+ .btn-seal::before{
137
+ content:"";position:absolute;inset:0;
138
+ background:var(--cinnabar);transform:scaleY(0);transform-origin:top;
139
+ transition:transform var(--dur-mid) var(--ease-out);
140
+ }
141
+ .btn-seal:hover{color:var(--paper)}
142
+ .btn-seal:hover::before{transform:scaleY(1)}
143
+ .btn-seal.btn-ghost{color:var(--ink-soft);border-color:var(--ink-soft)}
144
+ .btn-seal.btn-ghost::before{background:var(--ink-soft)}
145
+ .btn-seal.btn-ghost:hover{color:var(--paper)}
146
+
147
+ /* —— Hero 竖向小字 —— */
148
+ .hero-vert{
149
+ position:absolute;right:clamp(1rem,4vw,3rem);top:50%;transform:translateY(-50%);
150
+ writing-mode:vertical-rl;
151
+ font-family:var(--font-kai);font-size:var(--fs-sm);letter-spacing:.6em;
152
+ color:var(--ink-faint);opacity:.75;
153
+ display:flex;gap:2.2rem;
154
+ }
155
+ .hero-vert span{white-space:nowrap}
156
+
157
+ /* —— 滚动指示 —— */
158
+ .scroll-hint{
159
+ position:absolute;bottom:2.4rem;left:50%;transform:translateX(-50%);
160
+ writing-mode:vertical-rl;font-size:var(--fs-xs);letter-spacing:.5em;color:var(--ink-faint);
161
+ display:flex;align-items:center;gap:.6rem;
162
+ animation:floatHint 3.2s var(--ease-ink) infinite;
163
+ }
164
+ .scroll-hint::after{content:"";width:1px;height:3rem;background:linear-gradient(180deg,var(--ink-faint),transparent)}
165
+
166
+ /* ============ 九术册页 ============ */
167
+ .section-head{margin-bottom:var(--sp-5)}
168
+ .section-eyebrow{
169
+ display:flex;align-items:center;gap:1rem;
170
+ font-size:var(--fs-sm);letter-spacing:.5em;color:var(--ink-faint);
171
+ }
172
+ .section-eyebrow::before{content:"";width:2.5rem;height:1px;background:var(--ink-faint)}
173
+ .section-title{
174
+ font-family:var(--font-kai);
175
+ font-size:var(--fs-2xl);letter-spacing:.2em;
176
+ margin-top:.8rem;color:var(--ink);
177
+ }
178
+ .section-note{margin-top:.6rem;color:var(--ink-faint);font-size:var(--fs-sm);letter-spacing:.12em}
179
+
180
+ .arts-grid{
181
+ display:grid;
182
+ grid-template-columns:repeat(3,1fr);
183
+ gap:clamp(1.2rem,2.5vw,2rem);
184
+ }
185
+ @media (max-width:900px){.arts-grid{grid-template-columns:repeat(2,1fr)}}
186
+ @media (max-width:560px){.arts-grid{grid-template-columns:1fr}}
187
+
188
+ /* —— 册页 —— */
189
+ .art-card{
190
+ position:relative;
191
+ background:linear-gradient(175deg, var(--white-paper), var(--paper) 70%, var(--paper-deep));
192
+ border:1px solid var(--line);
193
+ border-radius:var(--r-md);
194
+ padding:var(--sp-4) var(--sp-3);
195
+ cursor:pointer;
196
+ transition:transform var(--dur-mid) var(--ease-out), box-shadow var(--dur-mid) var(--ease-out), border-color var(--dur-mid);
197
+ overflow:hidden;
198
+ min-height:240px;
199
+ display:flex;flex-direction:column;
200
+ text-decoration:none;
201
+ color:inherit;
202
+ }
203
+ .art-card::before{
204
+ content:"";position:absolute;top:0;left:1.5rem;right:1.5rem;height:1px;
205
+ background:linear-gradient(90deg, transparent, var(--celadon), transparent);
206
+ }
207
+ .art-card::after{
208
+ content:"";position:absolute;inset:auto -30% -55% -30%;height:90%;
209
+ background:radial-gradient(ellipse at center, rgba(150,168,143,.16), transparent 65%);
210
+ opacity:0;transition:opacity var(--dur-slow) var(--ease-ink);
211
+ }
212
+ .art-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-paper);border-color:var(--celadon)}
213
+ .art-card:hover::after{opacity:1}
214
+ .art-card:focus-visible{outline:2px solid var(--celadon-deep);outline-offset:2px}
215
+
216
+ .art-num{
217
+ font-family:var(--font-kai);font-size:var(--fs-sm);color:var(--ink-faint);
218
+ letter-spacing:.3em;display:flex;align-items:center;gap:.5rem;
219
+ }
220
+ .art-num::after{content:"";flex:1;height:1px;background:var(--line-soft)}
221
+ .art-symbol{
222
+ margin:var(--sp-2) 0 var(--sp-2);
223
+ font-family:var(--font-zm);
224
+ font-size:var(--fs-2xl);
225
+ color:var(--celadon-deep);
226
+ line-height:1;
227
+ text-align:center;
228
+ width:3.4rem;height:3.4rem;margin-left:auto;margin-right:auto;
229
+ display:flex;align-items:center;justify-content:center;
230
+ border:1px solid var(--line-soft);
231
+ border-radius:50%;
232
+ background:radial-gradient(circle at 35% 30%, var(--celadon-tint), transparent 70%);
233
+ }
234
+ .art-name{
235
+ font-family:var(--font-kai);font-size:var(--fs-xl);letter-spacing:.24em;
236
+ text-align:center;color:var(--ink);
237
+ }
238
+ .art-poem{
239
+ text-align:center;color:var(--ink-faint);font-size:var(--fs-sm);
240
+ letter-spacing:.18em;margin-top:.6rem;
241
+ }
242
+ .art-enter{
243
+ margin-top:auto;padding-top:var(--sp-2);
244
+ text-align:center;font-size:var(--fs-xs);letter-spacing:.4em;color:var(--ink-faint);
245
+ transition:color var(--dur-fast);
246
+ }
247
+ .art-card:hover .art-enter{color:var(--cinnabar)}
248
+
249
+ /* ============ 关于/法度 ============ */
250
+ .about{background:var(--paper-deep);border-block:1px solid var(--line-soft)}
251
+ .about-grid{
252
+ display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-4);
253
+ }
254
+ @media (max-width:860px){.about-grid{grid-template-columns:1fr}}
255
+ .about-item{padding-right:var(--sp-3)}
256
+ .about-item h3{
257
+ font-family:var(--font-kai);font-size:1.1rem;letter-spacing:.2em;
258
+ display:flex;align-items:center;gap:.7rem;color:var(--ink);
259
+ }
260
+ .about-item h3::before{content:"·";color:var(--cinnabar);font-size:1.4rem}
261
+ .about-item p{margin-top:.7rem;font-size:var(--fs-sm);color:var(--ink-soft);line-height:2.1;letter-spacing:.06em}
262
+
263
+ /* ============ 模块页通用 ============ */
264
+ .module-hero{padding:var(--sp-7) 0 var(--sp-5);position:relative}
265
+ .module-kicker{
266
+ display:flex;align-items:center;gap:1rem;
267
+ font-size:var(--fs-sm);letter-spacing:.4em;color:var(--ink-faint);
268
+ }
269
+ .module-kicker::before{content:"";width:2.5rem;height:1px;background:var(--ink-faint)}
270
+ .module-title-row{display:flex;align-items:flex-end;gap:var(--sp-3);flex-wrap:wrap;margin-top:1rem}
271
+ .module-title{
272
+ font-family:var(--font-kai);font-size:var(--fs-2xl);letter-spacing:.18em;color:var(--ink);
273
+ }
274
+ .module-title .cn{display:block;font-family:var(--font-zm);font-size:var(--fs-3xl);color:var(--celadon-deep);letter-spacing:.1em}
275
+ .module-poem{
276
+ font-family:var(--font-kai);color:var(--ink-soft);font-size:var(--fs-lg);
277
+ letter-spacing:.3em;padding-bottom:.5rem;
278
+ }
279
+ .module-intro{
280
+ margin-top:var(--sp-2);max-width:62ch;color:var(--ink-soft);
281
+ font-size:var(--fs-sm);letter-spacing:.08em;line-height:2.2;
282
+ }
283
+ .module-intro .source{color:var(--ink-faint);font-size:var(--fs-xs)}
284
+
285
+ /* —— 占卜工作台 —— */
286
+ .altar{
287
+ display:grid;grid-template-columns:340px 1fr;gap:var(--sp-5);
288
+ align-items:start;
289
+ }
290
+ @media (max-width:960px){.altar{grid-template-columns:1fr}}
291
+ .altar-panel{
292
+ background:linear-gradient(175deg, var(--white-paper), var(--paper-deep));
293
+ border:1px solid var(--line);
294
+ border-radius:var(--r-lg);
295
+ padding:var(--sp-4);
296
+ position:sticky;top:88px;
297
+ }
298
+ @media (max-width:960px){.altar-panel{position:static}}
299
+ .panel-title{
300
+ font-family:var(--font-kai);font-size:1.1rem;letter-spacing:.25em;
301
+ display:flex;align-items:center;gap:.6rem;color:var(--ink);
302
+ padding-bottom:var(--sp-2);border-bottom:1px solid var(--line-soft);
303
+ }
304
+ .panel-title::before{content:"◇";color:var(--celadon-deep);font-size:.8rem}
305
+ .field{margin-top:var(--sp-3)}
306
+ .field label{display:block;font-size:var(--fs-sm);letter-spacing:.2em;color:var(--ink-soft);margin-bottom:.4rem}
307
+ .field .hint{font-size:var(--fs-xs);color:var(--ink-faint);letter-spacing:.08em;margin-top:.3rem}
308
+ .field-row{display:grid;grid-template-columns:1fr 1fr;gap:.8rem}
309
+ .input-line{
310
+ width:100%;padding:.6rem .8rem;
311
+ background:rgba(251,249,243,.6);
312
+ border:1px solid var(--line);
313
+ border-radius:var(--r-sm);
314
+ font-size:var(--fs-base);
315
+ transition:border-color var(--dur-fast), box-shadow var(--dur-fast);
316
+ }
317
+ .input-line:focus{outline:none;border-color:var(--celadon-deep);box-shadow:0 0 0 3px rgba(95,118,96,.12)}
318
+ select.input-line{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--ink-soft) 50%),linear-gradient(135deg,var(--ink-soft) 50%,transparent 50%);background-position:calc(100% - 18px) 50%,calc(100% - 13px) 50%;background-size:5px 5px;background-repeat:no-repeat}
319
+ .btn-divine{
320
+ margin-top:var(--sp-4);
321
+ width:100%;padding:1rem;
322
+ background:var(--celadon-deep);color:var(--paper);
323
+ font-family:var(--font-kai);font-size:1.15rem;letter-spacing:.5em;text-indent:.5em;
324
+ border-radius:var(--r-sm);
325
+ transition:background var(--dur-mid) var(--ease-out), transform var(--dur-mid);
326
+ cursor:pointer;
327
+ }
328
+ .btn-divine:hover{background:var(--cinnabar);transform:translateY(-1px)}
329
+ .btn-divine:disabled{opacity:.5;cursor:wait}
330
+ .btn-divine .small{display:block;font-size:var(--fs-xs);letter-spacing:.3em;font-family:var(--font-song);color:rgba(251,249,243,.75);margin-top:.15rem}
331
+
332
+ /* —— 结果区 —— */
333
+ .altar-result{min-height:320px}
334
+ .result-placeholder{
335
+ display:flex;flex-direction:column;align-items:center;justify-content:center;
336
+ min-height:320px;gap:.8rem;color:var(--ink-faint);
337
+ border:1px dashed var(--line);
338
+ border-radius:var(--r-lg);
339
+ padding:var(--sp-4);
340
+ text-align:center;
341
+ }
342
+ .result-placeholder .glyph{font-family:var(--font-zm);font-size:3.4rem;color:var(--rice)}
343
+ .result-placeholder p{letter-spacing:.3em;font-size:var(--fs-sm)}
344
+
345
+ .result-card{
346
+ background:linear-gradient(175deg, var(--white-paper), var(--paper-deep));
347
+ border:1px solid var(--line);border-radius:var(--r-lg);
348
+ padding:var(--sp-4);
349
+ margin-bottom:var(--sp-3);
350
+ animation:viewIn .8s var(--ease-out) both;
351
+ }
352
+ .result-card h3{
353
+ font-family:var(--font-kai);font-size:1.1rem;letter-spacing:.2em;
354
+ color:var(--celadon-deep);display:flex;align-items:center;gap:.6rem;
355
+ padding-bottom:.8rem;margin-bottom:var(--sp-2);
356
+ border-bottom:1px solid var(--line-soft);
357
+ }
358
+ .result-card h3::before{content:"◆";font-size:.8rem}
359
+ .result-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--sp-2)}
360
+ .result-cell{padding:.9rem;background:rgba(251,249,243,.55);border:1px solid var(--line-soft);border-radius:var(--r-sm)}
361
+ .result-cell .k{font-size:var(--fs-xs);color:var(--ink-faint);letter-spacing:.25em}
362
+ .result-cell .v{font-size:1.15rem;color:var(--ink);margin-top:.2rem;letter-spacing:.08em;font-weight:500}
363
+ .result-cell .v.big{font-size:1.5rem;font-family:var(--font-kai)}
364
+ .result-cell .v.hot{color:var(--cinnabar)}
365
+ .result-cell .v.cool{color:var(--celadon-deep)}
366
+ .result-text{color:var(--ink-soft);font-size:var(--fs-sm);line-height:2.2;letter-spacing:.04em;margin-top:.5rem}
367
+ /* AI 解读正文用标准系统字体(易读性),其余界面保持宋式 */
368
+ .report-view, .report-view p, .report-view li, .report-view h3,
369
+ .result-text, .result-text p, .result-text li{
370
+ font-family:system-ui,-apple-system,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
371
+ }
372
+ .result-text strong{color:var(--ink);font-weight:600}
373
+ .result-text .tag-hot{color:var(--cinnabar);font-weight:500}
374
+ .result-text .tag-cool{color:var(--celadon-deep);font-weight:500}
375
+ .result-text p+p{margin-top:.6rem}
376
+
377
+ /* 五行色 */
378
+ .wx-fire{color:var(--cinnabar)} .wx-wood{color:#5E7A4E}
379
+ .wx-water{color:#3E5F7A} .wx-metal{color:#8C7A4E}
380
+ .wx-earth{color:#7A6A4A}
381
+
382
+ /* ============ 免责声明 ============ */
383
+ .disclaimer{
384
+ margin-top:var(--sp-5);
385
+ display:flex;gap:1rem;align-items:flex-start;
386
+ padding:var(--sp-3);
387
+ background:var(--cinnabar-tint);
388
+ border:1px solid rgba(165,64,45,.25);
389
+ border-radius:var(--r-md);
390
+ font-size:var(--fs-sm);color:#7A3B2C;line-height:2;
391
+ }
392
+ .disclaimer .seal-mini{
393
+ flex-shrink:0;font-family:var(--font-kai);color:var(--cinnabar);
394
+ border:1px solid var(--cinnabar);padding:.3rem .4rem;font-size:.7rem;
395
+ letter-spacing:.2em;border-radius:2px;margin-top:.15rem;
396
+ }
397
+ .disclaimer strong{color:var(--cinnabar-deep)}
398
+
399
+ /* ============ Footer ============ */
400
+ .site-foot{border-top:1px solid var(--line-soft);padding:var(--sp-5) 0 var(--sp-4);margin-top:var(--sp-6)}
401
+ .foot-inner{display:flex;justify-content:space-between;align-items:center;gap:var(--sp-3);flex-wrap:wrap}
402
+ .foot-brand{display:flex;align-items:center;gap:.8rem;font-family:var(--font-kai);letter-spacing:.3em;color:var(--ink-soft)}
403
+ .foot-brand .seal{color:var(--cinnabar);border:1.5px solid var(--cinnabar);padding:.24rem .3rem;font-size:.66rem;border-radius:2px}
404
+ .foot-meta{font-size:var(--fs-xs);color:var(--ink-faint);letter-spacing:.1em;line-height:2}
405
+
406
+ /* ============ 通用工具 ============ */
407
+ .pill{display:inline-block;padding:.15rem .7rem;border:1px solid var(--line);border-radius:99px;font-size:var(--fs-xs);color:var(--ink-soft);letter-spacing:.15em;margin:.15rem .3rem .15rem 0;background:rgba(251,249,243,.5)}
408
+ .pill.hot{color:var(--cinnabar);border-color:rgba(165,64,45,.35)}
409
+ .pill.cool{color:var(--celadon-deep);border-color:rgba(95,118,96,.35)}
410
+ .center{text-align:center}
411
+ .mt-1{margin-top:var(--sp-1)}.mt-2{margin-top:var(--sp-2)}.mt-3{margin-top:var(--sp-3)}.mt-4{margin-top:var(--sp-4)}.mt-5{margin-top:var(--sp-5)}
412
+ .small{font-size:var(--fs-sm)}.tiny{font-size:var(--fs-xs)}
413
+ .cinnabar{color:var(--cinnabar)}.celadon{color:var(--celadon-deep)}.muted{color:var(--ink-faint)}
414
+
415
+ /* 呼吸淡入 */
416
+ .fade-up{animation:fadeUp 1s var(--ease-out) both}
417
+ @keyframes fadeUp{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
418
+ .delay-1{animation-delay:.12s}.delay-2{animation-delay:.24s}.delay-3{animation-delay:.36s}
419
+
420
+ /* 禅意分隔 */
421
+ .separator{display:flex;align-items:center;gap:1rem;color:var(--ink-faint);font-size:var(--fs-xs);letter-spacing:.5em;margin:var(--sp-4) 0}
422
+ .separator::before,.separator::after{content:"";flex:1;height:1px;background:var(--line-soft)}
423
+
424
+ /* 返回链接 */
425
+ .back-link{
426
+ display:inline-flex;align-items:center;gap:.5rem;
427
+ font-size:var(--fs-sm);letter-spacing:.2em;color:var(--ink-faint);
428
+ transition:color var(--dur-fast);margin-bottom:var(--sp-3);
429
+ }
430
+ .back-link:hover{color:var(--cinnabar)}
431
+
432
+ /* ============ 响应式细节 ============ */
433
+ @media (max-width:760px){
434
+ .hero-vert{display:none}
435
+ .art-card{min-height:200px}
436
+ .brand .sub{display:none}
437
+ .module-title-row{flex-direction:column;align-items:flex-start;gap:.6rem}
438
+ .nav-links{gap:.6rem}
439
+ }
440
+ @media (prefers-reduced-motion: reduce){
441
+ *{animation-duration:.01ms !important;transition-duration:.01ms !important;scroll-behavior:auto !important}
442
+ }
443
+
444
+ /* ============ 各术专属可视化(第三步) ============ */
445
+ /* 铜钱 */
446
+ .coins{display:flex;gap:1rem;justify-content:center;flex-wrap:wrap}
447
+ .coin{
448
+ width:74px;height:74px;border-radius:50%;
449
+ background:radial-gradient(circle at 32% 28%, #D8C9A0, #A8905E 60%, #8A7448);
450
+ border:3px solid #6E5B38;
451
+ box-shadow:inset 0 -6px 12px rgba(60,45,20,.4), inset 0 4px 8px rgba(255,250,220,.5), 0 6px 14px rgba(55,52,44,.25);
452
+ display:flex;align-items:center;justify-content:center;
453
+ font-family:var(--font-kai);font-size:1.2rem;color:#5C4A26;
454
+ position:relative;
455
+ }
456
+ .coin::before{content:"〒";position:absolute;font-size:2rem;color:rgba(92,74,38,.85)}
457
+ .coin .face{position:relative;z-index:1;text-align:center;line-height:1.15;font-size:.68rem;letter-spacing:.05em}
458
+
459
+ /* 爻线 */
460
+ .yao-row{display:flex;align-items:center;gap:1rem;justify-content:center;padding:.55rem 0;border-bottom:1px dotted var(--line-soft)}
461
+ .yao-label{width:3.2rem;font-size:var(--fs-xs);color:var(--ink-faint);letter-spacing:.2em;text-align:right;font-variant-numeric:tabular-nums}
462
+ .yao-glyph{font-size:2rem;line-height:1;letter-spacing:.2em}
463
+ .yao-move{color:var(--cinnabar);font-size:var(--fs-xs);letter-spacing:.2em}
464
+ .yao-move .dot{width:.5rem;height:.5rem;border-radius:50%;background:var(--cinnabar);display:inline-block;margin-left:.3rem}
465
+
466
+ /* 奇门九宫 */
467
+ .qimen-grid{
468
+ display:grid;grid-template-columns:repeat(3,1fr);
469
+ border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden;
470
+ max-width:560px;margin:0 auto;background:var(--paper-deep);
471
+ }
472
+ .qm-cell{
473
+ aspect-ratio:1;border:1px solid var(--line-soft);
474
+ padding:.7rem;position:relative;
475
+ background:linear-gradient(160deg, rgba(251,249,243,.7), rgba(237,232,217,.5));
476
+ }
477
+ .qm-cell .qm-name{font-family:var(--font-kai);font-size:1.05rem;color:var(--celadon-deep);letter-spacing:.15em}
478
+ .qm-cell .qm-items{font-size:.72rem;color:var(--ink-soft);line-height:1.7;letter-spacing:.05em;margin-top:.3rem}
479
+ .qm-cell .qm-star{font-size:.68rem;color:var(--ink-faint)}
480
+
481
+ /* 紫微盘 */
482
+ .ziwei-grid{display:grid;grid-template-columns:repeat(4,1fr);border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden;max-width:640px;margin:0 auto}
483
+ .zw-cell{border:1px solid var(--line-soft);padding:.55rem;min-height:96px;background:rgba(251,249,243,.55)}
484
+ .zw-cell.center{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.2rem;background:var(--paper-deep)}
485
+ .zw-cell .zw-name{font-family:var(--font-kai);font-size:.8rem;color:var(--celadon-deep);letter-spacing:.1em;display:flex;justify-content:space-between}
486
+ .zw-cell .zw-stars{font-size:.62rem;color:var(--ink-soft);line-height:1.8;letter-spacing:.04em}
487
+
488
+ /* 大六壬课盘 */
489
+ .liuren-stage{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:var(--sp-2)}
490
+ .liuren-item{padding:1rem;background:rgba(251,249,243,.55);border:1px solid var(--line-soft);border-radius:var(--r-sm)}
491
+ .liuren-item .k{font-size:var(--fs-xs);color:var(--ink-faint);letter-spacing:.3em}
492
+ .liuren-item .v{font-size:1.2rem;margin-top:.3rem;letter-spacing:.2em;font-family:var(--font-kai)}
493
+
494
+ /* ============ 动态背景(借鉴「青囊」动效 · 宋式淡墨风) ============ */
495
+ /* 墨尘粒子 */
496
+ .motes{position:fixed;inset:0;pointer-events:none;overflow:hidden;z-index:0}
497
+ .mote{
498
+ position:absolute;
499
+ font-family:var(--font-zm);
500
+ color:var(--ink-faint);
501
+ opacity:.20;
502
+ letter-spacing:.1em;
503
+ animation:moteFloat var(--mote-duration,10s) ease-in-out infinite;
504
+ animation-delay:var(--mote-delay,0s);
505
+ user-select:none;
506
+ text-shadow:0 1px 6px rgba(255,255,255,.5);
507
+ }
508
+ @keyframes moteFloat{
509
+ 0%,100%{transform:translateY(0) translateX(0);opacity:.16}
510
+ 50%{transform:translateY(-52px) translateX(var(--mote-drift,-12px));opacity:.34}
511
+ }
512
+
513
+ /* 远山浮动(缓慢呼吸) */
514
+ #mountains{animation:inkDrift 90s ease-in-out infinite alternate}
515
+ @keyframes inkDrift{
516
+ 0%{transform:translateX(0) scale(1)}
517
+ 100%{transform:translateX(-22px) scale(1.03)}
518
+ }
519
+
520
+ /* 云气层(首页 Hero 区域缓慢横移) */
521
+ .mist{
522
+ position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:0;
523
+ }
524
+ .mist::before,.mist::after{
525
+ content:"";position:absolute;top:12%;width:60vw;height:34vh;
526
+ background:radial-gradient(ellipse at center, rgba(150,168,143,.13), transparent 65%);
527
+ filter:blur(10px);
528
+ animation:mistDrift 34s ease-in-out infinite alternate;
529
+ }
530
+ .mist::before{left:-20vw;animation-delay:-8s}
531
+ .mist::after{right:-22vw;top:26%;width:52vw;animation-delay:-20s}
532
+ @keyframes mistDrift{
533
+ 0%{transform:translateX(0)}
534
+ 100%{transform:translateX(9vw)}
535
+ }
536
+
537
+ /* Hero 光晕(青囊 hero-glow 的宋式版) */
538
+ .hero-glow{position:absolute;width:34vw;height:34vw;border-radius:50%;pointer-events:none;filter:blur(60px);opacity:.5;animation:glowBreath 8s ease-in-out infinite}
539
+ .hero-glow--left{left:-8vw;top:-6vw;background:radial-gradient(circle, rgba(150,168,143,.22), transparent 70%)}
540
+ .hero-glow--right{right:-10vw;bottom:-8vw;background:radial-gradient(circle, rgba(124,151,146,.18), transparent 70%);animation-delay:-4s}
541
+ @keyframes glowBreath{0%,100%{opacity:.35;transform:scale(1)}50%{opacity:.6;transform:scale(1.06)}}
542
+
543
+ @media (prefers-reduced-motion: reduce){
544
+ .mote,#mountains,.mist::before,.mist::after,.hero-glow{animation:none !important}
545
+ }
546
+
547
+ /* ============ 塔罗(第五步) ============ */
548
+ .tarot-stage{display:flex;justify-content:center;padding:var(--sp-4) 0;position:relative}
549
+ .tarot-fan{display:flex;justify-content:center;gap:2px;transform:rotate(-4deg)}
550
+ .tarot-card{
551
+ width:96px;height:156px;flex-shrink:0;
552
+ background:linear-gradient(160deg, #F7F2E4, #E6DCBE 70%, #D6C9A4);
553
+ border:1px solid #C9B98F;border-radius:6px;
554
+ box-shadow:0 8px 20px -10px rgba(55,52,44,.4), inset 0 0 0 4px rgba(201,185,143,.35);
555
+ display:flex;align-items:center;justify-content:center;
556
+ cursor:pointer;transition:transform var(--dur-mid) var(--ease-out);
557
+ position:relative;
558
+ }
559
+ .tarot-card::before{
560
+ content:"✦";font-size:1.4rem;color:#A58D5E;
561
+ }
562
+ .tarot-card:hover{transform:translateY(-10px) rotate(0)}
563
+ .tarot-card.picked{transform:translateY(-14px) rotate(0)}
564
+ .tarot-card .card-inner{
565
+ position:absolute;inset:0;padding:.5rem;
566
+ display:flex;flex-direction:column;align-items:center;justify-content:space-between;
567
+ background:linear-gradient(170deg,#FDFAF1,#EFE6CC);
568
+ border-radius:5px;
569
+ opacity:0;transition:opacity var(--dur-mid);
570
+ }
571
+ .tarot-card.revealed .card-inner{opacity:1}
572
+ .card-inner .cn{font-family:var(--font-kai);font-size:1.05rem;color:var(--ink);letter-spacing:.1em}
573
+ .card-inner .en{font-size:.52rem;color:var(--ink-faint);letter-spacing:.14em}
574
+ .card-inner .sigil{font-size:1.6rem;color:var(--cinnabar)}
575
+
576
+ /* ============ UI 优化批次(第六轮) ============ */
577
+ /* U1:按钮文字置于色块之上(::before transform 会创建层叠上下文) */
578
+ .btn-seal::before{z-index:0}
579
+ .btn-seal > *{position:relative;z-index:1}
580
+ .btn-seal:hover > *{color:var(--paper)}
581
+ .btn-seal.btn-ghost:hover > *{color:var(--paper)}
582
+
583
+ /* U2:韵脚暗纹(右侧竖排淡墨字 + 云纹暗纹层) */
584
+ #ink-vein{
585
+ position:fixed;inset:0;pointer-events:none;z-index:-1;overflow:hidden;
586
+ }
587
+ #ink-vein .vein-lines{
588
+ position:absolute;inset:0;opacity:.05;
589
+ background-image:
590
+ repeating-linear-gradient(115deg, transparent 0 38px, rgba(55,52,44,.5) 38px 39px),
591
+ repeating-linear-gradient(25deg, transparent 0 58px, rgba(55,52,44,.35) 58px 59px);
592
+ animation:veinFlow 140s linear infinite;
593
+ }
594
+ @keyframes veinFlow{0%{background-position:0 0,0 0}100%{background-position:120px 60px, -80px 40px}}
595
+ #ink-vein .vein-poem{
596
+ position:absolute;right:1.6rem;top:50%;transform:translateY(-50%);
597
+ writing-mode:vertical-rl;
598
+ font-family:var(--font-kai);font-size:var(--fs-sm);letter-spacing:.9em;
599
+ color:var(--ink-faint);opacity:.34;
600
+ user-select:none;
601
+ animation:poemBreath 9s ease-in-out infinite;
602
+ white-space:nowrap;
603
+ }
604
+ @keyframes poemBreath{0%,100%{opacity:.22}50%{opacity:.42}}
605
+ #ink-vein .vein-seal{
606
+ position:absolute;right:2.2rem;bottom:6.5rem;
607
+ font-family:var(--font-kai);font-size:.6rem;letter-spacing:.2em;
608
+ color:var(--cinnabar);opacity:.4;
609
+ border:1px solid rgba(165,64,45,.5);padding:.3rem .34rem;border-radius:2px;
610
+ animation:poemBreath 7s ease-in-out infinite;animation-delay:-3s;
611
+ }
612
+ @media (max-width:860px){#ink-vein .vein-poem,#ink-vein .vein-seal{display:none}}
613
+
614
+ /* U3:二级菜单(首页 hover 展开) */
615
+ .has-sub{position:relative}
616
+ .sub-menu{
617
+ position:absolute;top:calc(100% + .4rem);left:50%;transform:translateX(-50%) translateY(-6px);
618
+ min-width:9.5rem;padding:.5rem 0;
619
+ background:var(--white-paper);border:1px solid var(--line);border-radius:var(--r-md);
620
+ box-shadow:var(--shadow-paper);
621
+ opacity:0;visibility:hidden;transition:all var(--dur-mid) var(--ease-out);
622
+ z-index:60;
623
+ }
624
+ .has-sub:hover .sub-menu,.has-sub:focus-within .sub-menu{opacity:1;visibility:visible;transform:translateX(-50%) translateY(0)}
625
+ .sub-menu a{display:block;padding:.42rem 1.2rem;font-size:var(--fs-sm);letter-spacing:.2em;color:var(--ink-soft);text-align:left;white-space:nowrap}
626
+ .sub-menu a:hover{color:var(--cinnabar);background:var(--cinnabar-tint)}
627
+
628
+ /* U5:自定义下拉(SongSelect) */
629
+ .song-select{position:relative;width:100%}
630
+ .song-select .trigger{
631
+ width:100%;padding:.6rem .8rem;display:flex;align-items:center;justify-content:space-between;gap:.6rem;
632
+ background:rgba(251,249,243,.6);border:1px solid var(--line);border-radius:var(--r-sm);
633
+ font-size:var(--fs-base);color:var(--ink);cursor:pointer;text-align:left;
634
+ transition:border-color var(--dur-fast), box-shadow var(--dur-fast);
635
+ }
636
+ .song-select .trigger:hover{border-color:var(--celadon)}
637
+ .song-select.open .trigger{border-color:var(--celadon-deep);box-shadow:0 0 0 3px rgba(95,118,96,.12)}
638
+ .song-select .trigger::after{
639
+ content:'';width:7px;height:7px;flex-shrink:0;
640
+ border-right:1.5px solid var(--ink-soft);border-bottom:1.5px solid var(--ink-soft);
641
+ transform:rotate(45deg) translateY(-2px);transition:transform var(--dur-fast);
642
+ }
643
+ .song-select.open .trigger::after{transform:rotate(225deg) translateY(1px)}
644
+ .song-select .panel{
645
+ position:absolute;top:calc(100% + .35rem);left:0;right:0;max-height:240px;overflow-y:auto;
646
+ background:var(--white-paper);border:1px solid var(--line);border-radius:var(--r-md);
647
+ box-shadow:var(--shadow-paper);z-index:70;padding:.35rem 0;
648
+ animation:viewIn .25s var(--ease-out) both;
649
+ }
650
+ .song-select .panel button{
651
+ display:block;width:100%;padding:.5rem .9rem;text-align:left;
652
+ font-size:var(--fs-sm);letter-spacing:.1em;color:var(--ink-soft);
653
+ transition:background var(--dur-fast),color var(--dur-fast);
654
+ }
655
+ .song-select .panel button:hover{background:var(--celadon-tint);color:var(--ink)}
656
+ .song-select .panel button.sel{color:var(--celadon-deep);font-weight:600}
657
+ .song-select .panel button.sel::before{content:'◆ ';font-size:.62rem}
658
+
659
+ /* U5:自定义确认弹窗(SongDialog) */
660
+ .song-dialog-mask{
661
+ position:fixed;inset:0;background:rgba(55,52,44,.35);backdrop-filter:blur(2px);
662
+ display:flex;align-items:center;justify-content:center;z-index:200;
663
+ animation:fadeUp .3s var(--ease-out) both;
664
+ }
665
+ .song-dialog{
666
+ width:min(420px,90vw);padding:var(--sp-4);
667
+ background:linear-gradient(175deg,var(--white-paper),var(--paper-deep));
668
+ border:1px solid var(--line);border-radius:var(--r-lg);
669
+ box-shadow:var(--shadow-paper);
670
+ animation:viewIn .35s var(--ease-out) both;
671
+ }
672
+ .song-dialog .dlg-title{font-family:var(--font-kai);font-size:1.15rem;letter-spacing:.25em;color:var(--ink);display:flex;align-items:center;gap:.6rem;padding-bottom:var(--sp-2);border-bottom:1px solid var(--line-soft);margin-bottom:var(--sp-3)}
673
+ .song-dialog .dlg-title::before{content:'❖';color:var(--cinnabar);font-size:.9rem}
674
+ .song-dialog .dlg-body{color:var(--ink-soft);font-size:var(--fs-sm);line-height:2.1;letter-spacing:.05em}
675
+ .song-dialog .dlg-actions{display:flex;gap:.8rem;justify-content:flex-end;margin-top:var(--sp-4)}
676
+
677
+ /* U8:凝神动画(起占时) */
678
+ .casting-glyph{animation:castSpin 2.4s var(--ease-ink) infinite}
679
+ @keyframes castSpin{0%{transform:rotate(0) scale(1);opacity:.7}50%{transform:rotate(180deg) scale(1.08);opacity:1}100%{transform:rotate(360deg) scale(1);opacity:.7}}
680
+ .casting-ring{
681
+ position:relative;width:4.4rem;height:4.4rem;border-radius:50%;margin:0 auto .8rem;
682
+ border:1px dashed var(--celadon);
683
+ animation:ringExpand 2.4s var(--ease-ink) infinite;
684
+ }
685
+ @keyframes ringExpand{0%{transform:scale(.75);opacity:.5}50%{transform:scale(1);opacity:1}100%{transform:scale(.75);opacity:.5}}
686
+
687
+ /* U8:结果卡 stagger 入场 */
688
+ .stagger > *{animation:fadeUp .7s var(--ease-out) both}
689
+ .stagger > *:nth-child(1){animation-delay:.05s}
690
+ .stagger > *:nth-child(2){animation-delay:.16s}
691
+ .stagger > *:nth-child(3){animation-delay:.27s}
692
+ .stagger > *:nth-child(4){animation-delay:.38s}
693
+ .stagger > *:nth-child(5){animation-delay:.49s}
694
+
695
+ /* U6:四柱盘(八字竖盘) */
696
+ .bazi-pan{
697
+ display:grid;grid-template-columns:repeat(4,1fr);gap:var(--sp-2);
698
+ max-width:640px;margin:0 auto;
699
+ }
700
+ .bz-pillar{
701
+ background:rgba(251,249,243,.55);border:1px solid var(--line-soft);border-radius:var(--r-sm);
702
+ padding:.9rem .5rem;text-align:center;position:relative;overflow:hidden;
703
+ transition:border-color var(--dur-mid),transform var(--dur-mid);
704
+ }
705
+ .bz-pillar:hover{border-color:var(--celadon);transform:translateY(-2px)}
706
+ .bz-pillar .p-name{font-size:var(--fs-xs);color:var(--ink-faint);letter-spacing:.3em;margin-bottom:.5rem}
707
+ .bz-pillar .p-gan{font-family:var(--font-kai);font-size:2rem;line-height:1.15;display:block}
708
+ .bz-pillar .p-zhi{font-family:var(--font-kai);font-size:2rem;line-height:1.15;display:block;margin-top:.15rem}
709
+ .bz-pillar .p-wx{font-size:var(--fs-xs);margin-top:.4rem;letter-spacing:.2em}
710
+ .bz-pillar .p-shishen{font-size:var(--fs-xs);color:var(--celadon-deep);margin-top:.2rem;letter-spacing:.1em}
711
+ .bz-pillar .p-nayin{font-size:.62rem;color:var(--ink-faint);margin-top:.3rem;letter-spacing:.08em;border-top:1px dotted var(--line-soft);padding-top:.35rem}
712
+ .bz-pillar.day-pillar{border-color:var(--cinnabar);background:linear-gradient(175deg,rgba(243,227,220,.5),rgba(251,249,243,.6));box-shadow:0 0 0 1px rgba(165,64,45,.15)}
713
+ .bz-pillar.day-pillar .p-name{color:var(--cinnabar)}
714
+ .bz-pillar .p-zhu{
715
+ position:absolute;top:.35rem;right:.5rem;
716
+ font-size:.6rem;color:var(--ink-faint);letter-spacing:.15em;
717
+ }
718
+
719
+ /* U7:紫微盘优化 */
720
+ .zw-cell{transition:background var(--dur-mid),box-shadow var(--dur-mid)}
721
+ .zw-cell.ming-cell{background:linear-gradient(175deg,rgba(243,227,220,.55),rgba(251,249,243,.5));box-shadow:inset 0 0 0 1px rgba(165,64,45,.25)}
722
+ .zw-cell .zw-stars .star-name{display:inline-block;padding:.06rem .22rem;border-radius:2px;margin-right:.14rem}
723
+ .zw-cell .zw-stars .star-name.star-hot{color:var(--cinnabar);background:rgba(165,64,45,.08)}
724
+ .zw-cell .zw-stars .star-name.star-cool{color:var(--celadon-deep);background:rgba(95,118,96,.08)}
725
+
726
+ /* U4:塔罗牌阵位置标签 */
727
+ .tarot-slot{display:flex;flex-direction:column;align-items:center;gap:.5rem}
728
+ .tarot-slot .slot-label{font-size:var(--fs-xs);color:var(--ink-faint);letter-spacing:.25em;text-align:center;max-width:110px;line-height:1.6}
729
+ .tarot-fan .tarot-card.face-down::after{
730
+ content:'';position:absolute;inset:6px;border:1px solid rgba(165,92,62,.35);border-radius:3px;
731
+ }
732
+
733
+ @media (prefers-reduced-motion: reduce){
734
+ #ink-vein .vein-lines,#ink-vein .vein-poem,.casting-glyph,.casting-ring{animation:none !important}
735
+ }
736
+
737
+ /* F1:按钮 hover 修复(最终方案)——
738
+ ::before 移入按钮层叠上下文之下,文字永远在色块之上 */
739
+ .btn-seal{isolation:isolate}
740
+ .btn-seal::before{z-index:-1;transform-origin:top}
741
+ .btn-seal:hover{color:var(--paper)}
742
+ .btn-seal .sb-label{position:relative;z-index:1}
743
+ .btn-seal:hover .sb-label{color:var(--paper)}
744
+
745
+ /* F2/F5:九术分类下拉 + 用户档案菜单样式 */
746
+ .arts-sub{padding:.6rem .4rem .8rem}
747
+ .sub-group{margin-bottom:.3rem}
748
+ .sub-group-name{
749
+ font-size:.62rem;letter-spacing:.35em;color:var(--ink-faint);
750
+ padding:.35rem .9rem .2rem;border-bottom:1px dotted var(--line-soft);margin-bottom:.2rem;
751
+ }
752
+ .sub-group a{display:flex;align-items:baseline;gap:.55rem;font-size:var(--fs-sm);letter-spacing:.18em;color:var(--ink-soft);padding:.4rem .9rem;border-radius:var(--r-sm)}
753
+ .sub-group a:hover{color:var(--cinnabar);background:var(--cinnabar-tint)}
754
+ .sub-group .sub-glyph{font-family:var(--font-zm);color:var(--celadon-deep);font-size:.95rem}
755
+ .sub-group .sub-poem{margin-left:auto;font-size:.6rem;color:var(--ink-faint);letter-spacing:.1em;white-space:nowrap}
756
+
757
+ .user-menu .user-chip{
758
+ display:flex;align-items:center;gap:.45rem;
759
+ padding:.28rem .7rem .28rem .32rem;
760
+ border:1px solid var(--line);border-radius:99px;
761
+ background:rgba(251,249,243,.7);
762
+ cursor:pointer;transition:border-color var(--dur-fast),box-shadow var(--dur-fast);
763
+ }
764
+ .user-menu .user-chip:hover{border-color:var(--celadon);box-shadow:0 0 0 3px rgba(95,118,96,.1)}
765
+ .user-menu .user-seal{
766
+ width:1.7rem;height:1.7rem;border-radius:50%;
767
+ display:flex;align-items:center;justify-content:center;
768
+ background:var(--celadon-deep);color:var(--paper);
769
+ font-family:var(--font-kai);font-size:.85rem;
770
+ flex-shrink:0;
771
+ }
772
+ .user-menu .user-name{font-size:var(--fs-sm);letter-spacing:.12em;color:var(--ink);max-width:5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
773
+ .user-menu .user-caret{font-size:.62rem;color:var(--ink-faint)}
774
+ .user-menu .sub-menu a{padding:.5rem 1.2rem}
775
+
776
+ /* F3:首页左侧锚点目录 */
777
+ .side-anchor{
778
+ position:fixed;left:1.4rem;top:50%;transform:translateY(-50%);
779
+ display:flex;flex-direction:column;gap:.9rem;z-index:30;
780
+ }
781
+ .side-anchor button{
782
+ display:flex;align-items:center;gap:.5rem;
783
+ font-size:var(--fs-xs);letter-spacing:.25em;color:var(--ink-faint);
784
+ writing-mode:vertical-rl;
785
+ transition:color var(--dur-fast);cursor:pointer;padding:.15rem 0;
786
+ }
787
+ .side-anchor .dot{width:5px;height:5px;border-radius:50%;background:currentColor;opacity:.5;flex-shrink:0}
788
+ .side-anchor button:hover{color:var(--ink)}
789
+ .side-anchor button.active{color:var(--cinnabar)}
790
+ .side-anchor button.active .dot{opacity:1;box-shadow:0 0 0 3px rgba(165,64,45,.15)}
791
+ @media (max-width:1100px){.side-anchor{display:none}}
792
+
793
+ /* F8:可搜索下拉 */
794
+ .song-search .panel{width:100%}
795
+ .song-search .ss-search{padding:.5rem .7rem .35rem}
796
+ .song-search .ss-input{
797
+ width:100%;padding:.42rem .6rem;
798
+ background:rgba(251,249,243,.8);border:1px solid var(--line);border-radius:var(--r-sm);
799
+ font-size:var(--fs-sm);
800
+ }
801
+ .song-search .ss-input:focus{outline:none;border-color:var(--celadon-deep)}
802
+ .song-search .ss-list{max-height:220px;overflow-y:auto;padding:.2rem 0}
803
+ .song-search .ss-empty{padding:.8rem;text-align:center;color:var(--ink-faint);font-size:var(--fs-xs);letter-spacing:.2em}
804
+
805
+ /* G2:下拉 SVG 箭头与对齐修正 */
806
+ .song-select .trigger::after{display:none}
807
+ .song-select .trigger .chev{flex-shrink:0;color:var(--ink-faint);transition:transform var(--dur-fast)}
808
+ .song-select.open .trigger .chev{transform:rotate(180deg);color:var(--celadon-deep)}
809
+ .song-select .trigger{line-height:1.6}
810
+ .song-select .panel{left:0;right:0}
811
+ /* 用户菜单子菜单对齐 */
812
+ .user-menu .sub-menu{right:0;left:auto;transform:none;min-width:8.5rem}
813
+ .user-menu:hover .sub-menu{transform:none}
814
+
815
+ /* G4:日历输入 */
816
+ .cal-input{position:relative}
817
+ .cal-field{display:flex;gap:.4rem;align-items:center}
818
+ .cal-field .input-line{flex:1}
819
+ .cal-field input.cal-error{border-color:var(--cinnabar)}
820
+ .cal-toggle{
821
+ display:flex;align-items:center;justify-content:center;
822
+ width:2.3rem;height:2.3rem;flex-shrink:0;
823
+ border:1px solid var(--line);border-radius:var(--r-sm);
824
+ background:rgba(251,249,243,.6);color:var(--ink-soft);cursor:pointer;
825
+ transition:border-color var(--dur-fast),color var(--dur-fast);
826
+ }
827
+ .cal-toggle:hover{border-color:var(--celadon);color:var(--celadon-deep)}
828
+ .cal-panel{
829
+ position:absolute;top:calc(100% + .35rem);left:0;z-index:70;
830
+ width:min(290px,90vw);padding:.7rem;
831
+ background:var(--white-paper);border:1px solid var(--line);border-radius:var(--r-md);
832
+ box-shadow:var(--shadow-paper);animation:viewIn .25s var(--ease-out) both;
833
+ }
834
+ .cal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:.5rem}
835
+ .cal-title{font-family:var(--font-kai);font-size:.95rem;letter-spacing:.15em;color:var(--ink)}
836
+ .cal-nav{display:flex;padding:.25rem;color:var(--ink-faint);cursor:pointer;border-radius:var(--r-sm)}
837
+ .cal-nav:hover{color:var(--cinnabar);background:var(--cinnabar-tint)}
838
+ .cal-week{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;font-size:.62rem;color:var(--ink-faint);letter-spacing:.1em;margin-bottom:.2rem}
839
+ .cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
840
+ .cal-grid button{
841
+ aspect-ratio:1;display:flex;align-items:center;justify-content:center;
842
+ font-size:var(--fs-sm);color:var(--ink-soft);border-radius:var(--r-sm);cursor:pointer;
843
+ transition:background var(--dur-fast),color var(--dur-fast);
844
+ }
845
+ .cal-grid button:hover{background:var(--celadon-tint);color:var(--ink)}
846
+ .cal-grid button.sel{background:var(--celadon-deep);color:var(--paper);font-weight:600}
847
+
848
+ /* G5:自定义输入项 */
849
+ .song-search .ss-custom{
850
+ width:100%;padding:.6rem .9rem;text-align:center;
851
+ font-size:var(--fs-sm);color:var(--celadon-deep);letter-spacing:.1em;
852
+ cursor:pointer;
853
+ }
854
+ .song-search .ss-custom:hover{background:var(--celadon-tint)}
855
+
856
+ /* ============ 第七轮修复:图标/折行/滚动 ============ */
857
+ /* 任务3:下拉箭头统一 16px 加粗,各处图标尺寸归一 */
858
+ .song-select .trigger .chev{width:16px;height:16px;stroke-width:2.4}
859
+ .song-search .trigger .chev{width:16px;height:16px;stroke-width:2.4}
860
+ .nav-links .has-sub > a .chev-mini{width:14px;height:14px;stroke-width:2.2;vertical-align:-2px}
861
+ .user-menu .user-caret{display:inline-flex;width:14px;height:14px}
862
+ .user-menu .user-caret svg{width:14px;height:14px;stroke-width:2.2}
863
+
864
+ /* 任务4:下拉选项不折行 + 时辰选项加宽 */
865
+ .song-select .panel button{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
866
+ .song-select .trigger span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
867
+ .song-select{min-width:0}
868
+ .song-select .trigger{min-height:2.55rem}
869
+ .song-select .panel{min-width:100%;width:max-content;max-width:16rem}
870
+ /* 时辰专用:三列时辰面板可更宽(12 个选项) */
871
+ .song-select .panel button{font-size:var(--fs-sm)}
872
+
873
+ /* 任务5:占卜工作台左侧面板滚动优化(长面板自身滚动,不再撑破视口) */
874
+ .altar-panel{
875
+ position:sticky;top:84px;
876
+ max-height:calc(100vh - 108px);
877
+ overflow-y:auto;
878
+ scrollbar-width:thin;
879
+ }
880
+ .altar-panel::-webkit-scrollbar{width:4px}
881
+ .altar-panel::-webkit-scrollbar-thumb{background:var(--celadon);border-radius:2px}
882
+ @media (max-width:960px){.altar-panel{position:static;max-height:none;overflow:visible}}
883
+ /* 结果区留出呼吸空间 */
884
+ .altar-result{padding-bottom:var(--sp-2)}
885
+
886
+ /* 任务6:竹影装饰 */
887
+ .bamboo-art{position:absolute;right:1rem;top:50%;transform:translateY(-50%);width:min(300px,30vw);pointer-events:none;opacity:.85}
888
+ .bamboo-art svg{width:100%;height:auto;filter:drop-shadow(0 6px 18px rgba(95,118,96,.12))}
889
+ .page-decor{position:relative}
890
+ .page-decor .wrap{position:relative;z-index:1}
891
+ @media (max-width:900px){.bamboo-art{display:none}}
892
+
893
+ /* A5:导航不换行 + A6 对齐系列 */
894
+ .nav-links a{white-space:nowrap}
895
+ .nav-links .has-sub > a{display:inline-flex;align-items:center;gap:.28rem}
896
+ .nav-links .has-sub > a .chev-mini{flex-shrink:0}
897
+
898
+ /* 塔罗牌对齐(去掉扇形倾斜,垂直对齐) */
899
+ .tarot-fan{transform:none;align-items:flex-start;gap:.9rem}
900
+ .tarot-slot{width:104px}
901
+ .tarot-slot .tarot-card{margin:0 auto}
902
+ .tarot-slot .slot-label{min-height:2.6em;display:flex;align-items:flex-start;justify-content:center}
903
+ .tarot-stage .tarot-fan.wrap-fan{max-width:640px}
904
+
905
+ /* 档案页按钮对齐 */
906
+ .center-actions{display:flex;gap:.8rem;justify-content:center;align-items:center;flex-wrap:wrap}
907
+
908
+ /* 首页黄历/星运卡片等高 */
909
+ .today-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-4);align-items:stretch}
910
+ .today-grid .result-card{display:flex;flex-direction:column;margin-bottom:0;min-height:220px}
911
+ .today-grid .result-card .result-text{flex:1}
912
+ @media (max-width:860px){.today-grid{grid-template-columns:1fr}}
913
+
914
+ /* A8:首屏滚动引导(下滑渐隐,回顶重现) */
915
+ .scroll-hint{transition:opacity .6s var(--ease-out),visibility .6s}
916
+ .scroll-hint.hidden{opacity:0;visibility:hidden}
917
+
918
+ /* A2:紫微十二宫概览 */
919
+ .zw-palace-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:var(--sp-2);margin-top:var(--sp-3)}
920
+ .zw-palace-cell{
921
+ padding:.7rem .8rem;background:rgba(251,249,243,.55);border:1px solid var(--line-soft);
922
+ border-radius:var(--r-sm);transition:border-color var(--dur-mid),background var(--dur-mid);
923
+ }
924
+ .zw-palace-cell:hover{border-color:var(--celadon)}
925
+ .zw-palace-cell.is-ming{background:linear-gradient(175deg,rgba(243,227,220,.55),rgba(251,249,243,.5));border-color:rgba(165,64,45,.35)}
926
+ .zw-palace-cell.empty{opacity:.55}
927
+ .zp-head{display:flex;align-items:baseline;gap:.4rem;border-bottom:1px dotted var(--line-soft);padding-bottom:.3rem;margin-bottom:.35rem}
928
+ .zp-name{font-family:var(--font-kai);font-size:.92rem;color:var(--celadon-deep);letter-spacing:.12em}
929
+ .zp-zhi{font-size:.66rem;color:var(--ink-faint)}
930
+ .zp-ming{margin-left:auto;font-size:.6rem;color:var(--cinnabar);border:1px solid rgba(165,64,45,.4);padding:0 .3rem;border-radius:2px}
931
+ .zp-stars{font-size:.72rem;color:var(--ink-soft);line-height:1.7;letter-spacing:.06em;min-height:1.7em}
932
+ .zp-theme{font-size:.62rem;color:var(--ink-faint);letter-spacing:.15em;margin-top:.2rem}
933
+
934
+ /* 滚动引导(横排 · 靠下 · 不重叠) */
935
+ .hero{padding-bottom:calc(var(--sp-6) + 2.2rem)}
936
+ .scroll-hint{
937
+ position:absolute;bottom:1.1rem;left:50%;transform:translateX(-50%);
938
+ display:flex;align-items:center;gap:.55rem;
939
+ font-size:var(--fs-xs);letter-spacing:.35em;color:var(--ink-faint);
940
+ writing-mode:horizontal-tb;
941
+ animation:floatHintX 3s var(--ease-ink) infinite;
942
+ z-index:2;
943
+ }
944
+ .scroll-hint svg{width:14px;height:14px;animation:hintBounce 1.6s ease-in-out infinite}
945
+ @keyframes floatHintX{0%,100%{transform:translateX(-50%) translateY(0)}50%{transform:translateX(-50%) translateY(7px)}}
946
+ @keyframes hintBounce{0%,100%{transform:translateY(0)}50%{transform:translateY(3px)}}
947
+ .scroll-hint.hidden{opacity:0;visibility:hidden}
948
+ /* Z4:按钮组统一对齐 */
949
+ .btn-row{display:flex;gap:.8rem;align-items:center;flex-wrap:wrap}
950
+ .btn-row .btn-seal,.btn-row a.btn-seal{display:inline-flex;align-items:center;justify-content:center}
951
+ /* 各处按钮组统一 */
952
+ .dlg-actions{align-items:center}
953
+ .center-actions{align-items:center}
954
+
955
+ /* R3:报告结构化展示 */
956
+ .report-list{margin:0;padding-left:1.2rem;color:var(--ink-soft);font-size:var(--fs-sm);line-height:2.1;letter-spacing:.04em}
957
+ .report-list li::marker{color:var(--celadon-deep)}
958
+ .trait-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:var(--sp-2)}
959
+ .trait-cell{padding:.9rem;background:rgba(251,249,243,.55);border:1px solid var(--line-soft);border-radius:var(--r-sm);border-top:2px solid var(--celadon)}
960
+ .trait-name{font-family:var(--font-kai);font-size:.98rem;color:var(--celadon-deep);letter-spacing:.15em;margin-bottom:.3rem}
961
+ .trait-desc{font-size:var(--fs-sm);color:var(--ink-soft);line-height:1.9}
962
+ /* 人生阶段时间线 */
963
+ .timeline{position:relative;padding-left:1.4rem}
964
+ .timeline::before{content:'';position:absolute;left:.32rem;top:.3rem;bottom:.3rem;width:1px;background:var(--line)}
965
+ .tl-item{position:relative;padding-bottom:var(--sp-3)}
966
+ .tl-marker{position:absolute;left:-1.4rem;top:.25rem;width:.66rem;height:.66rem;border-radius:50%;background:var(--paper);border:2px solid var(--celadon-deep);display:flex;align-items:center;justify-content:center}
967
+ .tl-item:first-child .tl-marker{background:var(--celadon-deep)}
968
+ .tl-head{display:flex;align-items:baseline;gap:.6rem}
969
+ .tl-head strong{font-family:var(--font-kai);font-size:.95rem;color:var(--ink);letter-spacing:.12em}
970
+ .tl-age{font-size:var(--fs-xs);color:var(--ink-faint);letter-spacing:.15em}
971
+ .tl-summary{font-size:var(--fs-sm);color:var(--ink-soft);line-height:2;margin-top:.2rem}
972
+ /* 事业爱情财富分栏 */
973
+ .domain-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:var(--sp-2)}
974
+ .domain-cell{padding:.9rem;background:rgba(251,249,243,.55);border:1px solid var(--line-soft);border-radius:var(--r-sm)}
975
+ .domain-name{font-family:var(--font-kai);font-size:.9rem;color:var(--cinnabar);letter-spacing:.25em;margin-bottom:.4rem;border-bottom:1px dotted var(--line-soft);padding-bottom:.3rem}
976
+ .domain-cell p{font-size:var(--fs-sm);color:var(--ink-soft);line-height:1.95;margin-top:.2rem}
977
+
978
+ /* Q4:适问之辨 */
979
+ .fit-note{
980
+ padding:var(--sp-2) var(--sp-3);margin-bottom:var(--sp-3);
981
+ background:var(--rice-tint);border:1px solid rgba(217,205,172,.6);border-left:3px solid var(--rice);
982
+ border-radius:var(--r-md);font-size:var(--fs-sm);color:var(--ink-soft);line-height:2;
983
+ }
984
+ .fit-note strong{color:var(--ink);letter-spacing:.15em}
985
+ .fit-note .fit-suggest{color:var(--cinnabar);margin-top:.3rem}
986
+ .fit-card.fit-partial{border-left-color:var(--rice)}
987
+ .fit-card.fit-bad{border-left-color:var(--cinnabar)}
988
+ .fit-card.fit-ok{border-left-color:var(--celadon)}
989
+
990
+ /* 引导:按钮下方文档流 */
991
+ .scroll-hint.inline-hint{
992
+ position:static;transform:none;
993
+ margin-top:2.2rem;
994
+ writing-mode:horizontal-tb;
995
+ animation:none;
996
+ }
997
+ .scroll-hint.inline-hint svg{width:15px;height:15px;animation:hintBounce 1.6s ease-in-out infinite}
998
+ .hero{padding-bottom:var(--sp-6)}
999
+
1000
+ /* AI 状态反馈 */
1001
+ .ai-streaming{
1002
+ border:1px dashed var(--celadon);border-radius:var(--r-md);padding:var(--sp-3);
1003
+ background:rgba(227,232,220,.25);
1004
+ }
1005
+ .ai-stream-head{display:flex;align-items:center;gap:.6rem}
1006
+ .ai-spinner{
1007
+ width:15px;height:15px;border-radius:50%;flex-shrink:0;
1008
+ border:2px solid var(--celadon);border-top-color:transparent;
1009
+ animation:castSpin 1s linear infinite;
1010
+ }
1011
+ .ai-stream-body{
1012
+ margin-top:.7rem;max-height:260px;overflow-y:auto;
1013
+ padding:.6rem .8rem;background:rgba(251,249,243,.7);border-radius:var(--r-sm);
1014
+ scrollbar-width:thin;
1015
+ }
1016
+ .ai-error{
1017
+ border:1px solid rgba(165,64,45,.3);border-radius:var(--r-md);padding:var(--sp-3);
1018
+ background:rgba(243,227,220,.3);
1019
+ }
1020
+
1021
+ /* 精确时刻 + 时辰徽章 */
1022
+ .shichen-chip{
1023
+ display:inline-flex;align-items:center;justify-content:center;
1024
+ padding:.4rem .9rem;flex-shrink:0;white-space:nowrap;
1025
+ background:var(--celadon-tint);border:1px solid var(--celadon);border-radius:var(--r-sm);
1026
+ font-size:var(--fs-xs);color:var(--celadon-deep);letter-spacing:.15em;
1027
+ }
1028
+
1029
+ /* 档案卡片 */
1030
+ .profile-card{
1031
+ display:flex;align-items:center;gap:1rem;cursor:pointer;
1032
+ padding:1rem 1.2rem;
1033
+ background:linear-gradient(175deg,var(--white-paper),var(--paper-deep));
1034
+ border:1px solid var(--line);border-radius:var(--r-md);
1035
+ transition:border-color var(--dur-mid),box-shadow var(--dur-mid),transform var(--dur-mid);
1036
+ }
1037
+ .profile-card:hover{border-color:var(--celadon);box-shadow:var(--shadow-paper);transform:translateY(-2px)}
1038
+ .profile-card.primary{border-left:3px solid var(--cinnabar)}
1039
+ .pc-badge{
1040
+ flex-shrink:0;width:2rem;height:2rem;border-radius:50%;
1041
+ display:flex;align-items:center;justify-content:center;
1042
+ background:var(--cinnabar);color:var(--paper);font-family:var(--font-kai);font-size:.85rem;
1043
+ }
1044
+ .pc-badge.sample{background:var(--celadon-deep)}
1045
+ .pc-body{flex:1;min-width:0}
1046
+ .pc-title{font-family:var(--font-kai);font-size:.98rem;color:var(--ink);letter-spacing:.12em;margin-bottom:.2rem}
1047
+ .pc-info{font-size:var(--fs-xs);color:var(--ink-faint);letter-spacing:.06em;line-height:1.8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
1048
+ .pc-action{flex-shrink:0;font-size:var(--fs-xs);color:var(--celadon-deep);letter-spacing:.2em}
1049
+
1050
+ /* 紧凑模块头部(九术内容页效率优化) */
1051
+ .module-hero.compact{padding:var(--sp-3) 0 var(--sp-2)}
1052
+ .mh-row{display:flex;align-items:baseline;gap:1.2rem;flex-wrap:wrap}
1053
+ .mh-row .back-link{margin-bottom:0;flex-shrink:0}
1054
+ .mh-row .module-title{margin-top:0;font-size:var(--fs-xl);display:flex;align-items:baseline;gap:.9rem;letter-spacing:.14em}
1055
+ .mh-row .module-title .cn{font-size:clamp(1.5rem,3vw,2.2rem);display:inline}
1056
+ .mh-row .mh-sub{font-family:var(--font-kai);font-size:var(--fs-sm);color:var(--ink-faint);letter-spacing:.25em;white-space:nowrap}
1057
+ .mh-row .mh-kicker{margin-left:auto;font-size:var(--fs-xs);letter-spacing:.3em;color:var(--ink-faint);white-space:nowrap}
1058
+ @media (max-width:640px){.mh-row .mh-kicker{white-space:normal;letter-spacing:.15em;line-height:1.6;max-width:16em;text-align:right}}
1059
+ .mh-intro{margin-top:.4rem;max-width:72ch}
1060
+ .mh-intro summary{
1061
+ cursor:pointer;font-size:var(--fs-xs);letter-spacing:.25em;color:var(--celadon-deep);
1062
+ list-style:none;display:inline-flex;align-items:center;gap:.4rem;user-select:none;
1063
+ }
1064
+ .mh-intro summary::before{content:'▸';font-size:.7rem;transition:transform var(--dur-fast)}
1065
+ .mh-intro[open] summary::before{transform:rotate(90deg)}
1066
+ .mh-intro p{font-size:var(--fs-sm);color:var(--ink-soft);line-height:2;margin-top:.5rem}