Files
provoc-website/css/main.css
kutesir fe5f232c6a Initial commit — Provoc Group website
Full website with security hardening:
- Redesigned sections: hero, services, capabilities, clients, partners, stats, about, workflow, contact
- Contact form fixed (variable names, XSS sanitisation, rate limiting, open redirect removed)
- .htaccess with security headers (CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy)
- error_log blocked from public access
- Robots.txt corrected to allow JS/CSS for SEO rendering
2026-05-16 21:26:49 +03:00

1514 lines
36 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* ================================================
CSS CUSTOM PROPERTIES
================================================ */
:root {
--gold: #FFAC03;
--gold-2: #FFCF03;
--dark: #000000;
--dark-2: #0d0d0d;
--text: rgba(255,255,255,0.48);
--text-light:rgba(255,255,255,0.28);
--bg-light: #0a0a0a;
--white: #ffffff;
--border: rgba(255,255,255,0.08);
}
/* ================================================
RESET / BASE
================================================ */
*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
font-family: 'Inter', ui-sans-serif, system-ui, sans-serif;
font-size: 15px;
font-weight: 400;
line-height: 1.6;
letter-spacing: -0.01em;
color: var(--text);
overflow-x: hidden;
background: #000;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-rendering: optimizeLegibility;
}
h1, h2, h3, h4, h5, h6 {
font-family: 'Inter', ui-sans-serif, system-ui, sans-serif;
font-weight: 700;
text-transform: uppercase;
color: #fff;
margin: 0 0 .5rem;
line-height: 1.1;
letter-spacing: -0.01em;
}
p { margin: 0; line-height: 1.65; color: var(--text); }
a { color: var(--gold); text-decoration: none; }
a:hover, a:focus { color: var(--gold-2); text-decoration: none; outline: none; }
img { max-width: 100%; height: auto; }
ul { list-style: none; padding: 0; margin: 0; }
#wrapper { overflow-x: hidden; visibility: hidden; }
/* ================================================
PAGE LOADER
================================================ */
.pg-loader {
position: fixed;
inset: 0;
z-index: 3000;
background: var(--dark);
display: flex;
align-items: center;
justify-content: center;
transition: opacity .5s ease;
}
.pg-loader--done { opacity: 0; pointer-events: none; }
.pg-loader__dots { display: flex; gap: 8px; }
.pg-loader__dots span {
width: 10px; height: 10px;
border-radius: 50%;
background: var(--gold);
animation: pgBounce 1.3s infinite alternate;
}
.pg-loader__dots span:nth-child(2) { animation-delay: .35s; }
.pg-loader__dots span:nth-child(3) { animation-delay: .7s; }
@keyframes pgBounce {
to { transform: translateY(-14px); background: var(--gold-2); }
}
/* ================================================
NAVIGATION
================================================ */
.site-nav {
position: fixed;
top: 0; left: 0; right: 0;
z-index: 1000;
background: rgba(0,0,0,0.5);
backdrop-filter: blur(14px);
-webkit-backdrop-filter: blur(14px);
border-bottom: 1px solid rgba(255,255,255,0.06);
transition: background .35s, box-shadow .35s;
}
.site-nav--stuck {
background: rgba(0,0,0,0.92) !important;
box-shadow: 0 1px 0 rgba(255,255,255,0.06);
}
.site-nav__inner {
display: flex;
align-items: center;
justify-content: space-between;
height: 68px;
position: relative;
}
.site-nav__brand img { height: 50px; transition: height .3s; }
.site-nav--stuck .site-nav__brand img { height: 38px; }
/* desktop links */
.site-nav__links {
display: flex;
align-items: center;
gap: 0;
list-style: none;
}
.site-nav__links li a {
display: block;
color: #fff;
font-size: 12px;
font-weight: 500;
letter-spacing: 0.08em;
text-transform: uppercase;
padding: 6px 12px;
transition: color .2s;
position: relative;
}
.site-nav__links li a::after {
content: '';
position: absolute;
bottom: -2px; left: 12px; right: 12px;
height: 2px;
background: var(--gold);
transform: scaleX(0);
transition: transform .25s;
}
.site-nav__links li a:hover,
.site-nav__links li a.active { color: var(--gold); }
.site-nav__links li a:hover::after { transform: scaleX(1); }
/* hamburger */
.site-nav__toggle {
display: none;
flex-direction: column;
justify-content: center;
gap: 5px;
width: 40px; height: 40px;
background: transparent;
border: 2px solid rgba(255,172,3,.55);
cursor: pointer;
padding: 6px 7px;
z-index: 100;
}
.site-nav__toggle span {
display: block;
width: 100%;
height: 2px;
background: var(--gold);
transition: transform .3s, opacity .3s;
transform-origin: center;
}
/* open state: X */
.site-nav__toggle.open span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.site-nav__toggle.open span:nth-child(2) { opacity: 0; }
.site-nav__toggle.open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
/* ================================================
HERO
================================================ */
.hero {
position: relative;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
}
.hero__bg {
position: absolute;
inset: 0;
background: #000;
z-index: 0;
}
.hero__bg::after {
content: '';
position: absolute;
inset: 0;
background: radial-gradient(ellipse 80% 60% at 50% 0%, rgba(255,172,3,0.06) 0%, transparent 70%);
}
.hero__slides {
position: relative;
z-index: 1;
width: 100%;
text-align: center;
padding: 100px 20px 80px;
}
.hero__slide {
display: none;
animation: heroFadeIn .7s ease both;
}
.hero__slide.active { display: block; }
@keyframes heroFadeIn {
from { opacity: 0; transform: translateY(18px); }
to { opacity: 1; transform: translateY(0); }
}
.hero__tag {
display: inline-flex;
align-items: center;
gap: 12px;
color: rgba(255,255,255,.45);
font-family: 'Inter', ui-sans-serif, system-ui, sans-serif;
font-size: 11px;
font-weight: 500;
letter-spacing: 0.28em;
text-transform: uppercase;
margin-bottom: 28px;
}
.hero__tag::before {
content: '';
display: block;
width: 28px;
height: 1px;
background: var(--gold);
flex-shrink: 0;
}
.hero__title {
font-family: 'Bebas Neue', 'Inter', sans-serif;
font-weight: 400;
color: #fff !important;
font-size: clamp(52px, 7.5vw, 100px);
letter-spacing: -0.02em;
text-transform: uppercase;
line-height: 0.95;
max-width: 960px;
margin: 0 auto 44px;
}
.hero__btns { display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; }
.btn-solid {
display: inline-block;
background: var(--gold);
color: #000 !important;
font-family: 'Inter', ui-sans-serif, system-ui, sans-serif;
font-size: 11px;
font-weight: 600;
letter-spacing: 0.14em;
text-transform: uppercase;
padding: 15px 44px;
border: 1px solid var(--gold);
transition: background .2s, color .2s, transform .2s;
}
.btn-solid:hover {
background: transparent;
color: var(--gold) !important;
transform: translateY(-1px);
}
.btn-ghost {
display: inline-block;
background: transparent;
color: rgba(255,255,255,.55) !important;
font-family: 'Inter', ui-sans-serif, system-ui, sans-serif;
font-size: 11px;
font-weight: 500;
letter-spacing: 0.14em;
text-transform: uppercase;
padding: 15px 44px;
border: 1px solid rgba(255,255,255,.14);
transition: border-color .2s, color .2s, transform .2s;
}
.btn-ghost:hover {
border-color: rgba(255,172,3,.5);
color: var(--gold) !important;
transform: translateY(-1px);
}
/* pagination dots — minimal lines */
.hero__pagination {
position: absolute;
bottom: 72px;
left: 50%;
transform: translateX(-50%);
display: flex;
gap: 6px;
z-index: 2;
}
.hero__dot {
width: 24px; height: 2px;
border-radius: 0;
background: rgba(255,255,255,.18);
border: none;
cursor: pointer;
transition: background .25s, width .25s;
padding: 0;
}
.hero__dot.active {
width: 40px;
background: var(--gold);
}
/* scroll cue */
.hero__scroll {
position: absolute;
bottom: 24px;
left: 50%;
transform: translateX(-50%);
z-index: 2;
display: flex;
align-items: center;
justify-content: center;
width: 36px; height: 36px;
border: 1px solid rgba(255, 180, 0, .25);
color: rgba(255, 180, 0, .45);
font-size: 13px;
animation: scrollBounce 2.2s ease-in-out infinite;
box-shadow: 0 0 10px rgba(255, 180, 0, .15), inset 0 0 8px rgba(255, 180, 0, .05);
transition: border-color .25s, color .25s, box-shadow .25s;
}
.hero__scroll:hover {
border-color: rgba(255, 180, 0, .8);
color: var(--gold);
box-shadow: 0 0 18px rgba(255, 180, 0, .45), 0 0 6px rgba(255, 180, 0, .25), inset 0 0 12px rgba(255, 180, 0, .1);
}
@keyframes scrollBounce {
0%, 100% { transform: translateX(-50%) translateY(0); }
50% { transform: translateX(-50%) translateY(8px); }
}
/* ================================================
SHARED SECTION STYLES
================================================ */
section { padding: 110px 0; }
/* Section heading block */
.sec-head {
text-align: center;
margin-bottom: 64px;
}
.sec-head__label {
display: block;
font-family: 'Inter', ui-sans-serif, system-ui, sans-serif;
font-size: 11px;
font-weight: 600;
letter-spacing: 0.3em;
text-transform: uppercase;
color: var(--gold);
margin-bottom: 16px;
opacity: .8;
}
.sec-head__title {
font-family: 'Bebas Neue', 'Inter', sans-serif;
font-weight: 400;
font-size: clamp(36px, 4vw, 56px);
letter-spacing: -0.01em;
color: #fff;
margin: 0;
line-height: 1;
}
.sec-head__line {
width: 24px; height: 1px;
background: var(--gold);
margin: 20px auto;
opacity: 0.5;
}
.sec-head__sub {
font-family: 'Inter', ui-sans-serif, system-ui, sans-serif;
font-size: 14px;
font-weight: 400;
color: rgba(255,255,255,.35);
max-width: 520px;
margin: 0 auto;
line-height: 1.65;
letter-spacing: -0.01em;
}
/* Light variant — same on all-dark site */
.sec-head--light .sec-head__title { color: #fff; }
.sec-head--light .sec-head__sub { color: rgba(255,255,255,.42); font-size: 15px; }
.sec-head--light .sec-head__label { letter-spacing: 0.3em; }
/* Generic outline-gold button */
.btn-outline-gold {
display: inline-block;
background: transparent;
color: var(--gold) !important;
border: 1px solid var(--gold);
font-family: inherit;
font-size: 11px;
font-weight: 700;
letter-spacing: 0.14em;
text-transform: uppercase;
padding: 15px 44px;
transition: background .2s, color .2s, transform .2s;
}
.btn-outline-gold:hover { background: var(--gold); color: #000 !important; transform: translateY(-1px); }
/* ================================================
SERVICES
================================================ */
#services { background: #000; border-top: 1px solid rgba(255,255,255,0.06); }
.svc-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
gap: 1px;
background: rgba(255,255,255,0.07);
}
.svc-card {
background: #000;
padding: 36px 32px;
display: flex;
flex-direction: column;
position: relative;
transition: background .3s;
}
.svc-card:hover {
background: #0d0d0d;
z-index: 1;
}
.svc-card__header {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 16px;
}
.svc-card__icon {
font-size: 22px;
color: var(--gold);
flex-shrink: 0;
width: 24px;
text-align: center;
transition: opacity .25s;
}
.svc-card h3 {
font-family: 'Bebas Neue', 'Inter', sans-serif;
font-weight: 400;
font-size: clamp(17px, 1.35vw, 20px);
letter-spacing: 0.08em;
color: #fff !important;
margin: 0;
transition: color .25s;
}
.svc-card:hover h3 { color: var(--gold); }
.svc-card p {
font-family: inherit;
font-size: 13px;
font-weight: 400;
color: rgba(255,255,255,.42) !important;
line-height: 1.6;
transition: color .25s;
}
.svc-badge {
display: inline-block;
align-self: flex-start;
font-family: inherit;
font-size: 11px;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
padding: 4px 10px;
margin-bottom: 20px;
background: transparent;
color: var(--gold);
border: 1px solid var(--gold);
}
.svc-card__tagline {
font-family: inherit;
font-size: 12px;
font-weight: 500;
color: var(--gold) !important;
letter-spacing: 0;
margin-bottom: 10px !important;
line-height: 1.5;
}
.svc-card__link {
display: block;
margin-top: auto;
padding-top: 16px;
border-top: 1px solid rgba(255,255,255,0.07);
font-family: inherit;
font-size: 11px;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--gold) !important;
transition: color .2s, opacity .2s;
opacity: .7;
}
.svc-card__link:hover { opacity: 1; color: var(--gold) !important; }
/* Process band */
.process-band {
width: 100vw;
margin-left: calc(50% - 50vw);
background: #0a0a0a;
border-top: 1px solid rgba(255,255,255,0.06);
border-bottom: 1px solid rgba(255,255,255,0.06);
margin-top: 60px;
}
.process-band__overlay {
padding: 60px 0;
}
.process-band .sec-head__title { color: #fff; font-size: 22px; }
.process-band .sec-head__sub { color: rgba(255,255,255,.55); }
.process-band .sec-head { margin-bottom: 36px; }
.process-steps {
display: flex;
justify-content: space-between;
flex-wrap: wrap;
gap: 16px 0;
}
.process-item {
flex: 1;
min-width: 80px;
text-align: center;
padding: 12px 8px;
}
.process-item__num {
display: block;
font-family: 'Bebas Neue', 'Inter', sans-serif;
font-weight: 400;
font-size: clamp(44px, 5vw, 72px);
color: var(--gold);
line-height: 1;
margin-bottom: 8px;
letter-spacing: 0.08em;
}
.process-item__label {
display: block;
font-family: inherit;
color: rgba(255,255,255,.55);
font-size: 11px;
font-weight: 500;
letter-spacing: 0.12em;
text-transform: uppercase;
}
/* ================================================
ENTERPRISE CAPABILITIES
================================================ */
.cap-section {
background: #000;
padding: 110px 0;
border-top: 1px solid rgba(255,255,255,0.06);
border-bottom: 1px solid rgba(255,255,255,0.06);
}
.cap-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1px;
background: rgba(255,255,255,0.07);
margin-bottom: 0;
}
.cap-card {
background: #000;
padding: 44px 40px;
transition: background .3s;
cursor: default;
}
.cap-card:hover { background: #0d0d0d; }
.cap-card__head {
display: flex;
align-items: flex-start;
gap: 14px;
margin-bottom: 18px;
}
.cap-card__icon {
font-size: 20px;
color: var(--gold);
opacity: .65;
margin-top: 2px;
flex-shrink: 0;
transition: opacity .25s;
}
.cap-card:hover .cap-card__icon { opacity: 1; }
.cap-card h3 {
color: #fff !important;
font-family: 'Bebas Neue', 'Inter', sans-serif;
font-weight: 400;
font-size: clamp(16px, 1.4vw, 20px);
letter-spacing: 0.08em;
line-height: 1.2;
margin: 0;
}
.cap-card:hover h3 { color: var(--gold) !important; }
.cap-card p {
color: rgba(255,255,255,.35) !important;
font-family: inherit;
font-size: 13px;
line-height: 1.6;
margin-bottom: 22px;
}
.cap-sectors {
display: flex;
gap: 7px;
flex-wrap: wrap;
}
.cap-sectors span {
font-family: inherit;
font-size: 11px;
font-weight: 500;
letter-spacing: 0.06em;
text-transform: uppercase;
color: rgba(255,172,3,.5);
border: 1px solid rgba(255,172,3,.18);
padding: 4px 10px;
transition: color .2s, border-color .2s;
}
.cap-card:hover .cap-sectors span {
color: var(--gold);
border-color: rgba(255,172,3,.4);
}
.cap-cta {
text-align: center;
padding-top: 52px;
border-top: 1px solid rgba(255,255,255,0.06);
margin-top: 1px;
}
.cap-cta p { color: rgba(255,255,255,.38) !important; font-family: inherit; font-size: 14px; margin-bottom: 24px; }
/* ================================================
CLIENTS MARQUEE
================================================ */
.clients-section {
background: #000;
border-top: 1px solid rgba(255,255,255,0.06);
padding-bottom: 0;
}
.clients-section .sec-head { margin-bottom: 0; }
.partners-section .sec-head { margin-bottom: 0; }
.logo-track-wrapper {
overflow: hidden;
width: 100%;
padding: 24px 0 32px;
}
.logo-track {
display: flex;
width: max-content;
animation: scroll-logos 32s linear infinite;
will-change: transform;
}
.logo-track:hover { animation-play-state: paused; }
.logo-set {
display: flex;
align-items: center;
gap: 48px;
padding-right: 48px;
}
.logo-set img {
height: 52px;
width: auto;
max-width: 180px;
object-fit: contain;
flex-shrink: 0;
/* grayscale + screen blend removes white logo backgrounds on dark surface */
filter: grayscale(100%) brightness(1.1);
opacity: .6;
mix-blend-mode: screen;
transition: filter 240ms ease, opacity 240ms ease;
}
/* Optical height normalization */
.logo-set .logo-icon { height: 44px; }
.logo-set .logo-text { height: 36px; }
@media (hover: hover) and (pointer: fine) {
.logo-set img:hover {
filter: grayscale(0%) brightness(1.2);
opacity: 1;
}
}
@keyframes scroll-logos {
0% { transform: translateX(0); }
100% { transform: translateX(-50%); }
}
.sector-tags {
display: flex;
flex-wrap: wrap;
gap: 8px;
justify-content: center;
padding: 8px 0 40px;
}
.sector-tag {
font-family: inherit;
font-size: 11px;
font-weight: 400;
letter-spacing: 0.08em;
text-transform: uppercase;
color: rgba(255,255,255,.32);
background: transparent;
border: 1px solid rgba(255,255,255,0.1);
padding: 5px 14px;
transition: color .2s, border-color .2s;
cursor: default;
}
.sector-tag:hover { color: var(--gold); border-color: rgba(255,172,3,.5); }
/* Stats band */
.stats-band {
width: 100vw;
margin-left: calc(50% - 50vw);
background: #0a0a0a;
border-top: 1px solid rgba(255,255,255,0.06);
}
.stats-band__overlay {
padding: 70px 0;
}
.stats-grid {
display: grid;
grid-template-columns: repeat(4,1fr);
gap: 20px;
}
.stat-box {
text-align: center;
border: 1px solid rgba(255,172,3,.28);
padding: 28px 16px;
transition: border-color .3s;
}
.stat-box:hover { border-color: var(--gold); }
.stat-num {
display: block;
font-family: 'Bebas Neue', 'Inter', sans-serif;
font-weight: 400;
font-size: clamp(56px, 6vw, 88px);
color: #fff;
line-height: 1;
margin-bottom: 10px;
letter-spacing: 0.08em;
}
/* Alias for countUp plugin */
.number { display: block; }
/* compact heading above stats grid */
.stats-head { margin-bottom: 32px; }
.stats-head .sec-head__title { font-size: 22px; letter-spacing: 0.02em; }
.stat-label {
display: block;
font-family: inherit;
color: rgba(255,255,255,.38);
font-size: 11px;
font-weight: 400;
letter-spacing: 0.12em;
text-transform: uppercase;
}
/* ================================================
ABOUT
================================================ */
#about { background: #000; border-top: 1px solid rgba(255,255,255,0.06); padding-bottom: 0; }
.about-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 0 40px;
margin-bottom: 0;
}
.about-item {
display: flex;
align-items: flex-start;
gap: 16px;
padding-bottom: 32px;
margin-bottom: 32px;
border-bottom: 1px solid rgba(255,255,255,0.06);
}
.about-item__icon {
font-size: 20px;
color: var(--gold);
flex-shrink: 0;
margin-top: 2px;
width: 20px;
text-align: center;
}
.about-item h3 {
font-family: 'Bebas Neue', 'Inter', sans-serif;
font-weight: 400;
font-size: clamp(16px, 1.3vw, 20px);
letter-spacing: 0.08em;
margin-bottom: 8px;
color: #fff;
}
.about-item p { font-family: inherit; font-size: 13px; color: rgba(255,255,255,.38); line-height: 1.6; }
.about-callout {
background: #0a0a0a;
border-left: 1px solid var(--gold);
padding: 24px 28px;
margin-bottom: 60px;
}
.about-callout p { font-family: inherit; font-size: 13px; color: rgba(255,255,255,.42); line-height: 1.65; letter-spacing: 0; }
/* ================================================
ENTERPRISE WORKFLOWS (horizontal bands)
================================================ */
.impact-band {
width: 100vw;
margin-left: calc(50% - 50vw);
background: #0a0a0a;
padding: 80px 0;
border-top: 1px solid rgba(255,255,255,0.06);
border-bottom: 1px solid rgba(255,255,255,0.06);
}
.impact-band .sec-head { margin-bottom: 52px; }
/* stacked horizontal bands */
.wf-bands { display: flex; flex-direction: column; }
.wf-band {
display: grid;
grid-template-columns: 185px 1fr 115px;
align-items: center;
gap: 0;
padding: 30px 0;
border-top: 1px solid rgba(255,172,3,.08);
transition: background .3s;
cursor: default;
}
.wf-band:last-child { border-bottom: 1px solid rgba(255,172,3,.08); }
.wf-band:hover { background: rgba(255,172,3,.018); }
/* left: meta */
.wf-band__meta {
padding-right: 24px;
border-right: 1px solid rgba(255,172,3,.1);
}
.wf-band__icon {
display: block;
font-size: 17px;
color: var(--gold);
margin-bottom: 9px;
opacity: .6;
transition: opacity .25s;
}
.wf-band:hover .wf-band__icon { opacity: 1; }
.wf-band__meta h3 {
color: #fff !important;
font-size: 13px;
letter-spacing: 0;
margin-bottom: 6px;
line-height: 1.35;
}
.wf-band__meta p {
color: rgba(255,255,255,.55) !important;
font-size: 13px;
line-height: 1.6;
margin-bottom: 13px;
}
.wf-band__link {
font-family: inherit;
font-size: 11px;
font-weight: 700;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--gold) !important;
opacity: .65;
transition: opacity .2s;
}
.wf-band__link:hover { opacity: 1; }
/* center: flow — column so chips + integrations stack */
.wf-band__flow {
display: flex;
flex-direction: column;
gap: 11px;
padding: 0 26px;
}
/* chip row */
.wf-chips {
display: flex;
align-items: center;
gap: 5px;
flex-wrap: nowrap;
}
.wf-chip {
font-family: inherit;
font-size: 11px;
font-weight: 700;
letter-spacing: 0.06em;
text-transform: uppercase;
color: rgba(255,255,255,.42);
background: rgba(255,255,255,.02);
border: 1px solid rgba(255,172,3,.1);
padding: 6px 10px;
white-space: nowrap;
flex-shrink: 0;
transition: color .3s, border-color .3s, background .3s;
}
.wf-chip--end {
font-weight: 700;
border-color: rgba(255,172,3,.45);
color: var(--gold);
background: rgba(255,172,3,.05);
}
.wf-arr {
color: rgba(255,172,3,.28);
font-size: 14px;
flex-shrink: 0;
transition: color .3s, transform .3s;
}
/* staggered hover: each chip lights up sequentially */
.wf-band:hover .wf-chips .wf-chip:nth-child(1) { color: rgba(255,255,255,.65); border-color: rgba(255,172,3,.22); transition-delay: 0s; }
.wf-band:hover .wf-chips .wf-arr:nth-child(2) { color: rgba(255,172,3,.5); transform: translateX(2px); transition-delay: .06s; }
.wf-band:hover .wf-chips .wf-chip:nth-child(3) { color: rgba(255,255,255,.65); border-color: rgba(255,172,3,.22); transition-delay: .12s; }
.wf-band:hover .wf-chips .wf-arr:nth-child(4) { color: rgba(255,172,3,.5); transform: translateX(2px); transition-delay: .18s; }
.wf-band:hover .wf-chips .wf-chip:nth-child(5) { color: rgba(255,255,255,.65); border-color: rgba(255,172,3,.22); transition-delay: .24s; }
.wf-band:hover .wf-chips .wf-arr:nth-child(6) { color: rgba(255,172,3,.5); transform: translateX(2px); transition-delay: .30s; }
.wf-band:hover .wf-chips .wf-chip:nth-child(7) { color: rgba(255,255,255,.65); border-color: rgba(255,172,3,.22); transition-delay: .36s; }
.wf-band:hover .wf-chips .wf-arr:nth-child(8) { color: rgba(255,172,3,.5); transform: translateX(2px); transition-delay: .42s; }
.wf-band:hover .wf-chips .wf-chip--end { animation: chipEndPulse 2s .48s ease-in-out infinite; transition-delay: .48s; }
@keyframes chipEndPulse {
0%, 100% { border-color: rgba(255,172,3,.5); box-shadow: none; }
50% { border-color: var(--gold); box-shadow: 0 0 14px rgba(255,172,3,.25); }
}
/* integration tags row */
.wf-integrations {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 0;
}
.wf-integrations span {
font-family: inherit;
font-size: 11px;
font-weight: 400;
letter-spacing: 0.05em;
text-transform: uppercase;
color: rgba(255,255,255,.28);
transition: color .3s;
}
.wf-integrations span::after { content: ' · '; color: rgba(255,172,3,.25); padding: 0 5px; }
.wf-integrations span:last-child::after { display: none; }
.wf-band:hover .wf-integrations span { color: rgba(255,255,255,.45); }
/* right: kpi stat */
.wf-band__kpi {
text-align: center;
border-left: 1px solid rgba(255,172,3,.1);
padding-left: 20px;
}
.wf-band__kpi strong {
display: block;
font-family: 'Bebas Neue', 'Inter', sans-serif;
font-size: 30px;
font-weight: 400;
color: var(--gold);
line-height: 1;
margin-bottom: 6px;
letter-spacing: 0.04em;
}
.wf-band__kpi span {
display: block;
font-family: inherit;
font-size: 11px;
font-weight: 400;
letter-spacing: 0.06em;
text-transform: uppercase;
color: rgba(255,255,255,.38);
}
/* ================================================
PARTNERS
================================================ */
.partners-section {
background: #000;
border-top: 1px solid rgba(255,255,255,0.06);
padding-bottom: 0;
overflow: hidden;
}
.partners-section .logo-track {
animation-duration: 18s;
}
/* Quote band */
.quote-band {
width: 100vw;
margin-left: calc(50% - 50vw);
background: #0a0a0a;
border-top: 1px solid rgba(255,255,255,0.06);
}
.quote-band__overlay {
padding: 60px 0;
}
blockquote {
border: none;
text-align: center;
padding: 20px 0 36px;
margin: 0 auto;
max-width: 720px;
}
blockquote::before {
content: '\201C';
display: block;
font-family: 'Bebas Neue', 'Inter', sans-serif;
font-size: 80px;
line-height: .6;
color: var(--gold);
opacity: .25;
margin-bottom: 20px;
}
blockquote p {
font-family: inherit;
color: rgba(255,255,255,.75) !important;
font-size: clamp(16px, 1.6vw, 22px);
font-style: italic;
font-weight: 400;
line-height: 1.65;
letter-spacing: 0;
}
/* ================================================
CONTACT
================================================ */
.contact-section { background: #000; border-top: 1px solid rgba(255,255,255,0.06); }
.contact-grid {
display: grid;
grid-template-columns: repeat(3,1fr);
gap: 1px;
background: rgba(255,255,255,0.07);
}
.contact-card {
text-align: center;
background: #000;
padding: 40px 28px;
border-top: 1px solid rgba(255,172,3,.35);
transition: background .25s, border-color .25s;
}
.contact-card:hover {
background: #0a0a0a;
border-top-color: var(--gold);
}
.contact-card__icon {
display: block;
font-size: 22px;
color: var(--gold);
opacity: .7;
margin-bottom: 16px;
transition: opacity .25s;
}
.contact-card:hover .contact-card__icon { opacity: 1; }
.contact-card h3 {
font-family: inherit;
font-size: 11px;
font-weight: 700;
letter-spacing: 0.14em;
text-transform: uppercase;
margin-bottom: 12px;
color: rgba(255,255,255,.55);
}
.contact-card p { font-family: inherit; font-size: 14px; line-height: 1.6; color: rgba(255,255,255,.38); }
.contact-card a { color: rgba(255,255,255,.38); transition: color .2s; }
.contact-card a:hover { color: var(--gold); }
.email-display {
cursor: pointer;
color: rgba(255,255,255,.42);
font-family: inherit;
font-size: 13px;
transition: color .2s;
}
.email-display:hover { color: var(--gold); }
.at {
color: var(--gold);
font-weight: 600;
}
/* ================================================
FOOTER
================================================ */
.site-footer {
background: #000;
border-top: 1px solid rgba(255,255,255,0.06);
padding: 56px 0 36px;
text-align: center;
}
.site-footer__logo { height: 32px; margin-bottom: 24px; opacity: .5; }
.site-footer p {
font-family: inherit;
color: rgba(255,255,255,.28) !important;
font-size: 11px;
letter-spacing: 0.04em;
margin-bottom: 20px;
}
.site-footer a { color: var(--gold); transition: color .2s; }
.site-footer a:hover { color: var(--gold-2); }
.social-list { display: flex; justify-content: center; gap: 8px; margin-bottom: 32px; }
.social-list li a {
display: flex;
align-items: center;
justify-content: center;
width: 36px; height: 36px;
border: 1px solid rgba(255,255,255,.1);
color: rgba(255,255,255,.35);
font-size: 13px;
transition: border-color .25s, color .25s;
}
.social-list li a:hover { border-color: var(--gold); color: var(--gold); }
/* ================================================
CONTACT ANIMATION
================================================ */
.adress-element {
opacity: 0;
transform: translateY(24px);
transition: opacity .55s ease, transform .55s ease;
/* CSS fallback: reveal after 1.2s regardless of JS */
animation: contactFallback .55s ease 1.2s forwards;
}
.adress-element:nth-child(2) { animation-delay: 1.36s; }
.adress-element:nth-child(3) { animation-delay: 1.52s; }
@keyframes contactFallback {
to { opacity: 1; transform: translateY(0); }
}
/* JS-driven class overrides the animation */
.adress-element.contact-revealed {
opacity: 1;
transform: translateY(0);
animation: none;
}
/* ================================================
AI CHAT WIDGET
================================================ */
.chat-widget {
position: fixed;
bottom: 26px; right: 26px;
z-index: 1050;
display: flex;
flex-direction: column;
align-items: flex-end;
gap: 10px;
}
/* trigger button */
.chat-trigger {
display: flex;
align-items: center;
gap: 9px;
background: var(--gold);
color: var(--dark);
font-family: inherit;
font-size: 11px; font-weight: 700;
letter-spacing: 0.06em;
text-transform: uppercase;
padding: 13px 22px;
border-radius: 50px;
border: none;
cursor: pointer;
box-shadow: 0 4px 18px rgba(255,172,3,.45);
transition: background .25s, transform .25s, box-shadow .25s;
}
.chat-trigger .fa { font-size: 18px; }
.chat-trigger:hover,
.chat-trigger--open {
background: var(--gold-2);
transform: translateY(-2px);
box-shadow: 0 7px 24px rgba(255,172,3,.55);
}
/* panel */
.chat-panel {
width: 320px;
background: var(--dark);
border: 1px solid rgba(255,172,3,.18);
border-radius: 4px;
box-shadow: 0 20px 60px rgba(0,0,0,.7);
display: flex;
flex-direction: column;
overflow: hidden;
max-height: 0;
opacity: 0;
pointer-events: none;
transition: max-height .35s ease, opacity .25s ease;
}
.chat-panel--open {
max-height: 500px;
opacity: 1;
pointer-events: auto;
}
/* header */
.chat-header {
background: rgba(255,172,3,.07);
border-bottom: 1px solid rgba(255,172,3,.14);
padding: 12px 14px;
display: flex;
align-items: center;
gap: 10px;
flex-shrink: 0;
}
.chat-header img { height: 22px; opacity: .75; }
.chat-header__meta { flex: 1; }
.chat-header__name {
display: block;
color: #fff;
font-family: inherit;
font-size: 12px; font-weight: 700;
letter-spacing: 0.04em; text-transform: uppercase;
}
.chat-header__status {
display: flex;
align-items: center;
gap: 5px;
font-size: 11px;
color: rgba(255,255,255,.4);
letter-spacing: 0.02em;
}
.chat-dot {
width: 6px; height: 6px;
background: #4caf50;
border-radius: 50%;
flex-shrink: 0;
}
.chat-close {
background: none; border: none;
color: rgba(255,255,255,.35);
cursor: pointer; font-size: 14px;
transition: color .2s; padding: 0;
}
.chat-close:hover { color: var(--gold); }
/* body */
.chat-body {
flex: 1;
overflow-y: auto;
padding: 14px;
display: flex;
flex-direction: column;
gap: 10px;
min-height: 200px;
max-height: 340px;
}
.chat-body::-webkit-scrollbar { width: 3px; }
.chat-body::-webkit-scrollbar-thumb { background: rgba(255,172,3,.3); border-radius: 2px; }
/* messages */
.chat-msg { display: flex; }
.chat-msg--bot { align-self: flex-start; max-width: 88%; }
.chat-msg--user { align-self: flex-end; max-width: 80%; }
.chat-bubble { padding: 9px 13px; font-size: 13px; line-height: 1.55; }
.chat-msg--bot .chat-bubble {
background: rgba(255,255,255,.05);
border: 1px solid rgba(255,172,3,.12);
color: rgba(255,255,255,.82);
border-radius: 0 8px 8px 8px;
}
.chat-msg--user .chat-bubble {
background: var(--gold);
color: var(--dark);
font-weight: 700;
font-size: 12px;
letter-spacing: 0;
border-radius: 8px 0 8px 8px;
}
/* options */
.chat-options { display: flex; flex-direction: column; gap: 5px; }
.chat-opt {
background: transparent;
border: 1px solid rgba(255,172,3,.3);
color: var(--gold);
font-family: inherit;
font-size: 11px; font-weight: 400;
letter-spacing: 0.02em; text-transform: uppercase;
padding: 8px 12px; text-align: left;
cursor: pointer; border-radius: 2px;
transition: background .2s, border-color .2s;
}
.chat-opt:hover { background: rgba(255,172,3,.08); border-color: var(--gold); }
/* typing */
.chat-typing { display: flex; align-items: center; gap: 4px; padding: 6px 4px; }
.chat-typing span {
width: 6px; height: 6px;
background: var(--gold); border-radius: 50%;
opacity: .35;
animation: chatDot 1.1s infinite alternate;
}
.chat-typing span:nth-child(2) { animation-delay: .28s; }
.chat-typing span:nth-child(3) { animation-delay: .56s; }
@keyframes chatDot { to { opacity: 1; transform: translateY(-3px); } }
/* connect buttons */
.chat-connect { display: flex; flex-direction: column; gap: 7px; margin-top: 2px; }
.chat-wa-btn {
display: flex; align-items: center; gap: 8px;
background: var(--gold); color: var(--dark) !important;
font-family: inherit; font-size: 11px; font-weight: 700;
letter-spacing: 0.04em; text-transform: uppercase;
padding: 11px 14px; border: none; cursor: pointer;
text-decoration: none !important;
transition: background .25s;
}
.chat-wa-btn:hover { background: var(--gold-2); color: var(--dark) !important; }
.chat-wa-btn .fa { font-size: 16px; }
.chat-email-btn {
display: flex; align-items: center; gap: 8px;
background: transparent; color: rgba(255,255,255,.5) !important;
font-family: inherit; font-size: 11px; font-weight: 400;
letter-spacing: 0.04em; text-transform: uppercase;
padding: 9px 14px; border: 1px solid rgba(255,255,255,.1);
text-decoration: none !important;
transition: border-color .25s, color .25s;
}
.chat-email-btn:hover { border-color: rgba(255,255,255,.35); color: #fff !important; }
.chat-email-btn .fa { font-size: 14px; }
/* ================================================
ANIMATIONS (used by inview plugin callbacks)
================================================ */
.animate { animation-duration: .9s; animation-fill-mode: both; }
.delay1 { animation-delay: .12s; }
.delay2 { animation-delay: .24s; }
.delay3 { animation-delay: .36s; }
.delay4 { animation-delay: .48s; }
.delay5 { animation-delay: .60s; }
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(22px); }
to { opacity: 1; transform: translateY(0); }
}
.fadeInUp { animation-name: fadeInUp; }
@keyframes fadeInLeft {
from { opacity: 0; transform: translateX(-22px); }
to { opacity: 1; transform: translateX(0); }
}
.fadeInLeft { animation-name: fadeInLeft; }
@keyframes fadeInRight {
from { opacity: 0; transform: translateX(22px); }
to { opacity: 1; transform: translateX(0); }
}
.fadeInRight { animation-name: fadeInRight; }
@keyframes fadeInDown {
from { opacity: 0; transform: translateY(-22px); }
to { opacity: 1; transform: translateY(0); }
}
.fadeInDown { animation-name: fadeInDown; }
/* Misc preserved for plugins */
.mix { opacity: 0; display: none; }
.primary-color { color: var(--gold); }
/* ================================================
RESPONSIVE — TABLET 768991px
================================================ */
@media (max-width: 991px) {
.cap-grid { grid-template-columns: 1fr; }
.stats-grid { grid-template-columns: 1fr 1fr; gap: 14px; }
.about-grid { grid-template-columns: 1fr; }
.wf-band { grid-template-columns: 1fr; gap: 22px; }
.wf-band__meta { border-right: none; padding-right: 0; border-bottom: 1px solid rgba(255,172,3,.08); padding-bottom: 16px; }
.wf-band__flow { padding: 0; flex-wrap: wrap; }
.wf-band__kpi { border-left: none; padding-left: 0; text-align: left; }
.contact-grid { grid-template-columns: 1fr; gap: 16px; }
}
/* ================================================
RESPONSIVE — MOBILE ≤767px
================================================ */
@media (max-width: 767px) {
section { padding: 72px 0; }
/* nav */
.site-nav__toggle { display: flex; }
.site-nav__links {
display: none;
position: absolute;
top: 100%; left: 0; right: 0;
background: rgba(0,0,0,.97);
flex-direction: column;
gap: 0;
border-top: 1px solid rgba(255,255,255,0.06);
box-shadow: 0 8px 24px rgba(0,0,0,.7);
max-height: 80vh;
overflow-y: auto;
}
.site-nav__links.open { display: flex; }
.site-nav__links li a {
padding: 14px 20px;
border-bottom: 1px solid rgba(255,255,255,0.05);
font-size: 11px;
letter-spacing: 0.08em;
}
.site-nav__links li a::after { display: none; }
/* hero */
.hero__tag { font-size: 11px; letter-spacing: 0.1em; }
.btn-solid, .btn-ghost { padding: 13px 28px; }
/* services */
.svc-card { padding: 28px 24px; }
.svc-card h3 { min-height: unset; }
/* process */
.process-steps { gap: 0; flex-wrap: wrap; }
.process-item { min-width: 50%; flex: 0 0 50%; padding: 20px 12px; }
/* capabilities */
.cap-card { padding: 32px 24px; }
/* stats */
.stats-grid { grid-template-columns: 1fr 1fr; }
/* workflow */
.wf-chip { font-size: 11px; padding: 5px 8px; }
.wf-band__kpi strong { font-size: 26px; }
/* contact */
.contact-grid { grid-template-columns: 1fr; }
.contact-card { padding: 32px 24px; }
/* footer */
.sec-head__sub { max-width: 100%; }
/* logo track */
.logo-set { gap: 40px; padding-right: 40px; }
.logo-set img { height: 36px; }
.logo-set .logo-icon { height: 30px; }
.logo-set .logo-text { height: 24px; }
/* chat widget */
.chat-panel { width: calc(100vw - 32px); }
.chat-trigger span { display: none; }
.chat-trigger { padding: 15px; border-radius: 50%; }
.chat-trigger .fa { font-size: 20px; }
}
@media (max-width: 480px) {
.stats-grid { grid-template-columns: 1fr; }
.process-item { min-width: 50%; flex: 0 0 50%; }
}