/* 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; }