Document_Query / app /globals.css
Reubencf's picture
Deploy Next.js Query Bot as Docker Space
ff0e173
Raw
History Blame Contribute Delete
12.5 kB
@import "tailwindcss";
:root {
--background: #ffffff;
--foreground: #171717;
}
@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
--font-sans: var(--font-geist-sans);
--font-mono: var(--font-geist-mono);
}
@media (prefers-color-scheme: dark) {
:root {
--background: #0a0a0a;
--foreground: #ededed;
}
}
body {
color: var(--foreground);
font-family: var(--font-geist-sans), Arial, Helvetica, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-rendering: optimizeLegibility;
font-feature-settings: "liga" 1, "calt" 1;
}
/* Scrollable but with no visible scrollbar (used by the chat thread). */
.no-scrollbar {
-ms-overflow-style: none;
scrollbar-width: none;
}
.no-scrollbar::-webkit-scrollbar {
display: none;
}
/* ===== Query Bot Custom Animations & Styles ===== */
@keyframes float-top-right {
0% {
transform: translate(0, 0) scale(1);
opacity: 0.55;
}
50% {
transform: translate(-4%, 6%) scale(1.12);
opacity: 0.7;
}
100% {
transform: translate(3%, -3%) scale(0.92);
opacity: 0.45;
}
}
@keyframes float-bottom-left {
0% {
transform: translate(0, 0) scale(1);
opacity: 0.5;
}
50% {
transform: translate(5%, -8%) scale(1.08);
opacity: 0.65;
}
100% {
transform: translate(-3%, 3%) scale(0.95);
opacity: 0.45;
}
}
@keyframes float-bottom-right {
0% {
transform: translate(0, 0) scale(1);
opacity: 0.45;
}
50% {
transform: translate(-8%, -5%) scale(1.15);
opacity: 0.6;
}
100% {
transform: translate(3%, 2%) scale(0.9);
opacity: 0.35;
}
}
.animate-ambient-tr {
animation: float-top-right 16s ease-in-out infinite alternate;
}
.animate-ambient-bl {
animation: float-bottom-left 18s ease-in-out infinite alternate;
}
.animate-ambient-br {
animation: float-bottom-right 14s ease-in-out infinite alternate;
}
/* Typography styles for premium SaaS feeling */
.font-sans-geist {
font-family: var(--font-geist-sans), sans-serif;
}
.gif-clipped-word {
background-image: url("https://media3.giphy.com/media/v1.Y2lkPTc5MGI3NjExcTIyN2RwbGdkc2w4YWxva3pudHl6M3BtdXV0eW00ZDMzMDdhMzExMSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/irCR68lB8tZDy8GKb0/giphy.gif");
background-size: cover;
background-position: center;
background-repeat: repeat;
color: transparent;
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
position: relative;
display: inline-block;
font-weight: 700;
padding-right: 0.15em;
/* Prevents italic character clipping on the right edge */
}
/* ===== Aurora glass cards — vibrant gradient glow bleeding up from the
bottom of each card. Set --aurora-1 / --aurora-2 per card to recolor. ===== */
.aurora-card {
position: relative;
overflow: hidden;
isolation: isolate;
}
.aurora-card::after {
content: "";
position: absolute;
left: -15%;
right: -15%;
bottom: -55%;
height: 110%;
z-index: -1;
pointer-events: none;
background:
radial-gradient(ellipse 55% 100% at 35% 100%, var(--aurora-1, rgba(139, 92, 246, 0.55)) 0%, transparent 68%),
radial-gradient(ellipse 55% 100% at 70% 100%, var(--aurora-2, rgba(6, 182, 212, 0.5)) 0%, transparent 68%);
filter: blur(26px);
opacity: 0.5;
transform: translateY(8%);
transition: opacity 0.45s ease, transform 0.45s ease;
}
.aurora-card:hover::after {
opacity: 0.9;
transform: translateY(0);
}
@media (prefers-reduced-motion: reduce) {
.aurora-card::after {
transition: none;
}
}
/* Animated GIF fill — same asset used by the "documents" hero word, reused
as a button background. Paused by default (single still frame), and it
plays only while the user hovers the button. */
.gif-bg {
background-image: url("https://media3.giphy.com/media/irCR68lB8tZDy8GKb0/giphy_s.gif");
background-size: cover;
background-position: center;
background-repeat: no-repeat;
}
/* On hover, swap to the animated GIF so it plays from the first frame. */
.gif-bg:hover {
background-image: url("https://media3.giphy.com/media/v1.Y2lkPTc5MGI3NjExcTIyN2RwbGdkc2w4YWxva3pudHl6M3BtdXV0eW00ZDMzMDdhMzExMSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/irCR68lB8tZDy8GKb0/giphy.gif");
}
/* While pressed, drop the GIF entirely so the button reads as a transparent
(ghost) button on click. */
.gif-bg:active {
background-image: none;
background-color: transparent;
}
@media (prefers-reduced-motion: reduce) {
.gif-bg {
background-image: linear-gradient(135deg, #6366f1 0%, #a855f7 50%, #06b6d4 100%) !important;
}
}
/* ===== Radial glow emanating from the center boundary between white/dark halves ===== */
.hero-radial-glow {
position: absolute;
inset: 0;
pointer-events: none;
z-index: 1;
background:
/* Primary large glow – soft indigo/violet */
radial-gradient(ellipse 70% 55% at 50% 0%, rgba(99, 102, 241, 0.35) 0%, rgba(79, 70, 229, 0.15) 30%, transparent 70%),
/* Secondary wider cyan tint */
radial-gradient(ellipse 90% 45% at 50% 0%, rgba(6, 182, 212, 0.18) 0%, rgba(20, 184, 166, 0.06) 40%, transparent 75%),
/* Tight bright core */
radial-gradient(ellipse 40% 30% at 50% 0%, rgba(168, 85, 247, 0.25) 0%, transparent 60%);
}
/* The redesigned glowing horizon */
.hero-bloom {
/* Brand color variables — luminous indigo/periwinkle.
The inner basin is a soft periwinkle (not near-white), so the bottom of
the screen fills with gentle colour instead of reading as white space. */
--bloom-inner-start: #c7d2fe;
--bloom-inner-mid: #818cf8;
--bloom-arch-core: #4f46e5;
--bloom-arch-dark: #3730a3;
/* Cursor influence — driven from JS, defaults keep the bloom centered */
--bloom-mx: 0;
--bloom-my: 0;
/* Extra downward shift of the gradient centre. 0% on the landing hero;
bumped up in chat mode (.is-chatting) so the arch finishes just above
the chat input instead of rising into the middle of the screen. */
--bloom-push: 0%;
position: absolute;
/* Overhang past the viewport bottom so the GSAP breathing translate (y: -8)
never lifts the layer enough to reveal a white strip at the bottom edge. */
top: 0;
left: 0;
right: 0;
bottom: -12%;
overflow: hidden;
pointer-events: none;
z-index: 1;
/* Origin at the bottom so the GSAP entrance grows upward from the floor */
transform-origin: bottom center;
/* Entrance + breathing are driven by GSAP (see HeroSection.tsx).
The two pseudo-element layers still drift via CSS for the liquid effect. */
}
/* In chat mode, push the glow down so it sits just above the input. */
.hero-bloom.is-chatting {
--bloom-push: 14%;
}
.hero-bloom::before,
.hero-bloom::after {
content: "";
position: absolute;
inset: -10%;
transform-origin: bottom center;
pointer-events: none;
}
/* --- LIGHT LAYER A (Slightly left-biased) --- */
/* The gradient center is nudged by the cursor (--bloom-mx/--bloom-my) so the
bright core of the arch leans toward wherever the mouse is. */
.hero-bloom::before {
background:
radial-gradient(ellipse 80% 60% at calc(48% + 5% * var(--bloom-mx)) calc(113% + 3% * var(--bloom-my) + var(--bloom-push)),
transparent 83%,
rgba(255, 255, 255, 0.8) 88%,
transparent 93%),
radial-gradient(ellipse 80% 60% at calc(48% + 5% * var(--bloom-mx)) calc(113% + 3% * var(--bloom-my) + var(--bloom-push)),
var(--bloom-inner-start) 0%,
var(--bloom-inner-mid) 45%,
var(--bloom-arch-core) 72%,
var(--bloom-arch-dark) 85%,
transparent 92%);
filter: blur(8px);
animation: bloom-drift-left 11s ease-in-out infinite alternate;
}
/* --- LIGHT LAYER B (Slightly right-biased, opposite cursor lean for depth) --- */
.hero-bloom::after {
background:
radial-gradient(ellipse 82% 62% at calc(52% + 8% * var(--bloom-mx)) calc(116% + 4% * var(--bloom-my) + var(--bloom-push)),
transparent 83%,
rgba(255, 255, 255, 0.6) 88%,
transparent 93%),
radial-gradient(ellipse 82% 62% at calc(52% + 8% * var(--bloom-mx)) calc(116% + 4% * var(--bloom-my) + var(--bloom-push)),
var(--bloom-inner-start) 0%,
var(--bloom-inner-mid) 42%,
var(--bloom-arch-core) 70%,
var(--bloom-arch-dark) 84%,
transparent 92%);
filter: blur(10px);
mix-blend-mode: multiply;
animation: bloom-drift-right 15s ease-in-out infinite alternate;
}
/* White wash behind the headline that melts smoothly into the dark — no hard
seam. Solid white up top, fading fully transparent before the bloom. */
.hero-top-wash {
position: absolute;
top: 0;
left: 0;
right: 0;
height: 64%;
z-index: 2;
pointer-events: none;
background: linear-gradient(
to bottom,
#ffffff 0%,
#ffffff 56%,
rgba(255, 255, 255, 0.85) 72%,
rgba(255, 255, 255, 0.4) 86%,
rgba(255, 255, 255, 0) 100%
);
}
@keyframes bloom-drift-left {
0% {
transform: translate(-1.5%, 1%) scale(0.97);
filter: blur(8px) brightness(0.95);
}
100% {
transform: translate(1.5%, -1%) scale(1.03);
filter: blur(11px) brightness(1.05);
}
}
@keyframes bloom-drift-right {
0% {
transform: translate(1.5%, -0.5%) scale(1.02);
filter: blur(11px) brightness(1.03);
}
100% {
transform: translate(-1.5%, 0.5%) scale(0.98);
filter: blur(8px) brightness(0.97);
}
}
@media (prefers-reduced-motion: reduce) {
.hero-bloom {
animation: none;
}
.hero-bloom::before,
.hero-bloom::after {
animation: none;
transform: none;
filter: blur(8px);
}
}
/* ===== Chat page ambient glow ===== */
.chat-page-glow {
position: absolute;
inset: 0;
pointer-events: none;
z-index: 0;
background:
/* Center ambient glow */
radial-gradient(ellipse 60% 50% at 50% 30%, rgba(99, 102, 241, 0.12) 0%, transparent 70%),
/* Soft violet accent */
radial-gradient(ellipse 50% 40% at 60% 60%, rgba(139, 92, 246, 0.08) 0%, transparent 65%),
/* Subtle cyan tint */
radial-gradient(ellipse 45% 35% at 35% 50%, rgba(6, 182, 212, 0.06) 0%, transparent 60%);
}
@keyframes gradientShift {
0% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
100% {
background-position: 0% 50%;
}
}
/* Graceful fallback for browsers or users who preferred reduced motion */
@media (prefers-reduced-motion: reduce) {
.gif-clipped-word {
background-image: linear-gradient(135deg, #ffffff 0%, #cbd5e1 100%) !important;
background-size: 100% 100% !important;
animation: none !important;
}
}
.aurora-bg {
position: absolute;
inset: 0;
overflow: hidden;
/* No background-color here – parent already sets it */
background-image:
/* Left side soft glow - Modern Teal/Cyan */
radial-gradient(ellipse 60% 60% at -10% 30%, rgba(20, 184, 166, 0.16) 0%, rgba(13, 148, 136, 0.04) 50%, transparent 90%),
/* Right side soft glow - Sophisticated Violet/Purple */
radial-gradient(ellipse 60% 60% at 110% 40%, rgba(168, 85, 247, 0.15) 0%, rgba(139, 92, 246, 0.04) 50%, transparent 90%),
/* Center bottom soft blue ambient light */
radial-gradient(ellipse 70% 50% at 50% 100%, rgba(59, 130, 246, 0.14) 0%, rgba(29, 78, 216, 0.02) 60%, transparent 100%);
}
.aurora-bg::before {
content: "";
position: absolute;
inset: -15%;
background:
/* Floating cyan mist */
radial-gradient(ellipse 40% 40% at 30% 45%, rgba(6, 182, 212, 0.18) 0%, transparent 70%),
/* Floating violet mist */
radial-gradient(ellipse 40% 40% at 70% 55%, rgba(139, 92, 246, 0.16) 0%, transparent 70%),
/* Floating blue deep ambient */
radial-gradient(ellipse 45% 45% at 50% 75%, rgba(59, 130, 246, 0.12) 0%, transparent 75%);
filter: blur(60px);
animation: auroraFloat 20s ease-in-out infinite alternate;
}
.aurora-bg::after {
content: "";
position: absolute;
inset: 0;
opacity: 0.18;
pointer-events: none;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.35'/%3E%3C/svg%3E");
}
@keyframes auroraFloat {
from {
transform: translate3d(-2%, 1%, 0) scale(1);
opacity: 0.75;
}
to {
transform: translate3d(2%, -2%, 0) scale(1.08);
opacity: 1;
}
}