/* ===================================================================== FEEDBACK STUDIOS — "THE FEEDBACK TERMINAL" Concept: a living financial broadsheet / trading terminal that trades in revenue. Warm paper canvas, ink type, one acid-money accent, with inverted ink-black sections for dramatic before/after contrast. Token tiers: 1. PRIMITIVE --c-* raw values 2. SEMANTIC --paper / --ink / --accent / --rule ... 3. COMPONENT --btn-* / --ticker-* ... The whole page lives on a light "paper" base; [data-invert] flips a section to the ink-on-paper inverse (designed together, both AA+). ===================================================================== */ /* Mono for data/labels/tickers — characterful, not a default UI sans. */ @import url("https://fonts.googleapis.com/css2?family=Newsreader:ital,opsz,wght@0,6..72,400;0,6..72,500;1,6..72,400&family=Spline+Sans+Mono:wght@400;500;600&display=swap"); /* -------------------------------------------------------------------- 1. PRIMITIVES -------------------------------------------------------------------- */ :root { /* ink + paper */ --c-paper: #f4f1ea; /* warm newsprint */ --c-paper-2: #ece7dc; /* shaded paper */ --c-ink: #14130f; /* near-black ink */ --c-ink-2: #3b382f; /* secondary ink */ --c-ink-soft: #6b6657; /* muted ink */ /* money accent — acid lime "ticker green" reads as growth/cash */ --c-acid: #c8f04c; /* primary accent */ --c-acid-deep: #a6d426; /* accent for text-on-paper (AA) */ --c-emerald: #1f9d6b; /* up / gains (dot/accent) */ --c-emerald-ink: #0a6e47; /* legible money text on paper (5.5:1) */ --c-violet: #7c5cff; /* brand violet, used sparingly */ --c-blue: #2f6bff; /* brand blue, used sparingly */ --c-red: #d6452b; /* down / loss (never color-only) */ /* type */ --font-display: "Newsreader", Georgia, "Times New Roman", serif; --font-sans: "Satoshi", ui-sans-serif, system-ui, sans-serif; --font-mono: "Spline Sans Mono", ui-monospace, "SFMono-Regular", monospace; /* fluid scale (clamp: min, vw, max) */ --step--1: clamp(0.78rem, 0.74rem + 0.2vw, 0.9rem); --step-0: clamp(1rem, 0.95rem + 0.25vw, 1.15rem); --step-1: clamp(1.2rem, 1.05rem + 0.7vw, 1.6rem); --step-2: clamp(1.6rem, 1.2rem + 1.8vw, 2.6rem); --step-3: clamp(2.4rem, 1.4rem + 4.6vw, 5rem); --step-4: clamp(3.4rem, 1rem + 11vw, 11rem); --step-5: clamp(4.5rem, -1rem + 22vw, 17rem); /* space */ --gutter: clamp(1.1rem, 0.6rem + 2.4vw, 2.6rem); --section-y: clamp(4rem, 2rem + 9vw, 9rem); --rule-w: 1px; /* motion */ --ease-out: cubic-bezier(0.22, 1, 0.36, 1); --ease-io: cubic-bezier(0.65, 0, 0.35, 1); --dur: 0.45s; } /* -------------------------------------------------------------------- 2. SEMANTIC (light paper base) -------------------------------------------------------------------- */ :root { --paper: var(--c-paper); --paper-2: var(--c-paper-2); --ink: var(--c-ink); --ink-2: var(--c-ink-2); --ink-soft: var(--c-ink-soft); --accent: var(--c-acid-deep); /* text-safe accent on paper */ --accent-fill: var(--c-acid); /* big fills / chips */ --on-accent: var(--c-ink); --rule: rgba(20, 19, 15, 0.16); --rule-strong: rgba(20, 19, 15, 0.42); --surface: #fbf9f3; --focus: var(--c-violet); } /* Inverted section: ink canvas, paper type. Designed in parallel. */ [data-invert] { --paper: var(--c-ink); --paper-2: #1d1c16; --ink: var(--c-paper); --ink-2: #d8d3c6; --ink-soft: #99948440; /* placeholder, overridden below */ --ink-soft: #a8a294; --accent: var(--c-acid); /* full acid pops on dark */ --accent-fill: var(--c-acid); --on-accent: var(--c-ink); --rule: rgba(244, 241, 234, 0.18); --rule-strong: rgba(244, 241, 234, 0.5); --surface: #1b1a14; --focus: var(--c-acid); } /* -------------------------------------------------------------------- RESET -------------------------------------------------------------------- */ *, *::before, *::after { box-sizing: border-box; } * { margin: 0; } html { -webkit-text-size-adjust: 100%; } html, body { height: 100%; } body { background: var(--paper); color: var(--ink); font-family: var(--font-sans); font-size: var(--step-0); line-height: 1.55; font-weight: 400; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; overflow-x: hidden; } img, picture, svg, canvas { display: block; max-width: 100%; } button, input, select, textarea { font: inherit; color: inherit; } a { color: inherit; text-decoration: none; } ul, ol { list-style: none; padding: 0; } h1, h2, h3, h4 { font-weight: 400; line-height: 1; } /* -------------------------------------------------------------------- FOCUS / SKIP / GRAIN -------------------------------------------------------------------- */ :focus-visible { outline: 3px solid var(--focus); outline-offset: 3px; border-radius: 1px; } .skip-link { position: fixed; top: -100px; left: var(--gutter); z-index: 200; background: var(--c-ink); color: var(--c-paper); padding: 0.7rem 1.1rem; font-family: var(--font-mono); font-size: var(--step--1); transition: top 0.2s var(--ease-out); } .skip-link:focus { top: 0.8rem; } /* film grain over everything for the printed feel */ .grain { position: fixed; inset: 0; z-index: 1; pointer-events: none; opacity: 0.05; mix-blend-mode: multiply; 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.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E"); } /* -------------------------------------------------------------------- LAYOUT PRIMITIVES — the broadsheet frame -------------------------------------------------------------------- */ .frame { padding-inline: var(--gutter); } .wrap { max-width: 1480px; margin-inline: auto; } /* a horizontal hairline rule, broadsheet-style */ .rule { height: var(--rule-w); width: 100%; background: var(--rule); border: 0; } .rule--strong { background: var(--rule-strong); } /* mono label / kicker */ .kicker { font-family: var(--font-mono); font-size: var(--step--1); font-weight: 500; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-soft); display: inline-flex; align-items: center; gap: 0.55rem; } .kicker__dot { width: 0.5rem; height: 0.5rem; background: var(--c-emerald); /* visible on paper (3:1 graphical) */ border-radius: 50%; flex: none; } [data-invert] .kicker__dot { background: var(--c-acid); } /* pops on ink */ /* big editorial display heading */ .display { font-family: var(--font-display); font-weight: 400; line-height: 0.92; letter-spacing: -0.02em; } .display em { font-style: italic; } /* "money green" inline highlight. On paper: deep emerald text (5.5:1 AA) + decorative acid underline so the word still reads as cash without failing contrast. On ink-inverted sections: full acid (14:1) — designed together. */ .cash { color: var(--c-emerald-ink); font-style: italic; background-image: linear-gradient(var(--c-acid), var(--c-acid)); background-repeat: no-repeat; background-position: 0 92%; background-size: 100% 0.12em; } [data-invert] .cash { color: var(--c-acid); background-image: none; } /* -------------------------------------------------------------------- BUTTONS -------------------------------------------------------------------- */ .btn { --btn-bg: var(--ink); --btn-fg: var(--paper); display: inline-flex; align-items: center; gap: 0.6rem; padding: 0.95rem 1.5rem; font-family: var(--font-mono); font-size: var(--step--1); font-weight: 500; letter-spacing: 0.06em; text-transform: uppercase; background: var(--btn-bg); color: var(--btn-fg); border: var(--rule-w) solid var(--ink); cursor: pointer; position: relative; overflow: hidden; transition: color 0.3s var(--ease-out); isolation: isolate; } .btn::after { content: ""; position: absolute; inset: 0; background: var(--accent-fill); transform: translateY(101%); transition: transform 0.4s var(--ease-out); z-index: -1; } .btn:hover::after, .btn:focus-visible::after { transform: translateY(0); } .btn:hover, .btn:focus-visible { color: var(--c-ink); } .btn--accent { --btn-bg: var(--accent-fill); --btn-fg: var(--c-ink); border-color: var(--c-ink); } .btn--accent::after { background: var(--ink); } .btn--accent:hover, .btn--accent:focus-visible { color: var(--paper); } .btn--ghost { --btn-bg: transparent; --btn-fg: var(--ink); } .btn--ghost::after { background: var(--ink); } .btn--ghost:hover, .btn--ghost:focus-visible { color: var(--paper); } .btn .arrow { transition: transform 0.35s var(--ease-out); } .btn:hover .arrow { transform: translateX(3px); } /* -------------------------------------------------------------------- REVEAL utility (JS adds .is-in) — fallback: visible -------------------------------------------------------------------- */ .reveal { opacity: 0; transform: translateY(28px); } .reveal.is-in { opacity: 1; transform: none; transition: opacity 0.8s var(--ease-out), transform 0.8s var(--ease-out); } /* -------------------------------------------------------------------- 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; } .reveal { opacity: 1 !important; transform: none !important; } } /* ===================================================================== COMPONENT LAYER ===================================================================== */ /* --- screen-reader only --- */ .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; } /* --- custom cursor --- */ .cursor { display: none; } body.has-cursor { cursor: none; } body.has-cursor a, body.has-cursor button, body.has-cursor [data-cursor] { cursor: none; } @media (pointer: fine) { .cursor { display: grid; place-items: center; position: fixed; top: 0; left: 0; z-index: 150; pointer-events: none; width: 12px; height: 12px; will-change: transform; } .cursor__cross { position: absolute; width: 7px; height: 7px; border-radius: 50%; background: var(--c-ink); mix-blend-mode: difference; transition: width 0.25s var(--ease-out), height 0.25s var(--ease-out); } .cursor[data-active="1"] .cursor__cross { width: 54px; height: 54px; background: var(--c-acid); mix-blend-mode: normal; opacity: 0.92; } .cursor__label { position: relative; font-family: var(--font-mono); font-size: 10px; font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; color: var(--c-ink); opacity: 0; white-space: nowrap; transition: opacity 0.2s var(--ease-out); } .cursor[data-has-label="1"] .cursor__label { opacity: 1; } } /* --- line mask (kinetic headline) --- */ .line-mask { display: block; overflow: hidden; padding-block: 0.04em; } /* ===================================================================== MASTHEAD / HEADER ===================================================================== */ .masthead { position: fixed; top: 0; left: 0; right: 0; z-index: 100; background: color-mix(in srgb, var(--c-paper) 80%, transparent); -webkit-backdrop-filter: blur(10px) saturate(1.1); backdrop-filter: blur(10px) saturate(1.1); transition: background 0.3s var(--ease-out); } .masthead.is-scrolled { background: color-mix(in srgb, var(--c-paper) 94%, transparent); } .masthead__bar { max-width: 1480px; margin-inline: auto; display: flex; align-items: center; gap: clamp(1rem, 3vw, 2.5rem); height: 68px; } .masthead__rule { height: 1px; background: var(--rule); } .logo { display: flex; align-items: baseline; gap: 0.7rem; flex: none; } .logo__bug { font-family: var(--font-mono); font-weight: 600; font-size: 0.85rem; letter-spacing: 0.02em; background: var(--c-ink); color: var(--c-acid); padding: 0.28em 0.42em; line-height: 1; align-self: center; } .logo__name { font-family: var(--font-display); font-size: 1.18rem; letter-spacing: -0.01em; } .logo__tag { font-family: var(--font-mono); font-size: 0.62rem; letter-spacing: 0.14em; color: var(--ink-soft); text-transform: uppercase; } .masthead__nav { margin-left: auto; } .masthead__nav ul { display: flex; gap: clamp(1rem, 2.4vw, 2.2rem); } .masthead__nav a { font-family: var(--font-mono); font-size: 0.8rem; letter-spacing: 0.04em; text-transform: uppercase; position: relative; padding-block: 0.4rem; } .masthead__nav a::after { content: ""; position: absolute; left: 0; bottom: 0; width: 100%; height: 1.5px; background: var(--c-ink); transform: scaleX(0); transform-origin: left; transition: transform 0.3s var(--ease-out); } .masthead__nav a:hover::after, .masthead__nav a:focus-visible::after { transform: scaleX(1); } .masthead__cta { padding: 0.62rem 1.1rem; } .masthead__burger { display: none; background: none; border: 0; padding: 0.5rem; } .masthead__burger-box { display: grid; gap: 5px; width: 26px; } .masthead__burger-box i { display: block; height: 2px; background: var(--c-ink); transition: transform 0.3s var(--ease-out), opacity 0.2s var(--ease-out); } .masthead__burger-box[data-open="true"] i:nth-child(1) { transform: translateY(7px) rotate(45deg); } .masthead__burger-box[data-open="true"] i:nth-child(2) { opacity: 0; } .masthead__burger-box[data-open="true"] i:nth-child(3) { transform: translateY(-7px) rotate(-45deg); } .drawer { position: fixed; inset: 68px 0 0 0; z-index: 99; background: var(--c-paper); display: flex; flex-direction: column; justify-content: center; gap: 2rem; padding: 2rem var(--gutter) 4rem; transform: translateY(-110%); transition: transform 0.5s var(--ease-out); visibility: hidden; } .drawer[data-open="true"] { transform: translateY(0); visibility: visible; } .drawer nav ul { display: grid; gap: 0.4rem; } .drawer a { display: flex; align-items: baseline; gap: 1rem; font-family: var(--font-display); font-size: clamp(2rem, 11vw, 3.4rem); line-height: 1.1; opacity: 0; transform: translateY(20px); transition: opacity 0.4s var(--ease-out), transform 0.4s var(--ease-out); } .drawer[data-open="true"] a { opacity: 1; transform: none; } .drawer__idx { font-family: var(--font-mono); font-size: 0.8rem; color: var(--ink-soft); letter-spacing: 0.1em; } /* ===================================================================== HERO ===================================================================== */ .hero { position: relative; padding-top: clamp(7rem, 6rem + 6vw, 10rem); padding-bottom: var(--section-y); max-width: 1480px; margin-inline: auto; overflow: clip; } .hero__field { position: absolute; inset: 0; z-index: 0; pointer-events: none; } .revfield { position: absolute; inset: 0; width: 100%; height: 100%; } .hero > * { position: relative; z-index: 2; } .hero__dateline { display: flex; flex-wrap: wrap; gap: 0.7rem; align-items: center; font-family: var(--font-mono); font-size: var(--step--1); letter-spacing: 0.1em; text-transform: uppercase; color: var(--ink-soft); margin-bottom: 0.8rem; } .hero__dateline span:first-child { color: var(--ink); font-weight: 600; } .hero__grid { display: grid; grid-template-columns: 1fr; gap: clamp(1.5rem, 3vw, 3rem); margin-top: clamp(2rem, 4vw, 4rem); align-items: end; } @media (min-width: 980px) { .hero__grid { grid-template-columns: 1.55fr 1fr; } } .hero__h1 { font-size: var(--step-4); letter-spacing: -0.03em; max-width: 14ch; } .hero__sub { font-size: var(--step-1); color: var(--ink-2); max-width: 38ch; text-wrap: balance; } .hero__cta { margin-top: 1.6rem; display: flex; flex-wrap: wrap; gap: 0.7rem; } .hero__slab { margin-top: clamp(2.5rem, 5vw, 4.5rem); border-block: 1px solid var(--rule-strong); padding-block: 1.4rem; display: grid; grid-template-columns: 1fr; gap: 1.2rem; } @media (min-width: 720px) { .hero__slab { grid-template-columns: auto auto 1fr; gap: clamp(2rem, 6vw, 6rem); align-items: center; } } .hero__stat { display: flex; flex-direction: column; gap: 0.2rem; } .hero__stat-num { font-size: clamp(2rem, 5vw, 3.2rem); letter-spacing: -0.02em; } .hero__stat-lab { font-family: var(--font-mono); font-size: var(--step--1); text-transform: uppercase; letter-spacing: 0.08em; color: var(--ink-soft); } .hero__stat--live { flex-direction: row; align-items: center; gap: 0.6rem; justify-self: end; } .hero__live { width: 10px; height: 10px; border-radius: 50%; background: var(--c-emerald); box-shadow: 0 0 0 0 var(--c-emerald); animation: pulse 2s infinite var(--ease-out); } @keyframes pulse { 0% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--c-emerald) 70%, transparent); } 70% { box-shadow: 0 0 0 12px transparent; } 100% { box-shadow: 0 0 0 0 transparent; } } .strike { text-decoration: line-through; text-decoration-thickness: 0.06em; color: var(--ink-soft); } /* ===================================================================== TICKER TAPE ===================================================================== */ .tape { background: var(--paper); color: var(--ink); border-block: 1px solid var(--rule-strong); overflow: hidden; padding-block: 1.1rem; } .ticker__track { display: flex; width: max-content; animation: marquee 38s linear infinite; } .ticker:hover .ticker__track { animation-play-state: paused; } .ticker__row { display: flex; } .ticker__item { display: inline-flex; align-items: baseline; gap: 0.6rem; padding-inline: clamp(1.4rem, 4vw, 3rem); border-right: 1px solid var(--rule); white-space: nowrap; } .ticker__arr { color: var(--c-acid); font-size: 0.7em; } .ticker__val { font-family: var(--font-display); font-size: clamp(1.6rem, 3.6vw, 2.6rem); letter-spacing: -0.01em; } .ticker__lab { font-family: var(--font-mono); font-size: var(--step--1); text-transform: uppercase; letter-spacing: 0.08em; color: var(--ink-soft); } @keyframes marquee { from { transform: translateX(0); } to { transform: translateX(-50%); } } /* ===================================================================== PROOF / industries ===================================================================== */ .proof { padding-block: clamp(2.5rem, 5vw, 4rem); } .proof__wrap { display: grid; gap: 1.4rem; } .proof__label { color: var(--ink-soft); } .proof__list { display: flex; flex-wrap: wrap; gap: 0.7rem; } .proof__item { font-family: var(--font-display); font-size: clamp(1.2rem, 3.2vw, 2rem); padding: 0.3rem 1rem 0.4rem; border: 1px solid var(--rule-strong); border-radius: 100px; transition: background 0.3s var(--ease-out), color 0.3s var(--ease-out); } .proof__item:hover { background: var(--c-ink); color: var(--c-paper); } /* ===================================================================== MANIFESTO ===================================================================== */ .manifesto { padding-block: var(--section-y); background: var(--paper); color: var(--ink); } .manifesto__wrap { display: grid; gap: 1.6rem; } .manifesto__lead { font-size: var(--step-3); line-height: 1.04; max-width: 20ch; } .manifesto__body { font-size: var(--step-1); color: var(--ink-2); max-width: 46ch; justify-self: end; } @media (max-width: 760px) { .manifesto__body { justify-self: start; } } /* ===================================================================== SECTION HEAD ===================================================================== */ .sec-head { display: grid; gap: 0.9rem; margin-bottom: clamp(2rem, 4vw, 3.5rem); } .sec-head--center { justify-items: center; text-align: center; } .sec-head__title { font-size: var(--step-3); max-width: 18ch; } .sec-head--center .sec-head__title { max-width: 24ch; } /* ===================================================================== SERVICES — ledger ===================================================================== */ .services { padding-block: var(--section-y); } .ledger { border-top: 1px solid var(--rule-strong); } .ledger__row { display: grid; grid-template-columns: auto 1fr; grid-template-areas: "no name" "no desc"; gap: 0.2rem 1.4rem; align-items: baseline; padding-block: clamp(1.4rem, 3vw, 2.2rem); border-bottom: 1px solid var(--rule); position: relative; transition: padding-left 0.4s var(--ease-out); } @media (min-width: 880px) { .ledger__row { grid-template-columns: 4rem minmax(12ch, 26ch) 1fr auto; grid-template-areas: "no name desc arrow"; align-items: center; gap: 2rem; } .ledger__row:hover { padding-left: 1.2rem; } } .ledger__row::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 0; background: var(--c-acid); transition: width 0.4s var(--ease-out); z-index: -1; } .ledger__no { grid-area: no; font-family: var(--font-mono); font-size: var(--step--1); color: var(--ink-soft); } .ledger__name { grid-area: name; font-size: var(--step-2); } .ledger__desc { grid-area: desc; color: var(--ink-2); max-width: 50ch; } .ledger__arrow { grid-area: arrow; font-size: 1.6rem; color: var(--ink-soft); transition: transform 0.4s var(--ease-out); display: none; } @media (min-width: 880px) { .ledger__arrow { display: block; } } .ledger__row:hover .ledger__arrow { transform: translate(4px, -4px); color: var(--c-ink); } /* ===================================================================== SCORE / metrics ===================================================================== */ .score { padding-block: var(--section-y); } .score__grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1px; background: var(--rule-strong); border: 1px solid var(--rule-strong); } @media (min-width: 900px) { .score__grid { grid-template-columns: repeat(4, 1fr); } } .score__cell { background: var(--paper); padding: clamp(1.6rem, 4vw, 3rem) clamp(1.2rem, 3vw, 2rem); display: grid; gap: 0.7rem; } .score__num { font-size: clamp(2.6rem, 8vw, 5.5rem); letter-spacing: -0.03em; line-height: 0.9; } .score__num.is-accent { color: var(--c-acid); } .score__lab { font-family: var(--font-mono); font-size: var(--step--1); text-transform: uppercase; letter-spacing: 0.06em; color: var(--ink-soft); max-width: 22ch; } /* ===================================================================== WORK / case studies ===================================================================== */ .work { padding-block: var(--section-y); } .work__list { display: grid; gap: clamp(2.5rem, 6vw, 5rem); } .case { display: grid; grid-template-columns: 1fr; gap: 1.4rem; padding-top: clamp(1.6rem, 3vw, 2.4rem); border-top: 2px solid var(--c-ink); } @media (min-width: 920px) { .case { grid-template-columns: 0.85fr 1fr; gap: clamp(2rem, 4vw, 4rem); align-items: start; } .case:nth-child(even) .case__visual { order: -1; } } .case__index { display: flex; align-items: center; gap: 1rem; } .case__no { font-family: var(--font-display); font-size: clamp(2.4rem, 6vw, 4rem); line-height: 1; } .case__tag { font-family: var(--font-mono); font-size: var(--step--1); text-transform: uppercase; letter-spacing: 0.08em; color: var(--ink-soft); } .case__body { display: grid; gap: 0.8rem; align-content: start; } .case__problem { color: var(--ink-soft); font-size: var(--step-0); } .case__problem-k { font-family: var(--font-mono); font-size: var(--step--1); text-transform: uppercase; letter-spacing: 0.08em; } .case__result { font-size: var(--step-2); line-height: 1.05; color: var(--c-ink); } .case__how { color: var(--ink-2); } .case__visual { position: relative; display: grid; gap: 1rem; } .case__img { width: 100%; height: auto; aspect-ratio: 1200 / 896; object-fit: cover; border: 1px solid var(--rule-strong); filter: grayscale(1) contrast(1.05); transition: filter 0.5s var(--ease-out); } .case__visual:hover .case__img { filter: grayscale(0); } .case__metric { position: absolute; right: 0.8rem; bottom: 4.6rem; background: var(--c-acid); color: var(--c-ink); padding: 0.7rem 1rem; display: grid; gap: 0.1rem; border: 1px solid var(--c-ink); } .case__metric-num { font-size: clamp(1.6rem, 4vw, 2.4rem); line-height: 1; } .case__metric-lab { font-family: var(--font-mono); font-size: 0.66rem; text-transform: uppercase; letter-spacing: 0.06em; } .work__cta { margin-top: clamp(2.5rem, 5vw, 4rem); } /* before/after slider */ .ba { margin: 0; display: grid; gap: 0.6rem; } .ba__stage { position: relative; aspect-ratio: 16 / 9; overflow: hidden; border: 1px solid var(--rule-strong); background: var(--surface); touch-action: pan-y; } .ba__layer { position: absolute; inset: 0; } .ba__before { color: var(--ink-soft); background: var(--paper-2); } .ba__chart { width: 100%; height: 100%; } .ba__tag { position: absolute; top: 0.7rem; font-family: var(--font-mono); font-size: 0.68rem; text-transform: uppercase; letter-spacing: 0.08em; padding: 0.25rem 0.5rem; border: 1px solid currentColor; } .ba__tag--before { left: 0.7rem; color: var(--ink-soft); } .ba__tag--after { right: 0.7rem; color: var(--c-ink); background: var(--c-acid); border-color: var(--c-ink); } .ba__divider { position: absolute; top: 0; bottom: 0; width: 2px; background: var(--c-ink); transform: translateX(-1px); } .ba__handle { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 38px; height: 38px; border-radius: 50%; background: var(--c-ink); color: var(--c-acid); display: grid; place-items: center; border: 2px solid var(--c-acid); } .ba__range { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; cursor: ew-resize; margin: 0; } .ba__range:focus-visible + .ba__cap, .ba__stage:focus-within { outline: 3px solid var(--focus); outline-offset: 2px; } .ba__cap { font-family: var(--font-mono); font-size: var(--step--1); text-transform: uppercase; letter-spacing: 0.06em; color: var(--ink-soft); } /* ===================================================================== LOOP / process ===================================================================== */ .loop { padding-block: var(--section-y); } .loop__grid { display: grid; grid-template-columns: 1fr; gap: 1px; background: var(--rule); border: 1px solid var(--rule); } @media (min-width: 720px) { .loop__grid { grid-template-columns: repeat(2, 1fr); } } @media (min-width: 1080px) { .loop__grid { grid-template-columns: repeat(4, 1fr); } } .loop__step { background: var(--paper); padding: clamp(1.6rem, 3vw, 2.4rem); display: grid; gap: 0.7rem; align-content: start; min-height: 14rem; transition: background 0.4s var(--ease-out), color 0.4s var(--ease-out); } .loop__step:hover { background: var(--c-acid); color: var(--c-ink); } .loop__n { font-size: clamp(2.6rem, 6vw, 4rem); color: var(--ink-soft); line-height: 1; } .loop__step:hover .loop__n { color: var(--c-ink); } .loop__name { font-family: var(--font-mono); font-size: var(--step-0); text-transform: uppercase; letter-spacing: 0.06em; font-weight: 600; } .loop__desc { color: var(--ink-2); } .loop__step:hover .loop__desc { color: var(--c-ink); } /* ===================================================================== QUOTES / partners ===================================================================== */ .quotes { padding-block: var(--section-y); } .quotes__grid { display: grid; grid-template-columns: 1fr; gap: clamp(2rem, 5vw, 4rem); } @media (min-width: 860px) { .quotes__grid { grid-template-columns: 1fr 1fr; } } .quote { display: grid; gap: 1.4rem; } .quote__text { font-size: var(--step-2); line-height: 1.1; } .quote__by { font-family: var(--font-mono); font-size: var(--step--1); text-transform: uppercase; letter-spacing: 0.08em; color: var(--ink-soft); display: flex; align-items: center; gap: 0.8rem; } .quote__rule { width: 2.4rem; height: 1px; background: var(--rule-strong); } .partners { margin-top: clamp(3rem, 6vw, 5rem); display: grid; gap: 1rem; } .partners__list { display: flex; flex-wrap: wrap; gap: 0.7rem; } .partners__list li { font-family: var(--font-mono); font-size: var(--step--1); text-transform: uppercase; letter-spacing: 0.06em; padding: 0.5rem 1rem; border: 1px solid var(--rule-strong); } /* ===================================================================== FAQ ===================================================================== */ .faq-sec { padding-block: var(--section-y); } .faq-sec__wrap { display: grid; gap: clamp(2rem, 4vw, 3rem); } @media (min-width: 980px) { .faq-sec__wrap { grid-template-columns: 0.8fr 1.2fr; align-items: start; } } .faq { border-top: 1px solid var(--rule-strong); } .faq__item { border-bottom: 1px solid var(--rule); } .faq__h { margin: 0; } .faq__btn { width: 100%; background: none; border: 0; text-align: left; display: grid; grid-template-columns: auto 1fr auto; gap: 1rem; align-items: center; padding-block: 1.3rem; cursor: pointer; color: var(--ink); } .faq__num { font-family: var(--font-mono); font-size: var(--step--1); color: var(--ink-soft); } .faq__q { font-family: var(--font-display); font-size: var(--step-1); line-height: 1.15; } .faq__sign { position: relative; width: 18px; height: 18px; flex: none; } .faq__sign i { position: absolute; top: 50%; left: 50%; width: 16px; height: 2px; background: var(--ink); transform: translate(-50%, -50%); transition: transform 0.3s var(--ease-out); } .faq__sign i:nth-child(2) { transform: translate(-50%, -50%) rotate(90deg); } .faq__sign[data-open="true"] i:nth-child(2) { transform: translate(-50%, -50%) rotate(0); } .faq__panel { display: grid; grid-template-rows: 0fr; transition: grid-template-rows 0.4s var(--ease-out); } .faq__panel[data-open="true"] { grid-template-rows: 1fr; } .faq__panel-inner { overflow: hidden; } .faq__panel-inner p { padding-bottom: 1.4rem; color: var(--ink-2); max-width: 60ch; font-size: var(--step-0); } /* ===================================================================== FINAL CTA ===================================================================== */ .final { padding-block: clamp(5rem, 10vw, 10rem); } .final__wrap { display: grid; gap: 1.4rem; justify-items: center; text-align: center; } .final__h { font-size: var(--step-4); } .final__sub { font-size: var(--step-1); color: var(--ink-2); max-width: 36ch; text-wrap: balance; } .final__cta { margin-top: 1.4rem; display: flex; flex-wrap: wrap; gap: 0.8rem; justify-content: center; } /* ===================================================================== COLOPHON / footer ===================================================================== */ .colophon { padding-block: clamp(3rem, 6vw, 5rem); } .colophon__top { display: grid; grid-template-columns: 1fr; gap: 2.5rem; margin-bottom: 2.5rem; } @media (min-width: 760px) { .colophon__top { grid-template-columns: 1.2fr 1fr; } } .colophon__brand { display: grid; gap: 1.2rem; align-content: start; } .colophon__brand .logo__bug { justify-self: start; font-size: 1.1rem; } .colophon__line { font-family: var(--font-display); font-size: var(--step-1); max-width: 24ch; } .colophon__nav { display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem; } .colophon__nav ul { display: grid; gap: 0.6rem; } .colophon__nav a { font-family: var(--font-mono); font-size: var(--step--1); text-transform: uppercase; letter-spacing: 0.06em; color: var(--ink-2); } .colophon__nav a:hover { color: var(--ink); } .colophon__bottom { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 1rem; margin-top: 1.5rem; font-family: var(--font-mono); font-size: var(--step--1); color: var(--ink-soft); } /* ===================================================================== RESPONSIVE — header collapse ===================================================================== */ @media (max-width: 860px) { .masthead__nav, .masthead__cta { display: none; } .masthead__burger { display: block; margin-left: auto; } }