CaffeinatedCoding commited on
Commit
88eaa79
·
verified ·
1 Parent(s): 0430df4

Upload folder using huggingface_hub

Browse files
frontend/app.js CHANGED
@@ -7,7 +7,7 @@ let sidebarCollapsed = localStorage.getItem("sidebarCollapsed") === "true";
7
 
8
  const textarea = document.getElementById("query-input");
9
  const sendBtn = document.getElementById("send-btn");
10
- const messagesList = document.getElementById("messages-list");
11
 
12
  if (sidebarCollapsed) {
13
  document.getElementById("sidebar").classList.add("collapsed");
@@ -62,7 +62,7 @@ function switchSession(id) {
62
 
63
  function newChat() {
64
  activeSessionId = null;
65
- messagesList.innerHTML = "";
66
  showScreen("welcome");
67
  document.getElementById("topbar-title").textContent = "New Research Session";
68
  renderSessionsList();
@@ -85,7 +85,7 @@ function renderSessionsList() {
85
  function renderMessages() {
86
  const session = getActiveSession();
87
  if (!session) return;
88
- messagesList.innerHTML = "";
89
  session.messages.forEach(msg => {
90
  if (msg.role === "user") appendUserBubble(msg.text, false);
91
  else if (msg.role === "ai") appendAIBubble(msg.data, false);
@@ -155,7 +155,7 @@ function appendUserBubble(text, scroll = true) {
155
  const div = document.createElement("div");
156
  div.className = "message user";
157
  div.innerHTML = `<div class="bubble user">${escHtml(text)}</div>`;
158
- messagesList.appendChild(div);
159
  if (scroll) scrollBottom();
160
  }
161
 
@@ -180,7 +180,7 @@ function appendAIBubble(data, scroll = true) {
180
  ${latency}
181
  </div>
182
  </div>`;
183
- messagesList.appendChild(div);
184
  if (scroll) scrollBottom();
185
  }
186
 
@@ -188,7 +188,7 @@ function appendErrorBubble(text, scroll = true) {
188
  const div = document.createElement("div");
189
  div.className = "message ai";
190
  div.innerHTML = `<div class="bubble ai" style="border-left-color: var(--red);">⚠ ${escHtml(text)}</div>`;
191
- messagesList.appendChild(div);
192
  if (scroll) scrollBottom();
193
  }
194
 
@@ -202,7 +202,7 @@ function appendLoader() {
202
  <div class="dots"><span></span><span></span><span></span></div>
203
  Searching...
204
  </div>`;
205
- messagesList.appendChild(div);
206
  scrollBottom();
207
  return id;
208
  }
 
7
 
8
  const textarea = document.getElementById("query-input");
9
  const sendBtn = document.getElementById("send-btn");
10
+ const proceedings = document.getElementById("proceedings");
11
 
12
  if (sidebarCollapsed) {
13
  document.getElementById("sidebar").classList.add("collapsed");
 
62
 
63
  function newChat() {
64
  activeSessionId = null;
65
+ proceedings.innerHTML = "";
66
  showScreen("welcome");
67
  document.getElementById("topbar-title").textContent = "New Research Session";
68
  renderSessionsList();
 
85
  function renderMessages() {
86
  const session = getActiveSession();
87
  if (!session) return;
88
+ proceedings.innerHTML = "";
89
  session.messages.forEach(msg => {
90
  if (msg.role === "user") appendUserBubble(msg.text, false);
91
  else if (msg.role === "ai") appendAIBubble(msg.data, false);
 
155
  const div = document.createElement("div");
156
  div.className = "message user";
157
  div.innerHTML = `<div class="bubble user">${escHtml(text)}</div>`;
158
+ proceedings.appendChild(div);
159
  if (scroll) scrollBottom();
160
  }
161
 
 
180
  ${latency}
181
  </div>
182
  </div>`;
183
+ proceedings.appendChild(div);
184
  if (scroll) scrollBottom();
185
  }
186
 
 
188
  const div = document.createElement("div");
189
  div.className = "message ai";
190
  div.innerHTML = `<div class="bubble ai" style="border-left-color: var(--red);">⚠ ${escHtml(text)}</div>`;
191
+ proceedings.appendChild(div);
192
  if (scroll) scrollBottom();
193
  }
194
 
 
202
  <div class="dots"><span></span><span></span><span></span></div>
203
  Searching...
204
  </div>`;
205
+ proceedings.appendChild(div);
206
  scrollBottom();
207
  return id;
208
  }
frontend/index.html CHANGED
@@ -5,99 +5,168 @@
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
  <title>NyayaSetu — Indian Legal Research</title>
7
  <link rel="preconnect" href="https://fonts.googleapis.com">
8
- <link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,600;0,700;1,400&family=DM+Sans:wght@300;400;500;600&display=swap" rel="stylesheet">
9
  <link rel="stylesheet" href="/static/style.css">
10
  </head>
11
  <body>
12
  <div class="app-container">
13
 
14
- <!-- SIDEBAR -->
15
  <aside class="sidebar" id="sidebar">
 
16
  <div class="sidebar-header">
17
- <div class="brand">
18
- <span class="brand-icon">⚖</span>
19
- <div class="brand-text">
20
- <div class="brand-name">NyayaSetu</div>
21
- <div class="brand-sub">Legal Research</div>
22
- </div>
 
 
 
 
 
 
 
 
 
23
  </div>
24
- <button class="sidebar-toggle" onclick="toggleSidebar()"></button>
25
  </div>
26
 
27
- <button class="btn-primary" onclick="newChat()">+ New Session</button>
28
- <button class="btn-secondary" onclick="showAnalytics()">📊 Analytics</button>
29
- <button class="btn-secondary" onclick="window.location.href='/court/ui'"> Moot Court</button>
 
 
 
30
 
31
- <div class="sessions-header">SESSIONS</div>
32
- <div class="sessions-list" id="sessions-list">
33
- <div class="sessions-empty">No sessions</div>
 
 
 
 
 
 
34
  </div>
35
 
 
36
  <div class="sidebar-footer">
37
- <p class="disclaimer">⚠ Not legal advice</p>
38
- <p class="meta">Supreme Court of India · 1950–2024</p>
 
 
 
 
 
 
39
  </div>
40
  </aside>
41
 
42
- <!-- MAIN CONTENT -->
43
  <main class="main-content">
 
44
  <header class="topbar">
45
- <h1 class="topbar-title" id="topbar-title">New Research Session</h1>
46
- <div class="status-pill" id="status-pill">
 
 
 
47
  <span class="status-dot"></span>
48
  <span id="status-text">Ready</span>
49
  </div>
50
  </header>
51
 
52
- <!-- WELCOME SCREEN -->
53
  <section id="screen-welcome" class="screen active">
54
  <div class="welcome-container">
55
- <div class="welcome-icon">⚖</div>
56
- <h2>Ask Indian Law</h2>
57
- <p>Search across 26,688 Supreme Court judgments.<br>Every answer is cited. Every source is traceable.</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  <div class="suggestions">
59
- <button class="suggestion" onclick="usesuggestion(this)">What are fundamental rights?</button>
60
- <button class="suggestion" onclick="usesuggestion(this)">What is the right to privacy under Article 21?</button>
61
- <button class="suggestion" onclick="usesuggestion(this)">How does the Supreme Court define bail?</button>
62
- <button class="suggestion" onclick="usesuggestion(this)">What is the basic structure doctrine?</button>
63
- <button class="suggestion" onclick="usesuggestion(this)">What does Article 15 prohibit?</button>
64
- <button class="suggestion" onclick="usesuggestion(this)">How is freedom of speech limited?</button>
 
65
  </div>
66
  </div>
67
  </section>
68
 
69
- <!-- CHAT SCREEN -->
70
  <section id="screen-chat" class="screen">
71
  <div class="chat-area">
72
- <div class="messages" id="messages-list"></div>
 
 
 
 
73
  </div>
74
  </section>
75
 
76
- <!-- ANALYTICS SCREEN -->
77
  <section id="screen-analytics" class="screen">
78
  <div class="analytics-container">
79
- <h2>System Analytics</h2>
80
- <p>Live metrics from inference logs</p>
 
 
81
  <div class="stats-grid">
82
  <div class="stat-card">
 
83
  <div class="stat-value" id="stat-total">—</div>
84
  <div class="stat-label">Total Queries</div>
85
  </div>
86
  <div class="stat-card">
 
87
  <div class="stat-value" id="stat-verified">—</div>
88
- <div class="stat-label">Verified Rate</div>
89
  </div>
90
  <div class="stat-card">
 
91
  <div class="stat-value" id="stat-latency">—</div>
92
  <div class="stat-label">Avg Latency</div>
93
  </div>
94
  <div class="stat-card">
 
95
  <div class="stat-value" id="stat-ood">—</div>
96
  <div class="stat-label">Out-of-Domain</div>
97
  </div>
98
  <div class="stat-card">
 
99
  <div class="stat-value" id="stat-sources">—</div>
100
- <div class="stat-label">Avg Sources</div>
 
 
 
 
 
 
 
 
 
 
101
  </div>
102
  </div>
103
  </div>
 
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
  <title>NyayaSetu — Indian Legal Research</title>
7
  <link rel="preconnect" href="https://fonts.googleapis.com">
8
+ <link href="https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;0,500;0,600;0,700;1,400&family=Crimson+Text:ital,wght@0,400;0,600;1,400&family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
9
  <link rel="stylesheet" href="/static/style.css">
10
  </head>
11
  <body>
12
  <div class="app-container">
13
 
14
+ <!-- SIDEBAR - JUDICIAL PANEL -->
15
  <aside class="sidebar" id="sidebar">
16
+ <!-- Header with Judicial Seal -->
17
  <div class="sidebar-header">
18
+ <div class="judicial-seal">
19
+ <svg viewBox="0 0 100 100" class="seal-svg">
20
+ <circle cx="50" cy="50" r="48" fill="none" stroke="currentColor" stroke-width="2"/>
21
+ <circle cx="50" cy="50" r="42" fill="none" stroke="currentColor" stroke-width="1" opacity="0.5"/>
22
+ <!-- Scale/Balance symbol -->
23
+ <path d="M50 20 L35 45 L65 45 Z" fill="none" stroke="currentColor" stroke-width="1.5"/>
24
+ <line x1="35" y1="45" x2="65" y2="45" stroke="currentColor" stroke-width="2"/>
25
+ <circle cx="35" cy="55" r="3" fill="currentColor"/>
26
+ <circle cx="65" cy="55" r="3" fill="currentColor"/>
27
+ <text x="50" y="75" font-size="8" text-anchor="middle" font-weight="bold" letter-spacing="1">NYAYASETU</text>
28
+ </svg>
29
+ </div>
30
+ <div class="brand-text">
31
+ <div class="brand-name">NYAYA SETU</div>
32
+ <div class="brand-sub">Legal Research Registry</div>
33
  </div>
34
+ <button class="sidebar-toggle" onclick="toggleSidebar()"></button>
35
  </div>
36
 
37
+ <!-- Primary Actions -->
38
+ <div class="action-group">
39
+ <button class="btn-primary" onclick="newChat()"> New Petition</button>
40
+ <button class="btn-secondary" onclick="showAnalytics()">📋 Case Analytics</button>
41
+ <button class="btn-secondary" onclick="window.location.href='/court/ui'">⚔ Moot Court</button>
42
+ </div>
43
 
44
+ <!-- Case Registry -->
45
+ <div class="registry-section">
46
+ <div class="registry-header">
47
+ <span class="registry-title">CASE REGISTRY</span>
48
+ <div class="registry-divider"></div>
49
+ </div>
50
+ <div class="sessions-list" id="sessions-list">
51
+ <div class="sessions-empty">No active cases</div>
52
+ </div>
53
  </div>
54
 
55
+ <!-- Sidebar Footer - Court Info -->
56
  <div class="sidebar-footer">
57
+ <div class="court-info">
58
+ <p class="disclaimer"> DISCLAIMER</p>
59
+ <p class="disclaimer-text">Not legal advice. Consult qualified advocate.</p>
60
+ </div>
61
+ <div class="court-meta">
62
+ <p class="meta-text">Supreme Court of India</p>
63
+ <p class="meta-text">Established 1950</p>
64
+ </div>
65
  </div>
66
  </aside>
67
 
68
+ <!-- MAIN CONTENT AREA -->
69
  <main class="main-content">
70
+ <!-- Header/Bench -->
71
  <header class="topbar">
72
+ <div class="topbar-left">
73
+ <h1 class="topbar-title" id="topbar-title">Research Session</h1>
74
+ <p class="topbar-subtitle" id="topbar-subtitle">Indian Legal Research System</p>
75
+ </div>
76
+ <div class="status-indicator" id="status-pill">
77
  <span class="status-dot"></span>
78
  <span id="status-text">Ready</span>
79
  </div>
80
  </header>
81
 
82
+ <!-- Welcome/Research Section -->
83
  <section id="screen-welcome" class="screen active">
84
  <div class="welcome-container">
85
+ <div class="welcome-graphic">
86
+ <svg viewBox="0 0 200 200" class="welcome-icon">
87
+ <!-- Judge's Bench -->
88
+ <rect x="20" y="120" width="160" height="40" fill="none" stroke="currentColor" stroke-width="2" rx="2"/>
89
+ <!-- Gavel -->
90
+ <rect x="85" y="30" width="30" height="50" fill="none" stroke="currentColor" stroke-width="2"/>
91
+ <circle cx="100" cy="20" r="12" fill="currentColor" opacity="0.3"/>
92
+ <!-- Scales -->
93
+ <line x1="50" y1="80" x2="50" y2="120" stroke="currentColor" stroke-width="2"/>
94
+ <line x1="35" y1="100" x2="65" y2="100" stroke="currentColor" stroke-width="2"/>
95
+ <circle cx="35" cy="105" r="6" fill="none" stroke="currentColor" stroke-width="1.5"/>
96
+ <circle cx="65" cy="105" r="6" fill="none" stroke="currentColor" stroke-width="1.5"/>
97
+ <!-- Books -->
98
+ <rect x="130" y="70" width="15" height="35" fill="currentColor" opacity="0.2" stroke="currentColor" stroke-width="1.5"/>
99
+ <rect x="148" y="65" width="15" height="40" fill="currentColor" opacity="0.2" stroke="currentColor" stroke-width="1.5"/>
100
+ </svg>
101
+ </div>
102
+ <h2>Indian Legal Research</h2>
103
+ <p class="welcome-subtitle">Query 26,688 Supreme Court Judgments<br><span class="text-muted">Cited sources | Verified citations | Complete legal brief</span></p>
104
+
105
  <div class="suggestions">
106
+ <div class="suggestion-label">Sample Petitions:</div>
107
+ <button class="suggestion" onclick="usesuggestion(this)">Fundamental Rights Definition & Scope</button>
108
+ <button class="suggestion" onclick="usesuggestion(this)">Right to Privacy under Article 21</button>
109
+ <button class="suggestion" onclick="usesuggestion(this)">Bail Legal Framework & Supreme Court Tests</button>
110
+ <button class="suggestion" onclick="usesuggestion(this)">Basic Structure Doctrine Implications</button>
111
+ <button class="suggestion" onclick="usesuggestion(this)">Article 15 Non-discrimination Doctrine</button>
112
+ <button class="suggestion" onclick="usesuggestion(this)">Freedom of Speech — Reasonable Restrictions</button>
113
  </div>
114
  </div>
115
  </section>
116
 
117
+ <!-- Chat/Case Proceedings Section -->
118
  <section id="screen-chat" class="screen">
119
  <div class="chat-area">
120
+ <div class="proceedings" id="messages-list"></div>
121
+ </div>
122
+ <div class="input-bench">
123
+ <textarea id="query-input" placeholder="Address the court... (Enter to submit, Shift+Enter for new line)" class="query-input"></textarea>
124
+ <button id="send-btn" class="btn-submit" onclick="submitQuery()">📤 Submit Petition</button>
125
  </div>
126
  </section>
127
 
128
+ <!-- Analytics Dashboard -->
129
  <section id="screen-analytics" class="screen">
130
  <div class="analytics-container">
131
+ <div class="analytics-header">
132
+ <h2>Case Analytics & System Metrics</h2>
133
+ <p>Live inference data from NyayaSetu research engine</p>
134
+ </div>
135
  <div class="stats-grid">
136
  <div class="stat-card">
137
+ <div class="stat-icon">📊</div>
138
  <div class="stat-value" id="stat-total">—</div>
139
  <div class="stat-label">Total Queries</div>
140
  </div>
141
  <div class="stat-card">
142
+ <div class="stat-icon">✓</div>
143
  <div class="stat-value" id="stat-verified">—</div>
144
+ <div class="stat-label">Verified Answers</div>
145
  </div>
146
  <div class="stat-card">
147
+ <div class="stat-icon">⚡</div>
148
  <div class="stat-value" id="stat-latency">—</div>
149
  <div class="stat-label">Avg Latency</div>
150
  </div>
151
  <div class="stat-card">
152
+ <div class="stat-icon">🔍</div>
153
  <div class="stat-value" id="stat-ood">—</div>
154
  <div class="stat-label">Out-of-Domain</div>
155
  </div>
156
  <div class="stat-card">
157
+ <div class="stat-icon">📚</div>
158
  <div class="stat-value" id="stat-sources">—</div>
159
+ <div class="stat-label">Avg Sources Used</div>
160
+ </div>
161
+ </div>
162
+ </div>
163
+ </section>
164
+ </main>
165
+ </div>
166
+
167
+ <script src="/static/app.js"></script>
168
+ </body>
169
+ </html>
170
  </div>
171
  </div>
172
  </div>
frontend/style.css CHANGED
@@ -1,164 +1,219 @@
1
- /* ── RESET & CORE ── */
 
 
 
 
2
  * { margin: 0; padding: 0; box-sizing: border-box; }
3
 
4
  :root {
5
- --navy: #0f1724;
6
- --navy-2: #161f30;
7
- --navy-3: #1c2840;
8
- --navy-4: #243050;
9
- --gold: #c8a84b;
10
- --gold-dim: #9a7d34;
11
- --gold-glow: rgba(200,168,75,0.15);
12
- --text-1: #e8e2d4;
13
- --text-2: #9ba8bc;
14
- --text-3: #576070;
15
- --border: rgba(255,255,255,0.07);
16
- --border-gold: rgba(200,168,75,0.3);
17
- --green: #4caf82;
18
- --red: #e05252;
 
 
 
 
 
 
19
  }
20
 
21
  html, body { height: 100%; }
22
 
23
  body {
24
- font-family: 'DM Sans', sans-serif;
25
- background: var(--navy);
26
- color: var(--text-1);
27
  font-size: 14px;
28
  line-height: 1.6;
 
29
  }
30
 
31
- /* ── LAYOUT ── */
 
 
 
32
  .app-container {
33
  display: flex;
34
  height: 100vh;
35
  overflow: hidden;
 
36
  }
37
 
38
- /* ── SIDEBAR ── */
 
 
 
39
  .sidebar {
40
- width: 272px;
41
- background: var(--navy-2);
42
- border-right: 1px solid var(--border);
43
  display: flex;
44
  flex-direction: column;
45
- padding: 16px;
46
- gap: 12px;
47
  overflow-y: auto;
48
  transition: width 0.3s ease;
 
 
49
  }
50
 
51
  .sidebar.collapsed {
52
- width: 60px;
53
  }
54
 
55
  .sidebar.collapsed .brand-text,
56
- .sidebar.collapsed .btn-primary span,
57
- .sidebar.collapsed .btn-secondary span,
58
- .sidebar.collapsed .sessions-header,
59
  .sidebar.collapsed .sidebar-footer {
60
  display: none;
61
  }
62
 
 
63
  .sidebar-header {
64
  display: flex;
65
  align-items: center;
66
  justify-content: space-between;
67
- gap: 8px;
68
- padding-bottom: 12px;
69
- border-bottom: 1px solid var(--border);
70
  }
71
 
72
- .brand {
73
- display: flex;
74
- align-items: center;
75
- gap: 10px;
76
- flex: 1;
77
  }
78
 
79
- .brand-icon {
80
- font-size: 24px;
 
 
 
 
 
 
81
  }
82
 
83
  .brand-name {
84
- font-family: 'Cormorant Garamond', serif;
85
  font-size: 18px;
86
  font-weight: 700;
87
- color: var(--gold);
 
88
  line-height: 1.1;
89
  }
90
 
91
  .brand-sub {
92
  font-size: 10px;
93
- color: var(--text-3);
94
  text-transform: uppercase;
95
- letter-spacing: 0.5px;
 
96
  }
97
 
98
  .sidebar-toggle {
99
  background: none;
100
- border: none;
101
- color: var(--text-2);
102
- font-size: 20px;
103
  cursor: pointer;
104
- padding: 4px;
105
  border-radius: 4px;
106
  transition: all 0.2s ease;
 
107
  }
108
 
109
  .sidebar-toggle:hover {
110
- background: var(--navy-3);
111
- color: var(--text-1);
 
 
 
 
 
 
 
112
  }
113
 
114
- /* ── BUTTONS ── */
115
  .btn-primary, .btn-secondary {
116
  width: 100%;
117
- padding: 10px 12px;
118
- border-radius: 8px;
119
- border: 1px solid var(--border);
120
- font-family: 'DM Sans', sans-serif;
121
  font-size: 12px;
122
- font-weight: 500;
123
  cursor: pointer;
124
  display: flex;
125
  align-items: center;
126
- gap: 6px;
127
  transition: all 0.2s ease;
 
 
128
  }
129
 
130
  .btn-primary {
131
- background: var(--gold-glow);
132
- border-color: var(--border-gold);
133
- color: var(--gold);
134
  }
135
 
136
  .btn-primary:hover {
137
- background: rgba(200,168,75,0.25);
138
- border-color: var(--gold);
 
139
  }
140
 
141
  .btn-secondary {
142
- background: transparent;
143
- color: var(--text-2);
144
  }
145
 
146
  .btn-secondary:hover {
147
- background: var(--navy-3);
148
- border-color: var(--border-gold);
149
- color: var(--text-1);
150
- transform: none;
151
  }
152
 
153
- /* ── SESSIONS ── */
154
- .sessions-header {
155
- font-size: 9px;
156
- font-weight: 600;
157
- color: var(--text-3);
158
- letter-spacing: 1px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
159
  text-transform: uppercase;
160
- padding: 8px 0 4px;
161
- margin-top: 8px;
 
 
 
 
 
162
  }
163
 
164
  .sessions-list {
@@ -166,110 +221,165 @@ body {
166
  overflow-y: auto;
167
  display: flex;
168
  flex-direction: column;
169
- gap: 4px;
170
  }
171
 
172
  .sessions-empty {
173
- font-size: 12px;
174
- color: var(--text-3);
175
  font-style: italic;
176
  padding: 12px 8px;
 
177
  }
178
 
179
  .session-item {
180
- padding: 8px 10px;
181
- border-radius: 6px;
182
- background: transparent;
183
  border: 1px solid transparent;
184
  font-size: 12px;
185
- color: var(--text-2);
186
  cursor: pointer;
187
  transition: all 0.2s ease;
 
 
 
188
  }
189
 
190
  .session-item:hover {
191
- background: var(--navy-3);
 
192
  }
193
 
194
  .session-item.active {
195
- background: var(--navy-4);
196
- border-color: var(--border-gold);
197
- color: var(--text-1);
198
  }
199
 
 
200
  .sidebar-footer {
201
- padding-top: 12px;
202
- border-top: 1px solid var(--border);
203
- font-size: 10px;
204
- color: var(--text-3);
205
- line-height: 1.4;
 
 
206
  }
207
 
208
  .disclaimer {
209
- margin-bottom: 6px;
 
 
 
 
 
 
 
 
 
 
 
210
  }
211
 
212
- .meta {
213
  font-size: 9px;
 
 
 
 
 
214
  }
215
 
216
- /* ── MAIN CONTENT ── */
 
 
 
217
  .main-content {
218
  flex: 1;
219
  display: flex;
220
  flex-direction: column;
221
  overflow: hidden;
 
222
  }
223
 
224
- /* ── TOPBAR ── */
225
  .topbar {
226
- height: 56px;
227
- border-bottom: 1px solid var(--border);
228
  display: flex;
229
  align-items: center;
230
  justify-content: space-between;
231
- padding: 0 24px;
232
  flex-shrink: 0;
233
- background: var(--navy);
 
 
 
 
 
234
  }
235
 
236
  .topbar-title {
237
- font-family: 'Cormorant Garamond', serif;
238
- font-size: 17px;
239
- font-weight: 600;
240
- color: var(--text-1);
 
 
 
 
 
 
 
 
 
 
241
  }
242
 
243
- .status-pill {
244
  display: flex;
245
  align-items: center;
246
- gap: 6px;
247
- background: var(--navy-2);
248
- border: 1px solid var(--border);
249
- border-radius: 20px;
250
- padding: 5px 12px;
251
- font-size: 12px;
252
- color: var(--text-2);
 
 
 
253
  }
254
 
255
  .status-dot {
256
- width: 6px;
257
- height: 6px;
258
  border-radius: 50%;
259
- background: var(--green);
 
 
 
 
 
 
260
  }
261
 
262
- .status-pill.loading .status-dot {
263
- background: var(--gold);
264
- animation: pulse 1s infinite;
265
  }
266
 
267
  @keyframes pulse {
268
  0%, 100% { opacity: 1; }
269
- 50% { opacity: 0.3; }
270
  }
271
 
272
- /* ── SCREENS ── */
 
 
 
273
  .screen {
274
  display: none;
275
  flex: 1;
@@ -280,87 +390,128 @@ body {
280
  display: flex;
281
  }
282
 
283
- /* ── WELCOME ── */
 
 
 
284
  .welcome-container {
285
  flex: 1;
286
  display: flex;
287
  flex-direction: column;
288
  align-items: center;
289
  justify-content: center;
290
- padding: 40px 24px;
291
  text-align: center;
 
 
 
 
 
 
 
 
 
292
  }
293
 
294
  .welcome-icon {
295
- font-size: 48px;
296
- margin-bottom: 16px;
297
- opacity: 0.7;
298
  }
299
 
300
  .welcome-container h2 {
301
- font-family: 'Cormorant Garamond', serif;
302
- font-size: 40px;
303
  font-weight: 700;
304
  margin-bottom: 12px;
305
- color: var(--text-1);
 
306
  }
307
 
308
  .welcome-container > p {
309
- color: var(--text-2);
310
- margin-bottom: 32px;
311
- max-width: 600px;
 
 
 
 
 
 
 
 
 
312
  }
313
 
 
314
  .suggestions {
315
- display: grid;
316
- grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
317
  gap: 12px;
318
- max-width: 800px;
 
 
 
 
 
 
 
 
 
 
 
319
  }
320
 
321
  .suggestion {
322
- padding: 12px 14px;
323
- background: var(--navy-2);
324
- border: 1px solid var(--border);
325
- border-radius: 8px;
326
- color: var(--text-2);
327
- font-family: 'DM Sans', sans-serif;
328
- font-size: 12px;
329
  cursor: pointer;
330
  text-align: left;
331
- line-height: 1.4;
332
  transition: all 0.2s ease;
 
333
  }
334
 
335
  .suggestion:hover {
336
- background: var(--navy-3);
337
  border-color: var(--border-gold);
338
- color: var(--text-1);
 
 
339
  }
340
 
341
- /* ── CHAT ── */
 
 
 
342
  .chat-area {
343
  flex: 1;
344
  overflow-y: auto;
345
  display: flex;
346
  flex-direction: column;
347
- padding: 20px 0;
 
348
  }
349
 
350
- .messages {
351
  width: 100%;
352
- max-width: 900px;
353
  margin: 0 auto;
354
- padding: 0 24px;
355
  display: flex;
356
  flex-direction: column;
357
- gap: 16px;
358
  }
359
 
360
  .message {
361
  display: flex;
362
  flex-direction: column;
363
- gap: 4px;
364
  animation: slideIn 0.3s ease;
365
  }
366
 
@@ -377,45 +528,49 @@ body {
377
  align-items: flex-start;
378
  }
379
 
 
380
  .bubble {
381
- padding: 12px 16px;
382
- border-radius: 12px;
383
- max-width: 70%;
384
  word-wrap: break-word;
385
  overflow-wrap: break-word;
386
  font-size: 13px;
387
- line-height: 1.5;
 
388
  }
389
 
390
  .bubble.user {
391
- background: var(--navy-4);
392
- border: 1px solid var(--border);
393
- color: var(--text-1);
 
394
  }
395
 
396
  .bubble.ai {
397
- background: var(--navy-2);
398
- border: 1px solid var(--border);
399
- border-left: 3px solid var(--gold);
400
- color: var(--text-1);
401
  max-width: 85%;
 
402
  }
403
 
404
  .bubble p {
405
- margin-bottom: 8px;
406
  }
407
 
408
  .bubble p:last-child {
409
  margin-bottom: 0;
410
  }
411
 
 
412
  .bubble-meta {
413
  display: flex;
414
  align-items: center;
415
  gap: 8px;
416
- margin-top: 8px;
417
- padding-top: 8px;
418
- border-top: 1px solid var(--border);
419
  font-size: 10px;
420
  flex-wrap: wrap;
421
  }
@@ -424,187 +579,253 @@ body {
424
  display: inline-flex;
425
  align-items: center;
426
  gap: 4px;
427
- padding: 2px 8px;
428
- border-radius: 12px;
429
- font-weight: 600;
 
 
 
430
  }
431
 
432
  .badge.verified {
433
- background: rgba(76,175,130,0.15);
434
- color: var(--green);
 
435
  }
436
 
437
  .badge.unverified {
438
- background: rgba(224,82,82,0.15);
439
- color: #e8a060;
 
440
  }
441
 
442
  .sources-btn {
443
- background: var(--gold-glow);
444
  border: 1px solid var(--border-gold);
445
- color: var(--gold);
446
- padding: 2px 8px;
447
- border-radius: 12px;
448
  cursor: pointer;
449
- font-size: 10px;
450
- font-weight: 500;
 
 
451
  transition: all 0.2s ease;
452
  }
453
 
454
  .sources-btn:hover {
455
- background: rgba(200,168,75,0.25);
 
 
456
  }
457
 
 
458
  .bubble.loading {
459
- color: var(--text-3);
460
  }
461
 
462
  .dots {
463
  display: flex;
464
- gap: 4px;
465
  }
466
 
467
  .dots span {
468
- width: 5px;
469
- height: 5px;
470
  border-radius: 50%;
471
- background: var(--gold);
472
- animation: bounce 1.2s infinite;
473
  }
474
 
475
  .dots span:nth-child(2) { animation-delay: 0.2s; }
476
  .dots span:nth-child(3) { animation-delay: 0.4s; }
477
 
478
  @keyframes bounce {
479
- 0%, 60%, 100% { transform: translateY(0); opacity: 0.3; }
480
- 30% { transform: translateY(-6px); opacity: 1; }
481
  }
482
 
483
- /* ── ANALYTICS ── */
 
 
 
484
  .analytics-container {
485
  flex: 1;
486
  overflow-y: auto;
487
- padding: 32px 24px;
488
- max-width: 1200px;
489
  margin: 0 auto;
490
  }
491
 
492
- .analytics-container h2 {
493
- font-family: 'Cormorant Garamond', serif;
494
- font-size: 28px;
495
  font-weight: 700;
496
  margin-bottom: 8px;
 
 
497
  }
498
 
499
- .analytics-container > p {
500
- color: var(--text-2);
501
- margin-bottom: 24px;
 
 
 
502
  }
503
 
504
  .stats-grid {
505
  display: grid;
506
- grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
507
- gap: 12px;
508
- margin-bottom: 24px;
509
  }
510
 
511
  .stat-card {
512
- background: var(--navy-2);
513
- border: 1px solid var(--border);
514
- border-radius: 8px;
515
- padding: 16px 12px;
516
  text-align: center;
 
 
 
 
 
 
 
 
 
 
 
 
 
517
  }
518
 
519
  .stat-value {
520
- font-size: 20px;
521
- font-weight: 600;
522
- color: var(--gold);
523
- margin-bottom: 6px;
 
524
  }
525
 
526
  .stat-label {
527
  font-size: 10px;
528
- color: var(--text-3);
529
  text-transform: uppercase;
530
- letter-spacing: 0.5px;
 
531
  }
532
 
533
- /* ── INPUT ── */
534
- .input-area {
535
- padding: 12px 20px 16px;
536
- background: linear-gradient(transparent, var(--navy) 30%);
537
- border-top: 1px solid var(--border);
538
- flex-shrink: 0;
539
- }
540
 
541
- .input-wrapper {
 
 
 
 
542
  display: flex;
543
- gap: 8px;
544
- background: var(--navy-2);
545
- border: 1px solid var(--border);
546
- border-radius: 10px;
547
- padding: 8px 12px;
548
- transition: border-color 0.2s ease;
549
- max-width: 900px;
550
  margin: 0 auto;
551
  }
552
 
553
- .input-wrapper:focus-within {
554
- border-color: var(--border-gold);
555
- }
556
-
557
  .query-input {
558
  flex: 1;
559
- background: none;
560
- border: none;
 
561
  outline: none;
562
- font-family: 'DM Sans', sans-serif;
563
- font-size: 14px;
564
- color: var(--text-1);
 
565
  resize: none;
566
- max-height: 120px;
567
  line-height: 1.5;
 
 
 
 
 
 
568
  }
569
 
570
  .query-input::placeholder {
571
- color: var(--text-3);
 
572
  }
573
 
574
- .send-btn {
575
- width: 36px;
576
- height: 36px;
577
- background: var(--gold);
578
- border: none;
579
- border-radius: 6px;
580
- color: var(--navy);
581
- font-size: 20px;
 
582
  cursor: pointer;
 
 
 
 
583
  display: flex;
584
  align-items: center;
585
- justify-content: center;
586
- flex-shrink: 0;
587
- transition: background 0.2s ease;
588
  }
589
 
590
- .send-btn:hover {
591
- background: #dbb95c;
 
 
592
  }
593
 
594
- .send-btn:disabled {
595
- background: var(--navy-4);
596
- color: var(--text-3);
597
  cursor: not-allowed;
 
598
  }
599
 
600
- .disclaimer-line {
601
- text-align: center;
602
- font-size: 10px;
603
- color: var(--text-3);
604
- margin-top: 6px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
605
  }
606
 
607
- /* ── RESPONSIVE ── */
608
  @media (max-width: 768px) {
609
  .app-container {
610
  flex-direction: column;
@@ -612,12 +833,71 @@ body {
612
 
613
  .sidebar {
614
  width: 100%;
615
- max-height: 40vh;
616
  border-right: none;
617
- border-bottom: 1px solid var(--border);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
618
  }
619
 
620
- .messages {
 
 
 
 
 
621
  padding: 0 16px;
622
  }
623
 
@@ -625,7 +905,134 @@ body {
625
  max-width: 90%;
626
  }
627
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
628
  .suggestions {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
629
  grid-template-columns: 1fr;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
630
  }
631
  }
 
1
+ /* ═══════════════════════════════════════════════════════════════
2
+ NYAYA SETU — COURTROOM LEGAL RESEARCH INTERFACE
3
+ Professional judicial aesthetic with formal legal typography
4
+ ═══════════════════════════════════════════════════════════════ */
5
+
6
  * { margin: 0; padding: 0; box-sizing: border-box; }
7
 
8
  :root {
9
+ /* Judicial Color Palette */
10
+ --judicial-dark: #1a1410; /* Deep wood/bench */
11
+ --judicial-navy: #1c233e; /* Formal navy */
12
+ --judicial-maroon: #621e3d; /* Judicial accent */
13
+ --seal-gold: #d4af37; /* Official seal gold */
14
+ --seal-gold-dim: #a8860a; /* Dimmed gold */
15
+ --parchment: #f4ede5; /* Legal document white */
16
+ --text-dark: #1a1410; /* Primary text */
17
+ --text-medium: #4a4a4a; /* Secondary text */
18
+ --text-light: #7a7a7a; /* Tertiary text */
19
+
20
+ /* Borders & Dividers */
21
+ --border-dark: rgba(26, 20, 16, 0.1);
22
+ --border-accent: rgba(212, 175, 55, 0.2);
23
+ --border-gold: rgba(212, 175, 55, 0.5);
24
+
25
+ /* Status Colors */
26
+ --verified-green: #2d5d3f;
27
+ --attention-red: #8b3e3e;
28
+ --neutral-gray: #6b5f52;
29
  }
30
 
31
  html, body { height: 100%; }
32
 
33
  body {
34
+ font-family: 'Lora', serif;
35
+ background: linear-gradient(135deg, #f4ede5 0%, #e8e0d8 100%);
36
+ color: var(--text-dark);
37
  font-size: 14px;
38
  line-height: 1.6;
39
+ -webkit-font-smoothing: antialiased;
40
  }
41
 
42
+ /* ═════════════════════════════════════════
43
+ LAYOUT STRUCTURE
44
+ ═════════════════════════════════════════ */
45
+
46
  .app-container {
47
  display: flex;
48
  height: 100vh;
49
  overflow: hidden;
50
+ background: #f4ede5;
51
  }
52
 
53
+ /* ═════════════════════════════════════════
54
+ SIDEBAR / JUDICIAL REGISTRY PANEL
55
+ ═════════════════════════════════════════ */
56
+
57
  .sidebar {
58
+ width: 280px;
59
+ background: linear-gradient(180deg, #2c221a 0%, #1a1410 100%);
60
+ border-right: 3px solid var(--seal-gold);
61
  display: flex;
62
  flex-direction: column;
63
+ padding: 20px;
64
+ gap: 16px;
65
  overflow-y: auto;
66
  transition: width 0.3s ease;
67
+ color: #e8d7c3;
68
+ box-shadow: inset -2px 0 8px rgba(0, 0, 0, 0.3);
69
  }
70
 
71
  .sidebar.collapsed {
72
+ width: 70px;
73
  }
74
 
75
  .sidebar.collapsed .brand-text,
76
+ .sidebar.collapsed .action-group,
77
+ .sidebar.collapsed .registry-section,
 
78
  .sidebar.collapsed .sidebar-footer {
79
  display: none;
80
  }
81
 
82
+ /* ── Judicial Seal Header ── */
83
  .sidebar-header {
84
  display: flex;
85
  align-items: center;
86
  justify-content: space-between;
87
+ gap: 12px;
88
+ padding-bottom: 16px;
89
+ border-bottom: 2px solid var(--border-gold);
90
  }
91
 
92
+ .judicial-seal {
93
+ width: 48px;
94
+ height: 48px;
95
+ color: var(--seal-gold);
96
+ flex-shrink: 0;
97
  }
98
 
99
+ .seal-svg {
100
+ width: 100%;
101
+ height: 100%;
102
+ filter: drop-shadow(0 2px 4px rgba(212, 175, 55, 0.3));
103
+ }
104
+
105
+ .brand-text {
106
+ flex: 1;
107
  }
108
 
109
  .brand-name {
110
+ font-family: 'Crimson Text', serif;
111
  font-size: 18px;
112
  font-weight: 700;
113
+ color: var(--seal-gold);
114
+ letter-spacing: 2px;
115
  line-height: 1.1;
116
  }
117
 
118
  .brand-sub {
119
  font-size: 10px;
120
+ color: #a89968;
121
  text-transform: uppercase;
122
+ letter-spacing: 1px;
123
+ margin-top: 2px;
124
  }
125
 
126
  .sidebar-toggle {
127
  background: none;
128
+ border: 1px solid var(--border-gold);
129
+ color: var(--seal-gold);
130
+ font-size: 18px;
131
  cursor: pointer;
132
+ padding: 6px 8px;
133
  border-radius: 4px;
134
  transition: all 0.2s ease;
135
+ flex-shrink: 0;
136
  }
137
 
138
  .sidebar-toggle:hover {
139
+ background: rgba(212, 175, 55, 0.1);
140
+ border-color: var(--seal-gold);
141
+ }
142
+
143
+ /* ── Action Buttons ── */
144
+ .action-group {
145
+ display: flex;
146
+ flex-direction: column;
147
+ gap: 8px;
148
  }
149
 
 
150
  .btn-primary, .btn-secondary {
151
  width: 100%;
152
+ padding: 11px 14px;
153
+ border-radius: 4px;
154
+ border: 1px solid var(--border-gold);
155
+ font-family: 'Lora', serif;
156
  font-size: 12px;
157
+ font-weight: 600;
158
  cursor: pointer;
159
  display: flex;
160
  align-items: center;
161
+ gap: 7px;
162
  transition: all 0.2s ease;
163
+ text-transform: uppercase;
164
+ letter-spacing: 0.5px;
165
  }
166
 
167
  .btn-primary {
168
+ background: linear-gradient(135deg, var(--seal-gold), #c9a535);
169
+ border-color: var(--seal-gold);
170
+ color: var(--text-dark);
171
  }
172
 
173
  .btn-primary:hover {
174
+ background: linear-gradient(135deg, #e8c547, #d4af37);
175
+ box-shadow: 0 4px 12px rgba(212, 175, 55, 0.25);
176
+ transform: translateY(-1px);
177
  }
178
 
179
  .btn-secondary {
180
+ background: rgba(212, 175, 55, 0.08);
181
+ color: #d4af37;
182
  }
183
 
184
  .btn-secondary:hover {
185
+ background: rgba(212, 175, 55, 0.15);
186
+ border-color: var(--seal-gold);
 
 
187
  }
188
 
189
+ /* ── Case Registry ── */
190
+ .registry-section {
191
+ flex: 1;
192
+ display: flex;
193
+ flex-direction: column;
194
+ min-height: 200px;
195
+ }
196
+
197
+ .registry-header {
198
+ display: flex;
199
+ align-items: center;
200
+ gap: 8px;
201
+ margin-bottom: 12px;
202
+ padding-top: 12px;
203
+ }
204
+
205
+ .registry-title {
206
+ font-size: 10px;
207
+ font-weight: 700;
208
+ color: #a89968;
209
  text-transform: uppercase;
210
+ letter-spacing: 1.5px;
211
+ }
212
+
213
+ .registry-divider {
214
+ flex: 1;
215
+ height: 1px;
216
+ background: linear-gradient(90deg, transparent, var(--seal-gold), transparent);
217
  }
218
 
219
  .sessions-list {
 
221
  overflow-y: auto;
222
  display: flex;
223
  flex-direction: column;
224
+ gap: 6px;
225
  }
226
 
227
  .sessions-empty {
228
+ font-size: 11px;
229
+ color: #8b7f75;
230
  font-style: italic;
231
  padding: 12px 8px;
232
+ text-align: center;
233
  }
234
 
235
  .session-item {
236
+ padding: 10px 12px;
237
+ border-radius: 3px;
238
+ background: rgba(212, 175, 55, 0.05);
239
  border: 1px solid transparent;
240
  font-size: 12px;
241
+ color: #d4cfc9;
242
  cursor: pointer;
243
  transition: all 0.2s ease;
244
+ text-overflow: ellipsis;
245
+ overflow: hidden;
246
+ white-space: nowrap;
247
  }
248
 
249
  .session-item:hover {
250
+ background: rgba(212, 175, 55, 0.12);
251
+ border-color: var(--border-gold);
252
  }
253
 
254
  .session-item.active {
255
+ background: rgba(212, 175, 55, 0.2);
256
+ border-color: var(--seal-gold);
257
+ color: var(--seal-gold);
258
  }
259
 
260
+ /* ── Sidebar Footer ── */
261
  .sidebar-footer {
262
+ padding-top: 16px;
263
+ border-top: 1px solid var(--border-gold);
264
+ text-align: center;
265
+ }
266
+
267
+ .court-info {
268
+ margin-bottom: 12px;
269
  }
270
 
271
  .disclaimer {
272
+ font-size: 10px;
273
+ color: #d4a574;
274
+ font-weight: 600;
275
+ text-transform: uppercase;
276
+ letter-spacing: 1px;
277
+ margin-bottom: 4px;
278
+ }
279
+
280
+ .disclaimer-text {
281
+ font-size: 9px;
282
+ color: #a89968;
283
+ line-height: 1.4;
284
  }
285
 
286
+ .court-meta {
287
  font-size: 9px;
288
+ color: #8b7f75;
289
+ }
290
+
291
+ .meta-text {
292
+ margin: 1px 0;
293
  }
294
 
295
+ /* ═════════════════════════════════════════
296
+ MAIN CONTENT AREA
297
+ ═════════════════════════════════════════ */
298
+
299
  .main-content {
300
  flex: 1;
301
  display: flex;
302
  flex-direction: column;
303
  overflow: hidden;
304
+ background: #f4ede5;
305
  }
306
 
307
+ /* ── Top Bar / Bench Header ── */
308
  .topbar {
309
+ height: 70px;
310
+ border-bottom: 3px double var(--seal-gold);
311
  display: flex;
312
  align-items: center;
313
  justify-content: space-between;
314
+ padding: 12px 32px;
315
  flex-shrink: 0;
316
+ background: linear-gradient(180deg, #faf6f1 0%, #f4ede5 100%);
317
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
318
+ }
319
+
320
+ .topbar-left {
321
+ flex: 1;
322
  }
323
 
324
  .topbar-title {
325
+ font-family: 'Crimson Text', serif;
326
+ font-size: 28px;
327
+ font-weight: 700;
328
+ color: var(--text-dark);
329
+ letter-spacing: 1px;
330
+ }
331
+
332
+ .topbar-subtitle {
333
+ font-family: 'Lora', serif;
334
+ font-size: 11px;
335
+ color: var(--text-light);
336
+ text-transform: uppercase;
337
+ letter-spacing: 1px;
338
+ margin-top: 2px;
339
  }
340
 
341
+ .status-indicator {
342
  display: flex;
343
  align-items: center;
344
+ gap: 8px;
345
+ background: rgba(45, 93, 63, 0.1);
346
+ border: 1px solid rgba(45, 93, 63, 0.3);
347
+ border-radius: 3px;
348
+ padding: 7px 14px;
349
+ font-size: 11px;
350
+ color: var(--verified-green);
351
+ font-weight: 600;
352
+ text-transform: uppercase;
353
+ letter-spacing: 0.5px;
354
  }
355
 
356
  .status-dot {
357
+ width: 7px;
358
+ height: 7px;
359
  border-radius: 50%;
360
+ background: var(--verified-green);
361
+ }
362
+
363
+ .status-indicator.loading {
364
+ background: rgba(212, 175, 55, 0.1);
365
+ color: var(--seal-gold-dim);
366
+ border-color: var(--border-gold);
367
  }
368
 
369
+ .status-indicator.loading .status-dot {
370
+ background: var(--seal-gold);
371
+ animation: pulse 1.2s infinite;
372
  }
373
 
374
  @keyframes pulse {
375
  0%, 100% { opacity: 1; }
376
+ 50% { opacity: 0.4; }
377
  }
378
 
379
+ /* ═════════════════════════════════════════
380
+ SCREEN SECTIONS
381
+ ═════════════════════════════════════════ */
382
+
383
  .screen {
384
  display: none;
385
  flex: 1;
 
390
  display: flex;
391
  }
392
 
393
+ /* ────────────────────────────────────────
394
+ WELCOME / RESEARCH INITIATION SCREEN
395
+ ──────────────────────────────────────── */
396
+
397
  .welcome-container {
398
  flex: 1;
399
  display: flex;
400
  flex-direction: column;
401
  align-items: center;
402
  justify-content: center;
403
+ padding: 50px 32px;
404
  text-align: center;
405
+ overflow-y: auto;
406
+ }
407
+
408
+ .welcome-graphic {
409
+ width: 120px;
410
+ height: 120px;
411
+ margin-bottom: 30px;
412
+ color: var(--seal-gold);
413
+ opacity: 0.8;
414
  }
415
 
416
  .welcome-icon {
417
+ width: 100%;
418
+ height: 100%;
419
+ filter: drop-shadow(0 4px 8px rgba(0, 0, 0, 0.1));
420
  }
421
 
422
  .welcome-container h2 {
423
+ font-family: 'Crimson Text', serif;
424
+ font-size: 48px;
425
  font-weight: 700;
426
  margin-bottom: 12px;
427
+ color: var(--text-dark);
428
+ letter-spacing: 2px;
429
  }
430
 
431
  .welcome-container > p {
432
+ color: var(--text-medium);
433
+ margin-bottom: 36px;
434
+ max-width: 650px;
435
+ font-size: 15px;
436
+ line-height: 1.7;
437
+ }
438
+
439
+ .text-muted {
440
+ font-size: 12px;
441
+ color: var(--text-light);
442
+ display: block;
443
+ margin-top: 6px;
444
  }
445
 
446
+ /* ── Suggestions Grid ── */
447
  .suggestions {
448
+ display: flex;
449
+ flex-direction: column;
450
  gap: 12px;
451
+ max-width: 750px;
452
+ width: 100%;
453
+ }
454
+
455
+ .suggestion-label {
456
+ font-size: 10px;
457
+ font-weight: 700;
458
+ color: var(--text-light);
459
+ text-transform: uppercase;
460
+ letter-spacing: 1.5px;
461
+ text-align: left;
462
+ margin-bottom: 6px;
463
  }
464
 
465
  .suggestion {
466
+ padding: 14px 16px;
467
+ background: #ffffff;
468
+ border: 1px solid var(--border-dark);
469
+ border-radius: 3px;
470
+ color: var(--text-medium);
471
+ font-family: 'Lora', serif;
472
+ font-size: 13px;
473
  cursor: pointer;
474
  text-align: left;
475
+ line-height: 1.5;
476
  transition: all 0.2s ease;
477
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
478
  }
479
 
480
  .suggestion:hover {
481
+ background: #faf6f1;
482
  border-color: var(--border-gold);
483
+ color: var(--text-dark);
484
+ box-shadow: 0 3px 8px rgba(212, 175, 55, 0.12);
485
+ transform: translateY(-2px);
486
  }
487
 
488
+ /* ────────────────────────────────────────
489
+ CHAT / PROCEEDINGS SCREEN
490
+ ──────────────────────────────────────── */
491
+
492
  .chat-area {
493
  flex: 1;
494
  overflow-y: auto;
495
  display: flex;
496
  flex-direction: column;
497
+ padding: 24px 0;
498
+ background: #f4ede5;
499
  }
500
 
501
+ .proceedings {
502
  width: 100%;
503
+ max-width: 950px;
504
  margin: 0 auto;
505
+ padding: 0 32px;
506
  display: flex;
507
  flex-direction: column;
508
+ gap: 20px;
509
  }
510
 
511
  .message {
512
  display: flex;
513
  flex-direction: column;
514
+ gap: 6px;
515
  animation: slideIn 0.3s ease;
516
  }
517
 
 
528
  align-items: flex-start;
529
  }
530
 
531
+ /* ── Speech Bubbles ── */
532
  .bubble {
533
+ padding: 16px 18px;
534
+ border-radius: 2px;
535
+ max-width: 75%;
536
  word-wrap: break-word;
537
  overflow-wrap: break-word;
538
  font-size: 13px;
539
+ line-height: 1.6;
540
+ border-left: 4px solid transparent;
541
  }
542
 
543
  .bubble.user {
544
+ background: #e8dfd8;
545
+ border-color: var(--neutral-gray);
546
+ color: var(--text-dark);
547
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);
548
  }
549
 
550
  .bubble.ai {
551
+ background: #ffffff;
552
+ border-color: var(--seal-gold);
553
+ color: var(--text-dark);
 
554
  max-width: 85%;
555
+ box-shadow: 0 2px 8px rgba(212, 175, 55, 0.1);
556
  }
557
 
558
  .bubble p {
559
+ margin-bottom: 10px;
560
  }
561
 
562
  .bubble p:last-child {
563
  margin-bottom: 0;
564
  }
565
 
566
+ /* ── Bubble Metadata ── */
567
  .bubble-meta {
568
  display: flex;
569
  align-items: center;
570
  gap: 8px;
571
+ margin-top: 12px;
572
+ padding-top: 12px;
573
+ border-top: 1px solid var(--border-dark);
574
  font-size: 10px;
575
  flex-wrap: wrap;
576
  }
 
579
  display: inline-flex;
580
  align-items: center;
581
  gap: 4px;
582
+ padding: 3px 10px;
583
+ border-radius: 2px;
584
+ font-weight: 700;
585
+ text-transform: uppercase;
586
+ letter-spacing: 0.5px;
587
+ font-size: 9px;
588
  }
589
 
590
  .badge.verified {
591
+ background: rgba(45, 93, 63, 0.15);
592
+ color: var(--verified-green);
593
+ border: 1px solid rgba(45, 93, 63, 0.3);
594
  }
595
 
596
  .badge.unverified {
597
+ background: rgba(139, 62, 62, 0.15);
598
+ color: var(--attention-red);
599
+ border: 1px solid rgba(139, 62, 62, 0.3);
600
  }
601
 
602
  .sources-btn {
603
+ background: rgba(212, 175, 55, 0.15);
604
  border: 1px solid var(--border-gold);
605
+ color: var(--seal-gold-dim);
606
+ padding: 3px 10px;
607
+ border-radius: 2px;
608
  cursor: pointer;
609
+ font-size: 9px;
610
+ font-weight: 700;
611
+ text-transform: uppercase;
612
+ letter-spacing: 0.5px;
613
  transition: all 0.2s ease;
614
  }
615
 
616
  .sources-btn:hover {
617
+ background: rgba(212, 175, 55, 0.25);
618
+ border-color: var(--seal-gold);
619
+ color: var(--seal-gold);
620
  }
621
 
622
+ /* ── Loading State ── */
623
  .bubble.loading {
624
+ color: var(--text-light);
625
  }
626
 
627
  .dots {
628
  display: flex;
629
+ gap: 5px;
630
  }
631
 
632
  .dots span {
633
+ width: 6px;
634
+ height: 6px;
635
  border-radius: 50%;
636
+ background: var(--seal-gold);
637
+ animation: bounce 1.4s infinite;
638
  }
639
 
640
  .dots span:nth-child(2) { animation-delay: 0.2s; }
641
  .dots span:nth-child(3) { animation-delay: 0.4s; }
642
 
643
  @keyframes bounce {
644
+ 0%, 60%, 100% { transform: translateY(0); opacity: 0.4; }
645
+ 30% { transform: translateY(-8px); opacity: 1; }
646
  }
647
 
648
+ /* ────────────────────────────────────────
649
+ ANALYTICS DASHBOARD
650
+ ──────────────────────────────────────── */
651
+
652
  .analytics-container {
653
  flex: 1;
654
  overflow-y: auto;
655
+ padding: 36px 32px;
656
+ max-width: 1100px;
657
  margin: 0 auto;
658
  }
659
 
660
+ .analytics-header h2 {
661
+ font-family: 'Crimson Text', serif;
662
+ font-size: 36px;
663
  font-weight: 700;
664
  margin-bottom: 8px;
665
+ color: var(--text-dark);
666
+ letter-spacing: 1px;
667
  }
668
 
669
+ .analytics-header > p {
670
+ color: var(--text-light);
671
+ font-size: 13px;
672
+ text-transform: uppercase;
673
+ letter-spacing: 1px;
674
+ margin-bottom: 28px;
675
  }
676
 
677
  .stats-grid {
678
  display: grid;
679
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
680
+ gap: 16px;
681
+ margin-bottom: 32px;
682
  }
683
 
684
  .stat-card {
685
+ background: #ffffff;
686
+ border: 1px solid var(--border-dark);
687
+ border-radius: 3px;
688
+ padding: 22px 16px;
689
  text-align: center;
690
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);
691
+ transition: all 0.2s ease;
692
+ }
693
+
694
+ .stat-card:hover {
695
+ box-shadow: 0 4px 12px rgba(212, 175, 55, 0.12);
696
+ border-color: var(--border-gold);
697
+ }
698
+
699
+ .stat-icon {
700
+ font-size: 28px;
701
+ margin-bottom: 8px;
702
+ opacity: 0.7;
703
  }
704
 
705
  .stat-value {
706
+ font-family: 'Crimson Text', serif;
707
+ font-size: 32px;
708
+ font-weight: 700;
709
+ color: var(--seal-gold);
710
+ margin-bottom: 8px;
711
  }
712
 
713
  .stat-label {
714
  font-size: 10px;
715
+ color: var(--text-light);
716
  text-transform: uppercase;
717
+ letter-spacing: 1.5px;
718
+ font-weight: 600;
719
  }
720
 
721
+ /* ────────────────────────────────────────
722
+ INPUT AREA / SUBMISSION BENCH
723
+ ──────────────────────────────────────── */
 
 
 
 
724
 
725
+ .input-bench {
726
+ padding: 16px 32px 24px;
727
+ background: linear-gradient(transparent, rgba(244, 237, 229, 0.8) 40%, #f4ede5);
728
+ border-top: 1px solid var(--border-dark);
729
+ flex-shrink: 0;
730
  display: flex;
731
+ gap: 12px;
732
+ max-width: 950px;
733
+ width: 100%;
 
 
 
 
734
  margin: 0 auto;
735
  }
736
 
 
 
 
 
737
  .query-input {
738
  flex: 1;
739
+ background: #ffffff;
740
+ border: 1px solid var(--border-dark);
741
+ border-radius: 2px;
742
  outline: none;
743
+ font-family: 'Lora', serif;
744
+ font-size: 13px;
745
+ color: var(--text-dark);
746
+ padding: 12px 14px;
747
  resize: none;
748
+ max-height: 100px;
749
  line-height: 1.5;
750
+ transition: border-color 0.2s ease, box-shadow 0.2s ease;
751
+ }
752
+
753
+ .query-input:focus {
754
+ border-color: var(--border-gold);
755
+ box-shadow: 0 0 0 3px rgba(212, 175, 55, 0.1);
756
  }
757
 
758
  .query-input::placeholder {
759
+ color: var(--text-light);
760
+ font-style: italic;
761
  }
762
 
763
+ .btn-submit {
764
+ padding: 12px 18px;
765
+ background: linear-gradient(135deg, var(--seal-gold), #c9a535);
766
+ border: 1px solid var(--seal-gold);
767
+ border-radius: 2px;
768
+ color: var(--text-dark);
769
+ font-family: 'Lora', serif;
770
+ font-size: 12px;
771
+ font-weight: 700;
772
  cursor: pointer;
773
+ text-transform: uppercase;
774
+ letter-spacing: 0.5px;
775
+ transition: all 0.2s ease;
776
+ flex-shrink: 0;
777
  display: flex;
778
  align-items: center;
779
+ gap: 6px;
 
 
780
  }
781
 
782
+ .btn-submit:hover:not(:disabled) {
783
+ background: linear-gradient(135deg, #e8c547, #d4af37);
784
+ box-shadow: 0 4px 12px rgba(212, 175, 55, 0.3);
785
+ transform: translateY(-1px);
786
  }
787
 
788
+ .btn-submit:disabled {
789
+ background: #d0ccc5;
790
+ color: #a0a0a0;
791
  cursor: not-allowed;
792
+ box-shadow: none;
793
  }
794
 
795
+ /* ═════════════════════════════════════════
796
+ RESPONSIVE DESIGN
797
+ ═════════════════════════════════════════ */
798
+
799
+ @media (max-width: 1024px) {
800
+ .sidebar {
801
+ width: 260px;
802
+ }
803
+
804
+ .topbar {
805
+ padding: 12px 20px;
806
+ }
807
+
808
+ .topbar-title {
809
+ font-size: 24px;
810
+ }
811
+
812
+ .welcome-container {
813
+ padding: 40px 20px;
814
+ }
815
+
816
+ .proceedings {
817
+ padding: 0 20px;
818
+ }
819
+
820
+ .input-bench {
821
+ padding: 12px 20px 16px;
822
+ }
823
+
824
+ .analytics-container {
825
+ padding: 24px 20px;
826
+ }
827
  }
828
 
 
829
  @media (max-width: 768px) {
830
  .app-container {
831
  flex-direction: column;
 
833
 
834
  .sidebar {
835
  width: 100%;
836
+ max-height: 35vh;
837
  border-right: none;
838
+ border-bottom: 3px solid var(--seal-gold);
839
+ border-top: none;
840
+ }
841
+
842
+ .sidebar.collapsed {
843
+ width: 100%;
844
+ }
845
+
846
+ .sidebar.collapsed .brand-text,
847
+ .sidebar.collapsed .action-group,
848
+ .sidebar.collapsed .registry-section,
849
+ .sidebar.collapsed .sidebar-footer {
850
+ display: flex;
851
+ }
852
+
853
+ .main-content {
854
+ flex: 1;
855
+ overflow: hidden;
856
+ }
857
+
858
+ .topbar {
859
+ flex-direction: column;
860
+ align-items: flex-start;
861
+ gap: 8px;
862
+ height: auto;
863
+ padding: 12px 16px;
864
+ }
865
+
866
+ .topbar-title {
867
+ font-size: 22px;
868
+ }
869
+
870
+ .status-indicator {
871
+ align-self: flex-start;
872
+ }
873
+
874
+ .welcome-container {
875
+ padding: 30px 16px;
876
+ }
877
+
878
+ .welcome-icon {
879
+ width: 90px;
880
+ height: 90px;
881
+ }
882
+
883
+ .welcome-container h2 {
884
+ font-size: 32px;
885
+ }
886
+
887
+ .welcome-container > p {
888
+ font-size: 13px;
889
+ }
890
+
891
+ .suggestions {
892
+ max-width: 100%;
893
  }
894
 
895
+ .suggestion {
896
+ font-size: 12px;
897
+ padding: 12px 14px;
898
+ }
899
+
900
+ .proceedings {
901
  padding: 0 16px;
902
  }
903
 
 
905
  max-width: 90%;
906
  }
907
 
908
+ .bubble.ai {
909
+ max-width: 95%;
910
+ }
911
+
912
+ .input-bench {
913
+ flex-direction: column;
914
+ padding: 12px 16px 16px;
915
+ max-width: 100%;
916
+ }
917
+
918
+ .query-input {
919
+ width: 100%;
920
+ }
921
+
922
+ .btn-submit {
923
+ width: 100%;
924
+ justify-content: center;
925
+ }
926
+
927
+ .analytics-container {
928
+ padding: 16px;
929
+ }
930
+
931
+ .stats-grid {
932
+ grid-template-columns: repeat(2, 1fr);
933
+ }
934
+ }
935
+
936
+ @media (max-width: 480px) {
937
+ .sidebar {
938
+ max-height: 30vh;
939
+ }
940
+
941
+ .topbar {
942
+ padding: 10px 12px;
943
+ }
944
+
945
+ .topbar-title {
946
+ font-size: 18px;
947
+ }
948
+
949
+ .topbar-subtitle {
950
+ font-size: 9px;
951
+ }
952
+
953
+ .welcome-container {
954
+ padding: 20px 12px;
955
+ }
956
+
957
+ .welcome-graphic {
958
+ width: 80px;
959
+ height: 80px;
960
+ }
961
+
962
+ .welcome-container h2 {
963
+ font-size: 26px;
964
+ }
965
+
966
+ .welcome-container > p {
967
+ font-size: 12px;
968
+ }
969
+
970
  .suggestions {
971
+ gap: 8px;
972
+ }
973
+
974
+ .suggestion {
975
+ font-size: 11px;
976
+ padding: 10px 12px;
977
+ }
978
+
979
+ .proceedings {
980
+ padding: 0 12px;
981
+ gap: 16px;
982
+ }
983
+
984
+ .bubble {
985
+ padding: 12px 14px;
986
+ font-size: 12px;
987
+ max-width: 95%;
988
+ }
989
+
990
+ .stats-grid {
991
  grid-template-columns: 1fr;
992
+ gap: 12px;
993
+ }
994
+ }
995
+
996
+ /* ═════════════════════════════════════════
997
+ SCROLLBAR STYLING
998
+ ═════════════════════════════════════════ */
999
+
1000
+ ::-webkit-scrollbar {
1001
+ width: 8px;
1002
+ height: 8px;
1003
+ }
1004
+
1005
+ ::-webkit-scrollbar-track {
1006
+ background: transparent;
1007
+ }
1008
+
1009
+ ::-webkit-scrollbar-thumb {
1010
+ background: rgba(212, 175, 55, 0.3);
1011
+ border-radius: 4px;
1012
+ }
1013
+
1014
+ ::-webkit-scrollbar-thumb:hover {
1015
+ background: rgba(212, 175, 55, 0.5);
1016
+ }
1017
+
1018
+ /* ─────────────────────────────────────────
1019
+ PRINT STYLES
1020
+ ───────────────────────────────────────── */
1021
+
1022
+ @media print {
1023
+ .sidebar, .topbar, .input-bench, .status-indicator {
1024
+ display: none;
1025
+ }
1026
+
1027
+ .main-content {
1028
+ width: 100%;
1029
+ }
1030
+
1031
+ .proceedings {
1032
+ max-width: 100%;
1033
+ }
1034
+
1035
+ .bubble {
1036
+ page-break-inside: avoid;
1037
  }
1038
  }
frontend/style_old_backup.css ADDED
@@ -0,0 +1,641 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ═══════════════════════════════════════════════════════════════
2
+ NYAYA SETU — COURTROOM LEGAL RESEARCH INTERFACE
3
+ Professional judicial aesthetic with formal legal typography
4
+ ═══════════════════════════════════════════════════════════════ */
5
+
6
+ * { margin: 0; padding: 0; box-sizing: border-box; }
7
+
8
+ :root {
9
+ /* Judicial Color Palette */
10
+ --judicial-dark: #1a1410; /* Deep wood/bench */
11
+ --judicial-navy: #1c233e; /* Formal navy */
12
+ --judicial-maroon: #621e3d; /* Judicial accent */
13
+ --seal-gold: #d4af37; /* Official seal gold */
14
+ --seal-gold-dim: #a8860a; /* Dimmed gold */
15
+ --parchment: #f4ede5; /* Legal document white */
16
+ --text-dark: #1a1410; /* Primary text */
17
+ --text-medium: #4a4a4a; /* Secondary text */
18
+ --text-light: #7a7a7a; /* Tertiary text */
19
+
20
+ /* Borders & Dividers */
21
+ --border-dark: rgba(26, 20, 16, 0.1);
22
+ --border-accent: rgba(212, 175, 55, 0.2);
23
+ --border-gold: rgba(212, 175, 55, 0.5);
24
+
25
+ /* Status Colors */
26
+ --verified-green: #2d5d3f;
27
+ --attention-red: #8b3e3e;
28
+ --neutral-gray: #6b5f52;
29
+ }
30
+
31
+ html, body { height: 100%; }
32
+
33
+ body {
34
+ font-family: 'DM Sans', sans-serif;
35
+ background: var(--navy);
36
+ color: var(--text-1);
37
+ font-size: 14px;
38
+ line-height: 1.6;
39
+ }
40
+
41
+ /* ── LAYOUT ── */
42
+ .app-container {
43
+ display: flex;
44
+ height: 100vh;
45
+ overflow: hidden;
46
+ }
47
+
48
+ /* ── SIDEBAR ── */
49
+ .sidebar {
50
+ width: 272px;
51
+ background: var(--navy-2);
52
+ border-right: 1px solid var(--border);
53
+ display: flex;
54
+ flex-direction: column;
55
+ padding: 16px;
56
+ gap: 12px;
57
+ overflow-y: auto;
58
+ transition: width 0.3s ease;
59
+ }
60
+
61
+ .sidebar.collapsed {
62
+ width: 60px;
63
+ }
64
+
65
+ .sidebar.collapsed .brand-text,
66
+ .sidebar.collapsed .btn-primary span,
67
+ .sidebar.collapsed .btn-secondary span,
68
+ .sidebar.collapsed .sessions-header,
69
+ .sidebar.collapsed .sidebar-footer {
70
+ display: none;
71
+ }
72
+
73
+ .sidebar-header {
74
+ display: flex;
75
+ align-items: center;
76
+ justify-content: space-between;
77
+ gap: 8px;
78
+ padding-bottom: 12px;
79
+ border-bottom: 1px solid var(--border);
80
+ }
81
+
82
+ .brand {
83
+ display: flex;
84
+ align-items: center;
85
+ gap: 10px;
86
+ flex: 1;
87
+ }
88
+
89
+ .brand-icon {
90
+ font-size: 24px;
91
+ }
92
+
93
+ .brand-name {
94
+ font-family: 'Cormorant Garamond', serif;
95
+ font-size: 18px;
96
+ font-weight: 700;
97
+ color: var(--gold);
98
+ line-height: 1.1;
99
+ }
100
+
101
+ .brand-sub {
102
+ font-size: 10px;
103
+ color: var(--text-3);
104
+ text-transform: uppercase;
105
+ letter-spacing: 0.5px;
106
+ }
107
+
108
+ .sidebar-toggle {
109
+ background: none;
110
+ border: none;
111
+ color: var(--text-2);
112
+ font-size: 20px;
113
+ cursor: pointer;
114
+ padding: 4px;
115
+ border-radius: 4px;
116
+ transition: all 0.2s ease;
117
+ }
118
+
119
+ .sidebar-toggle:hover {
120
+ background: var(--navy-3);
121
+ color: var(--text-1);
122
+ }
123
+
124
+ /* ── BUTTONS ── */
125
+ .btn-primary, .btn-secondary {
126
+ width: 100%;
127
+ padding: 10px 12px;
128
+ border-radius: 8px;
129
+ border: 1px solid var(--border);
130
+ font-family: 'DM Sans', sans-serif;
131
+ font-size: 12px;
132
+ font-weight: 500;
133
+ cursor: pointer;
134
+ display: flex;
135
+ align-items: center;
136
+ gap: 6px;
137
+ transition: all 0.2s ease;
138
+ }
139
+
140
+ .btn-primary {
141
+ background: var(--gold-glow);
142
+ border-color: var(--border-gold);
143
+ color: var(--gold);
144
+ }
145
+
146
+ .btn-primary:hover {
147
+ background: rgba(200,168,75,0.25);
148
+ border-color: var(--gold);
149
+ }
150
+
151
+ .btn-secondary {
152
+ background: transparent;
153
+ color: var(--text-2);
154
+ }
155
+
156
+ .btn-secondary:hover {
157
+ background: var(--navy-3);
158
+ border-color: var(--border-gold);
159
+ color: var(--text-1);
160
+ transform: none;
161
+ }
162
+
163
+ /* ── SESSIONS ── */
164
+ .sessions-header {
165
+ font-size: 9px;
166
+ font-weight: 600;
167
+ color: var(--text-3);
168
+ letter-spacing: 1px;
169
+ text-transform: uppercase;
170
+ padding: 8px 0 4px;
171
+ margin-top: 8px;
172
+ }
173
+
174
+ .sessions-list {
175
+ flex: 1;
176
+ overflow-y: auto;
177
+ display: flex;
178
+ flex-direction: column;
179
+ gap: 4px;
180
+ }
181
+
182
+ .sessions-empty {
183
+ font-size: 12px;
184
+ color: var(--text-3);
185
+ font-style: italic;
186
+ padding: 12px 8px;
187
+ }
188
+
189
+ .session-item {
190
+ padding: 8px 10px;
191
+ border-radius: 6px;
192
+ background: transparent;
193
+ border: 1px solid transparent;
194
+ font-size: 12px;
195
+ color: var(--text-2);
196
+ cursor: pointer;
197
+ transition: all 0.2s ease;
198
+ }
199
+
200
+ .session-item:hover {
201
+ background: var(--navy-3);
202
+ }
203
+
204
+ .session-item.active {
205
+ background: var(--navy-4);
206
+ border-color: var(--border-gold);
207
+ color: var(--text-1);
208
+ }
209
+
210
+ .sidebar-footer {
211
+ padding-top: 12px;
212
+ border-top: 1px solid var(--border);
213
+ font-size: 10px;
214
+ color: var(--text-3);
215
+ line-height: 1.4;
216
+ }
217
+
218
+ .disclaimer {
219
+ margin-bottom: 6px;
220
+ }
221
+
222
+ .meta {
223
+ font-size: 9px;
224
+ }
225
+
226
+ /* ── MAIN CONTENT ── */
227
+ .main-content {
228
+ flex: 1;
229
+ display: flex;
230
+ flex-direction: column;
231
+ overflow: hidden;
232
+ }
233
+
234
+ /* ── TOPBAR ── */
235
+ .topbar {
236
+ height: 56px;
237
+ border-bottom: 1px solid var(--border);
238
+ display: flex;
239
+ align-items: center;
240
+ justify-content: space-between;
241
+ padding: 0 24px;
242
+ flex-shrink: 0;
243
+ background: var(--navy);
244
+ }
245
+
246
+ .topbar-title {
247
+ font-family: 'Cormorant Garamond', serif;
248
+ font-size: 17px;
249
+ font-weight: 600;
250
+ color: var(--text-1);
251
+ }
252
+
253
+ .status-pill {
254
+ display: flex;
255
+ align-items: center;
256
+ gap: 6px;
257
+ background: var(--navy-2);
258
+ border: 1px solid var(--border);
259
+ border-radius: 20px;
260
+ padding: 5px 12px;
261
+ font-size: 12px;
262
+ color: var(--text-2);
263
+ }
264
+
265
+ .status-dot {
266
+ width: 6px;
267
+ height: 6px;
268
+ border-radius: 50%;
269
+ background: var(--green);
270
+ }
271
+
272
+ .status-pill.loading .status-dot {
273
+ background: var(--gold);
274
+ animation: pulse 1s infinite;
275
+ }
276
+
277
+ @keyframes pulse {
278
+ 0%, 100% { opacity: 1; }
279
+ 50% { opacity: 0.3; }
280
+ }
281
+
282
+ /* ── SCREENS ── */
283
+ .screen {
284
+ display: none;
285
+ flex: 1;
286
+ overflow: hidden;
287
+ }
288
+
289
+ .screen.active {
290
+ display: flex;
291
+ }
292
+
293
+ /* ── WELCOME ── */
294
+ .welcome-container {
295
+ flex: 1;
296
+ display: flex;
297
+ flex-direction: column;
298
+ align-items: center;
299
+ justify-content: center;
300
+ padding: 40px 24px;
301
+ text-align: center;
302
+ }
303
+
304
+ .welcome-icon {
305
+ font-size: 48px;
306
+ margin-bottom: 16px;
307
+ opacity: 0.7;
308
+ }
309
+
310
+ .welcome-container h2 {
311
+ font-family: 'Cormorant Garamond', serif;
312
+ font-size: 40px;
313
+ font-weight: 700;
314
+ margin-bottom: 12px;
315
+ color: var(--text-1);
316
+ }
317
+
318
+ .welcome-container > p {
319
+ color: var(--text-2);
320
+ margin-bottom: 32px;
321
+ max-width: 600px;
322
+ }
323
+
324
+ .suggestions {
325
+ display: grid;
326
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
327
+ gap: 12px;
328
+ max-width: 800px;
329
+ }
330
+
331
+ .suggestion {
332
+ padding: 12px 14px;
333
+ background: var(--navy-2);
334
+ border: 1px solid var(--border);
335
+ border-radius: 8px;
336
+ color: var(--text-2);
337
+ font-family: 'DM Sans', sans-serif;
338
+ font-size: 12px;
339
+ cursor: pointer;
340
+ text-align: left;
341
+ line-height: 1.4;
342
+ transition: all 0.2s ease;
343
+ }
344
+
345
+ .suggestion:hover {
346
+ background: var(--navy-3);
347
+ border-color: var(--border-gold);
348
+ color: var(--text-1);
349
+ }
350
+
351
+ /* ── CHAT ── */
352
+ .chat-area {
353
+ flex: 1;
354
+ overflow-y: auto;
355
+ display: flex;
356
+ flex-direction: column;
357
+ padding: 20px 0;
358
+ }
359
+
360
+ .messages {
361
+ width: 100%;
362
+ max-width: 900px;
363
+ margin: 0 auto;
364
+ padding: 0 24px;
365
+ display: flex;
366
+ flex-direction: column;
367
+ gap: 16px;
368
+ }
369
+
370
+ .message {
371
+ display: flex;
372
+ flex-direction: column;
373
+ gap: 4px;
374
+ animation: slideIn 0.3s ease;
375
+ }
376
+
377
+ @keyframes slideIn {
378
+ from { opacity: 0; transform: translateY(10px); }
379
+ to { opacity: 1; transform: translateY(0); }
380
+ }
381
+
382
+ .message.user {
383
+ align-items: flex-end;
384
+ }
385
+
386
+ .message.ai {
387
+ align-items: flex-start;
388
+ }
389
+
390
+ .bubble {
391
+ padding: 12px 16px;
392
+ border-radius: 12px;
393
+ max-width: 70%;
394
+ word-wrap: break-word;
395
+ overflow-wrap: break-word;
396
+ font-size: 13px;
397
+ line-height: 1.5;
398
+ }
399
+
400
+ .bubble.user {
401
+ background: var(--navy-4);
402
+ border: 1px solid var(--border);
403
+ color: var(--text-1);
404
+ }
405
+
406
+ .bubble.ai {
407
+ background: var(--navy-2);
408
+ border: 1px solid var(--border);
409
+ border-left: 3px solid var(--gold);
410
+ color: var(--text-1);
411
+ max-width: 85%;
412
+ }
413
+
414
+ .bubble p {
415
+ margin-bottom: 8px;
416
+ }
417
+
418
+ .bubble p:last-child {
419
+ margin-bottom: 0;
420
+ }
421
+
422
+ .bubble-meta {
423
+ display: flex;
424
+ align-items: center;
425
+ gap: 8px;
426
+ margin-top: 8px;
427
+ padding-top: 8px;
428
+ border-top: 1px solid var(--border);
429
+ font-size: 10px;
430
+ flex-wrap: wrap;
431
+ }
432
+
433
+ .badge {
434
+ display: inline-flex;
435
+ align-items: center;
436
+ gap: 4px;
437
+ padding: 2px 8px;
438
+ border-radius: 12px;
439
+ font-weight: 600;
440
+ }
441
+
442
+ .badge.verified {
443
+ background: rgba(76,175,130,0.15);
444
+ color: var(--green);
445
+ }
446
+
447
+ .badge.unverified {
448
+ background: rgba(224,82,82,0.15);
449
+ color: #e8a060;
450
+ }
451
+
452
+ .sources-btn {
453
+ background: var(--gold-glow);
454
+ border: 1px solid var(--border-gold);
455
+ color: var(--gold);
456
+ padding: 2px 8px;
457
+ border-radius: 12px;
458
+ cursor: pointer;
459
+ font-size: 10px;
460
+ font-weight: 500;
461
+ transition: all 0.2s ease;
462
+ }
463
+
464
+ .sources-btn:hover {
465
+ background: rgba(200,168,75,0.25);
466
+ }
467
+
468
+ .bubble.loading {
469
+ color: var(--text-3);
470
+ }
471
+
472
+ .dots {
473
+ display: flex;
474
+ gap: 4px;
475
+ }
476
+
477
+ .dots span {
478
+ width: 5px;
479
+ height: 5px;
480
+ border-radius: 50%;
481
+ background: var(--gold);
482
+ animation: bounce 1.2s infinite;
483
+ }
484
+
485
+ .dots span:nth-child(2) { animation-delay: 0.2s; }
486
+ .dots span:nth-child(3) { animation-delay: 0.4s; }
487
+
488
+ @keyframes bounce {
489
+ 0%, 60%, 100% { transform: translateY(0); opacity: 0.3; }
490
+ 30% { transform: translateY(-6px); opacity: 1; }
491
+ }
492
+
493
+ /* ── ANALYTICS ── */
494
+ .analytics-container {
495
+ flex: 1;
496
+ overflow-y: auto;
497
+ padding: 32px 24px;
498
+ max-width: 1200px;
499
+ margin: 0 auto;
500
+ }
501
+
502
+ .analytics-container h2 {
503
+ font-family: 'Cormorant Garamond', serif;
504
+ font-size: 28px;
505
+ font-weight: 700;
506
+ margin-bottom: 8px;
507
+ }
508
+
509
+ .analytics-container > p {
510
+ color: var(--text-2);
511
+ margin-bottom: 24px;
512
+ }
513
+
514
+ .stats-grid {
515
+ display: grid;
516
+ grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
517
+ gap: 12px;
518
+ margin-bottom: 24px;
519
+ }
520
+
521
+ .stat-card {
522
+ background: var(--navy-2);
523
+ border: 1px solid var(--border);
524
+ border-radius: 8px;
525
+ padding: 16px 12px;
526
+ text-align: center;
527
+ }
528
+
529
+ .stat-value {
530
+ font-size: 20px;
531
+ font-weight: 600;
532
+ color: var(--gold);
533
+ margin-bottom: 6px;
534
+ }
535
+
536
+ .stat-label {
537
+ font-size: 10px;
538
+ color: var(--text-3);
539
+ text-transform: uppercase;
540
+ letter-spacing: 0.5px;
541
+ }
542
+
543
+ /* ── INPUT ── */
544
+ .input-area {
545
+ padding: 12px 20px 16px;
546
+ background: linear-gradient(transparent, var(--navy) 30%);
547
+ border-top: 1px solid var(--border);
548
+ flex-shrink: 0;
549
+ }
550
+
551
+ .input-wrapper {
552
+ display: flex;
553
+ gap: 8px;
554
+ background: var(--navy-2);
555
+ border: 1px solid var(--border);
556
+ border-radius: 10px;
557
+ padding: 8px 12px;
558
+ transition: border-color 0.2s ease;
559
+ max-width: 900px;
560
+ margin: 0 auto;
561
+ }
562
+
563
+ .input-wrapper:focus-within {
564
+ border-color: var(--border-gold);
565
+ }
566
+
567
+ .query-input {
568
+ flex: 1;
569
+ background: none;
570
+ border: none;
571
+ outline: none;
572
+ font-family: 'DM Sans', sans-serif;
573
+ font-size: 14px;
574
+ color: var(--text-1);
575
+ resize: none;
576
+ max-height: 120px;
577
+ line-height: 1.5;
578
+ }
579
+
580
+ .query-input::placeholder {
581
+ color: var(--text-3);
582
+ }
583
+
584
+ .send-btn {
585
+ width: 36px;
586
+ height: 36px;
587
+ background: var(--gold);
588
+ border: none;
589
+ border-radius: 6px;
590
+ color: var(--navy);
591
+ font-size: 20px;
592
+ cursor: pointer;
593
+ display: flex;
594
+ align-items: center;
595
+ justify-content: center;
596
+ flex-shrink: 0;
597
+ transition: background 0.2s ease;
598
+ }
599
+
600
+ .send-btn:hover {
601
+ background: #dbb95c;
602
+ }
603
+
604
+ .send-btn:disabled {
605
+ background: var(--navy-4);
606
+ color: var(--text-3);
607
+ cursor: not-allowed;
608
+ }
609
+
610
+ .disclaimer-line {
611
+ text-align: center;
612
+ font-size: 10px;
613
+ color: var(--text-3);
614
+ margin-top: 6px;
615
+ }
616
+
617
+ /* ── RESPONSIVE ── */
618
+ @media (max-width: 768px) {
619
+ .app-container {
620
+ flex-direction: column;
621
+ }
622
+
623
+ .sidebar {
624
+ width: 100%;
625
+ max-height: 40vh;
626
+ border-right: none;
627
+ border-bottom: 1px solid var(--border);
628
+ }
629
+
630
+ .messages {
631
+ padding: 0 16px;
632
+ }
633
+
634
+ .bubble {
635
+ max-width: 90%;
636
+ }
637
+
638
+ .suggestions {
639
+ grid-template-columns: 1fr;
640
+ }
641
+ }