@researai/deepscientist 1.5.9 → 1.5.12

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 (165) hide show
  1. package/README.md +112 -99
  2. package/assets/branding/connector-qq.png +0 -0
  3. package/assets/branding/connector-rokid.png +0 -0
  4. package/assets/branding/connector-weixin.png +0 -0
  5. package/assets/branding/projects.png +0 -0
  6. package/bin/ds.js +519 -63
  7. package/docs/assets/branding/projects.png +0 -0
  8. package/docs/en/00_QUICK_START.md +338 -68
  9. package/docs/en/01_SETTINGS_REFERENCE.md +14 -0
  10. package/docs/en/02_START_RESEARCH_GUIDE.md +180 -4
  11. package/docs/en/04_LINGZHU_CONNECTOR_GUIDE.md +62 -179
  12. package/docs/en/09_DOCTOR.md +66 -5
  13. package/docs/en/10_WEIXIN_CONNECTOR_GUIDE.md +137 -0
  14. package/docs/en/11_LICENSE_AND_RISK.md +256 -0
  15. package/docs/en/12_GUIDED_WORKFLOW_TOUR.md +446 -0
  16. package/docs/en/13_CORE_ARCHITECTURE_GUIDE.md +297 -0
  17. package/docs/en/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +506 -0
  18. package/docs/en/15_CODEX_PROVIDER_SETUP.md +284 -0
  19. package/docs/en/99_ACKNOWLEDGEMENTS.md +4 -1
  20. package/docs/en/README.md +83 -0
  21. package/docs/images/lingzhu/rokid-agent-platform-create.png +0 -0
  22. package/docs/images/weixin/weixin-plugin-entry.png +0 -0
  23. package/docs/images/weixin/weixin-plugin-entry.svg +33 -0
  24. package/docs/images/weixin/weixin-qr-confirm.svg +30 -0
  25. package/docs/images/weixin/weixin-quest-media-flow.svg +44 -0
  26. package/docs/images/weixin/weixin-settings-bind.svg +57 -0
  27. package/docs/zh/00_QUICK_START.md +345 -72
  28. package/docs/zh/01_SETTINGS_REFERENCE.md +14 -0
  29. package/docs/zh/02_START_RESEARCH_GUIDE.md +181 -3
  30. package/docs/zh/04_LINGZHU_CONNECTOR_GUIDE.md +62 -193
  31. package/docs/zh/09_DOCTOR.md +68 -5
  32. package/docs/zh/10_WEIXIN_CONNECTOR_GUIDE.md +144 -0
  33. package/docs/zh/11_LICENSE_AND_RISK.md +256 -0
  34. package/docs/zh/12_GUIDED_WORKFLOW_TOUR.md +442 -0
  35. package/docs/zh/13_CORE_ARCHITECTURE_GUIDE.md +296 -0
  36. package/docs/zh/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +506 -0
  37. package/docs/zh/15_CODEX_PROVIDER_SETUP.md +285 -0
  38. package/docs/zh/99_ACKNOWLEDGEMENTS.md +4 -1
  39. package/docs/zh/README.md +129 -0
  40. package/install.sh +0 -34
  41. package/package.json +2 -2
  42. package/pyproject.toml +1 -1
  43. package/src/deepscientist/__init__.py +1 -1
  44. package/src/deepscientist/annotations.py +343 -0
  45. package/src/deepscientist/artifact/arxiv.py +484 -37
  46. package/src/deepscientist/artifact/service.py +574 -108
  47. package/src/deepscientist/arxiv_library.py +275 -0
  48. package/src/deepscientist/bash_exec/monitor.py +7 -5
  49. package/src/deepscientist/bash_exec/service.py +93 -21
  50. package/src/deepscientist/bridges/builtins.py +2 -0
  51. package/src/deepscientist/bridges/connectors.py +447 -0
  52. package/src/deepscientist/channels/__init__.py +2 -0
  53. package/src/deepscientist/channels/builtins.py +3 -1
  54. package/src/deepscientist/channels/local.py +3 -3
  55. package/src/deepscientist/channels/qq.py +8 -8
  56. package/src/deepscientist/channels/qq_gateway.py +1 -1
  57. package/src/deepscientist/channels/relay.py +14 -8
  58. package/src/deepscientist/channels/weixin.py +59 -0
  59. package/src/deepscientist/channels/weixin_ilink.py +388 -0
  60. package/src/deepscientist/config/models.py +23 -2
  61. package/src/deepscientist/config/service.py +539 -67
  62. package/src/deepscientist/connector/__init__.py +4 -0
  63. package/src/deepscientist/connector/connector_profiles.py +481 -0
  64. package/src/deepscientist/connector/lingzhu_support.py +668 -0
  65. package/src/deepscientist/connector/qq_profiles.py +206 -0
  66. package/src/deepscientist/connector/weixin_support.py +663 -0
  67. package/src/deepscientist/connector_profiles.py +1 -374
  68. package/src/deepscientist/connector_runtime.py +2 -0
  69. package/src/deepscientist/daemon/api/handlers.py +165 -5
  70. package/src/deepscientist/daemon/api/router.py +13 -1
  71. package/src/deepscientist/daemon/app.py +1444 -67
  72. package/src/deepscientist/doctor.py +4 -5
  73. package/src/deepscientist/gitops/diff.py +120 -29
  74. package/src/deepscientist/lingzhu_support.py +1 -182
  75. package/src/deepscientist/mcp/server.py +135 -7
  76. package/src/deepscientist/prompts/builder.py +128 -11
  77. package/src/deepscientist/qq_profiles.py +1 -196
  78. package/src/deepscientist/quest/node_traces.py +23 -0
  79. package/src/deepscientist/quest/service.py +359 -74
  80. package/src/deepscientist/quest/stage_views.py +71 -5
  81. package/src/deepscientist/runners/codex.py +170 -19
  82. package/src/deepscientist/runners/runtime_overrides.py +6 -0
  83. package/src/deepscientist/shared.py +33 -14
  84. package/src/deepscientist/weixin_support.py +1 -0
  85. package/src/prompts/connectors/lingzhu.md +3 -1
  86. package/src/prompts/connectors/qq.md +2 -1
  87. package/src/prompts/connectors/weixin.md +231 -0
  88. package/src/prompts/contracts/shared_interaction.md +4 -1
  89. package/src/prompts/system.md +61 -9
  90. package/src/skills/analysis-campaign/SKILL.md +46 -6
  91. package/src/skills/analysis-campaign/references/campaign-plan-template.md +21 -8
  92. package/src/skills/baseline/SKILL.md +1 -1
  93. package/src/skills/decision/SKILL.md +1 -1
  94. package/src/skills/experiment/SKILL.md +1 -1
  95. package/src/skills/finalize/SKILL.md +1 -1
  96. package/src/skills/idea/SKILL.md +1 -1
  97. package/src/skills/intake-audit/SKILL.md +1 -1
  98. package/src/skills/rebuttal/SKILL.md +74 -1
  99. package/src/skills/rebuttal/references/response-letter-template.md +55 -11
  100. package/src/skills/review/SKILL.md +118 -1
  101. package/src/skills/review/references/experiment-todo-template.md +23 -0
  102. package/src/skills/review/references/review-report-template.md +16 -0
  103. package/src/skills/review/references/revision-log-template.md +4 -0
  104. package/src/skills/scout/SKILL.md +1 -1
  105. package/src/skills/write/SKILL.md +168 -7
  106. package/src/skills/write/references/paper-experiment-matrix-template.md +131 -0
  107. package/src/tui/package.json +1 -1
  108. package/src/ui/dist/assets/{AiManusChatView-BKZ103sn.js → AiManusChatView-CnJcXynW.js} +156 -48
  109. package/src/ui/dist/assets/{AnalysisPlugin-mTTzGAlK.js → AnalysisPlugin-DeyzPEhV.js} +1 -1
  110. package/src/ui/dist/assets/{CliPlugin-BH58n3GY.js → CliPlugin-CB1YODQn.js} +164 -9
  111. package/src/ui/dist/assets/{CodeEditorPlugin-BKGRUH7e.js → CodeEditorPlugin-B-xicq1e.js} +8 -8
  112. package/src/ui/dist/assets/{CodeViewerPlugin-BMADwFWJ.js → CodeViewerPlugin-DT54ysXa.js} +5 -5
  113. package/src/ui/dist/assets/{DocViewerPlugin-ZOnTIHLN.js → DocViewerPlugin-DQtKT-VD.js} +3 -3
  114. package/src/ui/dist/assets/{GitDiffViewerPlugin-CQ7h1Djm.js → GitDiffViewerPlugin-hqHbCfnv.js} +20 -21
  115. package/src/ui/dist/assets/{ImageViewerPlugin-GVS5MsnC.js → ImageViewerPlugin-OcVo33jV.js} +5 -5
  116. package/src/ui/dist/assets/{LabCopilotPanel-BZNv1JML.js → LabCopilotPanel-DdGwhEUV.js} +11 -11
  117. package/src/ui/dist/assets/{LabPlugin-TWcJsdQA.js → LabPlugin-Ciz1gDaX.js} +2 -1
  118. package/src/ui/dist/assets/{LatexPlugin-DIjHiR2x.js → LatexPlugin-BhmjNQRC.js} +37 -11
  119. package/src/ui/dist/assets/{MarkdownViewerPlugin-D3ooGAH0.js → MarkdownViewerPlugin-BzdVH9Bx.js} +4 -4
  120. package/src/ui/dist/assets/{MarketplacePlugin-DfVfE9hN.js → MarketplacePlugin-DmyHspXt.js} +3 -3
  121. package/src/ui/dist/assets/{NotebookEditor-DDl0_Mc0.js → NotebookEditor-BMXKrDRk.js} +1 -1
  122. package/src/ui/dist/assets/{NotebookEditor-s8JhzuX1.js → NotebookEditor-BTVYRGkm.js} +12 -12
  123. package/src/ui/dist/assets/{PdfLoader-C2Sf6SJM.js → PdfLoader-CvcjJHXv.js} +14 -7
  124. package/src/ui/dist/assets/{PdfMarkdownPlugin-CXFLoIsa.js → PdfMarkdownPlugin-DW2ej8Vk.js} +73 -6
  125. package/src/ui/dist/assets/{PdfViewerPlugin-BYTmz2fK.js → PdfViewerPlugin-CmlDxbhU.js} +103 -34
  126. package/src/ui/dist/assets/PdfViewerPlugin-DQ11QcSf.css +3627 -0
  127. package/src/ui/dist/assets/{SearchPlugin-CjWBI1O9.js → SearchPlugin-DAjQZPSv.js} +1 -1
  128. package/src/ui/dist/assets/{TextViewerPlugin-DdOBU3-S.js → TextViewerPlugin-C-nVAZb_.js} +5 -4
  129. package/src/ui/dist/assets/{VNCViewer-B8HGgLwQ.js → VNCViewer-D7-dIYon.js} +10 -10
  130. package/src/ui/dist/assets/bot-C_G4WtNI.js +21 -0
  131. package/src/ui/dist/assets/branding/logo-rokid.png +0 -0
  132. package/src/ui/dist/assets/browser-BAcuE0Xj.js +2895 -0
  133. package/src/ui/dist/assets/{code-BWAY76JP.js → code-Cd7WfiWq.js} +1 -1
  134. package/src/ui/dist/assets/{file-content-C1NwU5oQ.js → file-content-B57zsL9y.js} +1 -1
  135. package/src/ui/dist/assets/{file-diff-panel-CywslwB9.js → file-diff-panel-DVoheLFq.js} +1 -1
  136. package/src/ui/dist/assets/{file-socket-B4kzuOBQ.js → file-socket-B5kXFxZP.js} +1 -1
  137. package/src/ui/dist/assets/{image-D-NZM-6P.js → image-LLOjkMHF.js} +1 -1
  138. package/src/ui/dist/assets/{index-DGIYDuTv.css → index-BQG-1s2o.css} +40 -13
  139. package/src/ui/dist/assets/{index-DHZJ_0TI.js → index-C3r2iGrp.js} +12 -12
  140. package/src/ui/dist/assets/{index-7Chr1g9c.js → index-CLQauncb.js} +15050 -9561
  141. package/src/ui/dist/assets/index-Dxa2eYMY.js +25 -0
  142. package/src/ui/dist/assets/{index-BdM1Gqfr.js → index-hOUOWbW2.js} +2 -2
  143. package/src/ui/dist/assets/{monaco-Cb2uKKe6.js → monaco-BGGAEii3.js} +1 -1
  144. package/src/ui/dist/assets/{pdf-effect-queue-DSw_D3RV.js → pdf-effect-queue-DlEr1_y5.js} +16 -1
  145. package/src/ui/dist/assets/pdf.worker.min-yatZIOMy.mjs +21 -0
  146. package/src/ui/dist/assets/{popover-Bg72DGgT.js → popover-CWJbJuYY.js} +1 -1
  147. package/src/ui/dist/assets/{project-sync-Ce_0BglY.js → project-sync-CRJiucYO.js} +18 -77
  148. package/src/ui/dist/assets/select-CoHB7pvH.js +1690 -0
  149. package/src/ui/dist/assets/{sigma-DPaACDrh.js → sigma-D5aJWR8J.js} +1 -1
  150. package/src/ui/dist/assets/{index-CDxNdQdz.js → square-check-big-DUK_mnkS.js} +2 -13
  151. package/src/ui/dist/assets/{trash-BvTgE5__.js → trash-ChU3SEE3.js} +1 -1
  152. package/src/ui/dist/assets/{useCliAccess-CgPeMOwP.js → useCliAccess-BrJBV3tY.js} +1 -1
  153. package/src/ui/dist/assets/{useFileDiffOverlay-xPhz7P5B.js → useFileDiffOverlay-C2OQaVWc.js} +1 -1
  154. package/src/ui/dist/assets/{wrap-text-C3Un3YQr.js → wrap-text-C7Qqh-om.js} +1 -1
  155. package/src/ui/dist/assets/{zoom-out-BgxLa0Ri.js → zoom-out-rtX0FKya.js} +1 -1
  156. package/src/ui/dist/index.html +2 -2
  157. package/src/ui/dist/assets/AutoFigurePlugin-BGxN8Umr.css +0 -3056
  158. package/src/ui/dist/assets/AutoFigurePlugin-C_wWw4AP.js +0 -8149
  159. package/src/ui/dist/assets/PdfViewerPlugin-BJXtIwj_.css +0 -260
  160. package/src/ui/dist/assets/Stepper-B0Dd8CxK.js +0 -158
  161. package/src/ui/dist/assets/bibtex-CKaefIN2.js +0 -189
  162. package/src/ui/dist/assets/file-utils-H2fjA46S.js +0 -109
  163. package/src/ui/dist/assets/message-square-BzjLiXir.js +0 -16
  164. package/src/ui/dist/assets/pdfjs-DU1YE8WO.js +0 -3
  165. package/src/ui/dist/assets/tooltip-C_mA6R0w.js +0 -108
@@ -1,3056 +0,0 @@
1
- /**
2
- * AutoFigure Morandi Yellow Theme
3
- *
4
- * Full-page centered layout matching the original AutoFigure design.
5
- * Morandi yellow color scheme for DeepScientist integration.
6
- */
7
-
8
- /* ============================================================
9
- CSS Variables - Morandi Yellow Palette
10
- ============================================================ */
11
-
12
- :root {
13
- /* Primary Colors - CLI Palette */
14
- --af-accent-primary: #A8B29F;
15
- --af-accent-secondary: #C9B084;
16
- --af-accent-tertiary: #D4C4A0;
17
- --af-primary: var(--af-accent-primary);
18
- --af-primary-light: var(--af-accent-secondary);
19
-
20
- /* Background Colors - CLI Palette */
21
- --af-bg-primary: #F3F2EE;
22
- --af-bg-secondary: #ECE9E2;
23
- --af-bg-tertiary: #E3DFD6;
24
- --af-bg-elevated: rgba(255, 255, 255, 0.78);
25
- --af-bg-glass: rgba(255, 255, 255, 0.18);
26
-
27
- /* Text Colors */
28
- --af-text-primary: #2C2C2C;
29
- --af-text-secondary: #4A4A4A;
30
- --af-text-tertiary: #6B6B6B;
31
- --af-text-muted: #8A8A8A;
32
-
33
- /* Border Colors */
34
- --af-border-primary: rgba(255, 255, 255, 0.45);
35
- --af-border-secondary: rgba(255, 255, 255, 0.35);
36
- --af-border-accent: rgba(168, 178, 159, 0.4);
37
-
38
- /* Shadows */
39
- --af-shadow-sm: 0 1px 3px rgba(32, 32, 32, 0.08);
40
- --af-shadow-md: 0 6px 18px rgba(32, 32, 32, 0.1);
41
- --af-shadow-lg: 0 8px 30px rgba(32, 32, 32, 0.08);
42
- --af-shadow-glow: 0 0 20px rgba(168, 178, 159, 0.2);
43
- --af-shadow-button: 0 4px 12px rgba(168, 178, 159, 0.35);
44
-
45
- /* Transitions */
46
- --af-transition-fast: 150ms ease;
47
- --af-transition-base: 250ms ease;
48
- --af-transition-slow: 350ms cubic-bezier(0.4, 0, 0.2, 1);
49
- }
50
-
51
- /* Dark Mode Variables */
52
- .dark {
53
- --af-primary: var(--af-accent-primary);
54
- --af-primary-light: var(--af-accent-secondary);
55
- --af-bg-primary: #0f172a;
56
- --af-bg-secondary: #1e293b;
57
- --af-bg-tertiary: #334155;
58
- --af-bg-elevated: rgba(30, 41, 59, 0.95);
59
- --af-bg-glass: rgba(15, 23, 42, 0.85);
60
-
61
- --af-text-primary: #f1f5f9;
62
- --af-text-secondary: #cbd5e1;
63
- --af-text-tertiary: #94a3b8;
64
- --af-text-muted: #64748b;
65
-
66
- --af-border-primary: rgba(51, 65, 85, 0.8);
67
- --af-border-secondary: rgba(71, 85, 105, 0.6);
68
- --af-border-accent: rgba(212, 196, 148, 0.3);
69
-
70
- --af-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.2);
71
- --af-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.3);
72
- --af-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.4);
73
- }
74
-
75
- /* ===== Start Page - Full Page Centered Layout ===== */
76
- .af-start-page {
77
- min-height: 100%;
78
- height: 100%;
79
- display: flex;
80
- flex-direction: column;
81
- align-items: center;
82
- justify-content: center;
83
- background: linear-gradient(180deg, var(--af-bg-primary) 0%, var(--af-bg-secondary) 65%, var(--af-bg-tertiary) 100%);
84
- position: relative;
85
- overflow: hidden;
86
- }
87
-
88
- /* Soft glow overlay for start page */
89
- .af-start-page::before {
90
- content: '';
91
- position: absolute;
92
- inset: 0;
93
- background:
94
- radial-gradient(80% 120% at 50% 20%, rgba(201, 179, 122, 0.12) 0%, transparent 55%),
95
- radial-gradient(60% 110% at 80% 60%, rgba(212, 196, 148, 0.08) 0%, transparent 60%);
96
- pointer-events: none;
97
- opacity: 0.8;
98
- z-index: 0;
99
- }
100
-
101
- /* Header - top right corner */
102
- .af-start-header {
103
- position: absolute;
104
- top: 16px;
105
- right: 16px;
106
- z-index: 20;
107
- display: flex;
108
- align-items: center;
109
- gap: 8px;
110
- }
111
-
112
- /* Centered Content Container */
113
- .af-start-center {
114
- display: flex;
115
- flex-direction: column;
116
- align-items: center;
117
- gap: 2rem;
118
- max-width: 700px;
119
- width: 100%;
120
- padding: 2rem;
121
- z-index: 10;
122
- }
123
-
124
- /* Logo */
125
- .af-start-logo {
126
- text-align: center;
127
- display: flex;
128
- flex-direction: column;
129
- align-items: center;
130
- gap: 12px;
131
- }
132
-
133
- .af-start-logo-icon {
134
- width: 72px;
135
- height: 72px;
136
- background: linear-gradient(135deg, var(--af-accent-primary) 0%, var(--af-accent-secondary) 100%);
137
- border-radius: 20px;
138
- display: flex;
139
- align-items: center;
140
- justify-content: center;
141
- box-shadow: 0 8px 32px rgba(201, 179, 122, 0.35);
142
- animation: logoFloat 3s ease-in-out infinite;
143
- }
144
-
145
- @keyframes logoFloat {
146
- 0%, 100% { transform: translateY(0); }
147
- 50% { transform: translateY(-8px); }
148
- }
149
-
150
- .af-start-title {
151
- font-size: 2.5rem;
152
- font-weight: 700;
153
- color: var(--af-text-primary);
154
- margin: 0;
155
- letter-spacing: -0.02em;
156
- }
157
-
158
- /* Input Card */
159
- .af-start-input-card {
160
- width: 100%;
161
- background: var(--af-bg-elevated);
162
- border: 1px solid var(--af-border-primary);
163
- border-radius: 20px;
164
- padding: 16px;
165
- backdrop-filter: blur(20px);
166
- box-shadow: var(--af-shadow-lg), 0 0 60px rgba(201, 179, 122, 0.08);
167
- display: flex;
168
- flex-direction: column;
169
- gap: 12px;
170
- }
171
-
172
- /* Dropdown Row */
173
- .af-start-dropdown-row {
174
- display: flex;
175
- align-items: center;
176
- }
177
-
178
- .af-start-content-type-btn {
179
- display: flex;
180
- align-items: center;
181
- gap: 8px;
182
- padding: 8px 14px;
183
- border-radius: 10px;
184
- border: 1px solid var(--af-border-primary);
185
- background: var(--af-bg-glass);
186
- color: var(--af-text-secondary);
187
- font-size: 0.875rem;
188
- cursor: pointer;
189
- transition: all var(--af-transition-fast);
190
- }
191
-
192
- .af-start-content-type-btn:hover {
193
- border-color: var(--af-accent-primary);
194
- color: var(--af-text-primary);
195
- }
196
-
197
- /* Textarea Wrapper */
198
- .af-start-textarea-wrapper {
199
- width: 100%;
200
- }
201
-
202
- .af-start-textarea {
203
- width: 100%;
204
- padding: 10px 16px;
205
- border-radius: 10px;
206
- border: 1px solid var(--af-border-primary);
207
- background: var(--af-bg-glass);
208
- color: var(--af-text-primary);
209
- font-size: 0.95rem;
210
- line-height: 1.4;
211
- resize: none;
212
- min-height: unset;
213
- height: auto;
214
- transition: all var(--af-transition-fast);
215
- font-family: inherit;
216
- }
217
-
218
- .af-start-textarea::-moz-placeholder {
219
- color: var(--af-text-muted);
220
- }
221
-
222
- .af-start-textarea::placeholder {
223
- color: var(--af-text-muted);
224
- }
225
-
226
- .af-start-textarea:focus {
227
- outline: none;
228
- border-color: var(--af-accent-primary);
229
- box-shadow: 0 0 0 4px rgba(201, 179, 122, 0.1);
230
- }
231
-
232
- /* Error Message */
233
- .af-start-error {
234
- display: flex;
235
- align-items: center;
236
- justify-content: space-between;
237
- padding: 10px 14px;
238
- border-radius: 10px;
239
- background: rgba(239, 68, 68, 0.1);
240
- border: 1px solid rgba(239, 68, 68, 0.3);
241
- color: #dc2626;
242
- font-size: 0.875rem;
243
- }
244
-
245
- .af-start-error button {
246
- background: none;
247
- border: none;
248
- color: inherit;
249
- font-size: 1.2rem;
250
- cursor: pointer;
251
- opacity: 0.7;
252
- padding: 0 4px;
253
- }
254
-
255
- .af-start-error button:hover {
256
- opacity: 1;
257
- }
258
-
259
- /* Action Bar */
260
- .af-start-actions {
261
- display: flex;
262
- align-items: center;
263
- gap: 8px;
264
- padding-top: 4px;
265
- }
266
-
267
- .af-start-action-btn {
268
- width: 40px;
269
- height: 40px;
270
- border-radius: 10px;
271
- border: 1px solid var(--af-border-primary);
272
- background: var(--af-bg-glass);
273
- color: var(--af-text-tertiary);
274
- cursor: pointer;
275
- display: flex;
276
- align-items: center;
277
- justify-content: center;
278
- transition: all var(--af-transition-fast);
279
- }
280
-
281
- .af-start-action-btn:hover:not(:disabled) {
282
- border-color: var(--af-accent-primary);
283
- color: var(--af-accent-primary);
284
- background: rgba(201, 179, 122, 0.05);
285
- }
286
-
287
- .af-start-action-btn:disabled {
288
- opacity: 0.5;
289
- cursor: not-allowed;
290
- }
291
-
292
- /* Circular Generate Button */
293
- .af-start-generate-btn {
294
- width: 48px;
295
- height: 48px;
296
- border-radius: 50%;
297
- border: none;
298
- background: linear-gradient(135deg, var(--af-accent-primary) 0%, var(--af-accent-secondary) 100%);
299
- color: white;
300
- cursor: pointer;
301
- display: flex;
302
- align-items: center;
303
- justify-content: center;
304
- box-shadow: 0 4px 16px rgba(201, 179, 122, 0.4);
305
- transition: all var(--af-transition-fast);
306
- }
307
-
308
- .af-start-generate-btn:hover:not(:disabled) {
309
- transform: scale(1.05);
310
- box-shadow: 0 6px 24px rgba(201, 179, 122, 0.5);
311
- }
312
-
313
- .af-start-generate-btn:disabled {
314
- opacity: 0.5;
315
- cursor: not-allowed;
316
- transform: none;
317
- }
318
-
319
- /* ===== Dropdown Menu ===== */
320
- .af-dropdown {
321
- position: relative;
322
- }
323
-
324
- .af-dropdown-menu {
325
- position: absolute;
326
- bottom: 100%;
327
- left: 0;
328
- margin-bottom: 8px;
329
- min-width: 180px;
330
- background: var(--af-bg-elevated);
331
- border: 1px solid var(--af-border-primary);
332
- border-radius: 10px;
333
- box-shadow: var(--af-shadow-lg);
334
- overflow: hidden;
335
- opacity: 0;
336
- visibility: hidden;
337
- transform: translateY(8px);
338
- transition: all var(--af-transition-fast);
339
- z-index: 30;
340
- }
341
-
342
- .af-dropdown-menu.open {
343
- opacity: 1;
344
- visibility: visible;
345
- transform: translateY(0);
346
- }
347
-
348
- .af-dropdown-menu-down {
349
- bottom: auto;
350
- top: 100%;
351
- margin-top: 8px;
352
- margin-bottom: 0;
353
- }
354
-
355
- .af-dropdown-item {
356
- padding: 10px 14px;
357
- font-size: 0.875rem;
358
- color: var(--af-text-secondary);
359
- cursor: pointer;
360
- transition: all var(--af-transition-fast);
361
- display: flex;
362
- align-items: center;
363
- gap: 8px;
364
- }
365
-
366
- .af-dropdown-item:hover {
367
- background: var(--af-bg-tertiary);
368
- color: var(--af-text-primary);
369
- }
370
-
371
- .af-dropdown-item.active {
372
- background: rgba(201, 179, 122, 0.1);
373
- color: var(--af-accent-primary);
374
- }
375
-
376
- /* ===== Icon Button ===== */
377
- .af-icon-btn {
378
- width: 36px;
379
- height: 36px;
380
- border-radius: 8px;
381
- border: none;
382
- background: transparent;
383
- color: var(--af-text-tertiary);
384
- cursor: pointer;
385
- display: flex;
386
- align-items: center;
387
- justify-content: center;
388
- transition: all var(--af-transition-fast);
389
- }
390
-
391
- .af-icon-btn:hover {
392
- background: var(--af-bg-tertiary);
393
- color: var(--af-text-primary);
394
- }
395
-
396
- .af-icon-btn.active {
397
- background: rgba(201, 179, 122, 0.1);
398
- color: var(--af-accent-primary);
399
- }
400
-
401
- /* ===== External Links ===== */
402
- .af-external-link {
403
- display: flex;
404
- align-items: center;
405
- gap: 6px;
406
- padding: 6px 10px;
407
- border-radius: 8px;
408
- text-decoration: none;
409
- color: var(--af-text-secondary);
410
- font-size: 13px;
411
- font-weight: 500;
412
- transition: all 0.2s ease;
413
- background: transparent;
414
- }
415
-
416
- .af-external-link:hover {
417
- background: var(--af-bg-tertiary);
418
- color: var(--af-text-primary);
419
- }
420
-
421
- .af-external-link-icon {
422
- width: 20px;
423
- height: 20px;
424
- border-radius: 4px;
425
- -o-object-fit: contain;
426
- object-fit: contain;
427
- }
428
-
429
- /* ===== Canvas Page ===== */
430
- .af-canvas-page {
431
- height: 100%;
432
- display: flex;
433
- flex-direction: column;
434
- background: linear-gradient(180deg, var(--af-bg-primary) 0%, var(--af-bg-secondary) 100%);
435
- position: relative;
436
- overflow: hidden;
437
- border-radius: 16px;
438
- }
439
-
440
- .af-canvas-header {
441
- flex-shrink: 0;
442
- height: 52px;
443
- padding: 0 16px;
444
- background: var(--af-bg-elevated);
445
- backdrop-filter: blur(12px);
446
- border-bottom: 1px solid var(--af-border-primary);
447
- box-shadow: var(--af-shadow-sm);
448
- display: flex;
449
- align-items: center;
450
- justify-content: space-between;
451
- position: relative;
452
- z-index: 20;
453
- }
454
-
455
- .af-canvas-header-left {
456
- display: flex;
457
- align-items: center;
458
- gap: 16px;
459
- }
460
-
461
- .af-canvas-header-right {
462
- display: flex;
463
- align-items: center;
464
- gap: 8px;
465
- }
466
-
467
- .af-back-btn {
468
- display: flex;
469
- align-items: center;
470
- gap: 6px;
471
- padding: 8px 12px;
472
- border-radius: 8px;
473
- border: 1px solid var(--af-border-primary);
474
- background: var(--af-bg-glass);
475
- color: var(--af-text-secondary);
476
- font-size: 0.875rem;
477
- cursor: pointer;
478
- transition: all var(--af-transition-fast);
479
- }
480
-
481
- .af-back-btn:hover {
482
- border-color: var(--af-accent-primary);
483
- color: var(--af-text-primary);
484
- background: rgba(201, 179, 122, 0.05);
485
- }
486
-
487
- .af-canvas-logo {
488
- display: flex;
489
- align-items: center;
490
- gap: 8px;
491
- font-weight: 600;
492
- color: var(--af-accent-primary);
493
- }
494
-
495
- /* Gallery Button */
496
- .af-gallery-btn {
497
- display: flex;
498
- align-items: center;
499
- gap: 6px;
500
- padding: 8px 12px;
501
- border-radius: 8px;
502
- border: 1px solid var(--af-border-accent);
503
- background: rgba(201, 179, 122, 0.1);
504
- color: var(--af-accent-primary);
505
- font-size: 0.8rem;
506
- font-weight: 500;
507
- cursor: pointer;
508
- transition: all var(--af-transition-fast);
509
- }
510
-
511
- .af-gallery-btn:hover {
512
- background: rgba(201, 179, 122, 0.15);
513
- border-color: var(--af-accent-primary);
514
- }
515
-
516
- .af-gallery-badge {
517
- display: inline-flex;
518
- align-items: center;
519
- justify-content: center;
520
- min-width: 18px;
521
- height: 18px;
522
- padding: 0 5px;
523
- border-radius: 9px;
524
- background: var(--af-accent-primary);
525
- color: white;
526
- font-size: 0.7rem;
527
- font-weight: 600;
528
- }
529
-
530
- /* Canvas Wrapper */
531
- .af-canvas-wrapper {
532
- flex: 1;
533
- position: relative;
534
- display: flex;
535
- flex-direction: column;
536
- overflow: hidden;
537
- padding: 12px;
538
- }
539
-
540
- .af-canvas-container {
541
- flex: 1;
542
- min-height: 0;
543
- border-radius: 12px;
544
- overflow: hidden;
545
- border: 1px solid var(--af-border-primary);
546
- box-shadow: var(--af-shadow-md);
547
- background: white;
548
- position: relative;
549
- }
550
-
551
- .af-canvas-container > div,
552
- .af-canvas-container iframe {
553
- width: 100% !important;
554
- height: 100% !important;
555
- position: relative;
556
- z-index: 1;
557
- }
558
-
559
- .af-drawio-embed {
560
- display: block;
561
- width: 100%;
562
- height: 100%;
563
- min-height: 0;
564
- }
565
-
566
- .af-canvas-loading {
567
- flex: 1;
568
- display: flex;
569
- align-items: center;
570
- justify-content: center;
571
- }
572
-
573
- /* Error Banner */
574
- .af-error-banner {
575
- flex-shrink: 0;
576
- padding: 10px 16px;
577
- background: rgba(239, 68, 68, 0.1);
578
- border-bottom: 1px solid rgba(239, 68, 68, 0.3);
579
- display: flex;
580
- align-items: center;
581
- justify-content: space-between;
582
- color: #ef4444;
583
- font-size: 0.875rem;
584
- }
585
-
586
- .af-error-banner button {
587
- padding: 4px 12px;
588
- border-radius: 4px;
589
- background: transparent;
590
- border: 1px solid currentColor;
591
- color: inherit;
592
- font-size: 0.75rem;
593
- cursor: pointer;
594
- transition: all 150ms ease;
595
- }
596
-
597
- .af-error-banner button:hover {
598
- background: rgba(239, 68, 68, 0.1);
599
- }
600
-
601
- /* ===== Iteration Controls (Floating) ===== */
602
- .af-iteration-controls {
603
- position: absolute;
604
- bottom: 28px;
605
- left: 50%;
606
- transform: translateX(-50%);
607
- background: var(--af-bg-elevated);
608
- backdrop-filter: blur(12px);
609
- padding: 12px 20px;
610
- border-radius: 16px;
611
- border: 1px solid var(--af-border-primary);
612
- box-shadow: var(--af-shadow-lg);
613
- display: grid;
614
- grid-template-columns: max-content max-content max-content;
615
- align-items: center;
616
- -moz-column-gap: 16px;
617
- column-gap: 16px;
618
- row-gap: 10px;
619
- z-index: 15;
620
- max-width: calc(100% - 48px);
621
- width: -moz-max-content;
622
- width: max-content;
623
- overflow-x: auto;
624
- overflow-y: hidden;
625
- scrollbar-width: none;
626
- }
627
-
628
- .af-iteration-controls::-webkit-scrollbar {
629
- display: none;
630
- }
631
-
632
- .af-controls-label {
633
- font-size: 10px;
634
- text-transform: uppercase;
635
- letter-spacing: 0.08em;
636
- color: #8B9187;
637
- }
638
-
639
- .af-iteration-block {
640
- display: flex;
641
- flex-direction: column;
642
- align-items: flex-start;
643
- gap: 6px;
644
- }
645
-
646
- .af-iteration-center {
647
- align-items: flex-start;
648
- }
649
-
650
- .af-iteration-downloads,
651
- .af-iteration-actions {
652
- align-items: flex-start;
653
- }
654
-
655
- .af-iteration-row {
656
- display: flex;
657
- align-items: center;
658
- gap: 8px;
659
- flex-wrap: nowrap;
660
- }
661
-
662
- .af-iteration-info {
663
- display: flex;
664
- align-items: center;
665
- gap: 8px;
666
- font-size: 0.875rem;
667
- color: var(--af-text-secondary);
668
- }
669
-
670
- .af-iteration-badge {
671
- padding: 4px 10px;
672
- border-radius: 12px;
673
- background: rgba(201, 179, 122, 0.1);
674
- color: var(--af-accent-primary);
675
- font-weight: 600;
676
- font-size: 0.8rem;
677
- }
678
-
679
- .af-iteration-dots {
680
- display: flex;
681
- align-items: center;
682
- gap: 6px;
683
- }
684
-
685
- .af-iteration-dot {
686
- width: 8px;
687
- height: 8px;
688
- border-radius: 50%;
689
- background: var(--af-border-primary);
690
- transition: all var(--af-transition-fast);
691
- }
692
-
693
- .af-iteration-dot.completed {
694
- background: var(--af-accent-primary);
695
- }
696
-
697
- .af-iteration-dot.current {
698
- background: var(--af-accent-primary);
699
- box-shadow: 0 0 8px var(--af-accent-primary);
700
- }
701
-
702
- .af-iteration-nav {
703
- display: flex;
704
- align-items: center;
705
- gap: 8px;
706
- }
707
-
708
- .af-nav-btn {
709
- display: flex;
710
- align-items: center;
711
- justify-content: center;
712
- width: 28px;
713
- height: 28px;
714
- border-radius: 6px;
715
- background: var(--af-bg-glass);
716
- border: 1px solid var(--af-border-primary);
717
- color: var(--af-text-secondary);
718
- cursor: pointer;
719
- transition: all 150ms ease;
720
- }
721
-
722
- .af-nav-btn:hover:not(:disabled) {
723
- background: var(--af-accent-primary);
724
- color: white;
725
- border-color: var(--af-accent-primary);
726
- }
727
-
728
- .af-nav-btn:disabled {
729
- opacity: 0.4;
730
- cursor: not-allowed;
731
- }
732
-
733
- .af-iteration-label {
734
- font-size: 0.75rem;
735
- font-weight: 500;
736
- color: var(--af-text-secondary);
737
- white-space: nowrap;
738
- }
739
-
740
- .af-evaluation-badge {
741
- display: flex;
742
- align-items: center;
743
- gap: 4px;
744
- padding: 4px 8px;
745
- border-radius: 6px;
746
- background: rgba(234, 179, 8, 0.1);
747
- color: #ca8a04;
748
- font-size: 0.75rem;
749
- font-weight: 600;
750
- }
751
-
752
- .af-feedback-toggle {
753
- display: flex;
754
- align-items: center;
755
- justify-content: center;
756
- width: 28px;
757
- height: 28px;
758
- border-radius: 6px;
759
- background: var(--af-bg-glass);
760
- border: 1px solid var(--af-border-primary);
761
- color: var(--af-text-secondary);
762
- cursor: pointer;
763
- transition: all 150ms ease;
764
- }
765
-
766
- .af-feedback-toggle:hover,
767
- .af-feedback-toggle.active {
768
- background: var(--af-accent-primary);
769
- color: white;
770
- border-color: var(--af-accent-primary);
771
- }
772
-
773
- .af-feedback-panel {
774
- position: absolute;
775
- bottom: 100%;
776
- left: 50%;
777
- transform: translateX(-50%);
778
- width: 300px;
779
- margin-bottom: 8px;
780
- padding: 12px;
781
- background: var(--af-bg-elevated);
782
- border: 1px solid var(--af-border-primary);
783
- border-radius: 12px;
784
- box-shadow: var(--af-shadow-lg);
785
- }
786
-
787
- .af-feedback-input {
788
- width: 100%;
789
- padding: 8px 12px;
790
- border: 1px solid var(--af-border-primary);
791
- border-radius: 6px;
792
- font-size: 0.875rem;
793
- resize: none;
794
- margin-bottom: 8px;
795
- background: var(--af-bg-glass);
796
- color: var(--af-text-primary);
797
- }
798
-
799
- .af-feedback-input:focus {
800
- outline: none;
801
- border-color: var(--af-accent-primary);
802
- }
803
-
804
- .af-score-selector {
805
- display: flex;
806
- flex-direction: column;
807
- gap: 6px;
808
- }
809
-
810
- .af-score-buttons {
811
- display: flex;
812
- gap: 4px;
813
- }
814
-
815
- .af-score-btn {
816
- width: 24px;
817
- height: 24px;
818
- border-radius: 4px;
819
- background: var(--af-bg-glass);
820
- border: 1px solid var(--af-border-primary);
821
- color: var(--af-text-secondary);
822
- font-size: 0.7rem;
823
- font-weight: 500;
824
- cursor: pointer;
825
- transition: all 150ms ease;
826
- }
827
-
828
- .af-score-btn:hover,
829
- .af-score-btn.active {
830
- background: var(--af-accent-primary);
831
- color: white;
832
- border-color: var(--af-accent-primary);
833
- }
834
-
835
- .af-action-buttons {
836
- display: flex;
837
- gap: 8px;
838
- }
839
-
840
- .af-btn-secondary {
841
- padding: 8px 16px;
842
- border-radius: 8px;
843
- border: 1px solid var(--af-border-primary);
844
- background: var(--af-bg-glass);
845
- color: var(--af-text-primary);
846
- font-size: 0.875rem;
847
- font-weight: 500;
848
- cursor: pointer;
849
- transition: all var(--af-transition-fast);
850
- display: flex;
851
- align-items: center;
852
- gap: 6px;
853
- }
854
-
855
- .af-btn-secondary:hover {
856
- border-color: var(--af-accent-primary);
857
- background: rgba(201, 179, 122, 0.05);
858
- }
859
-
860
- .af-btn-primary {
861
- padding: 8px 16px;
862
- border-radius: 8px;
863
- border: none;
864
- background: linear-gradient(135deg, var(--af-accent-primary) 0%, var(--af-accent-secondary) 100%);
865
- color: white;
866
- font-size: 0.875rem;
867
- font-weight: 600;
868
- cursor: pointer;
869
- box-shadow: var(--af-shadow-button);
870
- transition: all var(--af-transition-fast);
871
- display: flex;
872
- align-items: center;
873
- gap: 6px;
874
- }
875
-
876
- .af-btn-primary:hover {
877
- transform: translateY(-1px);
878
- box-shadow: 0 6px 16px rgba(201, 179, 122, 0.4);
879
- }
880
-
881
- .af-btn-primary:disabled,
882
- .af-btn-secondary:disabled {
883
- opacity: 0.5;
884
- cursor: not-allowed;
885
- }
886
-
887
- /* ===== Settings Modal ===== */
888
- .af-modal-overlay {
889
- position: fixed;
890
- inset: 0;
891
- background: rgba(15, 23, 42, 0.4);
892
- backdrop-filter: blur(4px);
893
- z-index: 50;
894
- display: flex;
895
- align-items: center;
896
- justify-content: center;
897
- animation: modalOverlayIn 0.2s ease-out;
898
- }
899
-
900
- @keyframes modalOverlayIn {
901
- from { opacity: 0; }
902
- to { opacity: 1; }
903
- }
904
-
905
- .af-modal {
906
- width: 90%;
907
- max-width: 600px;
908
- max-height: 80vh;
909
- background: var(--af-bg-elevated);
910
- backdrop-filter: blur(20px);
911
- border: 1px solid var(--af-border-primary);
912
- border-radius: 16px;
913
- box-shadow: var(--af-shadow-lg), 0 0 60px rgba(201, 179, 122, 0.1);
914
- display: flex;
915
- flex-direction: column;
916
- overflow: hidden;
917
- animation: modalIn 0.25s ease-out;
918
- }
919
-
920
- @keyframes modalIn {
921
- from {
922
- opacity: 0;
923
- transform: scale(0.95) translateY(10px);
924
- }
925
- to {
926
- opacity: 1;
927
- transform: scale(1) translateY(0);
928
- }
929
- }
930
-
931
- .af-modal-header {
932
- flex-shrink: 0;
933
- padding: 16px 20px;
934
- background: linear-gradient(135deg, rgba(201, 179, 122, 0.1) 0%, rgba(212, 196, 148, 0.05) 100%);
935
- border-bottom: 1px solid var(--af-border-primary);
936
- display: flex;
937
- align-items: center;
938
- justify-content: space-between;
939
- }
940
-
941
- .af-modal-title {
942
- display: flex;
943
- align-items: center;
944
- gap: 12px;
945
- }
946
-
947
- .af-modal-title h2 {
948
- font-size: 1.1rem;
949
- font-weight: 600;
950
- color: var(--af-text-primary);
951
- margin: 0;
952
- }
953
-
954
- .af-modal-title p {
955
- font-size: 0.8rem;
956
- color: var(--af-text-tertiary);
957
- margin: 0;
958
- }
959
-
960
- .af-modal-icon {
961
- width: 36px;
962
- height: 36px;
963
- background: linear-gradient(135deg, var(--af-accent-primary) 0%, var(--af-accent-secondary) 100%);
964
- border-radius: 10px;
965
- display: flex;
966
- align-items: center;
967
- justify-content: center;
968
- box-shadow: var(--af-shadow-button);
969
- }
970
-
971
- .af-modal-close {
972
- width: 32px;
973
- height: 32px;
974
- border-radius: 8px;
975
- border: none;
976
- background: transparent;
977
- color: var(--af-text-tertiary);
978
- cursor: pointer;
979
- display: flex;
980
- align-items: center;
981
- justify-content: center;
982
- transition: all var(--af-transition-fast);
983
- }
984
-
985
- .af-modal-close:hover {
986
- background: var(--af-bg-tertiary);
987
- color: var(--af-text-primary);
988
- }
989
-
990
- /* Modal Tabs */
991
- .af-modal-tabs {
992
- flex-shrink: 0;
993
- display: flex;
994
- padding: 0 20px;
995
- background: var(--af-bg-glass);
996
- border-bottom: 1px solid var(--af-border-primary);
997
- }
998
-
999
- .af-modal-tab {
1000
- display: flex;
1001
- align-items: center;
1002
- gap: 6px;
1003
- padding: 12px 16px;
1004
- font-size: 0.875rem;
1005
- font-weight: 500;
1006
- color: var(--af-text-tertiary);
1007
- background: transparent;
1008
- border: none;
1009
- border-bottom: 2px solid transparent;
1010
- cursor: pointer;
1011
- transition: all var(--af-transition-fast);
1012
- }
1013
-
1014
- .af-modal-tab:hover {
1015
- color: var(--af-text-primary);
1016
- background: rgba(201, 179, 122, 0.05);
1017
- }
1018
-
1019
- .af-modal-tab.active {
1020
- color: var(--af-accent-primary);
1021
- border-bottom-color: var(--af-accent-primary);
1022
- }
1023
-
1024
- /* Modal Content */
1025
- .af-modal-content {
1026
- flex: 1;
1027
- overflow-y: auto;
1028
- padding: 20px;
1029
- }
1030
-
1031
- .af-modal-section {
1032
- display: flex;
1033
- flex-direction: column;
1034
- gap: 16px;
1035
- }
1036
-
1037
- /* Subsection */
1038
- .af-subsection {
1039
- margin-top: 16px;
1040
- padding: 16px;
1041
- background: var(--af-bg-glass);
1042
- border: 1px solid var(--af-border-secondary);
1043
- border-radius: 12px;
1044
- }
1045
-
1046
- .af-subsection-title {
1047
- display: flex;
1048
- align-items: center;
1049
- gap: 8px;
1050
- font-size: 0.9rem;
1051
- font-weight: 600;
1052
- color: var(--af-text-primary);
1053
- margin: 0 0 8px 0;
1054
- }
1055
-
1056
- .af-subsection-title svg {
1057
- color: var(--af-accent-primary);
1058
- }
1059
-
1060
- .af-subsection-desc {
1061
- font-size: 0.8rem;
1062
- color: var(--af-text-tertiary);
1063
- margin: 0 0 12px 0;
1064
- line-height: 1.5;
1065
- }
1066
-
1067
- /* Form Controls */
1068
- .af-form-group {
1069
- display: flex;
1070
- flex-direction: column;
1071
- gap: 6px;
1072
- }
1073
-
1074
- .af-label {
1075
- font-size: 0.8rem;
1076
- font-weight: 500;
1077
- color: var(--af-text-secondary);
1078
- }
1079
-
1080
- .af-input {
1081
- padding: 8px 12px;
1082
- border-radius: 8px;
1083
- border: 1px solid var(--af-border-primary);
1084
- background: var(--af-bg-glass);
1085
- color: var(--af-text-primary);
1086
- font-size: 0.875rem;
1087
- transition: all var(--af-transition-fast);
1088
- }
1089
-
1090
- .af-input::-moz-placeholder {
1091
- color: var(--af-text-muted);
1092
- }
1093
-
1094
- .af-input::placeholder {
1095
- color: var(--af-text-muted);
1096
- }
1097
-
1098
- .af-input:focus {
1099
- outline: none;
1100
- border-color: var(--af-accent-primary);
1101
- box-shadow: 0 0 0 3px rgba(201, 179, 122, 0.1);
1102
- }
1103
-
1104
- .af-checkbox-group {
1105
- display: flex;
1106
- align-items: center;
1107
- gap: 8px;
1108
- cursor: pointer;
1109
- }
1110
-
1111
- .af-checkbox {
1112
- width: 18px;
1113
- height: 18px;
1114
- border-radius: 4px;
1115
- border: 1px solid var(--af-border-primary);
1116
- background: var(--af-bg-glass);
1117
- cursor: pointer;
1118
- accent-color: var(--af-accent-primary);
1119
- }
1120
-
1121
- .af-checkbox-label {
1122
- font-size: 0.875rem;
1123
- color: var(--af-text-primary);
1124
- }
1125
-
1126
- /* Nested Form */
1127
- .af-nested-form {
1128
- margin-top: 12px;
1129
- display: flex;
1130
- flex-direction: column;
1131
- gap: 12px;
1132
- }
1133
-
1134
- /* Form Row */
1135
- .af-form-row {
1136
- display: grid;
1137
- grid-template-columns: 1fr 1fr;
1138
- gap: 12px;
1139
- }
1140
-
1141
- @media (max-width: 500px) {
1142
- .af-form-row {
1143
- grid-template-columns: 1fr;
1144
- }
1145
- }
1146
-
1147
- /* Modal Footer */
1148
- .af-modal-footer {
1149
- flex-shrink: 0;
1150
- padding: 16px 20px;
1151
- background: var(--af-bg-glass);
1152
- border-top: 1px solid var(--af-border-primary);
1153
- display: flex;
1154
- justify-content: flex-end;
1155
- gap: 12px;
1156
- }
1157
-
1158
- /* ===== Generation Overlay ===== */
1159
- .af-generation-overlay {
1160
- position: fixed;
1161
- inset: 0;
1162
- display: flex;
1163
- align-items: center;
1164
- justify-content: center;
1165
- background: rgba(15, 23, 42, 0.3);
1166
- z-index: 100;
1167
- pointer-events: none;
1168
- }
1169
-
1170
- .af-generation-spinner-only {
1171
- color: var(--af-accent-primary);
1172
- filter: drop-shadow(0 0 12px rgba(201, 179, 122, 0.5));
1173
- }
1174
-
1175
- .af-generation-modal {
1176
- display: flex;
1177
- flex-direction: column;
1178
- align-items: center;
1179
- padding: 32px 48px;
1180
- background: var(--af-bg-elevated);
1181
- border-radius: 16px;
1182
- box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
1183
- text-align: center;
1184
- }
1185
-
1186
- .af-generation-modal h3 {
1187
- margin: 16px 0 8px;
1188
- color: var(--af-text-primary);
1189
- }
1190
-
1191
- .af-generation-modal p {
1192
- margin: 0;
1193
- color: var(--af-text-tertiary);
1194
- }
1195
-
1196
- /* ===== Loading Spinner ===== */
1197
- @keyframes spin {
1198
- to { transform: rotate(360deg); }
1199
- }
1200
-
1201
- /* ===== Responsive Design ===== */
1202
- @media (max-width: 640px) {
1203
- .af-start-center {
1204
- padding: 1rem;
1205
- gap: 1.5rem;
1206
- }
1207
-
1208
- .af-start-title {
1209
- font-size: 2rem;
1210
- }
1211
-
1212
- .af-start-logo-icon {
1213
- width: 60px;
1214
- height: 60px;
1215
- border-radius: 16px;
1216
- }
1217
-
1218
- .af-start-input-card {
1219
- padding: 12px;
1220
- border-radius: 16px;
1221
- }
1222
-
1223
- .af-start-textarea {
1224
- min-height: 100px;
1225
- }
1226
-
1227
- .af-modal {
1228
- width: 95%;
1229
- max-height: 90vh;
1230
- margin: 16px;
1231
- }
1232
-
1233
- .af-modal-tabs {
1234
- padding: 0 12px;
1235
- overflow-x: auto;
1236
- }
1237
-
1238
- .af-modal-tab {
1239
- padding: 10px 12px;
1240
- white-space: nowrap;
1241
- }
1242
-
1243
- .af-modal-content {
1244
- padding: 16px;
1245
- }
1246
-
1247
- .af-iteration-controls {
1248
- max-width: calc(100% - 32px);
1249
- grid-template-columns: max-content max-content max-content;
1250
- justify-items: start;
1251
- }
1252
-
1253
- .af-iteration-downloads,
1254
- .af-iteration-center,
1255
- .af-iteration-actions {
1256
- justify-self: start;
1257
- }
1258
- }
1259
-
1260
- /* ===== Generation Mode (Image Generation) ===== */
1261
- .af-iteration-controls.af-generation-mode {
1262
- display: flex;
1263
- align-items: center;
1264
- gap: 8px;
1265
- padding: 10px 14px;
1266
- }
1267
-
1268
- .af-gen-input-wrapper {
1269
- flex: 1;
1270
- min-width: 200px;
1271
- }
1272
-
1273
- .af-gen-input {
1274
- width: 100%;
1275
- padding: 10px 14px;
1276
- border-radius: 10px;
1277
- border: 1px solid var(--af-border-primary);
1278
- background: var(--af-bg-glass);
1279
- color: var(--af-text-primary);
1280
- font-size: 0.9rem;
1281
- transition: all var(--af-transition-fast);
1282
- }
1283
-
1284
- .af-gen-input::-moz-placeholder {
1285
- color: var(--af-text-muted);
1286
- }
1287
-
1288
- .af-gen-input::placeholder {
1289
- color: var(--af-text-muted);
1290
- }
1291
-
1292
- .af-gen-input:focus {
1293
- outline: none;
1294
- border-color: var(--af-accent-primary);
1295
- box-shadow: 0 0 0 3px rgba(201, 179, 122, 0.1);
1296
- }
1297
-
1298
- .af-gen-input:disabled {
1299
- opacity: 0.6;
1300
- cursor: not-allowed;
1301
- }
1302
-
1303
- .af-gen-send-btn {
1304
- width: 44px;
1305
- height: 44px;
1306
- border-radius: 50%;
1307
- border: none;
1308
- background: linear-gradient(135deg, var(--af-accent-primary) 0%, var(--af-accent-secondary) 100%);
1309
- color: white;
1310
- cursor: pointer;
1311
- display: flex;
1312
- align-items: center;
1313
- justify-content: center;
1314
- box-shadow: 0 4px 12px rgba(201, 179, 122, 0.35);
1315
- transition: all var(--af-transition-fast);
1316
- flex-shrink: 0;
1317
- }
1318
-
1319
- .af-gen-send-btn:hover:not(:disabled) {
1320
- transform: scale(1.05);
1321
- box-shadow: 0 6px 16px rgba(201, 179, 122, 0.45);
1322
- }
1323
-
1324
- .af-gen-send-btn:disabled {
1325
- opacity: 0.5;
1326
- cursor: not-allowed;
1327
- transform: none;
1328
- }
1329
-
1330
- .af-points-chip {
1331
- flex-shrink: 0;
1332
- height: 30px;
1333
- padding: 0 10px;
1334
- border-radius: 999px;
1335
- border: 1px solid rgba(120, 120, 120, 0.35);
1336
- background: rgba(255, 255, 255, 0.92);
1337
- color: var(--af-text-primary);
1338
- font-size: 0.75rem;
1339
- font-weight: 600;
1340
- display: inline-flex;
1341
- align-items: center;
1342
- justify-content: center;
1343
- letter-spacing: 0.01em;
1344
- }
1345
-
1346
- .af-points-settle-note {
1347
- margin-top: 6px;
1348
- margin-left: 90px;
1349
- font-size: 0.72rem;
1350
- color: var(--af-text-muted);
1351
- }
1352
-
1353
- .af-gen-trigger-btn {
1354
- border-radius: 10px !important;
1355
- transition: all var(--af-transition-fast);
1356
- }
1357
-
1358
- .af-gen-trigger-btn:hover {
1359
- border-color: var(--af-accent-primary) !important;
1360
- color: var(--af-accent-primary) !important;
1361
- background: rgba(201, 179, 122, 0.1) !important;
1362
- }
1363
-
1364
- /* ===== Iteration Actions ===== */
1365
- .af-iteration-actions {
1366
- display: flex;
1367
- align-items: center;
1368
- gap: 8px;
1369
- }
1370
-
1371
- /* ===== Iteration Dots (Clickable) ===== */
1372
- .af-iteration-dot {
1373
- width: 10px;
1374
- height: 10px;
1375
- border-radius: 50%;
1376
- background: var(--af-border-primary);
1377
- border: none;
1378
- padding: 0;
1379
- cursor: pointer;
1380
- transition: all var(--af-transition-fast);
1381
- }
1382
-
1383
- .af-iteration-dot:hover {
1384
- transform: scale(1.2);
1385
- background: var(--af-accent-tertiary);
1386
- }
1387
-
1388
- .af-iteration-dot.completed {
1389
- background: var(--af-accent-secondary);
1390
- }
1391
-
1392
- .af-iteration-dot.current {
1393
- background: var(--af-accent-primary);
1394
- box-shadow: 0 0 8px var(--af-accent-primary);
1395
- transform: scale(1.1);
1396
- }
1397
-
1398
- /* ===== Button Active State ===== */
1399
- .af-btn-secondary.active {
1400
- border-color: var(--af-accent-primary);
1401
- color: var(--af-accent-primary);
1402
- background: rgba(201, 179, 122, 0.08);
1403
- }
1404
-
1405
- /* Utility classes */
1406
- .flex-1 {
1407
- flex: 1;
1408
- }
1409
-
1410
- .mr-1 {
1411
- margin-right: 0.25rem;
1412
- }
1413
-
1414
- .inline {
1415
- display: inline;
1416
- }
1417
-
1418
- .inline-block {
1419
- display: inline-block;
1420
- }
1421
-
1422
- .animate-spin {
1423
- animation: spin 1s linear infinite;
1424
- }
1425
-
1426
- /* ============================================================
1427
- CLI-Aligned AutoFigure Layout
1428
- ============================================================ */
1429
-
1430
- .af-layout {
1431
- --cli-bg-0: #F3F2EE;
1432
- --cli-bg-1: #ECE9E2;
1433
- --cli-bg-2: #E3DFD6;
1434
- --cli-ink-0: #1E1E1E;
1435
- --cli-ink-1: #2C2C2C;
1436
- --cli-ink-2: #4A4A4A;
1437
- --cli-muted-0: #6B6B6B;
1438
- --cli-muted-1: #8A8A8A;
1439
- --cli-muted-2: #A5A5A5;
1440
- --cli-accent-emerald: #9AB7A0;
1441
- --cli-accent-rose: #C49A9A;
1442
- --cli-accent-sand: #D4C4A0;
1443
- --cli-accent-steel: #8FA3B8;
1444
- --cli-accent-amber: #C9B084;
1445
- --cli-accent-olive: #A8B29F;
1446
- --cli-status-online: #9AB7A0;
1447
- --cli-status-offline: #C49A9A;
1448
- --cli-status-idle: #D4C4A0;
1449
- --cli-status-busy: #8FA3B8;
1450
- --cli-status-error: #B28D8D;
1451
- --cli-status-warning: #C9B084;
1452
- --cli-card-bg: rgba(255, 255, 255, 0.78);
1453
- --cli-card-border: rgba(255, 255, 255, 0.45);
1454
- --cli-card-shadow: 0 8px 30px rgba(32, 32, 32, 0.08);
1455
- --cli-card-shadow-hover: 0 12px 24px rgba(20, 20, 20, 0.12);
1456
- --cli-glass-bg: rgba(255, 255, 255, 0.18);
1457
- --cli-glass-border: rgba(255, 255, 255, 0.35);
1458
- --cli-glass-shadow: 0 10px 40px rgba(20, 20, 20, 0.16);
1459
-
1460
- display: grid;
1461
- grid-template-columns: 280px minmax(0, 1fr);
1462
- height: 100%;
1463
- min-height: 0;
1464
- overflow: hidden;
1465
- box-sizing: border-box;
1466
- background:
1467
- radial-gradient(120% 140% at 10% 0%, rgba(168, 178, 159, 0.14) 0%, transparent 45%),
1468
- radial-gradient(140% 140% at 90% 30%, rgba(212, 196, 160, 0.14) 0%, transparent 50%),
1469
- linear-gradient(180deg, var(--af-bg-primary) 0%, var(--af-bg-secondary) 100%);
1470
- color: var(--af-text-primary);
1471
- }
1472
-
1473
- .af-session-panel {
1474
- display: flex;
1475
- flex-direction: column;
1476
- border-right: 1px solid var(--af-border-secondary);
1477
- background: rgba(236, 233, 226, 0.92);
1478
- backdrop-filter: blur(10px);
1479
- height: 100%;
1480
- min-height: 0;
1481
- box-sizing: border-box;
1482
- }
1483
-
1484
- .af-session-header {
1485
- display: flex;
1486
- flex-direction: column;
1487
- gap: 12px;
1488
- padding: 20px 16px 12px 16px;
1489
- border-bottom: 1px solid rgba(186, 196, 175, 0.35);
1490
- }
1491
-
1492
- .af-session-logo {
1493
- display: flex;
1494
- align-items: center;
1495
- justify-content: center;
1496
- }
1497
-
1498
- .af-session-logo img {
1499
- width: 100%;
1500
- max-width: 140px;
1501
- height: auto;
1502
- filter: drop-shadow(0 8px 18px rgba(90, 82, 70, 0.18));
1503
- }
1504
-
1505
- .af-session-title {
1506
- display: flex;
1507
- align-items: center;
1508
- gap: 8px;
1509
- font-size: 13px;
1510
- font-weight: 600;
1511
- text-transform: uppercase;
1512
- letter-spacing: 0.08em;
1513
- color: var(--af-text-muted);
1514
- }
1515
-
1516
- .af-session-cta {
1517
- justify-content: center;
1518
- font-size: 13px;
1519
- padding: 8px 12px;
1520
- background: var(--af-accent-primary) !important;
1521
- color: #F7F4EF !important;
1522
- border: none;
1523
- box-shadow: 0 6px 14px rgba(122, 136, 118, 0.25);
1524
- }
1525
-
1526
- .af-session-cta:hover {
1527
- background: var(--cli-accent-emerald) !important;
1528
- }
1529
-
1530
- .af-session-list {
1531
- flex: 1;
1532
- padding: 12px 10px 12px 12px;
1533
- height: 100%;
1534
- }
1535
-
1536
- .af-session-empty {
1537
- font-size: 13px;
1538
- color: var(--af-text-muted);
1539
- padding: 12px;
1540
- }
1541
-
1542
- .af-session-row {
1543
- width: 100%;
1544
- display: flex;
1545
- align-items: center;
1546
- gap: 10px;
1547
- padding: 10px 12px;
1548
- border-radius: 12px;
1549
- border: 1px solid transparent;
1550
- background: rgba(255, 255, 255, 0.7);
1551
- transition: transform 160ms ease, border-color 160ms ease, background 160ms ease;
1552
- text-align: left;
1553
- }
1554
-
1555
- .af-session-row:hover {
1556
- border-color: var(--af-border-accent);
1557
- background: rgba(255, 255, 255, 0.85);
1558
- transform: translateY(-1px);
1559
- }
1560
-
1561
- .af-session-row.active {
1562
- border-color: rgba(168, 178, 159, 0.6);
1563
- box-shadow: 0 6px 16px rgba(168, 178, 159, 0.18);
1564
- background: rgba(255, 255, 255, 0.9);
1565
- }
1566
-
1567
- .af-session-caret {
1568
- width: 14px;
1569
- color: var(--af-accent-primary);
1570
- font-size: 14px;
1571
- }
1572
-
1573
- .af-session-meta {
1574
- flex: 1;
1575
- display: flex;
1576
- flex-direction: column;
1577
- gap: 4px;
1578
- }
1579
-
1580
- .af-session-actions {
1581
- display: flex;
1582
- align-items: center;
1583
- gap: 6px;
1584
- margin-right: 6px;
1585
- opacity: 0;
1586
- pointer-events: none;
1587
- transition: opacity 160ms ease;
1588
- }
1589
-
1590
- .af-session-row:hover .af-session-actions,
1591
- .af-session-row.active .af-session-actions {
1592
- opacity: 1;
1593
- pointer-events: auto;
1594
- }
1595
-
1596
- .af-session-action {
1597
- font-size: 10px;
1598
- padding: 4px 6px;
1599
- border-radius: 8px;
1600
- border: 1px solid var(--af-border-accent);
1601
- background: rgba(255, 255, 255, 0.7);
1602
- color: var(--af-text-tertiary);
1603
- text-transform: uppercase;
1604
- letter-spacing: 0.06em;
1605
- }
1606
-
1607
- .af-session-action[data-disabled="true"] {
1608
- opacity: 0.4;
1609
- cursor: not-allowed;
1610
- }
1611
-
1612
- .af-session-menu {
1613
- position: fixed;
1614
- display: flex;
1615
- flex-direction: column;
1616
- gap: 4px;
1617
- padding: 8px;
1618
- width: 220px;
1619
- border-radius: 12px;
1620
- border: 1px solid var(--af-border-accent);
1621
- background: rgba(255, 255, 255, 0.96);
1622
- box-shadow: 0 14px 30px rgba(74, 80, 72, 0.18);
1623
- z-index: 2147483646;
1624
- }
1625
-
1626
- .af-session-menu-item {
1627
- width: 100%;
1628
- text-align: left;
1629
- padding: 8px 10px;
1630
- border-radius: 10px;
1631
- font-size: 12px;
1632
- color: var(--af-text-secondary);
1633
- background: transparent;
1634
- transition: background 160ms ease, color 160ms ease;
1635
- }
1636
-
1637
- .af-session-menu-item:hover:not(:disabled) {
1638
- background: rgba(168, 178, 159, 0.18);
1639
- color: var(--af-text-primary);
1640
- }
1641
-
1642
- .af-session-menu-item:disabled {
1643
- opacity: 0.4;
1644
- cursor: not-allowed;
1645
- }
1646
-
1647
- .af-session-menu-item.danger {
1648
- color: var(--cli-status-error);
1649
- }
1650
-
1651
- .af-session-menu-item.danger:hover:not(:disabled) {
1652
- background: rgba(196, 154, 154, 0.18);
1653
- color: var(--cli-status-error);
1654
- }
1655
-
1656
- .af-session-name {
1657
- font-size: 13px;
1658
- font-weight: 600;
1659
- color: var(--af-text-primary);
1660
- }
1661
-
1662
- .af-session-time {
1663
- font-size: 11px;
1664
- color: var(--af-text-muted);
1665
- }
1666
-
1667
- .af-session-status {
1668
- font-size: 11px;
1669
- padding: 3px 8px;
1670
- border-radius: 999px;
1671
- background: rgba(168, 178, 159, 0.2);
1672
- color: var(--af-text-tertiary);
1673
- text-transform: uppercase;
1674
- letter-spacing: 0.06em;
1675
- }
1676
-
1677
- .af-session-status.status-completed {
1678
- background: rgba(154, 183, 160, 0.2);
1679
- color: var(--af-text-secondary);
1680
- }
1681
-
1682
- .af-session-status.status-failed,
1683
- .af-session-status.status-error {
1684
- background: rgba(196, 154, 154, 0.2);
1685
- color: var(--cli-status-error);
1686
- }
1687
-
1688
- .af-session-footer {
1689
- padding: 12px 16px 16px 16px;
1690
- border-top: 1px solid var(--af-border-secondary);
1691
- font-size: 12px;
1692
- color: var(--af-text-muted);
1693
- }
1694
-
1695
- .af-session-status-line {
1696
- font-size: 12px;
1697
- color: var(--af-text-muted);
1698
- }
1699
-
1700
- .af-session-footer-logo {
1701
- display: flex;
1702
- align-items: center;
1703
- justify-content: center;
1704
- padding: 6px 0 2px;
1705
- }
1706
-
1707
- .af-session-footer-logo img {
1708
- max-width: 120px;
1709
- max-height: 28px;
1710
- opacity: 0.75;
1711
- }
1712
-
1713
- .af-workspace {
1714
- display: flex;
1715
- flex-direction: column;
1716
- gap: 16px;
1717
- padding: 20px 22px;
1718
- overflow: hidden;
1719
- height: 100%;
1720
- min-height: 0;
1721
- box-sizing: border-box;
1722
- }
1723
-
1724
- .af-progress-bar {
1725
- display: flex;
1726
- flex-direction: column;
1727
- gap: 6px;
1728
- padding: 10px 12px;
1729
- border-radius: 12px;
1730
- background: var(--af-bg-elevated);
1731
- border: 1px solid var(--af-border-secondary);
1732
- }
1733
-
1734
- .af-progress-track {
1735
- position: relative;
1736
- width: 100%;
1737
- height: 8px;
1738
- border-radius: 999px;
1739
- background: rgba(168, 178, 159, 0.2);
1740
- overflow: hidden;
1741
- }
1742
-
1743
- .af-progress-fill {
1744
- height: 100%;
1745
- background: linear-gradient(90deg, var(--af-accent-primary) 0%, var(--af-accent-tertiary) 100%);
1746
- border-radius: inherit;
1747
- animation: af-shimmer 2s infinite linear;
1748
- }
1749
-
1750
- .af-progress-label {
1751
- font-size: 12px;
1752
- color: var(--af-text-muted);
1753
- }
1754
-
1755
- @keyframes af-shimmer {
1756
- 0% {
1757
- filter: brightness(1);
1758
- }
1759
- 50% {
1760
- filter: brightness(1.08);
1761
- }
1762
- 100% {
1763
- filter: brightness(1);
1764
- }
1765
- }
1766
-
1767
- .af-error-strip {
1768
- display: flex;
1769
- align-items: center;
1770
- justify-content: space-between;
1771
- padding: 8px 12px;
1772
- border-radius: 10px;
1773
- background: rgba(196, 154, 154, 0.16);
1774
- border: 1px solid rgba(196, 154, 154, 0.35);
1775
- color: var(--cli-status-error);
1776
- font-size: 12px;
1777
- }
1778
-
1779
- .af-error-strip button {
1780
- color: inherit;
1781
- font-size: 16px;
1782
- line-height: 1;
1783
- }
1784
-
1785
- .af-stepper-panel {
1786
- flex: 1;
1787
- display: flex;
1788
- flex-direction: column;
1789
- align-items: center;
1790
- justify-content: flex-start;
1791
- padding: 24px 16px 16px;
1792
- gap: 20px;
1793
- position: relative;
1794
- overflow: visible;
1795
- min-height: 0;
1796
- }
1797
-
1798
- .af-stepper-scroll {
1799
- flex: 1;
1800
- width: 100%;
1801
- display: flex;
1802
- justify-content: center;
1803
- overflow-y: auto;
1804
- overflow-x: hidden;
1805
- padding: 4px 8px 12px;
1806
- scrollbar-gutter: stable;
1807
- min-height: 0;
1808
- }
1809
-
1810
- .af-stepper-scroll::-webkit-scrollbar {
1811
- width: 6px;
1812
- }
1813
-
1814
- .af-stepper-scroll::-webkit-scrollbar-track {
1815
- background: rgba(154, 166, 139, 0.1);
1816
- border-radius: 3px;
1817
- }
1818
-
1819
- .af-stepper-scroll::-webkit-scrollbar-thumb {
1820
- background: rgba(154, 166, 139, 0.4);
1821
- border-radius: 3px;
1822
- }
1823
-
1824
- .af-stepper-scroll::-webkit-scrollbar-thumb:hover {
1825
- background: rgba(154, 166, 139, 0.6);
1826
- }
1827
-
1828
- .af-stepper-panel::before,
1829
- .af-stepper-panel::after {
1830
- content: "";
1831
- position: absolute;
1832
- width: 320px;
1833
- height: 320px;
1834
- border-radius: 50%;
1835
- background: radial-gradient(circle, rgba(206, 192, 170, 0.35), transparent 60%);
1836
- opacity: 0.7;
1837
- pointer-events: none;
1838
- }
1839
-
1840
- .af-stepper-panel::before {
1841
- top: -140px;
1842
- right: -120px;
1843
- animation: af-orb-drift 14s ease-in-out infinite;
1844
- }
1845
-
1846
- .af-stepper-panel::after {
1847
- bottom: -160px;
1848
- left: -120px;
1849
- animation: af-orb-drift 18s ease-in-out infinite reverse;
1850
- }
1851
-
1852
- .af-stepper-hero {
1853
- display: flex;
1854
- flex-direction: column;
1855
- align-items: center;
1856
- text-align: center;
1857
- gap: 8px;
1858
- animation: af-hero-enter 720ms ease-out both;
1859
- position: sticky;
1860
- top: 0;
1861
- z-index: 2;
1862
- }
1863
-
1864
- .af-stepper-logo {
1865
- width: 60%;
1866
- max-width: 260px;
1867
- height: auto;
1868
- filter: drop-shadow(0 12px 24px rgba(90, 82, 70, 0.16));
1869
- animation: af-hero-float 6s ease-in-out infinite;
1870
- }
1871
-
1872
- .af-stepper-subtitle {
1873
- font-size: 13px;
1874
- color: var(--af-text-muted);
1875
- width: min(720px, 100%);
1876
- max-width: 720px;
1877
- white-space: nowrap;
1878
- }
1879
-
1880
- .af-stepper-body {
1881
- width: min(820px, 100%);
1882
- animation: af-hero-enter 860ms ease-out both;
1883
- animation-delay: 120ms;
1884
- perspective: 1200px;
1885
- }
1886
-
1887
- .af-stepper-body .stepper-header {
1888
- animation: af-hero-enter 720ms ease-out both;
1889
- animation-delay: 80ms;
1890
- }
1891
-
1892
- .af-stepper-body .stepper-dot {
1893
- transition: transform 160ms ease, box-shadow 160ms ease, background-color 160ms ease;
1894
- }
1895
-
1896
- .af-stepper-body .stepper-dot[data-state="active"] {
1897
- box-shadow: 0 0 0 4px rgba(201, 179, 122, 0.18), 0 10px 20px rgba(90, 82, 70, 0.18);
1898
- animation: af-stepper-pulse 2.6s ease-in-out infinite;
1899
- }
1900
-
1901
- .af-stepper-body .stepper-dot[data-state="complete"] {
1902
- box-shadow: 0 8px 18px rgba(90, 82, 70, 0.16);
1903
- }
1904
-
1905
- .af-stepper-body .stepper-dot:hover {
1906
- transform: translateY(-1px);
1907
- }
1908
-
1909
- .af-stepper-body .stepper-actions {
1910
- justify-content: center;
1911
- gap: 18px;
1912
- animation: af-hero-enter 720ms ease-out both;
1913
- animation-delay: 180ms;
1914
- }
1915
-
1916
- .af-stepper-body .stepper-actions button {
1917
- padding: 16px 32px;
1918
- font-size: 13px;
1919
- border-radius: 999px;
1920
- transition: transform 160ms ease, box-shadow 160ms ease;
1921
- }
1922
-
1923
- .af-stepper-body .stepper-actions button:last-child {
1924
- padding: 18px 42px;
1925
- font-size: 14px;
1926
- }
1927
-
1928
- .af-stepper-body .stepper-actions button:hover:not(:disabled) {
1929
- transform: translateY(-1px);
1930
- box-shadow: 0 12px 26px rgba(90, 82, 70, 0.2);
1931
- }
1932
-
1933
- .af-stepper-body .stepper-actions button:disabled {
1934
- box-shadow: none;
1935
- }
1936
-
1937
- .af-stepper-body .stepper-actions button:focus-visible {
1938
- outline: none;
1939
- box-shadow: 0 0 0 3px rgba(201, 179, 122, 0.25);
1940
- }
1941
-
1942
- .af-stepper-body .stepper-content {
1943
- position: relative;
1944
- overflow: visible;
1945
- background: linear-gradient(135deg, rgba(255, 255, 255, 0.92), rgba(242, 236, 226, 0.88));
1946
- border: 1px solid var(--af-border-primary);
1947
- box-shadow: 0 20px 40px rgba(86, 74, 61, 0.12);
1948
- transition: transform 180ms ease, box-shadow 180ms ease;
1949
- transform-origin: right center;
1950
- animation: af-step-swipe-forward 520ms ease both;
1951
- }
1952
-
1953
- .af-stepper-body .stepper-content[data-direction="back"] {
1954
- transform-origin: left center;
1955
- animation-name: af-step-swipe-back;
1956
- }
1957
-
1958
- .af-stepper-body .stepper-content::after {
1959
- content: "";
1960
- position: absolute;
1961
- inset: 0;
1962
- background: radial-gradient(circle at top left, rgba(255, 255, 255, 0.7), transparent 60%);
1963
- opacity: 0.7;
1964
- pointer-events: none;
1965
- }
1966
-
1967
- .af-stepper-body .stepper-content:hover {
1968
- transform: translateY(-2px);
1969
- box-shadow: 0 24px 46px rgba(86, 74, 61, 0.16);
1970
- }
1971
-
1972
- .af-waiting-panel {
1973
- flex: 1;
1974
- display: flex;
1975
- align-items: center;
1976
- justify-content: center;
1977
- padding: 16px;
1978
- }
1979
-
1980
- .af-waiting-hero {
1981
- width: min(980px, 100%);
1982
- display: grid;
1983
- grid-template-columns: minmax(220px, 360px) minmax(280px, 1fr);
1984
- gap: 28px;
1985
- align-items: center;
1986
- padding: 28px;
1987
- font-family: var(--ds-font-family);
1988
- border-radius: 24px;
1989
- border: 1px solid var(--af-border-primary);
1990
- background: linear-gradient(135deg, rgba(246, 242, 235, 0.9), rgba(238, 232, 223, 0.7));
1991
- box-shadow: var(--af-shadow-lg);
1992
- }
1993
-
1994
- .af-waiting-header {
1995
- display: flex;
1996
- flex-direction: column;
1997
- gap: 12px;
1998
- }
1999
-
2000
- .af-waiting-header h2 {
2001
- font-size: 22px;
2002
- font-weight: 650;
2003
- color: var(--af-text-primary);
2004
- letter-spacing: -0.01em;
2005
- }
2006
-
2007
- .af-waiting-header p {
2008
- font-size: 13px;
2009
- line-height: 1.5;
2010
- color: var(--af-text-muted);
2011
- }
2012
-
2013
- .af-waiting-kicker {
2014
- font-size: 10px;
2015
- letter-spacing: 0.2em;
2016
- text-transform: uppercase;
2017
- color: var(--af-text-tertiary);
2018
- }
2019
-
2020
- .af-waiting-meta {
2021
- display: flex;
2022
- gap: 12px;
2023
- flex-wrap: wrap;
2024
- font-size: 11px;
2025
- color: var(--af-text-tertiary);
2026
- }
2027
-
2028
- .af-waiting-meta span {
2029
- padding: 4px 8px;
2030
- border-radius: 999px;
2031
- background: rgba(255, 255, 255, 0.7);
2032
- border: 1px solid var(--af-border-primary);
2033
- }
2034
-
2035
- .af-waiting-stack {
2036
- height: 420px;
2037
- }
2038
-
2039
- .af-scroll-stack {
2040
- height: 100%;
2041
- }
2042
-
2043
- .af-stack-item {
2044
- position: relative;
2045
- overflow: hidden;
2046
- }
2047
-
2048
- .af-stack-item::before {
2049
- content: "";
2050
- position: absolute;
2051
- inset: 0;
2052
- background: radial-gradient(circle at top left, rgba(255, 255, 255, 0.4), transparent 60%);
2053
- opacity: 0.6;
2054
- pointer-events: none;
2055
- }
2056
-
2057
- .af-stack-item.is-active {
2058
- box-shadow: 0 18px 40px rgba(35, 33, 29, 0.2);
2059
- }
2060
-
2061
- .af-stack-item.is-active .af-stack-number {
2062
- animation: af-stack-pulse 2.8s ease-in-out infinite;
2063
- }
2064
-
2065
- .af-stack-item-1 {
2066
- --af-stack-bg: linear-gradient(160deg, rgba(242, 235, 223, 0.95), rgba(229, 219, 204, 0.85));
2067
- --af-stack-border: rgba(185, 168, 142, 0.5);
2068
- --af-stack-accent: #B6886A;
2069
- --af-stack-shadow: 0 16px 36px rgba(86, 72, 60, 0.18);
2070
- }
2071
-
2072
- .af-stack-item-2 {
2073
- --af-stack-bg: linear-gradient(160deg, rgba(230, 236, 229, 0.96), rgba(214, 224, 213, 0.86));
2074
- --af-stack-border: rgba(142, 162, 150, 0.5);
2075
- --af-stack-accent: #7C9A86;
2076
- --af-stack-shadow: 0 16px 36px rgba(74, 92, 82, 0.16);
2077
- }
2078
-
2079
- .af-stack-item-3 {
2080
- --af-stack-bg: linear-gradient(160deg, rgba(231, 232, 238, 0.96), rgba(211, 214, 227, 0.86));
2081
- --af-stack-border: rgba(128, 140, 160, 0.5);
2082
- --af-stack-accent: #7B8FA8;
2083
- --af-stack-shadow: 0 16px 36px rgba(64, 70, 88, 0.16);
2084
- }
2085
-
2086
- .af-stack-item-4 {
2087
- --af-stack-bg: linear-gradient(160deg, rgba(237, 230, 225, 0.96), rgba(223, 210, 202, 0.86));
2088
- --af-stack-border: rgba(170, 150, 142, 0.5);
2089
- --af-stack-accent: #9C7A6D;
2090
- --af-stack-shadow: 0 16px 36px rgba(88, 66, 60, 0.16);
2091
- }
2092
-
2093
- .af-stack-card {
2094
- display: flex;
2095
- flex-direction: column;
2096
- gap: 12px;
2097
- }
2098
-
2099
- .af-stack-card-head {
2100
- display: flex;
2101
- align-items: center;
2102
- gap: 12px;
2103
- }
2104
-
2105
- .af-stack-number {
2106
- width: 28px;
2107
- height: 28px;
2108
- border-radius: 50%;
2109
- background: var(--af-stack-accent, var(--af-accent-primary));
2110
- color: var(--cli-ink-0);
2111
- display: inline-flex;
2112
- align-items: center;
2113
- justify-content: center;
2114
- font-size: 12px;
2115
- font-weight: 700;
2116
- box-shadow: 0 8px 18px rgba(0, 0, 0, 0.12);
2117
- }
2118
-
2119
- .af-stack-title {
2120
- font-size: 14px;
2121
- font-weight: 600;
2122
- color: var(--af-text-primary);
2123
- }
2124
-
2125
- .af-stack-subtitle {
2126
- font-size: 11px;
2127
- color: var(--af-text-muted);
2128
- }
2129
-
2130
- .af-stack-body {
2131
- display: flex;
2132
- flex-direction: column;
2133
- gap: 12px;
2134
- font-size: 12px;
2135
- color: var(--af-text-secondary);
2136
- }
2137
-
2138
- .af-stack-keyline {
2139
- font-size: 11px;
2140
- text-transform: uppercase;
2141
- letter-spacing: 0.1em;
2142
- color: var(--af-text-tertiary);
2143
- }
2144
-
2145
- .af-stack-highlight {
2146
- font-weight: 700;
2147
- background: linear-gradient(120deg, var(--af-stack-accent, var(--af-accent-primary)), #d9b8a2 70%);
2148
- -webkit-background-clip: text;
2149
- color: transparent;
2150
- }
2151
-
2152
- .af-stack-strong {
2153
- font-weight: 700;
2154
- color: var(--af-text-primary);
2155
- }
2156
-
2157
- .af-stack-tip {
2158
- padding: 8px 10px;
2159
- border-radius: 10px;
2160
- background: rgba(255, 255, 255, 0.7);
2161
- border: 1px dashed rgba(0, 0, 0, 0.08);
2162
- font-size: 11px;
2163
- color: var(--af-text-muted);
2164
- }
2165
-
2166
- .af-stack-actions {
2167
- display: flex;
2168
- gap: 8px;
2169
- flex-wrap: wrap;
2170
- }
2171
-
2172
- .af-typewriter {
2173
- font-weight: 600;
2174
- color: var(--af-text-primary);
2175
- }
2176
-
2177
- .af-typewriter-caret {
2178
- display: inline-block;
2179
- width: 8px;
2180
- height: 1em;
2181
- margin-left: 2px;
2182
- background: var(--af-accent-primary);
2183
- animation: af-caret-blink 1s step-start infinite;
2184
- vertical-align: baseline;
2185
- }
2186
-
2187
- @keyframes af-caret-blink {
2188
- 50% {
2189
- opacity: 0;
2190
- }
2191
- }
2192
-
2193
- @keyframes af-hero-enter {
2194
- 0% {
2195
- opacity: 0;
2196
- transform: translateY(12px) scale(0.98);
2197
- }
2198
- 100% {
2199
- opacity: 1;
2200
- transform: translateY(0) scale(1);
2201
- }
2202
- }
2203
-
2204
- @keyframes af-hero-float {
2205
- 0%,
2206
- 100% {
2207
- transform: translateY(0);
2208
- }
2209
- 50% {
2210
- transform: translateY(-4px);
2211
- }
2212
- }
2213
-
2214
- @keyframes af-orb-drift {
2215
- 0%,
2216
- 100% {
2217
- transform: translate3d(0, 0, 0);
2218
- }
2219
- 50% {
2220
- transform: translate3d(-12px, 8px, 0);
2221
- }
2222
- }
2223
-
2224
- @keyframes af-stepper-pulse {
2225
- 0%,
2226
- 100% {
2227
- transform: scale(1);
2228
- }
2229
- 50% {
2230
- transform: scale(1.06);
2231
- }
2232
- }
2233
-
2234
- @keyframes af-step-swipe-forward {
2235
- 0% {
2236
- opacity: 0;
2237
- transform: translateX(36px) rotateY(-6deg);
2238
- }
2239
- 100% {
2240
- opacity: 1;
2241
- transform: translateX(0) rotateY(0deg);
2242
- }
2243
- }
2244
-
2245
- @keyframes af-step-swipe-back {
2246
- 0% {
2247
- opacity: 0;
2248
- transform: translateX(-36px) rotateY(6deg);
2249
- }
2250
- 100% {
2251
- opacity: 1;
2252
- transform: translateX(0) rotateY(0deg);
2253
- }
2254
- }
2255
-
2256
- @keyframes af-stack-pulse {
2257
- 0%,
2258
- 100% {
2259
- transform: scale(1);
2260
- box-shadow: 0 8px 18px rgba(0, 0, 0, 0.12);
2261
- }
2262
- 50% {
2263
- transform: scale(1.05);
2264
- box-shadow: 0 12px 24px rgba(0, 0, 0, 0.18);
2265
- }
2266
- }
2267
-
2268
- @media (max-width: 960px) {
2269
- .af-waiting-hero {
2270
- grid-template-columns: 1fr;
2271
- }
2272
-
2273
- .af-waiting-stack {
2274
- height: 380px;
2275
- }
2276
- }
2277
-
2278
- @media (max-width: 720px) {
2279
- .af-stepper-subtitle {
2280
- white-space: normal;
2281
- }
2282
- }
2283
-
2284
- .af-step-content {
2285
- display: flex;
2286
- flex-direction: column;
2287
- gap: 14px;
2288
- font-size: 13px;
2289
- color: var(--af-text-tertiary);
2290
- max-height: clamp(220px, 38vh, 300px);
2291
- overflow-y: auto;
2292
- padding-right: 6px;
2293
- scrollbar-gutter: stable;
2294
- }
2295
-
2296
- .af-step-content::-webkit-scrollbar {
2297
- width: 6px;
2298
- }
2299
-
2300
- .af-step-content::-webkit-scrollbar-track {
2301
- background: rgba(154, 166, 139, 0.1);
2302
- border-radius: 3px;
2303
- }
2304
-
2305
- .af-step-content::-webkit-scrollbar-thumb {
2306
- background: rgba(154, 166, 139, 0.4);
2307
- border-radius: 3px;
2308
- }
2309
-
2310
- .af-step-content::-webkit-scrollbar-thumb:hover {
2311
- background: rgba(154, 166, 139, 0.6);
2312
- }
2313
-
2314
- .af-step-copy {
2315
- font-size: 13px;
2316
- color: var(--af-text-muted);
2317
- }
2318
-
2319
- .af-blank-button {
2320
- align-self: flex-start;
2321
- background: var(--af-bg-tertiary);
2322
- color: var(--af-text-tertiary);
2323
- border-radius: 10px;
2324
- padding: 8px 12px;
2325
- font-size: 12px;
2326
- transition: all 160ms ease;
2327
- }
2328
-
2329
- .af-blank-button:hover {
2330
- background: var(--af-bg-secondary);
2331
- color: var(--af-text-secondary);
2332
- }
2333
-
2334
- .af-step-row {
2335
- display: flex;
2336
- flex-direction: column;
2337
- gap: 6px;
2338
- }
2339
-
2340
- .af-step-inline {
2341
- flex-direction: row;
2342
- align-items: center;
2343
- justify-content: space-between;
2344
- }
2345
-
2346
- .af-step-label {
2347
- font-size: 11px;
2348
- font-weight: 600;
2349
- color: var(--af-text-tertiary);
2350
- }
2351
-
2352
- .af-link {
2353
- color: var(--af-text-muted);
2354
- font-size: 11px;
2355
- text-decoration: underline;
2356
- }
2357
-
2358
- .af-model-summary {
2359
- display: grid;
2360
- gap: 6px;
2361
- font-size: 11px;
2362
- color: var(--af-text-tertiary);
2363
- }
2364
-
2365
- .af-model-summary span {
2366
- color: var(--af-text-primary);
2367
- font-weight: 600;
2368
- }
2369
-
2370
- .af-model-note {
2371
- font-size: 10px;
2372
- color: var(--af-text-muted);
2373
- }
2374
-
2375
- .af-model-editor {
2376
- display: grid;
2377
- gap: 10px;
2378
- background: rgba(255, 255, 255, 0.5);
2379
- padding: 12px;
2380
- border-radius: 10px;
2381
- }
2382
-
2383
- .af-model-row {
2384
- display: grid;
2385
- grid-template-columns: 90px 1fr;
2386
- align-items: center;
2387
- gap: 12px;
2388
- }
2389
-
2390
- .af-model-label {
2391
- font-size: 11px;
2392
- font-weight: 600;
2393
- color: var(--af-text-tertiary);
2394
- }
2395
-
2396
- .af-upload-card {
2397
- border: 1px dashed var(--af-border-accent);
2398
- border-radius: 14px;
2399
- padding: 16px;
2400
- display: flex;
2401
- flex-direction: column;
2402
- align-items: center;
2403
- gap: 8px;
2404
- text-align: center;
2405
- color: var(--af-text-muted);
2406
- background: rgba(255, 255, 255, 0.7);
2407
- }
2408
-
2409
- .af-textarea {
2410
- min-height: 180px;
2411
- background: rgba(255, 255, 255, 0.8);
2412
- }
2413
-
2414
- .af-style-textarea {
2415
- min-height: 100px;
2416
- }
2417
-
2418
- .af-workspace-canvas {
2419
- position: relative;
2420
- display: flex;
2421
- flex-direction: column;
2422
- flex: 1;
2423
- min-height: 0;
2424
- border-radius: 16px;
2425
- overflow: hidden;
2426
- border: 1px solid var(--af-border-secondary);
2427
- background: rgba(255, 255, 255, 0.9);
2428
- box-sizing: border-box;
2429
- }
2430
-
2431
- .af-workspace-canvas .af-canvas-container {
2432
- flex: 1 1 auto;
2433
- min-height: 0;
2434
- height: auto;
2435
- }
2436
-
2437
- .af-canvas-stack {
2438
- position: relative;
2439
- display: flex;
2440
- flex: 1 1 auto;
2441
- min-height: 0;
2442
- overflow: hidden;
2443
- }
2444
-
2445
- .af-rendered-overlay {
2446
- position: absolute;
2447
- inset: 20px 20px 120px 20px;
2448
- z-index: 10;
2449
- display: flex;
2450
- }
2451
-
2452
-
2453
- .af-blank-canvas-hint {
2454
- position: absolute;
2455
- left: 18px;
2456
- bottom: 18px;
2457
- font-size: 11px;
2458
- color: var(--af-text-muted);
2459
- background: rgba(255, 255, 255, 0.82);
2460
- padding: 6px 10px;
2461
- border-radius: 999px;
2462
- border: 1px solid var(--af-border-secondary);
2463
- pointer-events: none;
2464
- }
2465
-
2466
- .af-rendered-view {
2467
- flex: 1;
2468
- display: flex;
2469
- flex-direction: column;
2470
- align-items: center;
2471
- justify-content: center;
2472
- gap: 18px;
2473
- border-radius: 16px;
2474
- border: 1px solid var(--af-border-secondary);
2475
- background: rgba(255, 255, 255, 0.9);
2476
- padding: 24px;
2477
- }
2478
-
2479
- .af-rendered-image {
2480
- max-width: 82%;
2481
- max-height: 420px;
2482
- border-radius: 14px;
2483
- box-shadow: 0 18px 32px rgba(60, 65, 58, 0.16);
2484
- -o-object-fit: contain;
2485
- object-fit: contain;
2486
- }
2487
-
2488
- .af-rendered-actions {
2489
- display: flex;
2490
- gap: 12px;
2491
- }
2492
-
2493
- .af-secondary-button {
2494
- padding: 8px 16px;
2495
- border-radius: 999px;
2496
- border: 1px solid var(--af-border-accent);
2497
- color: var(--af-text-tertiary);
2498
- background: transparent;
2499
- }
2500
-
2501
- .af-primary-link {
2502
- padding: 8px 16px;
2503
- border-radius: 999px;
2504
- background: var(--af-accent-primary);
2505
- color: #F7F4EF;
2506
- font-weight: 600;
2507
- }
2508
-
2509
- .af-rendered-empty {
2510
- font-size: 13px;
2511
- color: var(--af-text-muted);
2512
- }
2513
-
2514
- .af-download-overlay {
2515
- position: fixed;
2516
- inset: 0;
2517
- background: rgba(24, 22, 19, 0.35);
2518
- display: flex;
2519
- align-items: center;
2520
- justify-content: center;
2521
- z-index: 999;
2522
- backdrop-filter: blur(6px);
2523
- }
2524
-
2525
- .af-download-modal {
2526
- width: min(920px, 92vw);
2527
- border-radius: 20px;
2528
- border: 1px solid var(--af-border-secondary);
2529
- background: linear-gradient(135deg, rgba(250, 247, 242, 0.96), rgba(237, 231, 223, 0.94));
2530
- box-shadow: 0 24px 60px rgba(40, 36, 31, 0.25);
2531
- padding: 22px 22px 26px;
2532
- display: flex;
2533
- flex-direction: column;
2534
- gap: 18px;
2535
- }
2536
-
2537
- .af-download-header {
2538
- display: flex;
2539
- align-items: center;
2540
- justify-content: space-between;
2541
- gap: 12px;
2542
- }
2543
-
2544
- .af-download-title {
2545
- font-size: 18px;
2546
- font-weight: 650;
2547
- color: var(--af-text-primary);
2548
- }
2549
-
2550
- .af-download-subtitle {
2551
- font-size: 12px;
2552
- color: var(--af-text-muted);
2553
- }
2554
-
2555
- .af-download-grid {
2556
- display: grid;
2557
- grid-template-columns: repeat(2, minmax(0, 1fr));
2558
- gap: 18px;
2559
- }
2560
-
2561
- .af-download-card {
2562
- border-radius: 16px;
2563
- border: 1px solid var(--af-border-primary);
2564
- background: rgba(255, 255, 255, 0.85);
2565
- padding: 16px;
2566
- display: flex;
2567
- flex-direction: column;
2568
- gap: 12px;
2569
- box-shadow: 0 16px 28px rgba(64, 58, 48, 0.12);
2570
- }
2571
-
2572
- .af-download-card-header {
2573
- display: flex;
2574
- align-items: center;
2575
- justify-content: space-between;
2576
- gap: 8px;
2577
- }
2578
-
2579
- .af-download-chip {
2580
- font-size: 11px;
2581
- font-weight: 600;
2582
- letter-spacing: 0.02em;
2583
- text-transform: uppercase;
2584
- color: var(--af-text-tertiary);
2585
- padding: 4px 10px;
2586
- border-radius: 999px;
2587
- border: 1px solid var(--af-border-secondary);
2588
- background: rgba(255, 255, 255, 0.8);
2589
- }
2590
-
2591
- .af-download-note {
2592
- font-size: 11px;
2593
- color: var(--af-text-muted);
2594
- }
2595
-
2596
- .af-download-preview {
2597
- min-height: 180px;
2598
- border-radius: 12px;
2599
- border: 1px dashed rgba(124, 122, 116, 0.3);
2600
- background: rgba(248, 245, 240, 0.9);
2601
- display: flex;
2602
- align-items: center;
2603
- justify-content: center;
2604
- overflow: hidden;
2605
- }
2606
-
2607
- .af-download-preview img {
2608
- max-width: 100%;
2609
- max-height: 220px;
2610
- -o-object-fit: contain;
2611
- object-fit: contain;
2612
- }
2613
-
2614
- .af-download-empty {
2615
- font-size: 12px;
2616
- color: var(--af-text-tertiary);
2617
- }
2618
-
2619
- @media (max-width: 720px) {
2620
- .af-download-grid {
2621
- grid-template-columns: 1fr;
2622
- }
2623
- }
2624
-
2625
- .af-help-icon {
2626
- display: inline-flex;
2627
- align-items: center;
2628
- justify-content: center;
2629
- width: 18px;
2630
- height: 18px;
2631
- border-radius: 999px;
2632
- border: 1px solid var(--af-border-accent);
2633
- color: var(--af-text-tertiary);
2634
- background: rgba(255, 255, 255, 0.8);
2635
- }
2636
-
2637
- .af-help-wrap {
2638
- position: relative;
2639
- display: inline-flex;
2640
- align-items: center;
2641
- z-index: 10000;
2642
- }
2643
-
2644
- .af-help-popover {
2645
- position: fixed;
2646
- border-radius: 12px;
2647
- border: 1px solid var(--af-border-accent);
2648
- background: rgba(255, 255, 255, 0.96);
2649
- padding: 10px 12px;
2650
- width: 220px;
2651
- box-shadow: 0 12px 28px rgba(74, 80, 72, 0.2);
2652
- z-index: 2147483647;
2653
- pointer-events: auto;
2654
- transform: translateZ(0);
2655
- }
2656
-
2657
- .af-help-header {
2658
- display: flex;
2659
- align-items: center;
2660
- justify-content: space-between;
2661
- font-size: 11px;
2662
- text-transform: uppercase;
2663
- letter-spacing: 0.08em;
2664
- color: var(--af-text-muted);
2665
- margin-bottom: 6px;
2666
- }
2667
-
2668
- .af-help-header button {
2669
- font-size: 14px;
2670
- line-height: 1;
2671
- color: var(--af-text-muted);
2672
- }
2673
-
2674
- .af-help-body {
2675
- font-size: 12px;
2676
- color: var(--af-text-secondary);
2677
- }
2678
-
2679
- @media (max-width: 960px) {
2680
- .af-layout {
2681
- grid-template-columns: 1fr;
2682
- }
2683
-
2684
- .af-session-panel {
2685
- border-right: none;
2686
- border-bottom: 1px solid var(--af-border-secondary);
2687
- }
2688
-
2689
- .af-workspace {
2690
- padding: 16px;
2691
- }
2692
-
2693
- .af-rendered-overlay {
2694
- inset: 12px 12px 140px 12px;
2695
- }
2696
-
2697
- .af-workspace-canvas {
2698
- min-height: 0;
2699
- }
2700
-
2701
- .af-canvas-stack {
2702
- min-height: 0;
2703
- }
2704
-
2705
- .af-canvas-container {
2706
- min-height: 0;
2707
- }
2708
- }
2709
-
2710
- /* ===== AutoFigure Export Hub (Two-stage) ===== */
2711
- .af-topbar-export-btn {
2712
- height: 32px;
2713
- border-radius: 999px;
2714
- border: 1px solid #111111;
2715
- background: #111111;
2716
- color: #ffffff;
2717
- font-size: 12px;
2718
- font-weight: 600;
2719
- padding: 0 12px;
2720
- display: inline-flex;
2721
- align-items: center;
2722
- gap: 6px;
2723
- transition: transform 140ms ease, opacity 140ms ease;
2724
- }
2725
-
2726
- .af-topbar-export-btn:hover {
2727
- opacity: 0.92;
2728
- transform: translateY(-1px);
2729
- }
2730
-
2731
- .af-topbar-export-btn:disabled {
2732
- opacity: 0.45;
2733
- cursor: not-allowed;
2734
- transform: none;
2735
- }
2736
-
2737
- .af-export-overlay {
2738
- position: fixed;
2739
- inset: 0;
2740
- z-index: 1100;
2741
- background: rgba(15, 15, 15, 0.46);
2742
- backdrop-filter: blur(4px);
2743
- display: flex;
2744
- align-items: center;
2745
- justify-content: center;
2746
- padding: 2.5vh 2vw;
2747
- }
2748
-
2749
- .af-export-modal {
2750
- width: min(1280px, 80vw);
2751
- height: min(820px, 80vh);
2752
- border-radius: 20px;
2753
- border: 1px solid rgba(24, 24, 24, 0.16);
2754
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.985), rgba(247, 247, 247, 0.97));
2755
- box-shadow: 0 26px 90px rgba(0, 0, 0, 0.24);
2756
- display: flex;
2757
- flex-direction: column;
2758
- overflow: hidden;
2759
- transform: translate3d(0, 0, 0) scale(1);
2760
- }
2761
-
2762
- .af-export-modal.is-minimizing {
2763
- animation: af-export-minimize 0.5s cubic-bezier(0.24, 0.9, 0.2, 1) forwards;
2764
- }
2765
-
2766
- @keyframes af-export-minimize {
2767
- 0% {
2768
- opacity: 1;
2769
- transform: translate3d(0, 0, 0) scale(1);
2770
- }
2771
- 100% {
2772
- opacity: 0;
2773
- transform: translate3d(420px, -280px, 0) scale(0.16);
2774
- }
2775
- }
2776
-
2777
- .af-export-header {
2778
- padding: 18px 22px;
2779
- border-bottom: 1px dashed rgba(26, 26, 26, 0.22);
2780
- display: flex;
2781
- align-items: center;
2782
- justify-content: space-between;
2783
- gap: 14px;
2784
- }
2785
-
2786
- .af-export-title {
2787
- font-size: 17px;
2788
- line-height: 1.2;
2789
- font-weight: 700;
2790
- color: #111111;
2791
- }
2792
-
2793
- .af-export-subtitle {
2794
- margin-top: 4px;
2795
- font-size: 12px;
2796
- color: #5f5f5f;
2797
- }
2798
-
2799
- .af-export-close {
2800
- width: 34px;
2801
- height: 34px;
2802
- border-radius: 999px;
2803
- border: 1px solid rgba(31, 31, 31, 0.25);
2804
- background: #ffffff;
2805
- color: #1e1e1e;
2806
- display: inline-flex;
2807
- align-items: center;
2808
- justify-content: center;
2809
- transition: all 120ms ease;
2810
- }
2811
-
2812
- .af-export-close:hover {
2813
- background: #151515;
2814
- color: #ffffff;
2815
- border-color: #151515;
2816
- }
2817
-
2818
- .af-export-preview-grid {
2819
- flex: 1;
2820
- min-height: 0;
2821
- padding: 20px 22px;
2822
- display: grid;
2823
- grid-template-columns: repeat(2, minmax(0, 1fr));
2824
- gap: 16px;
2825
- }
2826
-
2827
- .af-export-preview-card {
2828
- border: 1px solid rgba(21, 21, 21, 0.12);
2829
- border-radius: 16px;
2830
- background: linear-gradient(180deg, #ffffff 0%, #f7f7f7 100%);
2831
- min-height: 0;
2832
- display: flex;
2833
- flex-direction: column;
2834
- padding: 14px;
2835
- gap: 10px;
2836
- }
2837
-
2838
- .af-export-preview-card-head {
2839
- display: flex;
2840
- align-items: center;
2841
- justify-content: space-between;
2842
- gap: 10px;
2843
- font-size: 12px;
2844
- font-weight: 600;
2845
- color: #171717;
2846
- }
2847
-
2848
- .af-export-preview-note {
2849
- font-size: 11px;
2850
- font-weight: 500;
2851
- color: #747474;
2852
- }
2853
-
2854
- .af-export-preview-box {
2855
- flex: 1;
2856
- min-height: 0;
2857
- border-radius: 12px;
2858
- border: 1px dashed rgba(37, 37, 37, 0.25);
2859
- background: #f5f5f5;
2860
- display: flex;
2861
- align-items: center;
2862
- justify-content: center;
2863
- overflow: hidden;
2864
- }
2865
-
2866
- .af-export-preview-box img {
2867
- width: 100%;
2868
- height: 100%;
2869
- -o-object-fit: contain;
2870
- object-fit: contain;
2871
- }
2872
-
2873
- .af-export-empty {
2874
- font-size: 12px;
2875
- color: #727272;
2876
- }
2877
-
2878
- .af-export-footer {
2879
- display: flex;
2880
- align-items: center;
2881
- justify-content: space-between;
2882
- gap: 12px;
2883
- padding: 14px 22px 18px;
2884
- border-top: 1px dashed rgba(26, 26, 26, 0.2);
2885
- }
2886
-
2887
- .af-export-footnote {
2888
- font-size: 12px;
2889
- color: #555555;
2890
- }
2891
-
2892
- .af-export-primary-btn,
2893
- .af-export-secondary-btn {
2894
- height: 36px;
2895
- border-radius: 10px;
2896
- padding: 0 14px;
2897
- font-size: 12px;
2898
- font-weight: 600;
2899
- display: inline-flex;
2900
- align-items: center;
2901
- justify-content: center;
2902
- border: 1px solid transparent;
2903
- transition: all 140ms ease;
2904
- }
2905
-
2906
- .af-export-primary-btn {
2907
- background: #111111;
2908
- color: #ffffff;
2909
- border-color: #111111;
2910
- }
2911
-
2912
- .af-export-primary-btn:hover:not(:disabled) {
2913
- opacity: 0.92;
2914
- }
2915
-
2916
- .af-export-secondary-btn {
2917
- background: #ffffff;
2918
- color: #1c1c1c;
2919
- border-color: rgba(26, 26, 26, 0.25);
2920
- }
2921
-
2922
- .af-export-secondary-btn:hover {
2923
- background: #f1f1f1;
2924
- }
2925
-
2926
- .af-export-primary-btn:disabled,
2927
- .af-export-secondary-btn:disabled {
2928
- opacity: 0.45;
2929
- cursor: not-allowed;
2930
- }
2931
-
2932
- .af-export-rating-layout {
2933
- flex: 1;
2934
- min-height: 0;
2935
- padding: 18px 22px;
2936
- display: grid;
2937
- grid-template-columns: repeat(2, minmax(0, 1fr));
2938
- gap: 16px;
2939
- overflow: auto;
2940
- }
2941
-
2942
- .af-export-rating-panel {
2943
- border: 1px solid rgba(21, 21, 21, 0.12);
2944
- border-radius: 14px;
2945
- background: #fafafa;
2946
- padding: 14px;
2947
- display: flex;
2948
- flex-direction: column;
2949
- gap: 12px;
2950
- }
2951
-
2952
- .af-export-rating-panel-title {
2953
- font-size: 13px;
2954
- font-weight: 700;
2955
- color: #111111;
2956
- padding-bottom: 8px;
2957
- border-bottom: 1px dashed rgba(26, 26, 26, 0.18);
2958
- }
2959
-
2960
- .af-export-rating-row {
2961
- display: flex;
2962
- flex-direction: column;
2963
- gap: 8px;
2964
- }
2965
-
2966
- .af-export-rating-label {
2967
- font-size: 12px;
2968
- font-weight: 600;
2969
- color: #1a1a1a;
2970
- display: inline-flex;
2971
- align-items: center;
2972
- gap: 6px;
2973
- }
2974
-
2975
- .af-export-metric-hint {
2976
- position: relative;
2977
- display: inline-flex;
2978
- align-items: center;
2979
- justify-content: center;
2980
- }
2981
-
2982
- .af-export-hint-icon {
2983
- width: 16px;
2984
- height: 16px;
2985
- border-radius: 999px;
2986
- border: 1px solid rgba(20, 20, 20, 0.35);
2987
- font-size: 10px;
2988
- line-height: 1;
2989
- font-weight: 700;
2990
- display: inline-flex;
2991
- align-items: center;
2992
- justify-content: center;
2993
- color: #333333;
2994
- background: #ffffff;
2995
- }
2996
-
2997
- .af-export-tooltip {
2998
- width: 240px;
2999
- max-width: 240px;
3000
- white-space: normal;
3001
- font-size: 11px;
3002
- line-height: 1.4;
3003
- color: #111111;
3004
- border: 1px solid rgba(26, 26, 26, 0.2);
3005
- background: rgba(255, 255, 255, 0.98);
3006
- }
3007
-
3008
- .af-export-score-group {
3009
- display: inline-flex;
3010
- flex-wrap: wrap;
3011
- gap: 8px;
3012
- }
3013
-
3014
- .af-export-score-btn {
3015
- min-width: 30px;
3016
- height: 30px;
3017
- border-radius: 8px;
3018
- border: 1px solid rgba(23, 23, 23, 0.25);
3019
- background: #ffffff;
3020
- color: #222222;
3021
- font-size: 12px;
3022
- font-weight: 600;
3023
- transition: all 120ms ease;
3024
- }
3025
-
3026
- .af-export-score-btn:hover {
3027
- background: #f2f2f2;
3028
- }
3029
-
3030
- .af-export-score-btn.active {
3031
- background: #111111;
3032
- color: #ffffff;
3033
- border-color: #111111;
3034
- }
3035
-
3036
- @media (max-width: 1024px) {
3037
- .af-export-modal {
3038
- width: min(96vw, 1200px);
3039
- height: min(88vh, 900px);
3040
- }
3041
-
3042
- .af-export-preview-grid,
3043
- .af-export-rating-layout {
3044
- grid-template-columns: 1fr;
3045
- }
3046
-
3047
- .af-export-footer {
3048
- flex-direction: column;
3049
- align-items: stretch;
3050
- }
3051
-
3052
- .af-export-primary-btn,
3053
- .af-export-secondary-btn {
3054
- width: 100%;
3055
- }
3056
- }