mirror of
https://github.com/andy-stack/vaultkeeper-ai.git
synced 2026-07-22 06:42:03 +00:00
refactor: standardize file type and MIME type handling across AI providers Introduce centralized MimeType enum and bidirectional mappings between file types and MIME types. Update Claude, Gemini, and OpenAI implementations to use consistent MIME type validation. Add file attachment support via drag-and-drop and paste in chat input. Expand supported file type detection to include programming languages, config files, and documentation formats.
1296 lines
No EOL
23 KiB
CSS
1296 lines
No EOL
23 KiB
CSS
/* ============================== */
|
|
/* Main View Customization */
|
|
/* ============================== */
|
|
|
|
.workspace-leaf-content[data-type="vaultkeeper-ai-main-view"] {
|
|
background-color: var(--background-secondary);
|
|
}
|
|
|
|
.workspace-leaf-content[data-type="vaultkeeper-ai-main-view"] .view-content {
|
|
align-self: center;
|
|
max-width: 1000px;
|
|
background-color: var(--background-secondary);
|
|
padding-top: 0;
|
|
}
|
|
|
|
/* ============================== */
|
|
/* Diff View Customization */
|
|
/* ============================== */
|
|
|
|
.workspace-leaf-content[data-type="vaultkeeper-ai-diff-view"] .view-content {
|
|
container-type: size;
|
|
container-name: diff-container;
|
|
overflow: hidden;
|
|
}
|
|
|
|
/* ============================== */
|
|
/* Settings Styles */
|
|
/* ============================== */
|
|
|
|
.api-key-setting-ok input[type="text"],
|
|
.api-key-setting-ok input[type="password"],
|
|
.api-key-setting-ok textarea {
|
|
border-color: var(--color-green) !important;
|
|
}
|
|
|
|
.api-key-setting-error input[type="text"],
|
|
.api-key-setting-error input[type="password"],
|
|
.api-key-setting-error textarea {
|
|
border-color: var(--color-red) !important;
|
|
}
|
|
|
|
.api-key-setting-error .setting-item-control {
|
|
animation: shake 0.5s ease-in-out;
|
|
}
|
|
|
|
@keyframes shake {
|
|
0%, 100% { transform: translateX(0); }
|
|
25% { transform: translateX(-5px); }
|
|
75% { transform: translateX(5px); }
|
|
}
|
|
|
|
.ai-exclusions-input {
|
|
width: 350px;
|
|
height: 110px;
|
|
font: var(--font-monospace);
|
|
font-size: 0.9em;
|
|
resize: none;
|
|
}
|
|
|
|
/* ============================== */
|
|
/* CSS Variables for Common Components */
|
|
/* ============================== */
|
|
|
|
.transparent-button {
|
|
border: none !important;
|
|
outline: none !important;
|
|
box-shadow: none !important;
|
|
background-color: transparent !important;
|
|
}
|
|
|
|
.search-trigger {
|
|
color: var(--interactive-accent);
|
|
cursor: default;
|
|
}
|
|
|
|
.search-trigger:hover {
|
|
text-decoration: underline;
|
|
}
|
|
|
|
/* Typing-in animation (used across components) */
|
|
.typing-in {
|
|
overflow: hidden;
|
|
white-space: nowrap;
|
|
animation: reveal-center var(--typing-in-duration, 1.5s) ease-in-out forwards;
|
|
max-width: 0;
|
|
margin: 0 auto;
|
|
padding: 5px;
|
|
}
|
|
|
|
@keyframes reveal-center {
|
|
0% {
|
|
max-width: 0;
|
|
opacity: 0;
|
|
filter: blur(1px);
|
|
}
|
|
100% {
|
|
max-width: 100%;
|
|
opacity: 1;
|
|
filter: blur(0px);
|
|
}
|
|
}
|
|
|
|
.conversation-history-modal {
|
|
padding: 0px;
|
|
overflow: hidden;
|
|
}
|
|
.conversation-history-modal .modal-header {
|
|
display: none;
|
|
}
|
|
.conversation-history-modal .modal-close-button {
|
|
display: none;
|
|
}
|
|
|
|
.help-modal {
|
|
padding: 0px;
|
|
overflow: hidden;
|
|
}
|
|
.help-modal .modal-header {
|
|
display: none;
|
|
}
|
|
.help-modal .modal-close-button {
|
|
display: none;
|
|
}
|
|
|
|
.top-bar-button {
|
|
margin: var(--size-4-2) 0px var(--size-4-2) 0px;
|
|
padding: var(--size-4-1) var(--size-4-2) var(--size-4-1) var(--size-4-2);
|
|
color: var(--text-muted);
|
|
}
|
|
|
|
.top-bar-button:hover {
|
|
background-color: var(--background-modifier-hover);
|
|
}
|
|
|
|
.error-selector {
|
|
display: inline-block;
|
|
color: var(--color-red);
|
|
border: var(--color-red);
|
|
border-style: solid;
|
|
border-width: var(--border-width);
|
|
border-radius: var(--radius-m);
|
|
padding: var(--size-2-3);
|
|
margin: var(--size-4-2) 0;
|
|
}
|
|
|
|
/* ============================== */
|
|
/* CSS Variables for Theming */
|
|
/* ============================== */
|
|
|
|
/* Custom variables mapped to Obsidian theme variables */
|
|
body {
|
|
--code-background-inline: var(--code-background);
|
|
--text-color: var(--text-normal);
|
|
--link-color: var(--link-color);
|
|
--blockquote-border: var(--blockquote-border-color);
|
|
--table-border: var(--table-border-color);
|
|
--table-header-background: var(--table-header-background);
|
|
--hr-color: var(--hr-color);
|
|
--checkbox-bg: var(--background-primary);
|
|
--checkbox-border: var(--background-modifier-border);
|
|
--checkbox-checked-bg: var(--interactive-accent);
|
|
--footnote-border: var(--background-modifier-border);
|
|
--alt-interactive-accent: color-mix(
|
|
in hsl longer hue,
|
|
var(--interactive-accent) 50%,
|
|
hsl(130, 100%, 50%) 50%
|
|
);
|
|
--alt-interactive-accent-hover: color-mix(
|
|
in hsl longer hue,
|
|
var(--interactive-accent-hover) 50%,
|
|
hsl(130 100% 50%) 50%
|
|
);
|
|
--alt-background-primary: color-mix(
|
|
in hsl shorter hue,
|
|
var(--background-primary) 75%,
|
|
hsl(0 0% 0%) 25%
|
|
);
|
|
}
|
|
|
|
/* ============================== */
|
|
/* GFM Task Lists */
|
|
/* ============================== */
|
|
|
|
/* Task list container */
|
|
.contains-task-list,
|
|
ul.contains-task-list {
|
|
list-style: none;
|
|
padding-left: 0;
|
|
}
|
|
|
|
/* Task list items */
|
|
.task-list-item,
|
|
li.task-list-item {
|
|
position: relative;
|
|
list-style: none;
|
|
padding-left: 1.75em;
|
|
margin-left: 0;
|
|
}
|
|
|
|
/* Task list checkboxes */
|
|
.task-list-item > input[type="checkbox"],
|
|
.task-list-item input[type="checkbox"] {
|
|
position: absolute;
|
|
left: 0;
|
|
top: 0.25em;
|
|
margin: 0;
|
|
width: 1em;
|
|
height: 1em;
|
|
cursor: pointer;
|
|
background-color: var(--checkbox-bg);
|
|
border: 1px solid var(--checkbox-border);
|
|
border-radius: 3px;
|
|
appearance: none;
|
|
-webkit-appearance: none;
|
|
-moz-appearance: none;
|
|
}
|
|
|
|
/* Checked state */
|
|
.task-list-item > input[type="checkbox"]:checked,
|
|
.task-list-item input[type="checkbox"]:checked {
|
|
background-color: var(--checkbox-checked-bg);
|
|
border-color: var(--checkbox-checked-bg);
|
|
}
|
|
|
|
/* Checkmark for checked boxes */
|
|
.task-list-item > input[type="checkbox"]:checked::after,
|
|
.task-list-item input[type="checkbox"]:checked::after {
|
|
content: "✓";
|
|
display: block;
|
|
text-align: center;
|
|
color: var(--text-on-accent);
|
|
font-size: 0.75em;
|
|
line-height: 1em;
|
|
font-weight: bold;
|
|
}
|
|
|
|
/* Disabled state */
|
|
.task-list-item > input[type="checkbox"]:disabled,
|
|
.task-list-item input[type="checkbox"]:disabled {
|
|
cursor: not-allowed;
|
|
opacity: 0.6;
|
|
}
|
|
|
|
/* Nested task lists */
|
|
.task-list-item .contains-task-list {
|
|
margin-top: 0.25em;
|
|
margin-bottom: 0.25em;
|
|
}
|
|
|
|
/* ============================== */
|
|
/* GFM Footnotes */
|
|
/* ============================== */
|
|
|
|
/* Footnote references */
|
|
sup[data-footnote-ref],
|
|
a[data-footnote-ref] {
|
|
font-weight: bold;
|
|
text-decoration: none;
|
|
color: var(--link-color);
|
|
}
|
|
|
|
sup[data-footnote-ref]::before {
|
|
content: "[";
|
|
}
|
|
|
|
sup[data-footnote-ref]::after {
|
|
content: "]";
|
|
}
|
|
|
|
/* Footnote section */
|
|
section[data-footnotes],
|
|
.footnotes {
|
|
margin-top: 2em;
|
|
padding-top: 1em;
|
|
border-top: 1px solid var(--footnote-border);
|
|
font-size: 0.9em;
|
|
}
|
|
|
|
/* Footnote list */
|
|
section[data-footnotes] ol,
|
|
.footnotes ol {
|
|
padding-left: 1.5em;
|
|
}
|
|
|
|
/* Footnote back references */
|
|
a[data-footnote-backref] {
|
|
text-decoration: none;
|
|
margin-left: 0.25em;
|
|
}
|
|
|
|
/* ============================== */
|
|
/* KaTeX Math Rendering Styles */
|
|
/* ============================== */
|
|
|
|
.katex {
|
|
font: normal 1.21em KaTeX_Main, "Times New Roman", serif;
|
|
line-height: 1.2;
|
|
text-indent: 0;
|
|
text-rendering: auto;
|
|
}
|
|
|
|
.katex * {
|
|
-ms-high-contrast-adjust: none !important;
|
|
border-color: currentColor;
|
|
}
|
|
|
|
.katex .katex-mathml {
|
|
clip: rect(1px, 1px, 1px, 1px);
|
|
border: 0;
|
|
height: 1px;
|
|
overflow: hidden;
|
|
padding: 0;
|
|
position: absolute;
|
|
width: 1px;
|
|
}
|
|
|
|
.katex .katex-html > .newline {
|
|
display: block;
|
|
}
|
|
|
|
.katex .base {
|
|
position: relative;
|
|
white-space: nowrap;
|
|
width: -webkit-min-content;
|
|
width: -moz-min-content;
|
|
width: min-content;
|
|
}
|
|
|
|
.katex .base,
|
|
.katex .strut {
|
|
display: inline-block;
|
|
}
|
|
|
|
.katex .textbf {
|
|
font-weight: 700;
|
|
}
|
|
|
|
.katex .textit {
|
|
font-style: italic;
|
|
}
|
|
|
|
.katex .textrm {
|
|
font-family: KaTeX_Main;
|
|
}
|
|
|
|
.katex .textsf {
|
|
font-family: KaTeX_SansSerif;
|
|
}
|
|
|
|
.katex .texttt {
|
|
font-family: KaTeX_Typewriter;
|
|
}
|
|
|
|
.katex .mathnormal {
|
|
font-family: KaTeX_Math;
|
|
font-style: italic;
|
|
}
|
|
|
|
.katex .mathit {
|
|
font-family: KaTeX_Main;
|
|
font-style: italic;
|
|
}
|
|
|
|
.katex .mathrm {
|
|
font-style: normal;
|
|
}
|
|
|
|
.katex .mathbf {
|
|
font-family: KaTeX_Main;
|
|
font-weight: 700;
|
|
}
|
|
|
|
.katex .boldsymbol {
|
|
font-family: KaTeX_Math;
|
|
font-style: italic;
|
|
font-weight: 700;
|
|
}
|
|
|
|
.katex .amsrm,
|
|
.katex .mathbb,
|
|
.katex .textbb {
|
|
font-family: KaTeX_AMS;
|
|
}
|
|
|
|
.katex .mathcal {
|
|
font-family: KaTeX_Caligraphic;
|
|
}
|
|
|
|
.katex .mathfrak,
|
|
.katex .textfrak {
|
|
font-family: KaTeX_Fraktur;
|
|
}
|
|
|
|
.katex .mathboldfrak,
|
|
.katex .textboldfrak {
|
|
font-family: KaTeX_Fraktur;
|
|
font-weight: 700;
|
|
}
|
|
|
|
.katex .mathtt {
|
|
font-family: KaTeX_Typewriter;
|
|
}
|
|
|
|
.katex .mathscr,
|
|
.katex .textscr {
|
|
font-family: KaTeX_Script;
|
|
}
|
|
|
|
.katex .mathsf {
|
|
font-family: KaTeX_SansSerif;
|
|
}
|
|
|
|
.katex .mathboldsf,
|
|
.katex .textboldsf {
|
|
font-family: KaTeX_SansSerif;
|
|
font-weight: 700;
|
|
}
|
|
|
|
.katex .mathitsf,
|
|
.katex .mathsfit,
|
|
.katex .textitsf {
|
|
font-family: KaTeX_SansSerif;
|
|
font-style: italic;
|
|
}
|
|
|
|
.katex .mainrm {
|
|
font-family: KaTeX_Main;
|
|
font-style: normal;
|
|
}
|
|
|
|
/* KaTeX Layout */
|
|
.katex .vlist-t {
|
|
border-collapse: collapse;
|
|
display: inline-table;
|
|
table-layout: fixed;
|
|
}
|
|
|
|
.katex .vlist-r {
|
|
display: table-row;
|
|
}
|
|
|
|
.katex .vlist {
|
|
display: table-cell;
|
|
position: relative;
|
|
vertical-align: bottom;
|
|
}
|
|
|
|
.katex .vlist > span {
|
|
display: block;
|
|
height: 0;
|
|
position: relative;
|
|
}
|
|
|
|
.katex .vlist > span > span {
|
|
display: inline-block;
|
|
}
|
|
|
|
.katex .vlist > span > .pstrut {
|
|
overflow: hidden;
|
|
width: 0;
|
|
}
|
|
|
|
.katex .vlist-t2 {
|
|
margin-right: -2px;
|
|
}
|
|
|
|
.katex .vlist-s {
|
|
display: table-cell;
|
|
font-size: 1px;
|
|
min-width: 2px;
|
|
vertical-align: bottom;
|
|
width: 2px;
|
|
}
|
|
|
|
.katex .vbox {
|
|
align-items: baseline;
|
|
display: inline-flex;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.katex .hbox {
|
|
width: 100%;
|
|
display: inline-flex;
|
|
flex-direction: row;
|
|
}
|
|
|
|
.katex .thinbox {
|
|
display: inline-flex;
|
|
flex-direction: row;
|
|
max-width: 0;
|
|
width: 0;
|
|
}
|
|
|
|
/* KaTeX Fractions and Lines */
|
|
.katex .msupsub {
|
|
text-align: left;
|
|
}
|
|
|
|
.katex .mfrac > span > span {
|
|
text-align: center;
|
|
}
|
|
|
|
.katex .mfrac .frac-line {
|
|
border-bottom-style: solid;
|
|
display: inline-block;
|
|
width: 100%;
|
|
}
|
|
|
|
.katex .hdashline,
|
|
.katex .hline,
|
|
.katex .mfrac .frac-line,
|
|
.katex .overline .overline-line,
|
|
.katex .rule,
|
|
.katex .underline .underline-line {
|
|
min-height: 1px;
|
|
}
|
|
|
|
.katex .mspace {
|
|
display: inline-block;
|
|
}
|
|
|
|
/* KaTeX Positioning */
|
|
.katex .clap,
|
|
.katex .llap,
|
|
.katex .rlap {
|
|
position: relative;
|
|
width: 0;
|
|
}
|
|
|
|
.katex .clap > .inner,
|
|
.katex .llap > .inner,
|
|
.katex .rlap > .inner {
|
|
position: absolute;
|
|
}
|
|
|
|
.katex .clap > .fix,
|
|
.katex .llap > .fix,
|
|
.katex .rlap > .fix {
|
|
display: inline-block;
|
|
}
|
|
|
|
.katex .llap > .inner {
|
|
right: 0;
|
|
}
|
|
|
|
.katex .clap > .inner,
|
|
.katex .rlap > .inner {
|
|
left: 0;
|
|
}
|
|
|
|
.katex .clap > .inner > span {
|
|
margin-left: -50%;
|
|
margin-right: 50%;
|
|
}
|
|
|
|
/* KaTeX Rules and Lines */
|
|
.katex .rule {
|
|
border: 0 solid;
|
|
display: inline-block;
|
|
position: relative;
|
|
}
|
|
|
|
.katex .hline,
|
|
.katex .overline .overline-line,
|
|
.katex .underline .underline-line {
|
|
border-bottom-style: solid;
|
|
display: inline-block;
|
|
width: 100%;
|
|
}
|
|
|
|
.katex .hdashline {
|
|
border-bottom-style: dashed;
|
|
display: inline-block;
|
|
width: 100%;
|
|
}
|
|
|
|
/* KaTeX Square Root */
|
|
.katex .sqrt > .root {
|
|
margin-left: 0.27777778em;
|
|
margin-right: -0.55555556em;
|
|
}
|
|
|
|
/* KaTeX Sizing - Essential subset */
|
|
.katex .fontsize-ensurer.reset-size1.size1,
|
|
.katex .sizing.reset-size1.size1 {
|
|
font-size: 1em;
|
|
}
|
|
|
|
.katex .fontsize-ensurer.reset-size1.size2,
|
|
.katex .sizing.reset-size1.size2 {
|
|
font-size: 1.2em;
|
|
}
|
|
|
|
.katex .fontsize-ensurer.reset-size1.size3,
|
|
.katex .sizing.reset-size1.size3 {
|
|
font-size: 1.4em;
|
|
}
|
|
|
|
.katex .fontsize-ensurer.reset-size1.size4,
|
|
.katex .sizing.reset-size1.size4 {
|
|
font-size: 1.6em;
|
|
}
|
|
|
|
.katex .fontsize-ensurer.reset-size1.size5,
|
|
.katex .sizing.reset-size1.size5 {
|
|
font-size: 1.8em;
|
|
}
|
|
|
|
.katex .fontsize-ensurer.reset-size1.size6,
|
|
.katex .sizing.reset-size1.size6 {
|
|
font-size: 2em;
|
|
}
|
|
|
|
.katex .fontsize-ensurer.reset-size1.size7,
|
|
.katex .sizing.reset-size1.size7 {
|
|
font-size: 2.4em;
|
|
}
|
|
|
|
/* KaTeX Delimiters */
|
|
.katex .delimsizing.size1 {
|
|
font-family: KaTeX_Size1;
|
|
}
|
|
|
|
.katex .delimsizing.size2 {
|
|
font-family: KaTeX_Size2;
|
|
}
|
|
|
|
.katex .delimsizing.size3 {
|
|
font-family: KaTeX_Size3;
|
|
}
|
|
|
|
.katex .delimsizing.size4 {
|
|
font-family: KaTeX_Size4;
|
|
}
|
|
|
|
.katex .nulldelimiter {
|
|
display: inline-block;
|
|
width: 0.12em;
|
|
}
|
|
|
|
.katex .delimcenter,
|
|
.katex .op-symbol {
|
|
position: relative;
|
|
}
|
|
|
|
.katex .op-symbol.small-op {
|
|
font-family: KaTeX_Size1;
|
|
}
|
|
|
|
.katex .op-symbol.large-op {
|
|
font-family: KaTeX_Size2;
|
|
}
|
|
|
|
/* KaTeX Accents and Symbols */
|
|
.katex .accent > .vlist-t,
|
|
.katex .op-limits > .vlist-t {
|
|
text-align: center;
|
|
}
|
|
|
|
.katex .accent .accent-body {
|
|
position: relative;
|
|
}
|
|
|
|
.katex .accent .accent-body:not(.accent-full) {
|
|
width: 0;
|
|
}
|
|
|
|
.katex .overlay {
|
|
display: block;
|
|
}
|
|
|
|
/* KaTeX Tables */
|
|
.katex .mtable .vertical-separator {
|
|
display: inline-block;
|
|
min-width: 1px;
|
|
}
|
|
|
|
.katex .mtable .arraycolsep {
|
|
display: inline-block;
|
|
}
|
|
|
|
.katex .mtable .col-align-c > .vlist-t {
|
|
text-align: center;
|
|
}
|
|
|
|
.katex .mtable .col-align-l > .vlist-t {
|
|
text-align: left;
|
|
}
|
|
|
|
.katex .mtable .col-align-r > .vlist-t {
|
|
text-align: right;
|
|
}
|
|
|
|
/* KaTeX SVG Support */
|
|
.katex .svg-align {
|
|
text-align: left;
|
|
}
|
|
|
|
.katex svg {
|
|
fill: currentColor;
|
|
stroke: currentColor;
|
|
fill-rule: nonzero;
|
|
fill-opacity: 1;
|
|
stroke-width: 1;
|
|
stroke-linecap: butt;
|
|
stroke-linejoin: miter;
|
|
stroke-miterlimit: 4;
|
|
stroke-dasharray: none;
|
|
stroke-dashoffset: 0;
|
|
stroke-opacity: 1;
|
|
display: block;
|
|
height: inherit;
|
|
position: absolute;
|
|
width: 100%;
|
|
}
|
|
|
|
.katex svg path {
|
|
stroke: none;
|
|
}
|
|
|
|
.katex img {
|
|
border-style: none;
|
|
max-height: none;
|
|
max-width: none;
|
|
min-height: 0;
|
|
min-width: 0;
|
|
}
|
|
|
|
/* KaTeX Stretchy Elements */
|
|
.katex .stretchy {
|
|
display: block;
|
|
overflow: hidden;
|
|
position: relative;
|
|
width: 100%;
|
|
}
|
|
|
|
.katex .stretchy::after,
|
|
.katex .stretchy::before {
|
|
content: "";
|
|
}
|
|
|
|
.katex .hide-tail {
|
|
overflow: hidden;
|
|
position: relative;
|
|
width: 100%;
|
|
}
|
|
|
|
/* KaTeX Arrows and Braces */
|
|
.katex .halfarrow-left {
|
|
left: 0;
|
|
overflow: hidden;
|
|
position: absolute;
|
|
width: 50.2%;
|
|
}
|
|
|
|
.katex .halfarrow-right {
|
|
overflow: hidden;
|
|
position: absolute;
|
|
right: 0;
|
|
width: 50.2%;
|
|
}
|
|
|
|
.katex .brace-left {
|
|
left: 0;
|
|
overflow: hidden;
|
|
position: absolute;
|
|
width: 25.1%;
|
|
}
|
|
|
|
.katex .brace-center {
|
|
left: 25%;
|
|
overflow: hidden;
|
|
position: absolute;
|
|
width: 50%;
|
|
}
|
|
|
|
.katex .brace-right {
|
|
overflow: hidden;
|
|
position: absolute;
|
|
right: 0;
|
|
width: 25.1%;
|
|
}
|
|
|
|
/* KaTeX Padding and Boxes */
|
|
.katex .x-arrow-pad {
|
|
padding: 0 0.5em;
|
|
}
|
|
|
|
.katex .cd-arrow-pad {
|
|
padding: 0 0.55556em 0 0.27778em;
|
|
}
|
|
|
|
.katex .mover,
|
|
.katex .munder,
|
|
.katex .x-arrow {
|
|
text-align: center;
|
|
}
|
|
|
|
.katex .boxpad {
|
|
padding: 0 0.3em;
|
|
}
|
|
|
|
.katex .fbox,
|
|
.katex .fcolorbox {
|
|
border: 0.04em solid;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
/* KaTeX Cancel */
|
|
.katex .cancel-pad {
|
|
padding: 0 0.2em;
|
|
}
|
|
|
|
.katex .cancel-lap {
|
|
margin-left: -0.2em;
|
|
margin-right: -0.2em;
|
|
}
|
|
|
|
.katex .sout {
|
|
border-bottom-style: solid;
|
|
border-bottom-width: 0.08em;
|
|
}
|
|
|
|
/* KaTeX Angles */
|
|
.katex .angl {
|
|
border-right: 0.049em solid;
|
|
border-top: 0.049em solid;
|
|
box-sizing: border-box;
|
|
margin-right: 0.03889em;
|
|
}
|
|
|
|
.katex .anglpad {
|
|
padding: 0 0.03889em;
|
|
}
|
|
|
|
/* KaTeX Equation Numbers */
|
|
.katex .eqn-num::before {
|
|
content: "(" counter(katexEqnNo) ")";
|
|
counter-increment: katexEqnNo;
|
|
}
|
|
|
|
.katex .mml-eqn-num::before {
|
|
content: "(" counter(mmlEqnNo) ")";
|
|
counter-increment: mmlEqnNo;
|
|
}
|
|
|
|
/* KaTeX Display Mode */
|
|
.katex-display {
|
|
display: block;
|
|
margin: 1em 0;
|
|
text-align: center;
|
|
}
|
|
|
|
.katex-display > .katex {
|
|
display: block;
|
|
text-align: center;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.katex-display > .katex > .katex-html {
|
|
display: block;
|
|
position: relative;
|
|
}
|
|
|
|
.katex-display > .katex > .katex-html > .tag {
|
|
position: absolute;
|
|
right: 0;
|
|
}
|
|
|
|
.katex-display.leqno > .katex > .katex-html > .tag {
|
|
left: 0;
|
|
right: auto;
|
|
}
|
|
|
|
.katex-display.fleqn > .katex {
|
|
padding-left: 2em;
|
|
text-align: left;
|
|
}
|
|
|
|
body {
|
|
counter-reset: katexEqnNo mmlEqnNo;
|
|
}
|
|
|
|
/* ============================== */
|
|
/* KaTeX Font Fallbacks */
|
|
/* For Obsidian, we'll use system fonts as fallbacks */
|
|
/* ============================== */
|
|
|
|
.katex {
|
|
font-family: "KaTeX_Main", "Times New Roman", Times, serif;
|
|
}
|
|
|
|
.katex .mathit,
|
|
.katex .mathnormal {
|
|
font-family: "KaTeX_Math", "Times New Roman", Times, serif;
|
|
font-style: italic;
|
|
}
|
|
|
|
.katex .mathbf {
|
|
font-family: "KaTeX_Main", "Times New Roman", Times, serif;
|
|
font-weight: bold;
|
|
}
|
|
|
|
.katex .amsrm,
|
|
.katex .mathbb,
|
|
.katex .textbb {
|
|
font-family: "KaTeX_AMS", "Times New Roman", Times, serif;
|
|
}
|
|
|
|
.katex .mathcal {
|
|
font-family: "KaTeX_Caligraphic", "Lucida Calligraphy", "Brush Script MT", cursive;
|
|
}
|
|
|
|
.katex .mathfrak,
|
|
.katex .textfrak {
|
|
font-family: "KaTeX_Fraktur", "Lucida Blackletter", fantasy;
|
|
}
|
|
|
|
.katex .mathtt {
|
|
font-family: "KaTeX_Typewriter", "Courier New", Courier, monospace;
|
|
}
|
|
|
|
.katex .mathscr,
|
|
.katex .textscr {
|
|
font-family: "KaTeX_Script", "Lucida Handwriting", "Segoe Script", cursive;
|
|
}
|
|
|
|
.katex .mathsf,
|
|
.katex .textsf {
|
|
font-family: "KaTeX_SansSerif", Arial, Helvetica, sans-serif;
|
|
}
|
|
|
|
/* ============================== */
|
|
/* Additional Markdown Styles */
|
|
/* ============================== */
|
|
|
|
/* Headings in assistant messages */
|
|
.message-bubble.assistant h1 {
|
|
font-size: 1.5em;
|
|
font-weight: 600;
|
|
margin: 0.67em 0;
|
|
line-height: 1.2;
|
|
}
|
|
|
|
.message-bubble.assistant h2 {
|
|
font-size: 1.3em;
|
|
font-weight: 600;
|
|
margin: 0.75em 0;
|
|
line-height: 1.2;
|
|
}
|
|
|
|
.message-bubble.assistant h3 {
|
|
font-size: 1.1em;
|
|
font-weight: 600;
|
|
margin: 0.83em 0;
|
|
line-height: 1.3;
|
|
}
|
|
|
|
.message-bubble.assistant h4 {
|
|
font-size: 1em;
|
|
font-weight: 600;
|
|
margin: 1.12em 0;
|
|
line-height: 1.3;
|
|
}
|
|
|
|
.message-bubble.assistant h5 {
|
|
font-size: 0.9em;
|
|
font-weight: 600;
|
|
margin: 1.5em 0;
|
|
line-height: 1.3;
|
|
}
|
|
|
|
.message-bubble.assistant h6 {
|
|
font-size: 0.85em;
|
|
font-weight: 600;
|
|
margin: 1.67em 0;
|
|
line-height: 1.3;
|
|
}
|
|
|
|
/* Paragraphs */
|
|
.message-bubble.assistant p {
|
|
margin: 0.5em 0;
|
|
line-height: 1.6;
|
|
}
|
|
|
|
/* Lists */
|
|
.message-bubble.assistant ul,
|
|
.message-bubble.assistant ol {
|
|
margin: 0.5em 0;
|
|
padding-left: 2em;
|
|
list-style-position: outside;
|
|
}
|
|
|
|
.message-bubble.assistant ol {
|
|
list-style-type: decimal;
|
|
}
|
|
|
|
.message-bubble.assistant ul {
|
|
list-style-type: disc;
|
|
}
|
|
|
|
.message-bubble.assistant li {
|
|
margin: 0.25em 0;
|
|
padding-left: 0.25em;
|
|
display: list-item;
|
|
}
|
|
|
|
/* Handle nested lists properly */
|
|
.message-bubble.assistant ol ol,
|
|
.message-bubble.assistant ul ul,
|
|
.message-bubble.assistant ol ul,
|
|
.message-bubble.assistant ul ol {
|
|
margin: 0.25em 0;
|
|
padding-left: 1.5em;
|
|
}
|
|
|
|
/* Ensure nested list numbering works correctly */
|
|
.message-bubble.assistant ol ol {
|
|
list-style-type: lower-alpha;
|
|
}
|
|
|
|
.message-bubble.assistant ol ol ol {
|
|
list-style-type: lower-roman;
|
|
}
|
|
|
|
/* Fix paragraph spacing inside list items */
|
|
.message-bubble.assistant li > p {
|
|
margin: 0;
|
|
}
|
|
|
|
.message-bubble.assistant li > p:first-child {
|
|
margin-top: 0;
|
|
}
|
|
|
|
.message-bubble.assistant li > p:last-child {
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
/* Code blocks */
|
|
.message-bubble.assistant pre {
|
|
background-color: var(--code-background);
|
|
border-radius: 4px;
|
|
padding: 0.5em;
|
|
overflow-x: auto;
|
|
margin: 0.5em 0;
|
|
position: relative;
|
|
}
|
|
|
|
.message-bubble.assistant code {
|
|
background-color: var(--code-background-inline);
|
|
border-radius: 3px;
|
|
padding: 0.2em 0.4em;
|
|
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
|
|
font-size: 0.9em;
|
|
}
|
|
|
|
.message-bubble.assistant pre code {
|
|
background-color: transparent;
|
|
padding: 0;
|
|
border-radius: 0;
|
|
}
|
|
|
|
/* Blockquotes */
|
|
.message-bubble.assistant blockquote {
|
|
border-left: 4px solid var(--blockquote-border);
|
|
padding-left: 1em;
|
|
margin: 0.5em 0;
|
|
color: var(--text-muted);
|
|
}
|
|
|
|
/* Tables */
|
|
.message-bubble.assistant table {
|
|
border-collapse: collapse;
|
|
margin: 0.5em 0;
|
|
width: 100%;
|
|
overflow-x: auto;
|
|
display: block;
|
|
}
|
|
|
|
.message-bubble.assistant th,
|
|
.message-bubble.assistant td {
|
|
border: 1px solid var(--table-border);
|
|
padding: 0.5em;
|
|
text-align: left;
|
|
min-width: 100px;
|
|
}
|
|
|
|
.message-bubble.assistant th {
|
|
background-color: var(--table-header-background);
|
|
font-weight: 600;
|
|
}
|
|
|
|
/* Table alignment classes from GFM */
|
|
.message-bubble.assistant th[align="center"],
|
|
.message-bubble.assistant td[align="center"] {
|
|
text-align: center;
|
|
}
|
|
|
|
.message-bubble.assistant th[align="right"],
|
|
.message-bubble.assistant td[align="right"] {
|
|
text-align: right;
|
|
}
|
|
|
|
/* Links */
|
|
.message-bubble.assistant a {
|
|
color: var(--link-color-hover);
|
|
text-decoration: none;
|
|
}
|
|
|
|
.message-bubble.assistant a:hover {
|
|
text-decoration: var(--link-decoration-hover);
|
|
}
|
|
|
|
/* Horizontal rules */
|
|
.message-bubble.assistant hr {
|
|
border: none;
|
|
border-top: 1px solid var(--hr-color);
|
|
margin: 1em 0;
|
|
}
|
|
|
|
/* Images */
|
|
.message-bubble.assistant img {
|
|
max-width: 100%;
|
|
height: auto;
|
|
display: block;
|
|
margin: 0.5em 0;
|
|
}
|
|
|
|
/* Emphasis */
|
|
.message-bubble.assistant em {
|
|
font-style: italic;
|
|
}
|
|
|
|
.message-bubble.assistant strong {
|
|
font-weight: 600;
|
|
}
|
|
|
|
/* Strikethrough */
|
|
.message-bubble.assistant del {
|
|
text-decoration: line-through;
|
|
opacity: 0.7;
|
|
}
|
|
|
|
/* ============================== */
|
|
/* Additional HTML Elements */
|
|
/* ============================== */
|
|
|
|
/* Keyboard input */
|
|
.message-bubble.assistant kbd {
|
|
display: inline-block;
|
|
padding: 0.2em 0.4em;
|
|
font-size: 0.875em;
|
|
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
|
|
line-height: 1;
|
|
color: var(--text-color);
|
|
vertical-align: middle;
|
|
background-color: var(--code-background-inline);
|
|
border: 1px solid var(--table-border);
|
|
border-radius: 3px;
|
|
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
|
|
}
|
|
|
|
/* Mark/highlight */
|
|
.message-bubble.assistant mark {
|
|
background-color: var(--text-highlight-bg);
|
|
color: var(--text-normal);
|
|
padding: 0.2em;
|
|
border-radius: 2px;
|
|
}
|
|
|
|
/* Subscript and Superscript */
|
|
.message-bubble.assistant sub {
|
|
font-size: 0.75em;
|
|
vertical-align: sub;
|
|
}
|
|
|
|
.message-bubble.assistant sup {
|
|
font-size: 0.75em;
|
|
vertical-align: super;
|
|
}
|
|
|
|
/* Abbreviations */
|
|
.message-bubble.assistant abbr[title] {
|
|
text-decoration: underline dotted;
|
|
cursor: help;
|
|
}
|
|
|
|
/* Definition lists */
|
|
.message-bubble.assistant dl {
|
|
margin: 0.5em 0;
|
|
}
|
|
|
|
.message-bubble.assistant dt {
|
|
font-weight: 600;
|
|
margin-top: 0.5em;
|
|
}
|
|
|
|
.message-bubble.assistant dd {
|
|
margin-left: 2em;
|
|
margin-bottom: 0.5em;
|
|
}
|
|
|
|
/* Details/Summary (collapsible sections) */
|
|
.message-bubble.assistant details {
|
|
margin: 0.5em 0;
|
|
padding: 0.5em;
|
|
border: 1px solid var(--table-border);
|
|
border-radius: 4px;
|
|
}
|
|
|
|
.message-bubble.assistant summary {
|
|
cursor: pointer;
|
|
font-weight: 600;
|
|
padding: 0.25em;
|
|
}
|
|
|
|
.message-bubble.assistant details[open] summary {
|
|
margin-bottom: 0.5em;
|
|
}
|
|
|
|
/* ============================== */
|
|
/* Emoji Support */
|
|
/* ============================== */
|
|
|
|
.message-bubble.assistant .emoji {
|
|
font-family: "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
|
font-weight: normal;
|
|
line-height: 1;
|
|
}
|
|
|
|
/* ============================== */
|
|
/* Line Numbers for Code Blocks (optional) */
|
|
/* ============================== */
|
|
|
|
/* If using line numbers with rehype-highlight */
|
|
.hljs .code-line {
|
|
display: block;
|
|
padding-left: 1em;
|
|
margin-left: -1em;
|
|
}
|
|
|
|
.hljs .numbered-code-line::before {
|
|
content: attr(data-line-number);
|
|
display: inline-block;
|
|
width: 2em;
|
|
text-align: right;
|
|
margin-right: 1em;
|
|
color: var(--text-faint);
|
|
user-select: none;
|
|
}
|
|
|
|
/* ============================== */
|
|
/* Responsive adjustments */
|
|
/* ============================== */
|
|
|
|
@media (max-width: 768px) {
|
|
.message-bubble.assistant table {
|
|
font-size: 0.875em;
|
|
}
|
|
|
|
.message-bubble.assistant th,
|
|
.message-bubble.assistant td {
|
|
padding: 0.25em;
|
|
min-width: 50px;
|
|
}
|
|
|
|
.message-bubble.assistant pre {
|
|
padding: 0.25em;
|
|
}
|
|
}
|
|
|
|
/* ============================== */
|
|
/* Print styles */
|
|
/* ============================== */
|
|
|
|
@media print {
|
|
.message-bubble.assistant {
|
|
color: #000;
|
|
}
|
|
|
|
.message-bubble.assistant a {
|
|
color: #0969da;
|
|
text-decoration: underline;
|
|
}
|
|
|
|
.message-bubble.assistant pre,
|
|
.message-bubble.assistant code {
|
|
background-color: #f6f8fa;
|
|
color: #000;
|
|
}
|
|
|
|
.hljs {
|
|
background: #fff;
|
|
color: #000;
|
|
}
|
|
} |