Files
gott/wwwroot/css/markdown.css
T
Meleki 5d132585d5 Fluent Emoji 3D: Unicode-Emojis durch Microsoft Fluent Emoji ersetzen
- emoji.js: Emoji-Replacement-Engine mit umfassendem Unicode 15.0 Regex
  - String-basiert (replaceEmojisWithFluent) in renderMarkdown()
  - DOM-basiert (parseFluentEmojis) als Post-Processing via TreeWalker
  - CDN: @lobehub/fluent-emoji-3d@1.1.0 via jsdelivr (WebP/3D)
  - Intelligenter Fallback: fe0f-Varianten, dann Original-Unicode
  - Fail-Cache verhindert wiederholte Requests für fehlende Emojis
- User-Nachrichten werden jetzt als Markdown gerendert (renderMarkdown)
  - [Datei: ...] Refs: Platzhalter-Mechanismus vor Markdown-Parsing
  - Reply-Quotes bleiben durch Wrapper-Div erhalten
- parseFluentEmojis an allen Render-Stellen integriert:
  addAssistantBubble, endStreamBubble, _renderUserTextContent,
  _renderSystemPromptBlocks, history._renderMessagesIntoFragment,
  history.loadLatestArchive
- CSS: .fluent-emoji Klasse (1.2em, inline, scale 1.25)
- CSS: white-space:pre-wrap nur noch für .msg:not(.markdown)
2026-03-03 05:53:31 +01:00

148 lines
2.2 KiB
CSS

/* Markdown in Chat Bubbles */
.markdown {
white-space: normal;
}
.markdown > *:first-child {
margin-top: 0;
}
.markdown > *:last-child {
margin-bottom: 0;
}
.markdown p {
margin: 0 0 .5em 0;
}
.markdown p:last-child {
margin-bottom: 0;
}
.markdown h1,
.markdown h2,
.markdown h3,
.markdown h4,
.markdown h5,
.markdown h6 {
margin: 1em 0 .5em 0;
}
.markdown h1:first-child,
.markdown h2:first-child,
.markdown h3:first-child {
margin-top: 0;
}
.markdown h1 {
font-size: calc(var(--font-size) * 1.5);
padding-bottom: .125em;
border-bottom: 1px solid var(--f3-border);
}
.markdown h2 {
font-size: calc(var(--font-size) * 1.25);
}
.markdown ul,
.markdown ol {
margin: 0 0 .5em 0;
padding-left: 1.5em;
}
.markdown li {
margin-bottom: .25em;
}
.markdown li:last-child {
margin-bottom: 0;
}
.markdown code {
background: var(--f3-bg);
border-radius: var(--border-radius);
padding: .1em .3em;
}
.markdown pre {
background: var(--f3-bg);
border: var(--border-width) solid var(--f3-border);
border-radius: var(--border-radius);
padding: .5em;
margin: 0 0 .5em 0;
overflow-x: auto;
}
.markdown pre:last-child {
margin-bottom: 0;
}
.markdown pre code {
background: none;
padding: 0;
}
.markdown blockquote {
border-left: 3px solid var(--f3-border);
margin: 0 0 .5em 0;
padding: .5em;
opacity: var(--semi-transparent);
}
.markdown blockquote:last-child {
margin-bottom: 0;
}
.markdown hr {
border: none;
border-top: var(--border-width) solid var(--f3-border);
margin: .5em 0;
}
.markdown table {
border-collapse: collapse;
margin: 0 0 .5em 0;
width: 100%;
}
.markdown table:last-child {
margin-bottom: 0;
}
.markdown th,
.markdown td {
border: var(--border-width) solid var(--f3-border);
padding: .5em;
text-align: left;
}
.markdown th {
background: var(--f3-bg);
}
.markdown a {
color: var(--primary);
text-decoration: underline;
}
.markdown img {
max-width: 100%;
}
.markdown input[type="checkbox"] {
margin-right: .5em;
}
/* Fluent Emoji */
img.fluent-emoji {
display: inline-block;
height: 1.2em;
width: 1.2em;
vertical-align: -0.2em;
object-fit: contain;
margin: 0 .1em;
scale: 1.25;
}