ltcai 2.2.2 → 2.2.7

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.
@@ -1,3496 +1,4 @@
1
- @import url("/static/css/tokens.css");
2
- @import url("https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap");
3
-
4
- /* Lattice AI PPT reference skin.
5
- The deck uses a bright basic workspace and a dark administrator workspace. */
6
-
7
- /* 색 토큰(--ref-*, color-scheme 포함)은 tokens.css 가 라이트/다크 모두 제공한다. */
8
-
9
- .lattice-ref-auth,
10
- .lattice-ref-chat {
11
- font-family: "Inter", "Pretendard", "Apple SD Gothic Neo", -apple-system, BlinkMacSystemFont, sans-serif;
12
- }
13
-
14
- .lattice-ref-auth {
15
- background:
16
- radial-gradient(circle at 74% 25%, rgba(255,255,255,0.70), transparent 16%),
17
- radial-gradient(circle at 80% 58%, rgba(111,66,232,0.15), transparent 28%),
18
- radial-gradient(circle at 15% 72%, rgba(111,66,232,0.13), transparent 34%),
19
- linear-gradient(135deg, #fbfaff 0%, #f2edff 48%, #ffffff 100%);
20
- min-height: 100dvh;
21
- /* 타이틀바(58px)를 제외한 나머지 영역의 수직 중앙에 카드 배치 */
22
- flex-direction: column;
23
- align-items: center;
24
- justify-content: center;
25
- /* padding-top: 타이틀바 높이만큼만 → justify-content가 나머지 공간에서 중앙 정렬 */
26
- padding: 58px 18px clamp(72px, 8dvh, 90px);
27
- overflow: auto;
28
- }
29
-
30
- .lattice-ref-auth .login-shell {
31
- width: min(460px, calc(100vw - 36px));
32
- display: block;
33
- z-index: 3;
34
- }
35
-
36
- .lattice-ref-auth .brand-preview {
37
- display: none;
38
- }
39
-
40
- .lattice-ref-auth .card {
41
- width: 100%;
42
- min-height: auto;
43
- max-height: none;
44
- overflow: visible;
45
- border-radius: 16px;
46
- padding: clamp(40px, 4.6dvh, 50px) clamp(28px, 3.6vw, 40px) clamp(20px, 2.4dvh, 28px);
47
- background: rgba(255,255,255,0.76);
48
- border-color: var(--accent-soft);
49
- box-shadow: 0 20px 64px rgba(102, 82, 168, 0.20), inset 0 1px 0 rgba(255,255,255,0.86);
50
- backdrop-filter: blur(26px);
51
- }
52
-
53
- .lattice-ref-auth .card::before {
54
- display: none;
55
- }
56
-
57
- .auth-titlebar {
58
- position: fixed;
59
- inset: 0 0 auto;
60
- height: 58px;
61
- z-index: 4;
62
- display: flex;
63
- align-items: center;
64
- justify-content: space-between;
65
- padding: 0 22px;
66
- color: var(--ref-ink);
67
- background: rgba(250,248,255,0.58);
68
- border-bottom: 1px solid rgba(111,66,232,0.08);
69
- backdrop-filter: blur(12px);
70
- }
71
-
72
- .auth-window-brand {
73
- display: inline-flex;
74
- align-items: center;
75
- gap: 10px;
76
- font-size: 21px;
77
- font-weight: 720;
78
- }
79
-
80
- .auth-window-brand i {
81
- color: var(--ref-purple);
82
- font-size: 26px;
83
- }
84
-
85
- .auth-window-controls {
86
- display: inline-flex;
87
- align-items: center;
88
- gap: 30px;
89
- }
90
-
91
- .auth-window-controls span {
92
- width: 18px;
93
- height: 18px;
94
- position: relative;
95
- }
96
-
97
- .auth-window-controls span:nth-child(1)::before {
98
- content: '';
99
- position: absolute;
100
- left: 2px;
101
- right: 2px;
102
- top: 9px;
103
- height: 2px;
104
- background: #202033;
105
- }
106
-
107
- .auth-window-controls span:nth-child(2)::before {
108
- content: '';
109
- position: absolute;
110
- inset: 2px;
111
- border: 2px solid #202033;
112
- border-radius: 2px;
113
- }
114
-
115
- .auth-window-controls span:nth-child(3)::before,
116
- .auth-window-controls span:nth-child(3)::after {
117
- content: '';
118
- position: absolute;
119
- top: 8px;
120
- left: 1px;
121
- width: 18px;
122
- height: 2px;
123
- background: #202033;
124
- }
125
-
126
- .auth-window-controls span:nth-child(3)::before { transform: rotate(45deg); }
127
- .auth-window-controls span:nth-child(3)::after { transform: rotate(-45deg); }
128
-
129
- .auth-wave {
130
- position: fixed;
131
- z-index: 0;
132
- pointer-events: none;
133
- opacity: 0.78;
134
- filter: blur(0.2px);
135
- }
136
-
137
- .auth-wave::before,
138
- .auth-wave::after {
139
- content: '';
140
- position: absolute;
141
- inset: 0;
142
- border-radius: 50% 50% 0 0;
143
- border-top: 3px solid rgba(255,255,255,0.68);
144
- transform: skewY(-11deg);
145
- }
146
-
147
- .auth-wave::after {
148
- inset: 34px -80px -20px 40px;
149
- border-top-color: rgba(124,92,255,0.16);
150
- }
151
-
152
- .auth-wave-left {
153
- left: -130px;
154
- bottom: -80px;
155
- width: 780px;
156
- height: 360px;
157
- background: radial-gradient(ellipse at 45% 80%, rgba(111,66,232,0.23), transparent 58%);
158
- transform: rotate(4deg);
159
- }
160
-
161
- .auth-wave-right {
162
- right: -140px;
163
- bottom: -88px;
164
- width: 760px;
165
- height: 340px;
166
- background: radial-gradient(ellipse at 55% 82%, rgba(111,66,232,0.20), transparent 58%);
167
- transform: scaleX(-1) rotate(2deg);
168
- }
169
-
170
- .auth-network {
171
- position: fixed;
172
- right: 160px;
173
- top: 300px;
174
- width: 430px;
175
- height: 330px;
176
- z-index: 0;
177
- opacity: 0.28;
178
- pointer-events: none;
179
- background:
180
- linear-gradient(32deg, transparent 0 33%, rgba(255,255,255,0.9) 33.2% 33.5%, transparent 33.7%),
181
- linear-gradient(90deg, transparent 0 49.8%, rgba(255,255,255,0.8) 50% 50.3%, transparent 50.5%),
182
- linear-gradient(148deg, transparent 0 38%, rgba(255,255,255,0.9) 38.2% 38.5%, transparent 38.7%);
183
- }
184
-
185
- .auth-network span {
186
- position: absolute;
187
- width: 13px;
188
- height: 13px;
189
- border-radius: 50%;
190
- background: #fff;
191
- box-shadow: 0 0 20px rgba(255,255,255,0.9);
192
- }
193
-
194
- .auth-network span:nth-child(1) { left: 36px; top: 82px; }
195
- .auth-network span:nth-child(2) { left: 155px; top: 42px; width: 20px; height: 20px; }
196
- .auth-network span:nth-child(3) { left: 294px; top: 68px; }
197
- .auth-network span:nth-child(4) { left: 190px; top: 170px; }
198
- .auth-network span:nth-child(5) { left: 350px; top: 168px; }
199
- .auth-network span:nth-child(6) { left: 255px; top: 250px; width: 18px; height: 18px; }
200
-
201
- .lattice-ref-auth .hero-logo {
202
- display: flex;
203
- justify-content: center;
204
- align-items: center;
205
- gap: clamp(10px, 1.5vw, 16px);
206
- margin-bottom: clamp(12px, 1.8dvh, 20px);
207
- }
208
-
209
- .lattice-ref-auth .hero-logo-mark {
210
- width: clamp(46px, 5.4dvh, 62px);
211
- height: clamp(46px, 5.4dvh, 62px);
212
- display: grid;
213
- place-items: center;
214
- color: var(--ref-purple);
215
- font-size: clamp(40px, 4.8dvh, 56px);
216
- filter: drop-shadow(0 8px 14px rgba(111,66,232,0.20));
217
- }
218
-
219
- .lattice-ref-auth .hero-logo-mark i {
220
- display: none;
221
- }
222
-
223
- .lattice-ref-auth .hero-logo-mark::before {
224
- content: '';
225
- width: 86%;
226
- height: 86%;
227
- display: block;
228
- background:
229
- linear-gradient(30deg, transparent 42%, rgba(255,255,255,0.55) 42% 47%, transparent 47%),
230
- linear-gradient(90deg, transparent 42%, rgba(255,255,255,0.48) 42% 47%, transparent 47%),
231
- linear-gradient(150deg, transparent 42%, rgba(255,255,255,0.48) 42% 47%, transparent 47%),
232
- conic-gradient(from 30deg, #4f7dff, var(--accent), var(--accent-2), #4f7dff);
233
- clip-path: polygon(50% 0, 88% 20%, 88% 67%, 50% 100%, 12% 67%, 12% 20%);
234
- border-radius: 18px;
235
- box-shadow: inset 0 0 0 8px rgba(255,255,255,0.16), 0 14px 28px rgba(111,66,232,0.24);
236
- }
237
-
238
- .lattice-ref-auth .title {
239
- margin: 0;
240
- font-size: clamp(28px, 3vw, 40px);
241
- line-height: 1;
242
- letter-spacing: 0;
243
- text-align: left;
244
- -webkit-text-fill-color: transparent;
245
- background: linear-gradient(90deg, #10142b 0 68%, var(--ref-purple) 69% 100%);
246
- -webkit-background-clip: text;
247
- background-clip: text;
248
- }
249
-
250
- .lattice-ref-auth .subtitle {
251
- margin: 0 0 clamp(14px, 1.9dvh, 22px);
252
- color: #15182f;
253
- font-size: clamp(17px, 2vw, 24px);
254
- font-weight: 860;
255
- line-height: 1.25;
256
- letter-spacing: 0;
257
- }
258
-
259
- .lattice-ref-auth .subtitle::first-line {
260
- color: #15182f;
261
- }
262
-
263
- .lattice-ref-auth .submit,
264
- .lattice-ref-chat .send-btn,
265
- .lattice-ref-chat .workspace-icon,
266
- .lattice-ref-chat .mode-icon {
267
- background: linear-gradient(135deg, var(--ref-purple), #7b61ff);
268
- }
269
-
270
- .lattice-ref-auth .input {
271
- height: 100%;
272
- margin: 0;
273
- border: 0;
274
- background: transparent;
275
- box-shadow: none;
276
- padding: 0 10px;
277
- color: var(--ref-ink);
278
- font-size: clamp(13px, 1.3vw, 15px);
279
- font-weight: 650;
280
- }
281
-
282
- .lattice-ref-auth .input:focus {
283
- box-shadow: none;
284
- border: 0;
285
- }
286
-
287
- .auth-field {
288
- height: clamp(40px, 4.4dvh, 46px);
289
- display: flex;
290
- align-items: center;
291
- gap: 8px;
292
- margin-bottom: clamp(8px, 1.1dvh, 12px);
293
- padding: 0 16px;
294
- border: 1px solid #d9d6e4;
295
- border-radius: 8px;
296
- background: rgba(255,255,255,0.56);
297
- box-shadow: inset 0 1px 0 rgba(255,255,255,0.8);
298
- color: #9695a6;
299
- }
300
-
301
- .auth-field:focus-within {
302
- border-color: rgba(111,66,232,0.44);
303
- box-shadow: 0 0 0 3px rgba(111,66,232,0.09), inset 0 1px 0 rgba(255,255,255,0.8);
304
- }
305
-
306
- .auth-field > i {
307
- font-size: 19px;
308
- }
309
-
310
- .field-eye {
311
- border: 0;
312
- background: transparent;
313
- color: #9695a6;
314
- font-size: 18px;
315
- cursor: pointer;
316
- }
317
-
318
- .lattice-ref-auth .msg {
319
- min-height: clamp(14px, 1.5dvh, 18px);
320
- margin: 2px 0 4px;
321
- color: #d44f5c;
322
- }
323
-
324
- .lattice-ref-auth .submit,
325
- .lattice-ref-auth .register-cta {
326
- height: clamp(42px, 4.6dvh, 48px);
327
- border-radius: 8px;
328
- font-size: clamp(14px, 1.5vw, 17px);
329
- }
330
-
331
- .lattice-ref-auth .submit {
332
- margin-top: 0;
333
- box-shadow: 0 10px 24px rgba(111,66,232,0.24);
334
- }
335
-
336
- .lattice-ref-auth .register-cta {
337
- width: 100%;
338
- margin-top: clamp(8px, 1.1dvh, 12px);
339
- border: 2px solid rgba(111,66,232,0.56);
340
- color: var(--ref-purple);
341
- background: rgba(255,255,255,0.28);
342
- font-family: inherit;
343
- font-weight: 850;
344
- cursor: pointer;
345
- }
346
-
347
- .lattice-ref-auth .sso-divider {
348
- margin: clamp(12px, 1.5dvh, 18px) 0 clamp(8px, 1dvh, 10px);
349
- color: #636276;
350
- font-size: clamp(12px, 1.2vw, 14px);
351
- font-weight: 700;
352
- }
353
-
354
- .lattice-ref-auth .sso-divider::before,
355
- .lattice-ref-auth .sso-divider::after {
356
- background: #d9d6e4;
357
- }
358
-
359
- .lattice-ref-auth .sso-btn {
360
- height: clamp(40px, 4.5dvh, 48px);
361
- margin-bottom: clamp(8px, 1.1dvh, 12px);
362
- justify-content: flex-start;
363
- gap: clamp(10px, 1.4vw, 16px);
364
- padding: 0 clamp(18px, 2.8vw, 28px);
365
- border-radius: 8px;
366
- border-color: #d9d6e4;
367
- background: rgba(255,255,255,0.78);
368
- color: #15182f;
369
- font-size: clamp(13px, 1.4vw, 16px);
370
- font-weight: 850;
371
- box-shadow: 0 6px 16px rgba(88,72,150,0.08);
372
- }
373
-
374
- .ms-logo {
375
- width: clamp(22px, 2.5dvh, 26px);
376
- height: clamp(22px, 2.5dvh, 26px);
377
- display: grid;
378
- grid-template-columns: 1fr 1fr;
379
- gap: 3px;
380
- flex: 0 0 auto;
381
- }
382
-
383
- .ms-logo b:nth-child(1) { background: #f35325; }
384
- .ms-logo b:nth-child(2) { background: #81bc06; }
385
- .ms-logo b:nth-child(3) { background: #05a6f0; }
386
- .ms-logo b:nth-child(4) { background: #ffba08; }
387
-
388
- .okta-logo {
389
- width: clamp(22px, 2.5dvh, 28px);
390
- height: clamp(22px, 2.5dvh, 28px);
391
- border-radius: 50%;
392
- flex: 0 0 auto;
393
- background:
394
- conic-gradient(from 0deg, #111 0 10%, transparent 10% 17%, #111 17% 27%, transparent 27% 34%, #111 34% 44%, transparent 44% 51%, #111 51% 61%, transparent 61% 68%, #111 68% 78%, transparent 78% 85%, #111 85% 95%, transparent 95% 100%);
395
- }
396
-
397
- .local-start {
398
- display: flex;
399
- align-items: center;
400
- justify-content: center;
401
- gap: 12px;
402
- width: 100%;
403
- margin-top: clamp(10px, 1.4dvh, 16px);
404
- border: 0;
405
- background: transparent;
406
- color: var(--ref-purple);
407
- font-family: inherit;
408
- font-size: clamp(13px, 1.3vw, 16px);
409
- font-weight: 850;
410
- cursor: pointer;
411
- }
412
-
413
- .local-start i {
414
- font-size: clamp(17px, 1.9dvh, 22px);
415
- }
416
-
417
- .lattice-ref-auth .lang-wrap {
418
- position: absolute;
419
- top: 12px;
420
- right: 12px;
421
- z-index: 6;
422
- }
423
-
424
- .lattice-ref-auth .lang-btn {
425
- height: auto;
426
- border: 1px solid rgba(111,66,232,0.38);
427
- border-radius: 12px;
428
- padding: 4px 9px;
429
- color: #15182f;
430
- background: rgba(255,255,255,0.88);
431
- font-size: 11px;
432
- font-weight: 700;
433
- box-shadow: 0 1px 5px rgba(111,66,232,0.08);
434
- }
435
-
436
- .lattice-ref-auth .lang-menu {
437
- background: rgba(255,255,255,0.96);
438
- min-width: 110px;
439
- }
440
-
441
- .lattice-ref-auth .lang-opt {
442
- font-size: 11px;
443
- padding: 5px 8px;
444
- }
445
-
446
- .auth-footer {
447
- position: fixed;
448
- left: 48px;
449
- bottom: 28px;
450
- z-index: 5;
451
- display: flex;
452
- align-items: center;
453
- gap: 34px;
454
- }
455
-
456
- .auth-footer button {
457
- display: inline-flex;
458
- align-items: center;
459
- gap: 10px;
460
- height: 42px;
461
- border-radius: 11px;
462
- border: 1px solid var(--accent-soft);
463
- font-size: 16px;
464
- color: #4f5068;
465
- box-shadow: 0 8px 22px rgba(88,72,150,0.06);
466
- cursor: pointer;
467
- }
468
-
469
- .auth-footer a {
470
- color: #57566f;
471
- text-decoration: none;
472
- font-size: 16px;
473
- font-weight: 720;
474
- }
475
-
476
- .lattice-ref-auth #register-section .hero-logo,
477
- .lattice-ref-auth #register-section .logo {
478
- display: none;
479
- }
480
-
481
- .lattice-ref-auth #register-section .title {
482
- text-align: center;
483
- font-size: 38px;
484
- margin-bottom: 10px;
485
- display: block;
486
- }
487
-
488
- .lattice-ref-auth #register-section .subtitle {
489
- font-size: 16px;
490
- text-align: center;
491
- color: var(--ref-muted);
492
- letter-spacing: 0;
493
- }
494
-
495
- .lattice-ref-auth #register-section .input {
496
- height: 48px;
497
- margin-bottom: 10px;
498
- border: 1px solid #d9d6e4;
499
- background: rgba(255,255,255,0.62);
500
- border-radius: 9px;
501
- padding: 0 14px;
502
- font-size: 15px;
503
- }
504
-
505
- .lattice-ref-auth #register-section .submit {
506
- height: 54px;
507
- font-size: 17px;
508
- }
509
-
510
- @media (max-width: 1100px) {
511
- .auth-window-controls {
512
- display: none;
513
- }
514
-
515
- .auth-network {
516
- display: none;
517
- }
518
- }
519
-
520
- @media (max-height: 760px) {
521
- .lattice-ref-auth {
522
- padding-top: 58px;
523
- padding-bottom: 16px;
524
- }
525
-
526
- .auth-footer {
527
- display: none;
528
- }
529
-
530
- .lattice-ref-auth .card {
531
- padding: 38px 30px 16px;
532
- }
533
-
534
- .lattice-ref-auth .hero-logo {
535
- margin-bottom: 8px;
536
- }
537
-
538
- .lattice-ref-auth .hero-logo-mark {
539
- width: 40px;
540
- height: 40px;
541
- font-size: 36px;
542
- }
543
-
544
- .lattice-ref-auth .title {
545
- font-size: 26px;
546
- }
547
-
548
- .lattice-ref-auth .subtitle {
549
- margin-bottom: 12px;
550
- font-size: 16px;
551
- line-height: 1.2;
552
- }
553
-
554
- .auth-field,
555
- .lattice-ref-auth .submit,
556
- .lattice-ref-auth .register-cta,
557
- .lattice-ref-auth .sso-btn {
558
- height: 38px;
559
- }
560
-
561
- .auth-field {
562
- margin-bottom: 7px;
563
- }
564
-
565
- .lattice-ref-auth .submit,
566
- .lattice-ref-auth .register-cta,
567
- .lattice-ref-auth .sso-btn,
568
- .local-start {
569
- font-size: 13px;
570
- }
571
-
572
- .lattice-ref-auth .sso-divider {
573
- margin: 10px 0 6px;
574
- font-size: 12px;
575
- }
576
-
577
- .lattice-ref-auth .sso-btn {
578
- margin-bottom: 7px;
579
- }
580
-
581
- .local-start {
582
- margin-top: 8px;
583
- }
584
- }
585
-
586
- @media (max-width: 760px) {
587
- .auth-titlebar,
588
- .auth-footer,
589
- .auth-wave,
590
- .auth-network {
591
- display: none;
592
- }
593
-
594
- .lattice-ref-auth {
595
- padding: 18px;
596
- }
597
-
598
- .lattice-ref-auth .card {
599
- min-height: auto;
600
- max-height: none;
601
- padding: 28px 22px;
602
- }
603
-
604
- .lattice-ref-auth .hero-logo {
605
- gap: 12px;
606
- }
607
-
608
- .lattice-ref-auth .hero-logo-mark {
609
- width: 58px;
610
- height: 58px;
611
- font-size: 52px;
612
- }
613
-
614
- .lattice-ref-auth .title {
615
- font-size: 34px;
616
- }
617
-
618
- .lattice-ref-auth .subtitle {
619
- font-size: 26px;
620
- }
621
-
622
- }
623
-
624
- /* Shared PPT rail */
625
- .reference-rail {
626
- background: rgba(255,255,255,0.86);
627
- border-right: 1px solid var(--ref-line);
628
- color: var(--ref-ink);
629
- min-height: 100vh;
630
- padding: 26px 18px;
631
- display: flex;
632
- flex-direction: column;
633
- gap: 24px;
634
- box-shadow: 12px 0 48px rgba(88,72,150,0.08);
635
- }
636
-
637
- .rail-brand {
638
- display: flex;
639
- align-items: center;
640
- gap: 12px;
641
- font-size: 23px;
642
- font-weight: 850;
643
- letter-spacing: -0.04em;
644
- }
645
-
646
- .rail-brand i {
647
- color: var(--ref-purple);
648
- font-size: 30px;
649
- }
650
-
651
- .rail-brand span {
652
- display: block;
653
- font-size: 12px;
654
- color: var(--ref-purple-2);
655
- letter-spacing: 0;
656
- }
657
-
658
- .reference-rail nav {
659
- display: flex;
660
- flex-direction: column;
661
- gap: 9px;
662
- }
663
-
664
- .reference-rail a,
665
- .reference-nav-item {
666
- width: 100%;
667
- border: 0;
668
- text-decoration: none;
669
- display: flex;
670
- align-items: center;
671
- gap: 12px;
672
- border-radius: 10px;
673
- padding: 13px 16px;
674
- color: var(--text);
675
- font: inherit;
676
- font-size: 15px;
677
- font-weight: 700;
678
- background: transparent;
679
- cursor: pointer;
680
- transition: 160ms ease;
681
- }
682
-
683
- .reference-rail a.active,
684
- .reference-rail a:hover,
685
- .reference-nav-item.active,
686
- .reference-nav-item:hover {
687
- color: var(--ref-purple);
688
- background: linear-gradient(90deg, var(--border), rgba(111,66,232,0.05));
689
- }
690
-
691
- .reference-rail i,
692
- .reference-nav-item i {
693
- font-size: 20px;
694
- }
695
-
696
- .rail-project {
697
- margin-top: auto;
698
- border: 1px solid var(--ref-line);
699
- border-radius: 12px;
700
- padding: 15px 16px;
701
- background: rgba(255,255,255,0.70);
702
- color: var(--ref-muted);
703
- }
704
-
705
- .rail-project span {
706
- display: block;
707
- font-size: 12px;
708
- margin-bottom: 4px;
709
- }
710
-
711
- .rail-project strong {
712
- display: block;
713
- color: var(--ref-ink);
714
- font-size: 14px;
715
- }
716
-
717
- /* Chat and home dashboard */
718
- .lattice-ref-chat {
719
- background: var(--app-bg);
720
- }
721
-
722
- .lattice-ref-chat .sidebar {
723
- width: 280px;
724
- min-width: 280px;
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);
728
- }
729
-
730
- .lattice-ref-chat .sidebar-header {
731
- padding: 30px 24px 18px;
732
- border-bottom: 0;
733
- }
734
-
735
- .lattice-ref-chat .logo-box {
736
- width: 42px;
737
- height: 42px;
738
- border-radius: 13px;
739
- }
740
-
741
- .lattice-ref-chat .brand-title {
742
- color: var(--ref-ink);
743
- font-size: 23px;
744
- letter-spacing: -0.04em;
745
- }
746
-
747
- .lattice-ref-chat .brand-subtitle {
748
- display: inline-flex;
749
- margin-top: 6px;
750
- padding: 3px 10px;
751
- border-radius: 999px;
752
- color: var(--ref-purple);
753
- background: rgba(111,66,232,0.10);
754
- font-size: 12px;
755
- font-weight: 700;
756
- }
757
-
758
- .lattice-ref-chat .user-strip {
759
- margin: 0 18px 16px;
760
- border: 1px solid var(--ref-line);
761
- border-radius: 14px;
762
- background: rgba(255,255,255,0.72);
763
- order: 20;
764
- }
765
-
766
- .lattice-ref-chat .reference-side-nav {
767
- padding: 12px 18px;
768
- }
769
-
770
- .lattice-ref-chat .sidebar-search,
771
- .lattice-ref-chat .sidebar-primary-actions {
772
- margin: 0 18px;
773
- padding-left: 0;
774
- padding-right: 0;
775
- }
776
-
777
- .lattice-ref-chat .history-container {
778
- padding: 10px 18px;
779
- }
780
-
781
- .lattice-ref-chat .sidebar-footer {
782
- padding: 14px 18px 18px;
783
- }
784
-
785
- .lattice-ref-chat .new-chat-btn,
786
- .lattice-ref-chat .status-btn,
787
- .lattice-ref-chat .setup-wizard-sidebar-btn,
788
- .lattice-ref-chat .admin-btn,
789
- .lattice-ref-chat .file-type-btn,
790
- .lattice-ref-chat .logout-btn,
791
- .lattice-ref-chat .status-pill,
792
- .lattice-ref-chat .model-badge {
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);
797
- }
798
-
799
- .lattice-ref-chat .new-chat-btn:first-child {
800
- border-color: rgba(111,66,232,0.28);
801
- color: var(--ref-purple);
802
- }
803
-
804
- .lattice-ref-chat .chat-header {
805
- min-height: 88px;
806
- padding: 18px 28px;
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);
811
- }
812
-
813
- .lattice-ref-chat .messages-viewport {
814
- padding: 30px 38px 20px;
815
- }
816
-
817
- .lattice-ref-chat .ops-strip {
818
- display: flex;
819
- }
820
-
821
- .lattice-ref-chat .empty-state {
822
- width: min(100%, 1320px);
823
- max-width: none;
824
- margin: 0 auto;
825
- text-align: left;
826
- }
827
-
828
- .reference-home {
829
- display: flex;
830
- flex-direction: column;
831
- gap: 22px;
832
- }
833
-
834
- .reference-home-head h1 {
835
- margin: 0;
836
- color: var(--ref-ink);
837
- font-size: clamp(30px, 3vw, 40px);
838
- font-weight: 860;
839
- letter-spacing: -0.04em;
840
- }
841
-
842
- .reference-home-head p {
843
- margin: 8px 0 0;
844
- color: var(--ref-muted);
845
- font-size: 15px;
846
- }
847
-
848
- .reference-card-grid {
849
- display: grid;
850
- grid-template-columns: repeat(3, minmax(0, 1fr));
851
- gap: 20px;
852
- }
853
-
854
- .reference-dash-card,
855
- .reference-lists article {
856
- border: 1px solid var(--ref-line);
857
- border-radius: 18px;
858
- background: var(--ref-card);
859
- box-shadow: var(--ref-shadow);
860
- transition: transform 200ms var(--lt-motion-ease, ease), box-shadow 200ms var(--lt-motion-ease, ease);
861
- }
862
-
863
- .reference-dash-card:hover,
864
- .reference-lists article:hover {
865
- transform: translateY(-3px);
866
- box-shadow: 0 24px 64px rgba(88,72,150,0.18);
867
- }
868
-
869
- .reference-dash-card {
870
- min-height: 260px;
871
- padding: 22px 24px;
872
- }
873
-
874
- .reference-card-icon {
875
- width: 56px;
876
- height: 56px;
877
- border-radius: 15px;
878
- display: grid;
879
- place-items: center;
880
- margin-bottom: 18px;
881
- color: var(--ref-purple);
882
- background: linear-gradient(135deg, rgba(111,66,232,0.13), rgba(111,66,232,0.06));
883
- font-size: 28px;
884
- }
885
-
886
- .reference-dash-card h3 {
887
- margin: 0 0 20px;
888
- color: var(--ref-ink);
889
- font-size: 22px;
890
- }
891
-
892
- .reference-dash-card p {
893
- color: var(--ref-muted);
894
- margin: 0 0 14px;
895
- }
896
-
897
- .green-dot {
898
- display: inline-block;
899
- width: 11px;
900
- height: 11px;
901
- border-radius: 50%;
902
- background: #28c66f;
903
- box-shadow: 0 0 0 8px rgba(40,198,111,0.12);
904
- margin-right: 10px;
905
- }
906
-
907
- .reference-stat-row {
908
- display: flex;
909
- justify-content: space-between;
910
- align-items: center;
911
- color: var(--ref-muted);
912
- margin: 12px 0;
913
- }
914
-
915
- .reference-stat-row strong,
916
- .reference-big-number {
917
- color: var(--ref-purple);
918
- font-size: 22px;
919
- }
920
-
921
- .reference-big-number {
922
- font-size: 34px;
923
- font-weight: 850;
924
- }
925
-
926
- .reference-progress {
927
- height: 10px;
928
- border-radius: 999px;
929
- background: #ebe7f4;
930
- overflow: hidden;
931
- margin: 16px 0 26px;
932
- }
933
-
934
- .reference-progress span {
935
- display: block;
936
- height: 100%;
937
- border-radius: inherit;
938
- background: linear-gradient(90deg, var(--ref-purple), var(--ref-purple-2));
939
- }
940
-
941
- .reference-dash-card button,
942
- .reference-lists button {
943
- width: 100%;
944
- border: 1px solid rgba(111,66,232,0.35);
945
- border-radius: 10px;
946
- padding: 12px 14px;
947
- color: var(--ref-purple);
948
- background: #fff;
949
- font: inherit;
950
- font-weight: 800;
951
- cursor: pointer;
952
- }
953
-
954
- .reference-lists {
955
- display: grid;
956
- grid-template-columns: 1fr 1.1fr;
957
- gap: 20px;
958
- }
959
-
960
- .reference-lists article {
961
- padding: 0 22px 12px;
962
- }
963
-
964
- .reference-lists header {
965
- height: 58px;
966
- display: flex;
967
- align-items: center;
968
- gap: 10px;
969
- border-bottom: 1px solid var(--ref-line);
970
- color: var(--ref-ink);
971
- font-weight: 850;
972
- }
973
-
974
- .reference-lists header button {
975
- margin-left: auto;
976
- width: auto;
977
- border: 0;
978
- padding: 0;
979
- color: var(--ref-purple);
980
- background: transparent;
981
- }
982
-
983
- .reference-lists p {
984
- display: flex;
985
- justify-content: space-between;
986
- gap: 18px;
987
- margin: 0;
988
- padding: 15px 0;
989
- border-bottom: 1px solid #f0ecf7;
990
- color: var(--ref-ink);
991
- }
992
-
993
- .reference-lists p span {
994
- color: var(--ref-faint);
995
- white-space: nowrap;
996
- }
997
-
998
- .lattice-ref-chat .empty-grid {
999
- display: flex;
1000
- justify-content: flex-start;
1001
- gap: 10px;
1002
- }
1003
-
1004
- .lattice-ref-chat .empty-chip {
1005
- border-radius: 999px;
1006
- padding: 12px 16px;
1007
- box-shadow: none;
1008
- }
1009
-
1010
- .lattice-ref-chat .input-area {
1011
- background: linear-gradient(0deg, rgba(243,237,255,0.99), rgba(243,237,255,0.86), transparent);
1012
- }
1013
-
1014
- .lattice-ref-chat .input-box {
1015
- max-width: 1120px;
1016
- border-radius: 18px;
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);
1020
- }
1021
-
1022
- .lattice-ref-chat .user .bubble {
1023
- background: linear-gradient(135deg, var(--ref-purple), #6536d9);
1024
- border-radius: 16px 16px 4px 16px;
1025
- }
1026
-
1027
- .lattice-ref-chat .ai .bubble {
1028
- background: rgba(250,246,255,0.97);
1029
- color: var(--ref-ink);
1030
- border-color: var(--accent-soft);
1031
- border-radius: 16px 16px 16px 4px;
1032
- box-shadow: 0 4px 18px rgba(88,72,150,0.08);
1033
- }
1034
-
1035
- .lattice-ref-chat .workspace-modal,
1036
- .lattice-ref-chat .mode-modal {
1037
- border-radius: 22px;
1038
- }
1039
-
1040
- /* Graph page: slide 6 light graph workspace */
1041
- .lattice-ref-graph {
1042
- margin: 0;
1043
- display: grid;
1044
- grid-template-columns: 264px minmax(0, 1fr);
1045
- min-height: 100vh;
1046
- overflow: hidden;
1047
- background: #fbfaff;
1048
- color: var(--ref-ink);
1049
- font-family: "Inter", "Pretendard", "Apple SD Gothic Neo", -apple-system, BlinkMacSystemFont, sans-serif;
1050
- }
1051
-
1052
- .lattice-ref-graph .app {
1053
- height: 100vh;
1054
- grid-template-columns: minmax(0, 1fr) 320px;
1055
- background: #fbfaff;
1056
- }
1057
-
1058
- .lattice-ref-graph .stage {
1059
- border-right: 0;
1060
- background:
1061
- radial-gradient(circle, var(--border) 1px, transparent 1.8px),
1062
- linear-gradient(180deg, #fff 0%, #fbfaff 100%);
1063
- background-size: 28px 28px, 100% 100%;
1064
- margin: 98px 14px 40px 24px;
1065
- border: 1px solid var(--ref-line);
1066
- border-radius: 14px;
1067
- overflow: hidden;
1068
- }
1069
-
1070
- .lattice-ref-graph .stage::before {
1071
- content: "지식 그래프";
1072
- position: fixed;
1073
- top: 34px;
1074
- left: 324px;
1075
- color: var(--ref-ink);
1076
- font-size: 31px;
1077
- font-weight: 860;
1078
- letter-spacing: -0.04em;
1079
- }
1080
-
1081
- .lattice-ref-graph .stage::after {
1082
- content: "\ea2e";
1083
- font-family: "tabler-icons";
1084
- position: fixed;
1085
- top: 30px;
1086
- left: 288px;
1087
- width: 40px;
1088
- height: 40px;
1089
- display: grid;
1090
- place-items: center;
1091
- border-radius: 10px;
1092
- color: var(--ref-purple);
1093
- background: rgba(111,66,232,0.10);
1094
- font-size: 22px;
1095
- }
1096
-
1097
- .lattice-ref-graph .search-shell {
1098
- top: -72px;
1099
- left: auto;
1100
- right: 250px;
1101
- width: min(520px, 42vw);
1102
- border-radius: 10px;
1103
- background: #fff;
1104
- box-shadow: none;
1105
- }
1106
-
1107
- .lattice-ref-graph .search-head {
1108
- display: none;
1109
- }
1110
-
1111
- .lattice-ref-graph .search-input-wrap {
1112
- padding: 0;
1113
- }
1114
-
1115
- .lattice-ref-graph .search-input {
1116
- height: 48px;
1117
- background: #fff;
1118
- color: var(--ref-ink);
1119
- border-color: var(--ref-line);
1120
- }
1121
-
1122
- .lattice-ref-graph #clear-search-btn {
1123
- display: none;
1124
- }
1125
-
1126
- .lattice-ref-graph .search-results {
1127
- display: none;
1128
- }
1129
-
1130
- .lattice-ref-graph .toolbar {
1131
- top: auto;
1132
- bottom: 12px;
1133
- left: 50%;
1134
- right: auto;
1135
- transform: translateX(-50%);
1136
- background: #fff;
1137
- border-color: var(--ref-line);
1138
- box-shadow: var(--ref-shadow);
1139
- border-radius: 12px;
1140
- }
1141
-
1142
- .lattice-ref-graph .tb-btn {
1143
- background: #fff;
1144
- color: var(--ref-ink);
1145
- border-color: var(--ref-line);
1146
- }
1147
-
1148
- .lattice-ref-graph aside:not(.reference-rail) {
1149
- margin: 98px 20px 40px 0;
1150
- border: 1px solid var(--ref-line);
1151
- border-radius: 14px;
1152
- background: #fff;
1153
- color: var(--ref-ink);
1154
- box-shadow: var(--ref-shadow);
1155
- display: flex;
1156
- flex-direction: column;
1157
- overflow-x: hidden;
1158
- overflow-y: auto;
1159
- min-height: 0;
1160
- }
1161
-
1162
- .lattice-ref-graph .sidebar-head,
1163
- .lattice-ref-graph .section {
1164
- border-color: var(--ref-line);
1165
- }
1166
-
1167
- .lattice-ref-graph .eyebrow {
1168
- color: var(--ref-purple);
1169
- }
1170
-
1171
- .lattice-ref-graph .sidebar-sub,
1172
- .lattice-ref-graph .filter-count,
1173
- .lattice-ref-graph .legend-meta,
1174
- .lattice-ref-graph .detail-summary,
1175
- .lattice-ref-graph .empty-hint {
1176
- color: var(--ref-muted);
1177
- }
1178
-
1179
- .lattice-ref-graph .stat,
1180
- .lattice-ref-graph .metric-card,
1181
- .lattice-ref-graph .meta-block,
1182
- .lattice-ref-graph .search-item {
1183
- background: #fbfaff;
1184
- border-color: var(--ref-line);
1185
- }
1186
-
1187
- .lattice-ref-graph #tooltip {
1188
- background: #fff;
1189
- color: var(--ref-ink);
1190
- border-color: var(--ref-line);
1191
- }
1192
-
1193
- /* Admin page — light lavender theme (matches graph/chat) */
1194
- .lattice-ref-admin {
1195
- margin: 0;
1196
- display: grid;
1197
- grid-template-columns: 264px minmax(0, 1fr);
1198
- min-height: 100vh;
1199
- overflow: hidden;
1200
- background:
1201
- radial-gradient(circle at 82% 12%, var(--border), transparent 30%),
1202
- radial-gradient(circle at 10% 80%, rgba(180,160,255,0.16), transparent 35%),
1203
- linear-gradient(180deg, var(--bg) 0%, var(--surface-2) 52%, #f2ecff 100%);
1204
- color: var(--text);
1205
- }
1206
-
1207
- .lattice-ref-admin::before {
1208
- display: none;
1209
- }
1210
-
1211
- .lattice-ref-admin .admin-rail {
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);
1216
- }
1217
-
1218
- .lattice-ref-admin .admin-rail .rail-brand {
1219
- align-items: flex-start;
1220
- flex-direction: column;
1221
- gap: 4px;
1222
- font-size: 25px;
1223
- color: var(--text);
1224
- }
1225
-
1226
- .lattice-ref-admin .admin-rail .rail-brand i {
1227
- font-size: 34px;
1228
- color: var(--ref-purple);
1229
- }
1230
-
1231
- .lattice-ref-admin .admin-rail a {
1232
- color: var(--text);
1233
- }
1234
-
1235
- .lattice-ref-admin .admin-rail a.active,
1236
- .lattice-ref-admin .admin-rail a:hover {
1237
- background: linear-gradient(90deg, var(--border), rgba(111,66,232,0.05));
1238
- color: var(--text);
1239
- }
1240
-
1241
- .lattice-ref-admin .admin-rail .rail-project {
1242
- background: rgba(255,255,255,0.72);
1243
- border-color: rgba(111,66,232,0.13);
1244
- }
1245
-
1246
- .lattice-ref-admin .admin-rail .rail-project strong {
1247
- color: var(--text);
1248
- }
1249
-
1250
- .lattice-ref-admin .admin-rail .rail-project span {
1251
- color: var(--muted);
1252
- }
1253
-
1254
- .lattice-ref-admin .page {
1255
- min-height: 100vh;
1256
- overflow-y: auto;
1257
- }
1258
-
1259
- .lattice-ref-admin .topbar {
1260
- height: 96px;
1261
- background: rgba(244,237,255,0.92);
1262
- border-bottom: 1px solid rgba(111,66,232,0.10);
1263
- backdrop-filter: blur(14px);
1264
- padding: 22px 34px 8px;
1265
- position: sticky;
1266
- }
1267
-
1268
- .lattice-ref-admin .brand-mark {
1269
- display: none;
1270
- }
1271
-
1272
- .lattice-ref-admin .brand h1 {
1273
- font-size: 36px;
1274
- letter-spacing: -0.05em;
1275
- color: var(--text);
1276
- }
1277
-
1278
- .lattice-ref-admin .brand p {
1279
- color: var(--muted);
1280
- font-size: 15px;
1281
- }
1282
-
1283
- .lattice-ref-admin .top-actions .btn {
1284
- background: rgba(244,238,255,0.88);
1285
- border-color: rgba(111,66,232,0.18);
1286
- color: var(--text);
1287
- }
1288
-
1289
- .lattice-ref-admin .top-actions .btn:hover {
1290
- background: rgba(111,66,232,0.10);
1291
- border-color: rgba(111,66,232,0.32);
1292
- color: var(--accent);
1293
- }
1294
-
1295
- .lattice-ref-admin #admin-lang-btn {
1296
- min-width: 180px;
1297
- justify-content: center;
1298
- border-color: var(--border-strong);
1299
- }
1300
-
1301
- .lattice-ref-admin .content {
1302
- width: min(1500px, calc(100vw - 316px));
1303
- padding: 8px 34px 28px;
1304
- gap: 18px;
1305
- }
1306
-
1307
- .lattice-ref-admin .admin-view {
1308
- display: none;
1309
- flex-direction: column;
1310
- gap: 18px;
1311
- }
1312
-
1313
- .lattice-ref-admin .admin-view.active {
1314
- display: flex;
1315
- }
1316
-
1317
- .lattice-ref-admin .hero {
1318
- display: none;
1319
- }
1320
-
1321
- .lattice-ref-admin .summary-grid {
1322
- grid-template-columns: repeat(4, minmax(0, 1fr));
1323
- gap: 14px;
1324
- }
1325
-
1326
- .lattice-ref-admin .summary-card,
1327
- .lattice-ref-admin .panel,
1328
- .lattice-ref-admin .subpanel,
1329
- .lattice-ref-admin .session-card,
1330
- .lattice-ref-admin .table-wrap,
1331
- .lattice-ref-admin .audit-metric {
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);
1336
- border-radius: 12px;
1337
- }
1338
-
1339
- .lattice-ref-admin .summary-card {
1340
- min-height: 118px;
1341
- padding: 18px 18px 16px 88px;
1342
- position: relative;
1343
- display: flex;
1344
- flex-direction: column;
1345
- justify-content: center;
1346
- overflow: hidden;
1347
- transition: transform 200ms ease, box-shadow 200ms ease;
1348
- }
1349
-
1350
- .lattice-ref-admin .summary-card:hover {
1351
- transform: translateY(-2px);
1352
- box-shadow: 0 14px 40px rgba(88,72,150,0.14);
1353
- }
1354
-
1355
- .lattice-ref-admin .summary-card::before {
1356
- content: "\ea02";
1357
- font-family: "tabler-icons";
1358
- position: absolute;
1359
- left: 20px;
1360
- top: 50%;
1361
- width: 48px;
1362
- height: 48px;
1363
- display: grid;
1364
- place-items: center;
1365
- border-radius: 8px;
1366
- color: #fff;
1367
- background: linear-gradient(135deg, var(--accent), #5332b8);
1368
- font-size: 24px;
1369
- transform: translateY(-50%);
1370
- box-shadow: 0 12px 24px rgba(111,66,232,0.16);
1371
- }
1372
-
1373
- .lattice-ref-admin .summary-card:nth-child(2)::before { content: "\ea9a"; }
1374
- .lattice-ref-admin .summary-card:nth-child(3)::before { content: "\eaa4"; }
1375
- .lattice-ref-admin .summary-card:nth-child(4)::before {
1376
- content: "\eadd";
1377
- background: linear-gradient(135deg, #0d8f72, #116b6d);
1378
- }
1379
-
1380
- .lattice-ref-admin .summary-card .label,
1381
- .lattice-ref-admin .panel-header p,
1382
- .lattice-ref-admin .summary-card .meta {
1383
- color: var(--muted);
1384
- }
1385
-
1386
- .lattice-ref-admin .summary-card .label {
1387
- font-size: 12px;
1388
- font-weight: 800;
1389
- letter-spacing: 0;
1390
- text-transform: none;
1391
- margin-bottom: 8px;
1392
- }
1393
-
1394
- .lattice-ref-admin td,
1395
- .lattice-ref-admin th {
1396
- color: var(--text);
1397
- }
1398
-
1399
- .lattice-ref-admin .summary-card .value {
1400
- color: var(--accent);
1401
- font-size: clamp(24px, 2.15vw, 34px);
1402
- line-height: 1.05;
1403
- letter-spacing: 0;
1404
- overflow: hidden;
1405
- overflow-wrap: anywhere;
1406
- display: -webkit-box;
1407
- -webkit-line-clamp: 2;
1408
- -webkit-box-orient: vertical;
1409
- }
1410
-
1411
- .lattice-ref-admin .summary-card .meta {
1412
- margin-top: 8px;
1413
- min-height: 0;
1414
- line-height: 1.4;
1415
- overflow: hidden;
1416
- display: -webkit-box;
1417
- -webkit-line-clamp: 2;
1418
- -webkit-box-orient: vertical;
1419
- }
1420
-
1421
- .lattice-ref-admin .panel-header {
1422
- border-bottom-color: rgba(111,66,232,0.10);
1423
- }
1424
-
1425
- .lattice-ref-admin .panel-header h3,
1426
- .lattice-ref-admin .subpanel h4 {
1427
- color: var(--text);
1428
- }
1429
-
1430
- .lattice-ref-admin table {
1431
- color: var(--text);
1432
- background: transparent;
1433
- }
1434
-
1435
- .lattice-ref-admin tr,
1436
- .lattice-ref-admin th,
1437
- .lattice-ref-admin td {
1438
- border-color: rgba(111,66,232,0.10);
1439
- }
1440
-
1441
- .lattice-ref-admin th {
1442
- background: rgba(111,66,232,0.05);
1443
- color: var(--muted);
1444
- }
1445
-
1446
- .lattice-ref-admin input,
1447
- .lattice-ref-admin textarea,
1448
- .lattice-ref-admin select {
1449
- background: rgba(255,255,255,0.80);
1450
- border-color: rgba(111,66,232,0.16);
1451
- color: var(--text);
1452
- }
1453
-
1454
- .lattice-ref-admin input:focus,
1455
- .lattice-ref-admin textarea:focus,
1456
- .lattice-ref-admin select:focus {
1457
- border-color: rgba(111,66,232,0.44);
1458
- box-shadow: 0 0 0 3px rgba(111,66,232,0.08);
1459
- }
1460
-
1461
- .lattice-ref-admin label {
1462
- color: var(--muted);
1463
- }
1464
-
1465
- .lattice-ref-admin .item {
1466
- background: rgba(255,255,255,0.70);
1467
- border-color: rgba(111,66,232,0.10);
1468
- color: var(--text);
1469
- }
1470
-
1471
- .lattice-ref-admin .preview {
1472
- color: var(--muted);
1473
- }
1474
-
1475
- .lattice-ref-admin .tag {
1476
- color: var(--muted);
1477
- border-color: rgba(111,66,232,0.15);
1478
- background: rgba(255,255,255,0.60);
1479
- }
1480
-
1481
- .lattice-ref-admin .muted {
1482
- color: var(--muted);
1483
- }
1484
-
1485
- .lattice-ref-admin .notice {
1486
- background: rgba(111,66,232,0.08);
1487
- border-color: rgba(111,66,232,0.20);
1488
- color: var(--muted);
1489
- }
1490
-
1491
- .lattice-ref-admin .status-copy {
1492
- color: var(--muted);
1493
- }
1494
-
1495
- .lattice-ref-admin .inline-control {
1496
- display: flex;
1497
- gap: 8px;
1498
- align-items: center;
1499
- }
1500
-
1501
- .lattice-ref-admin .inline-control input {
1502
- flex: 1;
1503
- }
1504
-
1505
- .lattice-ref-admin .button-row {
1506
- display: flex;
1507
- flex-wrap: wrap;
1508
- gap: 8px;
1509
- justify-content: flex-end;
1510
- }
1511
-
1512
- .lattice-ref-admin .sso-template-help {
1513
- margin-top: 12px;
1514
- padding: 11px 12px;
1515
- border: 1px solid var(--border);
1516
- border-radius: 8px;
1517
- background: rgba(111,66,232,0.06);
1518
- color: var(--muted);
1519
- font-size: 12px;
1520
- line-height: 1.5;
1521
- }
1522
-
1523
- .lattice-ref-admin .enterprise-grid {
1524
- display: grid;
1525
- grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
1526
- gap: 10px;
1527
- }
1528
-
1529
- .lattice-ref-admin .enterprise-cap-card {
1530
- display: flex;
1531
- align-items: center;
1532
- gap: 10px;
1533
- min-width: 0;
1534
- border: 1px solid var(--accent-soft);
1535
- border-radius: 8px;
1536
- background: rgba(255,255,255,0.70);
1537
- padding: 11px 12px;
1538
- }
1539
-
1540
- .lattice-ref-admin .enterprise-cap-card i {
1541
- color: var(--faint);
1542
- font-size: 18px;
1543
- }
1544
-
1545
- .lattice-ref-admin .enterprise-cap-card.on i {
1546
- color: #0d8f72;
1547
- }
1548
-
1549
- .lattice-ref-admin .enterprise-cap-card span {
1550
- flex: 1;
1551
- min-width: 0;
1552
- color: var(--text);
1553
- font-size: 13px;
1554
- font-weight: 800;
1555
- overflow: hidden;
1556
- text-overflow: ellipsis;
1557
- white-space: nowrap;
1558
- text-transform: capitalize;
1559
- }
1560
-
1561
- .lattice-ref-admin .enterprise-cap-card strong {
1562
- color: var(--muted);
1563
- font-size: 11px;
1564
- }
1565
-
1566
- .lattice-ref-admin .enterprise-kv {
1567
- display: grid;
1568
- gap: 8px;
1569
- }
1570
-
1571
- .lattice-ref-admin .enterprise-kv div {
1572
- display: grid;
1573
- grid-template-columns: 150px minmax(0, 1fr);
1574
- gap: 10px;
1575
- align-items: start;
1576
- border: 1px solid rgba(111,66,232,0.10);
1577
- border-radius: 8px;
1578
- background: rgba(255,255,255,0.62);
1579
- padding: 9px 10px;
1580
- }
1581
-
1582
- .lattice-ref-admin .enterprise-kv span {
1583
- color: var(--muted);
1584
- font-size: 12px;
1585
- font-weight: 800;
1586
- }
1587
-
1588
- .lattice-ref-admin .enterprise-kv strong {
1589
- color: var(--text);
1590
- font-size: 12px;
1591
- line-height: 1.45;
1592
- overflow-wrap: anywhere;
1593
- }
1594
-
1595
- .lattice-ref-admin .enterprise-json {
1596
- max-height: 280px;
1597
- overflow: auto;
1598
- margin: 12px 0 0;
1599
- border: 1px solid rgba(111,66,232,0.10);
1600
- border-radius: 8px;
1601
- background: rgba(20,22,44,0.05);
1602
- color: var(--text);
1603
- padding: 12px;
1604
- font-size: 12px;
1605
- white-space: pre-wrap;
1606
- }
1607
-
1608
- @media (max-width: 980px) {
1609
- .lattice-ref-chat .reference-card-grid,
1610
- .reference-lists {
1611
- grid-template-columns: 1fr;
1612
- }
1613
-
1614
- .lattice-ref-graph,
1615
- .lattice-ref-admin {
1616
- display: block;
1617
- overflow: auto;
1618
- }
1619
-
1620
- .reference-rail {
1621
- min-height: auto;
1622
- }
1623
- }
1624
-
1625
- /* ============================================================
1626
- ACCOUNT / AUTH PAGE (account.html)
1627
- Light lavender theme — unified with chat/graph/admin pages.
1628
- ============================================================ */
1629
-
1630
- * { box-sizing: border-box; margin: 0; padding: 0; }
1631
- html, body.lattice-ref-auth { height: 100%; }
1632
- body.lattice-ref-auth {
1633
- font-family: Inter, -apple-system, BlinkMacSystemFont, sans-serif;
1634
- color: var(--text);
1635
- background: var(--app-bg);
1636
- display: flex;
1637
- align-items: center;
1638
- justify-content: center;
1639
- min-height: 100vh;
1640
- padding: 24px;
1641
- overflow: hidden;
1642
- position: relative;
1643
- }
1644
-
1645
- body::before {
1646
- content: '';
1647
- position: fixed;
1648
- inset: 0;
1649
- background:
1650
- radial-gradient(circle, rgba(123,109,255,0.28) 1px, transparent 1.8px),
1651
- linear-gradient(rgba(123,109,255,0.08) 1px, transparent 1px),
1652
- linear-gradient(90deg, rgba(123,109,255,0.06) 1px, transparent 1px);
1653
- background-size: 82px 82px, 46px 46px, 46px 46px;
1654
- background-position: 16px 18px, 0 0, 0 0;
1655
- mask-image: linear-gradient(180deg, rgba(0,0,0,0.18), rgba(0,0,0,0.02));
1656
- pointer-events: none;
1657
- }
1658
-
1659
- body::after {
1660
- content: '';
1661
- position: fixed;
1662
- inset: 0;
1663
- background:
1664
- radial-gradient(ellipse at 8% 78%, rgba(142,111,255,0.24), transparent 34%),
1665
- linear-gradient(115deg, transparent 0 35%, rgba(111,75,246,0.09) 35.2%, transparent 35.6% 100%);
1666
- pointer-events: none;
1667
- }
1668
-
1669
- .orb {
1670
- display: none;
1671
- }
1672
-
1673
- .login-shell {
1674
- width: min(920px, 100%);
1675
- display: grid;
1676
- grid-template-columns: minmax(280px, 400px) minmax(220px, 1fr);
1677
- align-items: center;
1678
- gap: 46px;
1679
- position: relative;
1680
- z-index: 1;
1681
- }
1682
-
1683
- .brand-preview {
1684
- min-height: 360px;
1685
- border-radius: 34px;
1686
- background:
1687
- radial-gradient(circle at 54% 45%, rgba(111,75,246,0.24), transparent 18%),
1688
- linear-gradient(145deg, rgba(255,255,255,0.68), rgba(244,239,255,0.32));
1689
- border: 1px solid rgba(111,75,246,0.12);
1690
- box-shadow: inset 0 1px 0 rgba(255,255,255,0.85);
1691
- position: relative;
1692
- overflow: hidden;
1693
- }
1694
- .brand-preview::before {
1695
- content: '';
1696
- position: absolute;
1697
- inset: auto -12% 0 -8%;
1698
- height: 46%;
1699
- background: linear-gradient(135deg, rgba(111,75,246,0.24), rgba(255,255,255,0.12));
1700
- clip-path: polygon(0 62%, 18% 42%, 36% 54%, 55% 26%, 76% 44%, 100% 20%, 100% 100%, 0 100%);
1701
- filter: blur(1px);
1702
- }
1703
- .preview-node {
1704
- position: absolute;
1705
- width: 52px;
1706
- height: 52px;
1707
- border-radius: 17px;
1708
- background: #fff;
1709
- border: 1px solid rgba(111,75,246,0.18);
1710
- box-shadow: 0 18px 40px rgba(111,75,246,0.16);
1711
- }
1712
- .preview-node::after {
1713
- content: '';
1714
- position: absolute;
1715
- inset: 14px;
1716
- border-radius: 10px;
1717
- background: linear-gradient(135deg, #6f4bf6, #9f8cff);
1718
- }
1719
- .preview-node.n1 { top: 52px; left: 58px; }
1720
- .preview-node.n2 { top: 112px; right: 64px; }
1721
- .preview-node.n3 { left: 120px; bottom: 92px; }
1722
- .preview-node.n4 { right: 120px; bottom: 58px; }
1723
- .preview-line {
1724
- position: absolute;
1725
- height: 2px;
1726
- width: 150px;
1727
- background: linear-gradient(90deg, transparent, rgba(111,75,246,0.45), transparent);
1728
- transform-origin: left center;
1729
- }
1730
- .preview-line.l1 { top: 108px; left: 112px; transform: rotate(18deg); }
1731
- .preview-line.l2 { top: 186px; left: 176px; transform: rotate(112deg); }
1732
- .preview-line.l3 { bottom: 112px; left: 172px; transform: rotate(-13deg); }
1733
-
1734
- .card {
1735
- width: min(400px, 100%);
1736
- background: rgba(255,255,255,0.86);
1737
- border: 1px solid rgba(111,75,246,0.13);
1738
- border-radius: 14px;
1739
- padding: 38px 34px;
1740
- box-shadow: var(--shadow), inset 0 1px 0 rgba(255,255,255,0.9);
1741
- position: relative;
1742
- z-index: 1;
1743
- backdrop-filter: blur(28px);
1744
- }
1745
-
1746
- .card::before {
1747
- content: '';
1748
- position: absolute;
1749
- top: 0; left: 50%;
1750
- transform: translateX(-50%);
1751
- width: 55%; height: 1px;
1752
- background: linear-gradient(90deg, transparent, rgba(111,75,246,0.65), rgba(123,109,255,0.45), transparent);
1753
- }
1754
-
1755
- .logo {
1756
- width: 54px; height: 54px;
1757
- background: linear-gradient(135deg, #6f4bf6 0%, #8d7aff 100%);
1758
- border-radius: 10px;
1759
- display: flex; align-items: center; justify-content: center;
1760
- font-size: 26px; color: #fff;
1761
- margin: 0 auto 18px;
1762
- box-shadow: 0 16px 34px rgba(111,75,246,0.28);
1763
- }
1764
-
1765
- .title {
1766
- text-align: center;
1767
- font-size: 23px;
1768
- font-weight: 800;
1769
- margin-bottom: 6px;
1770
- background: linear-gradient(135deg, #1f2140 35%, #6f4bf6 82%);
1771
- -webkit-background-clip: text;
1772
- -webkit-text-fill-color: transparent;
1773
- background-clip: text;
1774
- }
1775
-
1776
- .subtitle {
1777
- text-align: center;
1778
- color: var(--muted);
1779
- font-size: 12.5px;
1780
- margin-bottom: 26px;
1781
- line-height: 1.5;
1782
- }
1783
-
1784
- .input {
1785
- width: 100%;
1786
- padding: 12px 14px;
1787
- margin-bottom: 10px;
1788
- background: #fbfaff;
1789
- border: 1px solid rgba(111,75,246,0.16);
1790
- color: var(--text);
1791
- border-radius: 8px;
1792
- outline: none;
1793
- font-size: 14px;
1794
- font-family: inherit;
1795
- transition: border-color .15s, box-shadow .15s;
1796
- }
1797
- .input:focus {
1798
- border-color: rgba(111,75,246,0.52);
1799
- box-shadow: 0 0 0 4px rgba(111,75,246,0.10);
1800
- }
1801
- .input::placeholder { color: var(--faint); }
1802
-
1803
- .submit {
1804
- width: 100%;
1805
- padding: 13px;
1806
- background: linear-gradient(135deg, #6f4bf6, #7b6dff);
1807
- color: #fff;
1808
- border: none;
1809
- border-radius: 8px;
1810
- cursor: pointer;
1811
- font-weight: 800;
1812
- font-size: 14px;
1813
- font-family: inherit;
1814
- box-shadow: 0 14px 30px rgba(111,75,246,0.24);
1815
- transition: all .18s;
1816
- margin-top: 4px;
1817
- }
1818
- .submit:hover {
1819
- background: linear-gradient(135deg, #5f3ee6, #705fff);
1820
- box-shadow: 0 18px 38px rgba(111,75,246,0.30);
1821
- transform: translateY(-1px);
1822
- }
1823
- .submit:disabled { opacity: 0.6; cursor: not-allowed; transform: none; }
1824
-
1825
- .switch {
1826
- margin-top: 18px;
1827
- text-align: center;
1828
- font-size: 12.5px;
1829
- color: var(--faint);
1830
- }
1831
- .switch a { color: #6f4bf6; text-decoration: none; font-weight: 700; }
1832
- .switch a:hover { text-decoration: underline; }
1833
-
1834
- .sso-divider {
1835
- display: flex; align-items: center; gap: 10px;
1836
- margin: 14px 0 10px;
1837
- color: var(--faint); font-size: 11.5px;
1838
- }
1839
- .sso-divider::before, .sso-divider::after {
1840
- content: ''; flex: 1;
1841
- height: 1px; background: rgba(111,75,246,0.12);
1842
- }
1843
- .sso-btn {
1844
- width: 100%;
1845
- padding: 12px;
1846
- background: #fff;
1847
- border: 1px solid rgba(111,75,246,0.15);
1848
- color: var(--text);
1849
- border-radius: 8px;
1850
- cursor: pointer;
1851
- font-weight: 600;
1852
- font-size: 13.5px;
1853
- font-family: inherit;
1854
- display: flex; align-items: center; justify-content: center; gap: 8px;
1855
- transition: all .18s;
1856
- }
1857
- .sso-btn:hover {
1858
- background: #f6f2ff;
1859
- border-color: rgba(111,75,246,0.34);
1860
- }
1861
-
1862
- .msg {
1863
- font-size: 12px;
1864
- min-height: 18px;
1865
- margin-bottom: 6px;
1866
- text-align: center;
1867
- color: #d44f5c;
1868
- }
1869
- .msg.ok { color: #0d8f72; }
1870
-
1871
- /* Lang picker */
1872
- .lang-wrap {
1873
- position: absolute;
1874
- top: 12px;
1875
- right: 12px;
1876
- z-index: 10;
1877
- }
1878
- .lang-btn {
1879
- background: rgba(255,255,255,0.86);
1880
- border: 1px solid rgba(111,75,246,0.18);
1881
- color: var(--text);
1882
- border-radius: 8px;
1883
- padding: 7px 12px;
1884
- font-size: 13px;
1885
- font-family: inherit;
1886
- cursor: pointer;
1887
- transition: background .15s;
1888
- box-shadow: 0 10px 28px rgba(86,70,160,0.12);
1889
- }
1890
- .lang-btn:hover { background: rgba(111,75,246,0.08); }
1891
- .lang-menu {
1892
- display: none;
1893
- position: absolute;
1894
- top: calc(100% + 6px);
1895
- right: 0;
1896
- background: #fff;
1897
- border: 1px solid rgba(111,75,246,0.15);
1898
- border-radius: 8px;
1899
- padding: 4px;
1900
- min-width: 130px;
1901
- box-shadow: 0 18px 44px rgba(86,70,160,0.16);
1902
- }
1903
- .lang-menu.open { display: block; }
1904
- .lang-opt {
1905
- padding: 7px 10px;
1906
- border-radius: 7px;
1907
- cursor: pointer;
1908
- font-size: 13px;
1909
- color: var(--muted);
1910
- }
1911
- .lang-opt:hover { background: rgba(111,75,246,0.07); color: var(--text); }
1912
- .lang-opt.active { color: var(--accent); font-weight: 700; }
1913
-
1914
- @media (max-width: 760px) {
1915
- .login-shell { display: block; }
1916
- .brand-preview { display: none; }
1917
- }
1918
-
1919
- /* ============================================================
1920
- ADMIN PAGE (admin.html)
1921
- ============================================================ */
1922
-
1923
- body.lattice-ref-admin {
1924
- --radius: 8px;
1925
- --radius-sm: 8px;
1926
- }
1927
-
1928
- * { box-sizing: border-box; }
1929
- html, body.lattice-ref-admin { height: 100%; }
1930
- body.lattice-ref-admin {
1931
- margin: 0;
1932
- font-family: Inter, -apple-system, BlinkMacSystemFont, sans-serif;
1933
- color: var(--text);
1934
- background:
1935
- radial-gradient(circle at 82% 12%, var(--border), transparent 30%),
1936
- radial-gradient(circle at 10% 80%, rgba(180,160,255,0.16), transparent 35%),
1937
- linear-gradient(180deg, var(--bg) 0%, var(--surface-2) 52%, #f2ecff 100%);
1938
- }
1939
-
1940
- body::before {
1941
- content: "";
1942
- position: fixed;
1943
- inset: 0;
1944
- pointer-events: none;
1945
- background:
1946
- radial-gradient(circle, rgba(111,66,232,0.18) 1px, transparent 1.9px);
1947
- background-size: 32px 32px;
1948
- background-position: 10px 10px;
1949
- mask-image: linear-gradient(180deg, rgba(0,0,0,0.3), rgba(0,0,0,0.06));
1950
- }
1951
-
1952
- .page {
1953
- position: relative;
1954
- z-index: 1;
1955
- min-height: 100%;
1956
- display: flex;
1957
- flex-direction: column;
1958
- }
1959
-
1960
- .topbar {
1961
- display: flex;
1962
- align-items: center;
1963
- justify-content: space-between;
1964
- gap: 16px;
1965
- padding: 22px 28px;
1966
- border-bottom: 1px solid rgba(111,66,232,0.10);
1967
- background: rgba(244,237,255,0.92);
1968
- backdrop-filter: blur(20px);
1969
- position: sticky;
1970
- top: 0;
1971
- z-index: 2;
1972
- }
1973
-
1974
- .brand {
1975
- display: flex;
1976
- align-items: center;
1977
- gap: 12px;
1978
- min-width: 0;
1979
- }
1980
-
1981
- .brand-mark {
1982
- width: 42px;
1983
- height: 42px;
1984
- border-radius: 12px;
1985
- background: radial-gradient(circle at 35% 30%, #ffffff 0 16%, #a77cff 17% 62%, #5b6cff 100%);
1986
- color: #171926;
1987
- display: grid;
1988
- place-items: center;
1989
- font-size: 20px;
1990
- font-weight: 800;
1991
- box-shadow: 0 12px 30px rgba(0,0,0,0.25);
1992
- flex: 0 0 auto;
1993
- }
1994
-
1995
- .brand h1 {
1996
- margin: 0;
1997
- font-size: 18px;
1998
- line-height: 1.15;
1999
- letter-spacing: 0;
2000
- }
2001
-
2002
- .brand p {
2003
- margin: 4px 0 0;
2004
- color: var(--muted);
2005
- font-size: 12px;
2006
- }
2007
-
2008
- .top-actions {
2009
- display: flex;
2010
- gap: 8px;
2011
- flex-wrap: wrap;
2012
- justify-content: flex-end;
2013
- }
2014
-
2015
- .btn {
2016
- border: 1px solid var(--border);
2017
- background: rgba(244,238,255,0.88);
2018
- color: var(--text);
2019
- border-radius: 8px;
2020
- padding: 10px 14px;
2021
- font: inherit;
2022
- font-size: 13px;
2023
- font-weight: 700;
2024
- cursor: pointer;
2025
- display: inline-flex;
2026
- align-items: center;
2027
- gap: 8px;
2028
- transition: all .15s ease;
2029
- text-decoration: none;
2030
- }
2031
-
2032
- .btn:hover {
2033
- border-color: rgba(111,66,232,0.32);
2034
- background: rgba(111,66,232,0.10);
2035
- color: var(--accent);
2036
- }
2037
-
2038
- .btn.primary {
2039
- background: var(--accent-soft);
2040
- border-color: rgba(111,66,232,0.28);
2041
- }
2042
-
2043
- .btn.danger:hover {
2044
- background: rgba(229,57,53,0.08);
2045
- border-color: rgba(229,57,53,0.22);
2046
- color: var(--danger);
2047
- }
2048
-
2049
- .content {
2050
- width: min(1440px, calc(100vw - 32px));
2051
- margin: 0 auto;
2052
- padding: 22px 0 28px;
2053
- display: flex;
2054
- flex-direction: column;
2055
- gap: 18px;
2056
- }
2057
-
2058
- .hero {
2059
- border: 1px solid var(--border);
2060
- border-radius: calc(var(--radius) + 2px);
2061
- background:
2062
- linear-gradient(135deg, rgba(111,66,232,0.10), rgba(248,243,255,0.92));
2063
- box-shadow: var(--shadow);
2064
- padding: 20px 22px;
2065
- display: flex;
2066
- align-items: center;
2067
- justify-content: space-between;
2068
- gap: 14px;
2069
- flex-wrap: wrap;
2070
- }
2071
-
2072
- .hero h2 {
2073
- margin: 0 0 6px;
2074
- font-size: 26px;
2075
- line-height: 1.15;
2076
- }
2077
-
2078
- .hero p {
2079
- margin: 0;
2080
- color: var(--muted);
2081
- font-size: 13px;
2082
- line-height: 1.5;
2083
- max-width: 760px;
2084
- }
2085
-
2086
- .session-card {
2087
- border: 1px solid rgba(111,66,232,0.18);
2088
- background: rgba(111,66,232,0.08);
2089
- color: var(--text);
2090
- border-radius: 12px;
2091
- padding: 12px 14px;
2092
- min-width: 280px;
2093
- }
2094
-
2095
- .session-card .label {
2096
- font-size: 11px;
2097
- text-transform: uppercase;
2098
- letter-spacing: 0.08em;
2099
- color: var(--faint);
2100
- margin-bottom: 6px;
2101
- }
2102
-
2103
- .session-card .value {
2104
- font-size: 13px;
2105
- font-weight: 700;
2106
- word-break: break-all;
2107
- }
2108
-
2109
- .notice {
2110
- border: 1px solid rgba(111,66,232,0.18);
2111
- background: rgba(111,66,232,0.07);
2112
- color: var(--muted);
2113
- border-radius: 12px;
2114
- padding: 12px 14px;
2115
- font-size: 13px;
2116
- line-height: 1.5;
2117
- }
2118
-
2119
- .summary-grid {
2120
- display: grid;
2121
- grid-template-columns: repeat(4, minmax(0, 1fr));
2122
- gap: 12px;
2123
- }
2124
-
2125
- .summary-card {
2126
- border: 1px solid var(--border);
2127
- border-radius: var(--radius);
2128
- background: rgba(248,243,255,0.90);
2129
- box-shadow: 0 8px 28px rgba(88,72,150,0.10);
2130
- padding: 16px 16px 15px;
2131
- min-width: 0;
2132
- }
2133
-
2134
- .summary-card .label {
2135
- color: var(--faint);
2136
- font-size: 11px;
2137
- font-weight: 700;
2138
- letter-spacing: 0.08em;
2139
- text-transform: uppercase;
2140
- margin-bottom: 8px;
2141
- }
2142
-
2143
- .summary-card .value {
2144
- font-size: 28px;
2145
- font-weight: 800;
2146
- line-height: 1;
2147
- }
2148
-
2149
- .summary-card .meta {
2150
- margin-top: 8px;
2151
- color: var(--muted);
2152
- font-size: 12px;
2153
- line-height: 1.45;
2154
- min-height: 2.7em;
2155
- }
2156
-
2157
- .panel-grid {
2158
- display: grid;
2159
- grid-template-columns: 1.1fr 0.9fr;
2160
- gap: 18px;
2161
- }
2162
-
2163
- .panel {
2164
- border: 1px solid var(--border);
2165
- border-radius: var(--radius);
2166
- background: rgba(248,243,255,0.90);
2167
- box-shadow: 0 8px 28px rgba(88,72,150,0.10);
2168
- overflow: hidden;
2169
- min-width: 0;
2170
- }
2171
-
2172
- .panel-header {
2173
- padding: 16px 18px;
2174
- border-bottom: 1px solid var(--border);
2175
- display: flex;
2176
- align-items: center;
2177
- justify-content: space-between;
2178
- gap: 12px;
2179
- }
2180
-
2181
- .panel-header h3 {
2182
- margin: 0;
2183
- font-size: 15px;
2184
- }
2185
-
2186
- .panel-header p {
2187
- margin: 4px 0 0;
2188
- color: var(--muted);
2189
- font-size: 12px;
2190
- line-height: 1.45;
2191
- }
2192
-
2193
- .lattice-ref-admin .panel-body {
2194
- padding: 16px 18px 18px;
2195
- }
2196
-
2197
- .lattice-ref-admin .chart-body {
2198
- padding: 16px 20px;
2199
- }
2200
-
2201
- .form-grid {
2202
- display: grid;
2203
- grid-template-columns: repeat(2, minmax(0, 1fr));
2204
- gap: 10px;
2205
- }
2206
-
2207
- .field {
2208
- display: flex;
2209
- flex-direction: column;
2210
- gap: 6px;
2211
- }
2212
-
2213
- .field.full { grid-column: 1 / -1; }
2214
-
2215
- label {
2216
- color: var(--muted);
2217
- font-size: 12px;
2218
- font-weight: 700;
2219
- }
2220
-
2221
- input, textarea {
2222
- width: 100%;
2223
- border: 1px solid var(--border);
2224
- background: rgba(255,255,255,0.80);
2225
- color: var(--text);
2226
- border-radius: 8px;
2227
- padding: 10px 12px;
2228
- font: inherit;
2229
- font-size: 13px;
2230
- outline: none;
2231
- }
2232
-
2233
- textarea {
2234
- min-height: 80px;
2235
- resize: vertical;
2236
- }
2237
-
2238
- input:focus, textarea:focus {
2239
- border-color: rgba(111,66,232,0.44);
2240
- box-shadow: 0 0 0 3px rgba(111,66,232,0.08);
2241
- }
2242
-
2243
- .toolbar {
2244
- display: flex;
2245
- align-items: center;
2246
- justify-content: space-between;
2247
- gap: 12px;
2248
- margin-top: 12px;
2249
- flex-wrap: wrap;
2250
- }
2251
-
2252
- .status-copy {
2253
- color: var(--muted);
2254
- font-size: 12px;
2255
- }
2256
-
2257
- .tag-row {
2258
- display: flex;
2259
- flex-wrap: wrap;
2260
- gap: 8px;
2261
- }
2262
-
2263
- .panel-tools {
2264
- display: flex;
2265
- align-items: flex-end;
2266
- justify-content: flex-end;
2267
- gap: 10px;
2268
- flex-wrap: wrap;
2269
- min-width: 260px;
2270
- }
2271
-
2272
- .export-control {
2273
- display: flex;
2274
- align-items: center;
2275
- justify-content: flex-end;
2276
- gap: 8px;
2277
- flex-wrap: wrap;
2278
- }
2279
-
2280
- .export-options {
2281
- display: none;
2282
- align-items: center;
2283
- gap: 6px;
2284
- flex-wrap: wrap;
2285
- }
2286
-
2287
- .export-options.open {
2288
- display: flex;
2289
- }
2290
-
2291
- .export-options .table-btn {
2292
- background: rgba(255,255,255,0.84);
2293
- white-space: nowrap;
2294
- }
2295
-
2296
- .tag {
2297
- display: inline-flex;
2298
- align-items: center;
2299
- gap: 6px;
2300
- padding: 5px 9px;
2301
- border-radius: 999px;
2302
- border: 1px solid var(--border);
2303
- background: rgba(255,255,255,0.60);
2304
- color: var(--muted);
2305
- font-size: 12px;
2306
- font-weight: 600;
2307
- }
2308
-
2309
- .tag.high { border-color: rgba(229,57,53,0.32); color: var(--danger); background: rgba(229,57,53,0.07); }
2310
- .tag.medium { border-color: rgba(216,165,74,0.34); color: #b07a00; background: rgba(216,165,74,0.08); }
2311
- .tag.low { border-color: rgba(34,196,160,0.34); color: #0d8f72; background: rgba(34,196,160,0.08); }
2312
-
2313
- .two-col {
2314
- display: grid;
2315
- grid-template-columns: repeat(2, minmax(0, 1fr));
2316
- gap: 12px;
2317
- }
2318
-
2319
- .audit-grid {
2320
- display: grid;
2321
- grid-template-columns: repeat(5, minmax(0, 1fr));
2322
- gap: 10px;
2323
- margin-bottom: 14px;
2324
- }
2325
-
2326
- .audit-metric {
2327
- border: 1px solid var(--border);
2328
- border-radius: 12px;
2329
- background: rgba(248,243,255,0.85);
2330
- padding: 12px;
2331
- min-width: 0;
2332
- }
2333
-
2334
- .audit-metric .label {
2335
- color: var(--faint);
2336
- font-size: 11px;
2337
- font-weight: 800;
2338
- letter-spacing: 0.06em;
2339
- text-transform: uppercase;
2340
- margin-bottom: 8px;
2341
- }
2342
-
2343
- .audit-metric .value {
2344
- font-size: 24px;
2345
- font-weight: 800;
2346
- line-height: 1;
2347
- }
2348
-
2349
- .audit-metric .meta {
2350
- color: var(--muted);
2351
- font-size: 12px;
2352
- margin-top: 7px;
2353
- line-height: 1.4;
2354
- }
2355
-
2356
- .subpanel {
2357
- border: 1px solid var(--border);
2358
- border-radius: 12px;
2359
- background: rgba(248,243,255,0.82);
2360
- padding: 14px;
2361
- min-width: 0;
2362
- }
2363
-
2364
- .subpanel h4 {
2365
- margin: 0 0 10px;
2366
- font-size: 13px;
2367
- display: flex;
2368
- align-items: center;
2369
- gap: 7px;
2370
- }
2371
-
2372
- .list {
2373
- display: flex;
2374
- flex-direction: column;
2375
- gap: 8px;
2376
- max-height: 320px;
2377
- overflow: auto;
2378
- }
2379
-
2380
- .item {
2381
- border: 1px solid var(--border);
2382
- border-radius: 10px;
2383
- background: rgba(255,255,255,0.72);
2384
- padding: 10px 11px;
2385
- }
2386
-
2387
- .item-meta {
2388
- display: flex;
2389
- flex-wrap: wrap;
2390
- gap: 6px;
2391
- margin-bottom: 6px;
2392
- }
2393
-
2394
- .preview {
2395
- color: var(--muted);
2396
- font-size: 12px;
2397
- line-height: 1.5;
2398
- word-break: break-word;
2399
- }
2400
-
2401
- .table-wrap {
2402
- overflow: auto;
2403
- border: 1px solid var(--border);
2404
- border-radius: 12px;
2405
- }
2406
-
2407
- table {
2408
- width: 100%;
2409
- border-collapse: collapse;
2410
- min-width: 820px;
2411
- background: transparent;
2412
- }
2413
-
2414
- th, td {
2415
- padding: 11px 10px;
2416
- border-bottom: 1px solid var(--border);
2417
- text-align: left;
2418
- vertical-align: middle;
2419
- font-size: 13px;
2420
- color: var(--text);
2421
- }
2422
-
2423
- th {
2424
- color: var(--muted);
2425
- background: rgba(111,66,232,0.05);
2426
- font-size: 12px;
2427
- letter-spacing: 0.02em;
2428
- }
2429
-
2430
- td .actions {
2431
- display: flex;
2432
- gap: 6px;
2433
- flex-wrap: wrap;
2434
- }
2435
-
2436
- .table-btn {
2437
- border: 1px solid rgba(111,66,232,0.15);
2438
- background: rgba(255,255,255,0.72);
2439
- color: var(--text);
2440
- border-radius: 8px;
2441
- padding: 7px 9px;
2442
- cursor: pointer;
2443
- font-size: 12px;
2444
- font-weight: 600;
2445
- }
2446
-
2447
- .table-btn:hover {
2448
- border-color: rgba(111,66,232,0.32);
2449
- background: rgba(111,66,232,0.08);
2450
- color: var(--accent);
2451
- }
2452
-
2453
- .table-btn.danger:hover {
2454
- border-color: rgba(229,57,53,0.24);
2455
- background: rgba(229,57,53,0.08);
2456
- color: var(--danger);
2457
- }
2458
-
2459
- .role {
2460
- display: inline-flex;
2461
- align-items: center;
2462
- padding: 4px 8px;
2463
- border-radius: 999px;
2464
- border: 1px solid var(--border);
2465
- color: var(--muted);
2466
- font-size: 12px;
2467
- font-weight: 700;
2468
- }
2469
-
2470
- .footer-space { height: 8px; }
2471
-
2472
- .muted {
2473
- color: var(--muted);
2474
- }
2475
-
2476
- .error {
2477
- color: var(--danger);
2478
- }
2479
-
2480
- @media (max-width: 1100px) {
2481
- .summary-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
2482
- .audit-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
2483
- .panel-grid { grid-template-columns: 1fr; }
2484
- }
2485
-
2486
- @media (max-width: 760px) {
2487
- .topbar, .content { width: auto; }
2488
- .topbar {
2489
- padding: 16px;
2490
- align-items: flex-start;
2491
- flex-direction: column;
2492
- }
2493
- .content { padding: 16px; gap: 14px; }
2494
- .hero h2 { font-size: 22px; }
2495
- .summary-grid { grid-template-columns: 1fr; }
2496
- .audit-grid { grid-template-columns: 1fr; }
2497
- .two-col, .form-grid { grid-template-columns: 1fr; }
2498
- .field.full { grid-column: auto; }
2499
- .panel-header { align-items: stretch; flex-direction: column; }
2500
- .panel-tools,
2501
- .export-control { align-items: stretch; justify-content: flex-start; min-width: 0; }
2502
- .lattice-ref-admin .inline-control,
2503
- .lattice-ref-admin .button-row { align-items: stretch; flex-direction: column; }
2504
- }
2505
-
2506
- .lang-picker { position: relative; }
2507
- .lang-picker-menu {
2508
- display: none;
2509
- position: absolute;
2510
- top: calc(100% + 6px);
2511
- right: 0;
2512
- background: rgba(247,242,255,0.98);
2513
- border: 1px solid var(--border);
2514
- border-radius: 8px;
2515
- padding: 4px;
2516
- min-width: 130px;
2517
- z-index: 100;
2518
- box-shadow: 0 8px 24px rgba(88,72,150,0.16);
2519
- }
2520
- .lang-picker-menu.open { display: block; }
2521
- .lang-option {
2522
- padding: 7px 10px;
2523
- border-radius: 7px;
2524
- cursor: pointer;
2525
- font-size: 13px;
2526
- color: var(--text);
2527
- }
2528
- .lang-option:hover { background: rgba(111,66,232,0.07); color: var(--text); }
2529
- .lang-option.active { color: var(--accent); font-weight: 600; }
2530
-
2531
- /* ============================================================
2532
- GRAPH PAGE (graph.html)
2533
- ============================================================ */
2534
- * { box-sizing: border-box; }
2535
- html, body.lattice-ref-graph { height: 100%; }
2536
- body.lattice-ref-graph {
2537
- margin: 0;
2538
- overflow: hidden;
2539
- color: var(--text);
2540
- background: var(--app-bg);
2541
- font-family: "SF Pro Display", "Inter", ui-sans-serif, system-ui, -apple-system, sans-serif;
2542
- }
2543
-
2544
- body.lattice-ref-graph .app {
2545
- min-height: 0;
2546
- height: 100dvh;
2547
- overflow: hidden;
2548
- }
2549
-
2550
- body.lattice-ref-graph .stage {
2551
- height: calc(100dvh - 138px);
2552
- max-height: calc(100dvh - 138px);
2553
- min-height: 0;
2554
- }
2555
-
2556
- body.lattice-ref-graph .app > aside:not(.reference-rail) {
2557
- height: calc(100dvh - 138px);
2558
- max-height: calc(100dvh - 138px);
2559
- min-height: 0;
2560
- overflow-y: auto;
2561
- overscroll-behavior: contain;
2562
- padding-bottom: max(28px, env(safe-area-inset-bottom));
2563
- scrollbar-gutter: stable;
2564
- }
2565
-
2566
- .app {
2567
- display: grid;
2568
- grid-template-columns: minmax(0, 1fr) 360px;
2569
- height: 100vh;
2570
- }
2571
-
2572
- .stage {
2573
- position: relative;
2574
- min-width: 0;
2575
- border-right: 1px solid var(--line);
2576
- background:
2577
- radial-gradient(circle, rgba(111,66,232,0.18) 1px, transparent 1.9px),
2578
- linear-gradient(116deg, transparent 0 43%, rgba(111,66,232,0.05) 43.1%, transparent 43.28% 100%),
2579
- linear-gradient(28deg, transparent 0 61%, rgba(180,160,255,0.07) 61.1%, transparent 61.28% 100%);
2580
- background-size: 32px 32px, 100% 100%, 100% 100%;
2581
- background-position: 10px 10px, 0 0, 0 0;
2582
- }
2583
-
2584
- canvas {
2585
- display: block;
2586
- width: 100%;
2587
- height: 100%;
2588
- cursor: grab;
2589
- }
2590
-
2591
- canvas.panning { cursor: grabbing; }
2592
-
2593
- .search-shell,
2594
- .toolbar {
2595
- position: absolute;
2596
- z-index: 20;
2597
- border: 1px solid var(--line);
2598
- background: var(--panel);
2599
- backdrop-filter: blur(18px);
2600
- box-shadow: var(--shadow);
2601
- }
2602
-
2603
- .search-shell {
2604
- top: 16px;
2605
- left: 16px;
2606
- width: min(360px, calc(100% - 32px));
2607
- border-radius: 10px;
2608
- overflow: hidden;
2609
- }
2610
-
2611
- .search-head {
2612
- display: flex;
2613
- align-items: center;
2614
- justify-content: space-between;
2615
- gap: 12px;
2616
- padding: 14px 16px 10px;
2617
- border-bottom: 1px solid rgba(111,66,232,0.10);
2618
- }
2619
-
2620
- .search-title {
2621
- display: flex;
2622
- flex-direction: column;
2623
- gap: 3px;
2624
- }
2625
-
2626
- .search-title strong {
2627
- font-size: 14px;
2628
- font-weight: 700;
2629
- letter-spacing: 0.01em;
2630
- }
2631
-
2632
- .search-title span {
2633
- font-size: 12px;
2634
- color: var(--muted);
2635
- }
2636
-
2637
- .search-count {
2638
- flex-shrink: 0;
2639
- font-size: 11px;
2640
- color: #fff;
2641
- background: linear-gradient(135deg, var(--accent), #9a78f0);
2642
- border-radius: 999px;
2643
- padding: 5px 10px;
2644
- font-weight: 700;
2645
- }
2646
-
2647
- .search-input-wrap {
2648
- padding: 12px 16px 10px;
2649
- }
2650
-
2651
- .search-input-row {
2652
- display: flex;
2653
- gap: 8px;
2654
- align-items: center;
2655
- }
2656
-
2657
- .search-input {
2658
- flex: 1;
2659
- height: 42px;
2660
- border-radius: 12px;
2661
- border: 1px solid var(--line-strong);
2662
- background: rgba(255,255,255,0.80);
2663
- color: var(--text);
2664
- padding: 0 14px;
2665
- font-size: 14px;
2666
- outline: none;
2667
- }
2668
-
2669
- .search-input:focus {
2670
- border-color: rgba(111,66,232,0.55);
2671
- box-shadow: 0 0 0 4px rgba(111,66,232,0.09);
2672
- }
2673
-
2674
- .icon-btn,
2675
- .tb-btn {
2676
- height: 42px;
2677
- border-radius: 8px;
2678
- border: 1px solid var(--line-strong);
2679
- background: rgba(255,255,255,0.80);
2680
- color: var(--text);
2681
- cursor: pointer;
2682
- font-size: 13px;
2683
- transition: 140ms ease;
2684
- }
2685
-
2686
- .icon-btn {
2687
- width: 42px;
2688
- flex-shrink: 0;
2689
- font-size: 16px;
2690
- }
2691
-
2692
- .icon-btn:hover,
2693
- .tb-btn:hover {
2694
- transform: translateY(-1px);
2695
- border-color: rgba(111,66,232,0.45);
2696
- color: var(--accent);
2697
- background: rgba(111,66,232,0.07);
2698
- }
2699
-
2700
- .search-results {
2701
- max-height: min(420px, calc(100vh - 180px));
2702
- overflow-y: auto;
2703
- padding: 0 8px 10px;
2704
- }
2705
-
2706
- .search-empty,
2707
- .search-loading {
2708
- margin: 0;
2709
- padding: 14px 12px 16px;
2710
- color: var(--muted);
2711
- font-size: 13px;
2712
- line-height: 1.65;
2713
- }
2714
-
2715
- .search-list {
2716
- display: flex;
2717
- flex-direction: column;
2718
- gap: 8px;
2719
- padding: 0 8px 8px;
2720
- }
2721
-
2722
- .search-item {
2723
- width: 100%;
2724
- text-align: left;
2725
- border: 1px solid rgba(111,66,232,0.10);
2726
- border-radius: 8px;
2727
- background: rgba(255,255,255,0.72);
2728
- color: var(--text);
2729
- padding: 12px 12px 13px;
2730
- cursor: pointer;
2731
- transition: 140ms ease;
2732
- }
2733
-
2734
- .search-item:hover,
2735
- .search-item.active {
2736
- border-color: rgba(111,66,232,0.34);
2737
- background: rgba(111,66,232,0.07);
2738
- transform: translateY(-1px);
2739
- }
2740
-
2741
- .search-item-top {
2742
- display: flex;
2743
- align-items: center;
2744
- gap: 8px;
2745
- margin-bottom: 6px;
2746
- }
2747
-
2748
- .search-type {
2749
- display: inline-flex;
2750
- align-items: center;
2751
- border-radius: 999px;
2752
- padding: 4px 10px;
2753
- font-size: 11px;
2754
- font-weight: 700;
2755
- color: #091019;
2756
- }
2757
-
2758
- .search-item-title {
2759
- font-size: 13px;
2760
- font-weight: 700;
2761
- letter-spacing: 0.01em;
2762
- color: var(--text);
2763
- }
2764
-
2765
- .search-item-summary {
2766
- font-size: 12px;
2767
- color: var(--muted);
2768
- line-height: 1.55;
2769
- margin: 0 0 8px;
2770
- word-break: break-word;
2771
- display: -webkit-box;
2772
- -webkit-line-clamp: 3;
2773
- line-clamp: 3;
2774
- -webkit-box-orient: vertical;
2775
- overflow: hidden;
2776
- }
2777
-
2778
- .search-item-meta {
2779
- font-size: 11px;
2780
- color: var(--faint);
2781
- display: flex;
2782
- gap: 10px;
2783
- flex-wrap: wrap;
2784
- }
2785
-
2786
- .toolbar {
2787
- top: 16px;
2788
- right: 16px;
2789
- display: flex;
2790
- flex-wrap: wrap;
2791
- gap: 8px;
2792
- padding: 8px;
2793
- border-radius: 10px;
2794
- max-width: min(760px, calc(100% - 32px));
2795
- }
2796
-
2797
- .tb-btn {
2798
- padding: 0 14px;
2799
- min-width: 72px;
2800
- white-space: nowrap;
2801
- }
2802
-
2803
- #tooltip {
2804
- position: fixed;
2805
- z-index: 50;
2806
- max-width: 300px;
2807
- padding: 8px 11px;
2808
- border-radius: 10px;
2809
- border: 1px solid rgba(111,66,232,0.18);
2810
- background: rgba(255,255,255,0.96);
2811
- color: var(--text);
2812
- box-shadow: var(--shadow);
2813
- font-size: 12px;
2814
- line-height: 1.45;
2815
- pointer-events: none;
2816
- display: none;
2817
- word-break: break-word;
2818
- }
2819
-
2820
- aside {
2821
- display: flex;
2822
- flex-direction: column;
2823
- background: rgba(248, 244, 255, 0.96);
2824
- border-left: 1px solid var(--accent-soft);
2825
- overflow: hidden;
2826
- }
2827
-
2828
- .sidebar-head {
2829
- padding: 18px 18px 12px;
2830
- border-bottom: 1px solid rgba(111,66,232,0.10);
2831
- }
2832
-
2833
- .eyebrow {
2834
- color: var(--accent);
2835
- font-size: 11px;
2836
- font-weight: 700;
2837
- letter-spacing: 0.12em;
2838
- text-transform: uppercase;
2839
- margin-bottom: 8px;
2840
- }
2841
-
2842
- h1 {
2843
- margin: 0;
2844
- font-size: 22px;
2845
- line-height: 1.1;
2846
- letter-spacing: -0.02em;
2847
- }
2848
-
2849
- .sidebar-sub {
2850
- margin: 10px 0 0;
2851
- color: var(--muted);
2852
- font-size: 13px;
2853
- line-height: 1.65;
2854
- }
2855
-
2856
- .stats-row {
2857
- display: grid;
2858
- grid-template-columns: 1fr 1fr;
2859
- gap: 10px;
2860
- margin-top: 14px;
2861
- }
2862
-
2863
- .stat {
2864
- border: 1px solid rgba(111,66,232,0.16);
2865
- border-radius: 8px;
2866
- background: rgba(255,255,255,0.80);
2867
- padding: 12px 13px;
2868
- color: var(--text);
2869
- }
2870
-
2871
- .stat strong {
2872
- display: block;
2873
- font-size: 24px;
2874
- line-height: 1;
2875
- margin-bottom: 5px;
2876
- }
2877
-
2878
- .stat span {
2879
- display: block;
2880
- font-size: 11px;
2881
- color: var(--muted);
2882
- text-transform: uppercase;
2883
- letter-spacing: 0.08em;
2884
- }
2885
-
2886
- .section {
2887
- padding: 16px 18px 14px;
2888
- flex-shrink: 0;
2889
- }
2890
-
2891
- .section-label {
2892
- color: var(--accent);
2893
- font-size: 11px;
2894
- text-transform: uppercase;
2895
- letter-spacing: 0.08em;
2896
- font-weight: 700;
2897
- margin-bottom: 10px;
2898
- }
2899
-
2900
- .legend-grid,
2901
- .filter-grid {
2902
- display: flex;
2903
- flex-direction: column;
2904
- gap: 7px;
2905
- }
2906
-
2907
- .local-source-panel {
2908
- display: flex;
2909
- flex-direction: column;
2910
- gap: 10px;
2911
- }
2912
-
2913
- .local-source-notice {
2914
- border: 1px solid rgba(13,148,136,0.20);
2915
- border-radius: 8px;
2916
- background: rgba(13,148,136,0.07);
2917
- color: #21514b;
2918
- padding: 9px 10px;
2919
- font-size: 12px;
2920
- line-height: 1.5;
2921
- }
2922
-
2923
- .local-source-input {
2924
- display: flex;
2925
- gap: 8px;
2926
- align-items: center;
2927
- }
2928
-
2929
- .local-source-input input {
2930
- min-width: 0;
2931
- flex: 1;
2932
- height: 38px;
2933
- border-radius: 8px;
2934
- border: 1px solid rgba(111,66,232,0.16);
2935
- background: #fff;
2936
- color: var(--text);
2937
- padding: 0 10px;
2938
- font-size: 12px;
2939
- outline: none;
2940
- }
2941
-
2942
- .local-source-input input:focus {
2943
- border-color: rgba(111,66,232,0.42);
2944
- box-shadow: 0 0 0 3px rgba(111,66,232,0.08);
2945
- }
2946
-
2947
- .local-root-list,
2948
- .local-tree-list,
2949
- .local-source-list {
2950
- display: flex;
2951
- flex-direction: column;
2952
- gap: 6px;
2953
- max-height: min(150px, 22dvh);
2954
- overflow-y: auto;
2955
- padding-right: 2px;
2956
- }
2957
-
2958
- .local-root-btn,
2959
- .local-tree-row,
2960
- .local-source-row {
2961
- width: 100%;
2962
- border: 1px solid rgba(111,66,232,0.13);
2963
- border-radius: 8px;
2964
- background: rgba(255,255,255,0.80);
2965
- color: var(--text);
2966
- padding: 8px 9px;
2967
- display: grid;
2968
- grid-template-columns: 18px minmax(0, 1fr) auto;
2969
- gap: 8px;
2970
- align-items: center;
2971
- text-align: left;
2972
- font-size: 12px;
2973
- }
2974
-
2975
- .local-root-btn {
2976
- cursor: pointer;
2977
- }
2978
-
2979
- .local-root-btn:hover,
2980
- .local-root-btn.active {
2981
- border-color: rgba(111,66,232,0.34);
2982
- background: rgba(111,66,232,0.07);
2983
- }
2984
-
2985
- .local-source-main,
2986
- .local-tree-main {
2987
- min-width: 0;
2988
- }
2989
-
2990
- .local-source-main strong,
2991
- .local-tree-main strong {
2992
- display: block;
2993
- font-size: 12px;
2994
- line-height: 1.25;
2995
- overflow: hidden;
2996
- text-overflow: ellipsis;
2997
- white-space: nowrap;
2998
- }
2999
-
3000
- .local-source-main span,
3001
- .local-tree-main span {
3002
- display: block;
3003
- color: var(--faint);
3004
- font-size: 11px;
3005
- line-height: 1.35;
3006
- overflow: hidden;
3007
- text-overflow: ellipsis;
3008
- white-space: nowrap;
3009
- }
3010
-
3011
- .local-source-actions {
3012
- display: grid;
3013
- grid-template-columns: repeat(2, minmax(0, 1fr));
3014
- gap: 7px;
3015
- }
3016
-
3017
- .local-source-btn {
3018
- min-width: 0;
3019
- height: 36px;
3020
- border: 1px solid rgba(111,66,232,0.18);
3021
- border-radius: 8px;
3022
- background: #fff;
3023
- color: var(--text);
3024
- cursor: pointer;
3025
- display: inline-flex;
3026
- align-items: center;
3027
- justify-content: center;
3028
- gap: 6px;
3029
- font-size: 12px;
3030
- font-weight: 650;
3031
- }
3032
-
3033
- .local-source-btn:hover {
3034
- border-color: rgba(111,66,232,0.42);
3035
- color: var(--accent);
3036
- background: rgba(111,66,232,0.07);
3037
- }
3038
-
3039
- .local-source-btn.primary {
3040
- grid-column: 1 / -1;
3041
- background: linear-gradient(135deg, var(--accent), #7b61ff);
3042
- color: #fff;
3043
- border-color: rgba(111,66,232,0.3);
3044
- }
3045
-
3046
- .local-source-btn.primary:hover {
3047
- color: #fff;
3048
- background: linear-gradient(135deg, #5f35d8, #6b51ef);
3049
- box-shadow: 0 8px 20px rgba(111,66,232,0.22);
3050
- }
3051
-
3052
- .local-source-btn:disabled {
3053
- cursor: not-allowed;
3054
- opacity: 0.55;
3055
- transform: none;
3056
- }
3057
-
3058
- .local-option-row {
3059
- display: grid;
3060
- grid-template-columns: repeat(2, minmax(0, 1fr));
3061
- gap: 7px;
3062
- }
3063
-
3064
- .local-option-btn {
3065
- min-width: 0;
3066
- height: 36px;
3067
- border: 1px solid rgba(111,66,232,0.18);
3068
- border-radius: 8px;
3069
- background: #fff;
3070
- color: var(--muted);
3071
- cursor: pointer;
3072
- display: inline-flex;
3073
- align-items: center;
3074
- justify-content: center;
3075
- gap: 6px;
3076
- padding: 0 9px;
3077
- font-size: 12px;
3078
- font-weight: 650;
3079
- line-height: 1;
3080
- text-align: center;
3081
- white-space: nowrap;
3082
- }
3083
-
3084
- .local-option-btn span {
3085
- min-width: 0;
3086
- overflow: hidden;
3087
- text-overflow: ellipsis;
3088
- white-space: nowrap;
3089
- }
3090
-
3091
- .local-option-btn:hover {
3092
- border-color: rgba(111,66,232,0.42);
3093
- color: var(--accent);
3094
- background: rgba(111,66,232,0.07);
3095
- }
3096
-
3097
- .local-option-btn.active {
3098
- border-color: rgba(111,66,232,0.48);
3099
- background: rgba(111,66,232,0.11);
3100
- color: var(--accent);
3101
- box-shadow: inset 0 0 0 1px var(--accent-soft);
3102
- }
3103
-
3104
- .local-audit-grid {
3105
- display: grid;
3106
- grid-template-columns: repeat(3, minmax(0, 1fr));
3107
- gap: 6px;
3108
- }
3109
-
3110
- .local-audit-stat {
3111
- border: 1px solid rgba(111,66,232,0.13);
3112
- border-radius: 8px;
3113
- background: rgba(255,255,255,0.78);
3114
- padding: 8px 7px;
3115
- min-width: 0;
3116
- }
3117
-
3118
- .local-audit-stat strong {
3119
- display: block;
3120
- font-size: 15px;
3121
- line-height: 1.05;
3122
- }
3123
-
3124
- .local-audit-stat span {
3125
- display: block;
3126
- margin-top: 4px;
3127
- color: var(--faint);
3128
- font-size: 10px;
3129
- line-height: 1.2;
3130
- }
3131
-
3132
- .local-status-line {
3133
- color: var(--muted);
3134
- font-size: 12px;
3135
- line-height: 1.45;
3136
- word-break: break-word;
3137
- }
3138
-
3139
- .local-status-line.error {
3140
- color: #a53131;
3141
- }
3142
-
3143
- .local-permission {
3144
- border: 1px solid rgba(245,158,11,0.28);
3145
- background: rgba(245,158,11,0.09);
3146
- border-radius: 8px;
3147
- padding: 9px;
3148
- display: flex;
3149
- flex-direction: column;
3150
- gap: 8px;
3151
- }
3152
-
3153
- .legend-item,
3154
- .filter-item {
3155
- display: flex;
3156
- align-items: center;
3157
- gap: 9px;
3158
- min-height: 26px;
3159
- font-size: 12px;
3160
- min-width: 0;
3161
- }
3162
-
3163
- .filter-item {
3164
- cursor: pointer;
3165
- user-select: none;
3166
- }
3167
-
3168
- .filter-item input[type="checkbox"] {
3169
- width: 14px;
3170
- height: 14px;
3171
- margin: 0;
3172
- accent-color: var(--accent);
3173
- cursor: pointer;
3174
- }
3175
-
3176
- .dot {
3177
- width: 10px;
3178
- height: 10px;
3179
- border-radius: 50%;
3180
- flex-shrink: 0;
3181
- box-shadow: 0 0 0 3px rgba(111,66,232,0.08);
3182
- }
3183
-
3184
- .legend-line {
3185
- width: 18px;
3186
- height: 0;
3187
- border-top: 2px solid currentColor;
3188
- opacity: 0.8;
3189
- flex-shrink: 0;
3190
- }
3191
-
3192
- .filter-name,
3193
- .legend-name {
3194
- flex: 1;
3195
- min-width: 0;
3196
- color: var(--text);
3197
- font-size: 13px;
3198
- font-weight: 500;
3199
- overflow-wrap: anywhere;
3200
- }
3201
-
3202
- .filter-count,
3203
- .legend-meta {
3204
- color: var(--muted);
3205
- font-size: 12px;
3206
- font-weight: 600;
3207
- text-align: right;
3208
- white-space: nowrap;
3209
- }
3210
-
3211
- .detail-wrap {
3212
- flex: 0 0 auto;
3213
- min-height: auto;
3214
- overflow: visible;
3215
- padding: 18px 18px max(24px, env(safe-area-inset-bottom));
3216
- }
3217
-
3218
- .type-badge {
3219
- display: inline-flex;
3220
- align-items: center;
3221
- border-radius: 999px;
3222
- padding: 5px 11px;
3223
- font-size: 11px;
3224
- font-weight: 700;
3225
- color: #091019;
3226
- margin-bottom: 10px;
3227
- }
3228
-
3229
- .detail-title {
3230
- font-size: 19px;
3231
- line-height: 1.28;
3232
- font-weight: 750;
3233
- margin-bottom: 8px;
3234
- letter-spacing: -0.01em;
3235
- overflow-wrap: anywhere;
3236
- }
3237
-
3238
- .detail-summary {
3239
- color: var(--muted);
3240
- font-size: 13px;
3241
- line-height: 1.7;
3242
- white-space: pre-wrap;
3243
- word-break: break-word;
3244
- margin-bottom: 14px;
3245
- }
3246
-
3247
- .metric-grid {
3248
- display: grid;
3249
- grid-template-columns: repeat(2, minmax(0, 1fr));
3250
- gap: 10px;
3251
- margin-bottom: 14px;
3252
- }
3253
-
3254
- .metric-card {
3255
- border: 1px solid var(--border);
3256
- border-radius: 8px;
3257
- padding: 11px 12px;
3258
- background: rgba(255,255,255,0.82);
3259
- color: var(--text);
3260
- }
3261
-
3262
- .metric-card strong {
3263
- display: block;
3264
- font-size: 18px;
3265
- line-height: 1;
3266
- margin-bottom: 5px;
3267
- }
3268
-
3269
- .metric-card span {
3270
- display: block;
3271
- font-size: 11px;
3272
- color: var(--muted);
3273
- text-transform: uppercase;
3274
- letter-spacing: 0.08em;
3275
- }
3276
-
3277
- .meta-block {
3278
- border: 1px solid var(--accent-soft);
3279
- border-radius: 8px;
3280
- background: rgba(255,255,255,0.74);
3281
- padding: 12px;
3282
- color: var(--muted);
3283
- font-size: 12px;
3284
- line-height: 1.65;
3285
- white-space: pre-wrap;
3286
- word-break: break-word;
3287
- overflow-wrap: anywhere;
3288
- max-height: min(42dvh, 460px);
3289
- overflow: auto;
3290
- }
3291
-
3292
- .jump-btn {
3293
- display: inline-flex;
3294
- align-items: center;
3295
- gap: 6px;
3296
- margin: 0 0 14px;
3297
- padding: 8px 14px;
3298
- border-radius: 999px;
3299
- text-decoration: none;
3300
- font-size: 12px;
3301
- font-weight: 700;
3302
- color: #fff;
3303
- background: linear-gradient(135deg, var(--accent), var(--accent-2));
3304
- box-shadow: 0 8px 22px rgba(111,66,232,0.22);
3305
- }
3306
-
3307
- .jump-btn:hover { filter: brightness(1.04); }
3308
-
3309
- .jump-btn.secondary {
3310
- border: 1px solid rgba(111,66,232,0.20);
3311
- color: var(--text);
3312
- background: rgba(255,255,255,0.82);
3313
- box-shadow: none;
3314
- cursor: pointer;
3315
- font: inherit;
3316
- font-size: 12px;
3317
- font-weight: 700;
3318
- }
3319
-
3320
- .detail-actions {
3321
- display: flex;
3322
- flex-wrap: wrap;
3323
- gap: 8px;
3324
- margin-bottom: 14px;
3325
- }
3326
-
3327
- .related-node-list {
3328
- display: grid;
3329
- gap: 7px;
3330
- margin-bottom: 14px;
3331
- }
3332
-
3333
- .related-node-btn {
3334
- width: 100%;
3335
- min-width: 0;
3336
- display: grid;
3337
- grid-template-columns: 18px minmax(0, 1fr) auto;
3338
- align-items: center;
3339
- gap: 8px;
3340
- border: 1px solid rgba(111,66,232,0.13);
3341
- border-radius: 8px;
3342
- background: rgba(255,255,255,0.76);
3343
- color: var(--text);
3344
- padding: 8px 10px;
3345
- text-align: left;
3346
- cursor: pointer;
3347
- }
3348
-
3349
- .related-node-btn:hover {
3350
- border-color: rgba(111,66,232,0.34);
3351
- background: rgba(111,66,232,0.07);
3352
- }
3353
-
3354
- .related-node-btn strong {
3355
- min-width: 0;
3356
- overflow: hidden;
3357
- text-overflow: ellipsis;
3358
- white-space: nowrap;
3359
- font-size: 12px;
3360
- }
3361
-
3362
- .related-node-btn em {
3363
- color: var(--faint);
3364
- font-size: 11px;
3365
- font-style: normal;
3366
- white-space: nowrap;
3367
- }
3368
-
3369
- .focus-chip {
3370
- position: absolute;
3371
- z-index: 21;
3372
- left: 16px;
3373
- bottom: 16px;
3374
- max-width: min(560px, calc(100% - 32px));
3375
- display: flex;
3376
- flex-wrap: wrap;
3377
- gap: 8px;
3378
- padding: 8px;
3379
- border: 1px solid var(--line);
3380
- border-radius: 10px;
3381
- background: rgba(255,255,255,0.90);
3382
- box-shadow: var(--shadow);
3383
- backdrop-filter: blur(18px);
3384
- }
3385
-
3386
- .focus-chip span {
3387
- display: inline-flex;
3388
- align-items: center;
3389
- gap: 6px;
3390
- border-radius: 999px;
3391
- background: rgba(111,66,232,0.08);
3392
- color: var(--text);
3393
- padding: 5px 10px;
3394
- font-size: 11px;
3395
- font-weight: 800;
3396
- max-width: 260px;
3397
- overflow: hidden;
3398
- text-overflow: ellipsis;
3399
- white-space: nowrap;
3400
- }
3401
-
3402
- .search-shell.search-open .search-results {
3403
- display: block;
3404
- }
3405
-
3406
- .empty-hint {
3407
- margin: 0;
3408
- color: var(--muted);
3409
- font-size: 13px;
3410
- line-height: 1.8;
3411
- }
3412
-
3413
- @media (max-width: 900px) {
3414
- body.lattice-ref-graph {
3415
- overflow-y: auto;
3416
- }
3417
-
3418
- body.lattice-ref-graph .reference-rail {
3419
- display: none;
3420
- }
3421
-
3422
- body.lattice-ref-graph {
3423
- grid-template-columns: 1fr;
3424
- }
3425
-
3426
- body.lattice-ref-graph .app {
3427
- height: auto;
3428
- min-height: 100dvh;
3429
- overflow: visible;
3430
- grid-template-columns: 1fr;
3431
- grid-template-rows: minmax(420px, 58dvh) auto;
3432
- }
3433
-
3434
- body.lattice-ref-graph .stage {
3435
- height: auto;
3436
- max-height: none;
3437
- min-height: 420px;
3438
- margin: 84px 12px 12px;
3439
- }
3440
-
3441
- body.lattice-ref-graph .stage::before {
3442
- top: 26px;
3443
- left: 58px;
3444
- font-size: 24px;
3445
- }
3446
-
3447
- body.lattice-ref-graph .stage::after {
3448
- top: 22px;
3449
- left: 14px;
3450
- }
3451
-
3452
- body.lattice-ref-graph .search-shell {
3453
- top: -60px;
3454
- left: 60px;
3455
- right: 12px;
3456
- width: auto;
3457
- }
3458
-
3459
- body.lattice-ref-graph .app > aside:not(.reference-rail) {
3460
- height: auto;
3461
- max-height: none;
3462
- min-height: 0;
3463
- margin: 0 12px 24px;
3464
- overflow: visible;
3465
- padding-bottom: max(18px, env(safe-area-inset-bottom));
3466
- }
3467
-
3468
- body.lattice-ref-graph .detail-wrap {
3469
- flex: none;
3470
- overflow: visible;
3471
- }
3472
-
3473
- .app {
3474
- grid-template-columns: 1fr;
3475
- grid-template-rows: 1fr 360px;
3476
- }
3477
-
3478
- .stage {
3479
- border-right: 0;
3480
- border-bottom: 1px solid var(--line);
3481
- }
3482
-
3483
- .search-shell {
3484
- width: calc(100% - 32px);
3485
- }
3486
-
3487
- .toolbar {
3488
- top: auto;
3489
- bottom: 16px;
3490
- right: 16px;
3491
- }
3492
- }
3493
-
1
+ /* Lattice AI — chat workspace (chat.html, body.lattice-ref-chat): shell, sidebar, header, input, cards, modals, drawers, panels, onboarding. Token-native. */
3494
2
  /* ============================================================
3495
3
  CHAT PAGE (chat.html)
3496
4
  ============================================================ */
@@ -3514,7 +22,7 @@
3514
22
  background:
3515
23
  radial-gradient(circle at 82% 12%, var(--border), transparent 30%),
3516
24
  radial-gradient(circle at 10% 80%, rgba(180,160,255,0.16), transparent 35%),
3517
- linear-gradient(180deg, var(--bg) 0%, var(--surface-2) 52%, #f2ecff 100%);
25
+ linear-gradient(180deg, var(--bg) 0%, var(--surface-2) 52%, var(--surface) 100%);
3518
26
  }
3519
27
 
3520
28
  .bg-shapes {
@@ -3556,8 +64,8 @@
3556
64
  z-index: 0;
3557
65
  opacity: 0.05;
3558
66
  background-image:
3559
- linear-gradient(rgba(255,255,255,0.5) 1px, transparent 1px),
3560
- linear-gradient(90deg, rgba(255,255,255,0.5) 1px, transparent 1px);
67
+ linear-gradient(var(--line) 1px, transparent 1px),
68
+ linear-gradient(90deg, var(--line) 1px, transparent 1px);
3561
69
  background-size: 48px 48px;
3562
70
  }
3563
71
  .app-layout, .auth-overlay { position: relative; z-index: 1; }
@@ -3571,7 +79,7 @@
3571
79
  /* ── 사이드바 ── */
3572
80
  .sidebar {
3573
81
  width: 268px;
3574
- background: rgba(244,237,255,0.96);
82
+ background: var(--sidebar);
3575
83
  border-right: 1px solid rgba(111,66,232,0.13);
3576
84
  display: flex;
3577
85
  flex-direction: column;
@@ -3644,7 +152,7 @@
3644
152
  .sidebar-search input {
3645
153
  width: 100%;
3646
154
  padding: 7px 10px 7px 30px;
3647
- background: rgba(255,255,255,0.60);
155
+ background: var(--input);
3648
156
  border: 1px solid var(--border);
3649
157
  border-radius: 8px;
3650
158
  color: var(--text);
@@ -3754,7 +262,7 @@
3754
262
  width: 100%;
3755
263
  padding: 11px 12px;
3756
264
  border-radius: var(--radius-sm);
3757
- background: rgba(244,238,255,0.88);
265
+ background: var(--surface-2);
3758
266
  border: 1px solid rgba(111,66,232,0.20);
3759
267
  color: var(--text);
3760
268
  cursor: pointer;
@@ -3836,7 +344,7 @@
3836
344
  gap: 12px;
3837
345
  padding: 10px 22px;
3838
346
  border-bottom: 1px solid rgba(111,66,232,0.10);
3839
- background: rgba(244,238,255,0.92);
347
+ background: var(--sidebar);
3840
348
  backdrop-filter: blur(20px);
3841
349
  -webkit-backdrop-filter: blur(20px);
3842
350
  position: relative;
@@ -3869,7 +377,7 @@
3869
377
  align-items: center;
3870
378
  gap: 6px;
3871
379
  border: 1px solid var(--border);
3872
- background: rgba(255,255,255,0.60);
380
+ background: var(--surface-2);
3873
381
  border-radius: 999px;
3874
382
  padding: 5px 11px;
3875
383
  font-size: 11.5px;
@@ -3910,7 +418,7 @@
3910
418
  .logout-btn:hover {
3911
419
  color: var(--text);
3912
420
  border-color: rgba(255,255,255,0.08);
3913
- background: rgba(255,255,255,0.60);
421
+ background: var(--surface-2);
3914
422
  }
3915
423
 
3916
424
  .acct-modal-overlay {
@@ -3918,7 +426,7 @@
3918
426
  position: fixed;
3919
427
  inset: 0;
3920
428
  background: rgba(111,66,232,0.18);
3921
- backdrop-filter: blur(4px);
429
+ backdrop-filter: none;
3922
430
  z-index: 1000;
3923
431
  align-items: center;
3924
432
  justify-content: center;
@@ -3931,14 +439,14 @@
3931
439
  position: fixed;
3932
440
  inset: 0;
3933
441
  background: rgba(111,66,232,0.18);
3934
- backdrop-filter: blur(4px);
442
+ backdrop-filter: none;
3935
443
  z-index: 1000;
3936
444
  align-items: center;
3937
445
  justify-content: center;
3938
446
  }
3939
447
  .mcp-modal-overlay.open { display: flex; }
3940
448
  .mcp-modal {
3941
- background: rgba(255,255,255,0.96);
449
+ background: var(--modal);
3942
450
  border: 1px solid rgba(111,66,232,0.16);
3943
451
  border-radius: 16px;
3944
452
  width: 100%;
@@ -3962,7 +470,7 @@
3962
470
  .mcp-item {
3963
471
  display: flex; align-items: center; gap: 12px;
3964
472
  padding: 11px 14px;
3965
- background: rgba(255,255,255,0.60);
473
+ background: var(--surface-2);
3966
474
  border: 1px solid rgba(255,255,255,0.06);
3967
475
  border-radius: 10px;
3968
476
  margin-bottom: 6px;
@@ -4001,7 +509,7 @@
4001
509
  .mcp-add-form label { font-size: 11px; font-weight: 600; color: var(--faint); text-transform: uppercase; letter-spacing: .06em; }
4002
510
  .mcp-add-form input, .mcp-add-form textarea, .mcp-add-form select {
4003
511
  width: 100%; padding: 8px 11px; border-radius: 8px; font-size: 13px;
4004
- background: rgba(255,255,255,0.85); border: 1px solid rgba(111,66,232,0.18);
512
+ background: var(--input); border: 1px solid rgba(111,66,232,0.18);
4005
513
  color: var(--text); outline: none; transition: border .15s; box-sizing: border-box;
4006
514
  }
4007
515
  .mcp-add-form input:focus, .mcp-add-form textarea:focus { border-color: rgba(111,66,232,0.45); }
@@ -4019,7 +527,7 @@
4019
527
  }
4020
528
  .mcp-delete-btn:hover { background: rgba(255,80,80,0.18); }
4021
529
  .acct-modal {
4022
- background: rgba(255,255,255,0.96);
530
+ background: var(--modal);
4023
531
  border: 1px solid rgba(111,66,232,0.16);
4024
532
  border-radius: 16px;
4025
533
  width: 100%;
@@ -4045,7 +553,7 @@
4045
553
  .pw-field { display: flex; flex-direction: column; gap: 5px; }
4046
554
  .pw-field label { font-size: 11px; color: var(--muted); }
4047
555
  .pw-field input {
4048
- background: rgba(255,255,255,0.88);
556
+ background: var(--input);
4049
557
  border: 1px solid rgba(111,66,232,0.18);
4050
558
  border-radius: 8px;
4051
559
  color: var(--text, var(--text));
@@ -4066,7 +574,7 @@
4066
574
  .pw-submit:hover { opacity: 0.85; }
4067
575
  .pw-msg { font-size: 12px; min-height: 16px; }
4068
576
  .pw-msg.error { color: #f87171; }
4069
- .pw-msg.success { color: #4ade80; }
577
+ .pw-msg.success { color: var(--success); }
4070
578
 
4071
579
  .lang-picker { position: relative; }
4072
580
  .lang-picker-menu {
@@ -4074,7 +582,7 @@
4074
582
  position: absolute;
4075
583
  top: calc(100% + 6px);
4076
584
  right: 0;
4077
- background: rgba(255,255,255,0.96);
585
+ background: var(--surface-elevated);
4078
586
  border: 1px solid rgba(111,66,232,0.16);
4079
587
  border-radius: 10px;
4080
588
  overflow: hidden;
@@ -4097,10 +605,10 @@
4097
605
  .auth-lang-btn {
4098
606
  background: rgba(255,255,255,0.07);
4099
607
  border: 1px solid rgba(255,255,255,0.12);
4100
- color: #94a3b8; font-size: 12px; padding: 5px 10px;
608
+ color: var(--faint); font-size: 12px; padding: 5px 10px;
4101
609
  border-radius: 8px; cursor: pointer; transition: all .15s;
4102
610
  }
4103
- .auth-lang-btn:hover { background: rgba(255,255,255,0.12); color: #f8fafc; }
611
+ .auth-lang-btn:hover { background: rgba(255,255,255,0.12); color: var(--surface); }
4104
612
  .auth-lang-picker .lang-picker-menu { top: calc(100% + 6px); right: 0; }
4105
613
 
4106
614
  .messages-viewport {
@@ -4137,7 +645,7 @@
4137
645
 
4138
646
  .ops-card.primary {
4139
647
  border-color: rgba(111,66,232,0.18);
4140
- background: linear-gradient(135deg, rgba(111,66,232,0.10) 0%, rgba(248,243,255,0.92) 60%);
648
+ background: linear-gradient(135deg, rgba(111,66,232,0.10) 0%, var(--card) 60%);
4141
649
  box-shadow: var(--shadow-sm), var(--glow-green), inset 0 1px 0 rgba(111,66,232,0.08);
4142
650
  }
4143
651
 
@@ -4146,7 +654,7 @@
4146
654
  .ops-card.interactive:hover {
4147
655
  transform: translateY(-2px);
4148
656
  border-color: rgba(111,66,232,0.32);
4149
- background: linear-gradient(135deg, var(--border) 0%, rgba(248,243,255,0.96) 60%);
657
+ background: linear-gradient(135deg, var(--border) 0%, var(--card) 60%);
4150
658
  box-shadow: var(--shadow), 0 0 30px var(--border);
4151
659
  }
4152
660
 
@@ -4195,7 +703,7 @@
4195
703
  }
4196
704
 
4197
705
  .ops-card:not(.primary) .ops-icon {
4198
- background: rgba(255,255,255,0.60);
706
+ background: var(--card);
4199
707
  border: 1px solid var(--border);
4200
708
  color: var(--accent-3);
4201
709
  }
@@ -4276,7 +784,7 @@
4276
784
  }
4277
785
 
4278
786
  .ai .bubble {
4279
- background: rgba(250,246,255,0.97);
787
+ background: var(--surface);
4280
788
  color: var(--text);
4281
789
  border: 1px solid var(--accent-soft);
4282
790
  border-bottom-left-radius: 4px;
@@ -4290,7 +798,7 @@
4290
798
  overflow: hidden;
4291
799
  border-radius: var(--radius-sm);
4292
800
  margin: 12px 0;
4293
- background: rgba(255,255,255,0.86);
801
+ background: var(--surface-2);
4294
802
  border: 1px solid rgba(129,140,248,0.15);
4295
803
  box-shadow: 0 4px 16px rgba(88,72,150,0.10);
4296
804
  }
@@ -4323,7 +831,7 @@
4323
831
  white-space: pre;
4324
832
  padding: 16px;
4325
833
  font-size: 13px;
4326
- background: rgba(255,255,255,0.86);
834
+ background: var(--surface-2);
4327
835
  scrollbar-width: thin;
4328
836
  font-family: 'JetBrains Mono', 'Fira Code', monospace;
4329
837
  line-height: 1.6;
@@ -4365,7 +873,7 @@
4365
873
  inset: 0;
4366
874
  background: rgba(111,66,232,0.18);
4367
875
  z-index: 99;
4368
- backdrop-filter: blur(2px);
876
+ backdrop-filter: none;
4369
877
  }
4370
878
  body.sidebar-open .sidebar-overlay { display: block; }
4371
879
 
@@ -4403,11 +911,11 @@
4403
911
  .input-area {
4404
912
  padding: 14px 20px 20px;
4405
913
  padding-bottom: max(20px, env(safe-area-inset-bottom));
4406
- background: linear-gradient(0deg, rgba(243,236,255,0.98) 0%, transparent 100%);
914
+ background: linear-gradient(0deg, var(--input) 0%, transparent 100%);
4407
915
  }
4408
916
 
4409
917
  .input-box {
4410
- background: rgba(248,243,255,0.97);
918
+ background: var(--input);
4411
919
  border: 1px solid rgba(111,66,232,0.16);
4412
920
  border-radius: var(--radius);
4413
921
  padding: 10px 12px 10px;
@@ -4516,7 +1024,7 @@
4516
1024
  padding: 4px 10px;
4517
1025
  border-radius: 6px;
4518
1026
  border: 1px solid rgba(255,255,255,0.06);
4519
- background: rgba(255,255,255,0.60);
1027
+ background: var(--surface-2);
4520
1028
  color: var(--muted);
4521
1029
  font-size: 11.5px;
4522
1030
  font-weight: 600;
@@ -4811,7 +1319,7 @@
4811
1319
 
4812
1320
  .auth-card {
4813
1321
  width: min(400px, 100%);
4814
- background: rgba(255,255,255,0.94);
1322
+ background: var(--card);
4815
1323
  border: 1px solid rgba(111,66,232,0.16);
4816
1324
  border-radius: 20px;
4817
1325
  padding: 36px 32px;
@@ -4862,7 +1370,7 @@
4862
1370
  width: 100%;
4863
1371
  padding: 12px 14px;
4864
1372
  margin-bottom: 10px;
4865
- background: rgba(255,255,255,0.60);
1373
+ background: var(--input);
4866
1374
  border: 1px solid rgba(255,255,255,0.08);
4867
1375
  color: var(--text);
4868
1376
  border-radius: 10px;
@@ -4883,7 +1391,7 @@
4883
1391
  width: 100%;
4884
1392
  padding: 13px;
4885
1393
  background: linear-gradient(135deg, var(--accent), #5832c8);
4886
- color: #030d09;
1394
+ color: #fff;
4887
1395
  border: none;
4888
1396
  border-radius: 10px;
4889
1397
  cursor: pointer;
@@ -5308,7 +1816,7 @@
5308
1816
  padding: 10px 14px;
5309
1817
  border-radius: 8px;
5310
1818
  border: 1px solid var(--border);
5311
- background: rgba(248,243,255,0.50);
1819
+ background: var(--card);
5312
1820
  margin-bottom: 16px;
5313
1821
  font-size: 13px;
5314
1822
  }
@@ -5331,7 +1839,7 @@
5331
1839
  border-radius: 8px;
5332
1840
  padding: 14px;
5333
1841
  margin-bottom: 12px;
5334
- background: rgba(248,243,255,0.50);
1842
+ background: var(--surface-2);
5335
1843
  }
5336
1844
 
5337
1845
  .status-section-title {
@@ -5453,7 +1961,7 @@
5453
1961
  margin-top: 8px;
5454
1962
  border: 1px solid rgba(111,66,232,0.16);
5455
1963
  border-radius: 10px;
5456
- background: rgba(255,255,255,0.92);
1964
+ background: var(--surface-elevated);
5457
1965
  box-shadow: 0 16px 36px rgba(96,72,160,0.12);
5458
1966
  overflow: hidden;
5459
1967
  }
@@ -5772,7 +2280,7 @@
5772
2280
 
5773
2281
  .sensitivity-tag.medium {
5774
2282
  border-color: rgba(216, 160, 61, 0.55);
5775
- color: #ffd591;
2283
+ color: var(--warning);
5776
2284
  }
5777
2285
 
5778
2286
  .sensitivity-tag.low {
@@ -5998,7 +2506,7 @@
5998
2506
  inset: 0;
5999
2507
  z-index: 9000;
6000
2508
  background: rgba(111, 66, 232, 0.18);
6001
- backdrop-filter: blur(14px);
2509
+ backdrop-filter: none;
6002
2510
  align-items: center;
6003
2511
  justify-content: center;
6004
2512
  }
@@ -6153,7 +2661,7 @@
6153
2661
  .rec-item.checked .rec-checkbox {
6154
2662
  background: var(--accent);
6155
2663
  border-color: var(--accent);
6156
- color: #0f1214;
2664
+ color: #fff;
6157
2665
  }
6158
2666
  .rec-item-body.lattice-ref-chat { flex: 1; min-width: 0; }
6159
2667
  .rec-item-header { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
@@ -6247,13 +2755,13 @@
6247
2755
 
6248
2756
  /* ── 패널 공통 ── */
6249
2757
  .admin-panel {
6250
- background: rgba(246,240,255,0.98);
2758
+ background: var(--card);
6251
2759
  border-left: 1px solid var(--border);
6252
2760
  backdrop-filter: blur(24px);
6253
2761
  color: var(--text);
6254
2762
  }
6255
2763
  .admin-header {
6256
- background: rgba(244,237,255,0.95);
2764
+ background: var(--sidebar);
6257
2765
  border-bottom: 1px solid var(--accent-soft);
6258
2766
  }
6259
2767
  .admin-form-field label {
@@ -6262,7 +2770,7 @@
6262
2770
  letter-spacing: 0.05em;
6263
2771
  }
6264
2772
  .admin-form-field input, .admin-form-field select, .admin-form-field textarea {
6265
- background: rgba(255,255,255,0.90);
2773
+ background: var(--input);
6266
2774
  border-color: rgba(111,66,232,0.18);
6267
2775
  border-radius: 9px;
6268
2776
  color: var(--text);
@@ -6352,7 +2860,7 @@
6352
2860
 
6353
2861
  /* ── MCP 드롭다운 개선 ── */
6354
2862
  .mcp-dropdown {
6355
- background: rgba(255,255,255,0.96);
2863
+ background: var(--surface-elevated);
6356
2864
  border: 1px solid rgba(111,66,232,0.16);
6357
2865
  border-radius: var(--radius);
6358
2866
  box-shadow: var(--shadow), 0 0 20px rgba(111,66,232,0.08);
@@ -6380,15 +2888,15 @@
6380
2888
  --faint: var(--faint);
6381
2889
  --border: var(--border);
6382
2890
  --border-strong: var(--border-strong);
6383
- --shadow: 0 18px 54px rgba(88, 72, 150, 0.15);
6384
- --shadow-sm: 0 6px 20px rgba(88, 72, 150, 0.10);
2891
+ --shadow: var(--shadow);
2892
+ --shadow-sm: var(--shadow-sm);
6385
2893
  --glow-green: 0 0 30px var(--border);
6386
2894
  position: relative;
6387
2895
  isolation: isolate;
6388
2896
  background:
6389
2897
  radial-gradient(circle at 82% 12%, var(--border), transparent 30%),
6390
2898
  radial-gradient(circle at 10% 80%, rgba(180,160,255,0.16), transparent 35%),
6391
- linear-gradient(180deg, var(--bg) 0%, var(--surface-2) 52%, #f2ecff 100%);
2899
+ linear-gradient(180deg, var(--bg) 0%, var(--surface-2) 52%, var(--surface) 100%);
6392
2900
  }
6393
2901
 
6394
2902
  .app-layout::before {
@@ -6509,7 +3017,7 @@
6509
3017
  }
6510
3018
 
6511
3019
  .app-layout .status-dot {
6512
- background: #f7f7f2;
3020
+ background: var(--surface);
6513
3021
  box-shadow: 0 0 8px rgba(247,247,242,0.7), 0 0 18px rgba(167,124,255,0.36);
6514
3022
  }
6515
3023
 
@@ -6586,7 +3094,7 @@
6586
3094
 
6587
3095
  .app-layout .code-container,
6588
3096
  .app-layout pre {
6589
- background: rgba(255,255,255,0.88);
3097
+ background: var(--surface-2);
6590
3098
  border-color: rgba(218,225,255,0.10);
6591
3099
  }
6592
3100
 
@@ -6596,7 +3104,7 @@
6596
3104
  }
6597
3105
 
6598
3106
  .app-layout .input-area {
6599
- background: linear-gradient(0deg, rgba(246,240,255,0.98) 0%, rgba(246,240,255,0.78) 64%, transparent 100%);
3107
+ background: linear-gradient(0deg, var(--input) 0%, var(--input) 64%, transparent 100%);
6600
3108
  }
6601
3109
 
6602
3110
  .app-layout .input-box {
@@ -6624,12 +3132,15 @@
6624
3132
  }
6625
3133
 
6626
3134
  .app-layout .send-btn:hover {
6627
- background: #ffffff;
3135
+ background: var(--surface-2);
6628
3136
  box-shadow: 0 10px 24px rgba(0,0,0,0.28);
6629
3137
  }
6630
3138
 
6631
- /* PPT reference skin: light workspace, indigo navigation, modal-first flow. */
6632
- body.lattice-ref-chat {
3139
+ /* PPT reference skin: light workspace, indigo navigation, modal-first flow.
3140
+ v2.2.6: gated to the explicit light theme so it no longer shadows the
3141
+ dark palette in tokens.css. In dark, body sets no color tokens and the
3142
+ page inherits :root[data-lt-theme="dark"] — no loaded-last override needed. */
3143
+ :root[data-lt-theme="light"] body.lattice-ref-chat {
6633
3144
  --bg: #f8f6ff;
6634
3145
  --surface: #ffffff;
6635
3146
  --surface-2: #f3f0ff;
@@ -6651,7 +3162,7 @@
6651
3162
  background:
6652
3163
  radial-gradient(circle at 76% 14%, rgba(111,75,246,0.12), transparent 30%),
6653
3164
  radial-gradient(circle at 8% 80%, rgba(196,181,253,0.26), transparent 35%),
6654
- linear-gradient(180deg, #fbfaff 0%, #f6f2ff 100%);
3165
+ linear-gradient(180deg, var(--surface) 0%, var(--surface) 100%);
6655
3166
  }
6656
3167
  .bg-grid {
6657
3168
  opacity: 0.28;
@@ -6668,7 +3179,7 @@
6668
3179
  radial-gradient(ellipse at 5% 88%, rgba(111,75,246,0.16), transparent 35%);
6669
3180
  }
6670
3181
  .app-layout .sidebar {
6671
- background: rgba(255,255,255,0.88);
3182
+ background: var(--sidebar);
6672
3183
  border-right-color: rgba(111,75,246,0.12);
6673
3184
  box-shadow: 12px 0 46px rgba(86,70,160,0.08);
6674
3185
  }
@@ -6687,7 +3198,7 @@
6687
3198
  }
6688
3199
  .app-layout .brand-title,
6689
3200
  .app-layout .empty-state h1 {
6690
- color: #24223d;
3201
+ color: var(--text);
6691
3202
  }
6692
3203
  .app-layout .brand-subtitle,
6693
3204
  .app-layout .user-strip,
@@ -6700,7 +3211,7 @@
6700
3211
  .app-layout .mcp-add-form textarea,
6701
3212
  .app-layout .mcp-add-form select,
6702
3213
  .app-layout .pw-field input {
6703
- background: #fbfaff;
3214
+ background: var(--surface);
6704
3215
  border-color: rgba(111,75,246,0.12);
6705
3216
  color: var(--text);
6706
3217
  }
@@ -6708,7 +3219,7 @@
6708
3219
  .app-layout .status-btn,
6709
3220
  .app-layout .setup-wizard-sidebar-btn,
6710
3221
  .app-layout .admin-btn {
6711
- background: #fff;
3222
+ background: var(--sidebar);
6712
3223
  border-color: rgba(111,75,246,0.13);
6713
3224
  color: var(--text);
6714
3225
  box-shadow: 0 8px 22px rgba(86,70,160,0.06);
@@ -6719,18 +3230,18 @@
6719
3230
  .app-layout .admin-btn:hover,
6720
3231
  .app-layout .history-item:hover,
6721
3232
  .app-layout .history-item.active {
6722
- background: #f1ecff;
3233
+ background: var(--surface);
6723
3234
  border-color: rgba(111,75,246,0.25);
6724
3235
  color: var(--accent);
6725
3236
  }
6726
3237
  .app-layout .chat-header {
6727
- background: rgba(255,255,255,0.78);
3238
+ background: var(--sidebar);
6728
3239
  box-shadow: 0 8px 28px rgba(86,70,160,0.08);
6729
3240
  }
6730
3241
  .app-layout .model-badge,
6731
3242
  .app-layout .status-pill,
6732
3243
  .app-layout .logout-btn {
6733
- background: rgba(255,255,255,0.78);
3244
+ background: var(--surface-2);
6734
3245
  border-color: rgba(111,75,246,0.14);
6735
3246
  color: var(--muted);
6736
3247
  }
@@ -6746,17 +3257,17 @@
6746
3257
  .app-layout .ai .bubble,
6747
3258
  .app-layout .acct-modal,
6748
3259
  .app-layout .mcp-modal {
6749
- background: rgba(255,255,255,0.86);
3260
+ background: var(--modal);
6750
3261
  border-color: rgba(111,75,246,0.13);
6751
3262
  box-shadow: var(--shadow-sm), inset 0 1px 0 rgba(255,255,255,0.9);
6752
3263
  }
6753
3264
  .app-layout .ops-card.primary {
6754
- background: linear-gradient(135deg, rgba(111,75,246,0.12), rgba(255,255,255,0.92) 62%);
3265
+ background: linear-gradient(135deg, rgba(111,75,246,0.12), var(--card) 62%);
6755
3266
  border-color: rgba(111,75,246,0.23);
6756
3267
  }
6757
3268
  .app-layout .ops-card.interactive:hover,
6758
3269
  .app-layout .empty-chip:hover {
6759
- background: #f3efff;
3270
+ background: var(--surface);
6760
3271
  border-color: rgba(111,75,246,0.30);
6761
3272
  box-shadow: 0 18px 42px rgba(86,70,160,0.16);
6762
3273
  }
@@ -6777,10 +3288,10 @@
6777
3288
  box-shadow: 0 14px 32px rgba(111,75,246,0.22);
6778
3289
  }
6779
3290
  .app-layout .input-area {
6780
- background: linear-gradient(0deg, rgba(248,246,255,0.98) 0%, rgba(248,246,255,0.76) 64%, transparent 100%);
3291
+ background: linear-gradient(0deg, var(--input) 0%, var(--input) 64%, transparent 100%);
6781
3292
  }
6782
3293
  .app-layout .input-box {
6783
- background: rgba(255,255,255,0.92);
3294
+ background: var(--input);
6784
3295
  border-color: rgba(111,75,246,0.16);
6785
3296
  box-shadow: 0 18px 54px rgba(86,70,160,0.15);
6786
3297
  }
@@ -6802,7 +3313,7 @@
6802
3313
  justify-content: center;
6803
3314
  padding: 24px;
6804
3315
  background: rgba(111, 66, 232, 0.18);
6805
- backdrop-filter: blur(14px);
3316
+ backdrop-filter: none;
6806
3317
  }
6807
3318
  .workspace-modal-overlay.open,
6808
3319
  .mode-modal-overlay.open {
@@ -6837,7 +3348,7 @@
6837
3348
  text-align: center;
6838
3349
  margin-bottom: 8px;
6839
3350
  }
6840
- .mode-modal .modal-kicker { color: #b9aaff; }
3351
+ .mode-modal .modal-kicker { color: var(--accent); }
6841
3352
  .workspace-modal h2,
6842
3353
  .mode-modal h2 {
6843
3354
  text-align: center;
@@ -6852,7 +3363,7 @@
6852
3363
  line-height: 1.6;
6853
3364
  margin-bottom: 22px;
6854
3365
  }
6855
- .mode-modal p { color: #b8b2d4; }
3366
+ .mode-modal p { color: var(--muted); }
6856
3367
  .workspace-options,
6857
3368
  .mode-options {
6858
3369
  display: grid;
@@ -6863,7 +3374,7 @@
6863
3374
  .mode-card {
6864
3375
  border-radius: 16px;
6865
3376
  border: 1px solid rgba(111,75,246,0.14);
6866
- background: #fff;
3377
+ background: var(--card);
6867
3378
  padding: 22px 18px;
6868
3379
  cursor: pointer;
6869
3380
  text-align: center;
@@ -6921,7 +3432,7 @@
6921
3432
  font-size: 12px;
6922
3433
  line-height: 1.45;
6923
3434
  }
6924
- .mode-card span { color: #c9c3e2; }
3435
+ .mode-card span { color: var(--muted); }
6925
3436
  .modal-footnote {
6926
3437
  color: var(--faint);
6927
3438
  font-size: 12px;
@@ -6934,7 +3445,7 @@
6934
3445
  right: 14px;
6935
3446
  border: 0;
6936
3447
  background: rgba(255,255,255,0.08);
6937
- color: #c9c3e2;
3448
+ color: var(--muted);
6938
3449
  border-radius: 10px;
6939
3450
  width: 32px;
6940
3451
  height: 32px;
@@ -6970,7 +3481,7 @@
6970
3481
  padding: 4px;
6971
3482
  border: 1px solid rgba(111,75,246,0.16);
6972
3483
  border-radius: 10px;
6973
- background: rgba(255,255,255,0.72);
3484
+ background: var(--surface-2);
6974
3485
  box-shadow: 0 8px 22px rgba(86,70,160,0.08);
6975
3486
  }
6976
3487
 
@@ -7034,7 +3545,7 @@
7034
3545
 
7035
3546
  .app-layout .reference-nav-item:hover,
7036
3547
  .app-layout .reference-nav-item.active {
7037
- background: #f1ecff;
3548
+ background: var(--surface);
7038
3549
  border-color: rgba(111,75,246,0.22);
7039
3550
  color: var(--accent);
7040
3551
  }
@@ -7050,7 +3561,7 @@
7050
3561
 
7051
3562
  .home-action-card {
7052
3563
  border: 1px solid rgba(111,75,246,0.14);
7053
- background: rgba(255,255,255,0.9);
3564
+ background: var(--card);
7054
3565
  border-radius: 8px;
7055
3566
  padding: 16px;
7056
3567
  text-align: left;
@@ -7100,7 +3611,7 @@
7100
3611
 
7101
3612
  .home-summary-panel {
7102
3613
  border: 1px solid rgba(111,75,246,0.12);
7103
- background: rgba(255,255,255,0.82);
3614
+ background: var(--card);
7104
3615
  border-radius: 8px;
7105
3616
  padding: 16px;
7106
3617
  text-align: left;
@@ -7166,7 +3677,7 @@
7166
3677
 
7167
3678
  /* 개별 카드 */
7168
3679
  .hdc-card {
7169
- background: rgba(255,255,255,0.92);
3680
+ background: var(--card);
7170
3681
  border: 1px solid var(--border);
7171
3682
  border-radius: 14px;
7172
3683
  padding: 18px;
@@ -7261,7 +3772,7 @@
7261
3772
  gap: 14px;
7262
3773
  }
7263
3774
  .hdr-panel {
7264
- background: rgba(255,255,255,0.92);
3775
+ background: var(--card);
7265
3776
  border: 1px solid var(--border);
7266
3777
  border-radius: 14px;
7267
3778
  overflow: hidden;
@@ -7315,7 +3826,7 @@
7315
3826
  justify-content: center;
7316
3827
  padding: 24px;
7317
3828
  background: rgba(28, 24, 54, 0.34);
7318
- backdrop-filter: blur(18px);
3829
+ backdrop-filter: none;
7319
3830
  }
7320
3831
 
7321
3832
  .onboarding-overlay.open { display: flex; }
@@ -7328,7 +3839,7 @@
7328
3839
  overflow: hidden;
7329
3840
  border-radius: 16px;
7330
3841
  border: 1px solid rgba(111,75,246,0.16);
7331
- background: linear-gradient(180deg, rgba(255,255,255,0.98), rgba(250,248,255,0.96));
3842
+ background: linear-gradient(180deg, var(--card), var(--card));
7332
3843
  box-shadow: 0 30px 90px rgba(60,45,130,0.24);
7333
3844
  color: var(--text);
7334
3845
  }
@@ -7417,7 +3928,7 @@
7417
3928
 
7418
3929
  .onboarding-secondary {
7419
3930
  border: 1px solid rgba(111,75,246,0.16);
7420
- background: #fff;
3931
+ background: var(--card);
7421
3932
  color: var(--muted);
7422
3933
  }
7423
3934
 
@@ -7435,7 +3946,7 @@
7435
3946
  .recommendation-card,
7436
3947
  .analysis-row {
7437
3948
  border: 1px solid rgba(111,75,246,0.14);
7438
- background: #fff;
3949
+ background: var(--card);
7439
3950
  border-radius: 10px;
7440
3951
  padding: 16px;
7441
3952
  text-align: left;
@@ -7493,7 +4004,7 @@
7493
4004
 
7494
4005
  .onboarding-model-card {
7495
4006
  border: 1px solid rgba(111,75,246,0.14);
7496
- background: #fff;
4007
+ background: var(--card);
7497
4008
  border-radius: 10px;
7498
4009
  padding: 14px;
7499
4010
  }
@@ -7511,7 +4022,7 @@
7511
4022
 
7512
4023
  .onboarding-model-option {
7513
4024
  border: 1px solid rgba(111,75,246,0.14);
7514
- background: #fbfaff;
4025
+ background: var(--surface);
7515
4026
  border-radius: 8px;
7516
4027
  padding: 11px;
7517
4028
  text-align: left;
@@ -7556,7 +4067,7 @@
7556
4067
 
7557
4068
  .setup-log-row {
7558
4069
  border: 1px solid rgba(111,75,246,0.12);
7559
- background: #fff;
4070
+ background: var(--surface);
7560
4071
  border-radius: 8px;
7561
4072
  padding: 12px 14px;
7562
4073
  display: flex;
@@ -7566,7 +4077,7 @@
7566
4077
  font-size: 13px;
7567
4078
  }
7568
4079
 
7569
- .setup-log-row.done { color: #147a5a; border-color: rgba(20,122,90,0.24); }
4080
+ .setup-log-row.done { color: var(--success); border-color: rgba(20,122,90,0.24); }
7570
4081
  .setup-log-row.error { color: var(--danger); border-color: rgba(239,68,68,0.24); }
7571
4082
 
7572
4083
  .advanced-settings-overlay {
@@ -7673,7 +4184,7 @@
7673
4184
  }
7674
4185
 
7675
4186
  body.lattice-ref-chat .app-layout .mode-segmented button:not(.active) {
7676
- color: #b0a4ee;
4187
+ color: var(--muted);
7677
4188
  }
7678
4189
 
7679
4190
  body.lattice-ref-chat .app-layout .mode-segmented button.active {
@@ -7715,7 +4226,7 @@
7715
4226
  --bg: var(--bg);
7716
4227
  --surface: var(--surface);
7717
4228
  --surface-2: var(--surface-2);
7718
- --surface-3: #e8e0ff;
4229
+ --surface-3: var(--surface-3);
7719
4230
  --accent: var(--accent);
7720
4231
  --accent-2: #ffb84d;
7721
4232
  --accent-3: var(--accent-2);
@@ -7723,14 +4234,14 @@
7723
4234
  --text: var(--text);
7724
4235
  --muted: var(--muted);
7725
4236
  --faint: var(--faint);
7726
- --border: rgba(111,66,232,0.15);
4237
+ --border: var(--border);
7727
4238
  --border-strong: var(--border-strong);
7728
- --shadow: 0 18px 54px rgba(88,72,150,0.15);
7729
- --shadow-sm: 0 8px 24px rgba(88,72,150,0.11);
4239
+ --shadow: var(--shadow);
4240
+ --shadow-sm: var(--shadow-sm);
7730
4241
  background:
7731
4242
  radial-gradient(circle at 82% 12%, var(--border), transparent 30%),
7732
4243
  radial-gradient(circle at 10% 80%, rgba(180,160,255,0.16), transparent 35%),
7733
- linear-gradient(180deg, var(--bg) 0%, var(--surface-2) 52%, #f2ecff 100%);
4244
+ linear-gradient(180deg, var(--bg) 0%, var(--surface-2) 52%, var(--surface) 100%);
7734
4245
  }
7735
4246
  body.lattice-ref-chat .app-layout::before,
7736
4247
  body.lattice-ref-chat .app-layout::after {
@@ -7739,14 +4250,14 @@
7739
4250
 
7740
4251
  /* Sidebar */
7741
4252
  body.lattice-ref-chat .app-layout .sidebar {
7742
- background: rgba(244, 237, 255, 0.96);
4253
+ background: var(--sidebar);
7743
4254
  border-right: 1px solid rgba(111,66,232,0.13);
7744
4255
  box-shadow: 12px 0 46px rgba(88,72,150,0.08);
7745
4256
  }
7746
4257
 
7747
4258
  /* Chat header */
7748
4259
  body.lattice-ref-chat .app-layout .chat-header {
7749
- background: rgba(244, 238, 255, 0.92);
4260
+ background: var(--sidebar);
7750
4261
  border-bottom: 1px solid rgba(111,66,232,0.11);
7751
4262
  box-shadow: 0 2px 12px rgba(88,72,150,0.06);
7752
4263
  backdrop-filter: blur(14px);
@@ -7759,7 +4270,7 @@
7759
4270
 
7760
4271
  /* AI 채팅 버블 */
7761
4272
  body.lattice-ref-chat .app-layout .ai .bubble {
7762
- background: rgba(250, 246, 255, 0.97);
4273
+ background: var(--surface);
7763
4274
  border: 1px solid var(--accent-soft);
7764
4275
  color: var(--text);
7765
4276
  box-shadow: 0 4px 18px rgba(88,72,150,0.08);
@@ -7784,11 +4295,11 @@
7784
4295
  /* 코드 블록 */
7785
4296
  body.lattice-ref-chat .app-layout .code-container,
7786
4297
  body.lattice-ref-chat .app-layout pre {
7787
- background: #ede7ff;
4298
+ background: var(--surface-2);
7788
4299
  border-color: var(--border);
7789
4300
  }
7790
4301
  body.lattice-ref-chat .app-layout .code-header {
7791
- background: #e5dcff;
4302
+ background: var(--surface-2);
7792
4303
  border-bottom-color: rgba(111,66,232,0.13);
7793
4304
  }
7794
4305
 
@@ -7800,7 +4311,7 @@
7800
4311
  transparent 100%);
7801
4312
  }
7802
4313
  body.lattice-ref-chat .app-layout .input-box {
7803
- background: rgba(248, 243, 255, 0.97);
4314
+ background: var(--input);
7804
4315
  border: 1px solid rgba(111,66,232,0.17);
7805
4316
  box-shadow: 0 8px 32px rgba(88,72,150,0.10);
7806
4317
  }
@@ -7822,7 +4333,7 @@
7822
4333
 
7823
4334
  /* 빈 상태 카드/칩 */
7824
4335
  body.lattice-ref-chat .app-layout .empty-chip {
7825
- background: rgba(246, 241, 255, 0.94);
4336
+ background: var(--surface-2);
7826
4337
  border-color: rgba(111,66,232,0.15);
7827
4338
  color: var(--muted);
7828
4339
  box-shadow: 0 2px 10px rgba(88,72,150,0.08);
@@ -7832,23 +4343,23 @@
7832
4343
  border-color: var(--border-strong);
7833
4344
  }
7834
4345
  body.lattice-ref-chat .app-layout .ops-card {
7835
- background: rgba(247, 242, 255, 0.94);
4346
+ background: var(--card);
7836
4347
  border-color: rgba(111,66,232,0.13);
7837
4348
  box-shadow: 0 6px 22px rgba(88,72,150,0.08);
7838
4349
  }
7839
4350
  body.lattice-ref-chat .app-layout .ops-card.primary {
7840
- background: linear-gradient(135deg, rgba(111,66,232,0.10), rgba(247,242,255,0.94) 58%);
4351
+ background: linear-gradient(135deg, rgba(111,66,232,0.10), var(--card) 58%);
7841
4352
  border-color: rgba(111,66,232,0.22);
7842
4353
  }
7843
4354
 
7844
4355
  /* 배지/버튼 */
7845
4356
  body.lattice-ref-chat .app-layout .model-badge {
7846
- background: rgba(243, 237, 255, 0.90);
4357
+ background: var(--surface-2);
7847
4358
  border-color: rgba(111,66,232,0.15);
7848
4359
  color: var(--text);
7849
4360
  }
7850
4361
  body.lattice-ref-chat .app-layout .status-pill {
7851
- background: rgba(241, 236, 255, 0.86);
4362
+ background: var(--surface-2);
7852
4363
  border-color: rgba(111,66,232,0.13);
7853
4364
  color: var(--muted);
7854
4365
  }
@@ -7881,8 +4392,8 @@
7881
4392
  }
7882
4393
  /* 채팅 기록 목록도 검정 */
7883
4394
  body.lattice-ref-chat .app-layout .history-item {
7884
- color: #2a2744;
7885
- -webkit-text-fill-color: #2a2744;
4395
+ color: var(--text);
4396
+ -webkit-text-fill-color: var(--text);
7886
4397
  }
7887
4398
  body.lattice-ref-chat .app-layout .history-item:hover,
7888
4399
  body.lattice-ref-chat .app-layout .history-item.active {
@@ -7906,7 +4417,7 @@
7906
4417
  }
7907
4418
  /* 상단 모드 세그멘트 배경도 라벤더로 */
7908
4419
  body.lattice-ref-chat .app-layout .mode-segmented {
7909
- background: rgba(241, 236, 255, 0.84);
4420
+ background: var(--surface-2);
7910
4421
  border-color: rgba(111,66,232,0.16);
7911
4422
  }
7912
4423
  body.lattice-ref-chat .app-layout .mode-segmented button:not(.active) {
@@ -7976,10 +4487,143 @@
7976
4487
  }
7977
4488
  body.lattice-ref-chat .app-layout[data-view="chat"] .chat-capability-row span {
7978
4489
  border: 1px solid rgba(111,66,232,0.16);
7979
- background: rgba(255,255,255,0.72);
4490
+ background: var(--surface);
7980
4491
  color: var(--muted);
7981
4492
  border-radius: 999px;
7982
4493
  padding: 6px 10px;
7983
4494
  font-size: 12px;
7984
4495
  font-weight: 650;
7985
4496
  }
4497
+
4498
+ /* v2.2.7 visual stabilization: rendered dark mode must be crisp, not glassy. */
4499
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .app-layout .input-area {
4500
+ background:
4501
+ linear-gradient(0deg,
4502
+ rgba(11, 11, 30, 0.98) 0%,
4503
+ rgba(11, 11, 30, 0.92) 58%,
4504
+ rgba(11, 11, 30, 0.30) 82%,
4505
+ transparent 100%);
4506
+ }
4507
+
4508
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .app-layout .input-box {
4509
+ background: linear-gradient(180deg, rgba(33, 36, 78, 0.98), rgba(18, 20, 48, 0.98));
4510
+ border-color: rgba(167, 139, 250, 0.30);
4511
+ box-shadow: 0 18px 46px rgba(0, 0, 0, 0.56), 0 0 0 1px rgba(167, 139, 250, 0.07);
4512
+ }
4513
+
4514
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .app-layout .input-box:focus-within {
4515
+ border-color: rgba(196, 181, 253, 0.56);
4516
+ box-shadow: 0 20px 50px rgba(0, 0, 0, 0.62), 0 0 0 3px rgba(167, 139, 250, 0.18);
4517
+ }
4518
+
4519
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .app-layout textarea {
4520
+ color: var(--text);
4521
+ }
4522
+
4523
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .app-layout textarea::placeholder {
4524
+ color: rgba(226, 232, 255, 0.50);
4525
+ }
4526
+
4527
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .app-layout .action-btn {
4528
+ color: rgba(226, 232, 255, 0.62);
4529
+ }
4530
+
4531
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .app-layout .action-btn:hover {
4532
+ background: rgba(167, 139, 250, 0.14);
4533
+ color: var(--accent-2);
4534
+ }
4535
+
4536
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .app-layout .file-toolbar {
4537
+ border-top-color: rgba(167, 139, 250, 0.16);
4538
+ }
4539
+
4540
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .app-layout .send-btn,
4541
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .app-layout .send-btn:hover {
4542
+ background: linear-gradient(135deg, #8b5cf6, #22d3ee);
4543
+ color: #ffffff;
4544
+ box-shadow: 0 12px 28px rgba(34, 211, 238, 0.18), 0 10px 28px rgba(139, 92, 246, 0.28);
4545
+ opacity: 1;
4546
+ }
4547
+
4548
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .app-layout .send-btn:hover {
4549
+ transform: translateY(-1px);
4550
+ }
4551
+
4552
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .workspace-modal-overlay,
4553
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .mode-modal-overlay,
4554
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .model-overlay,
4555
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .admin-overlay,
4556
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .advanced-settings-overlay,
4557
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .onboarding-overlay,
4558
+ :root[data-lt-theme="dark"] body.lattice-ref-chat #setup-overlay {
4559
+ background: rgba(2, 4, 18, 0.74);
4560
+ backdrop-filter: none;
4561
+ -webkit-backdrop-filter: none;
4562
+ }
4563
+
4564
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .workspace-modal,
4565
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .mode-modal,
4566
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .onboarding-card,
4567
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .wizard-card {
4568
+ background: linear-gradient(180deg, rgba(25, 25, 62, 0.99), rgba(18, 19, 48, 0.99));
4569
+ border-color: rgba(167, 139, 250, 0.24);
4570
+ box-shadow: 0 30px 90px rgba(0, 0, 0, 0.60);
4571
+ }
4572
+
4573
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .workspace-card,
4574
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .mode-card,
4575
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .onboarding-choice,
4576
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .onboarding-mode,
4577
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .recommendation-card,
4578
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .analysis-row,
4579
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .scan-row,
4580
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .rec-item,
4581
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .install-row,
4582
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .setup-log-row {
4583
+ background: rgba(35, 38, 79, 0.78);
4584
+ border-color: rgba(167, 139, 250, 0.20);
4585
+ color: var(--text);
4586
+ }
4587
+
4588
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .rec-item.checked {
4589
+ background: linear-gradient(135deg, rgba(52, 211, 153, 0.16), rgba(35, 38, 79, 0.86));
4590
+ border-color: rgba(52, 211, 153, 0.52);
4591
+ }
4592
+
4593
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .onboarding-step {
4594
+ color: rgba(226, 232, 255, 0.66);
4595
+ border-top-color: rgba(167, 139, 250, 0.20);
4596
+ }
4597
+
4598
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .onboarding-step.active,
4599
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .onboarding-step.done {
4600
+ color: var(--accent-2);
4601
+ border-top-color: var(--accent-2);
4602
+ }
4603
+
4604
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .wbtn-primary {
4605
+ background: linear-gradient(135deg, #8b5cf6, #22d3ee);
4606
+ color: #ffffff;
4607
+ }
4608
+
4609
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .wbtn-primary:hover {
4610
+ background: linear-gradient(135deg, #7c3aed, #06b6d4);
4611
+ }
4612
+
4613
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .mode-close,
4614
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .wizard-close {
4615
+ background: rgba(255, 255, 255, 0.06);
4616
+ border-color: rgba(167, 139, 250, 0.22);
4617
+ color: var(--muted);
4618
+ }
4619
+
4620
+ @media (max-width: 760px) {
4621
+ :root[data-lt-theme="dark"] body.lattice-ref-chat .app-layout .input-area {
4622
+ background:
4623
+ linear-gradient(0deg,
4624
+ rgba(11, 11, 30, 0.99) 0%,
4625
+ rgba(11, 11, 30, 0.94) 64%,
4626
+ rgba(11, 11, 30, 0.36) 86%,
4627
+ transparent 100%);
4628
+ }
4629
+ }