📄 app.css
📁 Path: /home/skhata/chandrasons.com/resources/css/app.css
📊 Size: 14.24 KB
🔒 Perm: 0644
📝 MIME: text/plain
@import url('https://fonts.googleapis.com/css2?family=Inter:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,400&display=swap');
@tailwind base;
@tailwind components;
@tailwind utilities;
/* ============================================================
DESIGN TOKENS
============================================================ */
:root {
/* ── Brand Colors (Chandra & Sons Pharma) ── */
--primary: #0D7B8A; /* Deep teal */
--primary-dark: #0A5C67; /* Darker teal for hover */
--primary-light: #E6F4F6; /* Teal tint for backgrounds */
--accent: #F4A922; /* Amber — CTAs, highlights */
--accent-dark: #C47E0A; /* Darker amber for hover */
--success: #27AE60; /* Green */
--dark: #1A2332; /* Near-black navy */
--text: #1A2332;
--text-muted: #5A6A7A;
--bg: #F5F7FA;
--border: #E2E8F0;
--white: #FFFFFF;
--shadow-xs: 0 1px 4px rgba(13,123,138,0.05);
--shadow-sm: 0 2px 12px rgba(13,123,138,0.08);
--shadow-md: 0 6px 28px rgba(13,123,138,0.12);
--shadow-lg: 0 12px 48px rgba(13,123,138,0.16);
--shadow-glow: 0 0 60px rgba(13,123,138,0.25);
--shadow-btn: 0 4px 18px rgba(13,123,138,0.35);
--shadow-accent:0 6px 24px rgba(244,169,34,0.38);
--r-sm: 8px;
--r-md: 14px;
--r-lg: 20px;
--r-xl: 28px;
--r-2xl: 40px;
}
/* ============================================================
BASE
============================================================ */
@layer base {
html { scroll-behavior: smooth; }
body {
font-family: 'Inter', system-ui, -apple-system, sans-serif;
color: var(--text);
background: var(--white);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
h1, h2, h3, h4, h5, h6 {
font-weight: 700;
line-height: 1.15;
color: var(--dark);
letter-spacing: -0.025em;
}
::selection { background: var(--primary); color: white; }
::-webkit-scrollbar { width: 5px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--primary); border-radius: 99px; }
}
/* ============================================================
COMPONENTS
============================================================ */
@layer components {
/* ─── Buttons ─── */
.btn {
@apply inline-flex items-center justify-center gap-2 font-semibold rounded-xl cursor-pointer select-none;
padding: 0.8125rem 1.875rem;
font-size: 0.9375rem;
letter-spacing: -0.01em;
transition: background 0.2s, box-shadow 0.2s, transform 0.15s;
}
.btn-primary {
@apply btn text-white;
background: var(--primary);
box-shadow: var(--shadow-btn);
}
.btn-primary:hover {
background: var(--primary-dark);
box-shadow: 0 8px 28px rgba(13,123,138,0.45);
transform: translateY(-2px);
}
.btn-accent {
@apply btn;
background: var(--accent);
color: #1A2332;
box-shadow: var(--shadow-accent);
}
.btn-accent:hover {
background: var(--accent-dark);
color: #fff;
box-shadow: 0 10px 32px rgba(244,169,34,0.50);
transform: translateY(-2px);
}
.btn-outline {
@apply btn border-2 bg-transparent;
border-color: var(--primary);
color: var(--primary);
}
.btn-outline:hover {
background: var(--primary);
color: white;
transform: translateY(-2px);
box-shadow: var(--shadow-btn);
}
.btn-outline-white {
@apply btn border-2 bg-transparent text-white;
border-color: rgba(255,255,255,0.55);
}
.btn-outline-white:hover {
background: white;
color: var(--primary);
border-color: white;
transform: translateY(-2px);
}
/* ─── Cards ─── */
.card {
background: var(--white);
border-radius: var(--r-lg);
border: 1px solid var(--border);
box-shadow: var(--shadow-sm);
transition: box-shadow 0.25s, transform 0.25s, border-color 0.25s;
}
.card:hover {
box-shadow: var(--shadow-md);
transform: translateY(-3px);
border-color: rgba(13,123,138,0.22);
}
.card-glass {
background: rgba(255,255,255,0.82);
backdrop-filter: blur(24px);
-webkit-backdrop-filter: blur(24px);
border-radius: var(--r-lg);
border: 1px solid rgba(255,255,255,0.65);
box-shadow: var(--shadow-md);
}
.card-dark {
background: rgba(11,31,43,0.75);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border-radius: var(--r-lg);
border: 1px solid rgba(255,255,255,0.10);
box-shadow: var(--shadow-lg);
}
/* ─── Badges ─── */
.badge {
@apply inline-flex items-center gap-1.5 font-semibold rounded-full;
font-size: 0.7rem;
letter-spacing: 0.08em;
text-transform: uppercase;
padding: 0.3rem 0.85rem;
}
.badge-primary { @apply badge; background: var(--primary-light); color: var(--primary); }
.badge-accent { @apply badge; background: #FEF3CD; color: var(--accent-dark); }
.badge-white { @apply badge text-white; background: rgba(255,255,255,0.18); }
.badge-dark { @apply badge text-white; background: var(--dark); }
/* ─── Section Typography ─── */
.section-eyebrow {
display: block;
font-size: 0.7rem;
font-weight: 700;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--primary);
margin-bottom: 0.75rem;
}
.section-title {
font-size: clamp(1.75rem, 3.5vw, 2.5rem);
font-weight: 800;
letter-spacing: -0.03em;
line-height: 1.15;
color: var(--dark);
}
.section-subtitle {
font-size: 1.0625rem;
line-height: 1.7;
color: var(--text-muted);
margin-top: 1rem;
}
/* ─── Divider accent ─── */
.accent-line {
display: block;
width: 44px;
height: 4px;
border-radius: 99px;
background: var(--accent);
margin-top: 1rem;
}
/* ─── Nav Link ─── */
.nav-link {
position: relative;
font-size: 0.875rem;
font-weight: 500;
color: var(--text-muted);
transition: color 0.2s;
padding-bottom: 2px;
}
.nav-link::after {
content: '';
position: absolute;
bottom: -3px;
left: 0;
width: 0;
height: 2px;
background: var(--primary);
border-radius: 99px;
transition: width 0.3s ease;
}
.nav-link:hover { color: var(--primary); }
.nav-link:hover::after { width: 100%; }
.nav-link.active { color: var(--primary); }
.nav-link.active::after{ width: 100%; }
/* ─── Form Inputs ─── */
.form-label {
display: block;
font-size: 0.8125rem;
font-weight: 600;
color: var(--text);
margin-bottom: 0.375rem;
letter-spacing: -0.01em;
}
.form-input {
width: 100%;
border-radius: var(--r-md);
border: 1.5px solid var(--border);
background: var(--white);
padding: 0.75rem 1rem;
font-size: 0.9375rem;
font-family: 'Inter', sans-serif;
color: var(--text);
transition: border-color 0.2s, box-shadow 0.2s;
outline: none;
appearance: none;
}
.form-input::placeholder { color: var(--text-muted); font-weight: 400; }
.form-input:focus {
border-color: var(--primary);
box-shadow: 0 0 0 3px rgba(13,123,138,0.12);
}
/* ─── Gradient Text ─── */
.gradient-text {
background: linear-gradient(135deg, var(--primary), #22C55E 80%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
/* ─── Icon Box ─── */
.icon-box {
display: flex;
align-items: center;
justify-content: center;
width: 52px;
height: 52px;
border-radius: var(--r-md);
background: var(--primary-light);
color: var(--primary);
flex-shrink: 0;
transition: background 0.2s, color 0.2s;
}
/* ─── Floating Action Buttons ─── */
/* WhatsApp pulse ring */
.fab-wa-pulse {
position: relative;
}
.fab-wa-pulse::before {
content: '';
position: absolute;
inset: 0;
border-radius: 50%;
background: #25D366;
animation: wa-ping 2.2s ease-out infinite;
z-index: -1;
}
/* Diary FAB pulse ring */
.fab-diary {
position: relative;
}
.fab-diary::before {
content: '';
position: absolute;
inset: 0;
border-radius: 50%;
background: var(--primary);
animation: wa-ping 3s ease-out infinite;
z-index: -1;
}
}
/* ============================================================
ANIMATIONS & KEYFRAMES
============================================================ */
@keyframes wa-ping {
0% { transform: scale(1); opacity: 0.55; }
100% { transform: scale(1.9); opacity: 0; }
}
@keyframes fadeUp {
from { opacity: 0; transform: translateY(28px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes float {
0%, 100% { transform: translateY(0px); }
45% { transform: translateY(-14px); }
65% { transform: translateY(-8px); }
}
@keyframes floatReverse {
0%, 100% { transform: translateY(0px) rotate(0deg); }
45% { transform: translateY(10px) rotate(3deg); }
}
@keyframes orbitSpin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
@keyframes orbitSpinReverse {
from { transform: rotate(0deg); }
to { transform: rotate(-360deg); }
}
@keyframes pillBounce {
0%, 100% { transform: translateY(0) rotate(-12deg); }
50% { transform: translateY(-18px) rotate(-12deg); }
}
@keyframes glowPulse {
0%, 100% { opacity: 0.3; transform: scale(1); }
50% { opacity: 0.6; transform: scale(1.08); }
}
@keyframes marquee {
from { transform: translateX(0); }
to { transform: translateX(-50%); }
}
@keyframes countUp {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
/* Utility animation classes */
.animate-fade-up { animation: fadeUp 0.65s cubic-bezier(0.22,1,0.36,1) both; }
.animate-fade-up-1 { animation: fadeUp 0.65s 0.10s cubic-bezier(0.22,1,0.36,1) both; }
.animate-fade-up-2 { animation: fadeUp 0.65s 0.20s cubic-bezier(0.22,1,0.36,1) both; }
.animate-fade-up-3 { animation: fadeUp 0.65s 0.30s cubic-bezier(0.22,1,0.36,1) both; }
.animate-fade-up-4 { animation: fadeUp 0.65s 0.42s cubic-bezier(0.22,1,0.36,1) both; }
.animate-fade-up-5 { animation: fadeUp 0.65s 0.54s cubic-bezier(0.22,1,0.36,1) both; }
.animate-float { animation: float 5s ease-in-out infinite; }
.animate-float-slow { animation: float 7s ease-in-out infinite; }
.animate-float-delay { animation: float 5s 1.5s ease-in-out infinite; }
.animate-float-rev { animation: floatReverse 6s ease-in-out infinite; }
/* ============================================================
BRAND CAROUSEL
============================================================ */
.brand-carousel {
overflow: hidden;
position: relative;
padding: 0.5rem 0;
}
.brand-carousel::before,
.brand-carousel::after {
content: '';
position: absolute;
top: 0; bottom: 0;
width: 100px;
z-index: 2;
pointer-events: none;
}
.brand-carousel::before { left: 0; background: linear-gradient(to right, white, transparent); }
.brand-carousel::after { right: 0; background: linear-gradient(to left, white, transparent); }
.brand-track {
display: flex;
gap: 1.25rem;
width: max-content;
animation: marquee 32s linear infinite;
}
.brand-track:hover { animation-play-state: paused; }
/* ============================================================
HERO
============================================================ */
.hero-gradient {
background: linear-gradient(130deg, #05202C 0%, #0D7B8A 55%, #0B6170 100%);
}
.hero-overlay {
background: linear-gradient(
110deg,
rgba(5,32,44,0.95) 0%,
rgba(13,94,107,0.80) 45%,
rgba(13,123,138,0.35) 100%
);
}
/* ============================================================
SCROLL REVEAL
============================================================ */
.reveal {
opacity: 0;
transform: translateY(32px);
transition: opacity 0.65s cubic-bezier(0.22,1,0.36,1), transform 0.65s cubic-bezier(0.22,1,0.36,1);
}
.reveal.visible { opacity: 1; transform: none; }
.reveal-delay-1 { transition-delay: 0.10s; }
.reveal-delay-2 { transition-delay: 0.20s; }
.reveal-delay-3 { transition-delay: 0.30s; }
/* ============================================================
FAQ ACCORDION
============================================================ */
.faq-content {
max-height: 0;
overflow: hidden;
transition: max-height 0.38s cubic-bezier(0.22,1,0.36,1), padding 0.2s;
}
.faq-content.open { max-height: 600px; }
/* ============================================================
MISC
============================================================ */
.text-balance { text-wrap: balance; }
.counter-number { font-variant-numeric: tabular-nums; }
.ring-teal {
box-shadow: 0 0 0 4px rgba(13,123,138,0.15);
}
/* ============================================================
RESPONSIVE UTILITIES
============================================================ */
/* Prevent horizontal overflow globally */
html, body { max-width: 100vw; overflow-x: hidden; }
/* Mobile-specific adjustments */
@media (max-width: 640px) {
/* Section padding */
section { padding-top: 3.5rem !important; padding-bottom: 3.5rem !important; }
/* Hero section on mobile */
.section-title { font-size: clamp(1.5rem, 7vw, 2rem) !important; }
.section-subtitle { font-size: 0.9375rem !important; }
/* Buttons on mobile */
.btn { padding: 0.75rem 1.375rem !important; font-size: 0.875rem !important; }
/* Card padding reduction */
.card { border-radius: var(--r-md) !important; }
/* Brand carousel */
.brand-carousel::before, .brand-carousel::after { width: 40px !important; }
/* Form inputs */
.form-input { padding: 0.6875rem 0.875rem !important; font-size: 0.875rem !important; }
}
/* Tablet */
@media (max-width: 768px) {
.section-title { font-size: clamp(1.625rem, 5vw, 2.25rem) !important; }
}
/* Fix: floating stat cards don't overflow on small screens */
@media (max-width: 1024px) {
.absolute.-bottom-5.-right-5 {
position: static !important;
margin-top: 1rem !important;
display: inline-block !important;
}
}
/* Enquiry form on mobile */
@media (max-width: 640px) {
.fi-simple-main { padding: 1rem !important; }
}
/* Fix stats section grid on very small screens */
@media (max-width: 400px) {
.grid.grid-cols-2 { grid-template-columns: 1fr !important; }
}