SegVision / frontend /src /app /globals.css
Indrajit Ari
chore: add HF Spaces Docker deployment
f020d6c
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap');
@tailwind base;
@tailwind components;
@tailwind utilities;
/* ─── Tokens ───────────────────────────────────────────────────────────────── */
:root {
--bg: #ffffff;
--surface: #fafafa;
--border: #e5e7eb;
--border2: #f0f0f0;
--text: #0f172a;
--muted: #64748b;
--accent: #f97316;
--accent2: #fbbf24;
--radius: 16px;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
html, body {
min-height: 100vh;
background: var(--bg);
color: var(--text);
font-family: 'Inter', system-ui, sans-serif;
scroll-behavior: smooth;
overflow-x: hidden;
-webkit-font-smoothing: antialiased;
}
/* ─── Scrollbar ─────────────────────────────────────────────────────────────── */
::-webkit-scrollbar { width: 5px; }
::-webkit-scrollbar-track { background: #f1f5f9; }
::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 3px; }
::-webkit-scrollbar-thumb:hover { background: #94a3b8; }
/* ─── Subtle dot grid background ───────────────────────────────────────────── */
.page-bg {
position: fixed;
inset: 0;
z-index: 0;
pointer-events: none;
background-image: radial-gradient(circle, rgba(0,0,0,0.06) 1px, transparent 1px);
background-size: 24px 24px;
}
/* ─── ─── Scroll Animations ─────────────────────────────────────────────────── */
.scroll-hidden {
opacity: 0;
transform: translateY(28px);
transition: opacity 0.65s cubic-bezier(0.4, 0, 0.2, 1), transform 0.65s cubic-bezier(0.4, 0, 0.2, 1);
}
.scroll-hidden.delay-1 { transition-delay: 0.1s; }
.scroll-hidden.delay-2 { transition-delay: 0.2s; }
.scroll-hidden.delay-3 { transition-delay: 0.3s; }
.scroll-hidden.delay-4 { transition-delay: 0.4s; }
.scroll-visible {
opacity: 1 !important;
transform: translateY(0) !important;
}
/* Fade in from left */
.scroll-left {
opacity: 0;
transform: translateX(-24px);
transition: opacity 0.6s ease, transform 0.6s ease;
}
.scroll-left.scroll-visible { opacity: 1; transform: translateX(0); }
/* Fade in from right */
.scroll-right {
opacity: 0;
transform: translateX(24px);
transition: opacity 0.6s ease, transform 0.6s ease;
}
.scroll-right.scroll-visible { opacity: 1; transform: translateX(0); }
/* Scale in */
.scroll-scale {
opacity: 0;
transform: scale(0.93);
transition: opacity 0.55s ease, transform 0.55s cubic-bezier(0.34, 1.2, 0.64, 1);
}
.scroll-scale.scroll-visible { opacity: 1; transform: scale(1); }
/* ─── Navbar ────────────────────────────────────────────────────────────────── */
.navbar {
background: rgba(255, 255, 255, 0.88);
backdrop-filter: blur(16px) saturate(150%);
-webkit-backdrop-filter: blur(16px) saturate(150%);
border-bottom: 1px solid var(--border2);
}
/* ─── Cards ─────────────────────────────────────────────────────────────────── */
.card {
background: #ffffff;
border: 1px solid var(--border);
border-radius: var(--radius);
transition: box-shadow 0.25s, border-color 0.25s, transform 0.2s;
}
.card:hover {
box-shadow: 0 12px 40px rgba(0,0,0,0.09);
border-color: #d1d5db;
transform: translateY(-2px);
}
/* ─── Moving Border Card ────────────────────────────────────────────────────── */
.moving-border-card {
position: relative;
background: #ffffff;
border-radius: var(--radius);
}
.moving-border-card::before {
content: '';
position: absolute;
inset: -1px;
border-radius: calc(var(--radius) + 1px);
background: conic-gradient(
from var(--angle, 0deg),
transparent 75%,
#f97316 80%,
#fbbf24 85%,
#fb923c 90%,
transparent 95%
);
animation: border-spin 4s linear infinite;
z-index: -1;
}
.moving-border-card::after {
content: '';
position: absolute;
inset: 0;
border-radius: var(--radius);
background: #ffffff;
z-index: -1;
}
@property --angle {
syntax: '<angle>';
initial-value: 0deg;
inherits: false;
}
@keyframes border-spin { to { --angle: 360deg; } }
/* ─── Drop Zone ─────────────────────────────────────────────────────────────── */
.drop-zone {
border: 2px dashed #e5e7eb;
border-radius: 12px;
background: #fafafa;
cursor: pointer;
transition: all 0.25s ease;
}
.drop-zone:hover,
.drop-zone.drag-over {
border-color: #f97316;
background: #fff8f2;
box-shadow: 0 0 0 4px rgba(249,115,22,0.07);
}
/* ─── Black CTA Button ──────────────────────────────────────────────────────── */
.btn-primary {
position: relative;
overflow: hidden;
background: #0f172a;
border: 0;
border-radius: 12px;
color: #ffffff;
font-weight: 600;
cursor: pointer;
transition: transform 0.2s, box-shadow 0.2s, background 0.2s;
letter-spacing: -0.01em;
}
.btn-primary::after {
content: '';
position: absolute;
top: -50%; left: -80%;
width: 60%; height: 200%;
background: linear-gradient(105deg, transparent 40%, rgba(255,255,255,0.15) 50%, transparent 60%);
transform: skewX(-20deg);
animation: shimmer-light 3s ease-in-out infinite;
}
@keyframes shimmer-light {
0% { left: -80%; }
100% { left: 140%; }
}
.btn-primary:hover {
background: #1e293b;
transform: translateY(-1px);
box-shadow: 0 8px 30px rgba(15,23,42,0.25);
}
.btn-primary:active { transform: translateY(0); }
.btn-primary:disabled {
background: #cbd5e1;
color: #94a3b8;
cursor: not-allowed;
transform: none;
box-shadow: none;
}
.btn-primary:disabled::after { display: none; }
/* ─── Outlined Button ───────────────────────────────────────────────────────── */
.btn-outline {
background: transparent;
border: 1.5px solid var(--border);
border-radius: 12px;
color: var(--muted);
font-weight: 500;
cursor: pointer;
transition: all 0.2s;
}
.btn-outline:hover {
border-color: #94a3b8;
color: var(--text);
background: #f8fafc;
}
/* ─── Progress Bar ──────────────────────────────────────────────────────────── */
.progress-track {
background: #f1f5f9;
border-radius: 999px;
overflow: hidden;
}
.progress-fill {
height: 100%;
border-radius: 999px;
background: linear-gradient(90deg, #f97316, #fbbf24, #fb923c);
background-size: 200% 100%;
animation: gradient-scroll 2s linear infinite;
transition: width 0.6s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
}
.progress-fill::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(90deg, transparent, rgba(255,255,255,0.5), transparent);
animation: pill-shimmer 1.5s linear infinite;
}
@keyframes gradient-scroll {
0% { background-position: 0% 50%; }
100% { background-position: 200% 50%; }
}
@keyframes pill-shimmer {
0% { transform: translateX(-100%); }
100% { transform: translateX(400%); }
}
/* ─── Class Pill ─────────────────────────────────────────────────────────────── */
.class-pill {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 4px 10px;
border-radius: 999px;
font-size: 12px;
font-weight: 500;
background: #f8fafc;
border: 1px solid #e5e7eb;
color: #475569;
transition: all 0.2s;
animation: pop-in 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.class-pill:hover {
background: #fff8f2;
border-color: #fdba74;
color: #c2410c;
transform: scale(1.05);
}
@keyframes pop-in {
0% { opacity: 0; transform: scale(0.7); }
100% { opacity: 1; transform: scale(1); }
}
/* ─── Stat Card ─────────────────────────────────────────────────────────────── */
.stat-card {
background: #ffffff;
border: 1px solid #f0f0f0;
border-radius: 14px;
padding: 20px;
transition: all 0.25s;
position: relative;
overflow: hidden;
cursor: default;
}
.stat-card:hover {
border-color: #fdba74;
box-shadow: 0 8px 30px rgba(249,115,22,0.08);
transform: translateY(-3px);
}
.stat-card::before {
content: '';
position: absolute;
top: 0; left: 0; right: 0;
height: 2px;
background: linear-gradient(90deg, #f97316, #fbbf24);
transform: scaleX(0);
transform-origin: left;
transition: transform 0.3s ease;
}
.stat-card:hover::before { transform: scaleX(1); }
/* ─── Gradient Heading Text ─────────────────────────────────────────────────── */
.text-gradient {
background: linear-gradient(135deg, #f97316 0%, #f59e0b 50%, #fb923c 100%);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-size: 200% 200%;
animation: gradient-shift 4s ease infinite;
}
@keyframes gradient-shift {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
/* ─── Word animation ────────────────────────────────────────────────────────── */
.word-animate {
display: inline-block;
opacity: 0;
transform: translateY(20px);
animation: word-in 0.5s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}
@keyframes word-in {
to { opacity: 1; transform: translateY(0); }
}
/* ─── Badge ─────────────────────────────────────────────────────────────────── */
.badge {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 5px 14px;
border-radius: 999px;
border: 1px solid #fed7aa;
background: #fff7ed;
font-size: 12px;
font-weight: 500;
color: #c2410c;
}
/* ─── Divider ───────────────────────────────────────────────────────────────── */
.divider {
height: 1px;
background: linear-gradient(90deg, transparent, #e5e7eb 20%, #e5e7eb 80%, transparent);
}
/* ─── Step Indicator ────────────────────────────────────────────────────────── */
.step-dot {
width: 28px; height: 28px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 11px;
font-weight: 700;
transition: all 0.4s;
flex-shrink: 0;
}
.step-dot.done { background: #dcfce7; color: #15803d; border: 2px solid #86efac; }
.step-dot.active { background: #0f172a; color: white; border: 2px solid #0f172a; box-shadow: 0 0 0 3px rgba(15,23,42,0.12); }
.step-dot.pending { background: #f8fafc; color: #94a3b8; border: 2px solid #e5e7eb; }
/* ─── Bounce Dots ───────────────────────────────────────────────────────────── */
.bounce-dot {
display: inline-block;
width: 7px; height: 7px;
border-radius: 50%;
animation: bounce-dot 1.2s ease-in-out infinite;
}
.bounce-dot:nth-child(1) { animation-delay: 0s; }
.bounce-dot:nth-child(2) { animation-delay: 0.2s; }
.bounce-dot:nth-child(3) { animation-delay: 0.4s; }
@keyframes bounce-dot {
0%, 80%, 100% { transform: scale(0.7); opacity: 0.4; }
40% { transform: scale(1.2); opacity: 1; }
}
/* ─── Range Input ───────────────────────────────────────────────────────────── */
input[type="range"] {
-webkit-appearance: none;
appearance: none;
background: #e5e7eb;
border-radius: 999px;
cursor: pointer;
}
input[type="range"]::-webkit-slider-thumb {
-webkit-appearance: none;
width: 14px; height: 14px;
border-radius: 50%;
background: #0f172a;
cursor: pointer;
}
/* ─── Video UI ──────────────────────────────────────────────────────────────── */
.video-wrapper { background: #000; border-radius: 12px; overflow: hidden; }
.video-wrapper video { width: 100%; display: block; object-fit: contain; }
/* ─── Section spacing ───────────────────────────────────────────────────────── */
.section { padding: 80px 0; }