ltcai 3.6.0 → 4.0.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 (238) hide show
  1. package/README.md +39 -31
  2. package/docs/CHANGELOG.md +64 -0
  3. package/docs/REALTIME_COLLABORATION.md +3 -3
  4. package/docs/V3_FRONTEND.md +9 -8
  5. package/docs/V4_BRAIN_ARCHITECTURE.md +322 -0
  6. package/docs/V4_DIGITAL_BRAIN_RECOVERY.md +552 -0
  7. package/docs/V4_IMPLEMENTATION_PLAN.md +470 -0
  8. package/docs/kg-schema.md +51 -53
  9. package/docs/spec-vs-impl.md +10 -10
  10. package/kg_schema.py +2 -520
  11. package/knowledge_graph.py +37 -4629
  12. package/knowledge_graph_api.py +11 -127
  13. package/latticeai/__init__.py +1 -1
  14. package/latticeai/api/admin.py +16 -17
  15. package/latticeai/api/agents.py +20 -7
  16. package/latticeai/api/auth.py +46 -15
  17. package/latticeai/api/chat.py +112 -76
  18. package/latticeai/api/health.py +1 -1
  19. package/latticeai/api/hooks.py +1 -1
  20. package/latticeai/api/invitations.py +100 -0
  21. package/latticeai/api/knowledge_graph.py +139 -0
  22. package/latticeai/api/local_files.py +1 -1
  23. package/latticeai/api/mcp.py +23 -11
  24. package/latticeai/api/memory.py +1 -1
  25. package/latticeai/api/models.py +1 -1
  26. package/latticeai/api/network.py +81 -0
  27. package/latticeai/api/plugins.py +3 -6
  28. package/latticeai/api/realtime.py +5 -8
  29. package/latticeai/api/search.py +26 -2
  30. package/latticeai/api/security_dashboard.py +2 -3
  31. package/latticeai/api/setup.py +2 -2
  32. package/latticeai/api/static_routes.py +11 -16
  33. package/latticeai/api/tools.py +3 -0
  34. package/latticeai/api/ui_redirects.py +26 -0
  35. package/latticeai/api/workflow_designer.py +85 -6
  36. package/latticeai/api/workspace.py +93 -57
  37. package/latticeai/app_factory.py +1781 -0
  38. package/latticeai/brain/__init__.py +18 -0
  39. package/latticeai/brain/_kg_common.py +1123 -0
  40. package/latticeai/brain/context.py +213 -0
  41. package/latticeai/brain/conversations.py +236 -0
  42. package/latticeai/brain/discovery.py +1455 -0
  43. package/latticeai/brain/documents.py +218 -0
  44. package/latticeai/brain/identity.py +175 -0
  45. package/latticeai/brain/ingest.py +644 -0
  46. package/latticeai/brain/memory.py +102 -0
  47. package/latticeai/brain/network.py +205 -0
  48. package/latticeai/brain/projection.py +561 -0
  49. package/latticeai/brain/provenance.py +401 -0
  50. package/latticeai/brain/retrieval.py +1316 -0
  51. package/latticeai/brain/schema.py +640 -0
  52. package/latticeai/brain/store.py +216 -0
  53. package/latticeai/brain/write_master.py +225 -0
  54. package/latticeai/core/agent.py +31 -7
  55. package/latticeai/core/audit.py +0 -7
  56. package/latticeai/core/config.py +1 -1
  57. package/latticeai/core/context_builder.py +1 -2
  58. package/latticeai/core/enterprise.py +1 -1
  59. package/latticeai/core/graph_curator.py +2 -2
  60. package/latticeai/core/invitations.py +131 -0
  61. package/latticeai/core/marketplace.py +1 -1
  62. package/latticeai/core/mcp_registry.py +791 -0
  63. package/latticeai/core/model_compat.py +1 -1
  64. package/latticeai/core/model_resolution.py +0 -1
  65. package/latticeai/core/multi_agent.py +238 -4
  66. package/latticeai/core/policy.py +54 -0
  67. package/latticeai/core/realtime.py +65 -44
  68. package/latticeai/core/security.py +1 -1
  69. package/latticeai/core/sessions.py +66 -10
  70. package/latticeai/core/users.py +147 -0
  71. package/latticeai/core/workflow_engine.py +114 -2
  72. package/latticeai/core/workspace_os.py +477 -29
  73. package/latticeai/models/__init__.py +7 -0
  74. package/latticeai/models/router.py +779 -0
  75. package/latticeai/server_app.py +29 -1536
  76. package/latticeai/services/agent_runtime.py +243 -4
  77. package/latticeai/services/app_context.py +75 -14
  78. package/latticeai/services/ingestion.py +47 -0
  79. package/latticeai/services/kg_portability.py +33 -3
  80. package/latticeai/services/memory_service.py +39 -11
  81. package/latticeai/services/model_runtime.py +2 -5
  82. package/latticeai/services/platform_runtime.py +100 -23
  83. package/latticeai/services/run_executor.py +328 -0
  84. package/latticeai/services/search_service.py +17 -8
  85. package/latticeai/services/tool_dispatch.py +12 -2
  86. package/latticeai/services/triggers.py +241 -0
  87. package/latticeai/services/upload_service.py +37 -12
  88. package/latticeai/services/workspace_service.py +55 -16
  89. package/llm_router.py +29 -772
  90. package/ltcai_cli.py +1 -2
  91. package/mcp_registry.py +25 -788
  92. package/p_reinforce.py +124 -14
  93. package/package.json +10 -20
  94. package/scripts/bump_version.py +99 -0
  95. package/scripts/generate_diagrams.py +0 -1
  96. package/scripts/lint_v3.mjs +105 -18
  97. package/scripts/validate_release_artifacts.py +0 -1
  98. package/scripts/wheel_smoke.py +142 -0
  99. package/server.py +11 -7
  100. package/setup_wizard.py +1142 -0
  101. package/static/sw.js +81 -52
  102. package/static/v3/asset-manifest.json +33 -25
  103. package/static/v3/css/{lattice.base.e4cdd05d.css → lattice.base.49deefb5.css} +1 -1
  104. package/static/v3/css/lattice.base.css +1 -1
  105. package/static/v3/css/{lattice.components.9b49d614.css → lattice.components.cde18231.css} +1 -1
  106. package/static/v3/css/lattice.components.css +1 -1
  107. package/static/v3/css/{lattice.shell.8fcc9d33.css → lattice.shell.29d36d85.css} +1 -1
  108. package/static/v3/css/lattice.shell.css +1 -1
  109. package/static/v3/css/{lattice.tokens.e7018963.css → lattice.tokens.304cbc40.css} +3 -0
  110. package/static/v3/css/lattice.tokens.css +3 -0
  111. package/static/v3/css/{lattice.views.22f69117.css → lattice.views.0a18b6c5.css} +2 -2
  112. package/static/v3/css/lattice.views.css +2 -2
  113. package/static/v3/index.html +3 -4
  114. package/static/v3/js/{app.c541f955.js → app.c5c80c46.js} +1 -1
  115. package/static/v3/js/core/{api.33d6320e.js → api.ba0fbf14.js} +58 -1
  116. package/static/v3/js/core/api.js +57 -0
  117. package/static/v3/js/core/i18n.880e1fec.js +575 -0
  118. package/static/v3/js/core/i18n.js +575 -0
  119. package/static/v3/js/core/routes.37522821.js +101 -0
  120. package/static/v3/js/core/routes.js +71 -63
  121. package/static/v3/js/core/{shell.8c163e0e.js → shell.e3f6bbfa.js} +68 -39
  122. package/static/v3/js/core/shell.js +66 -37
  123. package/static/v3/js/core/{store.34ebd5e6.js → store.7b2aa044.js} +11 -1
  124. package/static/v3/js/core/store.js +11 -1
  125. package/static/v3/js/views/account.eff40715.js +143 -0
  126. package/static/v3/js/views/account.js +143 -0
  127. package/static/v3/js/views/activity.0d271ef9.js +67 -0
  128. package/static/v3/js/views/activity.js +67 -0
  129. package/static/v3/js/views/{admin-users.03bac88c.js → admin-users.f7ac7b43.js} +4 -6
  130. package/static/v3/js/views/admin-users.js +4 -6
  131. package/static/v3/js/views/{agents.014d0b74.js → agents.17c5288d.js} +35 -12
  132. package/static/v3/js/views/agents.js +35 -12
  133. package/static/v3/js/views/{chat.e6dd7dd0.js → chat.e250e2cc.js} +23 -0
  134. package/static/v3/js/views/chat.js +23 -0
  135. package/static/v3/js/views/graph-canvas.17c15d65.js +509 -0
  136. package/static/v3/js/views/graph-canvas.js +509 -0
  137. package/static/v3/js/views/{hybrid-search.b22b97e0.js → hybrid-search.2fb63ed9.js} +1 -2
  138. package/static/v3/js/views/hybrid-search.js +1 -2
  139. package/static/v3/js/views/{knowledge-graph.a96040a5.js → knowledge-graph.4d09c537.js} +60 -44
  140. package/static/v3/js/views/knowledge-graph.js +60 -44
  141. package/static/v3/js/views/network.52a4f181.js +97 -0
  142. package/static/v3/js/views/network.js +97 -0
  143. package/static/v3/js/views/{planning.9ac3e313.js → planning.4876fd77.js} +26 -5
  144. package/static/v3/js/views/planning.js +26 -5
  145. package/static/v3/js/views/runs.b63b2afa.js +144 -0
  146. package/static/v3/js/views/runs.js +144 -0
  147. package/static/v3/js/views/{settings.8631fa5e.js → settings.b7140634.js} +7 -8
  148. package/static/v3/js/views/settings.js +7 -8
  149. package/static/v3/js/views/snapshots.6f5db095.js +135 -0
  150. package/static/v3/js/views/snapshots.js +135 -0
  151. package/static/v3/js/views/{workflows.26c57290.js → workflows.7752225a.js} +87 -2
  152. package/static/v3/js/views/workflows.js +87 -2
  153. package/static/v3/js/views/workspace-admin.c466029b.js +156 -0
  154. package/static/v3/js/views/workspace-admin.js +156 -0
  155. package/static/vendor/chart.umd.min.js +20 -0
  156. package/static/vendor/fonts/inter-latin-300-normal.woff2 +0 -0
  157. package/static/vendor/fonts/inter-latin-400-normal.woff2 +0 -0
  158. package/static/vendor/fonts/inter-latin-500-normal.woff2 +0 -0
  159. package/static/vendor/fonts/inter-latin-600-normal.woff2 +0 -0
  160. package/static/vendor/fonts/inter-latin-700-normal.woff2 +0 -0
  161. package/static/vendor/fonts/inter-latin-800-normal.woff2 +0 -0
  162. package/static/vendor/fonts/inter.css +44 -0
  163. package/static/vendor/icons/tabler-icons.min.css +4 -0
  164. package/static/vendor/icons/tabler-icons.woff2 +0 -0
  165. package/static/vendor/marked.min.js +69 -0
  166. package/telegram_bot.py +1 -2
  167. package/tools/commands.py +4 -2
  168. package/tools/computer.py +1 -1
  169. package/tools/documents.py +1 -3
  170. package/tools/filesystem.py +0 -4
  171. package/tools/knowledge.py +1 -3
  172. package/tools/network.py +1 -3
  173. package/codex_telegram_bot.py +0 -195
  174. package/docs/assets/v3.4.0/agent-run.png +0 -0
  175. package/docs/assets/v3.4.0/agents.png +0 -0
  176. package/docs/assets/v3.4.0/before/chat-before.png +0 -0
  177. package/docs/assets/v3.4.0/before/files-before.png +0 -0
  178. package/docs/assets/v3.4.0/chat.png +0 -0
  179. package/docs/assets/v3.4.0/connect-folder.png +0 -0
  180. package/docs/assets/v3.4.0/files.png +0 -0
  181. package/docs/assets/v3.4.0/home.png +0 -0
  182. package/docs/assets/v3.4.0/hooks-dispatch.png +0 -0
  183. package/docs/assets/v3.4.0/knowledge-graph.png +0 -0
  184. package/docs/assets/v3.4.0/local-agent.png +0 -0
  185. package/docs/assets/v3.4.0/memory.png +0 -0
  186. package/docs/assets/v3.4.0/settings.png +0 -0
  187. package/docs/assets/v3.4.0/vision-input.png +0 -0
  188. package/docs/assets/v3.4.0/workflows.png +0 -0
  189. package/docs/assets/v3.4.1/e2e_runtime_log.txt +0 -42
  190. package/docs/assets/v3.4.1/hooks-dispatch.png +0 -0
  191. package/docs/assets/v3.4.1/local-agent.png +0 -0
  192. package/docs/images/admin-dashboard.png +0 -0
  193. package/docs/images/architecture.png +0 -0
  194. package/docs/images/enterprise.png +0 -0
  195. package/docs/images/graph.png +0 -0
  196. package/docs/images/hero.gif +0 -0
  197. package/docs/images/knowledge-graph.png +0 -0
  198. package/docs/images/lattice-ai-demo.gif +0 -0
  199. package/docs/images/lattice-ai-hero.png +0 -0
  200. package/docs/images/logo.svg +0 -33
  201. package/docs/images/mobile-responsive.png +0 -0
  202. package/docs/images/model-recommendation.png +0 -0
  203. package/docs/images/onboarding.png +0 -0
  204. package/docs/images/organization.png +0 -0
  205. package/docs/images/pipeline.png +0 -0
  206. package/docs/images/screenshot-admin.png +0 -0
  207. package/docs/images/screenshot-chat.png +0 -0
  208. package/docs/images/screenshot-graph.png +0 -0
  209. package/docs/images/skills.png +0 -0
  210. package/docs/images/workspace-dark.png +0 -0
  211. package/docs/images/workspace-light.png +0 -0
  212. package/docs/images/workspace.png +0 -0
  213. package/requirements.txt +0 -16
  214. package/static/account.html +0 -115
  215. package/static/activity.html +0 -73
  216. package/static/admin.html +0 -488
  217. package/static/agents.html +0 -139
  218. package/static/chat.html +0 -844
  219. package/static/css/reference/account.css +0 -439
  220. package/static/css/reference/admin.css +0 -610
  221. package/static/css/reference/base.css +0 -1661
  222. package/static/css/reference/chat.css +0 -4623
  223. package/static/css/reference/graph.css +0 -1016
  224. package/static/css/responsive.css +0 -861
  225. package/static/graph.html +0 -124
  226. package/static/platform.css +0 -104
  227. package/static/plugins.html +0 -136
  228. package/static/scripts/account.js +0 -238
  229. package/static/scripts/admin.js +0 -1614
  230. package/static/scripts/chat.js +0 -5081
  231. package/static/scripts/graph.js +0 -1804
  232. package/static/scripts/platform.js +0 -64
  233. package/static/scripts/ux.js +0 -167
  234. package/static/scripts/workspace.js +0 -948
  235. package/static/v3/js/core/routes.2ce3815a.js +0 -93
  236. package/static/workflows.html +0 -146
  237. package/static/workspace.css +0 -1121
  238. package/static/workspace.html +0 -357
@@ -1,1661 +0,0 @@
1
- /* Lattice AI — reference base skin (shared resets, rail, dashboard, page-1 skins). Token-native; values come from /static/css/tokens.css. */
2
-
3
- /* Lattice AI PPT reference skin.
4
- The deck uses a bright basic workspace and a dark administrator workspace. */
5
-
6
- /* 색 토큰(--ref-*, color-scheme 포함)은 tokens.css 가 라이트/다크 모두 제공한다. */
7
-
8
- .lattice-ref-auth,
9
- .lattice-ref-chat {
10
- font-family: "Inter", "Pretendard", "Apple SD Gothic Neo", -apple-system, BlinkMacSystemFont, sans-serif;
11
- }
12
-
13
- .lattice-ref-auth {
14
- background:
15
- radial-gradient(circle at 74% 25%, rgba(255,255,255,0.70), transparent 16%),
16
- radial-gradient(circle at 80% 58%, rgba(111,66,232,0.15), transparent 28%),
17
- radial-gradient(circle at 15% 72%, rgba(111,66,232,0.13), transparent 34%),
18
- linear-gradient(135deg, var(--surface) 0%, var(--surface) 48%, #ffffff 100%);
19
- min-height: 100dvh;
20
- /* 타이틀바(58px)를 제외한 나머지 영역의 수직 중앙에 카드 배치 */
21
- flex-direction: column;
22
- align-items: center;
23
- justify-content: center;
24
- /* padding-top: 타이틀바 높이만큼만 → justify-content가 나머지 공간에서 중앙 정렬 */
25
- padding: 58px 18px clamp(72px, 8dvh, 90px);
26
- overflow: auto;
27
- }
28
-
29
- .lattice-ref-auth .login-shell {
30
- width: min(460px, calc(100vw - 36px));
31
- display: block;
32
- z-index: 3;
33
- }
34
-
35
- .lattice-ref-auth .brand-preview {
36
- display: none;
37
- }
38
-
39
- .lattice-ref-auth .card {
40
- width: 100%;
41
- min-height: auto;
42
- max-height: none;
43
- overflow: visible;
44
- border-radius: 16px;
45
- padding: clamp(40px, 4.6dvh, 50px) clamp(28px, 3.6vw, 40px) clamp(20px, 2.4dvh, 28px);
46
- background: var(--card);
47
- border-color: var(--accent-soft);
48
- box-shadow: 0 20px 64px rgba(102, 82, 168, 0.20), inset 0 1px 0 rgba(255,255,255,0.86);
49
- backdrop-filter: none; /* glass removed v3.5.0 */
50
- }
51
-
52
- .lattice-ref-auth .card::before {
53
- display: none;
54
- }
55
-
56
- .auth-titlebar {
57
- position: fixed;
58
- inset: 0 0 auto;
59
- height: 58px;
60
- z-index: 4;
61
- display: flex;
62
- align-items: center;
63
- justify-content: space-between;
64
- padding: 0 22px;
65
- color: var(--ref-ink);
66
- background: var(--surface);
67
- border-bottom: 1px solid rgba(111,66,232,0.08);
68
- backdrop-filter: none; /* glass removed v3.5.0 */
69
- }
70
-
71
- .auth-window-brand {
72
- display: inline-flex;
73
- align-items: center;
74
- gap: 10px;
75
- font-size: 21px;
76
- font-weight: 720;
77
- }
78
-
79
- .auth-window-brand i {
80
- color: var(--ref-purple);
81
- font-size: 26px;
82
- }
83
-
84
- .auth-window-controls {
85
- display: inline-flex;
86
- align-items: center;
87
- gap: 30px;
88
- }
89
-
90
- .auth-window-controls span {
91
- width: 18px;
92
- height: 18px;
93
- position: relative;
94
- }
95
-
96
- .auth-window-controls span:nth-child(1)::before {
97
- content: '';
98
- position: absolute;
99
- left: 2px;
100
- right: 2px;
101
- top: 9px;
102
- height: 2px;
103
- background: #202033;
104
- }
105
-
106
- .auth-window-controls span:nth-child(2)::before {
107
- content: '';
108
- position: absolute;
109
- inset: 2px;
110
- border: 2px solid #202033;
111
- border-radius: 2px;
112
- }
113
-
114
- .auth-window-controls span:nth-child(3)::before,
115
- .auth-window-controls span:nth-child(3)::after {
116
- content: '';
117
- position: absolute;
118
- top: 8px;
119
- left: 1px;
120
- width: 18px;
121
- height: 2px;
122
- background: #202033;
123
- }
124
-
125
- .auth-window-controls span:nth-child(3)::before { transform: rotate(45deg); }
126
- .auth-window-controls span:nth-child(3)::after { transform: rotate(-45deg); }
127
-
128
- .auth-wave {
129
- position: fixed;
130
- z-index: 0;
131
- pointer-events: none;
132
- opacity: 0.78;
133
- filter: blur(0.2px);
134
- }
135
-
136
- .auth-wave::before,
137
- .auth-wave::after {
138
- content: '';
139
- position: absolute;
140
- inset: 0;
141
- border-radius: 50% 50% 0 0;
142
- border-top: 3px solid rgba(255,255,255,0.68);
143
- transform: skewY(-11deg);
144
- }
145
-
146
- .auth-wave::after {
147
- inset: 34px -80px -20px 40px;
148
- border-top-color: rgba(124,92,255,0.16);
149
- }
150
-
151
- .auth-wave-left {
152
- left: -130px;
153
- bottom: -80px;
154
- width: 780px;
155
- height: 360px;
156
- background: radial-gradient(ellipse at 45% 80%, rgba(111,66,232,0.23), transparent 58%);
157
- transform: rotate(4deg);
158
- }
159
-
160
- .auth-wave-right {
161
- right: -140px;
162
- bottom: -88px;
163
- width: 760px;
164
- height: 340px;
165
- background: radial-gradient(ellipse at 55% 82%, rgba(111,66,232,0.20), transparent 58%);
166
- transform: scaleX(-1) rotate(2deg);
167
- }
168
-
169
- .auth-network {
170
- position: fixed;
171
- right: 160px;
172
- top: 300px;
173
- width: 430px;
174
- height: 330px;
175
- z-index: 0;
176
- opacity: 0.28;
177
- pointer-events: none;
178
- background:
179
- linear-gradient(32deg, transparent 0 33%, rgba(255,255,255,0.9) 33.2% 33.5%, transparent 33.7%),
180
- linear-gradient(90deg, transparent 0 49.8%, rgba(255,255,255,0.8) 50% 50.3%, transparent 50.5%),
181
- linear-gradient(148deg, transparent 0 38%, rgba(255,255,255,0.9) 38.2% 38.5%, transparent 38.7%);
182
- }
183
-
184
- .auth-network span {
185
- position: absolute;
186
- width: 13px;
187
- height: 13px;
188
- border-radius: 50%;
189
- background: var(--surface);
190
- box-shadow: 0 0 20px rgba(255,255,255,0.9);
191
- }
192
-
193
- .auth-network span:nth-child(1) { left: 36px; top: 82px; }
194
- .auth-network span:nth-child(2) { left: 155px; top: 42px; width: 20px; height: 20px; }
195
- .auth-network span:nth-child(3) { left: 294px; top: 68px; }
196
- .auth-network span:nth-child(4) { left: 190px; top: 170px; }
197
- .auth-network span:nth-child(5) { left: 350px; top: 168px; }
198
- .auth-network span:nth-child(6) { left: 255px; top: 250px; width: 18px; height: 18px; }
199
-
200
- .lattice-ref-auth .hero-logo {
201
- display: flex;
202
- justify-content: center;
203
- align-items: center;
204
- gap: clamp(10px, 1.5vw, 16px);
205
- margin-bottom: clamp(12px, 1.8dvh, 20px);
206
- }
207
-
208
- .lattice-ref-auth .hero-logo-mark {
209
- width: clamp(46px, 5.4dvh, 62px);
210
- height: clamp(46px, 5.4dvh, 62px);
211
- display: grid;
212
- place-items: center;
213
- color: var(--ref-purple);
214
- font-size: clamp(40px, 4.8dvh, 56px);
215
- filter: drop-shadow(0 8px 14px rgba(111,66,232,0.20));
216
- }
217
-
218
- .lattice-ref-auth .hero-logo-mark i {
219
- display: none;
220
- }
221
-
222
- .lattice-ref-auth .hero-logo-mark::before {
223
- content: '';
224
- width: 86%;
225
- height: 86%;
226
- display: block;
227
- background:
228
- linear-gradient(30deg, transparent 42%, rgba(255,255,255,0.55) 42% 47%, transparent 47%),
229
- linear-gradient(90deg, transparent 42%, rgba(255,255,255,0.48) 42% 47%, transparent 47%),
230
- linear-gradient(150deg, transparent 42%, rgba(255,255,255,0.48) 42% 47%, transparent 47%),
231
- conic-gradient(from 30deg, #4f7dff, var(--accent), var(--accent-2), #4f7dff);
232
- clip-path: polygon(50% 0, 88% 20%, 88% 67%, 50% 100%, 12% 67%, 12% 20%);
233
- border-radius: 18px;
234
- box-shadow: inset 0 0 0 8px rgba(255,255,255,0.16), 0 14px 28px rgba(111,66,232,0.24);
235
- }
236
-
237
- .lattice-ref-auth .title {
238
- margin: 0;
239
- font-size: clamp(28px, 3vw, 40px);
240
- line-height: 1;
241
- letter-spacing: 0;
242
- text-align: left;
243
- -webkit-text-fill-color: transparent;
244
- background: linear-gradient(90deg, #10142b 0 68%, var(--ref-purple) 69% 100%);
245
- -webkit-background-clip: text;
246
- background-clip: text;
247
- }
248
-
249
- .lattice-ref-auth .subtitle {
250
- margin: 0 0 clamp(14px, 1.9dvh, 22px);
251
- color: var(--text);
252
- font-size: clamp(17px, 2vw, 24px);
253
- font-weight: 860;
254
- line-height: 1.25;
255
- letter-spacing: 0;
256
- }
257
-
258
- .lattice-ref-auth .subtitle::first-line {
259
- color: var(--text);
260
- }
261
-
262
- .lattice-ref-auth .submit,
263
- .lattice-ref-chat .send-btn,
264
- .lattice-ref-chat .workspace-icon,
265
- .lattice-ref-chat .mode-icon {
266
- background: linear-gradient(135deg, var(--ref-purple), #7b61ff);
267
- }
268
-
269
- .lattice-ref-auth .input {
270
- height: 100%;
271
- margin: 0;
272
- border: 0;
273
- background: transparent;
274
- box-shadow: none;
275
- padding: 0 10px;
276
- color: var(--ref-ink);
277
- font-size: clamp(13px, 1.3vw, 15px);
278
- font-weight: 650;
279
- }
280
-
281
- .lattice-ref-auth .input:focus {
282
- box-shadow: none;
283
- border: 0;
284
- }
285
-
286
- .auth-field {
287
- height: clamp(40px, 4.4dvh, 46px);
288
- display: flex;
289
- align-items: center;
290
- gap: 8px;
291
- margin-bottom: clamp(8px, 1.1dvh, 12px);
292
- padding: 0 16px;
293
- border: 1px solid #d9d6e4;
294
- border-radius: 8px;
295
- background: var(--surface);
296
- box-shadow: inset 0 1px 0 rgba(255,255,255,0.8);
297
- color: var(--faint);
298
- }
299
-
300
- .auth-field:focus-within {
301
- border-color: rgba(111,66,232,0.44);
302
- box-shadow: 0 0 0 3px rgba(111,66,232,0.09), inset 0 1px 0 rgba(255,255,255,0.8);
303
- }
304
-
305
- .auth-field > i {
306
- font-size: 19px;
307
- }
308
-
309
- .field-eye {
310
- border: 0;
311
- background: transparent;
312
- color: var(--faint);
313
- font-size: 18px;
314
- cursor: pointer;
315
- }
316
-
317
- .lattice-ref-auth .msg {
318
- min-height: clamp(14px, 1.5dvh, 18px);
319
- margin: 2px 0 4px;
320
- color: #d44f5c;
321
- }
322
-
323
- .lattice-ref-auth .submit,
324
- .lattice-ref-auth .register-cta {
325
- height: clamp(42px, 4.6dvh, 48px);
326
- border-radius: 8px;
327
- font-size: clamp(14px, 1.5vw, 17px);
328
- }
329
-
330
- .lattice-ref-auth .submit {
331
- margin-top: 0;
332
- box-shadow: 0 10px 24px rgba(111,66,232,0.24);
333
- }
334
-
335
- .lattice-ref-auth .register-cta {
336
- width: 100%;
337
- margin-top: clamp(8px, 1.1dvh, 12px);
338
- border: 2px solid rgba(111,66,232,0.56);
339
- color: var(--ref-purple);
340
- background: rgba(255,255,255,0.28);
341
- font-family: inherit;
342
- font-weight: 850;
343
- cursor: pointer;
344
- }
345
-
346
- .lattice-ref-auth .sso-divider {
347
- margin: clamp(12px, 1.5dvh, 18px) 0 clamp(8px, 1dvh, 10px);
348
- color: var(--muted);
349
- font-size: clamp(12px, 1.2vw, 14px);
350
- font-weight: 700;
351
- }
352
-
353
- .lattice-ref-auth .sso-divider::before,
354
- .lattice-ref-auth .sso-divider::after {
355
- background: var(--surface-2);
356
- }
357
-
358
- .lattice-ref-auth .sso-btn {
359
- height: clamp(40px, 4.5dvh, 48px);
360
- margin-bottom: clamp(8px, 1.1dvh, 12px);
361
- justify-content: flex-start;
362
- gap: clamp(10px, 1.4vw, 16px);
363
- padding: 0 clamp(18px, 2.8vw, 28px);
364
- border-radius: 8px;
365
- border-color: #d9d6e4;
366
- background: var(--surface-2);
367
- color: var(--text);
368
- font-size: clamp(13px, 1.4vw, 16px);
369
- font-weight: 850;
370
- box-shadow: 0 6px 16px rgba(88,72,150,0.08);
371
- }
372
-
373
- .ms-logo {
374
- width: clamp(22px, 2.5dvh, 26px);
375
- height: clamp(22px, 2.5dvh, 26px);
376
- display: grid;
377
- grid-template-columns: 1fr 1fr;
378
- gap: 3px;
379
- flex: 0 0 auto;
380
- }
381
-
382
- .ms-logo b:nth-child(1) { background: #f35325; }
383
- .ms-logo b:nth-child(2) { background: #81bc06; }
384
- .ms-logo b:nth-child(3) { background: #05a6f0; }
385
- .ms-logo b:nth-child(4) { background: #ffba08; }
386
-
387
- .okta-logo {
388
- width: clamp(22px, 2.5dvh, 28px);
389
- height: clamp(22px, 2.5dvh, 28px);
390
- border-radius: 50%;
391
- flex: 0 0 auto;
392
- background:
393
- conic-gradient(from 0deg, #111 0 10%, transparent 10% 17%, #111 17% 27%, transparent 27% 34%, #111 34% 44%, transparent 44% 51%, #111 51% 61%, transparent 61% 68%, #111 68% 78%, transparent 78% 85%, #111 85% 95%, transparent 95% 100%);
394
- }
395
-
396
- .local-start {
397
- display: flex;
398
- align-items: center;
399
- justify-content: center;
400
- gap: 12px;
401
- width: 100%;
402
- margin-top: clamp(10px, 1.4dvh, 16px);
403
- border: 0;
404
- background: transparent;
405
- color: var(--ref-purple);
406
- font-family: inherit;
407
- font-size: clamp(13px, 1.3vw, 16px);
408
- font-weight: 850;
409
- cursor: pointer;
410
- }
411
-
412
- .local-start i {
413
- font-size: clamp(17px, 1.9dvh, 22px);
414
- }
415
-
416
- .lattice-ref-auth .lang-wrap {
417
- position: absolute;
418
- top: 12px;
419
- right: 12px;
420
- z-index: 6;
421
- }
422
-
423
- .lattice-ref-auth .lang-btn {
424
- height: auto;
425
- border: 1px solid rgba(111,66,232,0.38);
426
- border-radius: 12px;
427
- padding: 4px 9px;
428
- color: var(--text);
429
- background: var(--surface-2);
430
- font-size: 11px;
431
- font-weight: 700;
432
- box-shadow: 0 1px 5px rgba(111,66,232,0.08);
433
- }
434
-
435
- .lattice-ref-auth .lang-menu {
436
- background: var(--surface-elevated);
437
- min-width: 110px;
438
- }
439
-
440
- .lattice-ref-auth .lang-opt {
441
- font-size: 11px;
442
- padding: 5px 8px;
443
- }
444
-
445
- .auth-footer {
446
- position: fixed;
447
- left: 48px;
448
- bottom: 28px;
449
- z-index: 5;
450
- display: flex;
451
- align-items: center;
452
- gap: 34px;
453
- }
454
-
455
- .auth-footer button {
456
- display: inline-flex;
457
- align-items: center;
458
- gap: 10px;
459
- height: 42px;
460
- border-radius: 11px;
461
- border: 1px solid var(--accent-soft);
462
- font-size: 16px;
463
- color: var(--muted);
464
- box-shadow: 0 8px 22px rgba(88,72,150,0.06);
465
- cursor: pointer;
466
- }
467
-
468
- .auth-footer a {
469
- color: var(--muted);
470
- text-decoration: none;
471
- font-size: 16px;
472
- font-weight: 720;
473
- }
474
-
475
- .lattice-ref-auth #register-section .hero-logo,
476
- .lattice-ref-auth #register-section .logo {
477
- display: none;
478
- }
479
-
480
- .lattice-ref-auth #register-section .title {
481
- text-align: center;
482
- font-size: 38px;
483
- margin-bottom: 10px;
484
- display: block;
485
- }
486
-
487
- .lattice-ref-auth #register-section .subtitle {
488
- font-size: 16px;
489
- text-align: center;
490
- color: var(--ref-muted);
491
- letter-spacing: 0;
492
- }
493
-
494
- .lattice-ref-auth #register-section .input {
495
- height: 48px;
496
- margin-bottom: 10px;
497
- border: 1px solid #d9d6e4;
498
- background: var(--input);
499
- border-radius: 9px;
500
- padding: 0 14px;
501
- font-size: 15px;
502
- }
503
-
504
- :root[data-lt-theme="dark"] .lattice-ref-auth .card {
505
- background: rgba(22, 22, 58, 0.94);
506
- border-color: rgba(167, 139, 250, 0.24);
507
- box-shadow: 0 28px 80px rgba(0, 0, 0, 0.58);
508
- backdrop-filter: none;
509
- }
510
-
511
- :root[data-lt-theme="dark"] .lattice-ref-auth .title,
512
- :root[data-lt-theme="dark"] .lattice-ref-auth #register-section .title {
513
- background: linear-gradient(90deg, #f4f5fb 0 68%, var(--accent-2) 69% 100%);
514
- -webkit-background-clip: text;
515
- background-clip: text;
516
- -webkit-text-fill-color: transparent;
517
- }
518
-
519
- :root[data-lt-theme="dark"] .lattice-ref-auth .input,
520
- :root[data-lt-theme="dark"] .lattice-ref-auth #register-section .input {
521
- background: rgba(255, 255, 255, 0.06);
522
- border-color: rgba(160, 170, 230, 0.24);
523
- color: var(--text);
524
- }
525
-
526
- :root[data-lt-theme="dark"] .lattice-ref-auth .input::placeholder {
527
- color: rgba(226, 232, 255, 0.52);
528
- }
529
-
530
- :root[data-lt-theme="dark"] .auth-window-controls span:nth-child(1)::before,
531
- :root[data-lt-theme="dark"] .auth-window-controls span:nth-child(3)::before,
532
- :root[data-lt-theme="dark"] .auth-window-controls span:nth-child(3)::after {
533
- background: var(--text);
534
- }
535
-
536
- :root[data-lt-theme="dark"] .auth-window-controls span:nth-child(2)::before {
537
- border-color: var(--text);
538
- }
539
-
540
- .lattice-ref-auth #register-section .submit {
541
- height: 54px;
542
- font-size: 17px;
543
- }
544
-
545
- @media (max-width: 1100px) {
546
- .auth-window-controls {
547
- display: none;
548
- }
549
-
550
- .auth-network {
551
- display: none;
552
- }
553
- }
554
-
555
- @media (max-height: 760px) {
556
- .lattice-ref-auth {
557
- padding-top: 58px;
558
- padding-bottom: 16px;
559
- }
560
-
561
- .auth-footer {
562
- display: none;
563
- }
564
-
565
- .lattice-ref-auth .card {
566
- padding: 38px 30px 16px;
567
- }
568
-
569
- .lattice-ref-auth .hero-logo {
570
- margin-bottom: 8px;
571
- }
572
-
573
- .lattice-ref-auth .hero-logo-mark {
574
- width: 40px;
575
- height: 40px;
576
- font-size: 36px;
577
- }
578
-
579
- .lattice-ref-auth .title {
580
- font-size: 26px;
581
- }
582
-
583
- .lattice-ref-auth .subtitle {
584
- margin-bottom: 12px;
585
- font-size: 16px;
586
- line-height: 1.2;
587
- }
588
-
589
- .auth-field,
590
- .lattice-ref-auth .submit,
591
- .lattice-ref-auth .register-cta,
592
- .lattice-ref-auth .sso-btn {
593
- height: 38px;
594
- }
595
-
596
- .auth-field {
597
- margin-bottom: 7px;
598
- }
599
-
600
- .lattice-ref-auth .submit,
601
- .lattice-ref-auth .register-cta,
602
- .lattice-ref-auth .sso-btn,
603
- .local-start {
604
- font-size: 13px;
605
- }
606
-
607
- .lattice-ref-auth .sso-divider {
608
- margin: 10px 0 6px;
609
- font-size: 12px;
610
- }
611
-
612
- .lattice-ref-auth .sso-btn {
613
- margin-bottom: 7px;
614
- }
615
-
616
- .local-start {
617
- margin-top: 8px;
618
- }
619
- }
620
-
621
- @media (max-width: 760px) {
622
- .auth-titlebar,
623
- .auth-footer,
624
- .auth-wave,
625
- .auth-network {
626
- display: none;
627
- }
628
-
629
- .lattice-ref-auth {
630
- padding: 18px;
631
- }
632
-
633
- .lattice-ref-auth .card {
634
- min-height: auto;
635
- max-height: none;
636
- padding: 28px 22px;
637
- }
638
-
639
- .lattice-ref-auth .hero-logo {
640
- gap: 12px;
641
- }
642
-
643
- .lattice-ref-auth .hero-logo-mark {
644
- width: 58px;
645
- height: 58px;
646
- font-size: 52px;
647
- }
648
-
649
- .lattice-ref-auth .title {
650
- font-size: 34px;
651
- }
652
-
653
- .lattice-ref-auth .subtitle {
654
- font-size: 26px;
655
- }
656
-
657
- }
658
-
659
- /* Shared PPT rail */
660
- .reference-rail {
661
- background: var(--sidebar);
662
- border-right: 1px solid var(--ref-line);
663
- color: var(--ref-ink);
664
- min-height: 100vh;
665
- padding: 26px 18px;
666
- display: flex;
667
- flex-direction: column;
668
- gap: 24px;
669
- box-shadow: 12px 0 48px rgba(88,72,150,0.08);
670
- }
671
-
672
- .rail-brand {
673
- display: flex;
674
- align-items: center;
675
- gap: 12px;
676
- font-size: 23px;
677
- font-weight: 850;
678
- letter-spacing: -0.04em;
679
- }
680
-
681
- .rail-brand i {
682
- color: var(--ref-purple);
683
- font-size: 30px;
684
- }
685
-
686
- .rail-brand span {
687
- display: block;
688
- font-size: 12px;
689
- color: var(--ref-purple-2);
690
- letter-spacing: 0;
691
- }
692
-
693
- .reference-rail nav {
694
- display: flex;
695
- flex-direction: column;
696
- gap: 9px;
697
- }
698
-
699
- .reference-rail a,
700
- .reference-nav-item {
701
- width: 100%;
702
- border: 0;
703
- text-decoration: none;
704
- display: flex;
705
- align-items: center;
706
- gap: 12px;
707
- border-radius: 10px;
708
- padding: 13px 16px;
709
- color: var(--text);
710
- font: inherit;
711
- font-size: 15px;
712
- font-weight: 700;
713
- background: transparent;
714
- cursor: pointer;
715
- /* Animate surface affordances, but never `color`: a color transition on
716
- theme switch would briefly render the rail link dark-on-dark (the v226
717
- dark-mode contrast gate caught this on slow CI). Color flips instantly. */
718
- transition: background-color 160ms ease, border-color 160ms ease, transform 160ms ease;
719
- }
720
-
721
- .reference-rail a.active,
722
- .reference-rail a:hover,
723
- .reference-nav-item.active,
724
- .reference-nav-item:hover {
725
- color: var(--ref-purple);
726
- background: linear-gradient(90deg, var(--border), rgba(111,66,232,0.05));
727
- }
728
-
729
- .reference-rail i,
730
- .reference-nav-item i {
731
- font-size: 20px;
732
- }
733
-
734
- .rail-project {
735
- margin-top: auto;
736
- border: 1px solid var(--ref-line);
737
- border-radius: 12px;
738
- padding: 15px 16px;
739
- background: var(--surface);
740
- color: var(--ref-muted);
741
- }
742
-
743
- .rail-project span {
744
- display: block;
745
- font-size: 12px;
746
- margin-bottom: 4px;
747
- }
748
-
749
- .rail-project strong {
750
- display: block;
751
- color: var(--ref-ink);
752
- font-size: 14px;
753
- }
754
-
755
- /* Chat and home dashboard */
756
- .lattice-ref-chat {
757
- background: var(--app-bg);
758
- }
759
-
760
- .lattice-ref-chat .sidebar {
761
- width: 280px;
762
- min-width: 280px;
763
- background: var(--sidebar);
764
- border-right: 1px solid rgba(111,66,232,0.13);
765
- box-shadow: 12px 0 46px rgba(88,72,150,0.08);
766
- }
767
-
768
- .lattice-ref-chat .sidebar-header {
769
- padding: 30px 24px 18px;
770
- border-bottom: 0;
771
- }
772
-
773
- .lattice-ref-chat .logo-box {
774
- width: 42px;
775
- height: 42px;
776
- border-radius: 13px;
777
- }
778
-
779
- .lattice-ref-chat .brand-title {
780
- color: var(--ref-ink);
781
- font-size: 23px;
782
- letter-spacing: -0.04em;
783
- }
784
-
785
- .lattice-ref-chat .brand-subtitle {
786
- display: inline-flex;
787
- margin-top: 6px;
788
- padding: 3px 10px;
789
- border-radius: 999px;
790
- color: var(--ref-purple);
791
- background: rgba(111,66,232,0.10);
792
- font-size: 12px;
793
- font-weight: 700;
794
- }
795
-
796
- .lattice-ref-chat .user-strip {
797
- margin: 0 18px 16px;
798
- border: 1px solid var(--ref-line);
799
- border-radius: 14px;
800
- background: var(--sidebar);
801
- order: 20;
802
- }
803
-
804
- .lattice-ref-chat .reference-side-nav {
805
- padding: 12px 18px;
806
- }
807
-
808
- .lattice-ref-chat .sidebar-search,
809
- .lattice-ref-chat .sidebar-primary-actions {
810
- margin: 0 18px;
811
- padding-left: 0;
812
- padding-right: 0;
813
- }
814
-
815
- .lattice-ref-chat .history-container {
816
- padding: 10px 18px;
817
- }
818
-
819
- .lattice-ref-chat .sidebar-footer {
820
- padding: 14px 18px 18px;
821
- }
822
-
823
- .lattice-ref-chat .new-chat-btn,
824
- .lattice-ref-chat .status-btn,
825
- .lattice-ref-chat .setup-wizard-sidebar-btn,
826
- .lattice-ref-chat .admin-btn,
827
- .lattice-ref-chat .file-type-btn,
828
- .lattice-ref-chat .logout-btn,
829
- .lattice-ref-chat .status-pill,
830
- .lattice-ref-chat .model-badge {
831
- border: 1px solid rgba(111,66,232,0.16);
832
- border-radius: 10px;
833
- background: var(--surface-2);
834
- color: var(--ref-ink);
835
- }
836
-
837
- .lattice-ref-chat .new-chat-btn:first-child {
838
- border-color: rgba(111,66,232,0.28);
839
- color: var(--ref-purple);
840
- }
841
-
842
- .lattice-ref-chat .chat-header {
843
- min-height: 88px;
844
- padding: 18px 28px;
845
- background: var(--sidebar);
846
- border-bottom: 1px solid rgba(111,66,232,0.11);
847
- box-shadow: 0 2px 12px rgba(88,72,150,0.06);
848
- backdrop-filter: none; /* glass removed v3.5.0 */
849
- }
850
-
851
- .lattice-ref-chat .messages-viewport {
852
- padding: 30px 38px 20px;
853
- }
854
-
855
- .lattice-ref-chat .ops-strip {
856
- display: flex;
857
- }
858
-
859
- .lattice-ref-chat .empty-state {
860
- width: min(100%, 1320px);
861
- max-width: none;
862
- margin: 0 auto;
863
- text-align: left;
864
- }
865
-
866
- .reference-home {
867
- display: flex;
868
- flex-direction: column;
869
- gap: 22px;
870
- }
871
-
872
- .reference-home-head h1 {
873
- margin: 0;
874
- color: var(--ref-ink);
875
- font-size: clamp(30px, 3vw, 40px);
876
- font-weight: 860;
877
- letter-spacing: -0.04em;
878
- }
879
-
880
- .reference-home-head p {
881
- margin: 8px 0 0;
882
- color: var(--ref-muted);
883
- font-size: 15px;
884
- }
885
-
886
- .reference-card-grid {
887
- display: grid;
888
- grid-template-columns: repeat(3, minmax(0, 1fr));
889
- gap: 20px;
890
- }
891
-
892
- .reference-dash-card,
893
- .reference-lists article {
894
- border: 1px solid var(--ref-line);
895
- border-radius: 18px;
896
- background: var(--ref-card);
897
- box-shadow: var(--ref-shadow);
898
- transition: transform 200ms var(--lt-motion-ease, ease), box-shadow 200ms var(--lt-motion-ease, ease);
899
- }
900
-
901
- .reference-dash-card:hover,
902
- .reference-lists article:hover {
903
- transform: translateY(-3px);
904
- box-shadow: 0 24px 64px rgba(88,72,150,0.18);
905
- }
906
-
907
- .reference-dash-card {
908
- min-height: 260px;
909
- padding: 22px 24px;
910
- }
911
-
912
- .reference-card-icon {
913
- width: 56px;
914
- height: 56px;
915
- border-radius: 15px;
916
- display: grid;
917
- place-items: center;
918
- margin-bottom: 18px;
919
- color: var(--ref-purple);
920
- background: linear-gradient(135deg, rgba(111,66,232,0.13), rgba(111,66,232,0.06));
921
- font-size: 28px;
922
- }
923
-
924
- .reference-dash-card h3 {
925
- margin: 0 0 20px;
926
- color: var(--ref-ink);
927
- font-size: 22px;
928
- }
929
-
930
- .reference-dash-card p {
931
- color: var(--ref-muted);
932
- margin: 0 0 14px;
933
- }
934
-
935
- .green-dot {
936
- display: inline-block;
937
- width: 11px;
938
- height: 11px;
939
- border-radius: 50%;
940
- background: #28c66f;
941
- box-shadow: 0 0 0 8px rgba(40,198,111,0.12);
942
- margin-right: 10px;
943
- }
944
-
945
- .reference-stat-row {
946
- display: flex;
947
- justify-content: space-between;
948
- align-items: center;
949
- color: var(--ref-muted);
950
- margin: 12px 0;
951
- }
952
-
953
- .reference-stat-row strong,
954
- .reference-big-number {
955
- color: var(--ref-purple);
956
- font-size: 22px;
957
- }
958
-
959
- .reference-big-number {
960
- font-size: 34px;
961
- font-weight: 850;
962
- }
963
-
964
- .reference-progress {
965
- height: 10px;
966
- border-radius: 999px;
967
- background: var(--surface);
968
- overflow: hidden;
969
- margin: 16px 0 26px;
970
- }
971
-
972
- .reference-progress span {
973
- display: block;
974
- height: 100%;
975
- border-radius: inherit;
976
- background: linear-gradient(90deg, var(--ref-purple), var(--ref-purple-2));
977
- }
978
-
979
- .reference-dash-card button,
980
- .reference-lists button {
981
- width: 100%;
982
- border: 1px solid rgba(111,66,232,0.35);
983
- border-radius: 10px;
984
- padding: 12px 14px;
985
- color: var(--ref-purple);
986
- background: var(--card);
987
- font: inherit;
988
- font-weight: 800;
989
- cursor: pointer;
990
- }
991
-
992
- .reference-lists {
993
- display: grid;
994
- grid-template-columns: 1fr 1.1fr;
995
- gap: 20px;
996
- }
997
-
998
- .reference-lists article {
999
- padding: 0 22px 12px;
1000
- }
1001
-
1002
- .reference-lists header {
1003
- height: 58px;
1004
- display: flex;
1005
- align-items: center;
1006
- gap: 10px;
1007
- border-bottom: 1px solid var(--ref-line);
1008
- color: var(--ref-ink);
1009
- font-weight: 850;
1010
- }
1011
-
1012
- .reference-lists header button {
1013
- margin-left: auto;
1014
- width: auto;
1015
- border: 0;
1016
- padding: 0;
1017
- color: var(--ref-purple);
1018
- background: transparent;
1019
- }
1020
-
1021
- .reference-lists p {
1022
- display: flex;
1023
- justify-content: space-between;
1024
- gap: 18px;
1025
- margin: 0;
1026
- padding: 15px 0;
1027
- border-bottom: 1px solid #f0ecf7;
1028
- color: var(--ref-ink);
1029
- }
1030
-
1031
- .reference-lists p span {
1032
- color: var(--ref-faint);
1033
- white-space: nowrap;
1034
- }
1035
-
1036
- .lattice-ref-chat .empty-grid {
1037
- display: flex;
1038
- justify-content: flex-start;
1039
- gap: 10px;
1040
- }
1041
-
1042
- .lattice-ref-chat .empty-chip {
1043
- border-radius: 999px;
1044
- padding: 12px 16px;
1045
- box-shadow: none;
1046
- }
1047
-
1048
- .lattice-ref-chat .input-area {
1049
- background: linear-gradient(0deg, var(--input), var(--input), transparent);
1050
- }
1051
-
1052
- .lattice-ref-chat .input-box {
1053
- max-width: 1120px;
1054
- border-radius: 18px;
1055
- background: var(--input);
1056
- border-color: rgba(111,66,232,0.17);
1057
- box-shadow: 0 8px 32px rgba(88,72,150,0.10);
1058
- }
1059
-
1060
- .lattice-ref-chat .user .bubble {
1061
- background: linear-gradient(135deg, var(--ref-purple), #6536d9);
1062
- border-radius: 16px 16px 4px 16px;
1063
- }
1064
-
1065
- .lattice-ref-chat .ai .bubble {
1066
- background: var(--surface);
1067
- color: var(--ref-ink);
1068
- border-color: var(--accent-soft);
1069
- border-radius: 16px 16px 16px 4px;
1070
- box-shadow: 0 4px 18px rgba(88,72,150,0.08);
1071
- }
1072
-
1073
- .lattice-ref-chat .workspace-modal,
1074
- .lattice-ref-chat .mode-modal {
1075
- border-radius: 22px;
1076
- }
1077
-
1078
- /* Graph page: slide 6 light graph workspace */
1079
- .lattice-ref-graph {
1080
- margin: 0;
1081
- display: grid;
1082
- grid-template-columns: 264px minmax(0, 1fr);
1083
- min-height: 100vh;
1084
- overflow: hidden;
1085
- background: var(--surface);
1086
- color: var(--ref-ink);
1087
- font-family: "Inter", "Pretendard", "Apple SD Gothic Neo", -apple-system, BlinkMacSystemFont, sans-serif;
1088
- }
1089
-
1090
- .lattice-ref-graph .app {
1091
- height: 100vh;
1092
- grid-template-columns: minmax(0, 1fr) 320px;
1093
- background: var(--surface);
1094
- }
1095
-
1096
- .lattice-ref-graph .stage {
1097
- border-right: 0;
1098
- background:
1099
- radial-gradient(circle, var(--border) 1px, transparent 1.8px),
1100
- linear-gradient(180deg, #fff 0%, var(--surface) 100%);
1101
- background-size: 28px 28px, 100% 100%;
1102
- margin: 98px 14px 40px 24px;
1103
- border: 1px solid var(--ref-line);
1104
- border-radius: 14px;
1105
- overflow: hidden;
1106
- }
1107
-
1108
- .lattice-ref-graph .stage::before {
1109
- content: "지식 그래프";
1110
- position: fixed;
1111
- top: 34px;
1112
- left: 324px;
1113
- color: var(--ref-ink);
1114
- font-size: 31px;
1115
- font-weight: 860;
1116
- letter-spacing: -0.04em;
1117
- }
1118
-
1119
- .lattice-ref-graph .stage::after {
1120
- content: "\ea2e";
1121
- font-family: "tabler-icons";
1122
- position: fixed;
1123
- top: 30px;
1124
- left: 288px;
1125
- width: 40px;
1126
- height: 40px;
1127
- display: grid;
1128
- place-items: center;
1129
- border-radius: 10px;
1130
- color: var(--ref-purple);
1131
- background: rgba(111,66,232,0.10);
1132
- font-size: 22px;
1133
- }
1134
-
1135
- .lattice-ref-graph .search-shell {
1136
- top: -72px;
1137
- left: auto;
1138
- right: 250px;
1139
- width: min(520px, 42vw);
1140
- border-radius: 10px;
1141
- background: var(--input);
1142
- box-shadow: none;
1143
- }
1144
-
1145
- .lattice-ref-graph .search-head {
1146
- display: none;
1147
- }
1148
-
1149
- .lattice-ref-graph .search-input-wrap {
1150
- padding: 0;
1151
- }
1152
-
1153
- .lattice-ref-graph .search-input {
1154
- height: 48px;
1155
- background: var(--input);
1156
- color: var(--ref-ink);
1157
- border-color: var(--ref-line);
1158
- }
1159
-
1160
- .lattice-ref-graph #clear-search-btn {
1161
- display: none;
1162
- }
1163
-
1164
- .lattice-ref-graph .search-results {
1165
- display: none;
1166
- }
1167
-
1168
- .lattice-ref-graph .toolbar {
1169
- top: auto;
1170
- bottom: 12px;
1171
- left: 50%;
1172
- right: auto;
1173
- transform: translateX(-50%);
1174
- background: var(--surface-2);
1175
- border-color: var(--ref-line);
1176
- box-shadow: var(--ref-shadow);
1177
- border-radius: 12px;
1178
- }
1179
-
1180
- .lattice-ref-graph .tb-btn {
1181
- background: var(--surface-2);
1182
- color: var(--ref-ink);
1183
- border-color: var(--ref-line);
1184
- }
1185
-
1186
- .lattice-ref-graph aside:not(.reference-rail) {
1187
- margin: 98px 20px 40px 0;
1188
- border: 1px solid var(--ref-line);
1189
- border-radius: 14px;
1190
- background: var(--sidebar);
1191
- color: var(--ref-ink);
1192
- box-shadow: var(--ref-shadow);
1193
- display: flex;
1194
- flex-direction: column;
1195
- overflow-x: hidden;
1196
- overflow-y: auto;
1197
- min-height: 0;
1198
- }
1199
-
1200
- .lattice-ref-graph .sidebar-head,
1201
- .lattice-ref-graph .section {
1202
- border-color: var(--ref-line);
1203
- }
1204
-
1205
- .lattice-ref-graph .eyebrow {
1206
- color: var(--ref-purple);
1207
- }
1208
-
1209
- .lattice-ref-graph .sidebar-sub,
1210
- .lattice-ref-graph .filter-count,
1211
- .lattice-ref-graph .legend-meta,
1212
- .lattice-ref-graph .detail-summary,
1213
- .lattice-ref-graph .empty-hint {
1214
- color: var(--ref-muted);
1215
- }
1216
-
1217
- .lattice-ref-graph .stat,
1218
- .lattice-ref-graph .metric-card,
1219
- .lattice-ref-graph .meta-block,
1220
- .lattice-ref-graph .search-item {
1221
- background: var(--surface);
1222
- border-color: var(--ref-line);
1223
- }
1224
-
1225
- .lattice-ref-graph #tooltip {
1226
- background: var(--surface-elevated);
1227
- color: var(--ref-ink);
1228
- border-color: var(--ref-line);
1229
- }
1230
-
1231
- /* Admin page — light lavender theme (matches graph/chat) */
1232
- .lattice-ref-admin {
1233
- margin: 0;
1234
- display: grid;
1235
- grid-template-columns: 264px minmax(0, 1fr);
1236
- min-height: 100vh;
1237
- overflow: hidden;
1238
- background:
1239
- radial-gradient(circle at 82% 12%, var(--border), transparent 30%),
1240
- radial-gradient(circle at 10% 80%, rgba(180,160,255,0.16), transparent 35%),
1241
- linear-gradient(180deg, var(--bg) 0%, var(--surface-2) 52%, var(--surface) 100%);
1242
- color: var(--text);
1243
- }
1244
-
1245
- .lattice-ref-admin::before {
1246
- display: none;
1247
- }
1248
-
1249
- .lattice-ref-admin .admin-rail {
1250
- background: var(--sidebar);
1251
- border-right: 1px solid rgba(111,66,232,0.13);
1252
- color: var(--text);
1253
- box-shadow: 12px 0 46px rgba(88,72,150,0.08);
1254
- }
1255
-
1256
- .lattice-ref-admin .admin-rail .rail-brand {
1257
- align-items: flex-start;
1258
- flex-direction: column;
1259
- gap: 4px;
1260
- font-size: 25px;
1261
- color: var(--text);
1262
- }
1263
-
1264
- .lattice-ref-admin .admin-rail .rail-brand i {
1265
- font-size: 34px;
1266
- color: var(--ref-purple);
1267
- }
1268
-
1269
- .lattice-ref-admin .admin-rail a {
1270
- color: var(--text);
1271
- }
1272
-
1273
- .lattice-ref-admin .admin-rail a.active,
1274
- .lattice-ref-admin .admin-rail a:hover {
1275
- background: linear-gradient(90deg, var(--border), rgba(111,66,232,0.05));
1276
- color: var(--text);
1277
- }
1278
-
1279
- .lattice-ref-admin .admin-rail .rail-project {
1280
- background: var(--sidebar);
1281
- border-color: rgba(111,66,232,0.13);
1282
- }
1283
-
1284
- .lattice-ref-admin .admin-rail .rail-project strong {
1285
- color: var(--text);
1286
- }
1287
-
1288
- .lattice-ref-admin .admin-rail .rail-project span {
1289
- color: var(--muted);
1290
- }
1291
-
1292
- .lattice-ref-admin .page {
1293
- min-height: 100vh;
1294
- overflow-y: auto;
1295
- }
1296
-
1297
- .lattice-ref-admin .topbar {
1298
- height: 96px;
1299
- background: var(--sidebar);
1300
- border-bottom: 1px solid rgba(111,66,232,0.10);
1301
- backdrop-filter: none; /* glass removed v3.5.0 */
1302
- padding: 22px 34px 8px;
1303
- position: sticky;
1304
- }
1305
-
1306
- .lattice-ref-admin .brand-mark {
1307
- display: none;
1308
- }
1309
-
1310
- .lattice-ref-admin .brand h1 {
1311
- font-size: 36px;
1312
- letter-spacing: -0.05em;
1313
- color: var(--text);
1314
- }
1315
-
1316
- .lattice-ref-admin .brand p {
1317
- color: var(--muted);
1318
- font-size: 15px;
1319
- }
1320
-
1321
- .lattice-ref-admin .top-actions .btn {
1322
- background: var(--surface-2);
1323
- border-color: rgba(111,66,232,0.18);
1324
- color: var(--text);
1325
- }
1326
-
1327
- .lattice-ref-admin .top-actions .btn:hover {
1328
- background: rgba(111,66,232,0.10);
1329
- border-color: rgba(111,66,232,0.32);
1330
- color: var(--accent);
1331
- }
1332
-
1333
- .lattice-ref-admin #admin-lang-btn {
1334
- min-width: 180px;
1335
- justify-content: center;
1336
- border-color: var(--border-strong);
1337
- }
1338
-
1339
- .lattice-ref-admin .content {
1340
- width: min(1500px, calc(100vw - 316px));
1341
- padding: 8px 34px 28px;
1342
- gap: 18px;
1343
- }
1344
-
1345
- .lattice-ref-admin .admin-view {
1346
- display: none;
1347
- flex-direction: column;
1348
- gap: 18px;
1349
- }
1350
-
1351
- .lattice-ref-admin .admin-view.active {
1352
- display: flex;
1353
- }
1354
-
1355
- .lattice-ref-admin .hero {
1356
- display: none;
1357
- }
1358
-
1359
- .lattice-ref-admin .summary-grid {
1360
- grid-template-columns: repeat(4, minmax(0, 1fr));
1361
- gap: 14px;
1362
- }
1363
-
1364
- .lattice-ref-admin .summary-card,
1365
- .lattice-ref-admin .panel,
1366
- .lattice-ref-admin .subpanel,
1367
- .lattice-ref-admin .session-card,
1368
- .lattice-ref-admin .table-wrap,
1369
- .lattice-ref-admin .audit-metric {
1370
- background: var(--card);
1371
- border-color: var(--accent-soft);
1372
- box-shadow: 0 8px 28px rgba(88,72,150,0.08);
1373
- color: var(--text);
1374
- border-radius: 12px;
1375
- }
1376
-
1377
- .lattice-ref-admin .summary-card {
1378
- min-height: 118px;
1379
- padding: 18px 18px 16px 88px;
1380
- position: relative;
1381
- display: flex;
1382
- flex-direction: column;
1383
- justify-content: center;
1384
- overflow: hidden;
1385
- transition: transform 200ms ease, box-shadow 200ms ease;
1386
- }
1387
-
1388
- .lattice-ref-admin .summary-card:hover {
1389
- transform: translateY(-2px);
1390
- box-shadow: 0 14px 40px rgba(88,72,150,0.14);
1391
- }
1392
-
1393
- .lattice-ref-admin .summary-card::before {
1394
- content: "\ea02";
1395
- font-family: "tabler-icons";
1396
- position: absolute;
1397
- left: 20px;
1398
- top: 50%;
1399
- width: 48px;
1400
- height: 48px;
1401
- display: grid;
1402
- place-items: center;
1403
- border-radius: 8px;
1404
- color: #fff;
1405
- background: linear-gradient(135deg, var(--accent), #5332b8);
1406
- font-size: 24px;
1407
- transform: translateY(-50%);
1408
- box-shadow: 0 12px 24px rgba(111,66,232,0.16);
1409
- }
1410
-
1411
- .lattice-ref-admin .summary-card:nth-child(2)::before { content: "\ea9a"; }
1412
- .lattice-ref-admin .summary-card:nth-child(3)::before { content: "\eaa4"; }
1413
- .lattice-ref-admin .summary-card:nth-child(4)::before {
1414
- content: "\eadd";
1415
- background: linear-gradient(135deg, #0d8f72, #116b6d);
1416
- }
1417
-
1418
- .lattice-ref-admin .summary-card .label,
1419
- .lattice-ref-admin .panel-header p,
1420
- .lattice-ref-admin .summary-card .meta {
1421
- color: var(--muted);
1422
- }
1423
-
1424
- .lattice-ref-admin .summary-card .label {
1425
- font-size: 12px;
1426
- font-weight: 800;
1427
- letter-spacing: 0;
1428
- text-transform: none;
1429
- margin-bottom: 8px;
1430
- }
1431
-
1432
- .lattice-ref-admin td,
1433
- .lattice-ref-admin th {
1434
- color: var(--text);
1435
- }
1436
-
1437
- .lattice-ref-admin .summary-card .value {
1438
- color: var(--accent);
1439
- font-size: clamp(24px, 2.15vw, 34px);
1440
- line-height: 1.05;
1441
- letter-spacing: 0;
1442
- overflow: hidden;
1443
- overflow-wrap: anywhere;
1444
- display: -webkit-box;
1445
- -webkit-line-clamp: 2;
1446
- -webkit-box-orient: vertical;
1447
- }
1448
-
1449
- .lattice-ref-admin .summary-card .meta {
1450
- margin-top: 8px;
1451
- min-height: 0;
1452
- line-height: 1.4;
1453
- overflow: hidden;
1454
- display: -webkit-box;
1455
- -webkit-line-clamp: 2;
1456
- -webkit-box-orient: vertical;
1457
- }
1458
-
1459
- .lattice-ref-admin .panel-header {
1460
- border-bottom-color: rgba(111,66,232,0.10);
1461
- }
1462
-
1463
- .lattice-ref-admin .panel-header h3,
1464
- .lattice-ref-admin .subpanel h4 {
1465
- color: var(--text);
1466
- }
1467
-
1468
- .lattice-ref-admin table {
1469
- color: var(--text);
1470
- background: transparent;
1471
- }
1472
-
1473
- .lattice-ref-admin tr,
1474
- .lattice-ref-admin th,
1475
- .lattice-ref-admin td {
1476
- border-color: rgba(111,66,232,0.10);
1477
- }
1478
-
1479
- .lattice-ref-admin th {
1480
- background: rgba(111,66,232,0.05);
1481
- color: var(--muted);
1482
- }
1483
-
1484
- .lattice-ref-admin input,
1485
- .lattice-ref-admin textarea,
1486
- .lattice-ref-admin select {
1487
- background: var(--input);
1488
- border-color: rgba(111,66,232,0.16);
1489
- color: var(--text);
1490
- }
1491
-
1492
- .lattice-ref-admin input:focus,
1493
- .lattice-ref-admin textarea:focus,
1494
- .lattice-ref-admin select:focus {
1495
- border-color: rgba(111,66,232,0.44);
1496
- box-shadow: 0 0 0 3px rgba(111,66,232,0.08);
1497
- }
1498
-
1499
- .lattice-ref-admin label {
1500
- color: var(--muted);
1501
- }
1502
-
1503
- .lattice-ref-admin .item {
1504
- background: var(--surface-2);
1505
- border-color: rgba(111,66,232,0.10);
1506
- color: var(--text);
1507
- }
1508
-
1509
- .lattice-ref-admin .preview {
1510
- color: var(--muted);
1511
- }
1512
-
1513
- .lattice-ref-admin .tag {
1514
- color: var(--muted);
1515
- border-color: rgba(111,66,232,0.15);
1516
- background: var(--surface-2);
1517
- }
1518
-
1519
- .lattice-ref-admin .muted {
1520
- color: var(--muted);
1521
- }
1522
-
1523
- .lattice-ref-admin .notice {
1524
- background: rgba(111,66,232,0.08);
1525
- border-color: rgba(111,66,232,0.20);
1526
- color: var(--muted);
1527
- }
1528
-
1529
- .lattice-ref-admin .status-copy {
1530
- color: var(--muted);
1531
- }
1532
-
1533
- .lattice-ref-admin .inline-control {
1534
- display: flex;
1535
- gap: 8px;
1536
- align-items: center;
1537
- }
1538
-
1539
- .lattice-ref-admin .inline-control input {
1540
- flex: 1;
1541
- }
1542
-
1543
- .lattice-ref-admin .button-row {
1544
- display: flex;
1545
- flex-wrap: wrap;
1546
- gap: 8px;
1547
- justify-content: flex-end;
1548
- }
1549
-
1550
- .lattice-ref-admin .sso-template-help {
1551
- margin-top: 12px;
1552
- padding: 11px 12px;
1553
- border: 1px solid var(--border);
1554
- border-radius: 8px;
1555
- background: rgba(111,66,232,0.06);
1556
- color: var(--muted);
1557
- font-size: 12px;
1558
- line-height: 1.5;
1559
- }
1560
-
1561
- .lattice-ref-admin .enterprise-grid {
1562
- display: grid;
1563
- grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
1564
- gap: 10px;
1565
- }
1566
-
1567
- .lattice-ref-admin .enterprise-cap-card {
1568
- display: flex;
1569
- align-items: center;
1570
- gap: 10px;
1571
- min-width: 0;
1572
- border: 1px solid var(--accent-soft);
1573
- border-radius: 8px;
1574
- background: var(--card);
1575
- padding: 11px 12px;
1576
- }
1577
-
1578
- .lattice-ref-admin .enterprise-cap-card i {
1579
- color: var(--faint);
1580
- font-size: 18px;
1581
- }
1582
-
1583
- .lattice-ref-admin .enterprise-cap-card.on i {
1584
- color: var(--success);
1585
- }
1586
-
1587
- .lattice-ref-admin .enterprise-cap-card span {
1588
- flex: 1;
1589
- min-width: 0;
1590
- color: var(--text);
1591
- font-size: 13px;
1592
- font-weight: 800;
1593
- overflow: hidden;
1594
- text-overflow: ellipsis;
1595
- white-space: nowrap;
1596
- text-transform: capitalize;
1597
- }
1598
-
1599
- .lattice-ref-admin .enterprise-cap-card strong {
1600
- color: var(--muted);
1601
- font-size: 11px;
1602
- }
1603
-
1604
- .lattice-ref-admin .enterprise-kv {
1605
- display: grid;
1606
- gap: 8px;
1607
- }
1608
-
1609
- .lattice-ref-admin .enterprise-kv div {
1610
- display: grid;
1611
- grid-template-columns: 150px minmax(0, 1fr);
1612
- gap: 10px;
1613
- align-items: start;
1614
- border: 1px solid rgba(111,66,232,0.10);
1615
- border-radius: 8px;
1616
- background: var(--surface);
1617
- padding: 9px 10px;
1618
- }
1619
-
1620
- .lattice-ref-admin .enterprise-kv span {
1621
- color: var(--muted);
1622
- font-size: 12px;
1623
- font-weight: 800;
1624
- }
1625
-
1626
- .lattice-ref-admin .enterprise-kv strong {
1627
- color: var(--text);
1628
- font-size: 12px;
1629
- line-height: 1.45;
1630
- overflow-wrap: anywhere;
1631
- }
1632
-
1633
- .lattice-ref-admin .enterprise-json {
1634
- max-height: 280px;
1635
- overflow: auto;
1636
- margin: 12px 0 0;
1637
- border: 1px solid rgba(111,66,232,0.10);
1638
- border-radius: 8px;
1639
- background: rgba(20,22,44,0.05);
1640
- color: var(--text);
1641
- padding: 12px;
1642
- font-size: 12px;
1643
- white-space: pre-wrap;
1644
- }
1645
-
1646
- @media (max-width: 980px) {
1647
- .lattice-ref-chat .reference-card-grid,
1648
- .reference-lists {
1649
- grid-template-columns: 1fr;
1650
- }
1651
-
1652
- .lattice-ref-graph,
1653
- .lattice-ref-admin {
1654
- display: block;
1655
- overflow: auto;
1656
- }
1657
-
1658
- .reference-rail {
1659
- min-height: auto;
1660
- }
1661
- }