paraAI_CHATBOT / frontend /src /index.css
caarleexx's picture
Update frontend/src/index.css
569fee8 verified
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Lora:ital,wght@0,500;0,600;1,400&display=swap');
@tailwind base;
@tailwind components;
@tailwind utilities;
/* ── BASE ────────────────────────────────────────────────────────── */
@layer base {
*, *::before, *::after { box-sizing: border-box; }
html { font-size: 16px; }
body {
@apply bg-dark-950 text-slate-100;
font-family: 'Inter', system-ui, -apple-system, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
::-webkit-scrollbar { width: 5px; height: 5px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { @apply bg-dark-600 rounded-full; }
::-webkit-scrollbar-thumb:hover { @apply bg-gold-700; }
::selection {
@apply bg-gold-700/40 text-gold-100;
}
}
/* ── CUSTOM PROSE (markdown in chat) ─────────────────────────────── */
@layer components {
.prose-para {
@apply text-slate-200 leading-relaxed;
}
.prose-para h1 {
@apply font-serif font-semibold text-gold-300 text-xl mt-4 mb-2 pb-1 border-b border-dark-600;
}
.prose-para h2 {
@apply font-serif font-semibold text-gold-300 text-lg mt-3 mb-1.5;
}
.prose-para h3 {
@apply font-serif font-medium text-slate-200 text-base mt-3 mb-1;
}
.prose-para strong {
@apply font-semibold text-slate-100;
}
.prose-para em {
@apply italic text-slate-300;
}
.prose-para code {
@apply font-mono text-xs bg-navy-900/60 border border-navy-600/40 text-sky-300 rounded px-1.5 py-0.5;
/* Garantir quebra de linha para código inline */
white-space: pre-wrap;
word-wrap: break-word;
overflow-wrap: break-word;
max-width: 100%;
}
.prose-para blockquote {
@apply border-l-2 border-gold-600 bg-gold-950/20 rounded-r-lg px-4 py-2.5 my-3;
@apply font-serif italic text-gold-200/90 text-sm;
}
.prose-para a {
@apply text-gold-400 underline underline-offset-2 hover:text-gold-300 transition-colors;
}
.prose-para hr {
@apply border-dark-600 my-4;
}
.prose-para br {
@apply leading-relaxed;
}
/* Consecutive blockquotes */
.prose-para blockquote + blockquote {
@apply mt-1;
}
/* ── BLOCOS DE CÓDIGO (para highlight.js ou outros) ────────── */
/* Aplica a blocos <pre><code> e também a <code> com classes de highlight */
pre code,
pre code.hljs,
code.hljs,
.hljs {
white-space: pre-wrap !important;
word-wrap: break-word !important;
overflow-wrap: break-word !important;
max-width: 100%;
}
/* Ajuste adicional para <pre> que envolve o código */
pre {
@apply bg-navy-900/80 border border-navy-700 rounded-lg p-3 overflow-x-auto;
}
/* ── ESTILO ESPECÍFICO PARA EMENTAS (language-ementa) ────────── */
pre code.language-ementa {
display: block;
position: relative;
padding-top: 2rem; /* espaço para o label */
background-color: #1e293b; /* tom navy mais escuro */
border-left: 4px solid #c9a84c; /* dourado */
border-radius: 0.5rem;
font-family: 'Lora', Georgia, serif; /* fonte serifada para contraste */
font-size: 0.9rem;
line-height: 1.6;
color: #e2e8f0;
}
/* Pseudo-elemento para o label "EMENTA" */
pre code.language-ementa::before {
content: "⚖ EMENTA";
position: absolute;
top: 0;
left: 0;
background: #c9a84c;
color: #0f172a;
font-family: 'Inter', sans-serif;
font-size: 0.7rem;
font-weight: 600;
letter-spacing: 0.05em;
padding: 0.25rem 0.75rem;
border-radius: 0 0 0.5rem 0;
text-transform: uppercase;
z-index: 10;
}
}
/* ── ANIMATIONS ───────────────────────────────────────────────────── */
@layer utilities {
@keyframes slideUp {
from { opacity: 0; transform: translateY(12px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes float {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-6px); }
}
@keyframes blink {
0%, 100% { opacity: 1; }
50% { opacity: 0; }
}
@keyframes accordion {
from { opacity: 0; transform: translateY(-4px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes goldPulse {
0%, 100% { box-shadow: 0 0 0 0 rgba(201,168,76,0); }
50% { box-shadow: 0 0 12px 3px rgba(201,168,76,.25); }
}
@keyframes spin {
to { transform: rotate(360deg); }
}
.animate-slideUp { animation: slideUp 0.35s ease both; }
.animate-fadeIn { animation: fadeIn 0.5s ease both; }
.animate-float { animation: float 3s ease-in-out infinite; }
.animate-blink { animation: blink 1s step-end infinite; }
.animate-accordion { animation: accordion 0.25s ease both; }
.animate-goldPulse { animation: goldPulse 2s ease-in-out infinite; }
.animate-spin-slow { animation: spin 1.5s linear infinite; }
}