Forex Insights — AI-Powered FX Market Intelligence
/* ── Reset & Base ─────────────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
–green: #00d97e;
–green-bright: #00f291;
–green-dim: rgba(0,217,126,0.65);
–green-glow: rgba(0,217,126,0.12);
–green-border: rgba(0,217,126,0.22);
–red: #ff4444;
–red-glow: rgba(255,68,68,0.12);
–amber: #ffb400;
–bg-0: #060606;
–bg-1: #0b0b0b;
–bg-2: #101010;
–surface: #141414;
–surface2: #1a1a1a;
–surface3: #202020;
–border: rgba(255,255,255,0.06);
–border2: rgba(255,255,255,0.11);
–t1: #ffffff;
–t2: #b8b8b8;
–t3: #888888;
–t4: #555555;
–t5: #333333;
–sans: ‘Inter’, -apple-system, BlinkMacSystemFont, sans-serif;
–mono: ‘JetBrains Mono’, ‘Courier New’, monospace;
–r: 8px;
–rl: 12px;
–rxl: 16px;
–nav: 68px;
}
html { scroll-behavior: smooth; }
body {
font-family: var(–sans);
background: var(–bg-0);
color: var(–t1);
line-height: 1.6;
overflow-x: hidden;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
h1, h2, h3, h4, h5 {
font-weight: 700;
line-height: 1.12;
letter-spacing: -0.02em;
}
a { color: inherit; text-decoration: none; }
img { display: block; max-width: 100%; }
/* ── Layout ───────────────────────────────────────────────────────── */
.wrap {
max-width: 1180px;
margin: 0 auto;
padding: 0 24px;
}
section { padding: 100px 0; }
/* ── Labels ───────────────────────────────────────────────────────── */
.label {
display: inline-block;
font-family: var(–mono);
font-size: 10.5px;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(–green);
}
/* ── Buttons ──────────────────────────────────────────────────────── */
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
padding: 11px 22px;
border-radius: var(–r);
font-family: var(–sans);
font-size: 14px;
font-weight: 600;
letter-spacing: 0.01em;
cursor: pointer;
transition: all .2s ease;
white-space: nowrap;
border: none;
text-decoration: none;
}
.btn-ghost {
background: transparent;
color: var(–t2);
border: 1px solid var(–border2);
}
.btn-ghost:hover {
color: var(–t1);
background: rgba(255,255,255,0.05);
border-color: rgba(255,255,255,0.22);
}
.btn-primary {
background: var(–green);
color: #000;
}
.btn-primary:hover {
background: var(–green-bright);
transform: translateY(-1px);
box-shadow: 0 6px 22px rgba(0,217,126,0.28);
}
.btn-outline {
background: transparent;
color: var(–green);
border: 1px solid var(–green-border);
}
.btn-outline:hover {
background: var(–green-glow);
border-color: var(–green);
transform: translateY(-1px);
}
.btn-lg { padding: 15px 32px; font-size: 16px; border-radius: var(–rl); }
.btn-xl { padding: 18px 40px; font-size: 17px; border-radius: var(–rl); font-weight: 700; }
/* ── Live Pulse ───────────────────────────────────────────────────── */
.pulse {
display: inline-block;
width: 8px; height: 8px;
border-radius: 50%;
background: var(–green);
position: relative;
flex-shrink: 0;
}
.pulse::after {
content: ”;
position: absolute;
inset: -3px;
border-radius: 50%;
border: 1px solid var(–green);
opacity: 0;
animation: pulse-ring 2.2s ease-out infinite;
}
@keyframes pulse-ring {
0% { transform: scale(.7); opacity: .9; }
100% { transform: scale(2.2); opacity: 0; }
}
/* ── Navigation ───────────────────────────────────────────────────── */
#nav {
position: fixed;
top: 0; left: 0; right: 0;
z-index: 1000;
height: var(–nav);
background: rgba(6,6,6,0.88);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border-bottom: 1px solid var(–border);
transition: background .3s ease;
}
.nav-inner {
max-width: 1180px;
margin: 0 auto;
padding: 0 24px;
height: 100%;
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
}
.nav-logo {
display: flex;
align-items: center;
gap: 10px;
}
.nav-logo img {
height: 38px;
width: auto;
}
.nav-wordmark {
line-height: 1;
}
.nav-wordmark .name {
font-size: 14px;
font-weight: 800;
letter-spacing: 0.1em;
text-transform: uppercase;
}
.nav-wordmark .name em { font-style: normal; color: var(–green); }
.nav-wordmark .sub {
font-family: var(–mono);
font-size: 9px;
letter-spacing: 0.16em;
text-transform: uppercase;
color: var(–t4);
margin-top: 3px;
display: flex;
align-items: center;
gap: 5px;
}
.nav-actions { display: flex; align-items: center; gap: 10px; }
/* ── Ticker Bar ───────────────────────────────────────────────────── */
.ticker-bar {
height: 36px;
background: var(–surface);
border-bottom: 1px solid var(–border);
overflow: hidden;
position: relative;
margin-top: var(–nav);
}
.ticker-bar::before,
.ticker-bar::after {
content: ”;
position: absolute;
top: 0; bottom: 0;
width: 72px;
z-index: 2;
pointer-events: none;
}
.ticker-bar::before { left: 0; background: linear-gradient(to right, var(–surface), transparent); }
.ticker-bar::after { right: 0; background: linear-gradient(to left, var(–surface), transparent); }
.ticker-track {
display: inline-flex;
align-items: center;
height: 100%;
white-space: nowrap;
animation: ticker 50s linear infinite;
}
.ticker-track:hover { animation-play-state: paused; }
@keyframes ticker {
0% { transform: translateX(0); }
100% { transform: translateX(-50%); }
}
.tick {
display: inline-flex;
align-items: center;
gap: 7px;
padding: 0 20px;
font-family: var(–mono);
font-size: 11.5px;
border-right: 1px solid var(–border);
}
.tick-pair { color: var(–t3); font-weight: 600; }
.tick-price { color: var(–t2); }
.tick-chg.up { color: var(–green); }
.tick-chg.dn { color: var(–red); }
/* ── Hero ─────────────────────────────────────────────────────────── */
#hero {
padding-top: 72px;
padding-bottom: 0;
min-height: calc(100vh – var(–nav) – 36px);
display: flex;
flex-direction: column;
position: relative;
overflow: hidden;
}
.hero-bg-grid {
position: absolute;
inset: 0;
background-image:
linear-gradient(rgba(255,255,255,0.022) 1px, transparent 1px),
linear-gradient(90deg, rgba(255,255,255,0.022) 1px, transparent 1px);
background-size: 60px 60px;
mask-image: linear-gradient(to bottom, transparent 0%, black 15%, black 65%, transparent 100%);
-webkit-mask-image: linear-gradient(to bottom, transparent 0%, black 15%, black 65%, transparent 100%);
}
.hero-glow {
position: absolute;
top: 25%; left: 50%;
transform: translateX(-50%);
width: 900px; height: 400px;
background: radial-gradient(ellipse, rgba(0,217,126,0.055) 0%, transparent 65%);
pointer-events: none;
}
.hero-body {
position: relative;
z-index: 1;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
padding: 0 24px 64px;
max-width: 920px;
margin: 0 auto;
width: 100%;
}
.hero-badge {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 5px 14px;
background: rgba(0,217,126,0.07);
border: 1px solid var(–green-border);
border-radius: 100px;
font-family: var(–mono);
font-size: 10.5px;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(–green);
margin-bottom: 32px;
}
#hero h1 {
font-size: clamp(38px, 6.5vw, 76px);
font-weight: 800;
letter-spacing: -0.035em;
line-height: 1.06;
margin-bottom: 22px;
color: var(–t1);
}
#hero h1 em { font-style: normal; color: var(–green); }
.hero-sub {
font-size: clamp(16px, 2.2vw, 21px);
color: var(–t2);
line-height: 1.65;
max-width: 720px;
margin-bottom: 40px;
font-weight: 400;
}
.hero-ctas {
display: flex;
align-items: center;
gap: 12px;
flex-wrap: wrap;
justify-content: center;
margin-bottom: 14px;
}
.hero-note {
font-family: var(–mono);
font-size: 11px;
color: var(–t5);
letter-spacing: 0.06em;
}
.hero-img-wrap {
position: relative;
z-index: 1;
width: 100%;
max-width: 1120px;
margin: 0 auto;
padding: 0 24px;
}
.hero-img-wrap img {
width: 100%;
height: auto;
border-radius: var(–rl) var(–rl) 0 0;
border: 1px solid rgba(255,255,255,0.08);
border-bottom: none;
}
.hero-img-fade {
position: absolute;
bottom: 0; left: 24px; right: 24px;
height: 100px;
background: linear-gradient(to bottom, transparent, var(–bg-0));
border-radius: 0 0 var(–rl) var(–rl);
}
/* ── Problem ──────────────────────────────────────────────────────── */
#problem { background: var(–bg-1); }
.problem-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 80px;
align-items: center;
}
#problem h2 {
font-size: clamp(28px, 4vw, 50px);
margin-bottom: 28px;
}
.body-copy {
font-size: 16.5px;
color: var(–t2);
line-height: 1.8;
}
.body-copy p { margin-bottom: 14px; }
.body-copy strong { color: var(–t1); font-weight: 600; }
.body-copy p:last-child { margin-bottom: 0; }
.data-pills {
display: flex;
flex-direction: column;
gap: 5px;
}
.dpill {
display: flex;
align-items: center;
gap: 12px;
padding: 12px 16px;
background: var(–surface);
border: 1px solid var(–border);
border-radius: var(–r);
font-family: var(–mono);
font-size: 12.5px;
color: var(–t3);
transition: all .2s ease;
}
.dpill:hover { border-color: var(–border2); color: var(–t2); background: var(–surface2); }
.dpill-dot {
width: 7px; height: 7px;
border-radius: 2px;
flex-shrink: 0;
background: var(–red);
opacity: .7;
}
.verdict-box {
margin-top: 24px;
padding: 22px 22px 22px 20px;
border-left: 2px solid var(–red);
background: rgba(255,68,68,0.04);
border-radius: 0 var(–r) var(–r) 0;
}
.verdict-box p { font-size: 15px; color: var(–t2); line-height: 1.65; margin: 0; }
.verdict-box p + p { margin-top: 10px; }
.verdict-box strong { color: var(–t1); }
/* ── Solution ─────────────────────────────────────────────────────── */
#solution { background: var(–bg-0); }
.solution-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 80px;
align-items: start;
}
#solution h2 {
font-size: clamp(28px, 4vw, 50px);
margin-bottom: 24px;
}
.ob-list {
list-style: none;
display: flex;
flex-direction: column;
gap: 9px;
margin-top: 20px;
}
.ob-list li {
display: flex;
align-items: center;
gap: 12px;
font-size: 14.5px;
color: var(–t2);
}
.ob-list li::before {
content: ‘→’;
font-family: var(–mono);
color: var(–green);
font-size: 11px;
flex-shrink: 0;
}
.blockquote {
margin-top: 36px;
padding: 24px 24px 24px 22px;
border-left: 3px solid var(–green);
background: rgba(0,217,126,0.04);
border-radius: 0 var(–r) var(–r) 0;
}
.blockquote p {
font-size: 17.5px;
font-style: italic;
color: var(–t1);
line-height: 1.5;
font-weight: 500;
}
/* Chat card */
.chat-card {
background: var(–surface);
border: 1px solid var(–border);
border-radius: var(–rxl);
overflow: hidden;
}
.chat-header {
padding: 13px 18px;
background: var(–surface2);
border-bottom: 1px solid var(–border);
display: flex;
align-items: center;
gap: 8px;
}
.wdot { width: 10px; height: 10px; border-radius: 50%; }
.wdot.r { background: #ff5f57; }
.wdot.a { background: #febc2e; }
.wdot.g { background: #28c840; }
.chat-title {
font-family: var(–mono);
font-size: 10px;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(–t4);
margin-left: 6px;
}
.chat-msgs {
padding: 18px;
display: flex;
flex-direction: column;
gap: 12px;
}
.cmsg {
display: flex;
align-items: flex-start;
gap: 10px;
}
.cmsg.user { flex-direction: row-reverse; }
.cavatar {
width: 26px; height: 26px;
border-radius: 6px;
flex-shrink: 0;
display: flex;
align-items: center;
justify-content: center;
font-family: var(–mono);
font-size: 10px;
font-weight: 700;
}
.cavatar.ai { background: rgba(0,217,126,0.14); color: var(–green); }
.cavatar.user { background: rgba(255,255,255,0.07); color: var(–t3); }
.cbubble {
max-width: calc(100% – 36px);
padding: 9px 13px;
border-radius: 4px 11px 11px 11px;
font-size: 12.5px;
line-height: 1.55;
color: var(–t2);
background: var(–surface2);
border: 1px solid var(–border);
}
.cmsg.user .cbubble {
border-radius: 11px 4px 11px 11px;
background: rgba(0,217,126,0.06);
border-color: var(–green-border);
color: var(–t1);
}
/* ── How It Works ─────────────────────────────────────────────────── */
#hiw { background: var(–bg-1); }
.sec-hdr {
text-align: center;
margin-bottom: 60px;
}
.sec-hdr .label { margin-bottom: 12px; }
.sec-hdr h2 { font-size: clamp(28px, 4vw, 50px); margin-bottom: 14px; }
.sec-hdr p { font-size: 17px; color: var(–t2); max-width: 600px; margin: 0 auto; line-height: 1.65; }
.hiw-row {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 2px;
}
.hiw-step {
background: var(–surface);
border: 1px solid var(–border);
padding: 32px 24px 28px;
position: relative;
transition: background .2s, border-color .2s;
}
.hiw-step:first-child { border-radius: var(–rl) 0 0 var(–rl); }
.hiw-step:last-child { border-radius: 0 var(–rl) var(–rl) 0; }
.hiw-step:hover { background: var(–surface2); border-color: var(–border2); z-index: 1; }
.hiw-connector {
position: absolute;
top: 36px; right: -12px;
width: 22px; height: 22px;
border-radius: 50%;
background: var(–bg-1);
border: 1px solid var(–border2);
display: flex;
align-items: center;
justify-content: center;
z-index: 2;
color: var(–green);
font-size: 9px;
}
.hiw-step:last-child .hiw-connector { display: none; }
.hiw-num {
font-family: var(–mono);
font-size: 10px;
letter-spacing: 0.12em;
color: var(–t5);
margin-bottom: 14px;
}
.hiw-num span { color: var(–green); }
.hiw-icon {
width: 42px; height: 42px;
border-radius: 10px;
background: var(–green-glow);
border: 1px solid var(–green-border);
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 18px;
}
.hiw-icon svg { width: 19px; height: 19px; stroke: var(–green); fill: none; stroke-width: 1.6; }
.hiw-step h3 { font-size: 19px; margin-bottom: 10px; letter-spacing: -0.01em; }
.hiw-step p { font-size: 13px; color: var(–t3); line-height: 1.6; margin-bottom: 16px; }
.hiw-tags {
display: flex;
flex-direction: column;
gap: 4px;
}
.htag {
font-family: var(–mono);
font-size: 10.5px;
color: var(–t4);
display: flex;
align-items: center;
gap: 6px;
}
.htag::before { content: ”; width: 3px; height: 3px; border-radius: 50%; background: var(–green); opacity: .55; flex-shrink: 0; }
/* ── Ecosystem ────────────────────────────────────────────────────── */
#ecosystem { background: var(–bg-0); }
.eco-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1px;
background: var(–border);
border: 1px solid var(–border);
border-radius: var(–rxl);
overflow: hidden;
}
.eco-card {
background: var(–bg-0);
padding: 30px 28px;
transition: background .2s ease;
}
.eco-card:hover { background: var(–surface); }
.eco-tag {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 4px 10px;
border-radius: 100px;
font-family: var(–mono);
font-size: 9.5px;
letter-spacing: 0.1em;
text-transform: uppercase;
margin-bottom: 14px;
}
.eco-tag.live { background: rgba(0,217,126,0.07); border: 1px solid var(–green-border); color: var(–green); }
.eco-tag.feature { background: rgba(255,255,255,0.04); border: 1px solid var(–border2); color: var(–t3); }
.eco-card h3 { font-size: 17px; font-weight: 700; margin-bottom: 9px; letter-spacing: -0.01em; }
.eco-card p { font-size: 13.5px; color: var(–t3); line-height: 1.65; margin-bottom: 14px; }
.eco-example {
background: var(–surface);
border: 1px solid var(–border);
border-radius: var(–r);
padding: 11px 13px;
font-family: var(–mono);
font-size: 11.5px;
line-height: 1.55;
}
.eco-q { color: var(–t4); }
.eco-a { color: var(–green); }
.status-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.schip {
padding: 3px 9px;
border-radius: 100px;
font-family: var(–mono);
font-size: 9.5px;
font-weight: 600;
letter-spacing: 0.05em;
}
.s-clean { background: rgba(0,217,126,0.1); color: var(–green); border: 1px solid rgba(0,217,126,0.2); }
.s-caution { background: rgba(255,180,0,0.1); color: var(–amber); border: 1px solid rgba(255,180,0,0.2); }
.s-issues { background: rgba(255,68,68,0.1); color: var(–red); border: 1px solid rgba(255,68,68,0.2); }
.s-skip { background: rgba(255,255,255,0.04); color: var(–t4); border: 1px solid var(–border); }
/* Telegram preview */
.tg-preview {
background: #212121;
border: 1px solid rgba(255,255,255,0.08);
border-radius: 10px;
overflow: hidden;
}
.tg-header {
background: #2b2b2b;
padding: 9px 13px;
display: flex;
align-items: center;
gap: 10px;
border-bottom: 1px solid rgba(255,255,255,0.06);
}
.tg-avatar {
width: 28px; height: 28px;
border-radius: 50%;
background: var(–green-glow);
border: 1px solid var(–green-border);
display: flex; align-items: center; justify-content: center;
font-family: var(–mono); font-size: 9px; color: var(–green); font-weight: 700;
}
.tg-name { font-size: 12px; font-weight: 600; color: var(–t1); }
.tg-status { font-size: 10px; color: var(–green); display: flex; align-items: center; gap: 5px; }
.tg-body { padding: 12px; }
.tg-msg {
background: #2b2b2b;
border-radius: 4px 10px 10px 10px;
padding: 8px 11px;
font-family: var(–mono);
font-size: 11px;
color: var(–t2);
line-height: 1.5;
}
.tg-msg strong { color: var(–green); }
/* ── Screenshots ──────────────────────────────────────────────────── */
#screenshots { background: var(–bg-1); padding: 80px 0; }
.shots-hdr { margin-bottom: 48px; }
.shots-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 16px;
}
.shot-frame {
background: var(–surface);
border: 1px solid var(–border);
border-radius: var(–rl);
overflow: hidden;
}
.shot-frame-header {
padding: 10px 14px;
background: var(–surface2);
border-bottom: 1px solid var(–border);
display: flex;
align-items: center;
gap: 6px;
}
.sdot { width: 9px; height: 9px; border-radius: 50%; }
.sdot.r { background: #ff5f57; } .sdot.a { background: #febc2e; } .sdot.g { background: #28c840; }
.shot-title { font-family: var(–mono); font-size: 10px; color: var(–t4); letter-spacing: 0.08em; margin-left: 6px; }
.shot-frame img { width: 100%; height: auto; }
/* ── Beta ─────────────────────────────────────────────────────────── */
#beta { background: var(–bg-0); border-top: 1px solid var(–border); border-bottom: 1px solid var(–border); }
.beta-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 80px;
align-items: start;
}
#beta h2 { font-size: clamp(28px, 4vw, 46px); margin-bottom: 20px; }
#beta p { font-size: 15.5px; color: var(–t2); line-height: 1.75; margin-bottom: 12px; }
.beta-items {
display: flex;
flex-direction: column;
gap: 10px;
margin-top: 4px;
}
.bitem {
display: flex;
align-items: flex-start;
gap: 13px;
padding: 14px 16px;
background: var(–surface);
border: 1px solid var(–border);
border-radius: var(–r);
}
.bitem-icon {
width: 34px; height: 34px;
border-radius: 8px;
background: var(–green-glow);
border: 1px solid var(–green-border);
display: flex; align-items: center; justify-content: center;
flex-shrink: 0;
}
.bitem-icon svg { width: 15px; height: 15px; stroke: var(–green); fill: none; stroke-width: 1.6; }
.bitem h4 { font-size: 13.5px; font-weight: 600; margin-bottom: 2px; }
.bitem p { font-size: 12px; color: var(–t3); margin: 0; line-height: 1.5; }
/* ── Technical ────────────────────────────────────────────────────── */
#tech { background: var(–bg-1); }
.tech-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 80px;
align-items: center;
}
#tech h2 { font-size: clamp(28px, 4vw, 46px); margin-bottom: 20px; }
#tech p { font-size: 15.5px; color: var(–t2); line-height: 1.75; margin-bottom: 28px; }
.tech-chips { display: flex; flex-wrap: wrap; gap: 7px; }
.tchip {
padding: 5px 11px;
background: var(–surface);
border: 1px solid var(–border);
border-radius: var(–r);
font-family: var(–mono);
font-size: 11px;
color: var(–t3);
}
/* Terminal */
.terminal {
background: var(–surface);
border: 1px solid var(–border);
border-radius: var(–rl);
overflow: hidden;
margin-bottom: 14px;
}
.term-bar {
padding: 9px 14px;
background: var(–surface2);
border-bottom: 1px solid var(–border);
display: flex;
align-items: center;
gap: 6px;
}
.tdot { width: 10px; height: 10px; border-radius: 50%; }
.tdot.r { background: #ff5f57; } .tdot.a { background: #febc2e; } .tdot.g { background: #28c840; }
.term-ttl { font-family: var(–mono); font-size: 10px; color: var(–t4); margin-left: 8px; letter-spacing: 0.07em; }
.term-body {
padding: 14px 16px;
font-family: var(–mono);
font-size: 11.5px;
line-height: 1.8;
}
.tl { display: flex; gap: 7px; }
.tp { color: var(–green); flex-shrink: 0; }
.tc { color: var(–t2); }
.tco { color: var(–t4); }
.to { color: var(–t3); padding-left: 14px; }
.ts { color: var(–green); padding-left: 14px; }
.tw { color: var(–amber); padding-left: 14px; }
.shots-2col { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
/* ── Email Capture ────────────────────────────────────────────────── */
#capture { background: var(–bg-0); position: relative; overflow: hidden; }
#capture::before {
content: ”;
position: absolute;
top: -50px; left: 50%; transform: translateX(-50%);
width: 700px; height: 350px;
background: radial-gradient(ellipse, rgba(0,217,126,0.045) 0%, transparent 65%);
pointer-events: none;
}
.capture-wrap {
max-width: 680px;
margin: 0 auto;
text-align: center;
}
#capture h2 { font-size: clamp(28px, 4vw, 52px); margin-bottom: 14px; }
#capture > .capture-wrap > p {
font-size: 17px;
color: var(–t2);
line-height: 1.65;
margin-bottom: 44px;
}
.benefits-box {
text-align: left;
background: var(–surface);
border: 1px solid var(–border);
border-radius: var(–rl);
padding: 20px 24px;
margin-bottom: 36px;
display: flex;
flex-direction: column;
gap: 9px;
}
.bfitem {
display: flex;
align-items: center;
gap: 11px;
font-size: 14px;
color: var(–t2);
}
.bfitem::before { content: ‘✓’; color: var(–green); font-weight: 700; font-size: 12px; flex-shrink: 0; }
/* Form */
.cform { display: flex; flex-direction: column; gap: 14px; text-align: left; }
.fg { display: flex; flex-direction: column; gap: 5px; }
.flabel {
font-family: var(–mono);
font-size: 10px;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(–t3);
}
.finput,
.fselect,
.ftextarea {
width: 100%;
background: var(–surface);
border: 1px solid var(–border2);
border-radius: var(–r);
padding: 13px 15px;
font-family: var(–sans);
font-size: 15px;
color: var(–t1);
outline: none;
transition: border-color .2s, box-shadow .2s;
-webkit-appearance: none;
appearance: none;
}
.finput:focus, .fselect:focus, .ftextarea:focus {
border-color: var(–green);
box-shadow: 0 0 0 3px rgba(0,217,126,0.07);
}
.finput::placeholder, .ftextarea::placeholder { color: var(–t5); }
.fselect {
cursor: pointer;
background-image: url(“data:image/svg+xml,%3Csvg xmlns=’http://www.w3.org/2000/svg’ width=’12’ height=’12’ viewBox=’0 0 24 24′ fill=’none’ stroke=’%23555′ stroke-width=’2’%3E%3Cpolyline points=’6 9 12 15 18 9’/%3E%3C/svg%3E”);
background-repeat: no-repeat;
background-position: right 14px center;
padding-right: 38px;
}
.fselect option { background: var(–surface2); color: var(–t1); }
.ftextarea { resize: vertical; min-height: 96px; line-height: 1.5; }
.fsub {
width: 100%;
padding: 15px;
background: var(–green);
color: #000;
font-family: var(–sans);
font-size: 15px;
font-weight: 700;
border: none;
border-radius: var(–rl);
cursor: pointer;
transition: all .2s ease;
letter-spacing: 0.01em;
}
.fsub:hover {
background: var(–green-bright);
transform: translateY(-1px);
box-shadow: 0 8px 26px rgba(0,217,126,0.24);
}
.fsub:active { transform: translateY(0); }
.fprivacy {
text-align: center;
font-family: var(–mono);
font-size: 11px;
color: var(–t5);
}
/* Success */
.form-success {
display: none;
padding: 48px 24px;
background: rgba(0,217,126,0.04);
border: 1px solid var(–green-border);
border-radius: var(–rxl);
text-align: center;
}
.form-success.show { display: block; }
.fs-icon {
width: 54px; height: 54px;
border-radius: 50%;
background: var(–green-glow);
border: 1px solid var(–green-border);
display: flex; align-items: center; justify-content: center;
margin: 0 auto 18px;
}
.fs-icon svg { width: 22px; height: 22px; stroke: var(–green); fill: none; stroke-width: 2; }
.form-success h3 { font-size: 24px; margin-bottom: 9px; }
.form-success p { color: var(–t2); font-size: 15px; }
/* ── Final CTA ────────────────────────────────────────────────────── */
#final {
background: var(–bg-1);
text-align: center;
padding: 120px 0;
position: relative;
overflow: hidden;
border-top: 1px solid var(–border);
}
#final::before {
content: ”;
position: absolute;
bottom: -100px; left: 50%; transform: translateX(-50%);
width: 800px; height: 500px;
background: radial-gradient(ellipse, rgba(0,217,126,0.05) 0%, transparent 65%);
pointer-events: none;
}
#final h2 {
font-size: clamp(32px, 5.5vw, 64px);
margin-bottom: 18px;
max-width: 820px;
margin-left: auto;
margin-right: auto;
position: relative;
}
#final p {
font-size: 18px;
color: var(–t2);
max-width: 560px;
margin: 0 auto 40px;
line-height: 1.65;
}
/* ── Footer ───────────────────────────────────────────────────────── */
footer {
background: var(–bg-0);
border-top: 1px solid var(–border);
padding: 52px 0 32px;
}
.foot-top {
display: flex;
justify-content: space-between;
gap: 48px;
margin-bottom: 44px;
flex-wrap: wrap;
}
.foot-brand { max-width: 280px; }
.foot-name {
font-size: 14px;
font-weight: 800;
letter-spacing: 0.1em;
text-transform: uppercase;
margin-bottom: 10px;
}
.foot-name em { font-style: normal; color: var(–green); }
.foot-brand p { font-size: 12.5px; color: var(–t4); line-height: 1.65; }
.foot-col h5 {
font-family: var(–mono);
font-size: 9.5px;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(–t4);
margin-bottom: 14px;
}
.foot-links { list-style: none; display: flex; flex-direction: column; gap: 8px; }
.foot-links a { font-size: 13px; color: var(–t3); transition: color .15s; }
.foot-links a:hover { color: var(–t1); }
.foot-hr { height: 1px; background: var(–border); margin-bottom: 22px; }
.foot-disc { font-size: 11.5px; color: var(–t4); line-height: 1.75; max-width: 780px; margin-bottom: 20px; }
.foot-bottom {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: 12px;
}
.foot-cr { font-family: var(–mono); font-size: 11px; color: var(–t5); }
.foot-badges { display: flex; gap: 10px; }
.fbadge {
padding: 3px 9px;
border: 1px solid var(–border);
border-radius: 4px;
font-family: var(–mono);
font-size: 9.5px;
color: var(–t5);
letter-spacing: 0.08em;
}
/* ── Scroll-in animations ─────────────────────────────────────────── */
.reveal {
opacity: 0;
transform: translateY(22px);
transition: opacity .65s ease, transform .65s ease;
}
.reveal.in {
opacity: 1;
transform: translateY(0);
}
.reveal-d1 { transition-delay: .1s; }
.reveal-d2 { transition-delay: .2s; }
.reveal-d3 { transition-delay: .3s; }
.reveal-d4 { transition-delay: .4s; }
/* ── Responsive ───────────────────────────────────────────────────── */
@media (max-width: 960px) {
section { padding: 72px 0; }
.problem-grid,
.solution-grid,
.beta-grid,
.tech-grid { grid-template-columns: 1fr; gap: 48px; }
.hiw-row { grid-template-columns: 1fr 1fr; }
.hiw-step { border-radius: 0 !important; }
.hiw-step:first-child { border-radius: var(–rl) 0 0 0 !important; }
.hiw-step:nth-child(2){ border-radius: 0 var(–rl) 0 0 !important; }
.hiw-step:nth-child(3){ border-radius: 0 0 0 var(–rl) !important; }
.hiw-step:last-child { border-radius: 0 0 var(–rl) 0 !important; }
.hiw-connector { display: none; }
.eco-grid { grid-template-columns: 1fr 1fr; }
.shots-grid { grid-template-columns: 1fr; }
.shots-2col { grid-template-columns: 1fr; }
}
@media (max-width: 640px) {
.nav-actions .btn-ghost { display: none; }
.nav-wordmark { display: none; }
#hero h1 { font-size: 36px; letter-spacing: -0.025em; }
.hero-ctas { flex-direction: column; width: 100%; max-width: 320px; }
.hero-ctas .btn { width: 100%; }
.hiw-row { grid-template-columns: 1fr; }
.hiw-step:first-child { border-radius: var(–rl) var(–rl) 0 0 !important; }
.hiw-step:last-child { border-radius: 0 0 var(–rl) var(–rl) !important; }
.eco-grid { grid-template-columns: 1fr; }
.foot-top { flex-direction: column; }
.foot-bottom { flex-direction: column; align-items: flex-start; }
.foot-badges { flex-wrap: wrap; }
}
Personal Project · Exploring Public Release
Your Personal AI Desk Analyst
for the FX Market
I built Forex Insights for my own trading desk — an AI system that continuously monitors
currency strength, macro conditions, economic events, positioning, sentiment, and news flow,
then delivers concise, prioritized intelligence designed around how I trade. I’m now exploring
whether other traders would find something like this valuable.
A working personal project. Public release not yet decided.
The Problem Isn’t Lack of Information
Today’s forex traders are drowning in data. Charts. News feeds. Economic releases. Central bank commentary. Positioning reports. Sentiment indicators.
The challenge isn’t finding more information.
The challenge is knowing what actually matters right now.
Most platforms provide data. Very few provide judgment.
There’s a difference between being informed and being aware. Forex Insights is built for the latter.
All of this. Every session. Every day.
Most traders can’t keep up.
An AI That Learns How You Trade
Forex Insights begins with an onboarding interview. The AI learns your trading profile — not just what pairs you trade, but how you think about the market.
- Your trading style and time horizon
- Preferred pairs and instruments
- Risk tolerance and position sizing approach
- Analytical framework (MPA, supply/demand, flow)
- Information preferences and alert sensitivity
- Decision-making process and key triggers
“Forex Insights attempts to become the analyst you would have hired for your own desk.”
Forex Insights · Onboarding
The result: an analyst that thinks the way you do.
How Forex Insights Works
A continuous intelligence loop — running in the background even when you’re away from your screens. This is how it currently works for me.
Monitor
Continuously watches the full market ecosystem — not just prices, but everything that moves them.
Reason
The AI gathers the data it needs, reasons through it, and draws conclusions — not just displays it.
Prioritize
Identifies what deserves your attention, what can be safely ignored, and where opportunities may be forming.
Deliver
Provides intelligence when and where you need it — briefings, alerts, live commentary, dashboard, and a conversational assistant.
One Intelligence Engine.
Multiple Ways to Stay Connected.
These are the components currently running in my personal system. Features, delivery formats, and capabilities are still evolving.
AI Squawk Live
An AI-generated forex squawk service that runs in the background. Notifies you when meaningful developments occur — not noise, only when the market is actually talking.
Morning Market Briefings
Structured daily intelligence reports delivered before the session opens. Covers macro regime, central bank divergence, event risk, currency strength, and a curated watchlist — every morning.
Smart Watchlists
3–5 prioritized pairs with directional bias, key levels, setup quality rating, conflicts, and risk factors. Each pair gets a clear status so you know exactly how to approach it.
Caution
Under the Hood Issues
Skip
No ambiguity. Every pair rated, every session.
Market Alerts
Real-time Telegram and mobile alerts when conditions materially change — not when prices simply move, but when the underlying market picture shifts.
Flash Notes
Instant post-release summaries fired after high-impact economic data. Explains the market reaction, the implications, and whether your existing trade ideas remain valid.
AI Trading Assistant
Ask questions naturally in Telegram. The assistant has full tool access and chat history — it pulls live data, checks your positions, and answers in context.
Currency Intelligence Dashboard
A live command center for market awareness. Currency strength heatmap, pair relationships, macro themes, volatility map, and developing opportunities — all in one view.
Multiple Trading Frameworks
Built-in analytical framework support. Switch between frameworks with a single config change.
Live. Working. Currently in Use.
These are actual outputs from the live system — not mockups or demos. This is what runs on my desk every trading day.
UPCOMING EVENTS · HIGH IMPACT · 24H
INTEREST RATES · CURRENT & PREVIOUS
TELEGRAM · SESSION UPDATE
EMAIL · MORNING BRIEF
A Personal Project.
Exploring What’s Next.
I originally built Forex Insights to solve a problem in my own trading workflow. It runs on my desk every day and has meaningfully changed how I monitor the market.
I’m now exploring whether there’s genuine demand from other traders to justify building this into something more accessible. This page is part of that process — not a product launch.
The system is live and working, but it is still a personal project. Direction, features, and pricing (if any) are all undecided. A public release is not guaranteed.
If you join the interest list, you’re helping me understand whether this is worth building for a wider audience.
No Promises on Public Release
A public version is being explored, not planned. Whether it happens depends on whether the demand is there.
Features Are Still Evolving
New capabilities are added based on what works in practice. The system today may look quite different in six months.
Your Feedback Shapes the Direction
If you join the interest list, I’d genuinely love to hear what you’d want from an AI analyst. That input helps determine what gets built.
Honest About Limitations
The AI makes mistakes. Outputs should always be independently verified. This is a decision-support tool, not a signal service.
Built Around Real Market Intelligence
The system is Python-based with Claude as the analytical brain. A scheduler fires prompts at the right times; an agent hands each prompt to Claude along with a library of callable tools. Claude decides what data it needs, calls the tools, reasons over the results, and produces the report. Nothing about this architecture is final — it is still exploratory work.
CFTC COT Reports
Economic Calendar
Reuters Newswire
Bloomberg Feed
Bank Research PDFs
Retail Sentiment
Macro Indicators
Chart Analysis
Correlated Assets
Account Positions
RATES MONITOR
EVENT RISK
Help Shape the Future of Forex Insights
I’m exploring whether Forex Insights should become a public platform. Right now, I’m simply gathering feedback and measuring interest from traders. If you think something like this would be valuable, I’d love to hear from you — and I’ll keep you in the loop as the project evolves.
Select your trading style
Swing Trader
Day Trader
Position Trader
Scalper
Algo / System Trader
Just Exploring
No spam. No sales pitch. Just honest updates from a trader building something for traders.
You’re on the list.
Thank you — genuinely. I’ll share honest updates as the project progresses and reach out if a beta or public release happens.
If You’d Want Something
Like This — Let Me Know.
I built it for my own trading desk. I’m genuinely curious whether other traders would find this kind of market awareness valuable. If the interest is there, it’s worth building properly.
// Scroll-reveal
const observer = new IntersectionObserver((entries) => {
entries.forEach(e => {
if (e.isIntersecting) {
e.target.classList.add(‘in’);
observer.unobserve(e.target);
}
});
}, { threshold: 0.1, rootMargin: ‘0px 0px -40px 0px’ });
document.querySelectorAll(‘.reveal’).forEach(el => observer.observe(el));
// Nav background on scroll
const nav = document.getElementById(‘nav’);
window.addEventListener(‘scroll’, () => {
nav.style.background = window.scrollY > 20
? ‘rgba(6,6,6,0.97)’
: ‘rgba(6,6,6,0.88)’;
}, { passive: true });
// Form handling
const form = document.getElementById(‘capture-form’);
const formWrap = document.getElementById(‘capture-form-wrap’);
const successEl = document.getElementById(‘form-success’);
form.addEventListener(‘submit’, async (e) => {
e.preventDefault();
const email = document.getElementById(’email’).value.trim();
const traderType = document.getElementById(‘trader-type’).value;
const btn = document.getElementById(‘form-submit-btn’);
if (!email || !traderType) {
if (!email) document.getElementById(’email’).style.borderColor = ‘var(–red)’;
if (!traderType) document.getElementById(‘trader-type’).style.borderColor = ‘var(–red)’;
return;
}
btn.textContent = ‘Submitting…’;
btn.disabled = true;
// — INTEGRATION POINT —
// Replace the fetch below with your actual form endpoint.
// Options: Mailchimp, ConvertKit, Beehiiv, Netlify Forms, or a custom API.
// Example Netlify: action=”/” data-netlify=”true”
// Example Mailchimp: replace fetch with their embedded form JS
// For now, we simulate a successful submission after a short delay.
try {
// Uncomment and update for a real endpoint:
// await fetch(‘/api/early-access’, {
// method: ‘POST’,
// headers: { ‘Content-Type’: ‘application/json’ },
// body: JSON.stringify({
// email,
// trader_type: traderType,
// message: document.getElementById(‘message’).value
// })
// });
// Simulated success (remove when wired to real endpoint)
await new Promise(r => setTimeout(r, 800));
formWrap.style.display = ‘none’;
successEl.classList.add(‘show’);
window.scrollTo({ top: successEl.offsetTop – 100, behavior: ‘smooth’ });
} catch (err) {
btn.textContent = ‘Join the Early Access List’;
btn.disabled = false;
alert(‘Something went wrong. Please try again or email us directly.’);
}
});
// Reset error highlight on input
[’email’, ‘trader-type’].forEach(id => {
document.getElementById(id)?.addEventListener(‘input’, function() {
this.style.borderColor = ”;
});
});
