/* ================================================================= FEEDBACK STUDIOS — "Signal" Art direction: a dark, expensive editorial canvas where TYPE is the hero. A generative iridescent backdrop and glossy capsule renders carry the brand spectrum (violet -> blue -> emerald) against near- black. Satoshi is the workhorse; Instrument Serif is the editorial accent, set in the brand gradient. Emerald is the single signature accent reserved for "the number" (revenue / results). ================================================================= */ /* ----------------------------------------------------------------- 1. DESIGN TOKENS (primitive -> semantic -> component) ----------------------------------------------------------------- */ :root { /* --- primitive palette (brand) --- */ --violet-500: #8b5cf6; --violet-400: #a78bfa; --violet-300: #c4b5fd; --blue-500: #3b82f6; --blue-400: #60a5fa; --emerald-500: #10b981; --emerald-400: #34d399; --rose-400: #f472b6; /* --- near-black ink scale (the expensive base) --- */ --ink-950: #08080c; --ink-900: #0b0b12; --ink-850: #0f0f18; --ink-800: #14141f; --ink-700: #1b1b2a; --ink-600: #25253a; --white: #ffffff; /* --- signature gradients --- */ --grad-brand: linear-gradient(100deg, var(--violet-400), var(--blue-400)); /* CTA fill uses deeper 600-level stops so white label text clears 4.5:1 (AA normal) across the whole gradient */ --grad-cta: linear-gradient(100deg, #7c3aed, #2563eb); --grad-spectrum: linear-gradient( 100deg, var(--violet-400), var(--blue-400) 42%, var(--rose-400) 70%, var(--emerald-400) ); --grad-emerald: linear-gradient(100deg, var(--emerald-400), var(--blue-400)); /* --- semantic surfaces (single dark theme) --- */ --bg: var(--ink-950); --surface: rgba(255, 255, 255, 0.035); --surface-2: rgba(255, 255, 255, 0.055); --surface-strong: rgba(255, 255, 255, 0.08); --glass: rgba(11, 11, 18, 0.55); /* --- on-surface text (all clear >=4.5:1 on the dark base) --- */ --on-bg: #f4f3fb; --on-bg-muted: #b6b6ce; --on-bg-faint: #84849e; --primary: var(--violet-400); --on-primary: var(--white); --border: rgba(255, 255, 255, 0.1); --border-strong: rgba(255, 255, 255, 0.2); --ring: var(--violet-400); /* --- typography --- */ --font-sans: "Satoshi", ui-sans-serif, system-ui, sans-serif; --font-serif: "Instrument Serif", Georgia, serif; /* fluid scale */ --step--2: clamp(0.72rem, 0.69rem + 0.12vw, 0.79rem); --step--1: clamp(0.83rem, 0.79rem + 0.18vw, 0.94rem); --step-0: clamp(1rem, 0.95rem + 0.25vw, 1.15rem); --step-1: clamp(1.2rem, 1.1rem + 0.5vw, 1.6rem); --step-2: clamp(1.6rem, 1.3rem + 1.4vw, 2.6rem); --step-3: clamp(2.2rem, 1.6rem + 2.9vw, 4rem); --step-4: clamp(2.9rem, 1.9rem + 5vw, 6rem); --step-5: clamp(3.4rem, 1.2rem + 11vw, 11rem); /* hero: type as hero */ /* --- spacing / layout --- */ --wrap: 1320px; --gutter: clamp(1.25rem, 4vw, 4.5rem); --space-section: clamp(6rem, 13vh, 13rem); --radius: 16px; --radius-lg: 26px; --radius-xl: 34px; --radius-pill: 999px; /* --- motion --- */ --ease-out: cubic-bezier(0.22, 1, 0.36, 1); --ease-io: cubic-bezier(0.65, 0, 0.35, 1); --dur: 0.3s; /* --- shadow --- */ --shadow-soft: 0 30px 80px -36px rgba(0, 0, 0, 0.8); --shadow-card: 0 24px 70px -32px rgba(0, 0, 0, 0.85); --glow-violet: 0 0 60px -10px rgba(139, 92, 246, 0.45); } /* ----------------------------------------------------------------- 2. RESET / BASE ----------------------------------------------------------------- */ *, *::before, *::after { box-sizing: border-box; margin: 0; } html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; } body { font-family: var(--font-sans); font-size: var(--step-0); line-height: 1.6; color: var(--on-bg); background: var(--bg); -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; overflow-x: hidden; } body.has-custom-cursor, body.has-custom-cursor a, body.has-custom-cursor button, body.has-custom-cursor .hoverable { cursor: none; } img, svg { display: block; max-width: 100%; } a { color: inherit; text-decoration: none; } h1, h2, h3 { line-height: 1.0; letter-spacing: -0.03em; font-weight: 900; text-wrap: balance; } p { text-wrap: pretty; } ::selection { background: var(--violet-500); color: var(--white); } :focus-visible { outline: 3px solid var(--violet-400); outline-offset: 3px; border-radius: 6px; } .wrap { width: min(100% - var(--gutter) * 2, var(--wrap)); margin-inline: auto; } .skip-link { position: fixed; top: 0.75rem; left: 0.75rem; z-index: 200; padding: 0.7rem 1.1rem; background: var(--white); color: var(--ink-950); border-radius: var(--radius-pill); font-weight: 700; transform: translateY(-160%); transition: transform 0.25s var(--ease-out); } .skip-link:focus { transform: translateY(0); } /* fine grain overlay across the whole page to kill flatness */ .grain { position: fixed; inset: 0; z-index: 1; pointer-events: none; opacity: 0.05; mix-blend-mode: overlay; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E"); } /* shared section label */ .kicker { display: inline-flex; align-items: center; gap: 0.6rem; font-size: var(--step--1); font-weight: 700; letter-spacing: 0.18em; text-transform: uppercase; color: var(--violet-300); margin-bottom: 1.4rem; } .kicker::before { content: ""; width: 26px; height: 1px; background: linear-gradient(90deg, var(--violet-400), transparent); } /* editorial serif accent (set in brand gradient) */ .serif-em { font-family: var(--font-serif); font-weight: 400; font-style: italic; letter-spacing: 0; background: var(--grad-brand); -webkit-background-clip: text; background-clip: text; color: transparent; } .grad, .hero__line--grad, .cta__title-grad { background: var(--grad-brand); -webkit-background-clip: text; background-clip: text; color: transparent; } .grad-emerald { background: var(--grad-emerald); -webkit-background-clip: text; background-clip: text; color: transparent; } /* ----------------------------------------------------------------- 3. IRIDESCENT BACKDROP (WebGL canvas + CSS fallback) ----------------------------------------------------------------- */ .iridescence { position: fixed; inset: 0; z-index: -2; background: radial-gradient(120% 90% at 70% 0%, #181430 0%, transparent 55%), radial-gradient(90% 90% at 15% 100%, rgba(16, 185, 129, 0.18), transparent 60%), linear-gradient(160deg, #0b0b14 0%, #08080c 60%); } .iridescence__canvas { width: 100%; height: 100%; } /* veil keeps text legible over the busiest backdrop region */ .iridescence::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(8, 8, 12, 0.4) 0%, transparent 35%, rgba(8, 8, 12, 0.55) 100%), radial-gradient(130% 100% at 50% 40%, transparent 30%, rgba(8, 8, 12, 0.65) 100%); pointer-events: none; } /* ----------------------------------------------------------------- 4. CUSTOM CURSOR ----------------------------------------------------------------- */ .cursor-dot, .cursor-ring { position: fixed; top: 0; left: 0; pointer-events: none; z-index: 300; will-change: transform; transform: translate(-50%, -50%); } .cursor-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--white); mix-blend-mode: difference; } .cursor-ring { width: 38px; height: 38px; border-radius: 50%; border: 1.5px solid rgba(255, 255, 255, 0.5); display: grid; place-items: center; transition: width 0.3s var(--ease-out), height 0.3s var(--ease-out), background 0.3s var(--ease-out), border-color 0.3s var(--ease-out); margin: -19px 0 0 -19px; } .cursor-ring--big { width: 72px; height: 72px; margin: -36px 0 0 -36px; background: rgba(139, 92, 246, 0.16); border-color: rgba(167, 139, 250, 0.7); } .cursor-ring__label { font-size: 11px; font-weight: 700; letter-spacing: 0.04em; color: var(--white); opacity: 0; transform: scale(0.7); transition: opacity 0.2s, transform 0.2s var(--ease-out); text-transform: lowercase; white-space: nowrap; } .cursor-ring--label { width: 92px; height: 92px; margin: -46px 0 0 -46px; background: var(--violet-500); border-color: var(--violet-500); } .cursor-ring--label .cursor-ring__label { opacity: 1; transform: scale(1); } /* ----------------------------------------------------------------- 5. HEADER / NAV ----------------------------------------------------------------- */ .site-header { position: fixed; inset: 0 0 auto 0; z-index: 100; transition: background 0.4s, backdrop-filter 0.4s, border-color 0.4s; border-bottom: 1px solid transparent; } .site-header.is-scrolled { background: var(--glass); backdrop-filter: blur(16px) saturate(140%); -webkit-backdrop-filter: blur(16px) saturate(140%); border-bottom: 1px solid var(--border); } .site-header__inner { width: min(100% - var(--gutter) * 2, var(--wrap)); margin-inline: auto; display: flex; align-items: center; justify-content: space-between; padding-block: clamp(0.9rem, 2vw, 1.4rem); } .brand { display: inline-flex; align-items: center; gap: 0.6rem; font-weight: 900; letter-spacing: -0.03em; } .brand__mark { width: 22px; height: auto; } .brand__word { font-size: var(--step-0); } .brand__word-2 { color: var(--on-bg-muted); font-weight: 500; } .brand__word--lg { font-size: var(--step-2); } .site-nav { display: flex; align-items: center; gap: clamp(1rem, 3vw, 2.2rem); } .site-nav ul { display: flex; gap: clamp(1rem, 2.5vw, 2rem); list-style: none; } .site-nav a { font-weight: 500; font-size: var(--step--1); color: var(--on-bg-muted); position: relative; padding-block: 0.3rem; transition: color 0.3s; } .site-nav ul a:hover, .site-nav ul a:focus-visible { color: var(--on-bg); } .site-nav ul a::after { content: ""; position: absolute; left: 0; bottom: 0; width: 100%; height: 2px; background: var(--grad-brand); transform: scaleX(0); transform-origin: left; transition: transform 0.35s var(--ease-out); } .site-nav ul a:hover::after, .site-nav ul a:focus-visible::after { transform: scaleX(1); } .site-header__toggle { display: none; flex-direction: column; gap: 5px; width: 44px; height: 44px; align-items: center; justify-content: center; background: none; border: 1px solid var(--border-strong); border-radius: var(--radius-pill); } .site-header__toggle span { display: block; width: 18px; height: 2px; background: var(--on-bg); transition: transform 0.3s var(--ease-out), opacity 0.3s; } .site-header.is-open .site-header__toggle span:first-child { transform: translateY(3.5px) rotate(45deg); } .site-header.is-open .site-header__toggle span:last-child { transform: translateY(-3.5px) rotate(-45deg); } /* ----------------------------------------------------------------- 6. BUTTONS / LINKS ----------------------------------------------------------------- */ .btn { --pad-y: 0.95rem; --pad-x: 1.7rem; display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem; padding: var(--pad-y) var(--pad-x); border-radius: var(--radius-pill); font-weight: 700; font-size: var(--step-0); letter-spacing: -0.01em; border: 1px solid transparent; transition: transform 0.3s var(--ease-out), box-shadow 0.3s var(--ease-out), background 0.3s, color 0.3s, border-color 0.3s; min-height: 48px; position: relative; overflow: hidden; } .btn span { position: relative; z-index: 1; } .btn--primary { background: var(--grad-cta); color: var(--on-primary); box-shadow: var(--glow-violet); } .btn--primary::before { content: ""; position: absolute; inset: 0; background: var(--grad-spectrum); opacity: 0; transition: opacity 0.45s var(--ease-out); } .btn--primary:hover::before, .btn--primary:focus-visible::before { opacity: 1; } .btn--ghost { background: var(--surface); color: var(--on-bg); border-color: var(--border-strong); backdrop-filter: blur(8px); } .btn--ghost:hover, .btn--ghost:focus-visible { border-color: var(--violet-400); color: var(--violet-300); background: var(--surface-2); } .btn--sm { --pad-y: 0.6rem; --pad-x: 1.15rem; font-size: var(--step--1); min-height: 40px; } .btn--lg { --pad-y: 1.15rem; --pad-x: 2.4rem; font-size: var(--step-1); } .magnetic { display: inline-block; } .link-arrow { display: inline-flex; align-items: center; gap: 0.45rem; font-weight: 700; color: var(--violet-300); margin-top: 1.5rem; } .link-arrow span { transition: transform 0.3s var(--ease-out); } .link-arrow:hover span, .link-arrow:focus-visible span { transform: translateX(5px); } /* ----------------------------------------------------------------- 7. KINETIC TEXT (masked word reveal) ----------------------------------------------------------------- */ .ktext { display: inline; } .ktext__word { display: inline-block; overflow: hidden; vertical-align: top; padding-block: 0.06em; } .ktext__in { display: inline-block; will-change: transform; } .ktext__word--grad .ktext__in { background: var(--grad-brand); -webkit-background-clip: text; background-clip: text; color: transparent; } /* ----------------------------------------------------------------- 8. HERO (type IS the hero) ----------------------------------------------------------------- */ .hero { position: relative; min-height: 100svh; display: flex; flex-direction: column; justify-content: center; padding-top: clamp(7rem, 14vh, 11rem); padding-bottom: clamp(3rem, 8vh, 6rem); } .hero__inner { position: relative; z-index: 2; width: 100%; } .hero__accent { position: absolute; top: clamp(2rem, 6vh, 6rem); right: clamp(-8rem, -6vw, -2rem); width: clamp(420px, 52vw, 880px); height: auto; z-index: 1; pointer-events: none; opacity: 0.85; mix-blend-mode: screen; filter: saturate(1.1) drop-shadow(0 40px 80px rgba(139, 92, 246, 0.25)); -webkit-mask-image: radial-gradient(75% 75% at 55% 45%, #000 55%, transparent 100%); mask-image: radial-gradient(75% 75% at 55% 45%, #000 55%, transparent 100%); } .hero__eyebrow { display: inline-flex; align-items: center; gap: 0.6rem; font-weight: 600; font-size: var(--step--1); letter-spacing: 0.04em; color: var(--on-bg-muted); padding: 0.5rem 1.1rem 0.5rem 0.8rem; border: 1px solid var(--border-strong); border-radius: var(--radius-pill); background: var(--surface); backdrop-filter: blur(8px); margin-bottom: clamp(1.5rem, 4vw, 2.2rem); } .hero__eyebrow .dot { width: 9px; height: 9px; border-radius: 50%; background: var(--emerald-400); box-shadow: 0 0 0 0 rgba(52, 211, 153, 0.6); animation: pulse 2.4s var(--ease-out) infinite; } @keyframes pulse { 0% { box-shadow: 0 0 0 0 rgba(52, 211, 153, 0.5); } 70% { box-shadow: 0 0 0 9px rgba(52, 211, 153, 0); } 100% { box-shadow: 0 0 0 0 rgba(52, 211, 153, 0); } } .hero__display { font-size: var(--step-5); line-height: 0.88; letter-spacing: -0.045em; font-weight: 900; max-width: 15ch; will-change: transform; } .hero__line { display: block; } .hero__sub { margin-top: clamp(1.6rem, 4vw, 2.6rem); max-width: 50ch; font-size: var(--step-1); color: var(--on-bg-muted); line-height: 1.5; } .hero__sub strong { color: var(--on-bg); font-weight: 700; } .hero__actions { display: flex; flex-wrap: wrap; align-items: center; gap: 1rem 1.5rem; margin-top: clamp(2rem, 4vw, 2.8rem); } .hero__secondary { display: inline-flex; align-items: center; gap: 0.4rem; font-weight: 700; color: var(--on-bg); } .hero__secondary span { transition: transform 0.3s var(--ease-out); } .hero__secondary:hover span, .hero__secondary:focus-visible span { transform: translateX(5px); } .hero__trust { display: flex; flex-wrap: wrap; align-items: center; gap: 0.6rem clamp(1.2rem, 3vw, 2rem); margin-top: clamp(2.5rem, 6vw, 4rem); padding-top: 1.8rem; border-top: 1px solid var(--border); font-size: var(--step-0); color: var(--on-bg-muted); } .hero__trust strong { color: var(--on-bg); font-weight: 700; } .hero__trust-sep { width: 5px; height: 5px; border-radius: 50%; background: var(--emerald-400); } .hero__scroll { position: absolute; bottom: clamp(1.2rem, 3vw, 2rem); left: 50%; transform: translateX(-50%); display: inline-flex; flex-direction: column; align-items: center; gap: 0.4rem; font-size: 11px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--on-bg-faint); z-index: 2; } .hero__scroll svg { animation: bob 2s var(--ease-out) infinite; } @keyframes bob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(5px); } } /* ----------------------------------------------------------------- 9. MARQUEE (logo / proof bar) ----------------------------------------------------------------- */ .proof { position: relative; z-index: 2; padding-block: clamp(2rem, 4vw, 3rem); border-block: 1px solid var(--border); background: rgba(8, 8, 12, 0.5); backdrop-filter: blur(6px); } .proof__label { text-align: center; font-size: var(--step--1); letter-spacing: 0.14em; text-transform: uppercase; color: var(--on-bg-faint); margin-bottom: clamp(1.2rem, 3vw, 1.8rem); } .marquee { position: relative; overflow: hidden; -webkit-mask-image: linear-gradient(90deg, transparent, #000 12%, #000 88%, transparent); mask-image: linear-gradient(90deg, transparent, #000 12%, #000 88%, transparent); } .marquee__track { display: flex; width: max-content; animation: marquee 34s linear infinite; } .marquee__row { display: flex; align-items: center; flex-shrink: 0; } .marquee__item { display: inline-flex; align-items: center; font-weight: 700; font-size: clamp(1.1rem, 2.5vw, 1.5rem); letter-spacing: -0.01em; color: var(--on-bg-muted); padding-inline: clamp(1rem, 3vw, 2.2rem); white-space: nowrap; } .marquee__sep { display: inline-block; width: 10px; height: 10px; margin-left: clamp(1rem, 3vw, 2.2rem); border-radius: var(--radius-pill); background: var(--grad-brand); } @keyframes marquee { to { transform: translateX(-50%); } } /* ----------------------------------------------------------------- 10. SECTIONS / GENERIC ----------------------------------------------------------------- */ .section { position: relative; z-index: 2; padding-block: var(--space-section); } .section__head { max-width: 56ch; margin-bottom: clamp(3rem, 7vw, 5rem); } .section__title { font-size: var(--step-3); max-width: 18ch; } .section__lead { margin-top: 1.4rem; font-size: var(--step-1); color: var(--on-bg-muted); max-width: 52ch; } /* --- POSITIONING (big editorial statement) --- */ .positioning { position: relative; z-index: 2; padding-block: var(--space-section); } .positioning__statement { font-size: var(--step-2); font-weight: 500; line-height: 1.28; letter-spacing: -0.01em; max-width: 24ch; color: var(--on-bg); } .positioning__statement .muted { color: var(--on-bg-faint); font-weight: 400; } .positioning__grid { display: grid; grid-template-columns: 0.7fr 1.3fr; gap: clamp(2rem, 6vw, 5rem); align-items: start; } .positioning__aside { font-size: var(--step-0); color: var(--on-bg-muted); line-height: 1.6; border-left: 1px solid var(--border); padding-left: clamp(1.2rem, 3vw, 2rem); } .positioning__aside .serif-em { display: block; font-size: var(--step-2); margin-bottom: 1rem; } /* ----------------------------------------------------------------- 11. SERVICES — broken editorial grid ----------------------------------------------------------------- */ .services { position: relative; z-index: 2; padding-block: var(--space-section); } .services__grid { display: grid; grid-template-columns: repeat(6, 1fr); gap: clamp(0.9rem, 1.8vw, 1.4rem); } .service { position: relative; grid-column: span 2; display: flex; flex-direction: column; padding: clamp(1.6rem, 3vw, 2.4rem); border: 1px solid var(--border); border-radius: var(--radius-lg); background: var(--surface); overflow: hidden; min-height: clamp(220px, 26vw, 320px); transition: transform 0.5s var(--ease-out), background 0.5s, border-color 0.5s; } /* deliberately broken: first two cards span 3 (off the safe 6-col rhythm) */ .service--wide:nth-child(1), .service--wide:nth-child(2) { grid-column: span 3; } .service::before { content: ""; position: absolute; inset: 0 0 auto 0; height: 2px; background: var(--grad-spectrum); transform: scaleX(0); transform-origin: left; transition: transform 0.6s var(--ease-out); } .service:hover { transform: translateY(-6px); background: var(--surface-2); border-color: var(--border-strong); } .service:hover::before { transform: scaleX(1); } .service__index { font-family: var(--font-serif); font-style: italic; font-size: var(--step-2); line-height: 1; background: var(--grad-brand); -webkit-background-clip: text; background-clip: text; color: transparent; } .service__name { font-size: var(--step-1); margin-block: auto 0.7rem; padding-top: 1.4rem; } .service__desc { color: var(--on-bg-muted); font-size: var(--step-0); line-height: 1.5; max-width: 40ch; } /* ----------------------------------------------------------------- 12. METRICS (animated count-up) ----------------------------------------------------------------- */ .metrics { position: relative; z-index: 2; padding-block: var(--space-section); } .metrics__inner { border-block: 1px solid var(--border); padding-block: clamp(3rem, 7vw, 5rem); } .metrics__grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: clamp(2rem, 4vw, 3rem); } .metric { position: relative; padding-left: 1.5rem; } .metric::before { content: ""; position: absolute; left: 0; top: 0.4rem; bottom: 0.4rem; width: 2px; background: var(--grad-brand); border-radius: 2px; } .metric--accent::before { background: var(--grad-emerald); } .metric__num { font-size: var(--step-4); font-weight: 900; line-height: 1; letter-spacing: -0.04em; font-variant-numeric: tabular-nums; } .metric--accent .metric__num { background: var(--grad-emerald); -webkit-background-clip: text; background-clip: text; color: transparent; } .metric__label { margin-top: 0.9rem; color: var(--on-bg-muted); font-size: var(--step-0); max-width: 22ch; } /* ----------------------------------------------------------------- 13. CASE STUDIES — large film-cell cards ----------------------------------------------------------------- */ .cases { position: relative; z-index: 2; padding-block: var(--space-section); } .cases__list { display: grid; gap: clamp(1.5rem, 4vw, 3rem); } .case { position: relative; display: grid; grid-template-columns: 1.05fr 0.95fr; align-items: stretch; gap: 0; border: 1px solid var(--border); border-radius: var(--radius-xl); background: var(--surface); overflow: hidden; transition: transform 0.5s var(--ease-out), border-color 0.5s, box-shadow 0.5s; } .case:nth-child(even) { grid-template-columns: 0.95fr 1.05fr; } .case:nth-child(even) .case__media { order: 2; } .case:hover { transform: translateY(-6px); border-color: var(--border-strong); box-shadow: var(--shadow-card); } .case__media { position: relative; overflow: hidden; background: radial-gradient(120% 120% at 70% 20%, #1a1730 0%, #0a0a12 70%); min-height: clamp(280px, 34vw, 460px); } .case__img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.9s var(--ease-out); } .case:hover .case__img { transform: scale(1.06); } .case__tag { position: absolute; top: 1.4rem; left: 1.4rem; z-index: 2; font-size: var(--step--2); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; padding: 0.45rem 0.95rem; border-radius: var(--radius-pill); background: var(--glass); backdrop-filter: blur(8px); border: 1px solid var(--border-strong); color: var(--on-bg); } .case__body { display: flex; flex-direction: column; justify-content: center; gap: 1.2rem; padding: clamp(2rem, 4vw, 3.4rem); } .case__problem { font-size: var(--step--1); font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--on-bg-faint); } .case__result { font-size: var(--step-2); font-weight: 900; line-height: 1.1; letter-spacing: -0.02em; } .case__result em { font-style: normal; background: var(--grad-emerald); -webkit-background-clip: text; background-clip: text; color: transparent; } .case__how { color: var(--on-bg-muted); font-size: var(--step-0); line-height: 1.5; max-width: 38ch; } .case__metric { display: inline-flex; align-items: baseline; gap: 0.5rem; margin-top: 0.4rem; padding-top: 1.4rem; border-top: 1px solid var(--border); } .case__metric-num { font-size: var(--step-3); font-weight: 900; letter-spacing: -0.03em; font-variant-numeric: tabular-nums; background: var(--grad-emerald); -webkit-background-clip: text; background-clip: text; color: transparent; } .case__metric-label { font-size: var(--step--1); color: var(--on-bg-muted); } .cases__cta { margin-top: clamp(2.5rem, 5vw, 3.5rem); text-align: center; } /* ----------------------------------------------------------------- 14. PROCESS — pinned scrollytelling (The Feedback Loop) ----------------------------------------------------------------- */ .process { position: relative; z-index: 2; background: var(--ink-900); border-block: 1px solid var(--border); } .process__inner { display: grid; grid-template-columns: 0.9fr 1.1fr; gap: clamp(2rem, 6vw, 5rem); align-items: start; padding-block: var(--space-section); } .process__sticky { position: sticky; top: clamp(7rem, 16vh, 12rem); } .process__count { font-family: var(--font-serif); font-style: italic; font-size: var(--step-5); line-height: 0.9; background: var(--grad-brand); -webkit-background-clip: text; background-clip: text; color: transparent; } .process__steps { display: grid; gap: clamp(1rem, 2.5vw, 1.6rem); counter-reset: step; } .pstep { position: relative; padding: clamp(1.6rem, 3vw, 2.4rem); border: 1px solid var(--border); border-radius: var(--radius-lg); background: var(--surface); opacity: 0.45; transition: opacity 0.5s, background 0.5s, border-color 0.5s, transform 0.5s var(--ease-out); } .pstep.is-active { opacity: 1; background: var(--surface-2); border-color: var(--border-strong); } .pstep__top { display: flex; align-items: baseline; gap: 1rem; margin-bottom: 0.8rem; } .pstep__n { font-size: var(--step--1); font-weight: 700; letter-spacing: 0.1em; color: var(--violet-300); font-variant-numeric: tabular-nums; } .pstep__name { font-size: var(--step-2); } .pstep__desc { color: var(--on-bg-muted); font-size: var(--step-0); line-height: 1.5; max-width: 42ch; } /* ----------------------------------------------------------------- 15. TESTIMONIALS ----------------------------------------------------------------- */ .tmonials { position: relative; z-index: 2; padding-block: var(--space-section); } .tmonials__grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: clamp(1.5rem, 3vw, 2.5rem); } .tmonial { position: relative; padding: clamp(2rem, 4vw, 3rem); border: 1px solid var(--border); border-radius: var(--radius-lg); background: var(--surface); } .tmonial__quote { font-family: var(--font-serif); font-style: italic; font-size: var(--step-2); line-height: 1.3; letter-spacing: -0.01em; color: var(--on-bg); } .tmonial__mark { font-family: var(--font-serif); font-size: var(--step-4); line-height: 0; color: var(--violet-400); margin-bottom: 0.5rem; display: block; } .tmonial__by { margin-top: 1.6rem; font-size: var(--step--1); color: var(--on-bg-muted); font-weight: 600; } /* partners row */ .partners { display: flex; flex-wrap: wrap; align-items: center; gap: 1rem 2rem; margin-top: clamp(2.5rem, 5vw, 3.5rem); padding-top: clamp(2rem, 4vw, 3rem); border-top: 1px solid var(--border); } .partners__label { font-size: var(--step--1); text-transform: uppercase; letter-spacing: 0.12em; color: var(--on-bg-faint); } .partner { font-weight: 700; font-size: var(--step-0); color: var(--on-bg-muted); } /* ----------------------------------------------------------------- 16. FAQ ----------------------------------------------------------------- */ .faq { position: relative; z-index: 2; padding-block: var(--space-section); } .faq__inner { display: grid; grid-template-columns: 0.8fr 1.2fr; gap: clamp(2rem, 6vw, 5rem); align-items: start; } .faq__head { position: sticky; top: clamp(7rem, 14vh, 10rem); } .faq__list { display: grid; } .faq__item { border-top: 1px solid var(--border); } .faq__item:last-child { border-bottom: 1px solid var(--border); } .faq__q { width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 1.5rem; padding: clamp(1.3rem, 3vw, 1.9rem) 0; background: none; border: none; text-align: left; font-family: inherit; font-size: var(--step-1); font-weight: 700; letter-spacing: -0.01em; color: var(--on-bg); transition: color 0.3s; } .faq__q:hover { color: var(--violet-300); } .faq__icon { position: relative; flex-shrink: 0; width: 22px; height: 22px; } .faq__icon::before, .faq__icon::after { content: ""; position: absolute; inset: 50% 0 auto 0; height: 2px; background: currentColor; transition: transform 0.35s var(--ease-out); } .faq__icon::after { transform: rotate(90deg); } .faq__item[data-open="true"] .faq__icon::after { transform: rotate(0deg); } .faq__a { display: grid; grid-template-rows: 0fr; transition: grid-template-rows 0.4s var(--ease-out); } .faq__item[data-open="true"] .faq__a { grid-template-rows: 1fr; } .faq__a-inner { overflow: hidden; } .faq__a p { padding-bottom: clamp(1.3rem, 3vw, 1.9rem); color: var(--on-bg-muted); font-size: var(--step-0); line-height: 1.6; max-width: 60ch; } /* ----------------------------------------------------------------- 17. CTA — iridescent close ----------------------------------------------------------------- */ .cta { position: relative; z-index: 2; padding-block: clamp(7rem, 16vw, 14rem); text-align: center; overflow: hidden; } .cta__glow { position: absolute; inset: auto 0 -40% 0; height: 120%; background: radial-gradient(60% 60% at 50% 80%, rgba(139, 92, 246, 0.28), transparent 70%); pointer-events: none; z-index: -1; } .cta__wrap { display: flex; flex-direction: column; align-items: center; } .cta__mark { width: clamp(64px, 9vw, 96px); margin-bottom: clamp(1.5rem, 4vw, 2.5rem); filter: drop-shadow(0 24px 60px rgba(139, 92, 246, 0.35)); } .cta__title { font-size: var(--step-4); max-width: 14ch; margin-bottom: 1.4rem; } .cta__lead { font-size: var(--step-1); color: var(--on-bg-muted); max-width: 46ch; margin-bottom: 2.5rem; } .cta__mail { margin-top: 1.5rem; color: var(--on-bg-faint); font-size: var(--step--1); } .cta__mail a { color: var(--violet-300); font-weight: 700; text-decoration: underline; text-underline-offset: 3px; } /* ----------------------------------------------------------------- 18. FOOTER ----------------------------------------------------------------- */ .site-footer { position: relative; z-index: 2; background: var(--ink-900); border-top: 1px solid var(--border); padding-block: clamp(3rem, 7vw, 5rem); } .site-footer__inner { display: grid; grid-template-columns: 1.4fr 1fr 1fr; gap: 2.5rem 2rem; align-items: start; } .site-footer__tag { margin-top: 1rem; color: var(--on-bg-muted); max-width: 34ch; } .site-footer__col h2 { font-size: var(--step--1); text-transform: uppercase; letter-spacing: 0.12em; color: var(--on-bg-faint); margin-bottom: 1rem; font-weight: 700; } .site-footer__col nav { display: flex; flex-direction: column; gap: 0.7rem; } .site-footer__col a { color: var(--on-bg-muted); font-weight: 500; transition: color 0.25s; } .site-footer__col a:hover, .site-footer__col a:focus-visible { color: var(--on-bg); } .site-footer__legal { grid-column: 1 / -1; margin-top: 1.5rem; padding-top: 1.5rem; border-top: 1px solid var(--border); display: flex; flex-wrap: wrap; justify-content: space-between; gap: 1rem; color: var(--on-bg-faint); font-size: var(--step--1); } /* ----------------------------------------------------------------- 19. RESPONSIVE ----------------------------------------------------------------- */ @media (max-width: 1024px) { .positioning__grid { grid-template-columns: 1fr; } .process__inner { grid-template-columns: 1fr; } .process__sticky { position: static; } .faq__inner { grid-template-columns: 1fr; } .faq__head { position: static; } .metrics__grid { grid-template-columns: repeat(2, 1fr); } .service, .service--wide:nth-child(1), .service--wide:nth-child(2) { grid-column: span 3; } .site-footer__inner { grid-template-columns: 1fr 1fr; } } @media (max-width: 899px) { .site-nav { position: fixed; inset: 0 0 0 auto; width: min(82vw, 360px); flex-direction: column; align-items: flex-start; justify-content: center; gap: 1.5rem; padding: 2rem var(--gutter); background: rgba(11, 11, 18, 0.96); backdrop-filter: blur(20px); border-left: 1px solid var(--border); transform: translateX(100%); transition: transform 0.4s var(--ease-out); z-index: 90; } .site-header.is-open .site-nav { transform: translateX(0); } .site-nav ul { flex-direction: column; gap: 1.2rem; } .site-nav a { font-size: var(--step-1); } .site-header__toggle { display: flex; z-index: 95; } .case, .case:nth-child(even) { grid-template-columns: 1fr; } .case:nth-child(even) .case__media { order: 0; } .tmonials__grid { grid-template-columns: 1fr; } .hero__accent { top: auto; bottom: 4vh; right: -20vw; width: 90vw; opacity: 0.6; } } @media (max-width: 640px) { .services__grid { grid-template-columns: 1fr; } .service, .service--wide:nth-child(1), .service--wide:nth-child(2) { grid-column: span 1; min-height: 0; } .metrics__grid { grid-template-columns: 1fr 1fr; } .site-footer__inner { grid-template-columns: 1fr; } } /* ----------------------------------------------------------------- 20. REDUCED MOTION ----------------------------------------------------------------- */ @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; } .marquee__track { animation: none; } .ktext__in { transform: none !important; } .hero__display { transform: none !important; opacity: 1 !important; } .pstep { opacity: 1 !important; } }