lite_webui / src /style.css
blyon1995's picture
init this repo
ca51841
@tailwind base;
@tailwind components;
@tailwind utilities;
/* ── Color tokens ── */
:root {
/* Light theme (default) */
--c-bg: #f5f6f8;
--c-sf: #ecedf1;
--c-card: #ffffff;
--c-top: #f8fbff;
--c-top-bd: rgba(148,163,184,0.18);
--c-top-el: rgba(255,255,255,0.76);
--c-top-el-h: #ffffff;
--c-side: #f1f5fb;
--c-side-bd: rgba(148,163,184,0.22);
--c-side-el: rgba(255,255,255,0.72);
--c-side-el-h: rgba(255,255,255,0.92);
--c-side-act: #ffffff;
--c-side-act-bd: rgba(96,165,250,0.22);
--c-side-tx: #334155;
--c-side-tx2: rgba(51,65,85,0.78);
--c-side-tx3: rgba(51,65,85,0.52);
--c-bd: rgba(0,0,0,0.09);
--c-bd-hi: rgba(0,0,0,0.22);
--c-tx: #121212;
--c-tx2: #3d3d3d;
--c-tx3: rgba(0,0,0,0.38);
--c-txph: rgba(0,0,0,0.32);
--c-hi: rgba(0,0,0,0.08);
--c-ho: rgba(0,0,0,0.04);
--c-ub: #dbeafe;
--c-ub-bd: #bfdbfe;
--c-utx: #1d4ed8;
--c-code: rgba(0,0,0,0.06);
--c-scrl: rgba(0,0,0,0.15);
--c-scrl-hv: rgba(0,0,0,0.28);
--c-prose: #2d2d2d;
--c-prose-h: #0f0f0f;
--c-prose-a: #2563eb;
--c-prose-ah: #1d4ed8;
--c-prose-cd: #1a3a72;
}
.dark {
--c-bg: #0b0b0b;
--c-sf: #0a0a0a;
--c-card: #141414;
--c-top: #10161f;
--c-top-bd: rgba(148,163,184,0.14);
--c-top-el: rgba(255,255,255,0.06);
--c-top-el-h: rgba(255,255,255,0.10);
--c-side: #131922;
--c-side-bd: rgba(148,163,184,0.16);
--c-side-el: rgba(255,255,255,0.05);
--c-side-el-h: rgba(255,255,255,0.08);
--c-side-act: rgba(59,130,246,0.16);
--c-side-act-bd: rgba(96,165,250,0.24);
--c-side-tx: #e5ecf6;
--c-side-tx2: rgba(226,232,240,0.78);
--c-side-tx3: rgba(226,232,240,0.48);
--c-bd: rgba(255,255,255,0.07);
--c-bd-hi: rgba(255,255,255,0.18);
--c-tx: #e2e2e2;
--c-tx2: rgba(255,255,255,0.75);
--c-tx3: rgba(255,255,255,0.28);
--c-txph: rgba(255,255,255,0.22);
--c-hi: rgba(255,255,255,0.07);
--c-ho: rgba(255,255,255,0.04);
--c-ub: rgba(79,142,247,0.13);
--c-ub-bd: rgba(79,142,247,0.22);
--c-utx: rgba(255,255,255,0.90);
--c-code: #0e0e0e;
--c-scrl: rgba(255,255,255,0.12);
--c-scrl-hv: rgba(255,255,255,0.22);
--c-prose: #d8d8d8;
--c-prose-h: #ffffff;
--c-prose-a: #7dd3fc;
--c-prose-ah: #bae6fd;
--c-prose-cd: #e2e8f0;
}
* {
box-sizing: border-box;
}
html, body, #app {
height: 100%;
margin: 0;
padding: 0;
}
body {
background: var(--c-bg);
color: var(--c-tx);
}
/* Custom scrollbar */
::-webkit-scrollbar {
width: 5px;
height: 5px;
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-thumb {
background: var(--c-scrl);
border-radius: 10px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--c-scrl-hv);
}
/* User message bubble */
.user-bubble {
background: var(--c-ub);
border: 1px solid var(--c-ub-bd);
border-radius: 18px;
}
/* Prose — markdown content */
.prose-dark {
color: var(--c-prose);
line-height: 1.75;
word-break: break-word;
}
.prose-dark h1,
.prose-dark h2,
.prose-dark h3,
.prose-dark h4 {
color: var(--c-prose-h);
font-weight: 600;
margin: 1em 0 0.5em;
line-height: 1.3;
}
.prose-dark h1 { font-size: 1.5em; }
.prose-dark h2 { font-size: 1.25em; }
.prose-dark h3 { font-size: 1.1em; }
.prose-dark p {
margin: 0.6em 0;
}
.prose-dark p:first-child { margin-top: 0; }
.prose-dark p:last-child { margin-bottom: 0; }
.prose-dark a {
color: var(--c-prose-a);
text-decoration: underline;
}
.prose-dark a:hover {
color: var(--c-prose-ah);
}
.prose-dark ul,
.prose-dark ol {
padding-left: 1.5em;
margin: 0.5em 0;
}
.prose-dark li {
margin: 0.2em 0;
}
.prose-dark blockquote {
border-left: 3px solid var(--c-bd);
padding-left: 1em;
color: var(--c-tx3);
margin: 0.75em 0;
font-style: italic;
}
.prose-dark hr {
border: none;
border-top: 1px solid var(--c-bd);
margin: 1em 0;
}
.prose-dark table {
border-collapse: collapse;
width: 100%;
margin: 0.75em 0;
font-size: 0.9em;
}
.prose-dark th,
.prose-dark td {
border: 1px solid var(--c-bd);
padding: 0.4em 0.75em;
text-align: left;
}
.prose-dark th {
background: var(--c-hi);
font-weight: 600;
}
.prose-dark code:not(pre code) {
background: var(--c-code);
border: 1px solid var(--c-bd);
border-radius: 3px;
padding: 0.1em 0.35em;
font-size: 0.875em;
font-family: 'JetBrains Mono', 'Fira Code', monospace;
color: var(--c-prose-cd);
}
.prose-dark pre {
background: var(--c-code);
border: 1px solid var(--c-bd);
border-radius: 6px;
padding: 1em;
overflow-x: auto;
margin: 0.75em 0;
position: relative;
}
.prose-dark pre code {
background: none;
border: none;
padding: 0;
font-size: 0.85em;
font-family: 'JetBrains Mono', 'Fira Code', monospace;
color: var(--c-prose-cd);
}
/* Code block copy button */
.code-block-wrapper {
position: relative;
}
.copy-btn {
position: absolute;
top: 0.5em;
right: 0.5em;
background: var(--c-hi);
border: 1px solid var(--c-bd);
border-radius: 6px;
color: var(--c-tx3);
font-size: 0.7em;
padding: 2px 8px;
cursor: pointer;
opacity: 0;
transition: opacity 0.15s ease;
}
.code-block-wrapper:hover .copy-btn {
opacity: 1;
}
.copy-btn:hover {
background: var(--c-ho);
color: var(--c-tx);
}
/* Message fade-in animation */
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(8px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.message-enter {
animation: fadeInUp 0.2s ease forwards;
}
/* Typing indicator */
@keyframes typingDot {
0%, 60%, 100% { opacity: 0.2; transform: translateY(0); }
30% { opacity: 1; transform: translateY(-4px); }
}
.typing-dot {
display: inline-block;
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--c-tx3);
animation: typingDot 1.2s infinite;
}
.typing-dot:nth-child(2) { animation-delay: 0.2s; }
.typing-dot:nth-child(3) { animation-delay: 0.4s; }
/* Sidebar transition */
.sidebar-transition {
transition: transform 0.25s ease, opacity 0.25s ease;
}
/* Input textarea auto-resize */
textarea {
resize: none;
overflow-y: auto;
}
/* Dropdown */
.dropdown-enter {
animation: dropdownFade 0.15s ease forwards;
}
@keyframes dropdownFade {
from { opacity: 0; transform: translateY(-4px); }
to { opacity: 1; transform: translateY(0); }
}
/* Modal */
.modal-backdrop {
animation: modalFadeIn 0.15s ease forwards;
}
@keyframes modalFadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
.modal-panel {
animation: modalSlideIn 0.2s ease forwards;
}
@keyframes modalSlideIn {
from { opacity: 0; transform: scale(0.96) translateY(-8px); }
to { opacity: 1; transform: scale(1) translateY(0); }
}
/* hljs theme overrides */
.hljs {
background: transparent !important;
}