TypeScript 98.3%
CSS 0.9%
Shell 0.7%
1@import "tailwindcss";2@import "katex/dist/katex.min.css";34@custom-variant dark (&:where(.dark, .dark *));56@theme {7 /* Identité Immbot AI — héritée des couleurs institutionnelles UQO, raffinée */8 --color-brand-50: #eef4fb;9 --color-brand-100: #d9e6f5;10 --color-brand-200: #b3cdeb;11 --color-brand-300: #7dabdc;12 --color-brand-400: #4585c9;13 --color-brand-500: #1d64b0;14 --color-brand-600: #0d4f95;15 --color-brand-700: #003e7e;16 --color-brand-800: #063361;17 --color-brand-900: #0a2a4d;18 --color-brand-950: #081c33;1920 --color-gold-300: #eed484;21 --color-gold-400: #dcb94f;22 --color-gold-500: #c6a300;23 --color-gold-600: #a08300;2425 --color-surface-0: #ffffff;26 --color-surface-1: #f7f9fc;27 --color-surface-2: #eef2f7;28 --color-surface-3: #e3e9f1;2930 --font-sans: var(--font-inter), ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;31 --font-mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace;3233 --radius-xl2: 0.75rem;3435 --animate-fade-up: fade-up 0.35s ease both;36 --animate-fade-in: fade-in 0.25s ease both;37 --animate-pulse-soft: pulse-soft 2s ease-in-out infinite;3839 @keyframes fade-up {40 from { opacity: 0; transform: translateY(8px); }41 to { opacity: 1; transform: translateY(0); }42 }43 @keyframes fade-in {44 from { opacity: 0; }45 to { opacity: 1; }46 }47 @keyframes pulse-soft {48 0%, 100% { opacity: 1; }49 50% { opacity: 0.55; }50 }51}5253:root {54 --bg: #f4f6f9;55 --fg: #0e1a28;56 --muted: #51606f;57 --card: #ffffff;58 --border: #d4dce6;59 --sidebar: #ffffff;60}61.dark {62 --bg: #0b1320;63 --fg: #e7edf5;64 --muted: #94a5ba;65 --card: #101b2c;66 --border: #22314a;67 --sidebar: #0d1626;68}6970html { scroll-behavior: smooth; }71body {72 background: var(--bg);73 color: var(--fg);74 font-family: var(--font-sans);75 -webkit-font-smoothing: antialiased;76 text-rendering: optimizeLegibility;77 font-feature-settings: "cv11", "ss01";78}7980h1, h2, h3, h4 { letter-spacing: -0.02em; }8182/* Empêche le zoom automatique iOS sur les champs (< 16px) sans grossir le rendu desktop */83@media (max-width: 640px) {84 input, select, textarea { font-size: 16px !important; }85}8687/* Utilitaires sémantiques */88.bg-app { background: var(--bg); }89.bg-card { background: var(--card); }90.bg-sidebar { background: var(--sidebar); }91.text-fg { color: var(--fg); }92.text-muted { color: var(--muted); }93.border-app { border-color: var(--border); }9495::selection { background: color-mix(in srgb, var(--color-brand-500) 25%, transparent); }9697/* Scrollbars discrètes */98* { scrollbar-width: thin; scrollbar-color: color-mix(in srgb, var(--muted) 35%, transparent) transparent; }99*::-webkit-scrollbar { width: 8px; height: 8px; }100*::-webkit-scrollbar-thumb { background: color-mix(in srgb, var(--muted) 30%, transparent); border-radius: 8px; }101*::-webkit-scrollbar-track { background: transparent; }102103/* Focus accessible */104:focus-visible {105 outline: 2px solid var(--color-brand-500);106 outline-offset: 2px;107 border-radius: 4px;108}109110/* Markdown (réponses du chat, résumés) */111.prose-immbot {112 line-height: 1.65;113 font-size: 0.9375rem;114 overflow-wrap: break-word;115}116.prose-immbot > * + * { margin-top: 0.7em; }117.prose-immbot h1, .prose-immbot h2, .prose-immbot h3, .prose-immbot h4 {118 font-weight: 650; line-height: 1.3; margin-top: 1.2em;119}120.prose-immbot h1 { font-size: 1.2em; }121.prose-immbot h2 { font-size: 1.12em; }122.prose-immbot h3 { font-size: 1.05em; }123.prose-immbot ul { list-style: disc; padding-left: 1.4em; }124.prose-immbot ol { list-style: decimal; padding-left: 1.4em; }125.prose-immbot li + li { margin-top: 0.25em; }126.prose-immbot strong { font-weight: 650; }127.prose-immbot a { color: var(--color-brand-500); text-decoration: underline; text-underline-offset: 2px; }128.prose-immbot code {129 background: color-mix(in srgb, var(--muted) 12%, transparent);130 border-radius: 5px; padding: 0.12em 0.35em; font-family: var(--font-mono); font-size: 0.86em;131}132.prose-immbot pre {133 background: color-mix(in srgb, var(--muted) 10%, transparent);134 border: 1px solid var(--border);135 border-radius: 10px; padding: 0.8em 1em; overflow-x: auto;136}137.prose-immbot pre code { background: none; padding: 0; }138.prose-immbot table {139 width: 100%; border-collapse: collapse; font-size: 0.92em;140 display: block; overflow-x: auto;141}142.prose-immbot th, .prose-immbot td {143 border: 1px solid var(--border); padding: 0.45em 0.7em; text-align: left;144}145.prose-immbot th { background: color-mix(in srgb, var(--muted) 8%, transparent); font-weight: 600; }146.prose-immbot blockquote {147 border-left: 3px solid var(--color-brand-400); padding-left: 0.9em; color: var(--muted);148}149.prose-immbot .katex { font-size: 1.05em; }150.prose-immbot .katex-display { overflow-x: auto; overflow-y: hidden; padding: 0.2em 0; }151152/* Citation inline [S1] */153.citation-chip {154 display: inline-flex; align-items: center; justify-content: center;155 min-width: 1.35rem; height: 1.15rem; padding: 0 0.3rem; margin: 0 0.12rem;156 border-radius: 0.45rem; font-size: 0.68rem; font-weight: 650;157 background: color-mix(in srgb, var(--color-brand-500) 14%, transparent);158 color: var(--color-brand-500);159 border: 1px solid color-mix(in srgb, var(--color-brand-500) 25%, transparent);160 cursor: pointer; vertical-align: baseline; transition: background 0.15s ease;161 user-select: none;162}163.citation-chip:hover { background: color-mix(in srgb, var(--color-brand-500) 26%, transparent); }164.dark .citation-chip { color: var(--color-brand-300); }165166/* Curseur de streaming */167.stream-cursor::after {168 content: "▍"; color: var(--color-brand-400);169 animation: pulse-soft 1s ease-in-out infinite; margin-left: 1px;170}171172/* Skeletons */173.skeleton {174 background: linear-gradient(90deg,175 color-mix(in srgb, var(--muted) 10%, transparent) 25%,176 color-mix(in srgb, var(--muted) 18%, transparent) 50%,177 color-mix(in srgb, var(--muted) 10%, transparent) 75%);178 background-size: 200% 100%;179 animation: skeleton-slide 1.4s ease-in-out infinite;180 border-radius: 8px;181}182@keyframes skeleton-slide { from { background-position: 200% 0; } to { background-position: -200% 0; } }183184@media (prefers-reduced-motion: reduce) {185 *, *::before, *::after { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; }186}187