kevinyuan_obsidian-chat-bub.../styles.css
Kevin Yuan 2f8c36ff06 1.1.4
2026-05-15 15:45:55 +01:00

516 lines
22 KiB
CSS

/* ===== CSS Variables (defaults, overridden by plugin JS) ===== */
body.chat-bubble-theme-active {
--cbt-bg: #F8F4F2;
--cbt-radius: 14px;
--cbt-chat-r-bg: #F9E3D0;
--cbt-chat-l-bg: #F9E3D0;
--cbt-chat-max-w: 75%;
--cbt-text-color: rgb(38, 35, 32);
--cbt-heading-color: rgb(49, 45, 42);
--cbt-border-color: rgb(217, 199, 184);
--cbt-q-border-color: rgb(207, 201, 198);
--cbt-link-color: #A0522D;
--cbt-inline-code-bg: #F0E8DC;
--cbt-inline-code-color: #8B4513;
--cbt-emphasis-color: #5C4A38;
--cbt-code-light-bg: #F5F0EB;
--cbt-header-bg: rgb(250, 239, 228);
--cbt-table-radius: 8px;
--cbt-table-border-color: #D9C7B8;
--cbt-table-header-bg: rgb(243, 237, 232);
--hr-color: var(--cbt-border-color);
--blockquote-border-color: var(--cbt-q-border-color);
--blockquote-border-thickness: 3px;
--blockquote-background-color: transparent;
}
/* ===== Markdown Area Background ===== */
body.chat-bubble-theme-active .markdown-preview-view,
body.chat-bubble-theme-active .markdown-reading-view .markdown-preview-view {
background-color: var(--cbt-bg);
}
body.chat-bubble-theme-active .markdown-source-view.mod-cm6 .cm-scroller {
background-color: var(--cbt-bg);
}
/* ===== Typography ===== */
body.chat-bubble-theme-active .markdown-preview-view,
body.chat-bubble-theme-active .markdown-source-view.mod-cm6 .cm-scroller {
color: var(--cbt-text-color);
line-height: 1.8;
}
body.chat-bubble-theme-active .markdown-preview-view {
padding: 2em 3em;
}
body.chat-bubble-theme-active .markdown-preview-view p {
margin-bottom: 0.8em;
}
/* ===== Headings ===== */
body.chat-bubble-theme-active .markdown-preview-view h1,
body.chat-bubble-theme-active .markdown-preview-view h2,
body.chat-bubble-theme-active .markdown-preview-view h3,
body.chat-bubble-theme-active .markdown-preview-view h4,
body.chat-bubble-theme-active .markdown-preview-view h5,
body.chat-bubble-theme-active .markdown-preview-view h6,
body.chat-bubble-theme-active .markdown-rendered h1,
body.chat-bubble-theme-active .markdown-rendered h2,
body.chat-bubble-theme-active .markdown-rendered h3,
body.chat-bubble-theme-active .markdown-rendered h4,
body.chat-bubble-theme-active .markdown-rendered h5,
body.chat-bubble-theme-active .markdown-rendered h6 {
color: var(--cbt-heading-color);
font-weight: 700;
line-height: 1.3;
margin-top: 1.5em;
margin-bottom: 0.6em;
border-bottom: none;
padding-bottom: 0;
}
body.chat-bubble-theme-active .markdown-preview-view h1,
body.chat-bubble-theme-active .markdown-rendered h1 { font-size: 1.8em; }
body.chat-bubble-theme-active .markdown-preview-view h2,
body.chat-bubble-theme-active .markdown-rendered h2 { font-size: 1.4em; padding-bottom: 0.3em; }
body.chat-bubble-theme-active .markdown-preview-view h3,
body.chat-bubble-theme-active .markdown-rendered h3 { font-size: 1.2em; }
body.chat-bubble-theme-active .markdown-preview-view h4,
body.chat-bubble-theme-active .markdown-rendered h4 { font-size: 1.0em; }
/* ===== Horizontal Rule ===== */
body.chat-bubble-theme-active .markdown-preview-view hr,
body.chat-bubble-theme-active .markdown-rendered hr {
border: none;
border-top: 1px solid var(--cbt-border-color);
margin: 2em 0;
background-color: var(--cbt-border-color);
background: var(--cbt-border-color);
height: 1px;
color: var(--cbt-border-color);
}
/* ===== Blockquote ===== */
body.chat-bubble-theme-active .markdown-preview-view blockquote,
body.chat-bubble-theme-active .markdown-rendered blockquote {
border-left: 3px solid var(--cbt-q-border-color);
border-right: none;
border-top: none;
border-bottom: none;
background-color: transparent;
padding: 0.4em 1.2em;
margin: 1em 0;
color: var(--cbt-text-color);
font-weight: 600;
font-style: normal;
}
body.chat-bubble-theme-active .markdown-preview-view blockquote p,
body.chat-bubble-theme-active .markdown-rendered blockquote p { margin: 0.3em 0; }
/* ===== Table ===== */
body.chat-bubble-theme-active .markdown-preview-view table,
body.chat-bubble-theme-active .markdown-rendered table {
width: 100%;
border-collapse: separate;
border-spacing: 0;
margin: 1.5em 0;
font-size: 0.95em;
border: 1px solid var(--cbt-table-border-color);
border-radius: var(--cbt-table-radius);
overflow: hidden;
background-color: var(--cbt-bg);
}
body.chat-bubble-theme-active .markdown-preview-view table thead tr th:first-child,
body.chat-bubble-theme-active .markdown-rendered table thead tr th:first-child { border-top-left-radius: var(--cbt-table-radius); }
body.chat-bubble-theme-active .markdown-preview-view table thead tr th:last-child,
body.chat-bubble-theme-active .markdown-rendered table thead tr th:last-child { border-top-right-radius: var(--cbt-table-radius); }
body.chat-bubble-theme-active .markdown-preview-view table tbody tr:last-child td:first-child,
body.chat-bubble-theme-active .markdown-rendered table tbody tr:last-child td:first-child { border-bottom-left-radius: var(--cbt-table-radius); }
body.chat-bubble-theme-active .markdown-preview-view table tbody tr:last-child td:last-child,
body.chat-bubble-theme-active .markdown-rendered table tbody tr:last-child td:last-child { border-bottom-right-radius: var(--cbt-table-radius); }
body.chat-bubble-theme-active .markdown-preview-view table thead tr,
body.chat-bubble-theme-active .markdown-rendered table thead tr { background-color: var(--cbt-table-header-bg); }
body.chat-bubble-theme-active .markdown-preview-view table th,
body.chat-bubble-theme-active .markdown-rendered table th {
font-weight: 700;
color: var(--cbt-heading-color);
text-align: left;
padding: 0.8em 1.2em;
border-bottom: 1px solid var(--cbt-table-border-color);
border-right: 1px solid var(--cbt-table-border-color);
border-top: none;
border-left: none;
background-color: var(--cbt-table-header-bg);
font-size: 1em;
}
body.chat-bubble-theme-active .markdown-preview-view table th:last-child,
body.chat-bubble-theme-active .markdown-rendered table th:last-child { border-right: none; }
body.chat-bubble-theme-active .markdown-preview-view table td,
body.chat-bubble-theme-active .markdown-rendered table td {
padding: 0.75em 1.2em;
border-bottom: 1px solid var(--cbt-table-border-color);
border-right: 1px solid var(--cbt-table-border-color);
border-top: none;
border-left: none;
color: var(--cbt-text-color);
font-weight: 400;
background-color: var(--cbt-bg);
}
body.chat-bubble-theme-active .markdown-preview-view table td:last-child,
body.chat-bubble-theme-active .markdown-rendered table td:last-child { border-right: none; }
body.chat-bubble-theme-active .markdown-preview-view table tbody tr:last-child td,
body.chat-bubble-theme-active .markdown-rendered table tbody tr:last-child td { border-bottom: none; }
body.chat-bubble-theme-active .markdown-preview-view table tr:hover th,
body.chat-bubble-theme-active .markdown-rendered table tr:hover th,
body.chat-bubble-theme-active .markdown-preview-view table thead tr:hover th,
body.chat-bubble-theme-active .markdown-rendered table thead tr:hover th { background-color: var(--cbt-table-header-bg); }
body.chat-bubble-theme-active .markdown-preview-view table tr:hover td,
body.chat-bubble-theme-active .markdown-rendered table tr:hover td,
body.chat-bubble-theme-active .markdown-preview-view table tbody tr:hover td,
body.chat-bubble-theme-active .markdown-rendered table tbody tr:hover td,
body.chat-bubble-theme-active .markdown-preview-view table tr:hover,
body.chat-bubble-theme-active .markdown-rendered table tr:hover { background-color: var(--cbt-bg); }
/* ===== Links ===== */
body.chat-bubble-theme-active .markdown-preview-view a,
body.chat-bubble-theme-active .markdown-rendered a {
color: var(--cbt-link-color);
text-decoration: none;
border-bottom: 1px solid transparent;
transition: border-bottom 0.2s ease;
}
body.chat-bubble-theme-active .markdown-preview-view a:hover,
body.chat-bubble-theme-active .markdown-rendered a:hover { border-bottom: 1px solid var(--cbt-link-color); }
/* ===== Inline Code ===== */
body.chat-bubble-theme-active .markdown-preview-view code:not(pre code),
body.chat-bubble-theme-active .markdown-rendered code:not(pre code) {
background-color: var(--cbt-inline-code-bg);
color: var(--cbt-inline-code-color);
padding: 0.15em 0.4em;
border-radius: 3px;
font-size: 0.9em;
}
/* ===== Code Block ===== */
body.chat-bubble-theme-active .markdown-preview-view pre,
body.chat-bubble-theme-active .markdown-rendered pre {
background-color: rgb(29, 26, 23);
border: none;
border-radius: var(--cbt-radius);
padding: 0;
position: relative;
}
body.chat-bubble-theme-active .markdown-preview-view pre::before,
body.chat-bubble-theme-active .markdown-rendered pre::before {
content: "";
position: absolute;
top: 2.8em;
left: 1.2em;
right: 1.2em;
height: 1px;
background-color: rgb(74, 72, 69);
z-index: 1;
}
body.chat-bubble-theme-active .markdown-preview-view pre code,
body.chat-bubble-theme-active .markdown-rendered pre code {
color: #D4D4D4;
background-color: transparent;
display: block;
padding: 4.0em 1.4em 1.2em 1.4em;
}
body.chat-bubble-theme-active .markdown-preview-view pre[class*="language-"]::after,
body.chat-bubble-theme-active .markdown-rendered pre[class*="language-"]::after {
content: var(--cb-lang, "") !important;
position: absolute !important;
top: calc(0.4em + 2px) !important;
left: 0.8em !important;
right: auto !important;
width: auto !important;
color: #FFFFFF !important;
font-family: var(--font-default) !important;
font-size: 0.85em !important;
font-weight: 500 !important;
line-height: 2em !important;
height: 2em !important;
background: transparent !important;
border: none !important;
border-radius: 999px !important;
padding: 0 0.6em !important;
margin: 0 !important;
box-sizing: border-box !important;
opacity: 1 !important;
z-index: 2 !important;
display: flex !important;
align-items: center !important;
overflow: hidden !important;
pointer-events: none !important;
}
body.chat-bubble-theme-active pre[class~="language-c"] { --cb-lang: "C"; }
body.chat-bubble-theme-active pre[class~="language-r"] { --cb-lang: "R"; }
body.chat-bubble-theme-active pre[class~="language-go"] { --cb-lang: "Go"; }
body.chat-bubble-theme-active pre[class~="language-cs"],
body.chat-bubble-theme-active pre[class~="language-csharp"] { --cb-lang: "C#"; }
body.chat-bubble-theme-active pre[class~="language-cpp"] { --cb-lang: "C++"; }
body.chat-bubble-theme-active pre[class~="language-css"] { --cb-lang: "CSS"; }
body.chat-bubble-theme-active pre[class~="language-php"] { --cb-lang: "PHP"; }
body.chat-bubble-theme-active pre[class~="language-sql"] { --cb-lang: "SQL"; }
body.chat-bubble-theme-active pre[class~="language-lua"] { --cb-lang: "Lua"; }
body.chat-bubble-theme-active pre[class~="language-ini"] { --cb-lang: "INI"; }
body.chat-bubble-theme-active pre[class~="language-xml"] { --cb-lang: "XML"; }
body.chat-bubble-theme-active pre[class~="language-java"] { --cb-lang: "Java"; }
body.chat-bubble-theme-active pre[class~="language-ruby"],
body.chat-bubble-theme-active pre[class~="language-rb"] { --cb-lang: "Ruby"; }
body.chat-bubble-theme-active pre[class~="language-rust"],
body.chat-bubble-theme-active pre[class~="language-rs"] { --cb-lang: "Rust"; }
body.chat-bubble-theme-active pre[class~="language-dart"] { --cb-lang: "Dart"; }
body.chat-bubble-theme-active pre[class~="language-perl"] { --cb-lang: "Perl"; }
body.chat-bubble-theme-active pre[class~="language-scss"] { --cb-lang: "SCSS"; }
body.chat-bubble-theme-active pre[class~="language-json"] { --cb-lang: "JSON"; }
body.chat-bubble-theme-active pre[class~="language-html"] { --cb-lang: "HTML"; }
body.chat-bubble-theme-active pre[class~="language-yaml"],
body.chat-bubble-theme-active pre[class~="language-yml"] { --cb-lang: "YAML"; }
body.chat-bubble-theme-active pre[class~="language-toml"] { --cb-lang: "TOML"; }
body.chat-bubble-theme-active pre[class~="language-shell"],
body.chat-bubble-theme-active pre[class~="language-bash"],
body.chat-bubble-theme-active pre[class~="language-sh"] { --cb-lang: "Shell"; }
body.chat-bubble-theme-active pre[class~="language-swift"] { --cb-lang: "Swift"; }
body.chat-bubble-theme-active pre[class~="language-scala"] { --cb-lang: "Scala"; }
body.chat-bubble-theme-active pre[class~="language-regex"] { --cb-lang: "Regex"; }
body.chat-bubble-theme-active pre[class~="language-latex"],
body.chat-bubble-theme-active pre[class~="language-tex"] { --cb-lang: "LaTeX"; }
body.chat-bubble-theme-active pre[class~="language-python"],
body.chat-bubble-theme-active pre[class~="language-py"] { --cb-lang: "Python"; }
body.chat-bubble-theme-active pre[class~="language-kotlin"],
body.chat-bubble-theme-active pre[class~="language-kt"] { --cb-lang: "Kotlin"; }
body.chat-bubble-theme-active pre[class~="language-docker"],
body.chat-bubble-theme-active pre[class~="language-dockerfile"] { --cb-lang: "Docker"; }
body.chat-bubble-theme-active pre[class~="language-graphql"] { --cb-lang: "GraphQL"; }
body.chat-bubble-theme-active pre[class~="language-markdown"],
body.chat-bubble-theme-active pre[class~="language-md"] { --cb-lang: "Markdown"; }
body.chat-bubble-theme-active pre[class~="language-javascript"],
body.chat-bubble-theme-active pre[class~="language-js"] { --cb-lang: "JavaScript"; }
body.chat-bubble-theme-active pre[class~="language-typescript"],
body.chat-bubble-theme-active pre[class~="language-ts"] { --cb-lang: "TypeScript"; }
body.chat-bubble-theme-active pre[class~="language-powershell"] { --cb-lang: "PowerShell"; }
/* ---- Copy button ---- */
body.chat-bubble-theme-active .markdown-preview-view pre .copy-code-button,
body.chat-bubble-theme-active .markdown-rendered pre .copy-code-button {
position: absolute !important;
top: 0.4em !important;
right: 0.8em !important;
left: auto !important;
width: auto !important;
color: transparent !important;
font-size: 0.85em !important;
line-height: 2em !important;
height: 2em !important;
background: transparent !important;
border: none !important;
border-radius: 999px !important;
padding: 0 0.6em !important;
opacity: 1 !important;
visibility: visible !important;
cursor: pointer !important;
z-index: 4 !important;
display: flex !important;
align-items: center !important;
gap: 0.3em !important;
overflow: hidden !important;
transition: background-color 0.15s ease !important;
}
body.chat-bubble-theme-active .markdown-preview-view pre .copy-code-button:hover,
body.chat-bubble-theme-active .markdown-rendered pre .copy-code-button:hover { background-color: rgba(255,255,255,0.1) !important; }
body.chat-bubble-theme-active .markdown-preview-view pre .copy-code-button svg,
body.chat-bubble-theme-active .markdown-rendered pre .copy-code-button svg {
width: 1em !important;
height: 1em !important;
color: #FFFFFF !important;
stroke: #FFFFFF !important;
flex-shrink: 0 !important;
}
body.chat-bubble-theme-active .markdown-preview-view pre .copy-code-button::after,
body.chat-bubble-theme-active .markdown-rendered pre .copy-code-button::after {
content: "Copy" !important;
font-family: var(--font-default) !important;
font-size: 0.85rem !important;
font-weight: 500 !important;
color: #FFFFFF !important;
}
/* ===== Bold & Italic ===== */
body.chat-bubble-theme-active .markdown-preview-view strong,
body.chat-bubble-theme-active .markdown-rendered strong { color: var(--cbt-heading-color); font-weight: 700; }
body.chat-bubble-theme-active .markdown-preview-view em,
body.chat-bubble-theme-active .markdown-rendered em { color: var(--cbt-emphasis-color); }
/* ===== Lists ===== */
body.chat-bubble-theme-active .markdown-preview-view ul,
body.chat-bubble-theme-active .markdown-preview-view ol,
body.chat-bubble-theme-active .markdown-rendered ul,
body.chat-bubble-theme-active .markdown-rendered ol { padding-left: 1.5em; margin-bottom: 0.8em; }
body.chat-bubble-theme-active .markdown-preview-view li,
body.chat-bubble-theme-active .markdown-rendered li { margin-bottom: 0.3em; }
body.chat-bubble-theme-active .markdown-preview-view ul > li::marker,
body.chat-bubble-theme-active .markdown-rendered ul > li::marker { color: var(--cbt-heading-color); }
body.chat-bubble-theme-active .list-bullet::after { background-color: var(--cbt-heading-color); }
/* ===== Chat Bubble Callouts ===== */
body.chat-bubble-theme-active .callout[data-callout="chat-r"],
body.chat-bubble-theme-active .callout[data-callout="chat-r"]:hover,
body.chat-bubble-theme-active .callout[data-callout="chat-l"],
body.chat-bubble-theme-active .callout[data-callout="chat-l"]:hover {
display: flex;
background: none;
background-color: transparent;
border: none;
box-shadow: none;
padding: 0;
margin: 0.05em 0;
mix-blend-mode: normal;
outline: none;
cursor: default;
}
body.chat-bubble-theme-active .callout[data-callout="chat-r"] .callout-title,
body.chat-bubble-theme-active .callout[data-callout="chat-l"] .callout-title { display: none; }
body.chat-bubble-theme-active .callout[data-callout="chat-r"] .callout-content,
body.chat-bubble-theme-active .callout[data-callout="chat-l"] .callout-content {
color: var(--cbt-text-color);
border-radius: 22px;
padding: 0.9em 1.6em;
max-width: var(--cbt-chat-max-w);
display: inline-block;
font-weight: 400;
font-size: 1em;
line-height: 1.6;
width: fit-content;
}
body.chat-bubble-theme-active .callout[data-callout="chat-r"] .callout-content p,
body.chat-bubble-theme-active .callout[data-callout="chat-l"] .callout-content p { margin: 0; }
body.chat-bubble-theme-active .callout[data-callout="chat-r"],
body.chat-bubble-theme-active .callout[data-callout="chat-r"]:hover { justify-content: flex-end; }
body.chat-bubble-theme-active .callout[data-callout="chat-r"] .callout-content { background-color: var(--cbt-chat-r-bg); margin-left: auto; }
body.chat-bubble-theme-active .callout[data-callout="chat-l"],
body.chat-bubble-theme-active .callout[data-callout="chat-l"]:hover { justify-content: flex-start; }
body.chat-bubble-theme-active .callout[data-callout="chat-l"] .callout-content { background-color: var(--cbt-chat-l-bg); margin-right: auto; }
/* ===== Callout Indicators ===== */
/* Emoji circle indicator — inline with text */
body.chat-bubble-theme-active.cbt-indicator-dot .callout[data-callout="chat-r"] .callout-content > p:first-child::before,
body.chat-bubble-theme-active.cbt-indicator-dot .callout[data-callout="chat-l"] .callout-content > p:first-child::before {
content: var(--cbt-indicator-emoji, "🟣");
font-size: 1em;
margin-right: 0.3em;
}
/* Speech indicator — inline with text */
body.chat-bubble-theme-active.cbt-indicator-speech .callout[data-callout="chat-r"] .callout-content > p:first-child::before,
body.chat-bubble-theme-active.cbt-indicator-speech .callout[data-callout="chat-l"] .callout-content > p:first-child::before {
content: "💬";
font-size: 1em;
margin-right: 0.3em;
}
/* ===== Checkbox — No Strikethrough ===== */
body.chat-bubble-theme-active.cbt-no-strikethrough {
--checklist-done-decoration: none;
}
/* ===== Code Block Light Theme ===== */
body.chat-bubble-theme-active.cbt-code-light .markdown-preview-view pre,
body.chat-bubble-theme-active.cbt-code-light .markdown-rendered pre {
background-color: var(--cbt-code-light-bg);
border: 1px solid var(--cbt-border-color);
}
body.chat-bubble-theme-active.cbt-code-light .markdown-preview-view pre::before,
body.chat-bubble-theme-active.cbt-code-light .markdown-rendered pre::before {
background-color: var(--cbt-border-color);
}
body.chat-bubble-theme-active.cbt-code-light .markdown-preview-view pre code,
body.chat-bubble-theme-active.cbt-code-light .markdown-rendered pre code {
color: var(--cbt-text-color);
}
body.chat-bubble-theme-active.cbt-code-light .markdown-preview-view pre[class*="language-"]::after,
body.chat-bubble-theme-active.cbt-code-light .markdown-rendered pre[class*="language-"]::after {
color: var(--cbt-heading-color) !important;
}
body.chat-bubble-theme-active.cbt-code-light .markdown-preview-view pre .copy-code-button svg,
body.chat-bubble-theme-active.cbt-code-light .markdown-rendered pre .copy-code-button svg {
color: var(--cbt-heading-color) !important;
stroke: var(--cbt-heading-color) !important;
}
body.chat-bubble-theme-active.cbt-code-light .markdown-preview-view pre .copy-code-button::after,
body.chat-bubble-theme-active.cbt-code-light .markdown-rendered pre .copy-code-button::after {
color: var(--cbt-heading-color) !important;
}
body.chat-bubble-theme-active.cbt-code-light .markdown-preview-view pre .copy-code-button:hover,
body.chat-bubble-theme-active.cbt-code-light .markdown-rendered pre .copy-code-button:hover {
background-color: rgba(0, 0, 0, 0.06) !important;
}
/* ===== Resizable settings modal ===== */
.modal.mod-settings {
resize: both;
overflow: hidden;
max-width: 100vw;
max-height: 100vh;
}
/* ===== Settings UI layout ===== */
.palette-swatches {
display: flex;
flex-wrap: wrap;
gap: 4px;
margin-right: 8px;
}
.palette-swatch {
width: 20px;
height: 20px;
border-radius: 50%;
border: 2px solid transparent;
cursor: pointer;
padding: 0;
flex-shrink: 0;
}
.palette-swatch.is-active { border-color: #555555; }
.theme-preset-picker {
display: flex;
gap: 8px;
}
.theme-preset-btn {
display: flex;
flex-direction: column;
align-items: center;
gap: 4px;
padding: 4px 8px;
cursor: pointer;
font-size: 0.8em;
}
.theme-preset-swatch {
width: 28px;
height: 28px;
border-radius: 50%;
flex-shrink: 0;
border: 1px solid rgba(0,0,0,0.1);
}
.theme-preset-swatch.is-active { border: 2.5px solid #555555; }
.indicator-picker {
display: flex;
gap: 4px;
flex-wrap: wrap;
}
.indicator-btn {
width: 28px;
height: 28px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
font-size: 1.1em;
border-radius: 50%;
border: 1px solid rgba(0,0,0,0.1);
}
.indicator-btn.is-active { border: 2.5px solid #555555; }