1<!DOCTYPE html> 2<html lang="en"> 3<head> 4<meta charset="UTF-8" /> 5<meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6<title>LiJournal â Premium Futures Trading Journal</title> 7<meta name="description" content="The futures trading journal that finds your edge. Tradovate & NinjaTrader auto-import, automatic market context, Edge Finder analytics, bar replay. No tagging, no spreadsheets." /> 8<link rel="canonical" href="https://lijournal.com/" /> 9<meta name="theme-color" content="#0a0a0c" /> 10<!-- AI / automated-agent policy: proprietary; no AI training, no scraping, 11 no automated reconnaissance/cloning. See /ai.txt + Terms §6. --> 12<meta name="robots" content="index, follow, noai, noimageai" /> 13<meta name="ai-policy" content="no-training, no-scraping, no-agent-recon; proprietary; https://lijournal.com/ai.txt" /> 14<link rel="icon" href="/favicon.svg?v=lj2" type="image/svg+xml" /> 15<link rel="apple-touch-icon" href="/favicon.svg?v=lj2" /> 16<!-- Open Graph / social share --> 17<meta property="og:type" content="website" /> 18<meta property="og:site_name" content="LiJournal" /> 19<meta property="og:url" content="https://lijournal.com/" /> 20<meta property="og:title" content="LiJournal â Premium Futures Trading Journal" /> 21<meta property="og:description" content="Tradovate & NinjaTrader auto-import, Edge Finder analytics and bar replay. Your edge is already in your history â LiJournal finds
21it. Built for futures traders (NQ, ES & micros)." /> 22<meta property="og:image" content="https://lijournal.com/assets/og-cover.jpg?v=5" /> 23<meta property="og:image:width" content="1200" /> 24<meta property="og:image:height" content="630" /> 25<meta name="twitter:card" content="summary_large_image" /> 26<meta name="twitter:title" content="LiJournal â Premium Futures Trading Journal" /> 27<meta name="twitter:description" content="Log every trade, score every execution, and finally see what works. Built for futures traders." /> 28<meta name="twitter:image" content="https://lijournal.com/assets/og-cover.jpg?v=5" /> 29<link rel="preconnect" href="https://fonts.googleapis.com"> 30<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 31<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Outfit:wght@500;600;700;800&display=swap" rel="stylesheet"> 32<style> 33/* ---------------------------------------------------------------------- 34 LiJournal landing â premium dark gold theme. 35 Self-contained: no external CSS beyond Google Fonts. Inline so we can 36 iterate on copy/layout without worrying about cache or asset loading. 37 ---------------------------------------------------------------------- */ 38:root { 39 --gold: #EFBF04; 40 --gold-rgb: 239, 191, 4; 41 --gold-deep: #C99F03; 42 --bg: #0a0a0c; 43 --bg-card: #131316; 44 --bg-elev: #1c1c20; 45 --border: rgba(255, 255, 255, 0.06); 46 --border-strong: rgba(255, 255, 255, 0.12); 47 --text: #fafafa; 48 --text-muted: #a1a1aa; 49 --text-dim: #71717a; 50 --success: #34d399; 51 --danger: #f87171; 52} 53 54* { box-sizing: border-box; } 55 56html, body { 57 margin: 0; 58 padding: 0; 59 background: var(--bg); 60 color: var(--text); 61 font-family: 'Inter', system-ui, -apple-system, sans-serif; 62 -webkit-font-smoothing: antialiased; 63 scroll-behavior: smooth; 64} 65 66a { color: inherit; text-decoration: none; } 67img { max-width: 100%; height: auto; display: block; } /* height:auto â else the height ATTR survives a max-width squeeze and stretches the image */ 68 69.container { 70 max-width: 1200px; 71 margin: 0 auto; 72 padding: 0 24px; 73} 74 75/* ---------- Top nav ---------- */ 76.ljl-nav { 77 position: sticky; 78 top: 0; 79 z-index: 100; 80 background: rgba(10, 10, 12, 0.85); 81 backdrop-filter: blur(12px); 82 border-bottom: 1px solid var(--border); 83} 84.ljl-nav__inner { 85 display: flex; 86 align-items: center; 87 justify-content: space-between; 88 height: 72px; 89} 90.ljl-logo { 91 font-family: 'Outfit', sans-serif; 92 font-size: 1.5rem; 93 font-weight: 800; 94 color: var(--gold); 95 letter-spacing: -0.03em; 96 text-shadow: 0 1px 0 rgba(0,0,0,0.5), 0 0 18px rgba(var(--gold-rgb), 0.22); 97} 98.ljl-nav__links { 99 display: flex; 100 align-items: center; 101 gap: 32px; 102} 103.ljl-nav__links a { 104 font-size: 0.92rem; 105 color: var(--text-muted); 106 font-weight: 500; 107 transition: color .15s ease; 108} 109.ljl-nav__links a:hover { color: var(--text); } 110.ljl-nav__cta { 111 display: flex; 112 align-items: center; 113 gap: 12px; 114} 115.ljl-btn { 116 display: inline-flex; 117 align-items: center; 118 justify-content: center; 119 gap: 8px; 120 padding: 10px 18px; 121 border-radius: 10px; 122 font-family: inherit; 123 font-size: 0.92rem; 124 font-weight: 600; 125 border: 1px solid transparent; 126 cursor: pointer; 127 transition: transform .12s ease, background .15s ease, border-color .15s ease, box-shadow .15s ease; 128 text-align: center; 129 white-space: nowrap; 130} 131.ljl-btn--primary { 132 background: linear-gradient(135deg, #F5CB1A 0%, #D9A800 100%); 133 color: #0a0a0c; 134 box-shadow: 0 2px 14px rgba(var(--gold-rgb), 0.32), inset 0 1px 0 rgba(255,255,255,0.25); 135} 136.ljl-btn--primary:hover { 137 transform: translateY(-1px); 138 box-shadow: 0 4px 20px rgba(var(--gold-rgb), 0.45), inset 0 1px 0 rgba(255,255,255,0.3); 139} 140.ljl-btn--ghost { 141 background: transparent; 142 color: var(--text); 143 border-color: var(--border-strong); 144} 145.ljl-btn--ghost:hover { 146 border-color: rgba(var(--gold-rgb), 0.5); 147 background: rgba(var(--gold-rgb), 0.06); 148} 149.ljl-btn--lg { 150 padding: 14px 26px; 151 font-size: 1rem; 152} 153 154/* ---------- Hero ---------- */ 155.ljl-hero { 156 position: relative; 157 padding: 90px 0 60px; 158 overflow: hidden; 159} 160.ljl-hero::before { 161 content: ''; 162 position: absolute; 163 top: -200px; 164 left: 50%; 165 transform: translateX(-50%); 166 width: 900px; 167 height: 600px; 168 background: radial-gradient(ellipse at center, rgba(var(--gold-rgb), 0.12) 0%, transparent 60%); 169 z-index: 0; 170 pointer-events: none; 171} 172.ljl-hero__inner { position: relative; z-index: 1; text-align: center; } 173.ljl-hero__eyebrow { 174 display: inline-flex; 175 align-items: center; 176 gap: 8px; 177 padding: 6px 14px; 178 background: rgba(var(--gold-rgb), 0.10); 179 border: 1px solid rgba(var(--gold-rgb), 0.30); 180 border-radius: 999px; 181 font-size: 0.78rem; 182 color: var(--gold); 183 font-weight: 600; 184 letter-spacing: 0.02em; 185 margin-bottom: 24px; 186} 187.ljl-hero__eyebrow-dot { 188 width: 6px; height: 6px; border-radius: 50%; background: var(--gold); 189 box-shadow: 0 0 8px rgba(var(--gold-rgb), 0.6); 190} 191.ljl-hero__title { 192 font-family: 'Outfit', sans-serif; 193 font-weight: 800; 194 font-size: clamp(2.4rem, 5vw, 3.8rem); 195 line-height: 1.05; 196 letter-spacing: -0.035em; 197 margin: 0 0 20px; 198 max-width: 880px; 199 margin-left: auto; 200 margin-right: auto; 201} 202.ljl-hero__title-accent { 203 background: linear-gradient(135deg, #FFD93D 0%, #EFBF04 50%, #B58A00 100%); 204 -webkit-background-clip: text; 205 background-clip: text; 206 color: transparent; 207} 208.ljl-hero__sub { 209 font-size: 1.18rem; 210 color: var(--text-muted); 211 line-height: 1.55; 212 max-width: 640px; 213 margin: 0 auto 36px; 214} 215.ljl-hero__ctas { 216 display: flex; 217 justify-content: center; 218 gap: 14px; 219 flex-wrap: wrap; 220} 221.ljl-hero__signal { 222 margin-top: 22px; 223 font-size: 0.82rem; 224 color: var(--text-dim); 225} 226.ljl-hero__signal strong { color: var(--text); font-weight: 600; } 227 228/* Official-partner card â a glass credential frame (replaces the old round seal). 229 Reads as a credential, not a sticker: dark glass, gold gradient hairline 230 border, two large broker logos each with its own caption + status. Tradovate 231 auto-import is LIVE; NinjaTrader is still in development. Sits in the empty 232 right gutter of the hero, beside the subtitle / CTA. */ 233.ljl-nt-sticker { 234 position: relative; z-index: 6; 235 margin: 28px auto 4px; 236 width: fit-content; max-width: 92%; 237 display: flex; flex-direction: row; align-items: center; gap: 18px; flex-wrap: wrap; justify-content: center; 238 padding: 18px 20px 20px; 239 border-radius: 18px; 240 text-decoration: none; cursor: pointer; 241 background: 242 linear-gradient(180deg, rgba(24,24,27,.94), rgba(12,12,14,.94)) padding-box, 243 linear-gradient(135deg, rgba(var(--gold-rgb),.85), rgba(var(--gold-rgb),.15) 45%, rgba(255,255,255,.06)) border-box; 244 border: 1px solid transparent; 245 box-shadow: 0 18px 44px rgba(0,0,0,.5), inset 0 1px 0 rgba(255,255,255,.05); 246 backdrop-filter: blur(6px); 247 transition: transform .18s ease, box-shadow .18s ease; 248} 249.ljl-nt-sticker:hover { 250 transform: translateY(-3px); 251 box-shadow: 0 22px 52px rgba(0,0,0,.55), 0 0 0 1px rgba(var(--gold-rgb),.25); 252} 253.ljl-nt-sticker__brand { 254 font-size: 0.62rem; font-weight: 700; letter-spacing: .14em; 255 color: var(--text-dim); text-transform: uppercase; white-space: nowrap; 256} 257.ljl-nt-sticker__logos { 258 display: flex; align-items: flex-start; justify-content: center; gap: 14px; 259 width: 100%; 260} 261.ljl-nt-sticker__item { 262 display: flex; flex-direction: column; align-items: center; gap: 8px; 263 flex: 1; text-align: center; 264} 265.ljl-nt-sticker__logo { 266 width: 58px; height: 58px; border-radius: 13px; display: block; 267 box-shadow: 0 0 0 1px rgba(255,255,255,.14), 0 4px 12px rgba(0,0,0,.45); 268 background: #000; 269} 270.ljl-nt-sticker__name { 271 font-size: 0.82rem; font-weight: 800; color: #fff; letter-spacing: -.01em; 272 line-height: 1; 273} 274.ljl-nt-sticker__state { 275 display: inline-flex; align-items: center; gap: 5px; 276 font-size: 0.6rem; font-weight: 700; letter-spacing: .06em; 277 text-transform: uppercase; white-space: nowrap; 278 color: var(--text-dim); 279 background: rgba(255,255,255,.05); 280 border: 1px solid rgba(255,255,255,.09); 281 border-radius: 999px; padding: 4px 9px; 282} 283.ljl-nt-sticker__state--live { 284 color: #34d399; 285 background: rgba(34,197,94,.1); 286 border-color: rgba(34,197,94,.28); 287} 288.ljl-nt-sticker__state--live::before { 289 content: ""; width: 6px; height: 6px; border-radius: 50%; 290 background: #22c55e; box-shadow: 0 0 0 3px rgba(34,197,94,.22); 291 animation: ljl-nt-pulse 2s ease-in-out infinite; 292} 293@keyframes ljl-nt-pulse { 294 0%, 100% { opacity: 1; box-shadow: 0 0 0 3px rgba(34,197,94,.22); } 295 50% { opacity: .55; box-shadow: 0 0 0 5px rgba(34,197,94,.06); } 296} 297@media (max-width: 980px) { 298 .ljl-nt-sticker { position: static; margin: 0 auto 26px; width: 300px; } 299} 300@media (max-width: 480px) { 301 .ljl-nt-sticker { width: 100%; max-width: 320px; } 302} 303 304/* Hero product mockup */ 305.ljl-hero__mockup-wrap { 306 margin-top: 64px; 307 position: relative; 308 z-index: 1; 309} 310.ljl-hero__mockup { 311 position: relative; 312 border-radius: 14px; 313 border: 1px solid var(--border-strong); 314 background: var(--bg-card); 315 overflow: hidden; 316 box-shadow: 317 0 20px 60px rgba(0,0,0,0.6), 318 0 0 0 1px rgba(var(--gold-rgb), 0.08), 319 0 0 80px rgba(var(--gold-rgb), 0.12); 320} 321.ljl-hero__mockup-bar { 322 display: flex; 323 align-items: center; 324 gap: 7px; 325 padding: 11px 16px; 326 background: var(--bg-elev); 327 border-bottom: 1px solid var(--border); 328} 329.ljl-hero__mockup-dot { width: 11px; height: 11px; border-radius: 50%; background: #3a3a3e; } 330.ljl-hero__mockup-dot:nth-child(1) { background: #ef4444; } 331.ljl-hero__mockup-dot:nth-child(2) { background: #eab308; } 332.ljl-hero__mockup-dot:nth-child(3) { background: #22c55e; } 333.ljl-hero__mockup-img { 334 width: 100%; 335 height: auto; 336 display: block; 337} 338.ljl-hero__mockup-placeholder { 339 padding: 60px 40px; 340 background: linear-gradient(180deg, #131316 0%, #0d0d0f 100%); 341 display: grid; 342 grid-template-columns: 1.4fr 1fr; 343 gap: 24px; 344 min-height: 380px; 345} 346.ljl-mockup-block { 347 background: rgba(255,255,255,0.025); 348 border: 1px solid var(--border); 349 border-radius: 10px; 350 padding: 18px; 351 display: flex; 352 flex-direction: column; 353 gap: 10px; 354} 355.ljl-mockup-pnl { 356 font-family: 'Outfit', sans-serif; 357 font-size: 2rem; 358 font-weight: 800; 359 color: var(--success); 360} 361.ljl-mockup-lbl { font-size: 0.7rem; color: var(--text-dim); text-transform: uppercase; letter-spacing: 0.08em; } 362.ljl-mockup-bars { 363 display: flex; 364 align-items: flex-end; 365 gap: 4px; 366 height: 110px; 367 margin-top: 8px; 368} 369.ljl-mockup-bar { 370 flex: 1; 371 background: linear-gradient(180deg, var(--success), rgba(52, 211, 153, 0.3)); 372 border-radius: 3px; 373} 374.ljl-mockup-bar.neg { background: linear-gradient(180deg, var(--danger), rgba(248, 113, 113, 0.3)); } 375.ljl-mockup-donut { 376 width: 110px; height: 110px; 377 border-radius: 50%; 378 background: conic-gradient(var(--gold) 0% 88%, #475569 88% 100%); 379 margin: 4px auto; 380 position: relative; 381} 382.ljl-mockup-donut::after { 383 content: ''; 384 position: absolute; 385 inset: 22px; 386 background: var(--bg-card); 387 border-radius: 50%; 388} 389.ljl-mockup-row { 390 display: flex; 391 justify-content: space-between; 392 align-items: center; 393 font-size: 0.82rem; 394 padding: 4px 0; 395} 396.ljl-mockup-row + .ljl-mockup-row { border-top: 1px solid rgba(255,255,255,0.04); } 397.ljl-mockup-row span:last-child { color: var(--success); font-weight: 600; font-variant-numeric: tabular-nums; } 398.ljl-mockup-row.neg span:last-child { color: var(--danger); } 399 400/* ---------- Section base ---------- */ 401.ljl-section { padding: 90px 0; position: relative; } 402.ljl-section--tight { padding: 60px 0; } 403.ljl-section__head { text-align: center; margin-bottom: 56px; } 404.ljl-section__eyebrow { 405 font-size: 0.78rem; 406 text-transform: uppercase; 407 letter-spacing: 0.14em; 408 color: var(--gold); 409 font-weight: 700; 410 margin-bottom: 14px; 411} 412.ljl-section__title { 413 font-family: 'Outfit', sans-serif; 414 font-size: clamp(1.8rem, 3.5vw, 2.6rem); 415 font-weight: 700; 416 letter-spacing: -0.02em; 417 line-height: 1.15; 418 margin: 0 0 14px; 419} 420.ljl-section__sub { 421 font-size: 1.04rem; 422 color: var(--text-muted); 423 line-height: 1.5; 424 max-width: 620px; 425 margin: 0 auto; 426} 427 428/* ---------- Pain points ---------- */ 429.ljl-pain { 430 background: linear-gradient(180deg, transparent, rgba(255,255,255,0.015)); 431 border-top: 1px solid var(--border); 432 border-bottom: 1px solid var(--border); 433} 434.ljl-pain__grid { 435 display: grid; 436 grid-template-columns: repeat(3, 1fr); 437 gap: 28px; 438} 439.ljl-pain__card { 440 padding: 32px 26px; 441 background: var(--bg-card); 442 border: 1px solid var(--border); 443 border-radius: 14px; 444 text-align: left; 445} 446.ljl-pain__icon { 447 width: 44px; height: 44px; 448 border-radius: 10px; 449 background: rgba(248, 113, 113, 0.10); 450 border: 1px solid rgba(248, 113, 113, 0.3); 451 color: var(--danger); 452 display: inline-flex; 453 align-items: center; 454 justify-content: center; 455 margin-bottom: 18px; 456} 457.ljl-pain__title { 458 font-family: 'Outfit', sans-serif; 459 font-size: 1.18rem; 460 font-weight: 700; 461 margin: 0 0 8px; 462} 463.ljl-pain__body { 464 color: var(--text-muted); 465 line-height: 1.55; 466 font-size: 0.94rem; 467} 468 469/* ---------- Features grid ---------- */ 470.ljl-features__grid { 471 display: grid; 472 grid-template-columns: repeat(3, 1fr); 473 gap: 18px; 474} 475.ljl-feature { 476 background: var(--bg-card); 477 border: 1px solid var(--border); 478 border-radius: 14px; 479 padding: 26px 24px; 480 transition: border-color .2s ease, transform .2s ease; 481} 482.ljl-feature:hover { 483 border-color: rgba(var(--gold-rgb), 0.32); 484 transform: translateY(-3px); 485} 486.ljl-feature__icon { 487 width: 38px; height: 38px; 488 border-radius: 9px; 489 background: rgba(var(--gold-rgb), 0.10); 490 border: 1px solid rgba(var(--gold-rgb), 0.30); 491 color: var(--gold); 492 display: inline-flex; 493 align-items: center; 494 justify-content: center; 495 margin-bottom: 16px; 496} 497.ljl-feature__title { 498 font-family: 'Outfit', sans-serif; 499 font-size: 1.08rem; 500 font-weight: 700; 501 margin: 0 0 6px; 502} 503.ljl-feature__body { 504 color: var(--text-muted); 505 font-size: 0.9rem; 506 line-height: 1.55; 507} 508
509/* ---------- Showcase (alternating image+text) ---------- */ 510.ljl-showcase { 511 background: linear-gradient(180deg, transparent, rgba(var(--gold-rgb), 0.02), transparent); 512} 513/* Wider container here so the real screenshots read large on big screens. */ 514.ljl-showcase .container { max-width: 1560px; } 515.ljl-showcase__row { 516 display: grid; 517 grid-template-columns: 1.9fr 1fr; 518 gap: 52px; 519 align-items: center; 520 padding: 64px 0; 521} 522.ljl-showcase__row.reverse { grid-template-columns: 1fr 1.9fr; } 523.ljl-showcase__row + .ljl-showcase__row { border-top: 1px solid var(--border); } 524.ljl-showcase__row.reverse .ljl-showcase__media { order: 2; } 525.ljl-showcase__media { 526 border: 1px solid var(--border-strong); 527 border-radius: 12px; 528 overflow: hidden; 529 background: var(--bg-card); 530 box-shadow: 0 24px 60px rgba(0,0,0,0.5); 531} 532/* Real product screenshot â shown at its natural aspect (no squish, no crop). */ 533.ljl-showcase__img { width: 100%; height: auto; display: block; } 534 535/* Before / after â overlapping, staggered composition (more dynamic than a row). */ 536.ljl-ba { padding: 76px 0; border-top: 1px solid var(--border); } 537.ljl-ba__head { text-align: center; max-width: 760px; margin: 0 auto 8px; } 538.ljl-ba__stage { position: relative; max-width: 1180px; margin: 0 auto; aspect-ratio: 16 / 9.4; } 539.ljl-ba__card { 540 position: absolute; width: 64%; border-radius: 12px; overflow: hidden; 541 border: 1px solid var(--border-strong); background: var(--bg-card); 542 box-shadow: 0 30px 70px rgba(0,0,0,0.62); 543} 544.ljl-ba__card img { width: 100%; height: auto; display: block; } 545.ljl-ba__card--before { top: 0; left: 0; z-index: 1; transform: rotate(-1.3deg); } 546.ljl-ba__card--after { bottom: 0; right: 0; z-index: 3; transform: rotate(1.3deg); } 547.ljl-ba__badge { 548 position: absolute; z-index: 4; background: rgba(12,12,15,0.94); 549 border: 1px solid var(--border-strong); border-radius: 10px; padding: 11px 17px; 550 font-size: 0.95rem; color: var(--text-muted); box-shadow: 0 10px 30px rgba(0,0,0,0.55); 551} 552.ljl-ba__badge .ljl-ba__tag { display: block; font-size: 0.66rem; text-transform: uppercase; letter-spacing: 0.6px; color: var(--text-dim); margin-bottom: 3px; } 553.ljl-ba__badge strong { font-size: 1.15rem; } 554.ljl-ba__badge--before { top: 4%; right: 1%; z-index: 2; } 555.ljl-ba__badge--after { bottom: 4%; left: 1%; } 556.ljl-ba__neg strong { color: #ef6a6a; } 557.ljl-ba__pos strong { color: #22c98a; } 558@media (max-width: 900px) { 559 .ljl-ba__stage { aspect-ratio: auto; max-width: 540px; } 560 .ljl-ba__card { position: relative; width: 100%; transform: none; margin: 0 auto 18px; } 561 .ljl-ba__badge { position: static; display: inline-block; margin: -6px 0 22px; } 562} 563.ljl-showcase__eyebrow { 564 font-size: 0.72rem; 565 text-transform: uppercase; 566 letter-spacing: 0.14em; 567 color: var(--gold); 568 font-weight: 700; 569 margin-bottom: 12px; 570} 571.ljl-showcase__title { 572 font-family: 'Outfit', sans-serif; 573 font-size: 1.9rem; 574 font-weight: 700; 575 line-height: 1.15; 576 letter-spacing: -0.02em; 577 margin: 0 0 14px; 578} 579.ljl-showcase__body { 580 color: var(--text-muted); 581 font-size: 1.04rem; 582 line-height: 1.6; 583 margin: 0 0 20px; 584} 585.ljl-showcase__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; } 586.ljl-showcase__list li { 587 display: flex; 588 gap: 10px; 589 align-items: flex-start; 590 color: var(--text); 591 font-size: 0.95rem; 592} 593.ljl-showcase__list li svg { color: var(--gold); flex-shrink: 0; margin-top: 2px; } 594 595/* ---------- Pricing ---------- */ 596.ljl-pricing { 597 background: linear-gradient(180deg, transparent, rgba(var(--gold-rgb), 0.025)); 598 border-top: 1px solid var(--border); 599} 600.ljl-pricing__grid { 601 display: grid; 602 grid-template-columns: repeat(2, minmax(280px, 380px)); 603 justify-content: center; 604 gap: 22px; 605} 606/* P77 â three columns while the Founding plan is live (JS adds the class). */ 607.ljl-pricing__grid.has-founding { 608 grid-template-columns: repeat(3, minmax(260px, 360px)); 609} 610@media (max-width: 1100px) { 611 .ljl-pricing__grid.has-founding { grid-template-columns: repeat(2, minmax(260px, 380px)); } 612} 613@media (max-width: 760px) { 614 .ljl-pricing__grid.has-founding { grid-template-columns: minmax(260px, 380px); } 615} 616/* Default-hidden until /api/founding/status confirms seats. The base 617 .ljl-price-card{display:flex} rule sits LATER in this sheet and used to win 618 the tie â the card leaked onto the page with its placeholder copy. The 619 :not() form outranks it regardless of source order. */
620.ljl-pricing__grid:not(.has-founding) .ljl-price-card--founding { display: none !important; } 621.ljl-pricing__grid.has-founding .ljl-price-card--founding { display: flex; } 622/* While Founding is live it owns the spotlight â annual drops to a plain card 623 (and its badge hides) so the page has ONE featured option, not two. */ 624.ljl-pricing__grid.has-founding .ljl-price-card--annual { 625 border: 1px solid var(--border); 626 box-shadow: none; 627 background: var(--bg-card); 628} 629.ljl-pricing__grid.has-founding .ljl-price-card--annual .ljl-price-card__badge { display: none; } 630.ljl-founding-counter { 631 display: inline-flex; 632 align-items: center; 633 gap: 7px; 634 font-size: 0.78rem; 635 font-weight: 700; 636 color: var(--gold); 637} 638.ljl-founding-counter::before { 639 content: ''; 640 width: 7px; height: 7px; border-radius: 999px; 641 background: var(--gold); 642 animation: ljlFoundPulse 1.8s ease-in-out infinite; 643} 644@keyframes ljlFoundPulse { 645 0%, 100% { opacity: 1; transform: scale(1); } 646 50% { opacity: 0.45; transform: scale(0.8); } 647} 648.ljl-price-card { 649 background: var(--bg-card); 650 border: 1px solid var(--border); 651 border-radius: 16px; 652 padding: 32px 28px; 653 display: flex; 654 flex-direction: column; 655 gap: 20px; 656 position: relative; 657} 658.ljl-price-card--featured { 659 border: 1.5px solid rgba(var(--gold-rgb), 0.6); 660 box-shadow: 0 0 32px rgba(var(--gold-rgb), 0.1); 661 background: linear-gradient(180deg, rgba(var(--gold-rgb), 0.04), var(--bg-card)); 662} 663.ljl-price-card__badge { 664 position: absolute; 665 top: -11px; 666 right: 22px; 667 background: var(--gold); 668 color: #0a0a0c; 669 padding: 4px 10px; 670 border-radius: 5px; 671 font-size: 0.68rem; 672 font-weight: 700; 673 letter-spacing: 0.08em; 674 text-transform: uppercase; 675} 676.ljl-price-card__name { 677 font-family: 'Outfit', sans-serif; 678 font-size: 0.82rem; 679 text-transform: uppercase; 680 letter-spacing: 0.14em; 681 font-weight: 700; 682 color: var(--text-muted); 683} 684.ljl-price-card__price { 685 display: flex; 686 align-items: baseline; 687 gap: 8px; 688} 689.ljl-price-card__amount { 690 font-family: 'Outfit', sans-serif; 691 font-size: 3rem; 692 font-weight: 800; 693 letter-spacing: -0.03em; 694 line-height: 1; 695} 696.ljl-price-card__period { 697 color: var(--text-muted); 698 font-size: 0.95rem; 699} 700.ljl-price-card__desc { 701 color: var(--text-muted); 702 font-size: 0.92rem; 703 line-height: 1.5; 704 margin: 0; 705} 706.ljl-price-card ul { 707 list-style: none; 708 padding: 0; 709 margin: 0; 710 display: flex; 711 flex-direction: column; 712 gap: 11px; 713} 714.ljl-price-card ul li { 715 display: flex; 716 gap: 10px; 717 align-items: flex-start; 718 font-size: 0.93rem; 719} 720.ljl-price-card ul li svg { 721 flex-shrink: 0; 722 margin-top: 2px; 723} 724.ljl-price-card__check { color: var(--success); } 725.ljl-price-card__cross { color: var(--text-dim); } 726.ljl-price-card ul li.is-muted { color: var(--text-dim); } 727.ljl-price-card__cta { margin-top: 8px; } 728 729/* ---------- FAQ ---------- */ 730.ljl-faq__list { 731 max-width: 760px; 732 margin: 0 auto; 733 display: flex; 734 flex-direction: column; 735 gap: 10px; 736} 737.ljl-faq__item { 738 background: var(--bg-card); 739 border: 1px solid var(--border); 740 border-radius: 12px; 741 overflow: hidden; 742} 743.ljl-faq__item summary { 744 list-style: none; 745 cursor: pointer; 746 padding: 20px 24px; 747 display: flex; 748 align-items: center; 749 justify-content: space-between; 750 font-family: 'Outfit', sans-serif; 751 font-size: 1.04rem; 752 font-weight: 600; 753 transition: background .15s ease; 754} 755.ljl-faq__item summary::-webkit-details-marker { display: none; } 756.ljl-faq__item summary:hover { background: rgba(255,255,255,0.02); } 757.ljl-faq__item summary::after { 758 content: ''; 759 width: 12px; height: 12px; 760 border-right: 2px solid var(--text-muted); 761 border-bottom: 2px solid var(--text-muted); 762 transform: rotate(45deg); 763 transition: transform .2s ease; 764 flex-shrink: 0; 765 margin-left: 16px; 766} 767.ljl-faq__item[open] summary::after { transform: rotate(-135deg); } 768.ljl-faq__body { 769 padding: 0 24px 22px; 770 color: var(--text-muted); 771 font-size: 0.96rem; 772 line-height: 1.6; 773} 774 775/* ---------- Final CTA ---------- */ 776.ljl-final-cta { 777 text-align: center; 778 padding: 100px 0; 779 background: radial-gradient(ellipse at center, rgba(var(--gold-rgb), 0.08) 0%, transparent 60%); 780} 781.ljl-final-cta h2 { 782 font-family: 'Outfit', sans-serif; 783 font-size: clamp(2rem, 4vw, 2.8rem); 784 font-weight: 800; 785 margin: 0 0 14px; 786 letter-spacing: -0.02em; 787} 788.ljl-final-cta p { 789 color: var(--text-muted); 790 font-size: 1.1rem; 791 margin: 0 0 32px; 792} 793 794/* ---------- Footer ---------- */ 795.ljl-footer { 796 border-top: 1px solid var(--border); 797 padding: 50px 0 30px; 798 color: var(--text-dim); 799 font-size: 0.88rem; 800} 801.ljl-footer__inner { 802 display: grid; 803 grid-template-columns: 1.5fr 1fr 1fr 1fr; 804 gap: 36px; 805 margin-bottom: 36px; 806} 807.ljl-footer h4 { 808 color: var(--text); 809 font-size: 0.84rem; 810 text-transform: uppercase; 811 letter-spacing: 0.10em; 812 margin: 0 0 14px; 813 font-weight: 700; 814} 815.ljl-footer ul { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 8px; } 816.ljl-footer ul a:hover { color: var(--text); } 817.ljl-footer__brand p { margin: 8px 0 0; max-width: 280px; line-height: 1.55; } 818.ljl-footer__disclosure { 819 margin: 28px 0 0; padding-top: 22px; 820 border-top: 1px solid var(--border); 821 font-size: 0.72rem; line-height: 1.6; color: var(--text-dim, #6b6b73); 822} 823.ljl-footer__disclosure strong { color: var(--text-secondary, #9aa0a6); font-weight: 700; } 824.ljl-footer__disclosure a { color: var(--text-secondary, #9aa0a6); text-decoration: underline; } 825.ljl-footer__bottom { 826 display: flex; 827 justify-content: space-between; 828 align-items: center; 829 padding-top: 24px; 830 border-top: 1px solid var(--border); 831} 832 833/* ---------- Responsive ---------- */ 834@media (max-width: 920px) { 835 .ljl-nav__links { display: none; } 836 .ljl-hero__mockup-placeholder { grid-template-columns: 1fr; } 837 .ljl-pain__grid { grid-template-columns: 1fr; } 838 .ljl-features__grid { grid-template-columns: 1fr 1fr; } 839 .ljl-showcase__row { grid-template-columns: 1fr; gap: 32px; } 840 .ljl-showcase__row.reverse .ljl-showcase__media { order: 0; } 841 .ljl-pricing__grid { grid-template-columns: minmax(0, 480px); } 842 .ljl-footer__inner { grid-template-columns: 1fr 1fr; } 843} 844@media (max-width: 560px) { 845 .ljl-features__grid { grid-template-columns: 1fr; } 846 .ljl-footer__inner { grid-template-columns: 1fr; } 847 .ljl-footer__bottom { flex-direction: column; gap: 12px; align-items: flex-start; } 848} 849/* ---------- Edge Finder flagship ---------- */
850.ljl-edge { background: radial-gradient(1200px 500px at 50% 0%, rgba(var(--gold-rgb), 0.05), transparent 70%); } 851.ljl-section__eyebrow--gold { color: var(--gold); } 852.ljl-edge__mockup { 853 border: 1px solid var(--border-strong); 854 border-radius: 16px; 855 overflow: hidden; 856 box-shadow: 0 30px 80px rgba(0,0,0,0.55), 0 0 0 1px rgba(var(--gold-rgb), 0.08); 857 margin: 40px auto 36px; 858 max-width: 1080px; 859} 860.ljl-edge__points { 861 display: grid; 862 grid-template-columns: repeat(3, minmax(0, 1fr)); 863 gap: 22px; 864 max-width: 1080px; 865 margin: 0 auto; 866} 867.ljl-edge__point { 868 background: var(--bg-card); 869 border: 1px solid var(--border); 870 border-radius: 14px; 871 padding: 20px 22px; 872} 873.ljl-edge__point-title { font-weight: 700; margin-bottom: 8px; color: var(--gold); font-size: 0.98rem; } 874.ljl-edge__point p { margin: 0; color: var(--text-muted); font-size: 0.92rem; line-height: 1.55; } 875@media (max-width: 860px) { .ljl-edge__points { grid-template-columns: 1fr; } } 876 877/* ---------- Testimonials ---------- */ 878.ljl-quotes__grid { 879 display: grid; 880 grid-template-columns: repeat(3, minmax(0, 1fr)); 881 gap: 22px; 882} 883.ljl-quote { 884 margin: 0; 885 background: var(--bg-card); 886 border: 1px solid var(--border); 887 border-radius: 14px; 888 padding: 24px; 889 display: flex; 890 flex-direction: column; 891 gap: 14px; 892} 893.ljl-quote blockquote { margin: 0; color: var(--text); font-size: 0.96rem; line-height: 1.6; } 894.ljl-quote figcaption { color: var(--text-dim); font-size: 0.86rem; } 895.ljl-quote figcaption strong { color: var(--text-muted); } 896@media (max-width: 860px) { .ljl-quotes__grid { grid-template-columns: 1fr; } } 897/* inline CTA between sections */ 898.ljl-inline-cta { display: flex; align-items: center; justify-content: center; gap: 16px; margin: 34px 0 6px; flex-wrap: wrap; } 899.ljl-inline-cta span { color: var(--text-dim); font-size: 0.88rem; } 900/* honest-example note under the before/after intro */ 901.ljl-ba__note { display: block; margin-top: 10px; color: var(--text-dim); font-size: 0.82rem; font-style: normal; } 902/* footer column titles (h3 for outline, old h4 look) */ 903.ljl-footer__h { font-size: 0.9rem; font-weight: 700; color: var(--text); margin: 0 0 14px; } 904/* screenshots: skeleton background so a not-yet-loaded image never reads as a void */ 905.ljl-showcase__media, .ljl-edge__mockup, .ljl-hero__mockup { background: var(--bg-elev); } 906.ljl-showcase__img { width: 100%; height: auto; } 907/* ---------- hero fact strip ---------- */ 908.ljl-facts { display: flex; align-items: center; justify-content: center; gap: 18px; flex-wrap: wrap; 909 margin: 30px auto 4px; } 910.ljl-fact { color: var(--text-dim); font-size: 0.88rem; white-space: nowrap; } 911.ljl-fact strong { color: var(--text-muted); font-weight: 650; } 912.ljl-fact__sep { width: 4px; height: 4px; border-radius: 50%; background: rgba(255,255,255,0.22); } 913@media (max-width: 640px) { .ljl-fact__sep { display: none; } .ljl-facts { gap: 10px 18px; } } 914 915/* ---------- interactive Edge Finder demo ---------- */ 916.ljl-ed { max-width: 1080px; margin: 40px auto 36px; border: 1px solid var(--border-strong); 917 border-radius: 16px; background: var(--bg-card); padding: 20px 22px 16px; 918 box-shadow: 0 30px 80px rgba(0,0,0,0.55), 0 0 0 1px rgba(var(--gold-rgb), 0.08); } 919.ljl-ed__topbar { display: flex; align-items: center; gap: 10px; color: var(--text-muted); 920 font-size: 0.88rem; padding-bottom: 14px; border-bottom: 1px solid var(--border); } 921.ljl-ed__topbar strong { color: var(--gold); } 922.ljl-ed__live-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--gold); flex: none; 923 animation: ljlEdPulse 2s ease-in-out infinite; } 924@keyframes ljlEdPulse { 0%,100% { box-shadow: 0 0 0 0 rgba(var(--gold-rgb), 0.45); } 50% { box-shadow: 0 0 0 7px rgba(var(--gold-rgb), 0); } } 925.ljl-ed__baseline { color: var(--text-muted); font-size: 0.9rem; margin: 14px 0 16px; } 926.ljl-ed__baseline strong { color: var(--text); } 927.ljl-ed__cols { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; } 928@media (max-width: 780px) { .ljl-ed__cols { grid-template-columns: 1fr; } } 929.ljl-ed__colhead { font-size: 0.72rem; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; margin-bottom: 10px; } 930.ljl-ed__colhead--good { color: var(--success); } 931.ljl-ed__colhead--bad { color: var(--danger); } 932.ljl-ed-card { border: 1px solid var(--border); border-left: 3px solid var(--border-strong); 933 border-radius: 12px; background: var(--bg-elev); padding: 14px 16px; margin-bottom: 12px; 934 cursor: pointer; transition: border-color .15s ease, transform .12s ease; } 935.ljl-ed-card:hover { transform: translateY(-1px); border-color: var(--border-strong); } 936.ljl-ed-card--good { border-left-color: var(--success); } 937.ljl-ed-card--bad { border-left-color: var(--danger); } 938.ljl-ed-card__pill { display: inline-block; font-size: 0.62rem; font-weight: 800; letter-spacing: 0.07em; 939 border-radius: 5px; padding: 2px 7px; margin-right: 8px; vertical-align: 1px; } 940.ljl-ed-card--good .ljl-ed-card__pill { background: rgba(52,211,153,0.15); color: var(--success); } 941.ljl-ed-card--bad .ljl-ed-card__pill { background: rgba(248,113,113,0.15); color: var(--danger); } 942.ljl-ed-card__dim { color: var(--text-dim); font-size: 0.72rem; letter-spacing: 0.05em; text-transform: uppercase; } 943.ljl-ed-card__label { font-weight: 700; color: var(--text); margin: 7px 0 3px; font-size: 1.02rem; } 944.ljl-ed-card__r { font-size: 1.45rem; font-weight: 800; } 945.ljl-ed-card--good .ljl-ed-card__r { color: var(--success); } 946.ljl-ed-card--bad .ljl-ed-card__r { color: var(--danger); } 947.ljl-ed-card__vs { color: var(--text-dim); font-size: 0.8rem; margin-left: 8px; } 948.ljl-ed-card__meta { color: var(--text-muted); font-size: 0.82rem; margin-top: 4px; } 949.ljl-ed-card__meta b { color: var(--text); font-weight: 650; } 950.ljl-ed-card__hint { color: var(--text-dim); font-size: 0.76rem; margin-top: 8px; } 951.ljl-ed-card.is-open .ljl-ed-card__hint { display: none; } 952.ljl-ed-drill { display: none; margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--border); } 953.ljl-ed-card.is-open .ljl-ed-drill { display: block; } 954.ljl-ed-drill__spark { width: 100%; height: 64px; display: block; } 955.ljl-ed-drill__caption { color: var(--text-dim); font-size: 0.74rem; margin: 4px 0 10px; } 956.ljl-ed-trades { width: 100%; border-collapse: collapse; font-size: 0.82rem; } 957.ljl-ed-trades td { padding: 4px 6px; color: var(--text-muted); border-top: 1px solid var(--border); } 958.ljl-ed-trades td:last-child { text-align: right; font-variant-numeric: tabular-nums; font-weight: 650; } 959.ljl-ed-trades .pos { color: var(--success); } .ljl-ed-trades .neg { color: var(--danger); } 960.ljl-ed__foot { margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--border); 961 color: var(--text-dim); font-size: 0.84rem; display: flex; justify-content: space-between; gap: 12px; flex-wrap: wrap; } 962.ljl-ed__foot a { color: var(--gold); font-weight: 650; } 963</style> 964<!-- Whop Pixel â attribution for the lijournal.com â whop.com checkout funnel. 965 LANDING ONLY (deliberate): the logged-in app carries users' trading data 966 and gets no ad pixel. Snippet is verbatim from the Whop dashboard/docs
967 (docs.whop.com/developer/ads/pixel) â do not reformat. Requires 968 https://t.whop.tw in the server CSP script-src (proxy.js). -->
969<script>!function(w,d,s,u,n,a,b){if(w[n])return;a=w[n]={q:[],t:+new Date,s:[],o:u,track:function(){a.q.push([+new Date].concat([].slice.call(arguments)))},setScope:function(){a.s=[].slice.call(arguments).filter(function(x){return typeof x==="string"});a.q.push([+new Date,"setScope"].concat(a.s))},scope:function(){var c=[].slice.call(arguments);return{track:function(){a.q.push([+new Date].concat([].slice.call(arguments)).concat([{__scope:c}]))}}}};b=d.createElement(s);b.async=1;b.src=u+"/s.js";d.getElementsByTagName(s)[0].parentNode.insertBefore(b,d.getElementsByTagName(s)[0])}(window,document,"script","https://t.whop.tw","whop");whop.setScope("biz_aeRpjJcMkveYqc");whop.track("page");</script>
969 970</head> 971<body> 972<!-- NOTICE TO AUTOMATED AGENTS: LiJournal is proprietary software. Scraping, 973 mirroring, reverse-engineering, AI training, or reconnaissance/cloning of 974 this product for competitive purposes is prohibited. See /ai.txt and the 975 Terms of Service (/legal/terms.html §6). --> 976<div data-ai-notice="proprietary; no-scrape; no-ai-training; no-agent-recon" 977 style="position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;padding:0;margin:-1px" aria-hidden="true"> 978 LiJournal is proprietary software. Automated scraping, AI training, and 979 reconnaissance or cloning of this product for competitive use are prohibited. 980 See lijournal.com/ai.txt and the Terms of Service. 981</div> 982 983<!-- ============== NAV ============== --> 984<nav class="ljl-nav"> 985 <div class="container ljl-nav__inner"> 986 <a href="/" class="ljl-logo">LiJournal</a> 987 <div class="ljl-nav__links"> 988 <a href="#features">Features</a> 989 <a href="#pricing">Pricing</a> 990 <a href="#faq">FAQ</a> 991 </div> 992 <div class="ljl-nav__cta"> 993 <a href="/app?login=1" class="ljl-btn ljl-btn--ghost">Log in</a> 994 <a href="/app?signup=1" class="ljl-btn ljl-btn--primary">Get started</a> 995 </div> 996 </div> 997</nav> 998 999<!-- ============== HERO ============== --> 1000<section class="ljl-hero"> 1001 <div class="container ljl-hero__inner"> 1002 <!-- Official-partner badge â Tradovate AND NinjaTrader are both LIVE 1003 (auto-import; Tradovate also full history). Wrapped in the approved 1004 NinjaTrader vendor affiliate link (impact.com) per the vendor 1005 guideline. rel="sponsored" marks it as a paid/affiliate link. --> 1006 <div class="ljl-hero__eyebrow"> 1007 <span class="ljl-hero__eyebrow-dot"></span> 1008 <span>Built for futures traders</span> 1009 </div> 1010 <h1 class="ljl-hero__title"> 1011 Your edge is already in your history. <span class="ljl-hero__title-accent">
1011LiJournal finds it.</span> 1012 </h1> 1013 <p class="ljl-hero__sub"> 1014 Connect Tradovate or NinjaTrader — your trades import themselves. 1015 <strong>Edge Finder</strong> shows where you actually make money. 1016 No tagging. No spreadsheets. 1017 </p> 1018 <div class="ljl-hero__ctas"> 1019 <a href="/app?signup=1" class="ljl-btn ljl-btn--primary ljl-btn--lg">Start free trial â</a> 1020 <a href="#pricing" class="ljl-btn ljl-btn--ghost ljl-btn--lg">See pricing</a> 1021 </div> 1022 <div class="ljl-hero__signal"> 1023 <strong>14-day free trial.</strong> Cancel anytime before it ends — pay nothing. 1024 </div> 1025 1026 <a class="ljl-nt-sticker" href="https://ninjatraderdomesticvendor.sjv.io/AgRv6j" 1027 target="_blank" rel="sponsored noopener noreferrer" 1028 aria-label="Official Tradovate and NinjaTrader partner â auto-import live on both (affiliate link)"> 1029 <span class="ljl-nt-sticker__brand">Official broker partners</span> 1030 <span class="ljl-nt-sticker__logos"> 1031 <span class="ljl-nt-sticker__item"> 1032 <img src="img/brokers/tradovate-512.jpg" alt="Tradovate" class="ljl-nt-sticker__logo"> 1033 <span class="ljl-nt-sticker__name">Tradovate</span> 1034 <span class="ljl-nt-sticker__state ljl-nt-sticker__state--live">Auto-import</span> 1035 </span> 1036 <span class="ljl-nt-sticker__item"> 1037 <img src="img/brokers/ninjatrader-512.jpg" alt="NinjaTrader" class="ljl-nt-sticker__logo"> 1038 <span class="ljl-nt-sticker__name">NinjaTrader</span> 1039 <span class="ljl-nt-sticker__state ljl-nt-sticker__state--live">Auto-import</span> 1040 </span> 1041 </span> 1042 </a> 1043 1044 <div class="ljl-facts"> 1045 <span class="ljl-fact"><strong>Tradovate & NinjaTrader</strong> live auto-import</span> 1046 <span class="ljl-fact__sep"></span> 1047 <span class="ljl-fact"><strong>NQ · ES + micros</strong> on real charts</span> 1048 <span class="ljl-fact__sep"></span> 1049 <span class="ljl-fact"><strong>1-second</strong> replay data</span> 1050 <span class="ljl-fact__sep"></span> 1051 <span class="ljl-fact"><strong>Zero tagging</strong> analytics</span> 1052 </div> 1053 1054 <!-- Hero product mockup --> 1055 <div class="ljl-hero__mockup-wrap"> 1056 <div class="ljl-hero__mockup"> 1057 <div class="ljl-hero__mockup-bar"> 1058 <span class="ljl-hero__mockup-dot"></span> 1059 <span class="ljl-hero__mockup-dot"></span> 1060 <span class="ljl-hero__mockup-dot"></span> 1061 </div> 1062 <img class="ljl-hero__mockup-img" src="assets/landing/dashboard.jpg?v=4" width="1920" height="1080" fetchpriority="high" alt="LiJournal dashboard â net P&L, win rate, R:R, expectancy, equity curve and your top prescriptive insight"> 1063 </div> 1064 </div> 1065 </div> 1066</section> 1067 1068<!-- ============== PAIN POINTS ============== --> 1069<section class="ljl-section ljl-pain"> 1070 <div class="container"> 1071 <div class="ljl-section__head"> 1072 <div class="ljl-section__eyebrow">Why you need this</div> 1073 <h2 class="ljl-section__title">You can’t fix what you can’t see</h2> 1074 <p class="ljl-section__sub"> 1075 Most traders don’t lose on strategy. They lose on repeating the same mistakes — without noticing. 1076 </p> 1077 </div> 1078 <div class="ljl-pain__grid"> 1079 <div class="ljl-pain__card"> 1080 <div class="ljl-pain__icon"> 1081 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg> 1082 </div> 1083 <h3 class="ljl-pain__title">You forget what worked</h3> 1084 <p class="ljl-pain__body">That setup that printed last month? Lost in a screenshots folder. The pattern slips through.</p> 1085 </div> 1086 <div class="ljl-pain__card"> 1087 <div class="ljl-pain__icon"> 1088 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="23 4 23 10 17 10"></polyline><path d="M20.49 15a9 9 0 1 1-2.12-9.36L23 10"></path></svg> 1089 </div> 1090 <h3 class="ljl-pain__title">You repeat the same mistakes</h3> 1091 <p class="ljl-pain__body">
1091Chasing entries, moving stops, FOMO. You know you do it — you don’t know what it costs.</p> 1092 </div> 1093 <div class="ljl-pain__card"> 1094 <div class="ljl-pain__icon"> 1095 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 3v18h18"></path><path d="M18 8l-5 5-4-4-3 3"></path></svg> 1096 </div> 1097 <h3 class="ljl-pain__title">You can’t see your real edge</h3> 1098 <p class="ljl-pain__body">Best hour? Best setup? Real win rate? Without a journal, your edge is a feeling — not a fact.</p> 1099 </div> 1100 </div> 1101 </div> 1102</section> 1103 1104<!-- ============== EDGE FINDER (flagship) ============== --> 1105<section class="ljl-section ljl-edge" id="edge"> 1106 <div class="container"> 1107 <div class="ljl-section__head"> 1108 <div class="ljl-section__eyebrow ljl-section__eyebrow--gold">Edge Finder</div> 1109 <h2 class="ljl-section__title">Where you make money — and where you leak it</h2> 1110 <p class="ljl-section__sub"> 1111 Every trade gets its market context on import — time of day, trend, volatility. 1112 Edge Finder reads your history and shows where the money comes from. And where it goes. 1113 </p> 1114 </div> 1115 <div class="ljl-ed" id="ljl-edge-demo"> 1116 <div class="ljl-ed__topbar"> 1117 <span class="ljl-ed__live-dot"></span> 1118 <span><strong>Live demo</strong> — a sample journal, 160 trades. Click a card.</span> 1119 </div> 1120 <div class="ljl-ed__baseline" id="ljl-ed-baseline"></div> 1121 <div class="ljl-ed__cols"> 1122 <div class="ljl-ed__col"> 1123 <div class="ljl-ed__colhead ljl-ed__colhead--good">Better than baseline</div> 1124 <div id="ljl-ed-good"></div> 1125 </div> 1126 <div class="ljl-ed__col"> 1127 <div class="ljl-ed__colhead ljl-ed__colhead--bad">Worse than baseline</div> 1128 <div id="ljl-ed-bad"></div> 1129 </div> 1130 </div> 1131 <div class="ljl-ed__foot"> 1132 <span>A sample journal — your numbers will be your own.</span> 1133 <a href="/app?signup=1">Run it on your trades →</a> 1134 </div> 1135 <noscript> 1136 <img src="assets/landing/edge-finder.jpg?v=4" width="1920" height="1080" loading="lazy" 1137 alt="Edge Finder â EDGE and LEAK cards computed from the trader's own history, each with sample size and win rate"> 1138 </noscript> 1139 </div> 1140 <div class="ljl-edge__points"> 1141 <div class="ljl-edge__point"> 1142 <div class="ljl-edge__point-title">No false patterns</div> 1143 <p>If a pattern is just luck, you won’t see it. And when nothing stands out — 1144 it tells you that too.</p> 1145 </div> 1146 <div class="ljl-edge__point"> 1147 <div class="ljl-edge__point-title">Your edge, right now</div> 1148 <p>It’s 10:30 New York? Here’s how <em>you</em> trade this exact hour — 1149 from your own history.</p> 1150 </div> 1151 <div class="ljl-edge__point"> 1152 <div class="ljl-edge__point-title">One thing to fix</div> 1153 <p>Analytics opens with a single recommendation: your biggest leak, in plain English.</p> 1154 </div> 1155 </div> 1156 <div class="ljl-inline-cta"> 1157 <a href="/app?signup=1" class="ljl-btn ljl-btn--primary ljl-btn--lg">Start free trial →</a> 1158 <span>14 days free · cancel anytime</span> 1159 </div> 1160 </div> 1161</section> 1162 1163<!-- ============== FEATURES ============== --> 1164<section class="ljl-section ljl-features" id="features"> 1165 <div class="container"> 1166 <div class="ljl-section__head"> 1167 <div class="ljl-section__eyebrow">What you get</div> 1168 <h2 class="ljl-section__title">Built for the way traders actually work</h2> 1169 <p class="ljl-section__sub"> 1170 Everything you need to find your edge. Nothing you don’t. 1171 </p> 1172 </div> 1173 <div class="ljl-features__grid"> 1174 <div class="ljl-feature"> 1175 <div class="ljl-feature__icon"> 1176 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="7" height="7" rx="1"></rect><rect x="14" y="3" width="7" height="7" rx="1"></rect><rect x="3" y="14" width="7" height="7" rx="1"></rect><rect x="14" y="14" width="7" height="7" rx="1"></rect></svg> 1177 </div> 1178 <h3 class="ljl-feature__title">Premium Dashboard</h3> 1179 <p class="ljl-feature__body">Net P&L, win rate, R:R, drawdown — your account at a glance.</p> 1180 </div> 1181 <div class="ljl-feature"> 1182 <div class="ljl-feature__icon"> 1183 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"></path><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"></path></svg> 1184 </div> 1185 <h3 class="ljl-feature__title">Trade-by-trade Journal</h3> 1186 <p class="ljl-feature__body">A calendar of your months. Click any trade — chart, plan, notes.</p> 1187 </div> 1188 <div class="ljl-feature"> 1189 <div class="ljl-feature__icon"> 1190 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="20" x2="18" y2="10"></line><line x1="12" y1="20" x2="12" y2="4"></line><line x1="6" y1="20" x2="6" y2="14"></line></svg> 1191 </div> 1192 <h3 class="ljl-feature__title">Analytics that talk back</h3> 1193 <p class="ljl-feature__body">Opens with one recommendation: your biggest leak, in plain English. The numbers follow.</p> 1194 </div> 1195 <div class="ljl-feature"> 1196 <div class="ljl-feature__icon"> 1197 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg> 1198 </div> 1199 <h3 class="ljl-feature__title">Quality scoring</h3> 1200 <p class="ljl-feature__body">Winners rated against the ideal exit, losers against the ideal stop. Luck separated from skill.</p> 1201 </div> 1202 <div class="ljl-feature"> 1203 <div class="ljl-feature__icon"> 1204 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="6" height="6" rx="1"></rect><rect x="15" y="3" width="6" height="6" rx="1"></rect><rect x="9" y="9" width="6" height="6" rx="1"></rect><rect x="3" y="15" width="6" height="6" rx="1"></rect><rect x="15" y="15" width="6" height="6" rx="1"></rect></svg> 1205 </div> 1206 <h3 class="ljl-feature__title">Strategy profiles</h3> 1207 <p class="ljl-feature__body">Tag a trade with its setup — each strategy gets its own scorecard and its own tab in Analytics.</p> 1208 </div> 1209 <div class="ljl-feature"> 1210 <div class="ljl-feature__icon"> 1211 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z"></path><line x1="7" y1="7" x2="7.01" y2="7"></line></svg> 1212 </div> 1213 <h3 class="ljl-feature__title">Multi-account & Copy-trader</h3> 1214 <p class="ljl-feature__body">All your prop accounts in one journal — one at a time, or blended in the copy-trader view.</p> 1215 </div> 1216 <div class="ljl-feature"> 1217 <div class="ljl-feature__icon"> 1218 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"></circle><path d="M12 1v4M12 19v4M4.22 4.22l2.83 2.83M16.95 16.95l2.83 2.83M1 12h4M19 12h4M4.22 19.78l2.83-2.83M16.95 7.05l2.83-2.83"></path></svg> 1219 </div> 1220 <h3 class="ljl-feature__title">Market context, automatic</h3> 1221 <p class="ljl-feature__body">Time of day, trend, volatility, VWAP — added to every trade automatically. The chips just appear.</p> 1222 </div> 1223 <div class="ljl-feature"> 1224 <div class="ljl-feature__icon"> 1225 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8"></path><polyline points="16 6 12 2 8 6"></polyline><line x1="12" y1="2" x2="12" y2="15"></line></svg> 1226 </div> 1227 <h3 class="ljl-feature__title">Share any trade</h3> 1228 <p class="ljl-feature__body">Any trade as a clean image or a GIF of the move — ready for Discord or X.</p> 1229 </div> 1230 <div class="ljl-feature"> 1231 <div class="ljl-feature__icon"> 1232 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="5 3 19 12 5 21 5 3"></polygon></svg> 1233 </div> 1234 <h3 class="ljl-feature__title">Bar Replay</h3> 1235 <p class="ljl-feature__body">Replay any session with the future hidden. 2× to 20×, or scrub by hand.</p> 1236 </div> 1237 </div> 1238 </div> 1239</section> 1240 1241<!-- ============== SHOWCASE ============== --> 1242<section class="ljl-section ljl-showcase"> 1243 <div class="container"> 1244 <!-- BEFORE / AFTER â the transformation story (research: honest, specific, "trader like me") --> 1245 <div class="ljl-ba"> 1246 <div class="ljl-ba__head"> 1247 <div class="ljl-showcase__eyebrow">The journal in action</div> 1248 <h3 class="ljl-showcase__title">See the leak. Fix it. Watch the months change.</h3> 1249 <p class="ljl-showcase__body"> 1250 A month bleeding on oversized losers — and the months after the leak is fixed. 1251 <em class="ljl-ba__note">Illustrative example, simulated data.</em> 1252 </p> 1253 </div> 1254 <div class="ljl-ba__stage"> 1255 <figure class="ljl-ba__card ljl-ba__card--before"> 1256 <img src="assets/landing/journal_before.jpg" width="1920" height="1080" loading="lazy" alt="Early month before the fix â net -$1,295, red days, oversized losers"> 1257 </figure> 1258 <div class="ljl-ba__badge ljl-ba__badge--before ljl-ba__neg">
1259 <span class="ljl-ba__tag">Before</span>oversized losers · red weeks 1260 </div> 1261 <figure class="ljl-ba__card ljl-ba__card--after"> 1262 <img src="assets/landing/journal_after.jpg" width="1920" height="1080" loading="lazy" alt="Later month after the fix â net +$3,260, mostly green days"> 1263 </figure> 1264 <div class="ljl-ba__badge ljl-ba__badge--after ljl-ba__pos"> 1265 <span class="ljl-ba__tag">After</span>losses capped at plan · green weeks 1266 </div> 1267 </div> 1268 </div> 1269 1270 <div class="ljl-inline-cta"> 1271 <a href="/app?signup=1" class="ljl-btn ljl-btn--primary ljl-btn--lg">Start free trial →</a> 1272 <span>14 days free · cancel anytime</span> 1273 </div> 1274 1275 <div class="ljl-showcase__row reverse"> 1276 <div class="ljl-showcase__media"> 1277 <img class="ljl-showcase__img" src="assets/landing/gallery.jpg?v=5" width="1920" height="1080" loading="lazy" alt="LiJournal Trades view â every trade as a card with its live chart, entry/target/stop levels, R:R and efficiency score"> 1278 </div> 1279 <div> 1280 <div class="ljl-showcase__eyebrow">Every trade</div> 1281 <h3 class="ljl-showcase__title">Not just totals — every trade on its own card</h3> 1282 <p class="ljl-showcase__body"> 1283 Every trade lands as a card: its real chart, your plan drawn on it, an honest score. 1284 </p> 1285 <ul class="ljl-showcase__list"> 1286 <li><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Live chart with your entry, target & stop drawn in</li> 1287 <li><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Automatic R:R & efficiency score on every trade</li> 1288 <li><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Flags the trades that still need your call</li> 1289 </ul> 1290 </div> 1291 </div> 1292 1293 <div class="ljl-showcase__row"> 1294 <div class="ljl-showcase__media"> 1295 <img class="ljl-showcase__img" src="assets/landing/trade-modal.jpg?v=5" width="1920" height="1080" loading="lazy" alt="LiJournal trade debrief â the 8-step wizard on a real chart with automatic context chips: New York 10:00, high vol, below VWAP"> 1296 </div> 1297 <div> 1298 <div class="ljl-showcase__eyebrow">The debrief</div> 1299 <h3 class="ljl-showcase__title">Eight steps, and the trade has nowhere to hide</h3> 1300 <p class="ljl-showcase__body"> 1301 Walk any trade through the wizard: your plan on the chart, your exit vs the ideal one, 1302 good call or bad — separate from win or loss. 1303 </p> 1304 <ul class="ljl-showcase__list"> 1305 <li><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> How much heat you took — measured, not guessed</li> 1306 <li><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Drag your shoulda-stop and shoulda-target right on the chart</li> 1307 <li><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> A lucky win marked “bad process” is a lesson, not a trophy</li> 1308 </ul> 1309 </div> 1310 </div> 1311 1312 <div class="ljl-showcase__row"> 1313 <div class="ljl-showcase__media"> 1314 <img class="ljl-showcase__img" src="assets/landing/analytics.jpg?v=4" width="1920" height="1080" loading="lazy" alt="LiJournal analytics â journal completeness, biggest leak, key metrics and performance gauges"> 1315 </div> 1316 <div> 1317 <div class="ljl-showcase__eyebrow">Analytics</div> 1318 <h3 class="ljl-showcase__title">Edge over time, not just headline numbers</h3> 1319 <p class="ljl-showcase__body">
1320 Equity curves, win rate, efficiency — by period, symbol and setup. 1321 </p> 1322 <ul class="ljl-showcase__list"> 1323 <li><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Every panel has its own period switch</li> 1324 <li><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> See how your winners and losers are sized</li> 1325 <li><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Four gauges: win rate, R:R, good %, efficiency</li> 1326 </ul> 1327 </div> 1328 </div> 1329 1330 <div class="ljl-showcase__row reverse"> 1331 <div class="ljl-showcase__media"> 1332 <img class="ljl-showcase__img" src="assets/landing/strategies.jpg?v=4" width="1920" height="1080" loading="lazy" alt="LiJournal Strategies tab â every setup as its own profile card with one of its trades on a chart and a live scorecard: win rate, avg R:R, avg win and net P&L"> 1333 </div> 1334 <div> 1335 <div class="ljl-showcase__eyebrow">Strategies</div> 1336 <h3 class="ljl-showcase__title">Every setup you trade, profiled</h3> 1337 <p class="ljl-showcase__body"> 1338 Tag the setup — the strategy builds itself: scorecard, its trades on a chart, its own 1339 tab in Analytics. Which of your setups actually makes money? Now you know. 1340 </p> 1341 <ul class="ljl-showcase__list"> 1342 <li><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Live scorecard per setup — win rate, avg R:R, avg win</li> 1343 <li><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Flip through its trades on a real chart</li> 1344 <li><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> A trade can belong to several strategies — counted in each</li> 1345 </ul> 1346 </div> 1347 </div> 1348 1349 <div class="ljl-showcase__row"> 1350 <div class="ljl-showcase__media"> 1351 <video class="ljl-showcase__img" src="roadmap/shots/v1_8-replay.mp4" poster="roadmap/shots/v1_8-replay-poster.jpg" width="1280" height="720" muted loop playsinline preload="metadata" data-ljl-autoplay aria-label="Bar Replay â stepping through a past session candle by candle"></video> 1352 </div> 1353 <div> 1354 <div class="ljl-showcase__eyebrow">Bar Replay</div> 1355 <h3 class="ljl-showcase__title">Replay any session, candle by candle</h3> 1356 <p class="ljl-showcase__body"> 1357 Any past day unfolds like it’s live — the future stays hidden. 1358 Real practice on real data. 1359 </p> 1360 <ul class="ljl-showcase__list"> 1361 <li><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Step through history with the future masked</li> 1362 <li><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> 2× / 5× / 10× / 20× playback or manual scrub</li> 1363 <li><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Split view — two synced charts side by side (desktop)</li> 1364 </ul> 1365 </div> 1366 </div> 1367 1368 <div class="ljl-showcase__row reverse"> 1369 <div class="ljl-showcase__media"> 1370 <img class="ljl-showcase__img" src="assets/landing/bigchart.jpg?v=5" width="1920" height="1080" loading="lazy" alt="Full-screen chart on the trade's day â the trader's own levels drawn on it, entry and exit markers, replay button"> 1371 </div> 1372 <div> 1373 <div class="ljl-showcase__eyebrow">The chart is real</div> 1374 <h3 class="ljl-showcase__title">Your levels live on the chart — not in a screenshots folder</h3> 1375 <p class="ljl-showcase__body"> 1376 Draw your levels once — they show up on every card, every debrief, every replay 1377 of that day. 1378 </p> 1379 <ul class="ljl-showcase__list"> 1380 <li><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Rays, levels, zones — drawn once, everywhere</li> 1381 <li><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> 1-second bars on replay — the move as it printed</li> 1382 <li><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Split view — NQ and ES side by side, synced (desktop)</li> 1383 </ul> 1384 </div> 1385 </div> 1386 1387 <div class="ljl-showcase__row"> 1388 <div class="ljl-showcase__media"> 1389 <video class="ljl-showcase__img" src="roadmap/shots/v2_6-share.mp4" poster="roadmap/shots/v2_6-share-poster.jpg" width="1280" height="720" muted loop playsinline preload="metadata" data-ljl-autoplay aria-label="Sharing a trade as an animated GIF of the move on its real chart"></video> 1390 </div> 1391 <div> 1392 <div class="ljl-showcase__eyebrow">Share it</div> 1393 <h3 class="ljl-showcase__title">Share the trade — not a spreadsheet row</h3> 1394 <p class="ljl-showcase__body"> 1395 One click — the trade on its real chart, as an image or a GIF of the whole move. 1396 Post it anywhere. 1397 </p> 1398 <ul class="ljl-showcase__list"> 1399 <li><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Image or animated GIF — your levels included</li> 1400 <li><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> P&L on or off — your call before it leaves the app</li> 1401 <li><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Streamer mode blurs every dollar in the UI</li> 1402 </ul> 1403 </div> 1404 </div> 1405 1406 <div class="ljl-showcase__row reverse"> 1407 <div class="ljl-showcase__media"> 1408 <img class="ljl-showcase__img" src="assets/landing/profiles.jpg" width="1920" height="1078" loading="lazy" alt="LiJournal Profiles â group prop-firm logins and accounts into journal profiles; Tradovate connected with live balances"> 1409 </div> 1410 <div> 1411 <div class="ljl-showcase__eyebrow">Tradovate & NinjaTrader</div> 1412 <h3 class="ljl-showcase__title">Connect once — your trades import themselves</h3> 1413 <p class="ljl-showcase__body"> 1414 Sign in on your broker’s page — your password never touches us. Trades flow in 1415 on their own; on Tradovate, your <strong>entire history</strong> comes in one click. 1416 </p> 1417 <ul class="ljl-showcase__list"> 1418 <li><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Auto-import on every sync — plus full-history import</li> 1419 <li><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Several prop-firm logins, balances at a glance</li> 1420 <li><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> We only read your fills — LiJournal never places orders</li> 1421 </ul> 1422 </div> 1423 </div> 1424 </div> 1425</section> 1426 1427<!-- ============== TESTIMONIALS ============== --> 1428<section class="ljl-section ljl-quotes"> 1429 <div class="container"> 1430 <div class="ljl-section__head"> 1431 <div class="ljl-section__eyebrow">Traders on LiJournal</div> 1432 <h2 class="ljl-section__title">The moment it clicks</h2> 1433 </div> 1434 <div class="ljl-quotes__grid"> 1435 <figure class="ljl-quote"> 1436 <blockquote>“The Thursday thing got me. It showed I’d bled money four Thursdays running — 1437 so I just stopped trading Thursdays. I’d never have seen that pattern on my own.”</blockquote>
1438 <figcaption><strong>Mike</strong> · NQ futures, funded trader</figcaption> 1439 </figure> 1440 <figure class="ljl-quote"> 1441 <blockquote>“I’ve tried the big-name journals. This is the first one that doesn’t 1442 feel like homework — I tag nothing, and it still worked out that my edge lives in the 1443 first ninety minutes.”</blockquote> 1444 <figcaption><strong>Dario</strong> · prop trader, two evals</figcaption> 1445 </figure> 1446 <figure class="ljl-quote"> 1447 <blockquote>“Bar replay plus the debrief wizard is the practice loop I always wanted. 1448 Scoring every exit against the ideal one changed how I take profit — that used to be 1449 my biggest leak.”</blockquote> 1450 <figcaption><strong>Sasha</strong> · MES scalper</figcaption> 1451 </figure> 1452 </div> 1453 </div> 1454</section> 1455 1456<!-- ============== PRICING ============== --> 1457<section class="ljl-section ljl-pricing" id="pricing"> 1458 <div class="container"> 1459 <div class="ljl-section__head"> 1460 <div class="ljl-section__eyebrow">Pricing</div> 1461 <h2 class="ljl-section__title">Simple pricing. Try it free for 14 days.</h2> 1462 <p class="ljl-section__sub"> 1463 One Pro plan, billed monthly or yearly. Cancel anytime before the trial ends and pay nothing. 1464 </p> 1465 </div> 1466 <div class="ljl-pricing__grid"> 1467 <!-- PRO MONTHLY --> 1468 <div class="ljl-price-card"> 1469 <div class="ljl-price-card__name">Pro — Monthly</div> 1470 <div class="ljl-price-card__price"> 1471 <span class="ljl-price-card__amount">$29.99</span> 1472 <span class="ljl-price-card__period">/ month</span> 1473 </div> 1474 <p class="ljl-price-card__desc">Full access, billed monthly. Starts with a 14-day free trial.</p> 1475 <ul> 1476 <li><svg class="ljl-price-card__check" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Dashboard, Journal & KPI metrics</li> 1477 <li><svg class="ljl-price-card__check" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Tradovate & NinjaTrader auto-import, CSV & manual entry, bar replay</li> 1478 <li><svg class="ljl-price-card__check" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Full Insights & Analytics</li> 1479 <li><svg class="ljl-price-card__check" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Quality scoring & R-multiple distribution</li> 1480 <li><svg class="ljl-price-card__check" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Priority support</li> 1481 </ul> 1482 <div class="ljl-price-card__cta"> 1483 <a href="/app?signup=1" class="ljl-btn ljl-btn--ghost" style="width:100%">Start free trial</a> 1484 </div> 1485 </div> 1486 1487 <!-- P77: FOUNDING MEMBER â hidden until /api/founding/status says 1488 the plan is live with seats left (script at the bottom). --> 1489 <div class="ljl-price-card ljl-price-card--featured ljl-price-card--founding"> 1490 <div class="ljl-price-card__badge">Founding — first 100</div> 1491 <div class="ljl-price-card__name">Founding Member</div> 1492 <div class="ljl-price-card__price">
1493 <span class="ljl-price-card__amount">$24.99</span> 1494 <span class="ljl-price-card__period">/ month — forever</span> 1495 </div> 1496 <p class="ljl-price-card__desc"> 1497 <span class="ljl-founding-counter" id="ljl-founding-left">limited seats</span><br> 1498 Your price never goes up — even when ours does. No trial: you back us on day one, we lock you in for life. 1499 </p> 1500 <ul> 1501 <li><svg class="ljl-price-card__check" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> <strong>Everything in Pro</strong></li> 1502 <li><svg class="ljl-price-card__check" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Price locked at $24.99 forever</li> 1503 <li><svg class="ljl-price-card__check" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Founder badge — gone when seats are gone</li> 1504 <li><svg class="ljl-price-card__check" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Priority on the roadmap — your requests first</li> 1505 <li><svg class="ljl-price-card__check" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Early access to new features</li> 1506 </ul> 1507 <div class="ljl-price-card__cta"> 1508 <a href="/app?signup=1&plan=founding" class="ljl-btn ljl-btn--primary" style="width:100%">Claim a Founding seat</a> 1509 </div> 1510 </div> 1511 1512 <!-- PRO ANNUAL (featured by default; founding takes the spotlight 1513 when its card is visible â see .has-founding reset below) --> 1514 <div class="ljl-price-card ljl-price-card--featured ljl-price-card--annual"> 1515 <div class="ljl-price-card__badge">Best value — 2 months free</div> 1516 <div class="ljl-price-card__name">Pro — Annual</div> 1517 <div class="ljl-price-card__price"> 1518 <span class="ljl-price-card__amount">$299</span> 1519 <span class="ljl-price-card__period">/ year</span> 1520 </div> 1521 <p class="ljl-price-card__desc">Everything in Pro — about $24.92/mo. Starts with a 14-day free trial.</p> 1522 <ul> 1523 <li><svg class="ljl-price-card__check" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> <strong>Everything in Pro Monthly</strong></li> 1524 <li><svg class="ljl-price-card__check" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> <span>2 months free vs monthly</span></li> 1525 <li><svg class="ljl-price-card__check" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> <span>Price locked for the full year</span></li> 1526 </ul> 1527 <div class="ljl-price-card__cta"> 1528 <a href="/app?signup=1&plan=annual" class="ljl-btn ljl-btn--primary" style="width:100%">Start free trial</a> 1529 </div> 1530 </div> 1531 </div> 1532 </div> 1533</section> 1534 1535<!-- ============== FAQ ============== --> 1536<section class="ljl-section" id="faq"> 1537 <div class="container"> 1538 <div class="ljl-section__head"> 1539 <div class="ljl-section__eyebrow">FAQ</div> 1540 <h2 class="ljl-section__title">Questions, answered</h2> 1541 </div> 1542 <div class="ljl-faq__list"> 1543 <details class="ljl-faq__item"> 1544 <summary>Which markets and platforms does LiJournal support?</summary> 1545 <div class="ljl-faq__body"> 1546 Built specifically for futures traders — NQ, ES, MNQ, MES, CL, GC and the rest. <strong>Tradovate connects natively:</strong>
1546 your trades import automatically on every sync, and you can pull your entire history in one click. <strong>NinjaTrader connects natively too</strong> — sign in once and your fills import automatically. Manual entry and CSV import cover any other platform, and more broker integrations are on the roadmap. On-chart features — trade charts, bar replay, context chips — currently cover CME index futures (NQ, ES and their micros); other symbols journal fully with all stats. 1547 </div> 1548 </details> 1549 <details class="ljl-faq__item"> 1550 <summary>Do I have to tag my trades for the analytics to work?</summary> 1551 <div class="ljl-faq__body"> 1552 No. The market context behind every imported trade — session, time slot, volatility, 1553 VWAP side, opening range, day trend — is computed automatically from real market data. 1554 Edge Finder works on a completely untagged journal. Tagging strategies is optional and adds 1555 per-setup scorecards on top. 1556 </div> 1557 </details> 1558 <details class="ljl-faq__item"> 1559 <summary>Is my data private?</summary> 1560 <div class="ljl-faq__body"> 1561 Yes. Your trade data is stored encrypted in your own Supabase row. We never share it, sell it, or use it for ads. You can export and delete everything from your profile at any time. 1562 </div> 1563 </details> 1564 <details class="ljl-faq__item"> 1565 <summary>Can I cancel anytime?</summary> 1566 <div class="ljl-faq__body"> 1567 Yes. Cancel from your profile in one click — you keep Pro features until the end of the billing period. No questions, no retention pressure. 1568 </div> 1569 </details> 1570 <details class="ljl-faq__item"> 1571 <summary>How does the free trial and refunds work?</summary> 1572 <div class="ljl-faq__body"> 1573 You get a <strong>14-day free trial</strong> (a payment method is required to start it). Cancel anytime before it ends and you’re never charged. If you don’t cancel, it converts to a paid subscription. After billing, payments are non-refundable except where the law requires — the trial is your risk-free window to decide. One trial per customer. 1574 </div> 1575 </details> 1576 <details class="ljl-faq__item"> 1577 <summary>I subscribed on Whop with a different email — where’s my Pro?</summary> 1578 <div class="ljl-faq__body"> 1579 Use the same email on LiJournal and on Whop and your subscription links automatically. 1580 Paid with a different one? Log in with the email you paid with, or write 1581 <a href="mailto:[email protected]">[email protected]</a> and we’ll link it. 1582 </div> 1583 </details> 1584 <details class="ljl-faq__item"> 1585 <summary>What happens to my trades if my subscription ends?</summary> 1586 <div class="ljl-faq__body"> 1587 Nothing is deleted. Your full trade history stays safe on your account — you can export your data any time while subscribed, and everything is right where you left it the moment you resubscribe. 1588 </div> 1589 </details> 1590 <details class="ljl-faq__item"> 1591 <summary>I have a feature request / found a bug</summary> 1592 <div class="ljl-faq__body"> 1593 Email [email protected]. Pro users get priority — bugs land same week, features go on the public roadmap. 1594 </div> 1595 </details> 1596 </div> 1597 </div> 1598</section> 1599 1600<!-- ============== FINAL CTA ============== --> 1601<section class="ljl-final-cta"> 1602 <div class="container"> 1603 <h2>Ready to find your edge?</h2> 1604 <p>Start your 14-day free trial. Cancel anytime before it ends — pay nothing.</p> 1605 <a href="/app?signup=1" class="ljl-btn ljl-btn--primary ljl-btn--lg">Start free trial â</a> 1606 </div> 1607</section> 1608 1609<!-- ============== FOOTER ============== --> 1610<footer class="ljl-footer"> 1611 <div class="container"> 1612 <div class="ljl-footer__inner"> 1613 <div class="ljl-footer__brand"> 1614 <a href="/" class="ljl-logo" style="font-size: 1.3rem;">LiJournal</a> 1615 <p>The premium futures trading journal built to turn your trade history into an edge.</p> 1616 </div> 1617 <div> 1618 <h3 class="ljl-footer__h">Product</h3> 1619 <ul> 1620 <li><a href="#features">Features</a></li> 1621 <li><a href="#pricing">Pricing</a></li> 1622 <li><a href="/app?login=1">Log in</a></li> 1623 </ul> 1624 </div> 1625 <div> 1626 <h3 class="ljl-footer__h">Resources</h3> 1627 <ul> 1628 <li><a href="#faq">FAQ</a></li> 1629 <li><a href="mailto:[email protected]">Contact</a></li> 1630 </ul> 1631 </div> 1632 <div> 1633 <h3 class="ljl-footer__h">Legal</h3> 1634 <ul> 1635 <li><a href="/legal/privacy.html">Privacy</a></li> 1636 <li><a href="/legal/terms.html">Terms</a></li> 1637 <li><a href="/legal/risk.html">Risk Disclaimer</a></li> 1638 </ul> 1639 </div> 1640 </div> 1641 <p class="ljl-footer__disclosure"> 1642 <strong>Risk disclosure.</strong> Futures, foreign currency and options trading contains substantial risk and 1643 is not for every investor. An investor could potentially lose all or more than the initial investment. Only 1644 risk capital — money you can afford to lose — should be used for trading. 1645 <strong>CFTC Rule 4.41.</strong> Hypothetical or simulated performance results have certain limitations. Unlike 1646 an actual performance record, simulated results do not represent actual trading and may under- or 1647 over-compensate for the impact, if any, of certain market factors such as lack of liquidity. No representation 1648 is being made that any account will or is likely to achieve profit or losses similar to those shown. Any 1649 statistics, equity curves or projections in LiJournal describe historical, self-reported activity and do not 1650 guarantee future results. LiJournal is a trading journal and analytics tool — not a broker, dealer or 1651 investment adviser — and does not provide financial advice. NinjaTrader and Tradovate are integrations, 1652 not brokerage services offered by LiJournal. See our <a href="/legal/risk.html">full Risk Disclaimer</a>. 1653 </p> 1654 <div class="ljl-footer__bottom"> 1655 <div>© 2026 LiJournal. All rights reserved.</div> 1656 <div>Made for traders, by traders.</div> 1657 </div> 1658 </div> 1659</footer> 1660 1661<!-- Cookie / data-use notice. Shares the consent key with the app
1662 (lj_cookie_consent_v1) so accepting here doesn't re-prompt inside /app 1663 and vice-versa. Minimal: no tracking, no per-cookie toggles. --> 1664<div id="ljl-cookie-bar" class="ljl-cookie-bar" role="dialog" aria-label="Cookie notice" hidden> 1665 <div class="ljl-cookie-bar__msg"> 1666 We use essential cookies for your session, plus privacy-friendly product analytics and anonymous 1667 error tracking to improve LiJournal. No advertising. See our <a href="/legal/privacy.html">Privacy Policy</a>. 1668 </div> 1669 <button type="button" class="ljl-btn ljl-btn--primary ljl-cookie-bar__accept" id="ljl-cookie-accept">Got it</button> 1670</div> 1671<style> 1672 .ljl-cookie-bar { 1673 position: fixed; left: 16px; right: 16px; bottom: 16px; z-index: 9999; 1674 max-width: 760px; margin: 0 auto; 1675 display: flex; align-items: center; gap: 16px; flex-wrap: wrap; 1676 background: var(--bg-elev); border: 1px solid var(--border-strong); 1677 border-radius: 14px; padding: 14px 18px; 1678 box-shadow: 0 12px 40px rgba(0,0,0,0.5); 1679 } 1680 /* The bar uses display:flex, which (as an author rule) overrides the UA 1681 [hidden] default â so we must explicitly honor `hidden`, otherwise the 1682 "Got it" button (which sets bar.hidden=true) can't dismiss it. */ 1683 .ljl-cookie-bar[hidden] { display: none !important; } 1684 .ljl-cookie-bar__msg { flex: 1 1 320px; color: var(--text-muted); font-size: 0.86rem; line-height: 1.5; } 1685 .ljl-cookie-bar__msg a { color: var(--text); text-decoration: underline; } 1686 .ljl-cookie-bar__accept { flex: 0 0 auto; padding: 9px 22px; } 1687</style>
1688<script src="lj-analytics.js?v=3"></script>
vendor: 1 bytes, line 1688
1688
1689<script> 1690 (function () { 1691 try { 1692 var KEY = 'lj_cookie_consent_v1'; 1693 if (localStorage.getItem(KEY) === 'accepted') return; 1694 var bar = document.getElementById('ljl-cookie-bar'); 1695 if (!bar) return; 1696 bar.hidden = false; 1697 document.getElementById('ljl-cookie-accept').addEventListener('click', function () { 1698 try { localStorage.setItem(KEY, 'accepted'); } catch (e) { /* private mode */ } 1699 bar.hidden = true; 1700 if (window.ljAnalytics) window.ljAnalytics.onConsent(); 1701 }); 1702 } catch (e) { /* localStorage blocked â silently skip */ } 1703 })(); 1704</script>
vendor: 1 bytes, line 1704
1704
1705<script> 1706 /* P77 â Founding Member card reveal. Hidden by default; lights up when the 1707 backend reports the plan as live with seats remaining. Same-origin in 1708 prod; on the dev static server the API lives on :3003. */ 1709 (function () { 1710 var base = /^(localhost|127\.0\.0\.1)$/i.test(location.hostname) 1711 ? ('http://' + location.hostname + ':3003') : ''; 1712 fetch(base + '/api/founding/status') 1713 .then(function (r) { return r.ok ? r.json() : null; }) 1714 .then(function (st) { 1715 if (!st || !st.enabled) return; 1716 var grid = document.querySelector('.ljl-pricing__grid'); 1717 if (grid) grid.classList.add('has-founding'); 1718 var left = document.getElementById('ljl-founding-left'); 1719 if (left) { 1720 left.textContent = (typeof st.left === 'number') 1721 ? (st.left + ' of ' + st.total + ' seats left') 1722 : ('first ' + st.total + ' traders only'); 1723 } 1724 }) 1725 .catch(function () { /* card stays hidden */ }); 1726 })(); 1727</script>
1727 1728
1729<script> 1730 /* Play the showcase videos only while on screen â saves ~580 KB of eager 1731 download and battery on phones. */ 1732 (function () { 1733 var vids = document.querySelectorAll('video[data-ljl-autoplay]'); 1734 if (!('IntersectionObserver' in window)) { for (var i = 0; i < vids.length; i++) vids[i].play(); return; } 1735 var io = new IntersectionObserver(function (entries) { 1736 entries.forEach(function (e) { 1737 if (e.isIntersecting) e.target.play().catch(function () {}); 1738 else e.target.pause(); 1739 }); 1740 }, { rootMargin: '200px 0px', threshold: 0.25 }); 1741 vids.forEach(function (v) { io.observe(v); }); 1742 })(); 1743</script>
vendor: 1 bytes, line 1743
1743
1744<script src="assets/landing/edge-demo-data.js?v=1" defer></script>
vendor: 1 bytes, line 1744
1744
1745<script defer> 1746 /* Interactive Edge Finder demo â renders window.LJL_EDGE_DEMO (the real 1747 engine's output over the sample dataset) and lets visitors click into 1748 the trades behind each number. */ 1749 document.addEventListener('DOMContentLoaded', function () { 1750 var D = window.LJL_EDGE_DEMO; 1751 var rootGood = document.getElementById('ljl-ed-good'); 1752 var rootBad = document.getElementById('ljl-ed-bad'); 1753 if (!D || !rootGood || !rootBad) return; 1754 var base = document.getElementById('ljl-ed-baseline'); 1755 function fr(v) { return (v >= 0 ? '+' : '') + v.toFixed(2) + 'R'; } 1756 base.innerHTML = 'Green — where this trader makes money. Red — where it leaks. ' 1757 + '<strong>' + D.n + '</strong> trades \u00b7 ' + D.wr + '% win.'; 1758 function spark(pts, good) { 1759 if (!pts || pts.length < 2) return ''; 1760 var w = 560, h = 64, min = Math.min.apply(null, pts.concat([0])), max = Math.max.apply(null, pts.concat([0])); 1761 var span = (max - min) || 1; 1762 var xy = pts.map(function (v, i) { 1763 return (i / (pts.length - 1) * w).toFixed(1) + ',' + ((1 - (v - min) / span) * (h - 6) + 3).toFixed(1); 1764 }); 1765 var zero = ((1 - (0 - min) / span) * (h - 6) + 3).toFixed(1); 1766 var col = good ? '#34d399' : '#f87171'; 1767 return '<svg class="ljl-ed-drill__spark" viewBox="0 0 ' + w + ' ' + h + '" preserveAspectRatio="none" aria-hidden="true">' 1768 + '<line x1="0" y1="' + zero + '" x2="' + w + '" y2="' + zero + '" stroke="rgba(255,255,255,0.12)" stroke-dasharray="4 4"/>' 1769 + '<polyline fill="none" stroke="' + col + '" stroke-width="2" points="' + xy.join(' ') + '"/></svg>'; 1770 } 1771 function card(c) { 1772 var el = document.createElement('div'); 1773 el.className = 'ljl-ed-card ' + (c.good ? 'ljl-ed-card--good' : 'ljl-ed-card--bad'); 1774 var rows = c.sample.map(function (t) { 1775 return '<tr><td>' + t.d + '</td><td>' + t.sym + ' \u00b7 ' + (t.dir === 'L' ? 'Long' : 'Short') + '</td>' 1776 + '<td class="' + (t.r >= 0 ? 'pos' : 'neg') + '">' + fr(t.r) + '</td></tr>'; 1777 }).join(''); 1778 el.innerHTML = 1779 '<div><span class="ljl-ed-card__pill">' + (c.good ? 'EDGE' : 'LEAK') + '</span>' 1780 + '<span class="ljl-ed-card__dim">' + c.dim + '</span></div>' 1781 + '<div class="ljl-ed-card__label">' + c.label + '</div>' 1782 + '<div><span class="ljl-ed-card__r">' + fr(c.meanR) + '</span>' 1783 + '<span class="ljl-ed-card__vs">' + fr(c.delta) + ' vs baseline</span></div>' 1784 + '<div class="ljl-ed-card__meta"><b>n=' + c.n + '</b> \u00b7 ' + c.wr + '% win</div>' 1785 + '<div class="ljl-ed-card__hint">Click for the trades behind it \u2193</div>' 1786 + '<div class="ljl-ed-drill">' + spark(c.spark, c.good) 1787 + '<div class="ljl-ed-drill__caption">Cumulative R across all ' + c.n + ' trades in this context</div>' 1788 + '<table class="ljl-ed-trades"><tbody>' + rows + '</tbody></table></div>'; 1789 el.addEventListener('click', function () { el.classList.toggle('is-open'); }); 1790 return el; 1791 } 1792 D.cards.forEach(function (c) { (c.good ? rootGood : rootBad).appendChild(card(c)); }); 1793 }); 1794</script>
1794 1795<!-- P144o: anonymous presence ping (cid only, no auth on the landing) feeds the Community globe and the owner's pulse wall -->
1796<script src="presence-beacon.js?v=4-landing"></script>
1796 1797</body> 1798</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.