@import "tailwindcss"; @theme { /* === Luxury robotics Graphite + Royal Blue + Silver === */ --color-bg: #0a0a0c; --color-bg-2: #16151a; --color-bg-3: #1c1b21; --color-bg-4: #221f20; --color-surface: rgba(34, 31, 32, 0.7); --color-primary: #0a0a0c; --color-secondary: #16151a; /* Logo palette */ --color-blue: #273F94; --color-blue-deep: #1a2e6e; --color-blue-bright: #3a55c4; --color-silver: #DEE0F0; --color-silver-soft: #D7DBEA; --color-steel: #8891C7; --color-graphite: #221F20; --color-white: #FBFBFD; /* Accent aliases (kept for legacy class names) */ --color-gold: #DEE0F0; --color-accent: #273F94; --color-accent-2: #D7DBEA; --color-accent-3: #8891C7; --color-accent-hover: #3a55c4; /* Text */ --color-text-primary: #FBFBFD; --color-text-secondary: #DEE0F0; --color-text-muted: #8891C7; --color-text-dim: #6a73a5; /* Borders */ --color-border: rgba(199, 207, 230, 0.18); --color-border-strong: rgba(199, 207, 230, 0.36); --color-border-light: rgba(199, 207, 230, 0.08); --color-border-neutral: rgba(255, 255, 255, 0.08); /* Glass */ --color-glass-bg: rgba(28, 27, 33, 0.6); --color-glass-border: rgba(199, 207, 230, 0.22); --color-glass-highlight: rgba(222, 224, 240, 0.06); /* Spacing */ --spacing-xs: 0.25rem; --spacing-sm: 0.5rem; --spacing-md: 1rem; --spacing-lg: 1.5rem; --spacing-xl: 2rem; --spacing-2xl: 3rem; /* Radius */ --radius-sm: 0.375rem; --radius-md: 0.5rem; --radius-lg: 0.75rem; --radius-xl: 1rem; --radius-2xl: 1.5rem; /* Shadows */ --shadow-glow: 0 0 30px rgba(39, 63, 148, 0.32); --shadow-glow-lg: 0 0 60px rgba(39, 63, 148, 0.4); --shadow-card: 0 14px 50px rgba(0, 0, 0, 0.6); /* Transitions */ --transition-fast: 150ms ease; --transition-base: 200ms ease; --transition-slow: 300ms ease; } html, body { margin: 0; padding: 0; min-height: 100vh; background-color: var(--color-bg); color: var(--color-text-primary); font-family: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; overflow-x: hidden; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } body { background: radial-gradient(1200px 700px at 80% -10%, rgba(39, 63, 148, 0.18), transparent 60%), radial-gradient(900px 500px at -10% 30%, rgba(58, 85, 196, 0.10), transparent 60%), radial-gradient(800px 500px at 50% 110%, rgba(136, 145, 199, 0.10), transparent 60%), linear-gradient(180deg, #050507 0%, #0a0a0c 50%, #050507 100%); background-attachment: fixed; } html { scroll-behavior: smooth; } :focus-visible { outline: 2px solid var(--color-blue); outline-offset: 2px; } ::selection { background-color: rgba(39, 63, 148, 0.55); color: #ffffff; } /* === Glassmorphism === */ .glass { background: var(--color-glass-bg); backdrop-filter: blur(18px); -webkit-backdrop-filter: blur(18px); border: 1px solid var(--color-glass-border); box-shadow: var(--shadow-card); } .glass-panel { background: var(--color-glass-bg); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 1px solid var(--color-glass-border); box-shadow: var(--shadow-card); } .glass-panel-highlight { background: linear-gradient(135deg, var(--color-glass-highlight) 0%, transparent 60%); } /* === Typography gradients (metallic silver-blue) === */ .text-gradient { background: linear-gradient(135deg, #FFFFFF 0%, #DEE0F0 50%, #8891C7 100%); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; color: transparent; } .text-gradient-accent { background: linear-gradient(135deg, #FFFFFF 0%, #DEE0F0 50%, #8891C7 100%); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; color: transparent; } .text-blue { color: var(--color-blue); } .text-silver { color: var(--color-silver); } /* Metallic silver-blue border */ .metallic-border { position: relative; } .metallic-border::before { content: ''; position: absolute; inset: 0; border-radius: inherit; padding: 1px; background: linear-gradient(135deg, rgba(222, 224, 240, 0.55), rgba(136, 145, 199, 0.3) 45%, rgba(39, 63, 148, 0.0) 100%); -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); -webkit-mask-composite: xor; mask-composite: exclude; pointer-events: none; } /* === Hero animated gradient === */ .hero-gradient { position: absolute; inset: 0; background: radial-gradient(ellipse 70% 60% at 60% 40%, rgba(39, 63, 148, 0.32) 0%, transparent 60%), radial-gradient(ellipse 60% 50% at 20% 70%, rgba(58, 85, 196, 0.22) 0%, transparent 55%), radial-gradient(ellipse 80% 70% at 80% 100%, rgba(136, 145, 199, 0.18) 0%, transparent 60%), linear-gradient(180deg, #07080c 0%, #0a0a10 50%, #050507 100%); animation: heroShift 16s ease-in-out infinite alternate; } @keyframes heroShift { 0% { background-position: 0% 0%, 0% 0%, 0% 0%, 0% 0%; } 100% { background-position: 100% 100%, 80% 0%, 0% 100%, 0% 0%; } } /* Grid overlay */ .grid-overlay { position: absolute; inset: 0; background-image: linear-gradient(rgba(199, 207, 230, 0.05) 1px, transparent 1px), linear-gradient(90deg, rgba(199, 207, 230, 0.05) 1px, transparent 1px); background-size: 48px 48px; mask-image: radial-gradient(ellipse 60% 50% at 50% 40%, #000 30%, transparent 80%); -webkit-mask-image: radial-gradient(ellipse 60% 50% at 50% 40%, #000 30%, transparent 80%); pointer-events: none; } /* === Animations === */ .fade-in-up { animation: fadeInUp 0.8s cubic-bezier(0.16, 1, 0.3, 1) both; } @keyframes fadeInUp { from { opacity: 0; transform: translateY(24px); } to { opacity: 1; transform: translateY(0); } } .shimmer { background: linear-gradient(110deg, transparent 35%, rgba(222, 224, 240, 0.14) 50%, transparent 65%); background-size: 200% 100%; animation: shimmer 3.5s linear infinite; } @keyframes shimmer { from { background-position: 200% 0; } to { background-position: -200% 0; } } /* Cinematic light sweep across hero */ .light-sweep { position: absolute; inset: 0; pointer-events: none; background: linear-gradient(110deg, transparent 30%, rgba(199, 207, 230, 0.07) 50%, transparent 70%); background-size: 250% 100%; animation: lightSweep 9s ease-in-out infinite; mix-blend-mode: screen; } @keyframes lightSweep { 0% { background-position: 200% 0; opacity: 0; } 25% { opacity: 1; } 75% { opacity: 1; } 100% { background-position: -200% 0; opacity: 0; } } .float-y { animation: floatY 6s ease-in-out infinite; } @keyframes floatY { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-12px); } } @keyframes spin { to { transform: rotate(360deg); } } @keyframes pulseGlow { 0%, 100% { box-shadow: 0 0 0 0 rgba(39, 63, 148, 0.55), 0 0 40px rgba(39, 63, 148, 0.32); } 50% { box-shadow: 0 0 0 12px rgba(39, 63, 148, 0), 0 0 60px rgba(39, 63, 148, 0.55); } } /* Scroll indicator */ .scroll-indicator { width: 1px; height: 40px; position: relative; overflow: hidden; } .scroll-indicator::after { content: ''; position: absolute; top: 0; left: 0; width: 1px; height: 100%; background: linear-gradient(180deg, var(--color-blue), transparent); animation: scrollPulse 2s ease-in-out infinite; } @keyframes scrollPulse { 0%, 100% { transform: translateY(-100%); opacity: 0; } 50% { transform: translateY(0); opacity: 1; } } /* === Scrollbar === */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: var(--color-bg-2); } ::-webkit-scrollbar-thumb { background: rgba(136, 145, 199, 0.28); border-radius: var(--radius-sm); } ::-webkit-scrollbar-thumb:hover { background: rgba(39, 63, 148, 0.7); } /* === CTA Button System === */ /* Reusable across all sections — primary | secondary | ghost | link, sizes sm | md | lg. Arrow handled via .cta-arrow capsule; data-arrow="up-right" rotates on hover, "right" translates X. */ .cta-btn { position: relative; display: inline-flex; align-items: center; gap: 0.65rem; border-radius: 999px; font-family: inherit; font-weight: 800; letter-spacing: 0.22em; text-transform: uppercase; text-decoration: none; cursor: pointer; white-space: nowrap; isolation: isolate; overflow: hidden; border: 1px solid transparent; transition: transform 0.3s cubic-bezier(0.16,1,0.3,1), box-shadow 0.3s, background 0.3s, border-color 0.3s, color 0.3s; -webkit-user-select: none; user-select: none; } .cta-btn:focus-visible { outline: 2px solid #DEE0F0; outline-offset: 3px; } .cta-btn:disabled, .cta-btn[aria-disabled='true'] { opacity: 0.5; cursor: not-allowed; transform: none !important; } /* sizes */ .cta-sm { padding: 0.62rem 1.05rem; font-size: 0.64rem; letter-spacing: 0.22em; } .cta-md { padding: 0.95rem 1.45rem; font-size: 0.74rem; } .cta-lg { padding: 1.05rem 1.7rem; font-size: 0.8rem; letter-spacing: 0.24em; } /* shared arrow capsule */ .cta-arrow { display: inline-flex; align-items: center; justify-content: center; border-radius: 999px; background: rgba(222, 224, 240, 0.12); border: 1px solid rgba(222, 224, 240, 0.22); color: currentColor; transition: transform 0.35s, background 0.35s, border-color 0.35s; flex-shrink: 0; } .cta-sm .cta-arrow { width: 20px; height: 20px; } .cta-md .cta-arrow { width: 24px; height: 24px; } .cta-lg .cta-arrow { width: 26px; height: 26px; } /* PRIMARY — filled gradient, strongest emphasis */ .cta-primary { background: linear-gradient(135deg, #5a76e8 0%, #4a66d8 35%, #2f4cb4 70%, #273F94 100%); color: #FFFFFF; box-shadow: 0 24px 56px rgba(39, 63, 148, 0.55), 0 0 0 1px rgba(222, 224, 240, 0.22), 0 0 32px rgba(74, 102, 216, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.24); } .cta-primary::before { content: ''; position: absolute; inset: 0; border-radius: inherit; background: linear-gradient(120deg, transparent 30%, rgba(255, 255, 255, 0.2) 50%, transparent 70%); transform: translateX(-100%); transition: transform 0.7s ease; pointer-events: none; } .cta-primary:hover { transform: translateY(-2px); box-shadow: 0 30px 66px rgba(39, 63, 148, 0.7), 0 0 0 1px rgba(222, 224, 240, 0.32), 0 0 44px rgba(74, 102, 216, 0.55), inset 0 1px 0 rgba(255, 255, 255, 0.3); } .cta-primary:hover::before { transform: translateX(100%); } .cta-primary .cta-arrow { background: rgba(255, 255, 255, 0.18); border-color: rgba(255, 255, 255, 0.24); } .cta-primary:hover .cta-arrow { background: rgba(255, 255, 255, 0.32); border-color: rgba(255, 255, 255, 0.4); } /* SECONDARY — glassmorphism, supporting actions */ .cta-secondary { border-color: rgba(222, 224, 240, 0.55); background: linear-gradient(135deg, rgba(58, 85, 196, 0.16), rgba(14, 13, 18, 0.55) 60%), rgba(14, 13, 18, 0.55); color: #FFFFFF; backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px); box-shadow: 0 14px 32px rgba(0, 0, 0, 0.55), inset 0 1px 0 rgba(222, 224, 240, 0.22), 0 0 0 1px rgba(58, 85, 196, 0.18); } .cta-secondary::before { content: ''; position: absolute; inset: 0; border-radius: inherit; background: linear-gradient(120deg, transparent 30%, rgba(222, 224, 240, 0.16) 50%, transparent 70%); transform: translateX(-100%); transition: transform 0.7s ease; pointer-events: none; } .cta-secondary:hover { border-color: rgba(222, 224, 240, 0.82); background: linear-gradient(135deg, rgba(74, 102, 216, 0.3), rgba(20, 22, 38, 0.62) 60%), rgba(20, 22, 38, 0.62); transform: translateY(-2px); box-shadow: 0 22px 46px rgba(0, 0, 0, 0.62), inset 0 1px 0 rgba(222, 224, 240, 0.3), 0 0 0 1px rgba(58, 85, 196, 0.5), 0 0 32px rgba(58, 85, 196, 0.4); } .cta-secondary:hover::before { transform: translateX(100%); } /* GHOST — outline, low-emphasis action */ .cta-ghost { border-color: rgba(222, 224, 240, 0.28); background: transparent; color: #ECEEF6; } .cta-ghost:hover { border-color: rgba(222, 224, 240, 0.6); background: rgba(58, 85, 196, 0.14); color: #FFFFFF; transform: translateY(-2px); } .cta-ghost .cta-arrow { background: rgba(222, 224, 240, 0.08); border-color: rgba(222, 224, 240, 0.2); } .cta-ghost:hover .cta-arrow { background: rgba(58, 85, 196, 0.22); border-color: rgba(222, 224, 240, 0.4); } /* LINK — text-only for minor inline links */ .cta-link { padding: 0.45rem 0; border: none; background: transparent; color: #DEE0F0; font-size: 0.72rem; letter-spacing: 0.2em; border-bottom: 1px solid transparent; border-radius: 0; white-space: nowrap; font-weight: 700; } .cta-link:hover { color: #FFFFFF; border-bottom-color: rgba(222, 224, 240, 0.55); transform: translateX(2px); } .cta-link .cta-arrow { width: auto; height: auto; padding: 0; background: transparent; border: none; } .cta-link:hover .cta-arrow { transform: translate(3px, -1px); } /* arrow motion per direction */ .cta-btn[data-arrow='up-right']:hover .cta-arrow { transform: rotate(45deg); } .cta-btn[data-arrow='right']:hover .cta-arrow { transform: translateX(3px); } .cta-link[data-arrow='up-right']:hover .cta-arrow, .cta-link[data-arrow='right']:hover .cta-arrow { transform: translate(3px, -1px); } /* full-width on small screens for primary CTA wrappers */ .cta-btn.cta-full { width: 100%; justify-content: space-between; } /* === Legacy .btn aliases — kept for backward compat, route to new system === */ .btn { display: inline-flex; align-items: center; gap: 0.65rem; padding: 0.95rem 1.45rem; border-radius: 999px; font-size: 0.74rem; font-weight: 800; letter-spacing: 0.22em; text-transform: uppercase; text-decoration: none; cursor: pointer; border: 1px solid transparent; white-space: nowrap; transition: transform 0.3s cubic-bezier(0.16,1,0.3,1), box-shadow 0.3s, background 0.3s, color 0.3s, border-color 0.3s; } .btn:hover { transform: translateY(-2px); } .btn-primary { background: linear-gradient(135deg, #5a76e8 0%, #4a66d8 35%, #2f4cb4 70%, #273F94 100%); color: #FFFFFF; box-shadow: 0 24px 56px rgba(39, 63, 148, 0.55), 0 0 0 1px rgba(222, 224, 240, 0.22), 0 0 32px rgba(74, 102, 216, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.24); } .btn-primary:hover { box-shadow: 0 30px 66px rgba(39, 63, 148, 0.7), 0 0 0 1px rgba(222, 224, 240, 0.32), 0 0 44px rgba(74, 102, 216, 0.55), inset 0 1px 0 rgba(255, 255, 255, 0.3); } .btn-ghost { background: linear-gradient(135deg, rgba(58, 85, 196, 0.16), rgba(14, 13, 18, 0.55) 60%), rgba(14, 13, 18, 0.55); color: #FFFFFF; border-color: rgba(222, 224, 240, 0.55); backdrop-filter: blur(14px); box-shadow: 0 14px 32px rgba(0, 0, 0, 0.55), inset 0 1px 0 rgba(222, 224, 240, 0.22), 0 0 0 1px rgba(58, 85, 196, 0.18); } .btn-ghost:hover { border-color: rgba(222, 224, 240, 0.82); background: linear-gradient(135deg, rgba(74, 102, 216, 0.3), rgba(20, 22, 38, 0.62) 60%), rgba(20, 22, 38, 0.62); color: #FFFFFF; box-shadow: 0 22px 46px rgba(0, 0, 0, 0.62), inset 0 1px 0 rgba(222, 224, 240, 0.3), 0 0 0 1px rgba(58, 85, 196, 0.5), 0 0 32px rgba(58, 85, 196, 0.4); } .btn-outline { background: transparent; color: #ECEEF6; border-color: rgba(222, 224, 240, 0.28); } .btn-outline:hover { background: rgba(58, 85, 196, 0.14); border-color: rgba(222, 224, 240, 0.6); color: #FFFFFF; } /* === Layout helpers === */ .container-wide { max-width: 1320px; margin: 0 auto; padding-left: clamp(1rem, 4vw, 2rem); padding-right: clamp(1rem, 4vw, 2rem); } .eyebrow { display: inline-flex; align-items: center; gap: 0.625rem; font-size: 0.72rem; letter-spacing: 0.34em; text-transform: uppercase; color: var(--color-text-muted); font-weight: 600; } .eyebrow::before { content: ''; width: 28px; height: 1px; background: linear-gradient(90deg, transparent, var(--color-silver)); } /* === Cards === */ .card { position: relative; background: rgba(22, 21, 26, 0.72); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); border: 1px solid var(--color-border); border-radius: var(--radius-2xl); transition: transform 0.4s cubic-bezier(0.16,1,0.3,1), border-color 0.3s, box-shadow 0.3s; overflow: hidden; } .card:hover { transform: translateY(-6px); border-color: rgba(136, 145, 199, 0.55); box-shadow: 0 20px 60px rgba(0,0,0,0.7), 0 0 40px rgba(39, 63, 148, 0.22); } /* === Configurator (preserve previous theme rules) === */ .snap-section { scroll-snap-align: start; } @media (max-width: 1024px) { .glass-panel-responsive { width: 360px !important; } } @media (max-width: 768px) { .layout-container { flex-direction: column-reverse !important; height: 100dvh !important; } .glass-panel-responsive { order: unset !important; position: relative !important; bottom: auto !important; left: auto !important; right: auto !important; width: 100% !important; height: 55dvh !important; max-height: 55dvh !important; border-right: none !important; border-left: none !important; border-top: 1px solid var(--color-border) !important; box-shadow: 0 -4px 30px rgba(0, 0, 0, 0.06) !important; border-radius: 1rem 1rem 0 0 !important; overflow-y: auto !important; overflow-x: hidden !important; z-index: 50; padding-bottom: env(safe-area-inset-bottom, 0px) !important; } .glass-panel-responsive.panel-expanded { position: fixed !important; top: 0 !important; left: 0 !important; width: 100% !important; height: 100dvh !important; max-height: 100dvh !important; border-radius: 0 !important; border-top: none !important; box-shadow: none !important; z-index: 200 !important; overflow-y: auto !important; -webkit-overflow-scrolling: touch !important; padding-bottom: 0 !important; } .canvas-area { height: 45dvh !important; max-height: 45dvh !important; min-height: 180px !important; width: 100% !important; flex: none !important; } #configurator { height: 100dvh !important; } .mobile-handle { display: flex !important; } } @media (max-width: 480px) { .glass-panel-responsive { height: 58dvh !important; max-height: 58dvh !important; border-radius: 0.75rem 0.75rem 0 0 !important; } .canvas-area { height: 42dvh !important; max-height: 42dvh !important; min-height: 160px !important; } .glass-panel-responsive header { padding: 0.75rem 1rem !important; } .glass-panel-responsive > div[role="region"] { padding: 1rem !important; } } @media (max-width: 375px) { .glass-panel-responsive { height: 60dvh !important; max-height: 60dvh !important; } .canvas-area { height: 40dvh !important; max-height: 40dvh !important; min-height: 140px !important; } } @media (max-height: 500px) and (orientation: landscape) { .layout-container { flex-direction: row !important; } .glass-panel-responsive { order: unset !important; position: relative !important; width: 320px !important; min-width: 320px !important; height: 100% !important; max-height: 100% !important; border-radius: 0 !important; border-top: none !important; border-left: 1px solid var(--color-border) !important; overflow-y: auto !important; } .canvas-area { height: 100% !important; max-height: 100% !important; width: auto !important; flex: 1 !important; } .mobile-handle { display: none !important; } } .mobile-handle { display: none; } .panel-expand-btn { display: none !important; } @media (max-width: 768px) { .panel-expand-btn { display: flex !important; } .layout-expanded .canvas-area { height: 0 !important; max-height: 0 !important; min-height: 0 !important; overflow: hidden !important; } } @media (max-width: 480px) { .glass-panel-responsive.panel-expanded { height: 100dvh !important; max-height: 100dvh !important; } } @media (max-width: 375px) { .glass-panel-responsive.panel-expanded { height: 100dvh !important; max-height: 100dvh !important; } } .desktop-configurator { display: block !important; position: relative; z-index: 10; } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.001ms !important; animation-iteration-count: 1 !important; transition-duration: 0.001ms !important; scroll-behavior: auto !important; } .hero-gradient { animation: none !important; } .light-sweep { animation: none !important; opacity: 0 !important; } } html, body { overflow-x: hidden; max-width: 100vw; } /* === GLOBAL RESPONSIVE GUARDS === */ /* Anchor scroll never lands behind fixed navbar */ [id] { scroll-margin-top: clamp(80px, 12vh, 120px); } /* No element overflows viewport horizontally */ img, video, svg, canvas { max-width: 100%; height: auto; } /* Grid/flex children should be allowed to shrink below content width to prevent overflow */ .container-wide > * { min-width: 0; } /* Tap targets: minimum 44x44 for interactive elements on touch screens */ @media (hover: none) and (pointer: coarse) { a, button, [role='button'] { min-height: 44px; } .cta-link { min-height: 32px; } } /* Mobile section padding tighter */ @media (max-width: 600px) { .container-wide { padding-left: 1rem; padding-right: 1rem; } .eyebrow { font-size: 0.68rem; letter-spacing: 0.28em; } .cta-lg { padding: 0.85rem 1.25rem; font-size: 0.72rem; letter-spacing: 0.2em; } .cta-md { padding: 0.8rem 1.15rem; font-size: 0.68rem; } } /* WhatsApp floating button: lift above safe-area on iOS, keep clear of footer content */ .wa-fab { bottom: calc(1.25rem + env(safe-area-inset-bottom, 0px)) !important; } @media (max-width: 600px) { .wa-fab { width: 52px !important; height: 52px !important; bottom: calc(1rem + env(safe-area-inset-bottom, 0px)) !important; } }