Files
trumpsignal-frontend/app/landing.css
T
k d72323b1c6 Production polish: i18n shelved, PWA icons, SEO/GEO cleanup, UX fixes
Big-picture changes since 01be8e7:

New routes — /trump /btc /kol /trades /analytics /archive plus four
SEO landing pages (/methodology /glossary /case-studies /contact),
all served under /[locale]. Each has dedicated metadata + JSON-LD.

KOL page (new) — DigestWidget + OnchainWidget + TalkVsTradesWidget,
filter by handle/ticker, click-through to per-post detail with the
original AI-extracted ticker/conviction/quote.

BTC page (new) — tabbed: macro-bottom (AHR999 + 200WMA + Pi Cycle)
and funding-rate reversal, with live sparkline + threshold bands.

Telegram card on Settings — wallet-link code generation, status,
disconnect. Preferences moved into the bot itself (/trump /btc etc.)
so the card stays minimal.

SignalMonitor (new) — ETH/LINK Bollinger breakout monitor in its own
component, shares the singleton WsProvider so no second WS opens.

WS singleton refactor (lib/wsContext) — shared WsProvider + useWsSubscribe
hook. Cleanup now actively closes the socket on unmount; previously the
local `ws` couldn't be reached from cleanup and leaked one connection
per StrictMode remount.

OpenPositions polling no longer pops MetaMask in the background —
splits into load('first') for user-initiated and load('poll') that
uses getCachedViewEnvelope without signing.

i18n shelved — proxy.ts (Next 16 middleware rename) wires next-intl
but only Navbar + layout footer have translations. Rest of UI used
isZh ternary scattered across 28 files. All `const isZh = locale === 'zh'`
flipped to `const isZh = false` so every site renders English; Chinese
branches kept as dead code so revival is one regex away.
LanguageSwitch hidden but file kept. zh-CN hreflang removed from
metadata + sitemap to avoid duplicate-content penalties.

Wallet error handling — lib/walletError.ts: isUserRejection walks EIP-1193
code 4001 + .cause chain; previous string-match for "reject"/"denied"
broke for users running MetaMask in non-English UIs. 12 call sites
migrated across 5 components.

PWA icons — app/icon.tsx + app/apple-icon.tsx render the brand "α" via
Next's ImageResponse so no static PNG asset is required. manifest.ts
references /icon and /apple-icon dynamic routes.

OG image + sitemap + robots — dynamic 1200×630 OG card; robots blocks
both /en/settings and /zh/settings; sitemap only emits /en routes;
JSON-LD covers SoftwareApplication + Organization + 10-Q FAQPage.

Landing page polish — Launch Dashboard button stripped of magnetic
hover + shimmer + lift + glow expansion (multiple users found it busy);
hero scramble alphabet swapped to alphanumeric (was block characters);
"15 KOL feeds" copy updated to 19 in 5 places.

PostCards source icons — new entries for btc_bottom_reversal,
funding_reversal, kol_divergence so they no longer fall through to
the generic "first letter" fallback.

Archive page filter — excludes funding_reversal + kol_divergence
(previously only excluded truth + btc_bottom_reversal so new live
signals leaked into the legacy archive).

Cache + skeleton loading — lib/cache.ts SWR module with per-key TTL,
applied across the major pages so navigation feels instant.

SignConfirmSheet — 4 hardcoded Chinese strings translated to English
(English users were seeing zh-only "需要钱包签名" etc).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 00:53:27 +08:00

1954 lines
51 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.
/* ============================================================
Landing page — fully scoped under .lp-root
Dark-only, self-contained. Does not touch dashboard styles.
============================================================ */
.lp-root {
--lp-bg: #0a0907;
--lp-bg-2: #12100c;
--lp-surface: rgba(255, 255, 255, 0.04);
--lp-surface-2: rgba(255, 255, 255, 0.07);
--lp-line: rgba(255, 255, 255, 0.08);
--lp-line-2: rgba(255, 255, 255, 0.14);
--lp-ink: #f5f2ea;
--lp-ink-2: #c9c3b5;
--lp-ink-3: #8a8578;
--lp-ink-4: #5c584e;
--lp-amber: #f5a524;
--lp-amber-2: #e68a00;
--lp-amber-glow: rgba(245, 165, 36, 0.35);
--lp-red: #ef4444;
--lp-green: #22c55e;
--lp-violet: #a78bfa;
min-height: 100vh;
background: var(--lp-bg);
color: var(--lp-ink);
font-family: 'Geist', ui-sans-serif, system-ui, sans-serif;
-webkit-font-smoothing: antialiased;
overflow-x: hidden;
position: relative;
}
.lp-root *, .lp-root *::before, .lp-root *::after {
box-sizing: border-box;
}
/* ---------- Animated background mesh ---------- */
.lp-mesh {
position: fixed;
inset: 0;
pointer-events: none;
z-index: 0;
overflow: hidden;
}
.lp-mesh::before,
.lp-mesh::after {
content: '';
position: absolute;
width: 60vmax;
height: 60vmax;
border-radius: 50%;
filter: blur(90px);
opacity: 0.55;
will-change: transform;
}
.lp-mesh::before {
background: radial-gradient(circle, rgba(245,165,36,0.45), transparent 60%);
top: -20vmax; left: -20vmax;
animation: lp-float-a 22s ease-in-out infinite;
}
.lp-mesh::after {
background: radial-gradient(circle, rgba(239,68,68,0.35), transparent 60%);
bottom: -20vmax; right: -20vmax;
animation: lp-float-b 26s ease-in-out infinite;
}
@keyframes lp-float-a {
0%,100% { transform: translate(0,0) scale(1); }
50% { transform: translate(15vw, 10vh) scale(1.15); }
}
@keyframes lp-float-b {
0%,100% { transform: translate(0,0) scale(1); }
50% { transform: translate(-12vw, -8vh) scale(1.1); }
}
/* ---------- Grid overlay ---------- */
.lp-grid {
position: fixed; inset: 0; pointer-events: none; z-index: 0;
background-image:
linear-gradient(rgba(255,255,255,0.025) 1px, transparent 1px),
linear-gradient(90deg, rgba(255,255,255,0.025) 1px, transparent 1px);
background-size: 56px 56px;
mask-image: radial-gradient(ellipse at 50% 40%, #000 30%, transparent 80%);
-webkit-mask-image: radial-gradient(ellipse at 50% 40%, #000 30%, transparent 80%);
}
/* ---------- Container ---------- */
.lp-wrap {
position: relative;
z-index: 1;
max-width: 1180px;
margin: 0 auto;
padding: 0 24px;
}
/* ---------- Nav ---------- */
.lp-nav {
position: sticky;
top: 0;
z-index: 20;
backdrop-filter: blur(14px);
background: rgba(10,9,7,0.72);
border-bottom: 1px solid var(--lp-line);
}
.lp-nav-inner {
max-width: 1180px;
margin: 0 auto;
padding: 14px 24px;
display: flex;
align-items: center;
justify-content: space-between;
}
.lp-logo {
display: flex; align-items: center; gap: 10px;
font-weight: 700; font-size: 15px; letter-spacing: -0.01em;
color: var(--lp-ink);
text-decoration: none;
}
.lp-logo-dot {
width: 10px; height: 10px; border-radius: 50%;
background: var(--lp-amber);
box-shadow: 0 0 16px var(--lp-amber-glow);
animation: lp-pulse 1.8s ease-in-out infinite;
}
@keyframes lp-pulse {
0%,100% { transform: scale(1); opacity: 1; }
50% { transform: scale(1.35); opacity: 0.7; }
}
.lp-nav-cta {
display: inline-flex; align-items: center; gap: 8px;
padding: 9px 16px;
font-size: 13px; font-weight: 600;
color: #0a0907;
background: var(--lp-amber);
border-radius: 999px;
text-decoration: none;
transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.lp-nav-cta:hover {
transform: translateY(-1px);
box-shadow: 0 10px 30px var(--lp-amber-glow);
}
/* ---------- Hero ---------- */
.lp-hero {
min-height: calc(100vh - 60px);
display: flex;
flex-direction: column;
justify-content: center;
padding: 80px 0 100px;
text-align: center;
}
.lp-live-badge {
display: inline-flex; align-items: center; gap: 8px;
margin: 0 auto 28px;
padding: 7px 14px 7px 10px;
font-size: 12px; font-weight: 600;
color: var(--lp-ink-2);
background: rgba(239, 68, 68, 0.1);
border: 1px solid rgba(239, 68, 68, 0.25);
border-radius: 999px;
letter-spacing: 0.04em;
text-transform: uppercase;
animation: lp-fade-up 0.7s ease both;
}
.lp-live-dot {
width: 8px; height: 8px; border-radius: 50%;
background: var(--lp-red);
box-shadow: 0 0 0 0 rgba(239,68,68,0.7);
animation: lp-ping 1.4s infinite;
}
@keyframes lp-ping {
0% { box-shadow: 0 0 0 0 rgba(239,68,68,0.7); }
70% { box-shadow: 0 0 0 10px rgba(239,68,68,0); }
100% { box-shadow: 0 0 0 0 rgba(239,68,68,0); }
}
.lp-h1 {
font-size: clamp(40px, 7.2vw, 88px);
font-weight: 800;
line-height: 1.02;
letter-spacing: -0.035em;
margin: 0 0 22px;
animation: lp-fade-up 0.9s 0.1s ease both;
}
.lp-h1 .grad {
background: linear-gradient(95deg, #ffe2a8 0%, var(--lp-amber) 45%, #ff7a3d 100%);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
filter: drop-shadow(0 0 40px rgba(245,165,36,0.25));
}
.lp-h1 .strike {
position: relative;
display: inline-block;
}
.lp-h1 .strike::after {
content: '';
position: absolute;
left: -4px; right: -4px;
bottom: 0.18em;
height: 0.12em;
background: linear-gradient(90deg, var(--lp-amber), #ff7a3d);
transform-origin: left;
animation: lp-strike-in 1s 0.8s cubic-bezier(.2,.8,.2,1) both;
}
@keyframes lp-strike-in {
from { transform: scaleX(0); }
to { transform: scaleX(1); }
}
.lp-sub {
max-width: 640px;
margin: 0 auto 40px;
font-size: clamp(16px, 1.8vw, 20px);
line-height: 1.55;
color: var(--lp-ink-2);
animation: lp-fade-up 0.9s 0.25s ease both;
}
.lp-ctas {
display: flex; gap: 14px;
justify-content: center;
flex-wrap: wrap;
animation: lp-fade-up 0.9s 0.4s ease both;
}
.lp-btn {
display: inline-flex; align-items: center; gap: 10px;
padding: 16px 28px;
font-size: 16px; font-weight: 600;
border-radius: 14px;
text-decoration: none;
transition: all 0.18s ease;
cursor: pointer; border: none;
}
/* Primary CTA — kept static on purpose. Previously the button had a magnetic
pull, a shimmer sweep, a hover lift, and a glow expansion stacked together.
Multiple users found it busy/distracting, so the button now just sits with
a fixed amber gradient + soft glow. Don't add hover transforms here. */
.lp-btn-primary {
color: #0a0907;
background: linear-gradient(135deg, #ffd88a, var(--lp-amber) 55%, #ff7a3d);
box-shadow: 0 10px 40px rgba(245,165,36,0.35), inset 0 1px 0 rgba(255,255,255,0.4);
position: relative;
}
.lp-btn-primary:hover {
/* Intentionally no transform / box-shadow change — see comment above. */
filter: brightness(1.05);
}
.lp-btn-secondary {
color: var(--lp-ink);
background: var(--lp-surface);
border: 1px solid var(--lp-line-2);
}
.lp-btn-secondary:hover {
background: var(--lp-surface-2);
border-color: rgba(255,255,255,0.25);
}
.lp-arrow {
display: inline-block;
transition: transform 0.2s ease;
}
.lp-btn:hover .lp-arrow { transform: translateX(4px); }
/* ---------- Ticker strip ---------- */
.lp-ticker {
margin-top: 64px;
padding: 18px 0;
border-top: 1px solid var(--lp-line);
border-bottom: 1px solid var(--lp-line);
overflow: hidden;
position: relative;
animation: lp-fade-up 1s 0.55s ease both;
}
.lp-ticker-track {
display: flex;
gap: 48px;
width: max-content;
animation: lp-scroll 40s linear infinite;
white-space: nowrap;
}
@keyframes lp-scroll {
to { transform: translateX(-50%); }
}
.lp-ticker-item {
display: inline-flex; align-items: center; gap: 10px;
font-family: 'Geist Mono', ui-monospace, monospace;
font-size: 13px;
color: var(--lp-ink-3);
}
.lp-ticker-item .tag {
font-size: 10px;
padding: 2px 7px;
border-radius: 4px;
font-weight: 600;
letter-spacing: 0.05em;
}
.lp-ticker-item .tag.buy { background: rgba(34,197,94,0.12); color: var(--lp-green); }
.lp-ticker-item .tag.sell { background: rgba(239,68,68,0.12); color: var(--lp-red); }
.lp-ticker-item .tag.hold { background: rgba(255,255,255,0.06); color: var(--lp-ink-3); }
/* ---------- Section ---------- */
.lp-section {
padding: 80px 0;
position: relative;
}
.lp-eyebrow {
font-size: 12px;
font-weight: 600;
letter-spacing: 0.16em;
text-transform: uppercase;
color: var(--lp-amber);
margin-bottom: 16px;
}
.lp-h2 {
font-size: clamp(30px, 4.5vw, 52px);
font-weight: 700;
letter-spacing: -0.025em;
line-height: 1.08;
margin: 0 0 20px;
}
.lp-lead {
max-width: 600px;
font-size: 17px;
line-height: 1.55;
color: var(--lp-ink-2);
margin: 0 0 40px;
}
/* ---------- Scroll reveal ---------- */
.lp-reveal {
opacity: 0;
transform: translateY(28px);
transition: opacity 0.8s ease, transform 0.8s cubic-bezier(.2,.8,.2,1);
}
.lp-reveal.in {
opacity: 1;
transform: translateY(0);
}
/* ---------- How it works ---------- */
.lp-steps {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
}
@media (max-width: 880px) {
.lp-steps { grid-template-columns: 1fr; }
}
.lp-step {
position: relative;
padding: 36px 28px 32px;
background: linear-gradient(180deg, rgba(255,255,255,0.035), rgba(255,255,255,0.01));
border: 1px solid var(--lp-line);
border-radius: 20px;
transition: transform 0.25s ease, border-color 0.25s ease;
overflow: hidden;
}
.lp-step::before {
content: '';
position: absolute;
inset: 0;
border-radius: inherit;
padding: 1px;
background: linear-gradient(135deg, rgba(245,165,36,0.35), transparent 60%);
-webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
-webkit-mask-composite: xor;
mask-composite: exclude;
opacity: 0;
transition: opacity 0.3s ease;
}
.lp-step:hover {
transform: translateY(-4px);
border-color: rgba(245,165,36,0.25);
}
.lp-step:hover::before { opacity: 1; }
.lp-step-num {
font-family: 'Geist Mono', monospace;
font-size: 12px;
color: var(--lp-ink-4);
letter-spacing: 0.1em;
margin-bottom: 20px;
}
.lp-step-icon {
width: 52px; height: 52px;
border-radius: 14px;
display: grid; place-items: center;
margin-bottom: 22px;
background: linear-gradient(135deg, rgba(245,165,36,0.2), rgba(245,165,36,0.05));
border: 1px solid rgba(245,165,36,0.2);
color: var(--lp-amber);
}
.lp-step h3 {
font-size: 20px;
font-weight: 600;
margin: 0 0 10px;
letter-spacing: -0.01em;
}
.lp-step p {
font-size: 15px;
line-height: 1.6;
color: var(--lp-ink-3);
margin: 0;
}
/* ---------- Features grid ---------- */
.lp-features {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16px;
}
@media (max-width: 880px) { .lp-features { grid-template-columns: 1fr 1fr; } }
@media (max-width: 560px) { .lp-features { grid-template-columns: 1fr; } }
.lp-feat {
padding: 26px 24px;
background: var(--lp-surface);
border: 1px solid var(--lp-line);
border-radius: 16px;
transition: all 0.2s ease;
}
.lp-feat:hover {
background: var(--lp-surface-2);
border-color: var(--lp-line-2);
transform: translateY(-2px);
}
.lp-feat-icon {
width: 36px; height: 36px;
border-radius: 10px;
display: grid; place-items: center;
margin-bottom: 16px;
background: rgba(245,165,36,0.1);
color: var(--lp-amber);
}
.lp-feat h4 {
font-size: 16px;
font-weight: 600;
margin: 0 0 8px;
letter-spacing: -0.01em;
}
.lp-feat p {
font-size: 14px;
line-height: 1.55;
color: var(--lp-ink-3);
margin: 0;
}
/* ---------- Demo card ---------- */
.lp-demo {
margin-top: 48px;
padding: 4px;
background: linear-gradient(135deg, rgba(245,165,36,0.5), rgba(239,68,68,0.4), rgba(167,139,250,0.4));
border-radius: 24px;
box-shadow: 0 30px 80px rgba(0,0,0,0.5), 0 0 0 1px rgba(255,255,255,0.05);
}
.lp-demo-inner {
background: #0f0d0a;
border-radius: 20px;
padding: 36px 32px;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 40px;
align-items: center;
}
@media (max-width: 880px) {
.lp-demo-inner { grid-template-columns: 1fr; gap: 24px; }
}
.lp-demo-post {
background: rgba(255,255,255,0.03);
border: 1px solid var(--lp-line);
border-radius: 14px;
padding: 20px;
}
.lp-demo-handle {
display: flex; align-items: center; gap: 10px;
margin-bottom: 14px;
}
.lp-demo-avatar {
width: 40px; height: 40px; border-radius: 50%;
background: linear-gradient(135deg, #ff9a4d, #e6571a);
display: grid; place-items: center;
font-weight: 700; color: #fff;
font-size: 16px;
}
.lp-demo-name {
font-weight: 600;
font-size: 14px;
}
.lp-demo-handle-at {
font-size: 12px;
color: var(--lp-ink-3);
}
.lp-demo-text {
font-size: 15px;
line-height: 1.5;
color: var(--lp-ink-2);
margin: 0 0 12px;
}
.lp-demo-meta {
font-size: 12px;
color: var(--lp-ink-4);
font-family: 'Geist Mono', monospace;
}
.lp-arrow-flow {
display: flex; align-items: center; justify-content: center;
gap: 8px;
font-size: 12px;
color: var(--lp-amber);
margin: 16px 0;
font-family: 'Geist Mono', monospace;
letter-spacing: 0.05em;
}
.lp-arrow-flow-line {
flex: 1;
height: 1px;
background: linear-gradient(90deg, transparent, var(--lp-amber), transparent);
}
.lp-demo-signal {
display: flex; flex-direction: column; gap: 14px;
}
.lp-signal-row {
display: flex; align-items: center; justify-content: space-between;
padding: 10px 14px;
background: rgba(255,255,255,0.02);
border: 1px solid var(--lp-line);
border-radius: 10px;
}
.lp-signal-row .lbl {
font-size: 12px;
color: var(--lp-ink-3);
text-transform: uppercase;
letter-spacing: 0.06em;
}
.lp-signal-row .val {
font-family: 'Geist Mono', monospace;
font-size: 14px;
font-weight: 600;
}
.lp-signal-row .val.buy { color: var(--lp-green); }
.lp-signal-row .val.short { color: var(--lp-red); }
/* ---------- Final CTA ---------- */
.lp-cta-final {
padding: 120px 0;
text-align: center;
position: relative;
}
.lp-cta-final::before {
content: '';
position: absolute;
left: 50%; top: 50%;
width: 700px; height: 700px;
background: radial-gradient(circle, rgba(245,165,36,0.18), transparent 60%);
transform: translate(-50%, -50%);
filter: blur(80px);
pointer-events: none;
z-index: -1;
}
/* ---------- Footer ---------- */
.lp-foot {
border-top: 1px solid var(--lp-line);
padding: 28px 24px 40px;
font-size: 12px;
color: var(--lp-ink-4);
text-align: center;
position: relative;
z-index: 1;
}
.lp-foot a {
color: var(--lp-ink-3);
text-decoration: none;
margin: 0 10px;
}
.lp-foot a:hover { color: var(--lp-ink-2); }
.lp-disclaimer {
max-width: 680px;
margin: 0 auto 16px;
line-height: 1.5;
color: var(--lp-ink-4);
}
/* ---------- Shared animations ---------- */
@keyframes lp-fade-up {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
/* ---------- Stat strip ---------- */
.lp-stats {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 0;
margin-top: 72px;
border: 1px solid var(--lp-line);
border-radius: 20px;
overflow: hidden;
background: linear-gradient(180deg, rgba(255,255,255,0.03), rgba(255,255,255,0.005));
backdrop-filter: blur(12px);
}
@media (max-width: 880px) { .lp-stats { grid-template-columns: 1fr 1fr; } }
@media (max-width: 480px) { .lp-stats { grid-template-columns: 1fr; } }
.lp-stat {
padding: 26px 22px;
border-right: 1px solid var(--lp-line);
position: relative;
}
.lp-stat:last-child { border-right: none; }
@media (max-width: 880px) {
.lp-stat:nth-child(2n) { border-right: none; }
.lp-stat:nth-child(-n+2) { border-bottom: 1px solid var(--lp-line); }
}
.lp-stat-val {
font-family: 'Geist', sans-serif;
font-size: 34px;
font-weight: 700;
letter-spacing: -0.02em;
line-height: 1;
color: var(--lp-ink);
margin-bottom: 8px;
}
.lp-stat-val .suffix {
font-size: 18px;
color: var(--lp-amber);
margin-left: 2px;
}
.lp-stat-lbl {
font-size: 12px;
color: var(--lp-ink-3);
text-transform: uppercase;
letter-spacing: 0.08em;
}
.lp-stat-sub {
font-size: 11px;
color: var(--lp-ink-4);
margin-top: 4px;
}
/* ---------- Post type cards ---------- */
.lp-posts {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 16px;
margin-top: 48px;
}
@media (max-width: 760px) { .lp-posts { grid-template-columns: 1fr; } }
.lp-post-card {
padding: 24px;
background: linear-gradient(180deg, rgba(255,255,255,0.04), rgba(255,255,255,0.01));
border: 1px solid var(--lp-line);
border-radius: 16px;
display: flex;
gap: 18px;
align-items: flex-start;
transition: all 0.25s ease;
}
.lp-post-card:hover {
border-color: var(--lp-line-2);
transform: translateY(-2px);
}
.lp-post-kind {
width: 44px; height: 44px; flex-shrink: 0;
border-radius: 12px;
display: grid; place-items: center;
font-size: 11px; font-weight: 700;
letter-spacing: 0.06em;
font-family: 'Geist Mono', monospace;
}
.lp-post-kind.long { background: rgba(34,197,94,0.12); color: var(--lp-green); border: 1px solid rgba(34,197,94,0.25); }
.lp-post-kind.short { background: rgba(239,68,68,0.12); color: var(--lp-red); border: 1px solid rgba(239,68,68,0.25); }
.lp-post-kind.hold { background: rgba(255,255,255,0.05); color: var(--lp-ink-3); border: 1px solid var(--lp-line); }
.lp-post-kind.noise { background: rgba(167,139,250,0.12); color: var(--lp-violet); border: 1px solid rgba(167,139,250,0.25); }
.lp-post-body h4 {
font-size: 15px; font-weight: 600; margin: 0 0 6px;
}
.lp-post-quote {
font-size: 14px; line-height: 1.5;
color: var(--lp-ink-2);
font-style: italic;
margin: 0 0 10px;
padding-left: 10px;
border-left: 2px solid var(--lp-line-2);
}
.lp-post-result {
font-size: 12px;
color: var(--lp-ink-3);
font-family: 'Geist Mono', monospace;
}
/* ---------- Dashboard preview (mock) ---------- */
.lp-preview {
margin-top: 56px;
background: linear-gradient(135deg, rgba(245,165,36,0.3), rgba(239,68,68,0.3), rgba(167,139,250,0.3));
padding: 3px;
border-radius: 24px;
box-shadow: 0 40px 120px rgba(0,0,0,0.6);
position: relative;
}
.lp-preview::before {
content: '';
position: absolute;
inset: -20px;
background: radial-gradient(ellipse at center, rgba(245,165,36,0.15), transparent 60%);
filter: blur(40px);
z-index: -1;
}
.lp-preview-inner {
background: #0c0b08;
border-radius: 21px;
overflow: hidden;
}
.lp-preview-bar {
display: flex; align-items: center; gap: 8px;
padding: 12px 18px;
border-bottom: 1px solid var(--lp-line);
background: rgba(255,255,255,0.02);
}
.lp-preview-dots {
display: flex; gap: 6px;
}
.lp-preview-dots span {
width: 11px; height: 11px; border-radius: 50%;
background: rgba(255,255,255,0.15);
}
.lp-preview-url {
flex: 1;
padding: 5px 12px;
font-family: 'Geist Mono', monospace;
font-size: 12px;
color: var(--lp-ink-3);
background: rgba(255,255,255,0.04);
border-radius: 6px;
margin-left: 10px;
text-align: center;
}
.lp-preview-body {
display: grid;
grid-template-columns: 1.2fr 1fr;
gap: 0;
min-height: 420px;
}
@media (max-width: 760px) {
.lp-preview-body { grid-template-columns: 1fr; }
}
.lp-preview-col {
padding: 22px;
border-right: 1px solid var(--lp-line);
}
.lp-preview-col:last-child { border-right: none; }
.lp-preview-col-head {
display: flex; align-items: center; justify-content: space-between;
margin-bottom: 14px;
}
.lp-preview-col-head h5 {
font-size: 13px; margin: 0;
color: var(--lp-ink-2);
letter-spacing: -0.01em;
}
.lp-preview-live {
display: inline-flex; align-items: center; gap: 6px;
font-size: 10px; font-weight: 600;
color: var(--lp-green);
letter-spacing: 0.06em; text-transform: uppercase;
}
.lp-preview-live::before {
content: ''; width: 6px; height: 6px; border-radius: 50%;
background: var(--lp-green);
box-shadow: 0 0 0 0 rgba(34,197,94,0.7);
animation: lp-ping 1.6s infinite;
}
.lp-preview-item {
padding: 12px 0;
border-bottom: 1px solid var(--lp-line);
font-size: 13px;
}
.lp-preview-item:last-child { border-bottom: none; }
.lp-preview-item-head {
display: flex; justify-content: space-between; align-items: baseline;
margin-bottom: 4px;
}
.lp-preview-item-handle {
color: var(--lp-ink-3); font-size: 12px;
}
.lp-preview-item-time {
color: var(--lp-ink-4); font-family: 'Geist Mono', monospace; font-size: 11px;
}
.lp-preview-item-text {
color: var(--lp-ink-2);
margin: 0 0 8px;
line-height: 1.45;
font-size: 13px;
}
.lp-preview-item-tags {
display: flex; gap: 6px; flex-wrap: wrap;
}
.lp-preview-chip {
font-size: 10px;
padding: 2px 7px;
border-radius: 4px;
font-family: 'Geist Mono', monospace;
font-weight: 600;
letter-spacing: 0.05em;
}
.lp-preview-chip.buy { background: rgba(34,197,94,0.12); color: var(--lp-green); }
.lp-preview-chip.short { background: rgba(239,68,68,0.12); color: var(--lp-red); }
.lp-preview-chip.hold { background: rgba(255,255,255,0.05); color: var(--lp-ink-3); }
.lp-preview-chip.asset { background: rgba(245,165,36,0.12); color: var(--lp-amber); }
.lp-preview-chip.conf { background: rgba(167,139,250,0.12); color: var(--lp-violet); }
.lp-preview-kpis {
display: grid; grid-template-columns: 1fr 1fr; gap: 10px;
margin-bottom: 16px;
}
.lp-kpi-box {
padding: 12px;
background: rgba(255,255,255,0.02);
border: 1px solid var(--lp-line);
border-radius: 10px;
}
.lp-kpi-box .v {
font-size: 20px; font-weight: 700; letter-spacing: -0.02em;
color: var(--lp-ink);
}
.lp-kpi-box .l {
font-size: 11px; color: var(--lp-ink-3);
text-transform: uppercase; letter-spacing: 0.06em;
margin-top: 2px;
}
.lp-preview-trade {
padding: 10px 12px;
background: rgba(255,255,255,0.02);
border: 1px solid var(--lp-line);
border-radius: 8px;
margin-bottom: 8px;
display: flex; justify-content: space-between; align-items: center;
font-family: 'Geist Mono', monospace;
font-size: 12px;
}
.lp-preview-trade .pair {
color: var(--lp-ink-2); font-weight: 600;
}
.lp-preview-trade .side.long { color: var(--lp-green); }
.lp-preview-trade .side.short { color: var(--lp-red); }
.lp-preview-trade .status {
color: var(--lp-amber);
font-size: 10px;
text-transform: uppercase;
letter-spacing: 0.06em;
}
/* ---------- Flow timeline ---------- */
.lp-flow {
display: grid;
grid-template-columns: repeat(5, 1fr);
gap: 0;
margin-top: 48px;
padding: 32px 16px;
background: linear-gradient(180deg, rgba(255,255,255,0.03), rgba(255,255,255,0.005));
border: 1px solid var(--lp-line);
border-radius: 20px;
position: relative;
}
@media (max-width: 880px) { .lp-flow { grid-template-columns: 1fr; gap: 20px; } }
.lp-flow-step {
padding: 0 16px;
text-align: center;
position: relative;
}
.lp-flow-step:not(:last-child)::after {
content: '→';
position: absolute;
right: -8px;
top: 28px;
font-size: 20px;
color: var(--lp-amber);
opacity: 0.6;
}
@media (max-width: 880px) {
.lp-flow-step:not(:last-child)::after { display: none; }
}
.lp-flow-badge {
display: inline-flex; align-items: center; justify-content: center;
width: 56px; height: 56px;
border-radius: 16px;
background: linear-gradient(135deg, rgba(245,165,36,0.2), rgba(245,165,36,0.05));
border: 1px solid rgba(245,165,36,0.3);
color: var(--lp-amber);
font-weight: 700; font-size: 18px;
font-family: 'Geist Mono', monospace;
margin-bottom: 14px;
position: relative;
}
.lp-flow-badge::before {
content: '';
position: absolute; inset: -6px;
border-radius: 20px;
background: rgba(245,165,36,0.1);
filter: blur(10px);
z-index: -1;
}
.lp-flow-step h5 {
font-size: 14px; font-weight: 600; margin: 0 0 6px;
}
.lp-flow-step p {
font-size: 12px; line-height: 1.5;
color: var(--lp-ink-3); margin: 0;
}
.lp-flow-time {
display: inline-block;
margin-top: 8px;
font-size: 11px;
font-family: 'Geist Mono', monospace;
color: var(--lp-amber);
background: rgba(245,165,36,0.08);
padding: 2px 8px;
border-radius: 4px;
}
/* ---------- FAQ ---------- */
.lp-faq {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 14px;
margin-top: 40px;
}
@media (max-width: 760px) { .lp-faq { grid-template-columns: 1fr; } }
.lp-faq-item {
padding: 22px 24px;
background: var(--lp-surface);
border: 1px solid var(--lp-line);
border-radius: 14px;
transition: all 0.2s ease;
}
.lp-faq-item:hover {
background: var(--lp-surface-2);
border-color: var(--lp-line-2);
}
.lp-faq-q {
display: flex; align-items: flex-start; gap: 10px;
font-size: 15px; font-weight: 600;
margin: 0 0 10px;
color: var(--lp-ink);
letter-spacing: -0.01em;
}
.lp-faq-q::before {
content: 'Q';
flex-shrink: 0;
width: 22px; height: 22px;
font-size: 11px;
display: grid; place-items: center;
background: var(--lp-amber);
color: #0a0907;
border-radius: 6px;
font-weight: 700;
margin-top: 1px;
}
.lp-faq-a {
font-size: 14px;
line-height: 1.6;
color: var(--lp-ink-3);
margin: 0;
padding-left: 32px;
}
/* ---------- Safety strip ---------- */
.lp-safety-strip {
display: flex; flex-wrap: wrap; gap: 8px;
justify-content: center;
margin-top: 36px;
}
.lp-safety-chip {
display: inline-flex; align-items: center; gap: 6px;
padding: 8px 14px;
background: rgba(255,255,255,0.04);
border: 1px solid var(--lp-line);
border-radius: 999px;
font-size: 12px;
color: var(--lp-ink-2);
}
.lp-safety-chip svg { color: var(--lp-amber); }
/* ---------- Terminal block (live feed) ---------- */
.lp-term {
position: relative;
margin-top: 56px;
border-radius: 18px;
background:
linear-gradient(180deg, rgba(245,165,36,0.08), transparent 50%),
#07060a;
border: 1px solid var(--lp-line-2);
overflow: hidden;
box-shadow:
0 40px 120px rgba(0,0,0,0.6),
0 0 0 1px rgba(245,165,36,0.08),
inset 0 1px 0 rgba(255,255,255,0.03);
}
.lp-term::before {
/* Glow halo */
content: '';
position: absolute;
inset: -40px;
background: radial-gradient(ellipse at 20% 0%, rgba(245,165,36,0.22), transparent 55%);
filter: blur(30px);
pointer-events: none;
z-index: 0;
}
.lp-term::after {
/* Subtle scanlines */
content: '';
position: absolute;
inset: 0;
background: repeating-linear-gradient(
0deg,
rgba(255,255,255,0.018) 0px,
rgba(255,255,255,0.018) 1px,
transparent 1px,
transparent 3px
);
pointer-events: none;
z-index: 1;
mix-blend-mode: overlay;
}
.lp-term > * { position: relative; z-index: 2; }
.lp-term-head {
display: flex;
align-items: center;
gap: 12px;
padding: 12px 18px;
border-bottom: 1px solid rgba(255,255,255,0.06);
background: rgba(255,255,255,0.015);
font-family: 'Geist Mono', ui-monospace, monospace;
font-size: 11px;
color: var(--lp-ink-3);
letter-spacing: 0.04em;
}
.lp-term-head .dot {
width: 8px; height: 8px; border-radius: 50%;
background: var(--lp-green);
box-shadow: 0 0 10px var(--lp-green), 0 0 0 0 rgba(34,197,94,0.6);
animation: lp-ping 1.6s infinite;
}
.lp-term-head .sep { opacity: 0.35; }
.lp-term-head .meta-live { color: var(--lp-green); }
.lp-term-head .meta-amber { color: var(--lp-amber); }
.lp-term-head .spacer { flex: 1; }
.lp-term-body {
padding: 14px 0 22px;
font-family: 'Geist Mono', ui-monospace, monospace;
font-size: 13.5px;
line-height: 1.55;
color: var(--lp-ink-2);
}
.lp-term-row {
padding: 14px 22px;
border-bottom: 1px dashed rgba(255,255,255,0.05);
opacity: 0;
transform: translateY(8px);
animation: lp-term-in 0.5s ease forwards;
}
.lp-term-row:last-of-type { border-bottom: none; }
@keyframes lp-term-in {
to { opacity: 1; transform: translateY(0); }
}
.lp-term-row.new {
background: linear-gradient(90deg, rgba(245,165,36,0.05), transparent 40%);
border-left: 2px solid var(--lp-amber);
padding-left: 20px;
position: relative;
}
.lp-term-row.new::before {
content: 'NEW';
position: absolute;
top: 14px; right: 22px;
font-size: 10px;
padding: 2px 7px;
border-radius: 4px;
font-weight: 700;
letter-spacing: 0.08em;
background: var(--lp-amber);
color: #0a0907;
animation: lp-pulse-soft 1.8s ease-in-out infinite;
}
@keyframes lp-pulse-soft {
0%, 100% { opacity: 1; }
50% { opacity: 0.55; }
}
.lp-term-meta {
display: flex; gap: 14px; align-items: center;
font-size: 11px;
color: var(--lp-ink-4);
margin-bottom: 6px;
letter-spacing: 0.02em;
}
.lp-term-meta .handle { color: var(--lp-ink-3); }
.lp-term-meta .ts { color: var(--lp-ink-4); }
.lp-term-quote {
color: var(--lp-ink);
margin: 4px 0 10px;
font-family: 'Geist', ui-sans-serif, sans-serif;
font-size: 15px;
line-height: 1.45;
font-weight: 400;
letter-spacing: -0.005em;
}
.lp-term-quote::before {
content: '> ';
color: var(--lp-amber);
opacity: 0.7;
}
.lp-term-verdict {
display: flex;
flex-wrap: wrap;
gap: 8px 18px;
font-size: 12px;
color: var(--lp-ink-3);
}
.lp-term-verdict .seg { display: inline-flex; gap: 6px; align-items: center; }
.lp-term-verdict .k { color: var(--lp-ink-4); }
.lp-term-verdict .v { color: var(--lp-ink-2); font-weight: 500; }
.lp-term-verdict .v.long { color: var(--lp-green); }
.lp-term-verdict .v.short { color: var(--lp-red); }
.lp-term-verdict .v.skip { color: var(--lp-ink-3); }
.lp-term-verdict .v.amber { color: var(--lp-amber); }
.lp-term-verdict .bar {
display: inline-block;
width: 60px; height: 5px;
border-radius: 999px;
background: rgba(255,255,255,0.08);
position: relative;
overflow: hidden;
}
.lp-term-verdict .bar-fill {
position: absolute; inset: 0;
background: linear-gradient(90deg, var(--lp-amber), #ff7a3d);
border-radius: inherit;
transform-origin: left;
animation: lp-bar-in 1s 0.3s cubic-bezier(.2,.8,.2,1) both;
}
@keyframes lp-bar-in { from { transform: scaleX(0); } }
.lp-term-cursor {
display: inline-block;
width: 8px; height: 15px;
background: var(--lp-amber);
vertical-align: -2px;
margin-left: 2px;
animation: lp-blink 1s steps(2) infinite;
}
@keyframes lp-blink { 50% { opacity: 0; } }
.lp-term-foot {
display: flex; align-items: center; justify-content: space-between;
padding: 12px 22px;
border-top: 1px solid rgba(255,255,255,0.05);
background: rgba(0,0,0,0.25);
font-family: 'Geist Mono', monospace;
font-size: 11px;
color: var(--lp-ink-4);
}
.lp-term-foot .tail { color: var(--lp-ink-3); }
/* Stagger delays so rows enter one after another */
.lp-term-row:nth-child(1) { animation-delay: 0.05s; }
.lp-term-row:nth-child(2) { animation-delay: 0.25s; }
.lp-term-row:nth-child(3) { animation-delay: 0.45s; }
.lp-term-row:nth-child(4) { animation-delay: 0.65s; }
.lp-term-row:nth-child(5) { animation-delay: 0.85s; }
/* ---------- Condensed features ---------- */
.lp-why {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 14px;
margin-top: 40px;
}
@media (max-width: 880px) { .lp-why { grid-template-columns: 1fr 1fr; } }
@media (max-width: 520px) { .lp-why { grid-template-columns: 1fr; } }
.lp-why-card {
padding: 24px 22px;
border: 1px solid var(--lp-line);
border-radius: 14px;
background: linear-gradient(180deg, rgba(255,255,255,0.035), rgba(255,255,255,0.008));
transition: all 0.2s ease;
}
.lp-why-card:hover {
border-color: rgba(245,165,36,0.25);
transform: translateY(-3px);
}
.lp-why-card .num {
font-family: 'Geist Mono', monospace;
font-size: 11px;
color: var(--lp-amber);
letter-spacing: 0.1em;
margin-bottom: 12px;
}
.lp-why-card h4 {
font-size: 16px; font-weight: 600; margin: 0 0 8px;
letter-spacing: -0.01em;
}
.lp-why-card p {
font-size: 13.5px; line-height: 1.55;
color: var(--lp-ink-3); margin: 0;
}
/* ---------- Stat strip (kept) ---------- */
.lp-stats {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 0;
margin-top: 48px;
border: 1px solid var(--lp-line);
border-radius: 20px;
overflow: hidden;
background: linear-gradient(180deg, rgba(255,255,255,0.03), rgba(255,255,255,0.005));
backdrop-filter: blur(12px);
}
@media (max-width: 880px) { .lp-stats { grid-template-columns: 1fr 1fr; } }
@media (max-width: 480px) { .lp-stats { grid-template-columns: 1fr; } }
.lp-stat {
padding: 24px 22px;
border-right: 1px solid var(--lp-line);
}
.lp-stat:last-child { border-right: none; }
@media (max-width: 880px) {
.lp-stat:nth-child(2n) { border-right: none; }
.lp-stat:nth-child(-n+2) { border-bottom: 1px solid var(--lp-line); }
}
.lp-stat-val {
font-family: 'Geist', sans-serif;
font-size: 30px; font-weight: 700; letter-spacing: -0.02em;
line-height: 1; margin-bottom: 8px;
}
.lp-stat-val .suffix { font-size: 16px; color: var(--lp-amber); margin-left: 2px; }
.lp-stat-lbl {
font-size: 11px; color: var(--lp-ink-3);
text-transform: uppercase; letter-spacing: 0.08em;
}
.lp-stat-sub {
font-size: 11px; color: var(--lp-ink-4); margin-top: 4px;
}
/* ---------- Press / headlines ---------- */
.lp-press {
margin-top: 40px;
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 14px;
}
@media (max-width: 880px) { .lp-press { grid-template-columns: 1fr 1fr; } }
@media (max-width: 520px) { .lp-press { grid-template-columns: 1fr; } }
/* Base card (small) */
.lp-news {
padding: 20px 20px 18px;
border: 1px solid var(--lp-line);
border-radius: 14px;
background: linear-gradient(180deg, rgba(255,255,255,0.03), rgba(255,255,255,0.005));
text-decoration: none;
color: inherit;
display: flex;
flex-direction: column;
gap: 12px;
transition: all 0.22s ease;
position: relative;
overflow: hidden;
min-height: 200px;
}
.lp-news:hover {
transform: translateY(-3px);
border-color: rgba(245,165,36,0.3);
background: linear-gradient(180deg, rgba(245,165,36,0.05), rgba(255,255,255,0.008));
}
.lp-news-head {
display: flex; align-items: center; justify-content: space-between;
font-family: 'Geist Mono', monospace;
font-size: 10px;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--lp-ink-3);
}
.lp-news-outlet { color: var(--lp-amber); font-weight: 600; }
.lp-news-date { color: var(--lp-ink-4); white-space: nowrap; }
.lp-news-headline {
font-size: 15px;
font-weight: 600;
line-height: 1.38;
margin: 0;
letter-spacing: -0.01em;
color: var(--lp-ink);
}
.lp-news-stat {
display: flex; align-items: baseline; gap: 10px;
margin-top: auto;
padding-top: 12px;
border-top: 1px dashed rgba(255,255,255,0.08);
}
.lp-news-stat .n {
font-family: 'Geist', sans-serif;
font-size: 24px; font-weight: 700; letter-spacing: -0.02em;
line-height: 1;
color: var(--lp-amber);
}
.lp-news-stat .n.up { color: var(--lp-green); }
.lp-news-stat .n.down { color: var(--lp-red); }
.lp-news-stat .l {
font-size: 10.5px;
color: var(--lp-ink-3);
text-transform: uppercase;
letter-spacing: 0.06em;
line-height: 1.35;
}
.lp-news-arrow {
position: absolute;
top: 20px; right: 20px;
color: var(--lp-ink-4);
font-size: 14px;
transition: transform 0.2s ease, color 0.2s ease;
}
.lp-news:hover .lp-news-arrow {
color: var(--lp-amber);
transform: translate(3px, -3px);
}
/* Featured (big) — full-width, horizontal split */
.lp-news-big {
grid-column: 1 / -1;
flex-direction: row;
align-items: stretch;
gap: 0;
padding: 0;
min-height: 200px;
background:
linear-gradient(135deg, rgba(34,197,94,0.08), transparent 50%),
linear-gradient(180deg, rgba(255,255,255,0.04), rgba(255,255,255,0.01));
border-color: rgba(34,197,94,0.22);
position: relative;
}
.lp-news-big::before {
content: '';
position: absolute;
inset: -2px;
border-radius: 16px;
background: radial-gradient(ellipse at 10% 50%, rgba(34,197,94,0.22), transparent 55%);
filter: blur(30px);
pointer-events: none;
z-index: -1;
}
.lp-news-big:hover {
border-color: rgba(34,197,94,0.4);
background:
linear-gradient(135deg, rgba(34,197,94,0.12), transparent 50%),
linear-gradient(180deg, rgba(255,255,255,0.05), rgba(255,255,255,0.012));
}
.lp-news-big-figure {
flex: 0 0 36%;
padding: 30px 30px 28px;
display: flex;
flex-direction: column;
justify-content: center;
gap: 6px;
border-right: 1px solid rgba(255,255,255,0.08);
background:
radial-gradient(ellipse at center, rgba(34,197,94,0.06), transparent 70%);
position: relative;
}
.lp-news-big-figure .tag {
display: inline-flex; align-items: center; gap: 6px;
font-family: 'Geist Mono', monospace;
font-size: 10px; font-weight: 700;
letter-spacing: 0.12em;
color: var(--lp-green);
margin-bottom: 10px;
text-transform: uppercase;
}
.lp-news-big-figure .tag::before {
content: '';
width: 6px; height: 6px; border-radius: 50%;
background: var(--lp-green);
box-shadow: 0 0 10px var(--lp-green), 0 0 0 0 rgba(34,197,94,0.6);
animation: lp-ping 1.6s infinite;
}
.lp-news-big-figure .num {
font-family: 'Geist', sans-serif;
font-size: clamp(44px, 6vw, 66px);
font-weight: 800;
letter-spacing: -0.035em;
line-height: 0.95;
color: var(--lp-green);
filter: drop-shadow(0 0 24px rgba(34,197,94,0.28));
}
.lp-news-big-figure .subnum {
font-family: 'Geist Mono', monospace;
font-size: 11.5px;
color: var(--lp-ink-3);
letter-spacing: 0.05em;
text-transform: uppercase;
margin-top: 8px;
line-height: 1.5;
}
.lp-news-big-body {
flex: 1;
padding: 30px 36px 28px;
display: flex;
flex-direction: column;
justify-content: center;
gap: 14px;
min-width: 0;
}
.lp-news-big-body .lp-news-headline {
font-size: clamp(20px, 2.1vw, 26px);
line-height: 1.22;
letter-spacing: -0.02em;
font-weight: 600;
}
.lp-news-big-body .lp-news-head {
font-size: 10.5px;
}
@media (max-width: 760px) {
.lp-news-big { flex-direction: column; }
.lp-news-big-figure {
flex: none;
border-right: none;
border-bottom: 1px solid rgba(255,255,255,0.08);
padding: 26px 24px 22px;
}
.lp-news-big-body { padding: 22px 24px 24px; }
}
.lp-press-note {
margin-top: 18px;
text-align: center;
font-size: 12px;
color: var(--lp-ink-4);
font-family: 'Geist Mono', monospace;
}
/* ---------- Small ---------- */
@media (max-width: 560px) {
.lp-section { padding: 80px 0; }
.lp-demo-inner { padding: 24px 20px; }
.lp-term-quote { font-size: 14px; }
.lp-term-row { padding: 12px 16px; }
.lp-term-row.new::before { display: none; }
.lp-news-big .lp-news-headline { font-size: 19px; }
}
/* ===== Mobile polish (≤720px / ≤480px) ===== */
@media (max-width: 720px) {
.lp-wrap { padding: 0 16px; }
.lp-nav-inner { padding: 12px 16px; }
.lp-logo { font-size: 14px; }
.lp-nav-cta { padding: 8px 12px; font-size: 12px; }
.lp-hero {
min-height: auto;
padding: 48px 0 56px;
}
.lp-h1 {
font-size: clamp(30px, 8.4vw, 56px);
margin-bottom: 18px;
}
.lp-sub { margin-bottom: 28px; font-size: 15px; }
.lp-live-badge {
font-size: 10px;
padding: 6px 10px 6px 8px;
margin-bottom: 20px;
max-width: 92%;
text-align: center;
}
.lp-btn { padding: 13px 20px; font-size: 14px; }
.lp-ctas { gap: 10px; }
.lp-ticker { margin-top: 40px; padding: 12px 0; }
.lp-ticker-track { gap: 24px; }
.lp-ticker-item { font-size: 11px; }
.lp-section { padding: 60px 0; }
.lp-h2 { font-size: clamp(24px, 6.4vw, 40px); }
.lp-lead { font-size: 15px; }
.lp-eyebrow { font-size: 11px; }
/* Terminal */
.lp-term { border-radius: 14px; }
.lp-term-head {
padding: 10px 12px;
font-size: 10px;
gap: 6px;
flex-wrap: wrap;
}
.lp-term-head .sep { display: none; }
.lp-term-body { padding: 6px; }
.lp-term-row { padding: 12px 12px; }
.lp-term-meta { font-size: 10.5px; flex-wrap: wrap; gap: 4px; }
.lp-term-quote { font-size: 13.5px; line-height: 1.5; }
.lp-term-verdict { gap: 6px; flex-wrap: wrap; font-size: 10.5px; }
.lp-term-verdict .seg { padding: 4px 8px; }
.lp-term-verdict .bar { width: 48px; }
.lp-term-foot { padding: 10px 12px; font-size: 10px; flex-wrap: wrap; gap: 6px; }
/* Press */
.lp-press { grid-template-columns: 1fr; gap: 12px; }
.lp-news { padding: 18px 16px; }
.lp-news-big { min-height: 0; }
.lp-news-big-figure { padding: 22px 18px 18px; }
.lp-news-big-body { padding: 18px 18px 20px; }
.lp-news-big-figure .num { font-size: clamp(34px, 10vw, 52px); }
.lp-news-headline { font-size: 16px; line-height: 1.4; }
/* Why / stats */
.lp-why { grid-template-columns: 1fr; gap: 12px; }
.lp-stats { grid-template-columns: 1fr 1fr; gap: 12px; }
.lp-stat { padding: 18px 14px; }
.lp-stat-val { font-size: 28px; }
/* Final CTA */
.lp-cta-final { padding: 64px 0 72px; }
}
@media (max-width: 420px) {
.lp-wrap { padding: 0 14px; }
.lp-h1 { font-size: clamp(26px, 9.2vw, 44px); letter-spacing: -0.02em; }
.lp-logo span:last-child { display: none; } /* keep only dot + α */
.lp-ticker-track { gap: 18px; }
.lp-btn { width: 100%; justify-content: center; }
.lp-ctas { flex-direction: column; width: 100%; }
.lp-stats { grid-template-columns: 1fr; }
.lp-press-note { font-size: 11px; }
}
/* Prevent horizontal scroll anywhere on the landing root */
.lp-root { overflow-x: hidden; }
.lp-root img, .lp-root video { max-width: 100%; height: auto; }
/* ============================================================
✨ Premium fx layer (cursor spotlight, noise, scanlines, 3D
tilt cards, scramble text, magnetic buttons, count-up stats)
Added later — appended so existing rules win on conflict.
============================================================ */
/* ── Defaults so layouts don't jump before JS sets the vars ── */
.lp-root {
--mx: 50vw;
--my: 50vh;
}
/* ── 1. Cursor-tracking radial spotlight ──────────────────── */
.lp-spotlight {
position: fixed; inset: 0;
z-index: 0;
pointer-events: none;
background: radial-gradient(
600px circle at var(--mx) var(--my),
rgba(245,165,36,0.10),
rgba(245,165,36,0.04) 30%,
transparent 60%
);
mix-blend-mode: screen;
transition: background 80ms linear;
}
/* ── 2. Film grain (SVG noise data URI, tiny, no asset needed) ── */
.lp-noise {
position: fixed; inset: 0;
z-index: 0;
pointer-events: none;
opacity: 0.06;
mix-blend-mode: overlay;
background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 .8 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");
background-size: 160px 160px;
animation: lp-noise-shift 5s steps(8) infinite;
}
@keyframes lp-noise-shift {
0% { transform: translate(0,0); }
20% { transform: translate(-5%, 3%); }
40% { transform: translate(3%, -5%); }
60% { transform: translate(-3%, -3%); }
80% { transform: translate(5%, 4%); }
100% { transform: translate(0,0); }
}
/* ── 3. CRT scanlines (very subtle) ───────────────────────── */
.lp-scanlines {
position: fixed; inset: 0;
z-index: 0;
pointer-events: none;
opacity: 0.04;
background: repeating-linear-gradient(
to bottom,
transparent 0,
transparent 2px,
rgba(255,255,255,0.4) 3px,
transparent 4px
);
mix-blend-mode: overlay;
}
/* ── 4. Scramble / decode text ─────────────────────────────── */
.lp-decode-line {
display: inline-block;
/* Use tabular nums + a slightly narrower spacing while scrambling so
the heading doesn't reflow as random glyphs swap. */
font-variant-numeric: tabular-nums;
font-feature-settings: 'tnum' 1;
/* Soft glow on decoded text */
text-shadow: 0 0 22px rgba(245,165,36,0.12);
}
.lp-decode-line.grad {
text-shadow: none; /* gradient text can't take text-shadow cleanly */
}
/* ── 5. Magnetic button wrapper — DISABLED ─────────────────────
The .lp-magnet class is no longer applied to any element (see app/page.tsx
hero CTA). Rules kept commented for reference in case the effect is
reinstated later, but they should NOT match anything in production. */
/*
.lp-magnet { will-change: transform; }
.lp-btn-inner {
display: inline-flex; align-items: center; gap: 10px;
transition: transform 0.18s ease;
}
.lp-magnet:hover .lp-btn-inner { transform: translateY(-1px); }
.lp-magnet.lp-btn-primary:hover { transform: none !important; }
.lp-magnet.lp-btn-primary { transition: box-shadow 0.18s ease; }
.lp-magnet.lp-btn-primary:hover {
box-shadow: 0 18px 60px rgba(245,165,36,0.6);
}
*/
/* ── 6. Hero stats (counter strip) ────────────────────────── */
.lp-herostats {
margin: 56px auto 0;
align-self: center; /* center inside .lp-hero flex column */
display: inline-flex; align-items: stretch; gap: 28px;
padding: 18px 28px;
border: 1px solid var(--lp-line);
border-radius: 16px;
background:
linear-gradient(180deg, rgba(255,255,255,0.04), rgba(255,255,255,0.01)),
rgba(10,9,7,0.55);
backdrop-filter: blur(10px);
box-shadow:
0 30px 80px rgba(0,0,0,0.4),
inset 0 1px 0 rgba(255,255,255,0.04);
font-family: 'Geist Mono', ui-monospace, monospace;
}
.lp-herostat { text-align: center; }
.lp-herostat-val {
font-size: clamp(22px, 3vw, 30px);
font-weight: 700;
color: var(--lp-ink);
line-height: 1;
letter-spacing: -0.02em;
display: inline-flex; align-items: baseline;
}
.lp-herostat-val .suf {
font-size: 0.6em;
color: var(--lp-amber);
margin-left: 1px;
}
.lp-herostat-val .dollar {
font-size: 0.7em;
color: var(--lp-amber);
margin-right: 1px;
}
.lp-herostat-lbl {
font-size: 10px;
color: var(--lp-ink-4);
margin-top: 6px;
letter-spacing: 0.1em;
text-transform: uppercase;
}
.lp-herostat-sep {
width: 1px;
background: linear-gradient(180deg, transparent, var(--lp-line), transparent);
align-self: stretch;
}
@media (max-width: 560px) {
.lp-herostats { gap: 16px; padding: 14px 18px; }
}
/* ── 7. PILLAR CARDS — 3D tilt + spotlight + animated edge ── */
.lp-pillar {
--tilt-x: 0deg;
--tilt-y: 0deg;
--glow-x: 50%;
--glow-y: 50%;
position: relative;
display: flex; flex-direction: column;
text-decoration: none;
color: inherit;
padding: 0;
background: transparent;
border: none;
border-radius: 20px;
transform-style: preserve-3d;
transform: perspective(900px) rotateX(var(--tilt-x)) rotateY(var(--tilt-y));
transition: transform 0.18s cubic-bezier(.2,.8,.2,1);
cursor: pointer;
isolation: isolate;
}
.lp-pillar:hover { transition: transform 0.05s linear; }
/* solid body sits inside, separated from edge layer */
.lp-pillar-body {
position: relative;
z-index: 2;
display: flex; flex-direction: column; gap: 14px;
padding: 28px 26px;
background: linear-gradient(180deg, rgba(20,18,14,0.92), rgba(10,9,7,0.92));
border-radius: 18px;
border: 1px solid var(--lp-line);
height: 100%;
transform: translateZ(0); /* establish 3D layer */
}
.lp-pillar:hover .lp-pillar-body {
border-color: rgba(245,165,36,0.35);
}
/* spotlight inside the card — radial gradient driven by --glow-x/y */
.lp-pillar-glow {
position: absolute;
inset: 0;
z-index: 3;
border-radius: 18px;
pointer-events: none;
opacity: 0;
transition: opacity 0.25s ease;
background: radial-gradient(
400px circle at var(--glow-x) var(--glow-y),
rgba(245,165,36,0.18),
transparent 50%
);
mix-blend-mode: screen;
}
.lp-pillar:hover .lp-pillar-glow { opacity: 1; }
/* animated conic-gradient edge — rotates on hover */
.lp-pillar-edge {
position: absolute;
inset: -1px;
z-index: 1;
border-radius: 19px;
padding: 1px;
background: conic-gradient(
from var(--edge-angle, 0deg),
rgba(245,165,36,0.0),
rgba(245,165,36,0.45),
rgba(167,139,250,0.45),
rgba(239,68,68,0.4),
rgba(245,165,36,0.0)
);
-webkit-mask:
linear-gradient(#000 0 0) content-box,
linear-gradient(#000 0 0);
-webkit-mask-composite: xor;
mask-composite: exclude;
opacity: 0;
transition: opacity 0.3s ease;
animation: lp-edge-spin 4s linear infinite paused;
}
.lp-pillar:hover .lp-pillar-edge {
opacity: 1;
animation-play-state: running;
}
@property --edge-angle {
syntax: '<angle>';
inherits: false;
initial-value: 0deg;
}
@keyframes lp-edge-spin {
to { --edge-angle: 360deg; }
}
/* typography inside pillar */
.lp-pillar-tag {
align-self: flex-start;
font-size: 10px; font-weight: 700;
letter-spacing: 0.08em; text-transform: uppercase;
padding: 4px 8px; border-radius: 999px;
background: rgba(245,165,36,0.12);
color: var(--lp-amber);
font-family: 'Geist Mono', ui-monospace, monospace;
}
.lp-pillar-title {
font-size: 18px; font-weight: 700;
margin: 0; line-height: 1.25;
color: var(--lp-ink);
}
.lp-pillar-desc {
font-size: 14px; line-height: 1.6;
color: var(--lp-ink-3);
margin: 0; flex: 1;
}
.lp-pillar-foot {
display: flex; align-items: baseline; gap: 8px; margin-top: 4px;
padding-top: 12px; border-top: 1px solid var(--lp-line);
}
.lp-pillar-metric {
font-size: 22px; font-weight: 700;
color: var(--lp-amber);
font-family: 'Geist Mono', ui-monospace, monospace;
line-height: 1;
}
.lp-pillar-metric-lbl {
font-size: 11px; color: var(--lp-ink-4);
font-family: 'Geist Mono', ui-monospace, monospace;
}
.lp-pillar-arrow {
margin-left: auto; font-size: 16px; color: var(--lp-amber);
transition: transform 0.2s ease;
}
.lp-pillar:hover .lp-pillar-arrow { transform: translateX(4px); }
/* reduce motion respect */
@media (prefers-reduced-motion: reduce) {
.lp-noise,
.lp-pillar-edge { animation: none !important; }
.lp-pillar { transform: none !important; transition: none; }
.lp-spotlight { display: none; }
}
/* ── FAQ ──────────────────────────────────────────────── */
.lp-faq {
max-width: 720px;
margin-top: 32px;
display: flex;
flex-direction: column;
gap: 2px;
}
.lp-faq-item {
border: 1px solid var(--lp-line);
border-radius: 10px;
overflow: hidden;
background: var(--lp-surface);
transition: border-color 0.2s;
}
.lp-faq-item:hover { border-color: var(--lp-line-2); }
.lp-faq-q {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
gap: 16px;
padding: 18px 20px;
background: none;
border: none;
color: var(--lp-ink-2);
font-size: 14px;
font-weight: 600;
text-align: left;
cursor: pointer;
transition: color 0.2s;
line-height: 1.4;
}
.lp-faq-q:hover,
.lp-faq-q.open { color: var(--lp-ink); }
.lp-faq-chevron {
flex-shrink: 0;
font-size: 20px;
color: var(--lp-amber);
font-family: 'Geist Mono', monospace;
line-height: 1;
transition: transform 0.2s;
}
.lp-faq-a {
padding: 0 20px 18px;
border-top: 1px solid var(--lp-line);
}
.lp-faq-a p {
margin: 14px 0 0;
font-size: 13px;
line-height: 1.65;
color: var(--lp-ink-3);
}
/* ── Comparison table ────────────────────────────────── */
.lp-compare-wrap {
margin-top: 32px;
overflow-x: auto;
border-radius: 12px;
border: 1px solid var(--lp-line-2);
}
.lp-compare {
width: 100%;
border-collapse: collapse;
font-size: 13px;
min-width: 540px;
}
.lp-compare thead tr {
background: rgba(255,255,255,0.04);
border-bottom: 1px solid var(--lp-line-2);
}
.lp-compare th {
padding: 14px 18px;
text-align: left;
font-size: 11px;
font-weight: 700;
letter-spacing: 0.07em;
text-transform: uppercase;
color: var(--lp-ink-3);
font-family: 'Geist Mono', monospace;
white-space: nowrap;
}
.lp-compare th.lp-compare-us {
color: var(--lp-amber);
background: rgba(245,165,36,0.06);
}
.lp-compare tbody tr {
border-bottom: 1px solid var(--lp-line);
transition: background 0.15s;
}
.lp-compare tbody tr:last-child { border-bottom: none; }
.lp-compare tbody tr:hover { background: rgba(255,255,255,0.025); }
.lp-compare-feature {
padding: 13px 18px;
color: var(--lp-ink-2);
font-weight: 500;
}
.lp-compare-val {
padding: 13px 18px;
font-family: 'Geist Mono', monospace;
font-size: 12px;
white-space: nowrap;
}
td.lp-compare-us {
color: var(--lp-amber);
background: rgba(245,165,36,0.04);
font-weight: 600;
}
.lp-compare-muted { color: var(--lp-ink-4); }