feat: markdown rendering with gold-themed styling in UI
Browse files- index.html +44 -2
index.html
CHANGED
|
@@ -6,6 +6,7 @@
|
|
| 6 |
<title>Irminsul β Genshin Impact AI Assistant</title>
|
| 7 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 8 |
<link href="https://fonts.googleapis.com/css2?family=Cinzel:wght@400;500;600&family=EB+Garamond:ital,wght@0,400;0,500;1,400&family=JetBrains+Mono:wght@300;400&display=swap" rel="stylesheet">
|
|
|
|
| 9 |
<style>
|
| 10 |
:root {
|
| 11 |
--bg: #060d08;
|
|
@@ -26,6 +27,7 @@
|
|
| 26 |
--green: #5dd68c;
|
| 27 |
--red: #e87878;
|
| 28 |
--amber: #d8a84a;
|
|
|
|
| 29 |
--mono: 'JetBrains Mono', monospace;
|
| 30 |
--serif: 'EB Garamond', serif;
|
| 31 |
--display: 'Cinzel', serif;
|
|
@@ -356,7 +358,47 @@
|
|
| 356 |
padding: 22px 24px;
|
| 357 |
font-size: 15.5px; line-height: 1.9;
|
| 358 |
color: var(--text); font-family: var(--serif);
|
| 359 |
-
white-space:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 360 |
}
|
| 361 |
|
| 362 |
.thinking {
|
|
@@ -715,7 +757,7 @@ async function submitQuery() {
|
|
| 715 |
}
|
| 716 |
|
| 717 |
const data = await res.json();
|
| 718 |
-
respBody.
|
| 719 |
|
| 720 |
const ms = Math.round(data.latency_ms);
|
| 721 |
latTag.textContent = ms >= 1000 ? `${(ms/1000).toFixed(1)}s` : `${ms}ms`;
|
|
|
|
| 6 |
<title>Irminsul β Genshin Impact AI Assistant</title>
|
| 7 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 8 |
<link href="https://fonts.googleapis.com/css2?family=Cinzel:wght@400;500;600&family=EB+Garamond:ital,wght@0,400;0,500;1,400&family=JetBrains+Mono:wght@300;400&display=swap" rel="stylesheet">
|
| 9 |
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/9.1.6/marked.min.js"></script>
|
| 10 |
<style>
|
| 11 |
:root {
|
| 12 |
--bg: #060d08;
|
|
|
|
| 27 |
--green: #5dd68c;
|
| 28 |
--red: #e87878;
|
| 29 |
--amber: #d8a84a;
|
| 30 |
+
--gold: #d4af37;
|
| 31 |
--mono: 'JetBrains Mono', monospace;
|
| 32 |
--serif: 'EB Garamond', serif;
|
| 33 |
--display: 'Cinzel', serif;
|
|
|
|
| 358 |
padding: 22px 24px;
|
| 359 |
font-size: 15.5px; line-height: 1.9;
|
| 360 |
color: var(--text); font-family: var(--serif);
|
| 361 |
+
white-space: normal; word-break: break-word;
|
| 362 |
+
}
|
| 363 |
+
.response-body > *:first-child { margin-top: 0; }
|
| 364 |
+
|
| 365 |
+
/* ββ Markdown answer styling βββββββββββββββββββββββββββ */
|
| 366 |
+
.response-body h1,
|
| 367 |
+
.response-body h2 {
|
| 368 |
+
font-family: var(--display);
|
| 369 |
+
color: var(--gold);
|
| 370 |
+
letter-spacing: 0.04em;
|
| 371 |
+
margin: 1.4em 0 0.4em;
|
| 372 |
+
font-weight: 500;
|
| 373 |
+
}
|
| 374 |
+
.response-body h2 { font-size: 1.15em; border-bottom: 1px solid rgba(212,175,55,0.25); padding-bottom: 0.3em; }
|
| 375 |
+
.response-body h3 { font-family: var(--serif); color: var(--gold); opacity: 0.85; font-size: 1em; margin: 1.1em 0 0.25em; font-style: italic; }
|
| 376 |
+
.response-body strong { color: var(--gold); font-weight: 600; }
|
| 377 |
+
.response-body em { color: var(--text); opacity: 0.8; font-style: italic; }
|
| 378 |
+
.response-body ul, .response-body ol {
|
| 379 |
+
padding-left: 1.4em;
|
| 380 |
+
margin: 0.5em 0 0.8em;
|
| 381 |
+
}
|
| 382 |
+
.response-body li {
|
| 383 |
+
margin-bottom: 0.35em;
|
| 384 |
+
line-height: 1.75;
|
| 385 |
+
}
|
| 386 |
+
.response-body li::marker { color: var(--gold); opacity: 0.7; }
|
| 387 |
+
.response-body p { margin: 0 0 0.8em; }
|
| 388 |
+
.response-body p:last-child { margin-bottom: 0; }
|
| 389 |
+
.response-body hr {
|
| 390 |
+
border: none;
|
| 391 |
+
border-top: 1px solid rgba(212,175,55,0.2);
|
| 392 |
+
margin: 1.2em 0;
|
| 393 |
+
}
|
| 394 |
+
.response-body code {
|
| 395 |
+
font-family: var(--mono);
|
| 396 |
+
font-size: 0.88em;
|
| 397 |
+
background: rgba(212,175,55,0.08);
|
| 398 |
+
border: 1px solid rgba(212,175,55,0.2);
|
| 399 |
+
border-radius: 3px;
|
| 400 |
+
padding: 0.1em 0.4em;
|
| 401 |
+
color: var(--gold);
|
| 402 |
}
|
| 403 |
|
| 404 |
.thinking {
|
|
|
|
| 757 |
}
|
| 758 |
|
| 759 |
const data = await res.json();
|
| 760 |
+
respBody.innerHTML = marked.parse(data.answer);
|
| 761 |
|
| 762 |
const ms = Math.round(data.latency_ms);
|
| 763 |
latTag.textContent = ms >= 1000 ? `${(ms/1000).toFixed(1)}s` : `${ms}ms`;
|