LaelaZ's picture
Deploy SupportCopilot to HF Spaces (Docker)
8981bf6 verified
/* SupportCopilot design system — friendly, bright customer-support product.
Warm teal/emerald primary + warm coral accent on a soft "sand" canvas;
generous rounding, soft shadows, modern chat bubbles. Light + dark.
Distinct identity within the portfolio — welcoming like Intercom/Gorgias. */
:root {
--sc-accent: 16 185 129; /* emerald-500 — bright friendly primary */
--sc-accent-strong: 13 148 136; /* teal-600 — deeper primary */
--sc-accent-deep: 15 118 110; /* teal-700 */
--sc-coral: 244 98 79; /* warm coral — energetic accent */
--sc-coral-soft: 251 124 114; /* coral-400 */
--sc-success: 16 185 129; /* emerald-500 */
--sc-warning: 245 158 11; /* amber-500 */
--sc-danger: 239 68 68; /* red-500 */
/* Warm neutral surfaces (sand) — replaces cold slate. */
--sc-paper: 255 253 250; /* warm white card */
--sc-line: 231 219 201; /* sand-200 hairline */
--sc-track: 235 226 212; /* warm track for meters/bars */
}
.dark {
--sc-accent: 52 211 153; /* emerald-400 — lifts in dark */
--sc-accent-strong: 45 212 191; /* teal-400 */
--sc-coral: 251 124 114; /* coral-400 */
--sc-paper: 32 27 22; /* warm dark card */
--sc-line: 70 60 49; /* warm slate hairline */
--sc-track: 60 51 41;
}
html { scroll-behavior: smooth; }
body {
font-family: "Avenir Next", Avenir, "Nunito Sans", ui-rounded,
"SF Pro Rounded", system-ui, -apple-system, "Segoe UI", Roboto,
Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
/* Friendly, slightly rounded display headings. */
h1, h2, h3, .sc-display {
font-family: ui-rounded, "SF Pro Rounded", "Avenir Next", Avenir,
"Nunito Sans", system-ui, sans-serif;
letter-spacing: -0.01em;
}
/* Soft, warm page wash — coral glow top-right, teal glow bottom-left. */
.sc-bg {
background-image:
radial-gradient(58rem 58rem at 108% -12%, rgb(var(--sc-coral) / 0.12), transparent 55%),
radial-gradient(52rem 52rem at -12% 4%, rgb(var(--sc-accent) / 0.12), transparent 52%);
}
.dark .sc-bg {
background-image:
radial-gradient(58rem 58rem at 108% -12%, rgb(var(--sc-coral) / 0.14), transparent 55%),
radial-gradient(52rem 52rem at -12% 4%, rgb(var(--sc-accent) / 0.16), transparent 52%);
}
/* Gradient brand text — teal -> emerald -> coral, warm and friendly. */
.sc-gradient-text {
background-image: linear-gradient(
100deg, rgb(var(--sc-accent-strong)), rgb(var(--sc-accent)) 55%, rgb(var(--sc-coral-soft))
);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
/* Reusable brand gradient surface (avatars, marks, the send button accent). */
.sc-grad {
background-image: linear-gradient(135deg, rgb(var(--sc-accent-strong)), rgb(var(--sc-accent)));
}
.sc-grad-warm {
background-image: linear-gradient(135deg, rgb(var(--sc-accent)), rgb(var(--sc-coral)));
}
/* Card — warm, rounded, soft shadow. */
.sc-card {
border-radius: 1.35rem;
border: 1px solid rgb(var(--sc-line));
background: rgb(var(--sc-paper) / 0.92);
backdrop-filter: blur(8px);
box-shadow: 0 1px 2px rgb(70 50 30 / 0.04), 0 14px 34px -18px rgb(70 50 30 / 0.22);
}
.dark .sc-card {
background: rgb(var(--sc-paper) / 0.78);
box-shadow: 0 1px 2px rgb(0 0 0 / 0.35), 0 14px 34px -18px rgb(0 0 0 / 0.7);
}
/* KPI card hover lift. */
.sc-kpi { transition: transform .15s ease, box-shadow .15s ease, border-color .15s ease; }
.sc-kpi:hover {
transform: translateY(-3px);
box-shadow: 0 2px 4px rgb(70 50 30 / 0.05), 0 20px 40px -18px rgb(var(--sc-accent) / 0.28);
}
.dark .sc-kpi:hover {
box-shadow: 0 2px 4px rgb(0 0 0 / 0.4), 0 20px 40px -18px rgb(var(--sc-accent) / 0.4);
}
/* ---- Buttons ------------------------------------------------------------ */
/* Primary "pill" CTA — friendly teal->emerald with a soft glow. */
.sc-btn-primary {
display: inline-flex; align-items: center; gap: 0.5rem;
border-radius: 999px;
padding: 0.7rem 1.25rem;
font-weight: 700; font-size: 0.875rem; color: white;
background-image: linear-gradient(135deg, rgb(var(--sc-accent-strong)), rgb(var(--sc-accent)));
box-shadow: 0 10px 22px -10px rgb(var(--sc-accent) / 0.7);
transition: transform .12s ease, box-shadow .12s ease, filter .12s ease;
}
.sc-btn-primary:hover { transform: translateY(-1px); filter: brightness(1.04);
box-shadow: 0 14px 26px -10px rgb(var(--sc-accent) / 0.8); }
.sc-btn-primary:active { transform: translateY(0); }
/* Secondary — soft warm outline pill. */
.sc-btn-secondary {
display: inline-flex; align-items: center; gap: 0.5rem;
border-radius: 999px;
padding: 0.7rem 1.2rem;
font-weight: 600; font-size: 0.875rem;
color: rgb(var(--sc-accent-deep));
background: rgb(var(--sc-paper) / 0.7);
border: 1.5px solid rgb(var(--sc-accent) / 0.35);
transition: border-color .12s ease, color .12s ease, background-color .12s ease, transform .12s ease;
}
.sc-btn-secondary:hover { border-color: rgb(var(--sc-accent) / 0.7); transform: translateY(-1px); }
.dark .sc-btn-secondary { color: rgb(var(--sc-accent-strong)); }
/* ---- Chat bubbles ------------------------------------------------------- */
.sc-bubble {
max-width: 88%;
padding: 0.8rem 1.05rem;
border-radius: 1.4rem;
line-height: 1.55;
font-size: 0.95rem;
}
/* Agent bubble (left) — soft warm card with a friendly tail. */
.sc-bubble--agent {
border: 1px solid rgb(var(--sc-line));
background: rgb(var(--sc-paper) / 0.95);
border-bottom-left-radius: 0.45rem;
}
.dark .sc-bubble--agent {
background: rgb(var(--sc-paper) / 0.9);
}
/* User bubble (right) — warm teal->emerald gradient with a tail. */
.sc-bubble--user {
color: white;
background: linear-gradient(135deg, rgb(var(--sc-accent-strong)), rgb(var(--sc-accent)));
border-bottom-right-radius: 0.45rem;
box-shadow: 0 8px 20px -10px rgb(var(--sc-accent) / 0.7);
}
/* ---- Citation chip ------------------------------------------------------ */
.sc-chip {
display: inline-flex;
align-items: center;
gap: 0.32rem;
padding: 0.22rem 0.6rem;
border-radius: 999px;
font-size: 0.72rem;
font-weight: 700;
line-height: 1;
border: 1px solid transparent;
transition: background-color .12s ease, border-color .12s ease;
}
.sc-chip-dot { width: 0.42rem; height: 0.42rem; border-radius: 999px; flex: none; }
/* kind variants — keyed to the source type. */
.sc-chip--policy {
color: rgb(var(--sc-accent-deep));
background: rgb(var(--sc-accent) / 0.14);
border-color: rgb(var(--sc-accent) / 0.3);
}
.dark .sc-chip--policy { color: rgb(var(--sc-accent-strong)); }
.sc-chip--policy .sc-chip-dot { background: rgb(var(--sc-accent-strong)); }
.sc-chip--product {
color: rgb(15 118 110);
background: rgb(45 212 191 / 0.16);
border-color: rgb(45 212 191 / 0.32);
}
.dark .sc-chip--product { color: rgb(94 234 212); }
.sc-chip--product .sc-chip-dot { background: rgb(20 184 166); }
.sc-chip--order {
color: rgb(189 56 41);
background: rgb(var(--sc-coral) / 0.14);
border-color: rgb(var(--sc-coral) / 0.32);
}
.dark .sc-chip--order { color: rgb(255 160 153); }
.sc-chip--order .sc-chip-dot { background: rgb(var(--sc-coral)); }
/* ---- Status badges ------------------------------------------------------ */
.sc-badge {
display: inline-flex;
align-items: center;
gap: 0.32rem;
padding: 0.16rem 0.6rem;
border-radius: 999px;
font-size: 0.68rem;
font-weight: 700;
letter-spacing: 0.01em;
border: 1px solid transparent;
}
.sc-badge--resolved {
color: rgb(15 118 110);
background: rgb(var(--sc-success) / 0.14);
border-color: rgb(var(--sc-success) / 0.3);
}
.dark .sc-badge--resolved { color: rgb(110 231 183); }
.sc-badge--escalate {
color: rgb(180 83 9);
background: rgb(var(--sc-warning) / 0.14);
border-color: rgb(var(--sc-warning) / 0.3);
}
.dark .sc-badge--escalate { color: rgb(251 191 36); }
.sc-badge--neutral {
color: rgb(var(--sc-line));
color: rgb(107 90 71);
background: rgb(140 120 96 / 0.14);
border-color: rgb(140 120 96 / 0.28);
}
.dark .sc-badge--neutral { color: rgb(179 158 126); }
/* ---- Decision / escalation cards --------------------------------------- */
.sc-decision { border-radius: 1.1rem; border: 1px solid; padding: 0.85rem 1rem; }
.sc-decision--approve {
background: rgb(var(--sc-success) / 0.1);
border-color: rgb(var(--sc-success) / 0.4);
}
.sc-decision--deny {
background: rgb(var(--sc-danger) / 0.08);
border-color: rgb(var(--sc-danger) / 0.34);
}
.sc-decision--escalate {
background: rgb(var(--sc-warning) / 0.1);
border-color: rgb(var(--sc-warning) / 0.36);
}
/* ---- Confidence meter --------------------------------------------------- */
.sc-meter { height: 0.45rem; border-radius: 999px; background: rgb(var(--sc-track)); overflow: hidden; }
.sc-meter > span {
display: block; height: 100%; border-radius: 999px;
background: linear-gradient(90deg, rgb(var(--sc-accent-strong)), rgb(var(--sc-accent)));
}
/* ---- Dashboard bar chart ------------------------------------------------ */
.sc-bar-track { height: 0.65rem; border-radius: 999px; background: rgb(var(--sc-track)); overflow: hidden; }
.sc-bar-fill {
display: block; height: 100%; border-radius: 999px; min-width: 0.5rem;
background: linear-gradient(90deg, rgb(var(--sc-accent-strong)), rgb(var(--sc-accent)));
}
/* Donut / progress ring uses inline conic-gradient via style attr. */
.sc-ring { border-radius: 999px; }
/* htmx loading affordance. */
.htmx-indicator { display: none; }
.htmx-request .htmx-indicator { display: inline-block; }
.htmx-request .htmx-indicator-hide { display: none; }
/* Fade-in for swapped content. */
@keyframes sc-fade-in {
from { opacity: 0; transform: translateY(5px); }
to { opacity: 1; transform: translateY(0); }
}
.sc-fade { animation: sc-fade-in .24s ease both; }
/* Typing dots (assistant thinking). */
.sc-typing span {
display: inline-block; width: 0.42rem; height: 0.42rem; margin: 0 0.08rem;
border-radius: 999px; background: currentColor; opacity: 0.5;
animation: sc-blink 1.2s infinite both;
}
.sc-typing span:nth-child(2) { animation-delay: 0.2s; }
.sc-typing span:nth-child(3) { animation-delay: 0.4s; }
@keyframes sc-blink { 0%, 80%, 100% { opacity: 0.25; } 40% { opacity: 0.9; } }
/* Focus ring. */
.sc-focus:focus-visible {
outline: none;
box-shadow: 0 0 0 3px rgb(var(--sc-accent) / 0.45);
}
/* Thin scrollbar for the chat thread. */
.sc-scroll { scrollbar-width: thin; scrollbar-color: rgb(var(--sc-accent) / 0.4) transparent; }
.sc-scroll::-webkit-scrollbar { width: 8px; }
.sc-scroll::-webkit-scrollbar-thumb { background: rgb(var(--sc-accent) / 0.35); border-radius: 999px; }
.sc-scroll::-webkit-scrollbar-track { background: transparent; }
</content>
</invoke>