meeting_memory/webui/styles.css

397 lines
6.5 KiB
CSS

:root {
color-scheme: light;
--bg: #f4f1ea;
--bg-accent: #e7ded0;
--surface: rgba(255, 252, 246, 0.84);
--surface-strong: #fffdf8;
--border: rgba(110, 87, 54, 0.16);
--text: #1f1a14;
--muted: #756754;
--accent: #155e63;
--accent-strong: #0d4347;
--accent-soft: rgba(21, 94, 99, 0.11);
--warning: #8b5e22;
--shadow: 0 24px 60px rgba(51, 37, 19, 0.12);
--radius: 18px;
--sidebar-width: 308px;
font-family: "Segoe UI Variable", "SF Pro Text", "IBM Plex Sans", sans-serif;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
min-height: 100vh;
background:
radial-gradient(circle at top left, rgba(21, 94, 99, 0.1), transparent 36%),
radial-gradient(circle at bottom right, rgba(139, 94, 34, 0.12), transparent 34%),
linear-gradient(180deg, #f7f3ec 0%, var(--bg) 100%);
color: var(--text);
}
.app-shell {
display: grid;
grid-template-columns: minmax(0, var(--sidebar-width)) minmax(0, 1fr);
min-height: 100vh;
}
.sidebar {
position: sticky;
top: 0;
height: 100vh;
overflow: auto;
padding: 22px 18px 20px;
border-right: 1px solid var(--border);
background:
linear-gradient(180deg, rgba(255, 250, 243, 0.92), rgba(246, 239, 228, 0.86));
backdrop-filter: blur(18px);
}
.sidebar-top,
.thread-header,
.composer-toolbar,
.brand,
.message {
display: flex;
align-items: center;
}
.sidebar-top,
.thread-header,
.composer-toolbar {
justify-content: space-between;
}
.brand {
gap: 12px;
}
.brand-mark {
width: 42px;
height: 42px;
border-radius: 14px;
display: grid;
place-items: center;
color: white;
background: linear-gradient(135deg, var(--accent), #2a8b92);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.32);
font-weight: 700;
}
.brand-title {
font-size: 15px;
font-weight: 700;
}
.brand-subtitle,
.thread-subtitle,
.micro-copy {
color: var(--muted);
font-size: 12px;
}
.import-card,
.hero-card,
.composer-shell,
.message,
.kb-item {
border: 1px solid var(--border);
background: var(--surface);
box-shadow: var(--shadow);
backdrop-filter: blur(18px);
}
.import-card,
.kb-item,
.hero-card,
.composer-shell,
.message {
border-radius: var(--radius);
}
.import-card,
.kb-section {
margin-top: 18px;
}
.import-card {
padding: 14px;
}
.section-title {
margin-bottom: 12px;
font-size: 12px;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--muted);
}
.field {
display: block;
margin-bottom: 10px;
}
.field span {
display: block;
margin-bottom: 6px;
font-size: 12px;
color: var(--muted);
}
input,
textarea,
button {
font: inherit;
}
input,
textarea {
width: 100%;
border: 1px solid rgba(118, 97, 65, 0.16);
background: rgba(255, 255, 255, 0.7);
color: var(--text);
border-radius: 14px;
padding: 11px 13px;
transition: border-color 140ms ease, box-shadow 140ms ease, transform 140ms ease;
}
input:focus,
textarea:focus {
outline: none;
border-color: rgba(21, 94, 99, 0.5);
box-shadow: 0 0 0 4px rgba(21, 94, 99, 0.12);
}
textarea {
resize: vertical;
min-height: 104px;
}
button {
cursor: pointer;
}
.primary-button,
.ghost-button {
border-radius: 999px;
padding: 10px 14px;
transition: transform 140ms ease, background 140ms ease, color 140ms ease, border-color 140ms ease;
}
.primary-button {
border: 1px solid transparent;
color: white;
background: linear-gradient(135deg, var(--accent), var(--accent-strong));
}
.ghost-button {
border: 1px solid rgba(118, 97, 65, 0.16);
color: var(--text);
background: rgba(255, 255, 255, 0.58);
}
.primary-button:hover,
.ghost-button:hover,
.kb-item:hover {
transform: translateY(-1px);
}
.kb-list {
display: grid;
gap: 12px;
}
.kb-item {
width: 100%;
text-align: left;
padding: 14px;
}
.kb-item.active {
border-color: rgba(21, 94, 99, 0.34);
background: linear-gradient(180deg, rgba(21, 94, 99, 0.1), rgba(255, 252, 246, 0.9));
}
.kb-name {
font-size: 14px;
font-weight: 700;
}
.kb-meta,
.kb-summary {
margin-top: 6px;
font-size: 12px;
color: var(--muted);
}
.thread-shell {
min-width: 0;
display: flex;
flex-direction: column;
padding: 22px;
gap: 18px;
}
.thread-header {
gap: 16px;
}
.thread-title {
font-size: 24px;
font-weight: 700;
}
.runtime-badges,
.composer-toolbar {
gap: 10px;
flex-wrap: wrap;
}
.badge {
display: inline-flex;
align-items: center;
gap: 6px;
border-radius: 999px;
padding: 7px 11px;
font-size: 12px;
border: 1px solid var(--border);
background: rgba(255, 255, 255, 0.7);
}
.badge.accent {
background: var(--accent-soft);
border-color: rgba(21, 94, 99, 0.2);
color: var(--accent-strong);
}
.badge.subtle {
color: var(--warning);
}
.message-list {
flex: 1;
min-height: 0;
overflow: auto;
display: flex;
flex-direction: column;
gap: 14px;
padding-right: 4px;
}
.hero-card {
padding: 24px;
animation: slide-up 360ms ease both;
}
.hero-card h1 {
margin: 10px 0 10px;
font-size: clamp(28px, 5vw, 48px);
line-height: 1.05;
font-weight: 700;
}
.hero-card p,
.message-body,
.message-activity {
line-height: 1.6;
}
.hero-eyebrow {
font-size: 11px;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--muted);
}
.message {
gap: 14px;
align-items: flex-start;
padding: 16px 18px;
animation: slide-up 220ms ease both;
}
.message.user {
background: linear-gradient(180deg, rgba(21, 94, 99, 0.08), rgba(255, 252, 246, 0.86));
}
.message-role {
flex: 0 0 auto;
width: 38px;
height: 38px;
border-radius: 14px;
display: grid;
place-items: center;
font-size: 12px;
font-weight: 700;
color: white;
background: linear-gradient(135deg, #4f4130, #8b5e22);
}
.message.assistant .message-role {
background: linear-gradient(135deg, var(--accent), #2a8b92);
}
.message-body {
white-space: pre-wrap;
word-break: break-word;
flex: 1;
}
.message-activity {
margin-top: 10px;
padding-top: 10px;
border-top: 1px dashed var(--border);
font-size: 12px;
color: var(--muted);
}
.composer-shell {
padding: 14px;
}
.composer-box {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: 12px;
align-items: end;
}
.composer-box .primary-button {
height: 48px;
}
@keyframes slide-up {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@media (max-width: 980px) {
.app-shell {
grid-template-columns: 1fr;
}
.sidebar {
position: relative;
height: auto;
border-right: none;
border-bottom: 1px solid var(--border);
}
.thread-shell {
padding: 16px;
}
.composer-box {
grid-template-columns: 1fr;
}
}