ltcai 2.1.0 → 2.2.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 (51) hide show
  1. package/README.md +153 -609
  2. package/auto_setup.py +17 -17
  3. package/docs/CHANGELOG.md +83 -0
  4. package/docs/MULTI_AGENT_RUNTIME.md +4 -4
  5. package/docs/PLUGIN_SDK.md +7 -7
  6. package/docs/REALTIME_COLLABORATION.md +6 -6
  7. package/docs/V2_ARCHITECTURE.md +45 -25
  8. package/docs/WORKFLOW_DESIGNER.md +4 -4
  9. package/docs/architecture.md +127 -135
  10. package/docs/kg-schema.md +3 -3
  11. package/docs/public-deploy.md +2 -3
  12. package/docs/spec-vs-impl.md +13 -10
  13. package/knowledge_graph.py +2 -2
  14. package/latticeai/__init__.py +1 -1
  15. package/latticeai/api/models.py +8 -0
  16. package/latticeai/core/config.py +1 -1
  17. package/latticeai/core/graph_curator.py +2 -2
  18. package/latticeai/core/marketplace.py +2 -2
  19. package/latticeai/core/model_compat.py +7 -63
  20. package/latticeai/core/model_resolution.py +1 -1
  21. package/latticeai/core/multi_agent.py +1 -1
  22. package/latticeai/core/plugins.py +1 -1
  23. package/latticeai/core/realtime.py +1 -1
  24. package/latticeai/core/workflow_engine.py +1 -1
  25. package/latticeai/core/workspace_os.py +1 -1
  26. package/latticeai/server_app.py +1 -1
  27. package/latticeai/services/model_catalog.py +105 -153
  28. package/latticeai/services/model_recommendation.py +28 -17
  29. package/latticeai/services/model_runtime.py +2 -2
  30. package/llm_router.py +80 -92
  31. package/ltcai_cli.py +2 -3
  32. package/package.json +8 -3
  33. package/static/account.html +3 -1
  34. package/static/activity.html +5 -2
  35. package/static/admin.html +5 -1
  36. package/static/agents.html +5 -2
  37. package/static/chat.html +12 -10
  38. package/static/css/responsive.css +597 -0
  39. package/static/css/tokens.css +224 -165
  40. package/static/graph.html +12 -2
  41. package/static/lattice-reference.css +366 -739
  42. package/static/platform.css +45 -16
  43. package/static/plugins.html +5 -2
  44. package/static/scripts/admin.js +33 -33
  45. package/static/scripts/chat.js +109 -42
  46. package/static/scripts/graph.js +169 -11
  47. package/static/scripts/ux.js +167 -0
  48. package/static/workflows.html +5 -2
  49. package/static/workspace.css +55 -19
  50. package/static/workspace.html +5 -2
  51. package/telegram_bot.py +1 -1
@@ -4,28 +4,7 @@
4
4
  /* Lattice AI PPT reference skin.
5
5
  The deck uses a bright basic workspace and a dark administrator workspace. */
6
6
 
7
- :root {
8
- --ref-purple: #6f42e8;
9
- --ref-purple-2: #8b6cff;
10
- --ref-indigo: #2f73ff;
11
- --ref-ink: #14162c;
12
- --ref-muted: #6b6885;
13
- --ref-faint: #9b96b5;
14
- --ref-line: #e6e1f3;
15
- --ref-soft: #f5f1ff;
16
- --ref-card: rgba(255, 255, 255, 0.92);
17
- --ref-shadow: 0 18px 54px rgba(88, 72, 150, 0.14);
18
- --ref-dark: #071329;
19
- --ref-dark-2: #0d1c34;
20
- --ref-dark-card: rgba(19, 38, 68, 0.76);
21
- --ref-dark-line: rgba(151, 179, 231, 0.18);
22
- }
23
-
24
- .lattice-ref-auth,
25
- .lattice-ref-chat,
26
- .lattice-ref-graph {
27
- color-scheme: light;
28
- }
7
+ /* 색 토큰(--ref-*, color-scheme 포함)은 tokens.css 가 라이트/다크 모두 제공한다. */
29
8
 
30
9
  .lattice-ref-auth,
31
10
  .lattice-ref-chat {
@@ -37,15 +16,15 @@
37
16
  radial-gradient(circle at 74% 25%, rgba(255,255,255,0.70), transparent 16%),
38
17
  radial-gradient(circle at 80% 58%, rgba(111,66,232,0.15), transparent 28%),
39
18
  radial-gradient(circle at 15% 72%, rgba(111,66,232,0.13), transparent 34%),
40
- linear-gradient(135deg, #fbfaff 0%, #f2edff 48%, #ffffff 100%) !important;
19
+ linear-gradient(135deg, #fbfaff 0%, #f2edff 48%, #ffffff 100%);
41
20
  min-height: 100dvh;
42
21
  /* 타이틀바(58px)를 제외한 나머지 영역의 수직 중앙에 카드 배치 */
43
- flex-direction: column !important;
44
- align-items: center !important;
45
- justify-content: center !important;
22
+ flex-direction: column;
23
+ align-items: center;
24
+ justify-content: center;
46
25
  /* padding-top: 타이틀바 높이만큼만 → justify-content가 나머지 공간에서 중앙 정렬 */
47
- padding: 58px 18px clamp(72px, 8dvh, 90px) !important;
48
- overflow: auto !important;
26
+ padding: 58px 18px clamp(72px, 8dvh, 90px);
27
+ overflow: auto;
49
28
  }
50
29
 
51
30
  .lattice-ref-auth .login-shell {
@@ -66,7 +45,7 @@
66
45
  border-radius: 16px;
67
46
  padding: clamp(40px, 4.6dvh, 50px) clamp(28px, 3.6vw, 40px) clamp(20px, 2.4dvh, 28px);
68
47
  background: rgba(255,255,255,0.76);
69
- border-color: rgba(111,66,232,0.12);
48
+ border-color: var(--accent-soft);
70
49
  box-shadow: 0 20px 64px rgba(102, 82, 168, 0.20), inset 0 1px 0 rgba(255,255,255,0.86);
71
50
  backdrop-filter: blur(26px);
72
51
  }
@@ -250,7 +229,7 @@
250
229
  linear-gradient(30deg, transparent 42%, rgba(255,255,255,0.55) 42% 47%, transparent 47%),
251
230
  linear-gradient(90deg, transparent 42%, rgba(255,255,255,0.48) 42% 47%, transparent 47%),
252
231
  linear-gradient(150deg, transparent 42%, rgba(255,255,255,0.48) 42% 47%, transparent 47%),
253
- conic-gradient(from 30deg, #4f7dff, #6f42e8, #8b6cff, #4f7dff);
232
+ conic-gradient(from 30deg, #4f7dff, var(--accent), var(--accent-2), #4f7dff);
254
233
  clip-path: polygon(50% 0, 88% 20%, 88% 67%, 50% 100%, 12% 67%, 12% 20%);
255
234
  border-radius: 18px;
256
235
  box-shadow: inset 0 0 0 8px rgba(255,255,255,0.16), 0 14px 28px rgba(111,66,232,0.24);
@@ -285,7 +264,7 @@
285
264
  .lattice-ref-chat .send-btn,
286
265
  .lattice-ref-chat .workspace-icon,
287
266
  .lattice-ref-chat .mode-icon {
288
- background: linear-gradient(135deg, var(--ref-purple), #7b61ff) !important;
267
+ background: linear-gradient(135deg, var(--ref-purple), #7b61ff);
289
268
  }
290
269
 
291
270
  .lattice-ref-auth .input {
@@ -478,11 +457,11 @@
478
457
  display: inline-flex;
479
458
  align-items: center;
480
459
  gap: 10px;
481
- height: 42px !important;
482
- border-radius: 11px !important;
483
- border: 1px solid rgba(111,66,232,0.12) !important;
484
- font-size: 16px !important;
485
- color: #4f5068 !important;
460
+ height: 42px;
461
+ border-radius: 11px;
462
+ border: 1px solid var(--accent-soft);
463
+ font-size: 16px;
464
+ color: #4f5068;
486
465
  box-shadow: 0 8px 22px rgba(88,72,150,0.06);
487
466
  cursor: pointer;
488
467
  }
@@ -540,8 +519,8 @@
540
519
 
541
520
  @media (max-height: 760px) {
542
521
  .lattice-ref-auth {
543
- padding-top: 58px !important;
544
- padding-bottom: 16px !important;
522
+ padding-top: 58px;
523
+ padding-bottom: 16px;
545
524
  }
546
525
 
547
526
  .auth-footer {
@@ -613,7 +592,7 @@
613
592
  }
614
593
 
615
594
  .lattice-ref-auth {
616
- padding: 18px !important;
595
+ padding: 18px;
617
596
  }
618
597
 
619
598
  .lattice-ref-auth .card {
@@ -692,7 +671,7 @@
692
671
  gap: 12px;
693
672
  border-radius: 10px;
694
673
  padding: 13px 16px;
695
- color: #14162c;
674
+ color: var(--text);
696
675
  font: inherit;
697
676
  font-size: 15px;
698
677
  font-weight: 700;
@@ -706,7 +685,7 @@
706
685
  .reference-nav-item.active,
707
686
  .reference-nav-item:hover {
708
687
  color: var(--ref-purple);
709
- background: linear-gradient(90deg, rgba(111,66,232,0.14), rgba(111,66,232,0.05));
688
+ background: linear-gradient(90deg, var(--border), rgba(111,66,232,0.05));
710
689
  }
711
690
 
712
691
  .reference-rail i,
@@ -737,34 +716,20 @@
737
716
 
738
717
  /* Chat and home dashboard */
739
718
  .lattice-ref-chat {
740
- --bg: #f3ecff;
741
- --surface: #f6f0ff;
742
- --surface-2: #efe8ff;
743
- --surface-3: #e8dfff;
744
- --accent: var(--ref-purple);
745
- --accent-3: var(--ref-purple-2);
746
- --text: var(--ref-ink);
747
- --muted: var(--ref-muted);
748
- --faint: var(--ref-faint);
749
- --border: rgba(111,66,232,0.14);
750
- --shadow: 0 18px 54px rgba(88,72,150,0.15);
751
- background:
752
- radial-gradient(circle at 82% 12%, rgba(111,66,232,0.14), transparent 30%),
753
- radial-gradient(circle at 10% 80%, rgba(180,160,255,0.16), transparent 35%),
754
- linear-gradient(180deg, #f3ecff 0%, #efe8ff 52%, #f2ecff 100%) !important;
719
+ background: var(--app-bg);
755
720
  }
756
721
 
757
722
  .lattice-ref-chat .sidebar {
758
723
  width: 280px;
759
724
  min-width: 280px;
760
- background: rgba(244,237,255,0.96) !important;
761
- border-right: 1px solid rgba(111,66,232,0.13) !important;
762
- box-shadow: 12px 0 46px rgba(88,72,150,0.08) !important;
725
+ background: rgba(244,237,255,0.96);
726
+ border-right: 1px solid rgba(111,66,232,0.13);
727
+ box-shadow: 12px 0 46px rgba(88,72,150,0.08);
763
728
  }
764
729
 
765
730
  .lattice-ref-chat .sidebar-header {
766
731
  padding: 30px 24px 18px;
767
- border-bottom: 0 !important;
732
+ border-bottom: 0;
768
733
  }
769
734
 
770
735
  .lattice-ref-chat .logo-box {
@@ -774,9 +739,9 @@
774
739
  }
775
740
 
776
741
  .lattice-ref-chat .brand-title {
777
- color: var(--ref-ink) !important;
742
+ color: var(--ref-ink);
778
743
  font-size: 23px;
779
- letter-spacing: -0.04em !important;
744
+ letter-spacing: -0.04em;
780
745
  }
781
746
 
782
747
  .lattice-ref-chat .brand-subtitle {
@@ -784,7 +749,7 @@
784
749
  margin-top: 6px;
785
750
  padding: 3px 10px;
786
751
  border-radius: 999px;
787
- color: var(--ref-purple) !important;
752
+ color: var(--ref-purple);
788
753
  background: rgba(111,66,232,0.10);
789
754
  font-size: 12px;
790
755
  font-weight: 700;
@@ -792,7 +757,7 @@
792
757
 
793
758
  .lattice-ref-chat .user-strip {
794
759
  margin: 0 18px 16px;
795
- border: 1px solid var(--ref-line) !important;
760
+ border: 1px solid var(--ref-line);
796
761
  border-radius: 14px;
797
762
  background: rgba(255,255,255,0.72);
798
763
  order: 20;
@@ -825,24 +790,24 @@
825
790
  .lattice-ref-chat .logout-btn,
826
791
  .lattice-ref-chat .status-pill,
827
792
  .lattice-ref-chat .model-badge {
828
- border: 1px solid rgba(111,66,232,0.16) !important;
829
- border-radius: 10px !important;
830
- background: rgba(244,238,255,0.88) !important;
831
- color: var(--ref-ink) !important;
793
+ border: 1px solid rgba(111,66,232,0.16);
794
+ border-radius: 10px;
795
+ background: rgba(244,238,255,0.88);
796
+ color: var(--ref-ink);
832
797
  }
833
798
 
834
799
  .lattice-ref-chat .new-chat-btn:first-child {
835
- border-color: rgba(111,66,232,0.28) !important;
836
- color: var(--ref-purple) !important;
800
+ border-color: rgba(111,66,232,0.28);
801
+ color: var(--ref-purple);
837
802
  }
838
803
 
839
804
  .lattice-ref-chat .chat-header {
840
805
  min-height: 88px;
841
806
  padding: 18px 28px;
842
- background: rgba(244,238,255,0.92) !important;
843
- border-bottom: 1px solid rgba(111,66,232,0.11) !important;
844
- box-shadow: 0 2px 12px rgba(88,72,150,0.06) !important;
845
- backdrop-filter: blur(14px) !important;
807
+ background: rgba(244,238,255,0.92);
808
+ border-bottom: 1px solid rgba(111,66,232,0.11);
809
+ box-shadow: 0 2px 12px rgba(88,72,150,0.06);
810
+ backdrop-filter: blur(14px);
846
811
  }
847
812
 
848
813
  .lattice-ref-chat .messages-viewport {
@@ -1039,32 +1004,32 @@
1039
1004
  .lattice-ref-chat .empty-chip {
1040
1005
  border-radius: 999px;
1041
1006
  padding: 12px 16px;
1042
- box-shadow: none !important;
1007
+ box-shadow: none;
1043
1008
  }
1044
1009
 
1045
1010
  .lattice-ref-chat .input-area {
1046
- background: linear-gradient(0deg, rgba(243,237,255,0.99), rgba(243,237,255,0.86), transparent) !important;
1011
+ background: linear-gradient(0deg, rgba(243,237,255,0.99), rgba(243,237,255,0.86), transparent);
1047
1012
  }
1048
1013
 
1049
1014
  .lattice-ref-chat .input-box {
1050
1015
  max-width: 1120px;
1051
1016
  border-radius: 18px;
1052
- background: rgba(248,243,255,0.97) !important;
1053
- border-color: rgba(111,66,232,0.17) !important;
1054
- box-shadow: 0 8px 32px rgba(88,72,150,0.10) !important;
1017
+ background: rgba(248,243,255,0.97);
1018
+ border-color: rgba(111,66,232,0.17);
1019
+ box-shadow: 0 8px 32px rgba(88,72,150,0.10);
1055
1020
  }
1056
1021
 
1057
1022
  .lattice-ref-chat .user .bubble {
1058
- background: linear-gradient(135deg, var(--ref-purple), #6536d9) !important;
1023
+ background: linear-gradient(135deg, var(--ref-purple), #6536d9);
1059
1024
  border-radius: 16px 16px 4px 16px;
1060
1025
  }
1061
1026
 
1062
1027
  .lattice-ref-chat .ai .bubble {
1063
- background: rgba(250,246,255,0.97) !important;
1064
- color: var(--ref-ink) !important;
1065
- border-color: rgba(111,66,232,0.12) !important;
1028
+ background: rgba(250,246,255,0.97);
1029
+ color: var(--ref-ink);
1030
+ border-color: var(--accent-soft);
1066
1031
  border-radius: 16px 16px 16px 4px;
1067
- box-shadow: 0 4px 18px rgba(88,72,150,0.08) !important;
1032
+ box-shadow: 0 4px 18px rgba(88,72,150,0.08);
1068
1033
  }
1069
1034
 
1070
1035
  .lattice-ref-chat .workspace-modal,
@@ -1093,7 +1058,7 @@
1093
1058
  .lattice-ref-graph .stage {
1094
1059
  border-right: 0;
1095
1060
  background:
1096
- radial-gradient(circle, rgba(111,66,232,0.14) 1px, transparent 1.8px),
1061
+ radial-gradient(circle, var(--border) 1px, transparent 1.8px),
1097
1062
  linear-gradient(180deg, #fff 0%, #fbfaff 100%);
1098
1063
  background-size: 28px 28px, 100% 100%;
1099
1064
  margin: 98px 14px 40px 24px;
@@ -1233,10 +1198,10 @@
1233
1198
  min-height: 100vh;
1234
1199
  overflow: hidden;
1235
1200
  background:
1236
- radial-gradient(circle at 82% 12%, rgba(111,66,232,0.14), transparent 30%),
1201
+ radial-gradient(circle at 82% 12%, var(--border), transparent 30%),
1237
1202
  radial-gradient(circle at 10% 80%, rgba(180,160,255,0.16), transparent 35%),
1238
- linear-gradient(180deg, #f3ecff 0%, #efe8ff 52%, #f2ecff 100%) !important;
1239
- color: #14162c;
1203
+ linear-gradient(180deg, var(--bg) 0%, var(--surface-2) 52%, #f2ecff 100%);
1204
+ color: var(--text);
1240
1205
  }
1241
1206
 
1242
1207
  .lattice-ref-admin::before {
@@ -1244,10 +1209,10 @@
1244
1209
  }
1245
1210
 
1246
1211
  .lattice-ref-admin .admin-rail {
1247
- background: rgba(244,237,255,0.96) !important;
1248
- border-right: 1px solid rgba(111,66,232,0.13) !important;
1249
- color: #14162c !important;
1250
- box-shadow: 12px 0 46px rgba(88,72,150,0.08) !important;
1212
+ background: rgba(244,237,255,0.96);
1213
+ border-right: 1px solid rgba(111,66,232,0.13);
1214
+ color: var(--text);
1215
+ box-shadow: 12px 0 46px rgba(88,72,150,0.08);
1251
1216
  }
1252
1217
 
1253
1218
  .lattice-ref-admin .admin-rail .rail-brand {
@@ -1255,35 +1220,35 @@
1255
1220
  flex-direction: column;
1256
1221
  gap: 4px;
1257
1222
  font-size: 25px;
1258
- color: #14162c !important;
1223
+ color: var(--text);
1259
1224
  }
1260
1225
 
1261
1226
  .lattice-ref-admin .admin-rail .rail-brand i {
1262
1227
  font-size: 34px;
1263
- color: var(--ref-purple) !important;
1228
+ color: var(--ref-purple);
1264
1229
  }
1265
1230
 
1266
1231
  .lattice-ref-admin .admin-rail a {
1267
- color: #14162c !important;
1232
+ color: var(--text);
1268
1233
  }
1269
1234
 
1270
1235
  .lattice-ref-admin .admin-rail a.active,
1271
1236
  .lattice-ref-admin .admin-rail a:hover {
1272
- background: linear-gradient(90deg, rgba(111,66,232,0.14), rgba(111,66,232,0.05)) !important;
1273
- color: #14162c !important;
1237
+ background: linear-gradient(90deg, var(--border), rgba(111,66,232,0.05));
1238
+ color: var(--text);
1274
1239
  }
1275
1240
 
1276
1241
  .lattice-ref-admin .admin-rail .rail-project {
1277
- background: rgba(255,255,255,0.72) !important;
1278
- border-color: rgba(111,66,232,0.13) !important;
1242
+ background: rgba(255,255,255,0.72);
1243
+ border-color: rgba(111,66,232,0.13);
1279
1244
  }
1280
1245
 
1281
1246
  .lattice-ref-admin .admin-rail .rail-project strong {
1282
- color: #14162c !important;
1247
+ color: var(--text);
1283
1248
  }
1284
1249
 
1285
1250
  .lattice-ref-admin .admin-rail .rail-project span {
1286
- color: #4a4668 !important;
1251
+ color: var(--muted);
1287
1252
  }
1288
1253
 
1289
1254
  .lattice-ref-admin .page {
@@ -1293,9 +1258,9 @@
1293
1258
 
1294
1259
  .lattice-ref-admin .topbar {
1295
1260
  height: 96px;
1296
- background: rgba(244,237,255,0.92) !important;
1297
- border-bottom: 1px solid rgba(111,66,232,0.10) !important;
1298
- backdrop-filter: blur(14px) !important;
1261
+ background: rgba(244,237,255,0.92);
1262
+ border-bottom: 1px solid rgba(111,66,232,0.10);
1263
+ backdrop-filter: blur(14px);
1299
1264
  padding: 22px 34px 8px;
1300
1265
  position: sticky;
1301
1266
  }
@@ -1307,30 +1272,30 @@
1307
1272
  .lattice-ref-admin .brand h1 {
1308
1273
  font-size: 36px;
1309
1274
  letter-spacing: -0.05em;
1310
- color: #14162c !important;
1275
+ color: var(--text);
1311
1276
  }
1312
1277
 
1313
1278
  .lattice-ref-admin .brand p {
1314
- color: #4a4668 !important;
1279
+ color: var(--muted);
1315
1280
  font-size: 15px;
1316
1281
  }
1317
1282
 
1318
1283
  .lattice-ref-admin .top-actions .btn {
1319
- background: rgba(244,238,255,0.88) !important;
1320
- border-color: rgba(111,66,232,0.18) !important;
1321
- color: #14162c !important;
1284
+ background: rgba(244,238,255,0.88);
1285
+ border-color: rgba(111,66,232,0.18);
1286
+ color: var(--text);
1322
1287
  }
1323
1288
 
1324
1289
  .lattice-ref-admin .top-actions .btn:hover {
1325
- background: rgba(111,66,232,0.10) !important;
1326
- border-color: rgba(111,66,232,0.32) !important;
1327
- color: #6f42e8 !important;
1290
+ background: rgba(111,66,232,0.10);
1291
+ border-color: rgba(111,66,232,0.32);
1292
+ color: var(--accent);
1328
1293
  }
1329
1294
 
1330
1295
  .lattice-ref-admin #admin-lang-btn {
1331
1296
  min-width: 180px;
1332
1297
  justify-content: center;
1333
- border-color: rgba(111,66,232,0.26) !important;
1298
+ border-color: var(--border-strong);
1334
1299
  }
1335
1300
 
1336
1301
  .lattice-ref-admin .content {
@@ -1364,10 +1329,10 @@
1364
1329
  .lattice-ref-admin .session-card,
1365
1330
  .lattice-ref-admin .table-wrap,
1366
1331
  .lattice-ref-admin .audit-metric {
1367
- background: rgba(248,243,255,0.88) !important;
1368
- border-color: rgba(111,66,232,0.12) !important;
1369
- box-shadow: 0 8px 28px rgba(88,72,150,0.08) !important;
1370
- color: #14162c !important;
1332
+ background: rgba(248,243,255,0.88);
1333
+ border-color: var(--accent-soft);
1334
+ box-shadow: 0 8px 28px rgba(88,72,150,0.08);
1335
+ color: var(--text);
1371
1336
  border-radius: 12px;
1372
1337
  }
1373
1338
 
@@ -1384,7 +1349,7 @@
1384
1349
 
1385
1350
  .lattice-ref-admin .summary-card:hover {
1386
1351
  transform: translateY(-2px);
1387
- box-shadow: 0 14px 40px rgba(88,72,150,0.14) !important;
1352
+ box-shadow: 0 14px 40px rgba(88,72,150,0.14);
1388
1353
  }
1389
1354
 
1390
1355
  .lattice-ref-admin .summary-card::before {
@@ -1399,7 +1364,7 @@
1399
1364
  place-items: center;
1400
1365
  border-radius: 8px;
1401
1366
  color: #fff;
1402
- background: linear-gradient(135deg, #6f42e8, #5332b8);
1367
+ background: linear-gradient(135deg, var(--accent), #5332b8);
1403
1368
  font-size: 24px;
1404
1369
  transform: translateY(-50%);
1405
1370
  box-shadow: 0 12px 24px rgba(111,66,232,0.16);
@@ -1415,7 +1380,7 @@
1415
1380
  .lattice-ref-admin .summary-card .label,
1416
1381
  .lattice-ref-admin .panel-header p,
1417
1382
  .lattice-ref-admin .summary-card .meta {
1418
- color: #4a4668 !important;
1383
+ color: var(--muted);
1419
1384
  }
1420
1385
 
1421
1386
  .lattice-ref-admin .summary-card .label {
@@ -1428,11 +1393,11 @@
1428
1393
 
1429
1394
  .lattice-ref-admin td,
1430
1395
  .lattice-ref-admin th {
1431
- color: #14162c !important;
1396
+ color: var(--text);
1432
1397
  }
1433
1398
 
1434
1399
  .lattice-ref-admin .summary-card .value {
1435
- color: #6f42e8 !important;
1400
+ color: var(--accent);
1436
1401
  font-size: clamp(24px, 2.15vw, 34px);
1437
1402
  line-height: 1.05;
1438
1403
  letter-spacing: 0;
@@ -1454,77 +1419,77 @@
1454
1419
  }
1455
1420
 
1456
1421
  .lattice-ref-admin .panel-header {
1457
- border-bottom-color: rgba(111,66,232,0.10) !important;
1422
+ border-bottom-color: rgba(111,66,232,0.10);
1458
1423
  }
1459
1424
 
1460
1425
  .lattice-ref-admin .panel-header h3,
1461
1426
  .lattice-ref-admin .subpanel h4 {
1462
- color: #14162c !important;
1427
+ color: var(--text);
1463
1428
  }
1464
1429
 
1465
1430
  .lattice-ref-admin table {
1466
- color: #14162c !important;
1467
- background: transparent !important;
1431
+ color: var(--text);
1432
+ background: transparent;
1468
1433
  }
1469
1434
 
1470
1435
  .lattice-ref-admin tr,
1471
1436
  .lattice-ref-admin th,
1472
1437
  .lattice-ref-admin td {
1473
- border-color: rgba(111,66,232,0.10) !important;
1438
+ border-color: rgba(111,66,232,0.10);
1474
1439
  }
1475
1440
 
1476
1441
  .lattice-ref-admin th {
1477
- background: rgba(111,66,232,0.05) !important;
1478
- color: #4a4668 !important;
1442
+ background: rgba(111,66,232,0.05);
1443
+ color: var(--muted);
1479
1444
  }
1480
1445
 
1481
1446
  .lattice-ref-admin input,
1482
1447
  .lattice-ref-admin textarea,
1483
1448
  .lattice-ref-admin select {
1484
- background: rgba(255,255,255,0.80) !important;
1485
- border-color: rgba(111,66,232,0.16) !important;
1486
- color: #14162c !important;
1449
+ background: rgba(255,255,255,0.80);
1450
+ border-color: rgba(111,66,232,0.16);
1451
+ color: var(--text);
1487
1452
  }
1488
1453
 
1489
1454
  .lattice-ref-admin input:focus,
1490
1455
  .lattice-ref-admin textarea:focus,
1491
1456
  .lattice-ref-admin select:focus {
1492
- border-color: rgba(111,66,232,0.44) !important;
1493
- box-shadow: 0 0 0 3px rgba(111,66,232,0.08) !important;
1457
+ border-color: rgba(111,66,232,0.44);
1458
+ box-shadow: 0 0 0 3px rgba(111,66,232,0.08);
1494
1459
  }
1495
1460
 
1496
1461
  .lattice-ref-admin label {
1497
- color: #4a4668 !important;
1462
+ color: var(--muted);
1498
1463
  }
1499
1464
 
1500
1465
  .lattice-ref-admin .item {
1501
- background: rgba(255,255,255,0.70) !important;
1502
- border-color: rgba(111,66,232,0.10) !important;
1503
- color: #14162c !important;
1466
+ background: rgba(255,255,255,0.70);
1467
+ border-color: rgba(111,66,232,0.10);
1468
+ color: var(--text);
1504
1469
  }
1505
1470
 
1506
1471
  .lattice-ref-admin .preview {
1507
- color: #4a4668 !important;
1472
+ color: var(--muted);
1508
1473
  }
1509
1474
 
1510
1475
  .lattice-ref-admin .tag {
1511
- color: #4a4668 !important;
1512
- border-color: rgba(111,66,232,0.15) !important;
1513
- background: rgba(255,255,255,0.60) !important;
1476
+ color: var(--muted);
1477
+ border-color: rgba(111,66,232,0.15);
1478
+ background: rgba(255,255,255,0.60);
1514
1479
  }
1515
1480
 
1516
1481
  .lattice-ref-admin .muted {
1517
- color: #4a4668 !important;
1482
+ color: var(--muted);
1518
1483
  }
1519
1484
 
1520
1485
  .lattice-ref-admin .notice {
1521
- background: rgba(111,66,232,0.08) !important;
1522
- border-color: rgba(111,66,232,0.20) !important;
1523
- color: #4a4668 !important;
1486
+ background: rgba(111,66,232,0.08);
1487
+ border-color: rgba(111,66,232,0.20);
1488
+ color: var(--muted);
1524
1489
  }
1525
1490
 
1526
1491
  .lattice-ref-admin .status-copy {
1527
- color: #4a4668 !important;
1492
+ color: var(--muted);
1528
1493
  }
1529
1494
 
1530
1495
  .lattice-ref-admin .inline-control {
@@ -1547,10 +1512,10 @@
1547
1512
  .lattice-ref-admin .sso-template-help {
1548
1513
  margin-top: 12px;
1549
1514
  padding: 11px 12px;
1550
- border: 1px solid rgba(111,66,232,0.14);
1515
+ border: 1px solid var(--border);
1551
1516
  border-radius: 8px;
1552
1517
  background: rgba(111,66,232,0.06);
1553
- color: #4a4668;
1518
+ color: var(--muted);
1554
1519
  font-size: 12px;
1555
1520
  line-height: 1.5;
1556
1521
  }
@@ -1566,14 +1531,14 @@
1566
1531
  align-items: center;
1567
1532
  gap: 10px;
1568
1533
  min-width: 0;
1569
- border: 1px solid rgba(111,66,232,0.12);
1534
+ border: 1px solid var(--accent-soft);
1570
1535
  border-radius: 8px;
1571
1536
  background: rgba(255,255,255,0.70);
1572
1537
  padding: 11px 12px;
1573
1538
  }
1574
1539
 
1575
1540
  .lattice-ref-admin .enterprise-cap-card i {
1576
- color: #7a74a0;
1541
+ color: var(--faint);
1577
1542
  font-size: 18px;
1578
1543
  }
1579
1544
 
@@ -1584,7 +1549,7 @@
1584
1549
  .lattice-ref-admin .enterprise-cap-card span {
1585
1550
  flex: 1;
1586
1551
  min-width: 0;
1587
- color: #14162c;
1552
+ color: var(--text);
1588
1553
  font-size: 13px;
1589
1554
  font-weight: 800;
1590
1555
  overflow: hidden;
@@ -1594,7 +1559,7 @@
1594
1559
  }
1595
1560
 
1596
1561
  .lattice-ref-admin .enterprise-cap-card strong {
1597
- color: #4a4668;
1562
+ color: var(--muted);
1598
1563
  font-size: 11px;
1599
1564
  }
1600
1565
 
@@ -1615,13 +1580,13 @@
1615
1580
  }
1616
1581
 
1617
1582
  .lattice-ref-admin .enterprise-kv span {
1618
- color: #4a4668;
1583
+ color: var(--muted);
1619
1584
  font-size: 12px;
1620
1585
  font-weight: 800;
1621
1586
  }
1622
1587
 
1623
1588
  .lattice-ref-admin .enterprise-kv strong {
1624
- color: #14162c;
1589
+ color: var(--text);
1625
1590
  font-size: 12px;
1626
1591
  line-height: 1.45;
1627
1592
  overflow-wrap: anywhere;
@@ -1634,7 +1599,7 @@
1634
1599
  border: 1px solid rgba(111,66,232,0.10);
1635
1600
  border-radius: 8px;
1636
1601
  background: rgba(20,22,44,0.05);
1637
- color: #14162c;
1602
+ color: var(--text);
1638
1603
  padding: 12px;
1639
1604
  font-size: 12px;
1640
1605
  white-space: pre-wrap;
@@ -1662,25 +1627,12 @@
1662
1627
  Light lavender theme — unified with chat/graph/admin pages.
1663
1628
  ============================================================ */
1664
1629
 
1665
- body.lattice-ref-auth {
1666
- --bg: #f7f3ff;
1667
- --text: #1f2140;
1668
- --faint: #8a86a8;
1669
- --muted: #66627f;
1670
- --accent: #6f4bf6;
1671
- --accent-2: #7b6dff;
1672
- --shadow: 0 26px 80px rgba(86, 70, 160, 0.22);
1673
- }
1674
-
1675
1630
  * { box-sizing: border-box; margin: 0; padding: 0; }
1676
1631
  html, body.lattice-ref-auth { height: 100%; }
1677
1632
  body.lattice-ref-auth {
1678
1633
  font-family: Inter, -apple-system, BlinkMacSystemFont, sans-serif;
1679
1634
  color: var(--text);
1680
- background:
1681
- radial-gradient(circle at 74% 22%, rgba(111,75,246,0.16), transparent 28%),
1682
- radial-gradient(circle at 16% 18%, rgba(196,181,253,0.32), transparent 26%),
1683
- linear-gradient(135deg, #fbf9ff 0%, #f4efff 48%, #ffffff 100%);
1635
+ background: var(--app-bg);
1684
1636
  display: flex;
1685
1637
  align-items: center;
1686
1638
  justify-content: center;
@@ -1969,20 +1921,6 @@
1969
1921
  ============================================================ */
1970
1922
 
1971
1923
  body.lattice-ref-admin {
1972
- --bg: #f3ecff;
1973
- --panel: rgba(248,243,255,0.92);
1974
- --panel-2: rgba(244,238,255,0.88);
1975
- --panel-3: rgba(240,233,255,0.84);
1976
- --text: #14162c;
1977
- --muted: #4a4668;
1978
- --faint: #7a74a0;
1979
- --accent: #6f42e8;
1980
- --accent-2: #22c4a0;
1981
- --accent-3: #a78bfa;
1982
- --danger: #e53935;
1983
- --border: rgba(111,66,232,0.14);
1984
- --border-strong: rgba(111,66,232,0.26);
1985
- --shadow: 0 18px 54px rgba(88,72,150,0.14);
1986
1924
  --radius: 8px;
1987
1925
  --radius-sm: 8px;
1988
1926
  }
@@ -1994,9 +1932,9 @@
1994
1932
  font-family: Inter, -apple-system, BlinkMacSystemFont, sans-serif;
1995
1933
  color: var(--text);
1996
1934
  background:
1997
- radial-gradient(circle at 82% 12%, rgba(111,66,232,0.14), transparent 30%),
1935
+ radial-gradient(circle at 82% 12%, var(--border), transparent 30%),
1998
1936
  radial-gradient(circle at 10% 80%, rgba(180,160,255,0.16), transparent 35%),
1999
- linear-gradient(180deg, #f3ecff 0%, #efe8ff 52%, #f2ecff 100%);
1937
+ linear-gradient(180deg, var(--bg) 0%, var(--surface-2) 52%, #f2ecff 100%);
2000
1938
  }
2001
1939
 
2002
1940
  body::before {
@@ -2098,14 +2036,14 @@
2098
2036
  }
2099
2037
 
2100
2038
  .btn.primary {
2101
- background: rgba(111,66,232,0.12);
2039
+ background: var(--accent-soft);
2102
2040
  border-color: rgba(111,66,232,0.28);
2103
2041
  }
2104
2042
 
2105
2043
  .btn.danger:hover {
2106
2044
  background: rgba(229,57,53,0.08);
2107
2045
  border-color: rgba(229,57,53,0.22);
2108
- color: #e53935;
2046
+ color: var(--danger);
2109
2047
  }
2110
2048
 
2111
2049
  .content {
@@ -2171,7 +2109,7 @@
2171
2109
  .notice {
2172
2110
  border: 1px solid rgba(111,66,232,0.18);
2173
2111
  background: rgba(111,66,232,0.07);
2174
- color: #4a4668;
2112
+ color: var(--muted);
2175
2113
  border-radius: 12px;
2176
2114
  padding: 12px 14px;
2177
2115
  font-size: 13px;
@@ -2368,7 +2306,7 @@
2368
2306
  font-weight: 600;
2369
2307
  }
2370
2308
 
2371
- .tag.high { border-color: rgba(229,57,53,0.32); color: #e53935; background: rgba(229,57,53,0.07); }
2309
+ .tag.high { border-color: rgba(229,57,53,0.32); color: var(--danger); background: rgba(229,57,53,0.07); }
2372
2310
  .tag.medium { border-color: rgba(216,165,74,0.34); color: #b07a00; background: rgba(216,165,74,0.08); }
2373
2311
  .tag.low { border-color: rgba(34,196,160,0.34); color: #0d8f72; background: rgba(34,196,160,0.08); }
2374
2312
 
@@ -2509,13 +2447,13 @@
2509
2447
  .table-btn:hover {
2510
2448
  border-color: rgba(111,66,232,0.32);
2511
2449
  background: rgba(111,66,232,0.08);
2512
- color: #6f42e8;
2450
+ color: var(--accent);
2513
2451
  }
2514
2452
 
2515
2453
  .table-btn.danger:hover {
2516
2454
  border-color: rgba(229,57,53,0.24);
2517
2455
  background: rgba(229,57,53,0.08);
2518
- color: #e53935;
2456
+ color: var(--danger);
2519
2457
  }
2520
2458
 
2521
2459
  .role {
@@ -2536,7 +2474,7 @@
2536
2474
  }
2537
2475
 
2538
2476
  .error {
2539
- color: #e53935;
2477
+ color: var(--danger);
2540
2478
  }
2541
2479
 
2542
2480
  @media (max-width: 1100px) {
@@ -2572,7 +2510,7 @@
2572
2510
  top: calc(100% + 6px);
2573
2511
  right: 0;
2574
2512
  background: rgba(247,242,255,0.98);
2575
- border: 1px solid rgba(111,66,232,0.14);
2513
+ border: 1px solid var(--border);
2576
2514
  border-radius: 8px;
2577
2515
  padding: 4px;
2578
2516
  min-width: 130px;
@@ -2593,33 +2531,13 @@
2593
2531
  /* ============================================================
2594
2532
  GRAPH PAGE (graph.html)
2595
2533
  ============================================================ */
2596
- body.lattice-ref-graph {
2597
- color-scheme: light;
2598
- --bg: #f3ecff;
2599
- --bg-soft: #ede6ff;
2600
- --panel: rgba(255, 252, 255, 0.88);
2601
- --panel-strong: rgba(250, 246, 255, 0.96);
2602
- --line: rgba(111, 66, 232, 0.12);
2603
- --line-strong: rgba(111, 66, 232, 0.22);
2604
- --text: #14162c;
2605
- --muted: #4a4668;
2606
- --faint: #7a74a0;
2607
- --accent: #6f42e8;
2608
- --accent-2: #22c4a0;
2609
- --danger: #e53935;
2610
- --shadow: 0 18px 60px rgba(88, 72, 150, 0.14);
2611
- }
2612
-
2613
2534
  * { box-sizing: border-box; }
2614
2535
  html, body.lattice-ref-graph { height: 100%; }
2615
2536
  body.lattice-ref-graph {
2616
2537
  margin: 0;
2617
2538
  overflow: hidden;
2618
2539
  color: var(--text);
2619
- background:
2620
- radial-gradient(circle at 50% 42%, rgba(111,66,232,0.08), transparent 34%),
2621
- radial-gradient(circle at 70% 22%, rgba(180,160,255,0.10), transparent 28%),
2622
- linear-gradient(180deg, #f3ecff, #ede6ff 62%, #f0ebff);
2540
+ background: var(--app-bg);
2623
2541
  font-family: "SF Pro Display", "Inter", ui-sans-serif, system-ui, -apple-system, sans-serif;
2624
2542
  }
2625
2543
 
@@ -2720,7 +2638,7 @@ body.lattice-ref-graph {
2720
2638
  flex-shrink: 0;
2721
2639
  font-size: 11px;
2722
2640
  color: #fff;
2723
- background: linear-gradient(135deg, #6f42e8, #9a78f0);
2641
+ background: linear-gradient(135deg, var(--accent), #9a78f0);
2724
2642
  border-radius: 999px;
2725
2643
  padding: 5px 10px;
2726
2644
  font-weight: 700;
@@ -2807,7 +2725,7 @@ body.lattice-ref-graph {
2807
2725
  border: 1px solid rgba(111,66,232,0.10);
2808
2726
  border-radius: 8px;
2809
2727
  background: rgba(255,255,255,0.72);
2810
- color: #14162c;
2728
+ color: var(--text);
2811
2729
  padding: 12px 12px 13px;
2812
2730
  cursor: pointer;
2813
2731
  transition: 140ms ease;
@@ -2903,7 +2821,7 @@ body.lattice-ref-graph {
2903
2821
  display: flex;
2904
2822
  flex-direction: column;
2905
2823
  background: rgba(248, 244, 255, 0.96);
2906
- border-left: 1px solid rgba(111,66,232,0.12);
2824
+ border-left: 1px solid var(--accent-soft);
2907
2825
  overflow: hidden;
2908
2826
  }
2909
2827
 
@@ -2947,7 +2865,7 @@ body.lattice-ref-graph {
2947
2865
  border-radius: 8px;
2948
2866
  background: rgba(255,255,255,0.80);
2949
2867
  padding: 12px 13px;
2950
- color: #14162c;
2868
+ color: var(--text);
2951
2869
  }
2952
2870
 
2953
2871
  .stat strong {
@@ -2971,7 +2889,7 @@ body.lattice-ref-graph {
2971
2889
  }
2972
2890
 
2973
2891
  .section-label {
2974
- color: #6f42e8;
2892
+ color: var(--accent);
2975
2893
  font-size: 11px;
2976
2894
  text-transform: uppercase;
2977
2895
  letter-spacing: 0.08em;
@@ -3120,7 +3038,7 @@ body.lattice-ref-graph {
3120
3038
 
3121
3039
  .local-source-btn.primary {
3122
3040
  grid-column: 1 / -1;
3123
- background: linear-gradient(135deg, #6f42e8, #7b61ff);
3041
+ background: linear-gradient(135deg, var(--accent), #7b61ff);
3124
3042
  color: #fff;
3125
3043
  border-color: rgba(111,66,232,0.3);
3126
3044
  }
@@ -3180,7 +3098,7 @@ body.lattice-ref-graph {
3180
3098
  border-color: rgba(111,66,232,0.48);
3181
3099
  background: rgba(111,66,232,0.11);
3182
3100
  color: var(--accent);
3183
- box-shadow: inset 0 0 0 1px rgba(111,66,232,0.12);
3101
+ box-shadow: inset 0 0 0 1px var(--accent-soft);
3184
3102
  }
3185
3103
 
3186
3104
  .local-audit-grid {
@@ -3275,7 +3193,7 @@ body.lattice-ref-graph {
3275
3193
  .legend-name {
3276
3194
  flex: 1;
3277
3195
  min-width: 0;
3278
- color: #14162c;
3196
+ color: var(--text);
3279
3197
  font-size: 13px;
3280
3198
  font-weight: 500;
3281
3199
  overflow-wrap: anywhere;
@@ -3283,7 +3201,7 @@ body.lattice-ref-graph {
3283
3201
 
3284
3202
  .filter-count,
3285
3203
  .legend-meta {
3286
- color: #6b6885;
3204
+ color: var(--muted);
3287
3205
  font-size: 12px;
3288
3206
  font-weight: 600;
3289
3207
  text-align: right;
@@ -3334,11 +3252,11 @@ body.lattice-ref-graph {
3334
3252
  }
3335
3253
 
3336
3254
  .metric-card {
3337
- border: 1px solid rgba(111,66,232,0.14);
3255
+ border: 1px solid var(--border);
3338
3256
  border-radius: 8px;
3339
3257
  padding: 11px 12px;
3340
3258
  background: rgba(255,255,255,0.82);
3341
- color: #14162c;
3259
+ color: var(--text);
3342
3260
  }
3343
3261
 
3344
3262
  .metric-card strong {
@@ -3357,11 +3275,11 @@ body.lattice-ref-graph {
3357
3275
  }
3358
3276
 
3359
3277
  .meta-block {
3360
- border: 1px solid rgba(111,66,232,0.12);
3278
+ border: 1px solid var(--accent-soft);
3361
3279
  border-radius: 8px;
3362
3280
  background: rgba(255,255,255,0.74);
3363
3281
  padding: 12px;
3364
- color: #4a4668;
3282
+ color: var(--muted);
3365
3283
  font-size: 12px;
3366
3284
  line-height: 1.65;
3367
3285
  white-space: pre-wrap;
@@ -3382,7 +3300,7 @@ body.lattice-ref-graph {
3382
3300
  font-size: 12px;
3383
3301
  font-weight: 700;
3384
3302
  color: #fff;
3385
- background: linear-gradient(135deg, #6f42e8, #8b6cff);
3303
+ background: linear-gradient(135deg, var(--accent), var(--accent-2));
3386
3304
  box-shadow: 0 8px 22px rgba(111,66,232,0.22);
3387
3305
  }
3388
3306
 
@@ -3577,36 +3495,11 @@ body.lattice-ref-graph {
3577
3495
  CHAT PAGE (chat.html)
3578
3496
  ============================================================ */
3579
3497
 
3580
- body.lattice-ref-chat {
3581
- --bg: #f3ecff;
3582
- --surface: #f6f0ff;
3583
- --surface-2: #efe8ff;
3584
- --surface-3: #e8dfff;
3585
- --accent: #6f42e8;
3586
- --accent-2: #8b6cff;
3587
- --accent-3: #a78fff;
3588
- --accent-pink: #c084fc;
3589
- --accent-soft: rgba(111,66,232,0.12);
3590
- --danger: #e53935;
3591
- --text: #14162c;
3592
- --muted: #4a4668;
3593
- --faint: #7a74a0;
3594
- --border: rgba(111,66,232,0.14);
3595
- --border-strong: rgba(111,66,232,0.26);
3596
- --shadow: 0 18px 54px rgba(88,72,150,0.15);
3597
- --shadow-sm: 0 6px 20px rgba(88,72,150,0.10);
3598
- --glow-green: 0 0 34px rgba(111,66,232,0.14);
3599
- --glow-blue: 0 0 34px rgba(139,108,255,0.14);
3600
- --content-width: 900px;
3601
- --radius: 14px;
3602
- --radius-sm: 8px;
3603
- }
3604
-
3605
3498
  * { box-sizing: border-box; margin: 0; padding: 0; }
3606
3499
 
3607
3500
  body.lattice-ref-chat {
3608
3501
  font-family: 'Inter', -apple-system, sans-serif;
3609
- background: var(--bg);
3502
+ background: var(--app-bg);
3610
3503
  color: var(--text);
3611
3504
  overflow: hidden;
3612
3505
  }
@@ -3619,9 +3512,9 @@ body.lattice-ref-graph {
3619
3512
  pointer-events: none;
3620
3513
  z-index: 0;
3621
3514
  background:
3622
- radial-gradient(circle at 82% 12%, rgba(111,66,232,0.14), transparent 30%),
3515
+ radial-gradient(circle at 82% 12%, var(--border), transparent 30%),
3623
3516
  radial-gradient(circle at 10% 80%, rgba(180,160,255,0.16), transparent 35%),
3624
- linear-gradient(180deg, #f3ecff 0%, #efe8ff 52%, #f2ecff 100%);
3517
+ linear-gradient(180deg, var(--bg) 0%, var(--surface-2) 52%, #f2ecff 100%);
3625
3518
  }
3626
3519
 
3627
3520
  .bg-shapes {
@@ -3699,7 +3592,7 @@ body.lattice-ref-graph {
3699
3592
  .logo-box {
3700
3593
  width: 38px;
3701
3594
  height: 38px;
3702
- background: linear-gradient(135deg, #6f42e8 0%, #9a78f0 100%);
3595
+ background: linear-gradient(135deg, var(--accent) 0%, #9a78f0 100%);
3703
3596
  border-radius: 10px;
3704
3597
  display: flex;
3705
3598
  align-items: center;
@@ -3715,11 +3608,11 @@ body.lattice-ref-graph {
3715
3608
  font-size: 15px;
3716
3609
  font-weight: 800;
3717
3610
  letter-spacing: -0.02em;
3718
- color: #14162c;
3611
+ color: var(--text);
3719
3612
  }
3720
3613
 
3721
3614
  .brand-subtitle {
3722
- color: #6f42e8;
3615
+ color: var(--accent);
3723
3616
  font-size: 10.5px;
3724
3617
  margin-top: 1px;
3725
3618
  letter-spacing: 0.03em;
@@ -3738,7 +3631,7 @@ body.lattice-ref-graph {
3738
3631
  .user-avatar {
3739
3632
  width: 26px; height: 26px;
3740
3633
  border-radius: 50%;
3741
- background: linear-gradient(135deg, #6f42e8, #9a78f0);
3634
+ background: linear-gradient(135deg, var(--accent), #9a78f0);
3742
3635
  display: flex; align-items: center; justify-content: center;
3743
3636
  font-size: 11px; font-weight: 700; color: #fff;
3744
3637
  flex-shrink: 0;
@@ -3752,7 +3645,7 @@ body.lattice-ref-graph {
3752
3645
  width: 100%;
3753
3646
  padding: 7px 10px 7px 30px;
3754
3647
  background: rgba(255,255,255,0.60);
3755
- border: 1px solid rgba(111,66,232,0.14);
3648
+ border: 1px solid var(--border);
3756
3649
  border-radius: 8px;
3757
3650
  color: var(--text);
3758
3651
  font-size: 12px;
@@ -3876,7 +3769,7 @@ body.lattice-ref-graph {
3876
3769
  .new-chat-btn:hover {
3877
3770
  background: rgba(111,66,232,0.10);
3878
3771
  border-color: rgba(111,66,232,0.36);
3879
- box-shadow: 0 0 16px rgba(111,66,232,0.12);
3772
+ box-shadow: 0 0 16px var(--accent-soft);
3880
3773
  }
3881
3774
 
3882
3775
  .sidebar-primary-actions {
@@ -3975,7 +3868,7 @@ body.lattice-ref-graph {
3975
3868
  display: inline-flex;
3976
3869
  align-items: center;
3977
3870
  gap: 6px;
3978
- border: 1px solid rgba(111,66,232,0.14);
3871
+ border: 1px solid var(--border);
3979
3872
  background: rgba(255,255,255,0.60);
3980
3873
  border-radius: 999px;
3981
3874
  padding: 5px 11px;
@@ -4058,7 +3951,7 @@ body.lattice-ref-graph {
4058
3951
  }
4059
3952
  .mcp-modal-header {
4060
3953
  padding: 18px 20px;
4061
- border-bottom: 1px solid rgba(111,66,232,0.12);
3954
+ border-bottom: 1px solid var(--accent-soft);
4062
3955
  display: flex; align-items: center; justify-content: space-between;
4063
3956
  }
4064
3957
  .mcp-modal-header h3 { font-size: 15px; font-weight: 700; color: var(--text); }
@@ -4086,7 +3979,7 @@ body.lattice-ref-graph {
4086
3979
  color: var(--accent); cursor: pointer; transition: all .15s; flex-shrink: 0;
4087
3980
  }
4088
3981
  .mcp-install-btn:hover { background: rgba(111,66,232,0.16); }
4089
- .mcp-install-btn.installed { border-color: rgba(111,66,232,0.12); background: rgba(255,255,255,0.60); color: var(--faint); }
3982
+ .mcp-install-btn.installed { border-color: var(--accent-soft); background: rgba(255,255,255,0.60); color: var(--faint); }
4090
3983
  /* MCP 소스 배지 */
4091
3984
  .mcp-source-badge {
4092
3985
  font-size: 9.5px; font-weight: 700; padding: 2px 6px; border-radius: 4px;
@@ -4095,7 +3988,7 @@ body.lattice-ref-graph {
4095
3988
  .mcp-source-badge.claude-code { background: rgba(100,180,255,0.12); color: #64b4ff; border: 1px solid rgba(100,180,255,0.2); }
4096
3989
  .mcp-source-badge.custom { background: rgba(255,180,60,0.12); color: #ffb43c; border: 1px solid rgba(255,180,60,0.2); }
4097
3990
  /* MCP 탭 */
4098
- .mcp-tabs { display: flex; gap: 4px; padding: 12px 20px 0; border-bottom: 1px solid rgba(111,66,232,0.14); }
3991
+ .mcp-tabs { display: flex; gap: 4px; padding: 12px 20px 0; border-bottom: 1px solid var(--border); }
4099
3992
  .mcp-tab {
4100
3993
  padding: 7px 14px; border-radius: 8px 8px 0 0; font-size: 12px; font-weight: 600;
4101
3994
  color: var(--faint); cursor: pointer; border: none; background: none;
@@ -4115,7 +4008,7 @@ body.lattice-ref-graph {
4115
4008
  .mcp-add-form .field-hint { font-size: 10.5px; color: var(--faint); margin-top: -6px; }
4116
4009
  .mcp-submit-btn {
4117
4010
  padding: 9px 18px; border-radius: 8px; font-size: 13px; font-weight: 700;
4118
- background: rgba(111,66,232,0.12); border: 1px solid rgba(111,66,232,0.30);
4011
+ background: var(--accent-soft); border: 1px solid rgba(111,66,232,0.30);
4119
4012
  color: var(--accent); cursor: pointer; transition: all .15s; align-self: flex-end;
4120
4013
  }
4121
4014
  .mcp-submit-btn:hover { background: rgba(111,66,232,0.22); }
@@ -4138,14 +4031,14 @@ body.lattice-ref-graph {
4138
4031
  }
4139
4032
  .acct-tabs {
4140
4033
  display: flex;
4141
- border-bottom: 1px solid rgba(111,66,232,0.12);
4034
+ border-bottom: 1px solid var(--accent-soft);
4142
4035
  }
4143
4036
  .acct-tab {
4144
4037
  flex: 1; padding: 14px; font-size: 13px; font-weight: 500;
4145
4038
  background: none; border: none; color: var(--muted); cursor: pointer;
4146
4039
  transition: all .15s; border-bottom: 2px solid transparent;
4147
4040
  }
4148
- .acct-tab.active { color: var(--text, #14162c); border-bottom-color: var(--accent, #6366f1); }
4041
+ .acct-tab.active { color: var(--text, var(--text)); border-bottom-color: var(--accent, #6366f1); }
4149
4042
  .acct-body.lattice-ref-chat { padding: 24px; display: flex; flex-direction: column; gap: 14px; }
4150
4043
  .acct-tab-panel { display: none; flex-direction: column; gap: 14px; }
4151
4044
  .acct-tab-panel.active { display: flex; }
@@ -4155,7 +4048,7 @@ body.lattice-ref-graph {
4155
4048
  background: rgba(255,255,255,0.88);
4156
4049
  border: 1px solid rgba(111,66,232,0.18);
4157
4050
  border-radius: 8px;
4158
- color: var(--text, #14162c);
4051
+ color: var(--text, var(--text));
4159
4052
  padding: 8px 12px;
4160
4053
  font-size: 13px;
4161
4054
  outline: none;
@@ -4195,7 +4088,7 @@ body.lattice-ref-graph {
4195
4088
  padding: 9px 14px; font-size: 13px; cursor: pointer;
4196
4089
  color: var(--muted); transition: background .12s;
4197
4090
  }
4198
- .lang-option:hover { background: rgba(111,66,232,0.07); color: var(--text, #14162c); }
4091
+ .lang-option:hover { background: rgba(111,66,232,0.07); color: var(--text, var(--text)); }
4199
4092
  .lang-option.active { color: var(--accent, #6366f1); font-weight: 600; }
4200
4093
 
4201
4094
  .auth-lang-picker {
@@ -4253,8 +4146,8 @@ body.lattice-ref-graph {
4253
4146
  .ops-card.interactive:hover {
4254
4147
  transform: translateY(-2px);
4255
4148
  border-color: rgba(111,66,232,0.32);
4256
- background: linear-gradient(135deg, rgba(111,66,232,0.14) 0%, rgba(248,243,255,0.96) 60%);
4257
- box-shadow: var(--shadow), 0 0 30px rgba(111,66,232,0.14);
4149
+ background: linear-gradient(135deg, var(--border) 0%, rgba(248,243,255,0.96) 60%);
4150
+ box-shadow: var(--shadow), 0 0 30px var(--border);
4258
4151
  }
4259
4152
 
4260
4153
  .ops-label {
@@ -4303,7 +4196,7 @@ body.lattice-ref-graph {
4303
4196
 
4304
4197
  .ops-card:not(.primary) .ops-icon {
4305
4198
  background: rgba(255,255,255,0.60);
4306
- border: 1px solid rgba(111,66,232,0.14);
4199
+ border: 1px solid var(--border);
4307
4200
  color: var(--accent-3);
4308
4201
  }
4309
4202
 
@@ -4375,7 +4268,7 @@ body.lattice-ref-graph {
4375
4268
  }
4376
4269
 
4377
4270
  .user .bubble {
4378
- background: linear-gradient(135deg, #6f42e8 0%, #5832c8 70%, #7b61ff 100%);
4271
+ background: linear-gradient(135deg, var(--accent) 0%, #5832c8 70%, #7b61ff 100%);
4379
4272
  color: #fff;
4380
4273
  border-bottom-right-radius: 4px;
4381
4274
  box-shadow: 0 6px 24px rgba(111,66,232,0.28);
@@ -4385,7 +4278,7 @@ body.lattice-ref-graph {
4385
4278
  .ai .bubble {
4386
4279
  background: rgba(250,246,255,0.97);
4387
4280
  color: var(--text);
4388
- border: 1px solid rgba(111,66,232,0.12);
4281
+ border: 1px solid var(--accent-soft);
4389
4282
  border-bottom-left-radius: 4px;
4390
4283
  box-shadow: 0 4px 18px rgba(88,72,150,0.08);
4391
4284
  }
@@ -4571,7 +4464,7 @@ body.lattice-ref-graph {
4571
4464
  }
4572
4465
 
4573
4466
  .send-btn {
4574
- background: linear-gradient(135deg, #6f42e8, #7b61ff);
4467
+ background: linear-gradient(135deg, var(--accent), #7b61ff);
4575
4468
  color: #fff;
4576
4469
  border: none;
4577
4470
  width: 38px; height: 38px;
@@ -4665,7 +4558,7 @@ body.lattice-ref-graph {
4665
4558
  background: rgba(99,102,241,0.07); border: 1px solid rgba(99,102,241,0.2);
4666
4559
  border-radius: 12px; padding: 16px; margin-top: 4px;
4667
4560
  }
4668
- .plan-approval-card h4 { margin: 0 0 10px; color: #6f42e8; font-size: 14px; }
4561
+ .plan-approval-card h4 { margin: 0 0 10px; color: var(--accent); font-size: 14px; }
4669
4562
  .plan-approval-card ol { margin: 0 0 12px; padding-left: 20px; color: var(--text); font-size: 13px; line-height: 1.8; }
4670
4563
  .plan-approval-card .plan-meta { font-size: 11px; color: var(--muted); margin-bottom: 12px; }
4671
4564
  .plan-approval-actions { display: flex; gap: 8px; }
@@ -4894,7 +4787,7 @@ body.lattice-ref-graph {
4894
4787
  position: absolute;
4895
4788
  inset: 0;
4896
4789
  background:
4897
- radial-gradient(ellipse 70% 60% at 20% 20%, rgba(111,66,232,0.14) 0%, transparent 55%),
4790
+ radial-gradient(ellipse 70% 60% at 20% 20%, var(--border) 0%, transparent 55%),
4898
4791
  radial-gradient(ellipse 50% 50% at 80% 80%, rgba(129,140,248,0.12) 0%, transparent 55%);
4899
4792
  pointer-events: none;
4900
4793
  }
@@ -4908,7 +4801,7 @@ body.lattice-ref-graph {
4908
4801
  .auth-orb-1 {
4909
4802
  width: 400px; height: 400px;
4910
4803
  top: -150px; left: -100px;
4911
- background: rgba(111,66,232,0.14);
4804
+ background: var(--border);
4912
4805
  }
4913
4806
  .auth-orb-2 {
4914
4807
  width: 350px; height: 350px;
@@ -4939,7 +4832,7 @@ body.lattice-ref-graph {
4939
4832
 
4940
4833
  .auth-logo {
4941
4834
  width: 52px; height: 52px;
4942
- background: linear-gradient(135deg, #6f42e8, #9a78f0);
4835
+ background: linear-gradient(135deg, var(--accent), #9a78f0);
4943
4836
  border-radius: 14px;
4944
4837
  display: flex; align-items: center; justify-content: center;
4945
4838
  font-size: 24px; color: #fff;
@@ -4952,7 +4845,7 @@ body.lattice-ref-graph {
4952
4845
  text-align: center;
4953
4846
  font-size: 22px;
4954
4847
  font-weight: 800;
4955
- background: linear-gradient(135deg, #14162c 35%, #6f42e8 82%);
4848
+ background: linear-gradient(135deg, var(--text) 35%, var(--accent) 82%);
4956
4849
  -webkit-background-clip: text;
4957
4850
  -webkit-text-fill-color: transparent;
4958
4851
  background-clip: text;
@@ -4989,7 +4882,7 @@ body.lattice-ref-graph {
4989
4882
  .auth-submit {
4990
4883
  width: 100%;
4991
4884
  padding: 13px;
4992
- background: linear-gradient(135deg, #6f42e8, #5832c8);
4885
+ background: linear-gradient(135deg, var(--accent), #5832c8);
4993
4886
  color: #030d09;
4994
4887
  border: none;
4995
4888
  border-radius: 10px;
@@ -5002,7 +4895,7 @@ body.lattice-ref-graph {
5002
4895
  }
5003
4896
 
5004
4897
  .auth-submit:hover {
5005
- background: linear-gradient(135deg, #6f42e8, #9a78f0);
4898
+ background: linear-gradient(135deg, var(--accent), #9a78f0);
5006
4899
  box-shadow: 0 0 30px rgba(111,66,232,0.32), 0 4px 14px rgba(0,0,0,0.3);
5007
4900
  transform: translateY(-1px);
5008
4901
  }
@@ -5938,7 +5831,7 @@ body.lattice-ref-graph {
5938
5831
  }
5939
5832
 
5940
5833
  .empty-chip {
5941
- border: 1px solid rgba(111,66,232,0.12);
5834
+ border: 1px solid var(--accent-soft);
5942
5835
  background: linear-gradient(135deg, rgba(111,66,232,0.06), rgba(129,140,248,0.04));
5943
5836
  border-radius: var(--radius);
5944
5837
  padding: 14px;
@@ -6043,7 +5936,7 @@ body.lattice-ref-graph {
6043
5936
  transition: transform 0.25s cubic-bezier(0.4,0,0.2,1);
6044
5937
  border-right: 1px solid var(--border-strong);
6045
5938
  box-shadow: 4px 0 32px rgba(88,72,150,0.18);
6046
- background: #f6f0ff;
5939
+ background: var(--surface);
6047
5940
  backdrop-filter: none;
6048
5941
  -webkit-backdrop-filter: none;
6049
5942
  }
@@ -6354,38 +6247,38 @@ body.lattice-ref-graph {
6354
6247
 
6355
6248
  /* ── 패널 공통 ── */
6356
6249
  .admin-panel {
6357
- background: rgba(246,240,255,0.98) !important;
6358
- border-left: 1px solid rgba(111,66,232,0.14) !important;
6359
- backdrop-filter: blur(24px) !important;
6360
- color: #14162c !important;
6250
+ background: rgba(246,240,255,0.98);
6251
+ border-left: 1px solid var(--border);
6252
+ backdrop-filter: blur(24px);
6253
+ color: var(--text);
6361
6254
  }
6362
6255
  .admin-header {
6363
- background: rgba(244,237,255,0.95) !important;
6364
- border-bottom: 1px solid rgba(111,66,232,0.12) !important;
6256
+ background: rgba(244,237,255,0.95);
6257
+ border-bottom: 1px solid var(--accent-soft);
6365
6258
  }
6366
6259
  .admin-form-field label {
6367
- color: var(--faint) !important;
6368
- font-size: 11px !important;
6369
- letter-spacing: 0.05em !important;
6260
+ color: var(--faint);
6261
+ font-size: 11px;
6262
+ letter-spacing: 0.05em;
6370
6263
  }
6371
6264
  .admin-form-field input, .admin-form-field select, .admin-form-field textarea {
6372
- background: rgba(255,255,255,0.90) !important;
6373
- border-color: rgba(111,66,232,0.18) !important;
6374
- border-radius: 9px !important;
6375
- color: #14162c !important;
6265
+ background: rgba(255,255,255,0.90);
6266
+ border-color: rgba(111,66,232,0.18);
6267
+ border-radius: 9px;
6268
+ color: var(--text);
6376
6269
  }
6377
6270
  .admin-form-field input:focus, .admin-form-field select:focus, .admin-form-field textarea:focus {
6378
- border-color: rgba(111,66,232,0.50) !important;
6379
- box-shadow: 0 0 0 3px rgba(111,66,232,0.08) !important;
6271
+ border-color: rgba(111,66,232,0.50);
6272
+ box-shadow: 0 0 0 3px rgba(111,66,232,0.08);
6380
6273
  }
6381
6274
  .admin-action {
6382
- background: linear-gradient(135deg, rgba(111,66,232,0.14), rgba(139,108,255,0.10)) !important;
6383
- border-color: rgba(111,66,232,0.28) !important;
6384
- color: #6f42e8 !important;
6275
+ background: linear-gradient(135deg, var(--border), rgba(139,108,255,0.10));
6276
+ border-color: rgba(111,66,232,0.28);
6277
+ color: var(--accent);
6385
6278
  }
6386
6279
  .admin-action:hover {
6387
- background: linear-gradient(135deg, rgba(111,66,232,0.22), rgba(139,108,255,0.16)) !important;
6388
- box-shadow: 0 0 16px rgba(111,66,232,0.16) !important;
6280
+ background: linear-gradient(135deg, rgba(111,66,232,0.22), rgba(139,108,255,0.16));
6281
+ box-shadow: 0 0 16px rgba(111,66,232,0.16);
6389
6282
  }
6390
6283
 
6391
6284
  /* ── 빈 채팅 화면 ── */
@@ -6401,13 +6294,13 @@ body.lattice-ref-graph {
6401
6294
  }
6402
6295
  .empty-icon {
6403
6296
  width: 72px; height: 72px;
6404
- background: linear-gradient(135deg, rgba(111,66,232,0.14), rgba(129,140,248,0.12));
6405
- border: 1px solid rgba(111,66,232,0.14);
6297
+ background: linear-gradient(135deg, var(--border), rgba(129,140,248,0.12));
6298
+ border: 1px solid var(--border);
6406
6299
  border-radius: 20px;
6407
6300
  display: flex; align-items: center; justify-content: center;
6408
6301
  font-size: 32px;
6409
6302
  color: var(--accent);
6410
- box-shadow: 0 0 30px rgba(111,66,232,0.12);
6303
+ box-shadow: 0 0 30px var(--accent-soft);
6411
6304
  }
6412
6305
  .empty-title {
6413
6306
  font-size: 20px; font-weight: 800;
@@ -6421,18 +6314,18 @@ body.lattice-ref-graph {
6421
6314
 
6422
6315
  /* ── 파일 다운로드 카드 개선 ── */
6423
6316
  .file-download-card {
6424
- border: 1px solid rgba(111,66,232,0.16) !important;
6425
- background: linear-gradient(135deg, rgba(111,66,232,0.07), rgba(129,140,248,0.04)) !important;
6426
- border-radius: var(--radius) !important;
6427
- box-shadow: 0 4px 16px rgba(111,66,232,0.08) !important;
6317
+ border: 1px solid rgba(111,66,232,0.16);
6318
+ background: linear-gradient(135deg, rgba(111,66,232,0.07), rgba(129,140,248,0.04));
6319
+ border-radius: var(--radius);
6320
+ box-shadow: 0 4px 16px rgba(111,66,232,0.08);
6428
6321
  }
6429
6322
  .file-dl-btn {
6430
- background: linear-gradient(135deg, rgba(111,66,232,0.14), rgba(129,140,248,0.08)) !important;
6431
- border-color: rgba(111,66,232,0.24) !important;
6323
+ background: linear-gradient(135deg, var(--border), rgba(129,140,248,0.08));
6324
+ border-color: rgba(111,66,232,0.24);
6432
6325
  }
6433
6326
  .file-dl-btn:hover {
6434
- background: linear-gradient(135deg, rgba(111,66,232,0.20), rgba(129,140,248,0.14)) !important;
6435
- box-shadow: 0 0 12px rgba(111,66,232,0.16) !important;
6327
+ background: linear-gradient(135deg, rgba(111,66,232,0.20), rgba(129,140,248,0.14));
6328
+ box-shadow: 0 0 12px rgba(111,66,232,0.16);
6436
6329
  }
6437
6330
 
6438
6331
  /* ── setup wizard 버튼 ── */
@@ -6459,43 +6352,43 @@ body.lattice-ref-graph {
6459
6352
 
6460
6353
  /* ── MCP 드롭다운 개선 ── */
6461
6354
  .mcp-dropdown {
6462
- background: rgba(255,255,255,0.96) !important;
6463
- border: 1px solid rgba(111,66,232,0.16) !important;
6464
- border-radius: var(--radius) !important;
6465
- box-shadow: var(--shadow), 0 0 20px rgba(111,66,232,0.08) !important;
6355
+ background: rgba(255,255,255,0.96);
6356
+ border: 1px solid rgba(111,66,232,0.16);
6357
+ border-radius: var(--radius);
6358
+ box-shadow: var(--shadow), 0 0 20px rgba(111,66,232,0.08);
6466
6359
  }
6467
6360
  .mcp-recommend-btn {
6468
- background: linear-gradient(135deg, rgba(111,66,232,0.10), rgba(129,140,248,0.07)) !important;
6469
- border: 1px solid rgba(111,66,232,0.16) !important;
6470
- border-radius: 999px !important;
6471
- color: var(--accent) !important;
6361
+ background: linear-gradient(135deg, rgba(111,66,232,0.10), rgba(129,140,248,0.07));
6362
+ border: 1px solid rgba(111,66,232,0.16);
6363
+ border-radius: 999px;
6364
+ color: var(--accent);
6472
6365
  }
6473
6366
 
6474
6367
  /* Lattice AI workspace — light lavender theme. */
6475
6368
  .app-layout {
6476
- --bg: #f3ecff;
6477
- --surface: #f6f0ff;
6478
- --surface-2: #efe8ff;
6479
- --surface-3: #e8dfff;
6480
- --accent: #6f42e8;
6481
- --accent-2: #8b6cff;
6482
- --accent-3: #a78fff;
6483
- --accent-pink: #c084fc;
6484
- --accent-soft: rgba(111, 66, 232, 0.12);
6485
- --text: #14162c;
6486
- --muted: #4a4668;
6487
- --faint: #7a74a0;
6488
- --border: rgba(111, 66, 232, 0.14);
6489
- --border-strong: rgba(111, 66, 232, 0.26);
6369
+ --bg: var(--bg);
6370
+ --surface: var(--surface);
6371
+ --surface-2: var(--surface-2);
6372
+ --surface-3: var(--surface-3);
6373
+ --accent: var(--accent);
6374
+ --accent-2: var(--accent-2);
6375
+ --accent-3: var(--accent-3);
6376
+ --accent-pink: var(--accent-pink);
6377
+ --accent-soft: var(--accent-soft);
6378
+ --text: var(--text);
6379
+ --muted: var(--muted);
6380
+ --faint: var(--faint);
6381
+ --border: var(--border);
6382
+ --border-strong: var(--border-strong);
6490
6383
  --shadow: 0 18px 54px rgba(88, 72, 150, 0.15);
6491
6384
  --shadow-sm: 0 6px 20px rgba(88, 72, 150, 0.10);
6492
- --glow-green: 0 0 30px rgba(111, 66, 232, 0.14);
6385
+ --glow-green: 0 0 30px var(--border);
6493
6386
  position: relative;
6494
6387
  isolation: isolate;
6495
6388
  background:
6496
- radial-gradient(circle at 82% 12%, rgba(111,66,232,0.14), transparent 30%),
6389
+ radial-gradient(circle at 82% 12%, var(--border), transparent 30%),
6497
6390
  radial-gradient(circle at 10% 80%, rgba(180,160,255,0.16), transparent 35%),
6498
- linear-gradient(180deg, #f3ecff 0%, #efe8ff 52%, #f2ecff 100%);
6391
+ linear-gradient(180deg, var(--bg) 0%, var(--surface-2) 52%, #f2ecff 100%);
6499
6392
  }
6500
6393
 
6501
6394
  .app-layout::before {
@@ -6640,10 +6533,10 @@ body.lattice-ref-graph {
6640
6533
  .app-layout .ops-card.primary .ops-icon,
6641
6534
  .app-layout .empty-icon,
6642
6535
  .app-layout .empty-state > div[style] {
6643
- background: rgba(167,124,255,0.12) !important;
6644
- border-color: rgba(167,124,255,0.24) !important;
6645
- color: var(--accent) !important;
6646
- box-shadow: none !important;
6536
+ background: rgba(167,124,255,0.12);
6537
+ border-color: rgba(167,124,255,0.24);
6538
+ color: var(--accent);
6539
+ box-shadow: none;
6647
6540
  }
6648
6541
 
6649
6542
  .app-layout .ops-card:not(.primary) .ops-icon {
@@ -6725,7 +6618,7 @@ body.lattice-ref-graph {
6725
6618
  }
6726
6619
 
6727
6620
  .app-layout .send-btn {
6728
- background: linear-gradient(135deg, #6f42e8, #7b61ff);
6621
+ background: linear-gradient(135deg, var(--accent), #7b61ff);
6729
6622
  color: #fff;
6730
6623
  box-shadow: 0 8px 20px rgba(111,66,232,0.24);
6731
6624
  }
@@ -6870,9 +6763,9 @@ body.lattice-ref-graph {
6870
6763
  .app-layout .ops-card.primary .ops-icon,
6871
6764
  .app-layout .ops-card:not(.primary) .ops-icon,
6872
6765
  .app-layout .empty-state > div[style] {
6873
- background: linear-gradient(135deg, rgba(111,75,246,0.14), rgba(155,135,255,0.12)) !important;
6874
- border-color: rgba(111,75,246,0.18) !important;
6875
- color: var(--accent) !important;
6766
+ background: linear-gradient(135deg, rgba(111,75,246,0.14), rgba(155,135,255,0.12));
6767
+ border-color: rgba(111,75,246,0.18);
6768
+ color: var(--accent);
6876
6769
  }
6877
6770
  .app-layout .messages-viewport {
6878
6771
  background: transparent;
@@ -6931,7 +6824,7 @@ body.lattice-ref-graph {
6931
6824
  width: min(520px, 100%);
6932
6825
  background:
6933
6826
  radial-gradient(circle at 18% 8%, rgba(111,75,246,0.18), transparent 32%),
6934
- linear-gradient(180deg, #ffffff, #f6f0ff);
6827
+ linear-gradient(180deg, #ffffff, var(--surface));
6935
6828
  color: var(--text);
6936
6829
  border-color: rgba(111,66,232,0.16);
6937
6830
  }
@@ -7055,9 +6948,9 @@ body.lattice-ref-graph {
7055
6948
  .mode-modal { padding: 24px 18px; }
7056
6949
  }
7057
6950
 
7058
- .ux-hidden { display: none !important; }
6951
+ .ux-hidden { display: none; }
7059
6952
 
7060
- .app-layout .ops-strip { display: none !important; }
6953
+ .app-layout .ops-strip { display: none; }
7061
6954
 
7062
6955
  .app-layout .chat-header {
7063
6956
  min-height: 64px;
@@ -7126,7 +7019,7 @@ body.lattice-ref-graph {
7126
7019
  min-height: 38px;
7127
7020
  border: 1px solid transparent;
7128
7021
  background: transparent;
7129
- color: #14162c;
7022
+ color: var(--text);
7130
7023
  border-radius: 8px;
7131
7024
  padding: 0 12px;
7132
7025
  display: flex;
@@ -7252,7 +7145,7 @@ body.lattice-ref-graph {
7252
7145
  font-size: 26px;
7253
7146
  font-weight: 750;
7254
7147
  letter-spacing: -0.03em;
7255
- color: #14162c;
7148
+ color: var(--text);
7256
7149
  margin: 0 0 4px;
7257
7150
  }
7258
7151
  .home-dash-head p {
@@ -7274,7 +7167,7 @@ body.lattice-ref-graph {
7274
7167
  /* 개별 카드 */
7275
7168
  .hdc-card {
7276
7169
  background: rgba(255,255,255,0.92);
7277
- border: 1px solid rgba(111,66,232,0.14);
7170
+ border: 1px solid var(--border);
7278
7171
  border-radius: 14px;
7279
7172
  padding: 18px;
7280
7173
  display: flex;
@@ -7287,12 +7180,12 @@ body.lattice-ref-graph {
7287
7180
  font-weight: 700;
7288
7181
  text-transform: uppercase;
7289
7182
  letter-spacing: 0.07em;
7290
- color: #6f42e8;
7183
+ color: var(--accent);
7291
7184
  }
7292
7185
  .hdc-model-badge {
7293
7186
  font-size: 15px;
7294
7187
  font-weight: 650;
7295
- color: #14162c;
7188
+ color: var(--text);
7296
7189
  white-space: nowrap;
7297
7190
  overflow: hidden;
7298
7191
  text-overflow: ellipsis;
@@ -7307,7 +7200,7 @@ body.lattice-ref-graph {
7307
7200
  gap: 8px;
7308
7201
  }
7309
7202
  .hdc-stat-label { font-size: 11px; color: var(--muted); }
7310
- .hdc-stat-val { font-size: 12px; font-weight: 700; color: #14162c; text-align: right; }
7203
+ .hdc-stat-val { font-size: 12px; font-weight: 700; color: var(--text); text-align: right; }
7311
7204
  .hdc-bar {
7312
7205
  height: 6px;
7313
7206
  border-radius: 99px;
@@ -7317,7 +7210,7 @@ body.lattice-ref-graph {
7317
7210
  .hdc-bar-fill {
7318
7211
  height: 100%;
7319
7212
  border-radius: 99px;
7320
- background: #6f42e8;
7213
+ background: var(--accent);
7321
7214
  transition: width 0.6s ease;
7322
7215
  }
7323
7216
  .hdc-bar-fill.hdc-cpu { background: #22c4a0; }
@@ -7331,13 +7224,13 @@ body.lattice-ref-graph {
7331
7224
  flex: 1;
7332
7225
  }
7333
7226
  .hdc-count-item { display: flex; flex-direction: column; align-items: center; gap: 2px; }
7334
- .hdc-count-item span { font-size: 28px; font-weight: 750; color: #14162c; letter-spacing: -0.03em; line-height: 1; }
7227
+ .hdc-count-item span { font-size: 28px; font-weight: 750; color: var(--text); letter-spacing: -0.03em; line-height: 1; }
7335
7228
  .hdc-count-item label { font-size: 11px; color: var(--muted); }
7336
- .hdc-count-sep { width: 1px; height: 36px; background: rgba(111,66,232,0.14); }
7229
+ .hdc-count-sep { width: 1px; height: 36px; background: var(--border); }
7337
7230
 
7338
7231
  /* Setup card */
7339
7232
  .hdc-setup .hdc-setup-count { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; }
7340
- .hdc-setup .hdc-setup-count span { font-size: 40px; font-weight: 750; color: #6f42e8; letter-spacing: -0.04em; line-height: 1; }
7233
+ .hdc-setup .hdc-setup-count span { font-size: 40px; font-weight: 750; color: var(--accent); letter-spacing: -0.04em; line-height: 1; }
7341
7234
  .hdc-setup .hdc-setup-count label { font-size: 12px; color: var(--muted); }
7342
7235
 
7343
7236
  /* 카드 버튼 */
@@ -7346,7 +7239,7 @@ body.lattice-ref-graph {
7346
7239
  border-radius: 9px;
7347
7240
  border: 1px solid rgba(111,66,232,0.22);
7348
7241
  background: rgba(111,66,232,0.07);
7349
- color: #6f42e8;
7242
+ color: var(--accent);
7350
7243
  font-size: 12px;
7351
7244
  font-weight: 600;
7352
7245
  cursor: pointer;
@@ -7357,7 +7250,7 @@ body.lattice-ref-graph {
7357
7250
  transition: all 0.15s;
7358
7251
  }
7359
7252
  .hdc-btn:hover {
7360
- background: rgba(111,66,232,0.14);
7253
+ background: var(--border);
7361
7254
  border-color: rgba(111,66,232,0.35);
7362
7255
  }
7363
7256
 
@@ -7369,7 +7262,7 @@ body.lattice-ref-graph {
7369
7262
  }
7370
7263
  .hdr-panel {
7371
7264
  background: rgba(255,255,255,0.92);
7372
- border: 1px solid rgba(111,66,232,0.14);
7265
+ border: 1px solid var(--border);
7373
7266
  border-radius: 14px;
7374
7267
  overflow: hidden;
7375
7268
  box-shadow: 0 4px 18px rgba(88,72,150,0.07);
@@ -7382,7 +7275,7 @@ body.lattice-ref-graph {
7382
7275
  border-bottom: 1px solid rgba(111,66,232,0.10);
7383
7276
  font-size: 12px;
7384
7277
  font-weight: 700;
7385
- color: #6f42e8;
7278
+ color: var(--accent);
7386
7279
  text-transform: uppercase;
7387
7280
  letter-spacing: 0.07em;
7388
7281
  }
@@ -7394,7 +7287,7 @@ body.lattice-ref-graph {
7394
7287
  cursor: pointer;
7395
7288
  padding: 0;
7396
7289
  }
7397
- .hdr-head button:hover { color: #6f42e8; }
7290
+ .hdr-head button:hover { color: var(--accent); }
7398
7291
  .hdr-list { padding: 6px 0; min-height: 120px; max-height: 200px; overflow-y: auto; }
7399
7292
  .hdr-item {
7400
7293
  display: grid;
@@ -7403,12 +7296,12 @@ body.lattice-ref-graph {
7403
7296
  gap: 8px;
7404
7297
  padding: 8px 16px;
7405
7298
  font-size: 13px;
7406
- color: #14162c;
7299
+ color: var(--text);
7407
7300
  cursor: pointer;
7408
7301
  transition: background 0.1s;
7409
7302
  }
7410
7303
  .hdr-item:hover { background: rgba(111,66,232,0.06); }
7411
- .hdr-item i { color: #6f42e8; font-size: 14px; }
7304
+ .hdr-item i { color: var(--accent); font-size: 14px; }
7412
7305
  .hdr-item span { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
7413
7306
  .hdr-item small { color: var(--muted); font-size: 11px; white-space: nowrap; }
7414
7307
  .hdr-empty { padding: 24px 16px; text-align: center; color: var(--muted); font-size: 13px; }
@@ -7730,7 +7623,7 @@ body.lattice-ref-graph {
7730
7623
  }
7731
7624
 
7732
7625
  body[data-mode="default"] .cu-dev-controls {
7733
- display: none !important;
7626
+ display: none;
7734
7627
  }
7735
7628
 
7736
7629
  body.lattice-ref-chat .app-layout .sidebar,
@@ -7757,7 +7650,7 @@ body.lattice-ref-graph {
7757
7650
  body.lattice-ref-chat .app-layout .sidebar-search-wrap i,
7758
7651
  body.lattice-ref-chat .app-layout .sidebar-search input,
7759
7652
  body.lattice-ref-chat .app-layout .sidebar-search input::placeholder {
7760
- color: #9b8af0 !important;
7653
+ color: #9b8af0;
7761
7654
  -webkit-text-fill-color: currentColor;
7762
7655
  }
7763
7656
 
@@ -7769,27 +7662,27 @@ body.lattice-ref-graph {
7769
7662
  body.lattice-ref-chat .app-layout .status-btn,
7770
7663
  body.lattice-ref-chat .app-layout .setup-wizard-sidebar-btn,
7771
7664
  body.lattice-ref-chat .app-layout .admin-btn {
7772
- color: #7b5ff0 !important;
7665
+ color: #7b5ff0;
7773
7666
  }
7774
7667
 
7775
7668
  body.lattice-ref-chat .app-layout .chat-header,
7776
7669
  body.lattice-ref-chat .app-layout .mode-segmented button,
7777
7670
  body.lattice-ref-chat .app-layout .header-pills .logout-btn,
7778
7671
  body.lattice-ref-chat .app-layout .sidebar-toggle {
7779
- color: #8f7bf7 !important;
7672
+ color: #8f7bf7;
7780
7673
  }
7781
7674
 
7782
7675
  body.lattice-ref-chat .app-layout .mode-segmented button:not(.active) {
7783
- color: #b0a4ee !important;
7676
+ color: #b0a4ee;
7784
7677
  }
7785
7678
 
7786
7679
  body.lattice-ref-chat .app-layout .mode-segmented button.active {
7787
- color: #ffffff !important;
7680
+ color: #ffffff;
7788
7681
  }
7789
7682
 
7790
7683
  body.lattice-ref-chat .app-layout .header-pills .logout-btn i,
7791
7684
  body.lattice-ref-chat .app-layout .sidebar-toggle i {
7792
- color: inherit !important;
7685
+ color: inherit;
7793
7686
  }
7794
7687
 
7795
7688
  @media (max-width: 900px) {
@@ -7819,65 +7712,65 @@ body.lattice-ref-graph {
7819
7712
  Soft Lavender Theme (4/10) — full override for .app-layout
7820
7713
  ========================================================= */
7821
7714
  body.lattice-ref-chat .app-layout {
7822
- --bg: #f3ecff;
7823
- --surface: #f6f0ff;
7824
- --surface-2: #efe8ff;
7715
+ --bg: var(--bg);
7716
+ --surface: var(--surface);
7717
+ --surface-2: var(--surface-2);
7825
7718
  --surface-3: #e8e0ff;
7826
- --accent: #6f42e8;
7719
+ --accent: var(--accent);
7827
7720
  --accent-2: #ffb84d;
7828
- --accent-3: #8b6cff;
7829
- --accent-soft: rgba(111,66,232,0.12);
7830
- --text: #14162c;
7831
- --muted: #4a4668;
7832
- --faint: #7a74a0;
7721
+ --accent-3: var(--accent-2);
7722
+ --accent-soft: var(--accent-soft);
7723
+ --text: var(--text);
7724
+ --muted: var(--muted);
7725
+ --faint: var(--faint);
7833
7726
  --border: rgba(111,66,232,0.15);
7834
- --border-strong: rgba(111,66,232,0.26);
7727
+ --border-strong: var(--border-strong);
7835
7728
  --shadow: 0 18px 54px rgba(88,72,150,0.15);
7836
7729
  --shadow-sm: 0 8px 24px rgba(88,72,150,0.11);
7837
7730
  background:
7838
- radial-gradient(circle at 82% 12%, rgba(111,66,232,0.14), transparent 30%),
7731
+ radial-gradient(circle at 82% 12%, var(--border), transparent 30%),
7839
7732
  radial-gradient(circle at 10% 80%, rgba(180,160,255,0.16), transparent 35%),
7840
- linear-gradient(180deg, #f3ecff 0%, #efe8ff 52%, #f2ecff 100%) !important;
7733
+ linear-gradient(180deg, var(--bg) 0%, var(--surface-2) 52%, #f2ecff 100%);
7841
7734
  }
7842
7735
  body.lattice-ref-chat .app-layout::before,
7843
7736
  body.lattice-ref-chat .app-layout::after {
7844
- display: none !important;
7737
+ display: none;
7845
7738
  }
7846
7739
 
7847
7740
  /* Sidebar */
7848
7741
  body.lattice-ref-chat .app-layout .sidebar {
7849
- background: rgba(244, 237, 255, 0.96) !important;
7850
- border-right: 1px solid rgba(111,66,232,0.13) !important;
7851
- box-shadow: 12px 0 46px rgba(88,72,150,0.08) !important;
7742
+ background: rgba(244, 237, 255, 0.96);
7743
+ border-right: 1px solid rgba(111,66,232,0.13);
7744
+ box-shadow: 12px 0 46px rgba(88,72,150,0.08);
7852
7745
  }
7853
7746
 
7854
7747
  /* Chat header */
7855
7748
  body.lattice-ref-chat .app-layout .chat-header {
7856
- background: rgba(244, 238, 255, 0.92) !important;
7857
- border-bottom: 1px solid rgba(111,66,232,0.11) !important;
7858
- box-shadow: 0 2px 12px rgba(88,72,150,0.06) !important;
7859
- backdrop-filter: blur(14px) !important;
7749
+ background: rgba(244, 238, 255, 0.92);
7750
+ border-bottom: 1px solid rgba(111,66,232,0.11);
7751
+ box-shadow: 0 2px 12px rgba(88,72,150,0.06);
7752
+ backdrop-filter: blur(14px);
7860
7753
  }
7861
7754
 
7862
7755
  /* Messages viewport */
7863
7756
  body.lattice-ref-chat .app-layout .messages-viewport {
7864
- background: transparent !important;
7757
+ background: transparent;
7865
7758
  }
7866
7759
 
7867
7760
  /* AI 채팅 버블 */
7868
7761
  body.lattice-ref-chat .app-layout .ai .bubble {
7869
- background: rgba(250, 246, 255, 0.97) !important;
7870
- border: 1px solid rgba(111,66,232,0.12) !important;
7871
- color: #14162c !important;
7872
- box-shadow: 0 4px 18px rgba(88,72,150,0.08) !important;
7762
+ background: rgba(250, 246, 255, 0.97);
7763
+ border: 1px solid var(--accent-soft);
7764
+ color: var(--text);
7765
+ box-shadow: 0 4px 18px rgba(88,72,150,0.08);
7873
7766
  }
7874
7767
 
7875
7768
  /* 사용자 채팅 버블 */
7876
7769
  body.lattice-ref-chat .app-layout .user .bubble {
7877
- background: linear-gradient(135deg, #6f42e8, #8b6cff) !important;
7878
- border: 1px solid rgba(111,66,232,0.24) !important;
7879
- color: #ffffff !important;
7880
- box-shadow: 0 8px 28px rgba(111,66,232,0.26) !important;
7770
+ background: linear-gradient(135deg, var(--accent), var(--accent-2));
7771
+ border: 1px solid rgba(111,66,232,0.24);
7772
+ color: #ffffff;
7773
+ box-shadow: 0 8px 28px var(--border-strong);
7881
7774
  }
7882
7775
 
7883
7776
  /* 버블 내 헤딩, 코드 언어 레이블 */
@@ -7885,18 +7778,18 @@ body.lattice-ref-graph {
7885
7778
  body.lattice-ref-chat .app-layout .ai .bubble h2,
7886
7779
  body.lattice-ref-chat .app-layout .ai .bubble h3,
7887
7780
  body.lattice-ref-chat .app-layout .ai .bubble .code-lang {
7888
- color: #6f42e8 !important;
7781
+ color: var(--accent);
7889
7782
  }
7890
7783
 
7891
7784
  /* 코드 블록 */
7892
7785
  body.lattice-ref-chat .app-layout .code-container,
7893
7786
  body.lattice-ref-chat .app-layout pre {
7894
- background: #ede7ff !important;
7895
- border-color: rgba(111,66,232,0.14) !important;
7787
+ background: #ede7ff;
7788
+ border-color: var(--border);
7896
7789
  }
7897
7790
  body.lattice-ref-chat .app-layout .code-header {
7898
- background: #e5dcff !important;
7899
- border-bottom-color: rgba(111,66,232,0.13) !important;
7791
+ background: #e5dcff;
7792
+ border-bottom-color: rgba(111,66,232,0.13);
7900
7793
  }
7901
7794
 
7902
7795
  /* 입력창 영역 */
@@ -7904,402 +7797,136 @@ body.lattice-ref-graph {
7904
7797
  background: linear-gradient(0deg,
7905
7798
  rgba(243,237,255,0.99) 0%,
7906
7799
  rgba(243,237,255,0.86) 64%,
7907
- transparent 100%) !important;
7800
+ transparent 100%);
7908
7801
  }
7909
7802
  body.lattice-ref-chat .app-layout .input-box {
7910
- background: rgba(248, 243, 255, 0.97) !important;
7911
- border: 1px solid rgba(111,66,232,0.17) !important;
7912
- box-shadow: 0 8px 32px rgba(88,72,150,0.10) !important;
7803
+ background: rgba(248, 243, 255, 0.97);
7804
+ border: 1px solid rgba(111,66,232,0.17);
7805
+ box-shadow: 0 8px 32px rgba(88,72,150,0.10);
7913
7806
  }
7914
7807
  body.lattice-ref-chat .app-layout .input-box:focus-within {
7915
- border-color: rgba(111,66,232,0.44) !important;
7916
- box-shadow: 0 8px 32px rgba(88,72,150,0.10), 0 0 0 3px rgba(111,66,232,0.09) !important;
7808
+ border-color: rgba(111,66,232,0.44);
7809
+ box-shadow: 0 8px 32px rgba(88,72,150,0.10), 0 0 0 3px rgba(111,66,232,0.09);
7917
7810
  }
7918
7811
 
7919
7812
  /* 전송 버튼 */
7920
7813
  body.lattice-ref-chat .app-layout .send-btn {
7921
- background: linear-gradient(135deg, #6f42e8, #8b6cff) !important;
7922
- color: #ffffff !important;
7923
- box-shadow: 0 8px 20px rgba(111,66,232,0.28) !important;
7814
+ background: linear-gradient(135deg, var(--accent), var(--accent-2));
7815
+ color: #ffffff;
7816
+ box-shadow: 0 8px 20px rgba(111,66,232,0.28);
7924
7817
  }
7925
7818
  body.lattice-ref-chat .app-layout .send-btn:hover {
7926
- box-shadow: 0 10px 26px rgba(111,66,232,0.38) !important;
7927
- opacity: 0.92 !important;
7819
+ box-shadow: 0 10px 26px rgba(111,66,232,0.38);
7820
+ opacity: 0.92;
7928
7821
  }
7929
7822
 
7930
7823
  /* 빈 상태 카드/칩 */
7931
7824
  body.lattice-ref-chat .app-layout .empty-chip {
7932
- background: rgba(246, 241, 255, 0.94) !important;
7933
- border-color: rgba(111,66,232,0.15) !important;
7934
- color: #4a4668 !important;
7935
- box-shadow: 0 2px 10px rgba(88,72,150,0.08) !important;
7825
+ background: rgba(246, 241, 255, 0.94);
7826
+ border-color: rgba(111,66,232,0.15);
7827
+ color: var(--muted);
7828
+ box-shadow: 0 2px 10px rgba(88,72,150,0.08);
7936
7829
  }
7937
7830
  body.lattice-ref-chat .app-layout .empty-chip:hover {
7938
- background: rgba(111,66,232,0.08) !important;
7939
- border-color: rgba(111,66,232,0.26) !important;
7831
+ background: rgba(111,66,232,0.08);
7832
+ border-color: var(--border-strong);
7940
7833
  }
7941
7834
  body.lattice-ref-chat .app-layout .ops-card {
7942
- background: rgba(247, 242, 255, 0.94) !important;
7943
- border-color: rgba(111,66,232,0.13) !important;
7944
- box-shadow: 0 6px 22px rgba(88,72,150,0.08) !important;
7835
+ background: rgba(247, 242, 255, 0.94);
7836
+ border-color: rgba(111,66,232,0.13);
7837
+ box-shadow: 0 6px 22px rgba(88,72,150,0.08);
7945
7838
  }
7946
7839
  body.lattice-ref-chat .app-layout .ops-card.primary {
7947
- background: linear-gradient(135deg, rgba(111,66,232,0.10), rgba(247,242,255,0.94) 58%) !important;
7948
- border-color: rgba(111,66,232,0.22) !important;
7840
+ background: linear-gradient(135deg, rgba(111,66,232,0.10), rgba(247,242,255,0.94) 58%);
7841
+ border-color: rgba(111,66,232,0.22);
7949
7842
  }
7950
7843
 
7951
7844
  /* 배지/버튼 */
7952
7845
  body.lattice-ref-chat .app-layout .model-badge {
7953
- background: rgba(243, 237, 255, 0.90) !important;
7954
- border-color: rgba(111,66,232,0.15) !important;
7955
- color: #14162c !important;
7846
+ background: rgba(243, 237, 255, 0.90);
7847
+ border-color: rgba(111,66,232,0.15);
7848
+ color: var(--text);
7956
7849
  }
7957
7850
  body.lattice-ref-chat .app-layout .status-pill {
7958
- background: rgba(241, 236, 255, 0.86) !important;
7959
- border-color: rgba(111,66,232,0.13) !important;
7960
- color: #4a4668 !important;
7851
+ background: rgba(241, 236, 255, 0.86);
7852
+ border-color: rgba(111,66,232,0.13);
7853
+ color: var(--muted);
7961
7854
  }
7962
7855
  body.lattice-ref-chat .app-layout .status-dot {
7963
- background: #6f42e8 !important;
7964
- box-shadow: 0 0 8px rgba(111,66,232,0.5), 0 0 16px rgba(111,66,232,0.2) !important;
7856
+ background: var(--accent);
7857
+ box-shadow: 0 0 8px rgba(111,66,232,0.5), 0 0 16px rgba(111,66,232,0.2);
7965
7858
  }
7966
7859
  body.lattice-ref-chat .app-layout .new-chat-btn,
7967
7860
  body.lattice-ref-chat .app-layout .status-btn,
7968
7861
  body.lattice-ref-chat .app-layout .admin-btn,
7969
7862
  body.lattice-ref-chat .app-layout .setup-wizard-sidebar-btn {
7970
- background: rgba(111,66,232,0.10) !important;
7971
- border-color: rgba(111,66,232,0.22) !important;
7972
- color: #6f42e8 !important;
7973
- box-shadow: none !important;
7863
+ background: rgba(111,66,232,0.10);
7864
+ border-color: rgba(111,66,232,0.22);
7865
+ color: var(--accent);
7866
+ box-shadow: none;
7974
7867
  }
7975
7868
 
7976
7869
  /* ── 네비 버튼 글씨 검정 ── */
7977
7870
  body.lattice-ref-chat .app-layout .reference-nav-item,
7978
7871
  body.lattice-ref-chat .app-layout .reference-nav-item i {
7979
- color: #14162c !important;
7980
- -webkit-text-fill-color: #14162c !important;
7872
+ color: var(--text);
7873
+ -webkit-text-fill-color: var(--text);
7981
7874
  }
7982
7875
  body.lattice-ref-chat .app-layout .reference-nav-item:hover,
7983
7876
  body.lattice-ref-chat .app-layout .reference-nav-item.active {
7984
- color: #14162c !important;
7985
- -webkit-text-fill-color: #14162c !important;
7986
- background: rgba(111,66,232,0.12) !important;
7987
- border-color: rgba(111,66,232,0.24) !important;
7877
+ color: var(--text);
7878
+ -webkit-text-fill-color: var(--text);
7879
+ background: var(--accent-soft);
7880
+ border-color: rgba(111,66,232,0.24);
7988
7881
  }
7989
7882
  /* 채팅 기록 목록도 검정 */
7990
7883
  body.lattice-ref-chat .app-layout .history-item {
7991
- color: #2a2744 !important;
7992
- -webkit-text-fill-color: #2a2744 !important;
7884
+ color: #2a2744;
7885
+ -webkit-text-fill-color: #2a2744;
7993
7886
  }
7994
7887
  body.lattice-ref-chat .app-layout .history-item:hover,
7995
7888
  body.lattice-ref-chat .app-layout .history-item.active {
7996
- color: #14162c !important;
7997
- -webkit-text-fill-color: #14162c !important;
7889
+ color: var(--text);
7890
+ -webkit-text-fill-color: var(--text);
7998
7891
  }
7999
7892
  /* 브랜드 타이틀 / 서브타이틀 */
8000
7893
  body.lattice-ref-chat .app-layout .brand-title {
8001
- color: #14162c !important;
8002
- -webkit-text-fill-color: #14162c !important;
7894
+ color: var(--text);
7895
+ -webkit-text-fill-color: var(--text);
8003
7896
  }
8004
7897
  /* 사이드바 검색 입력 */
8005
7898
  body.lattice-ref-chat .app-layout .sidebar-search input {
8006
- color: #14162c !important;
8007
- background: rgba(111,66,232,0.06) !important;
8008
- border-color: rgba(111,66,232,0.16) !important;
7899
+ color: var(--text);
7900
+ background: rgba(111,66,232,0.06);
7901
+ border-color: rgba(111,66,232,0.16);
8009
7902
  }
8010
7903
  body.lattice-ref-chat .app-layout .sidebar-search input::placeholder {
8011
- color: #7a74a0 !important;
8012
- -webkit-text-fill-color: #7a74a0 !important;
7904
+ color: var(--faint);
7905
+ -webkit-text-fill-color: var(--faint);
8013
7906
  }
8014
7907
  /* 상단 모드 세그멘트 배경도 라벤더로 */
8015
7908
  body.lattice-ref-chat .app-layout .mode-segmented {
8016
- background: rgba(241, 236, 255, 0.84) !important;
8017
- border-color: rgba(111,66,232,0.16) !important;
7909
+ background: rgba(241, 236, 255, 0.84);
7910
+ border-color: rgba(111,66,232,0.16);
8018
7911
  }
8019
7912
  body.lattice-ref-chat .app-layout .mode-segmented button:not(.active) {
8020
- color: #3d3860 !important;
8021
- }
8022
-
8023
- /* ================================================================
8024
- GLOBAL DARK-MODE PURGE — 남은 모든 다크/그린 요소를 라벤더로
8025
- ================================================================ */
8026
-
8027
- /* ── CSS 변수 최상위 재정의 ── */
8028
- body.lattice-ref-chat {
8029
- --bg: #f3ecff !important;
8030
- --surface: #f0eaff !important;
8031
- --surface-2: #e8dfff !important;
8032
- --surface-3: #e0d5ff !important;
8033
- --accent: #6f42e8 !important;
8034
- --accent-2: #a78bfa !important;
8035
- --accent-3: #8b6cff !important;
8036
- --accent-soft: rgba(111,66,232,0.12) !important;
8037
- --text: #14162c !important;
8038
- --muted: #4a4668 !important;
8039
- --faint: #7a74a0 !important;
8040
- --border: rgba(111,66,232,0.15) !important;
8041
- --border-strong: rgba(111,66,232,0.26) !important;
8042
- --shadow: 0 18px 54px rgba(88,72,150,0.15) !important;
8043
- --shadow-sm: 0 8px 24px rgba(88,72,150,0.11) !important;
8044
- --danger: #e53935 !important;
8045
- }
8046
-
8047
- /* ── 모달 배경 ── */
8048
- body.lattice-ref-chat .mcp-modal,
8049
- body.lattice-ref-chat .acct-modal,
8050
- body.lattice-ref-chat .mode-modal,
8051
- body.lattice-ref-chat .workspace-modal,
8052
- body.lattice-ref-chat .advanced-settings-panel,
8053
- body.lattice-ref-chat .perm-card {
8054
- background: rgba(247,242,255,0.98) !important;
8055
- border-color: rgba(111,66,232,0.14) !important;
8056
- color: #14162c !important;
8057
- }
8058
-
8059
- /* ── 모달 내 모든 텍스트 검정 ── */
8060
- body.lattice-ref-chat .mcp-modal *,
8061
- body.lattice-ref-chat .acct-modal *,
8062
- body.lattice-ref-chat .mode-modal *,
8063
- body.lattice-ref-chat .workspace-modal *,
8064
- body.lattice-ref-chat .advanced-settings-panel *,
8065
- body.lattice-ref-chat .perm-card * {
8066
- color: inherit;
8067
- }
8068
- body.lattice-ref-chat .mcp-modal-header h3,
8069
- body.lattice-ref-chat .mcp-item-name,
8070
- body.lattice-ref-chat .detail-title,
8071
- body.lattice-ref-chat .perm-title,
8072
- body.lattice-ref-chat .workspace-modal h2,
8073
- body.lattice-ref-chat .mode-modal h2,
8074
- body.lattice-ref-chat .advanced-settings-panel header span,
8075
- body.lattice-ref-chat .onboarding-card * {
8076
- color: #14162c !important;
8077
- }
8078
-
8079
- /* ── 모달 헤더/탭 구분선 ── */
8080
- body.lattice-ref-chat .mcp-modal-header,
8081
- body.lattice-ref-chat .mcp-tabs,
8082
- body.lattice-ref-chat .acct-tabs {
8083
- border-bottom-color: rgba(111,66,232,0.10) !important;
8084
- }
8085
-
8086
- /* ── MCP 탭 ── */
8087
- body.lattice-ref-chat .mcp-tab { color: #4a4668 !important; }
8088
- body.lattice-ref-chat .mcp-tab.active {
8089
- color: #6f42e8 !important;
8090
- border-bottom-color: #6f42e8 !important;
8091
- background: rgba(111,66,232,0.07) !important;
8092
- }
8093
-
8094
- /* ── MCP 아이템 ── */
8095
- body.lattice-ref-chat .mcp-item {
8096
- background: rgba(255,255,255,0.72) !important;
8097
- border-color: rgba(111,66,232,0.10) !important;
8098
- }
8099
- body.lattice-ref-chat .mcp-item-name { color: #14162c !important; }
8100
- body.lattice-ref-chat .mcp-item-desc { color: #4a4668 !important; }
8101
- body.lattice-ref-chat .mcp-item-status { color: #6f42e8 !important; }
8102
- body.lattice-ref-chat .mcp-install-btn {
8103
- border-color: rgba(111,66,232,0.28) !important;
8104
- background: rgba(111,66,232,0.08) !important;
8105
- color: #6f42e8 !important;
8106
- }
8107
- body.lattice-ref-chat .mcp-install-btn:hover {
8108
- background: rgba(111,66,232,0.16) !important;
8109
- }
8110
- body.lattice-ref-chat .mcp-section-label { color: #7a74a0 !important; }
8111
- body.lattice-ref-chat .mcp-source-badge.claude-code {
8112
- background: rgba(111,66,232,0.10) !important;
8113
- color: #6f42e8 !important;
8114
- border-color: rgba(111,66,232,0.20) !important;
8115
- }
8116
-
8117
- /* ── MCP 폼 입력 ── */
8118
- body.lattice-ref-chat .mcp-add-form input,
8119
- body.lattice-ref-chat .mcp-add-form textarea,
8120
- body.lattice-ref-chat .mcp-add-form select {
8121
- background: rgba(255,255,255,0.82) !important;
8122
- border-color: rgba(111,66,232,0.16) !important;
8123
- color: #14162c !important;
8124
- }
8125
- body.lattice-ref-chat .mcp-add-form label { color: #7a74a0 !important; }
8126
- body.lattice-ref-chat .mcp-add-form .field-hint { color: #7a74a0 !important; }
8127
- body.lattice-ref-chat .mcp-submit-btn {
8128
- background: rgba(111,66,232,0.10) !important;
8129
- border-color: rgba(111,66,232,0.26) !important;
8130
- color: #6f42e8 !important;
8131
- }
8132
- body.lattice-ref-chat .mcp-submit-btn:hover {
8133
- background: rgba(111,66,232,0.18) !important;
8134
- }
8135
- body.lattice-ref-chat .mcp-delete-btn {
8136
- background: rgba(229,57,53,0.08) !important;
8137
- border-color: rgba(229,57,53,0.18) !important;
8138
- color: #e53935 !important;
8139
- }
8140
- body.lattice-ref-chat .mcp-modal-close { color: #7a74a0 !important; }
8141
- body.lattice-ref-chat .mcp-modal-close:hover {
8142
- color: #14162c !important;
8143
- background: rgba(111,66,232,0.07) !important;
8144
- }
8145
-
8146
- /* ── 계정 모달 ── */
8147
- body.lattice-ref-chat .acct-tab { color: #4a4668 !important; }
8148
- body.lattice-ref-chat .acct-tab.active {
8149
- color: #14162c !important;
8150
- border-bottom-color: #6f42e8 !important;
8151
- }
8152
- body.lattice-ref-chat .pw-field label { color: #4a4668 !important; }
8153
- body.lattice-ref-chat .pw-field input {
8154
- background: rgba(255,255,255,0.80) !important;
8155
- border-color: rgba(111,66,232,0.16) !important;
8156
- color: #14162c !important;
8157
- }
8158
- body.lattice-ref-chat .pw-field input:focus {
8159
- border-color: rgba(111,66,232,0.42) !important;
8160
- }
8161
- body.lattice-ref-chat .pw-submit {
8162
- background: #6f42e8 !important;
8163
- color: #fff !important;
8164
- }
8165
- body.lattice-ref-chat .pw-cancel {
8166
- background: rgba(111,66,232,0.08) !important;
8167
- color: #4a4668 !important;
8168
- }
8169
- body.lattice-ref-chat .pw-msg.error { color: #e53935 !important; }
8170
- body.lattice-ref-chat .pw-msg.success { color: #059669 !important; }
8171
-
8172
- /* ── 언어 선택 메뉴 ── */
8173
- body.lattice-ref-chat .lang-picker-menu {
8174
- background: rgba(247,242,255,0.98) !important;
8175
- border-color: rgba(111,66,232,0.16) !important;
8176
- }
8177
- body.lattice-ref-chat .lang-option { color: #14162c !important; }
8178
- body.lattice-ref-chat .lang-option:hover {
8179
- background: rgba(111,66,232,0.07) !important;
8180
- color: #14162c !important;
8181
- }
8182
- body.lattice-ref-chat .lang-option.active { color: #6f42e8 !important; }
8183
-
8184
- /* ── 고급 설정 패널 버튼 ── */
8185
- body.lattice-ref-chat .advanced-settings-action {
8186
- background: rgba(244,239,255,0.92) !important;
8187
- border-color: rgba(111,66,232,0.13) !important;
8188
- color: #14162c !important;
8189
- }
8190
- body.lattice-ref-chat .advanced-settings-action:hover {
8191
- background: rgba(111,66,232,0.10) !important;
8192
- border-color: rgba(111,66,232,0.28) !important;
8193
- }
8194
-
8195
- /* ── 홈 액션 카드 ── */
8196
- body.lattice-ref-chat .home-action-card {
8197
- background: rgba(255,255,255,0.88) !important;
8198
- border-color: rgba(111,66,232,0.14) !important;
8199
- color: #14162c !important;
8200
- }
8201
- body.lattice-ref-chat .home-action-card h3 { color: #14162c !important; }
8202
- body.lattice-ref-chat .home-action-card p { color: #4a4668 !important; }
8203
-
8204
- /* ── 모델 선택 ── */
8205
- body.lattice-ref-chat .model-option {
8206
- background: rgba(244,239,255,0.90) !important;
8207
- border-color: rgba(111,66,232,0.12) !important;
8208
- color: #14162c !important;
8209
- }
8210
- body.lattice-ref-chat .model-option:hover {
8211
- border-color: rgba(111,66,232,0.32) !important;
8212
- background: rgba(111,66,232,0.08) !important;
8213
- }
8214
-
8215
- /* ── 퍼미션/파일접근 모달 ── */
8216
- body.lattice-ref-chat .perm-btn-allow {
8217
- background: #6f42e8 !important;
8218
- color: #fff !important;
8219
- }
8220
- body.lattice-ref-chat .perm-btn-deny {
8221
- background: rgba(111,66,232,0.08) !important;
8222
- color: #4a4668 !important;
8223
- border-color: rgba(111,66,232,0.16) !important;
8224
- }
8225
-
8226
- /* ── 온보딩 카드 ── */
8227
- body.lattice-ref-chat .onboarding-card {
8228
- background: rgba(247,242,255,0.98) !important;
8229
- border-color: rgba(111,66,232,0.14) !important;
8230
- }
8231
-
8232
- /* ── 워크스페이스/모드 옵션 ── */
8233
- body.lattice-ref-chat .workspace-option,
8234
- body.lattice-ref-chat .mode-option {
8235
- background: rgba(255,255,255,0.82) !important;
8236
- border-color: rgba(111,66,232,0.12) !important;
8237
- color: #14162c !important;
8238
- }
8239
- body.lattice-ref-chat .workspace-option:hover,
8240
- body.lattice-ref-chat .mode-option:hover,
8241
- body.lattice-ref-chat .workspace-option.selected,
8242
- body.lattice-ref-chat .mode-option.selected {
8243
- border-color: rgba(111,66,232,0.38) !important;
8244
- background: rgba(111,66,232,0.08) !important;
8245
- }
8246
-
8247
- /* ── 툴팁 ── */
8248
- body.lattice-ref-chat #tooltip,
8249
- body.lattice-ref-chat .tooltip {
8250
- background: rgba(247,242,255,0.97) !important;
8251
- border-color: rgba(111,66,232,0.16) !important;
8252
- color: #14162c !important;
8253
- }
8254
-
8255
- /* ── 로그아웃 버튼 ── */
8256
- body.lattice-ref-chat .logout-btn { color: #4a4668 !important; }
8257
- body.lattice-ref-chat .logout-btn:hover {
8258
- color: #14162c !important;
8259
- background: rgba(111,66,232,0.07) !important;
8260
- border-color: rgba(111,66,232,0.14) !important;
8261
- }
8262
-
8263
- /* ── 스크롤바 (WebKit) ── */
8264
- body.lattice-ref-chat ::-webkit-scrollbar { width: 5px; }
8265
- body.lattice-ref-chat ::-webkit-scrollbar-track { background: rgba(111,66,232,0.05); }
8266
- body.lattice-ref-chat ::-webkit-scrollbar-thumb {
8267
- background: rgba(111,66,232,0.22);
8268
- border-radius: 4px;
8269
- }
8270
-
8271
- /* ── action-btn (첨부파일 등) ── */
8272
- body.lattice-ref-chat .app-layout .action-btn {
8273
- color: #4a4668 !important;
8274
- }
8275
- body.lattice-ref-chat .app-layout .action-btn:hover {
8276
- background: rgba(111,66,232,0.09) !important;
8277
- color: #6f42e8 !important;
8278
- border-color: rgba(111,66,232,0.22) !important;
8279
- }
8280
-
8281
- /* ── 채팅 인풋 placeholder ── */
8282
- body.lattice-ref-chat .app-layout #user-input::placeholder {
8283
- color: #7a74a0 !important;
8284
- }
8285
- body.lattice-ref-chat .app-layout #user-input {
8286
- color: #14162c !important;
7913
+ color: #3d3860;
8287
7914
  }
8288
7915
 
8289
7916
  /* ── 홈 뷰: 채팅 전용 사이드바 섹션 숨기기 ── */
8290
7917
  body.lattice-ref-chat .app-layout[data-view="home"] .sidebar-search,
8291
7918
  body.lattice-ref-chat .app-layout[data-view="home"] .sidebar-primary-actions,
8292
7919
  body.lattice-ref-chat .app-layout[data-view="home"] .history-container {
8293
- display: none !important;
7920
+ display: none;
8294
7921
  }
8295
7922
  /* 채팅 뷰: 다시 표시 (기본값이므로 명시) */
8296
7923
  body.lattice-ref-chat .app-layout[data-view="chat"] .sidebar-search,
8297
7924
  body.lattice-ref-chat .app-layout[data-view="chat"] .sidebar-primary-actions,
8298
7925
  body.lattice-ref-chat .app-layout[data-view="chat"] .history-container {
8299
- display: flex !important;
7926
+ display: flex;
8300
7927
  }
8301
7928
  body.lattice-ref-chat .app-layout[data-view="chat"] .history-container {
8302
- display: block !important;
7929
+ display: block;
8303
7930
  }
8304
7931
 
8305
7932
  /* ── 홈 뷰: 홈 대시보드 보임, 채팅 힌트 숨김 ── */
@@ -8307,12 +7934,12 @@ body.lattice-ref-graph {
8307
7934
  body.lattice-ref-chat .app-layout[data-view="home"] .message,
8308
7935
  body.lattice-ref-chat .app-layout[data-view="home"] .mcp-recommend-wrap,
8309
7936
  body.lattice-ref-chat .app-layout[data-view="home"] .file-card {
8310
- display: none !important;
7937
+ display: none;
8311
7938
  }
8312
7939
  body.lattice-ref-chat .app-layout[data-view="home"] .home-dash { display: flex; }
8313
7940
 
8314
7941
  /* ── 채팅 뷰: 홈 대시보드 숨김, 채팅 힌트 보임 ── */
8315
- body.lattice-ref-chat .app-layout[data-view="chat"] .home-dash { display: none !important; }
7942
+ body.lattice-ref-chat .app-layout[data-view="chat"] .home-dash { display: none; }
8316
7943
  body.lattice-ref-chat .app-layout[data-view="chat"] .chat-empty-hint {
8317
7944
  display: flex;
8318
7945
  flex-direction: column;
@@ -8332,7 +7959,7 @@ body.lattice-ref-graph {
8332
7959
  }
8333
7960
  body.lattice-ref-chat .app-layout[data-view="chat"] .chat-empty-hint h2 {
8334
7961
  margin: 0;
8335
- color: #14162c;
7962
+ color: var(--text);
8336
7963
  font-size: 22px;
8337
7964
  line-height: 1.2;
8338
7965
  }
@@ -8350,7 +7977,7 @@ body.lattice-ref-graph {
8350
7977
  body.lattice-ref-chat .app-layout[data-view="chat"] .chat-capability-row span {
8351
7978
  border: 1px solid rgba(111,66,232,0.16);
8352
7979
  background: rgba(255,255,255,0.72);
8353
- color: #4a4668;
7980
+ color: var(--muted);
8354
7981
  border-radius: 999px;
8355
7982
  padding: 6px 10px;
8356
7983
  font-size: 12px;