771d8b0ba4
Design Rev 3 drew the 9 legacy classifier marks (BRUSH #E0B84A, WHIFF #E86A6A, CONNECTOR #9AB0C4, DISTRIBUTOR #7AB8D8, FASTBREAK #4AA0E8, FLEX #A08AC8, HYBRID #C88AB0, SWITCH #C0B08A, SWITCHBOARD #90A0E8). Wired each to its own Design mark + color (front lib/archetypes.js + backend archetypeService.js, color-synced). These were the 9 NO-MARK backend keys — now none are on a generic placeholder. They're classifier-side fallback renders (never user-facing archetype names, per MANIFEST). Re-imported Rev 3 package over specs/design-reference/ (83 glyph SVGs + MANIFEST regenerated from the authoritative glyphDefs(); HANDOFF Rev 3 note). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1744 lines
178 KiB
HTML
1744 lines
178 KiB
HTML
<!DOCTYPE html>
|
||
<html>
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<script src="./support.js"></script>
|
||
</head>
|
||
<body>
|
||
<x-dc>
|
||
<helmet>
|
||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500;600;700;800&display=swap" rel="stylesheet" />
|
||
<style>
|
||
*{box-sizing:border-box;margin:0;padding:0}
|
||
html,body{background:#06060B;color:#F0F0F0;font-family:'Inter',system-ui,sans-serif;-webkit-font-smoothing:antialiased}
|
||
::selection{background:rgba(0,212,160,.28);color:#F0F0F0}
|
||
a{color:#00D4A0;text-decoration:none}
|
||
a:hover{color:#5cf0cf}
|
||
.mono{font-family:'JetBrains Mono',monospace;font-variant-numeric:tabular-nums}
|
||
@keyframes vy-breathe{0%,100%{box-shadow:0 0 0 0 rgba(0,212,160,0),inset 0 0 0 1px rgba(0,212,160,.35)}50%{box-shadow:0 0 22px -4px rgba(0,212,160,.32),inset 0 0 0 1px rgba(0,212,160,.6)}}
|
||
@keyframes vy-livedot{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.82)}}
|
||
@keyframes vy-syncdot{0%,100%{opacity:1}50%{opacity:.2}}
|
||
@keyframes vy-rxup{0%{background:rgba(0,212,160,.28)}100%{background:rgba(0,212,160,0)}}
|
||
@keyframes vy-rxdown{0%{background:rgba(255,71,87,.26)}100%{background:rgba(255,71,87,0)}}
|
||
@keyframes vy-arrive{0%{opacity:0;transform:scale(.88) translateY(10px);filter:blur(6px)}60%{opacity:1;transform:scale(1.015) translateY(0);filter:blur(0)}100%{opacity:1;transform:scale(1) translateY(0)}}
|
||
@keyframes vy-scan{0%{transform:translateY(-120%)}100%{transform:translateY(320%)}}
|
||
@keyframes vy-glitch{0%,90%,100%{transform:translate(0,0);clip-path:inset(0 0 0 0);text-shadow:none}91%{transform:translate(-1.5px,0);clip-path:inset(12% 0 42% 0);text-shadow:1.6px 0 #FF4757,-1.6px 0 #00D4A0}93%{transform:translate(1.5px,0);clip-path:inset(58% 0 8% 0);text-shadow:-1.6px 0 #FF4757,1.6px 0 #00D4A0}95%{transform:translate(-1px,0);clip-path:inset(32% 0 30% 0);text-shadow:1px 0 #00D4A0}96%{transform:translate(1px,0);clip-path:inset(70% 0 4% 0);text-shadow:none}}
|
||
.vy-grain{position:fixed;inset:0;z-index:5;pointer-events:none;mix-blend-mode:overlay;opacity:.05;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.82' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");background-size:140px}
|
||
.vy-vignette{position:fixed;inset:0;z-index:4;pointer-events:none;box-shadow:inset 0 0 200px 40px rgba(0,0,0,.55),inset 0 90px 120px -60px rgba(0,212,160,.05)}
|
||
@keyframes vy-rowin{0%{opacity:0;transform:translateY(9px)}100%{opacity:var(--o,1);transform:translateY(0)}}
|
||
@keyframes vy-bootline{0%{transform:scaleX(0)}100%{transform:scaleX(1)}}
|
||
@keyframes vy-eventin{0%{opacity:0;transform:translateY(-3px)}12%,80%{opacity:1;transform:translateY(0)}100%{opacity:0;transform:translateY(-3px)}}
|
||
@keyframes vy-cmdin{0%{opacity:0;transform:translateY(-10px) scale(.98)}100%{opacity:1;transform:none}}
|
||
@keyframes vy-detailin{0%{opacity:0;transform:translateY(-2px)}100%{opacity:1;transform:none}}
|
||
@keyframes vy-wirein{0%{opacity:0;transform:translateY(4px)}8%,86%{opacity:1;transform:none}100%{opacity:0;transform:translateY(-3px)}}
|
||
@keyframes vy-cursor{0%,49%{opacity:1}50%,100%{opacity:0}}
|
||
@keyframes vy-markflick{0%,88%,100%{opacity:1;filter:none}89%{opacity:.55;filter:drop-shadow(1.5px 0 rgba(255,71,87,.8)) drop-shadow(-1.5px 0 rgba(0,212,160,.8))}91%{opacity:1;filter:none}94%{opacity:.7;filter:drop-shadow(-1px 0 rgba(255,71,87,.7))}95%{opacity:1;filter:none}}
|
||
[data-reveal]{opacity:0;transform:translateY(16px);transition:opacity .6s cubic-bezier(.2,.8,.2,1),transform .6s cubic-bezier(.2,.8,.2,1)}
|
||
[data-reveal].vy-in{opacity:1;transform:none}
|
||
html{scroll-behavior:smooth}
|
||
.vy-navdot{display:flex;align-items:center;gap:9px;text-decoration:none;padding:3px 0}
|
||
.vy-navdot span.d{width:6px;height:6px;border-radius:2px;background:#2A2A38;transition:background .2s,box-shadow .2s}
|
||
.vy-navdot span.l{font-family:'JetBrains Mono',monospace;font-size:8.5px;letter-spacing:.16em;color:#4a4a58;opacity:0;transform:translateX(-4px);transition:opacity .2s,transform .2s,color .2s}
|
||
.vy-navdot:hover span.l{opacity:1;transform:none}
|
||
.vy-navdot.on span.d{background:#00D4A0;box-shadow:0 0 8px rgba(0,212,160,.6)}
|
||
.vy-navdot.on span.l{opacity:1;transform:none;color:#00D4A0}
|
||
.rx-up{animation:vy-rxup .75s ease-out}
|
||
.rx-down{animation:vy-rxdown .75s ease-out}
|
||
.vy-scanwrap{position:absolute;inset:0;overflow:hidden;pointer-events:none;border-radius:inherit}
|
||
</style>
|
||
<script src="image-slot.js"></script>
|
||
<style>
|
||
image-slot::part(empty){opacity:0}
|
||
.vy-scanwrap::before{content:"";position:absolute;left:0;right:0;height:38%;background:linear-gradient(180deg,transparent,rgba(0,212,160,.07),transparent);animation:vy-scan 5.5s linear infinite}
|
||
</style>
|
||
</helmet>
|
||
<div ref="{{ rootRef }}" style="min-height:100vh;background:radial-gradient(1200px 700px at 78% -8%,rgba(0,212,160,.06),transparent 60%),#06060B;padding:0 0 120px">
|
||
<div class="vy-vignette" aria-hidden="true"></div>
|
||
<div class="vy-grain" aria-hidden="true"></div>
|
||
|
||
<!-- ============ JUMP RAIL ============ -->
|
||
<nav style="position:fixed;right:22px;top:50%;transform:translateY(-50%);z-index:46;display:flex;flex-direction:column;gap:4px;align-items:flex-end">
|
||
<a class="vy-navdot" href="#terminal" data-nav="terminal"><span class="l">TERMINAL</span><span class="d"></span></a>
|
||
<a class="vy-navdot" href="#system" data-nav="system"><span class="l">SYSTEM</span><span class="d"></span></a>
|
||
<a class="vy-navdot" href="#glyphs" data-nav="glyphs"><span class="l">GLYPHS</span><span class="d"></span></a>
|
||
<a class="vy-navdot" href="#surfaces" data-nav="surfaces"><span class="l">SURFACES</span><span class="d"></span></a>
|
||
<a class="vy-navdot" href="#intel" data-nav="intel"><span class="l">INTELLIGENCE</span><span class="d"></span></a>
|
||
</nav>
|
||
|
||
<!-- ============ THE WIRE — session log, one entry at a time ============ -->
|
||
<div style="position:fixed;left:0;right:0;bottom:0;z-index:45;display:flex;align-items:center;gap:14px;height:36px;padding:0 40px;background:rgba(6,6,11,.88);backdrop-filter:blur(14px);border-top:1px solid #14141E">
|
||
<span class="mono" style="font-size:9px;letter-spacing:.26em;color:#00D4A0;font-weight:800;flex:none">THE WIRE</span>
|
||
<span style="width:1px;height:14px;background:#1E1E2A;flex:none"></span>
|
||
<span class="mono" data-wire-time style="font-size:10px;color:#707080;letter-spacing:.06em;flex:none">--:--:--</span>
|
||
<span class="mono" data-wire style="font-size:11px;color:#B8BCC8;letter-spacing:.03em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1">Session open — 312 props graded across 47 games.</span>
|
||
<span class="mono" style="font-size:9px;letter-spacing:.16em;color:#4a4a58;flex:none">LOG ▸</span>
|
||
</div>
|
||
|
||
<!-- ============ ⌘K COMMAND BAR ============ -->
|
||
<sc-if value="{{ cmdOpen }}" hint-placeholder-val="{{ false }}">
|
||
<div onClick="{{ closeCmd }}" style="position:fixed;inset:0;z-index:60;background:rgba(4,4,8,.72);backdrop-filter:blur(7px);display:flex;align-items:flex-start;justify-content:center;padding-top:11vh">
|
||
<div onClick="{{ stopCmd }}" style="width:min(580px,92vw);border-radius:16px;background:#0E0E14;border:1px solid #2A2A38;box-shadow:0 44px 100px -30px rgba(0,0,0,.92),inset 0 1px 0 rgba(255,255,255,.05);overflow:hidden;animation:vy-cmdin .18s ease-out">
|
||
<div style="display:flex;align-items:center;gap:12px;padding:16px 18px;border-bottom:1px solid #14141E">
|
||
<svg width="17" height="17" viewBox="0 0 24 24" fill="none"><circle cx="11" cy="11" r="7" stroke="#707080" stroke-width="2"/><path stroke="#707080" stroke-width="2" stroke-linecap="round" d="M20 20l-4-4"/></svg>
|
||
<input data-cmd-input onInput="{{ onCmdInput }}" placeholder="Search players, teams, reads, actions…" style="flex:1;min-width:0;background:transparent;border:none;outline:none;color:#F0F0F0;font-family:'Inter',sans-serif;font-size:15px" />
|
||
<span class="mono" style="font-size:9px;letter-spacing:.1em;color:#4a4a58;border:1px solid #2A2A38;border-radius:5px;padding:2px 6px">ESC</span>
|
||
</div>
|
||
<div data-cmd-list style="max-height:54vh;overflow:auto;padding:8px">
|
||
<div class="mono" style="font-size:8.5px;letter-spacing:.2em;color:#4a4a58;padding:10px 12px 6px">JUMP TO</div>
|
||
<div data-cmd-item data-tags="dashboard slate edge board" style="cursor:pointer;display:flex;align-items:center;gap:11px;padding:9px 12px;border-radius:9px" style-hover="background:#14141E">
|
||
<span style="width:24px;height:24px;border-radius:6px;background:#14141E;display:flex;align-items:center;justify-content:center"><svg width="13" height="13" viewBox="0 0 24 24" fill="none"><path stroke="#B8BCC8" stroke-width="2" stroke-linecap="round" d="M4 6h16M4 12h16M4 18h10"/></svg></span>
|
||
<span style="flex:1;font-size:13px;color:#F0F0F0">Tonight's Slate <span style="color:#707080">· Edge Board</span></span>
|
||
<span class="mono" style="font-size:9px;color:#4a4a58">↵</span>
|
||
</div>
|
||
<div data-cmd-item data-tags="ledger record settled" style="cursor:pointer;display:flex;align-items:center;gap:11px;padding:9px 12px;border-radius:9px" style-hover="background:#14141E">
|
||
<span style="width:24px;height:24px;border-radius:6px;background:#14141E;display:flex;align-items:center;justify-content:center"><svg width="13" height="13" viewBox="0 0 24 24" fill="none"><path stroke="#B8BCC8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" d="M5 4h14v16H5zM8 9h8M8 13h8M8 17h5"/></svg></span>
|
||
<span style="flex:1;font-size:13px;color:#F0F0F0">Ledger <span style="color:#707080">· settled history</span></span>
|
||
<span class="mono" style="font-size:9px;color:#4a4a58">↵</span>
|
||
</div>
|
||
<div data-cmd-item data-tags="streaks billboard" style="cursor:pointer;display:flex;align-items:center;gap:11px;padding:9px 12px;border-radius:9px" style-hover="background:#14141E">
|
||
<span style="width:24px;height:24px;border-radius:6px;background:#14141E;display:flex;align-items:center;justify-content:center"><svg width="13" height="13" viewBox="0 0 24 24" fill="none"><path stroke="#B8BCC8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" d="M4 16l5-5 3 3 8-8"/></svg></span>
|
||
<span style="flex:1;font-size:13px;color:#F0F0F0">Streaks</span>
|
||
<span class="mono" style="font-size:9px;color:#4a4a58">↵</span>
|
||
</div>
|
||
<div class="mono" style="font-size:8.5px;letter-spacing:.2em;color:#4a4a58;padding:14px 12px 6px">PLAYERS</div>
|
||
<div data-cmd-item data-tags="jokic nuggets nba den" style="cursor:pointer;display:flex;align-items:center;gap:11px;padding:9px 12px;border-radius:9px" style-hover="background:#14141E">
|
||
<span style="width:24px;height:24px;border-radius:6px;background:linear-gradient(135deg,#0E4DA4,#1a2f5a);display:flex;align-items:center;justify-content:center;font-family:'JetBrains Mono',monospace;font-weight:800;font-size:9px;color:#8fb4ff">NJ</span>
|
||
<span style="flex:1;font-size:13px;color:#F0F0F0">Nikola Jokić <span style="color:#707080">· C · DEN</span></span>
|
||
<span class="mono" style="display:inline-flex;align-items:center;height:16px;padding:0 6px;border-radius:4px;background:rgba(0,212,160,.14);color:#00D4A0;font-weight:800;font-size:9px">A+</span>
|
||
</div>
|
||
<div data-cmd-item data-tags="skenes pirates mlb pit" style="cursor:pointer;display:flex;align-items:center;gap:11px;padding:9px 12px;border-radius:9px" style-hover="background:#14141E">
|
||
<span style="width:24px;height:24px;border-radius:6px;background:linear-gradient(135deg,#2b2b2b,#c9a227);display:flex;align-items:center;justify-content:center;font-family:'JetBrains Mono',monospace;font-weight:800;font-size:9px;color:#fff">PIT</span>
|
||
<span style="flex:1;font-size:13px;color:#F0F0F0">Paul Skenes <span style="color:#707080">· RHP · PIT</span></span>
|
||
<span class="mono" style="display:inline-flex;align-items:center;height:16px;padding:0 6px;border-radius:4px;background:rgba(0,212,160,.1);color:#00D4A0;font-weight:800;font-size:9px">A</span>
|
||
</div>
|
||
<div data-cmd-item data-tags="edwards timberwolves nba min" style="cursor:pointer;display:flex;align-items:center;gap:11px;padding:9px 12px;border-radius:9px" style-hover="background:#14141E">
|
||
<span style="width:24px;height:24px;border-radius:6px;background:linear-gradient(135deg,#0C2340,#236192);display:flex;align-items:center;justify-content:center;font-family:'JetBrains Mono',monospace;font-weight:800;font-size:9px;color:#9fc0e8">MIN</span>
|
||
<span style="flex:1;font-size:13px;color:#F0F0F0">Anthony Edwards <span style="color:#707080">· SG · MIN</span></span>
|
||
<span class="mono" style="display:inline-flex;align-items:center;height:16px;padding:0 6px;border-radius:4px;background:rgba(0,212,160,.1);color:#00D4A0;font-weight:800;font-size:9px">A</span>
|
||
</div>
|
||
<div class="mono" style="font-size:8.5px;letter-spacing:.2em;color:#4a4a58;padding:14px 12px 6px">ACTIONS</div>
|
||
<div data-cmd-item data-tags="generate share card settle" style="cursor:pointer;display:flex;align-items:center;gap:11px;padding:9px 12px;border-radius:9px" style-hover="background:#14141E">
|
||
<span style="width:24px;height:24px;border-radius:6px;background:rgba(0,212,160,.12);display:flex;align-items:center;justify-content:center"><svg width="13" height="13" viewBox="0 0 24 24" fill="none"><path stroke="#00D4A0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" d="M4 12v7h16v-7M12 3v12M8 7l4-4 4 4"/></svg></span>
|
||
<span style="flex:1;font-size:13px;color:#F0F0F0">Generate share card</span>
|
||
<span class="mono" style="font-size:9px;color:#4a4a58">↵</span>
|
||
</div>
|
||
<div data-cmd-item data-tags="export profile u record" style="cursor:pointer;display:flex;align-items:center;gap:11px;padding:9px 12px;border-radius:9px" style-hover="background:#14141E">
|
||
<span style="width:24px;height:24px;border-radius:6px;background:rgba(0,212,160,.12);display:flex;align-items:center;justify-content:center"><svg width="13" height="13" viewBox="0 0 24 24" fill="none"><path stroke="#00D4A0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" d="M12 4v11M8 11l4 4 4-4M5 20h14"/></svg></span>
|
||
<span style="flex:1;font-size:13px;color:#F0F0F0">Export /u public record</span>
|
||
<span class="mono" style="font-size:9px;color:#4a4a58">↵</span>
|
||
</div>
|
||
<div data-cmd-empty class="mono" style="display:none;padding:22px 12px;text-align:center;font-size:11px;letter-spacing:.08em;color:#707080">NO MATCHES · TRANSMISSION QUIET</div>
|
||
</div>
|
||
<div style="display:flex;align-items:center;justify-content:space-between;padding:10px 16px;border-top:1px solid #14141E;background:#0A0A10">
|
||
<span class="mono" style="font-size:9px;letter-spacing:.12em;color:#4a4a58">↑ ↓ NAVIGATE · ↵ OPEN · ESC CLOSE</span>
|
||
<span class="mono" style="font-size:9px;letter-spacing:.12em;color:#00D4A0">VYNDR TERMINAL</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</sc-if>
|
||
|
||
<!-- ============ TOP BAR ============ -->
|
||
<div style="position:sticky;top:0;z-index:40;display:flex;align-items:center;justify-content:space-between;padding:14px 40px;background:rgba(6,6,11,.82);backdrop-filter:blur(14px);border-bottom:1px solid #14141E">
|
||
<div style="display:flex;align-items:center;gap:14px">
|
||
<!-- logo mark: signal V — a caret intercepting the line -->
|
||
<div style="position:relative;width:30px;height:30px;flex:none;animation:vy-markflick 6.5s steps(1) infinite">
|
||
<svg width="30" height="30" viewBox="0 0 32 32" fill="none" style="display:block">
|
||
<rect x="1" y="1" width="30" height="30" rx="7" fill="#0E0E14" stroke="#2A2A38" stroke-width="1"></rect>
|
||
<path d="M8 9 L16 24 L24 9" fill="none" stroke="#F0F0F0" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round"></path>
|
||
<path d="M16 24 L24 9" fill="none" stroke="#00D4A0" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round"></path>
|
||
<circle cx="24" cy="9" r="2" fill="#00D4A0"></circle>
|
||
</svg>
|
||
</div>
|
||
<div style="display:flex;flex-direction:column;gap:1px">
|
||
<div style="display:flex;align-items:center;gap:2px">
|
||
<span class="vy-glitch mono" style="font-weight:800;font-size:19px;letter-spacing:.32em;color:#F0F0F0;animation:vy-glitch 6.5s steps(1) infinite;line-height:1">VYND<span style="color:#00D4A0">R</span></span>
|
||
<span style="width:8px;height:17px;background:#00D4A0;margin-left:2px;animation:vy-cursor 1.1s steps(1) infinite"></span>
|
||
</div>
|
||
<span class="mono" style="font-size:8px;letter-spacing:.42em;color:#707080;line-height:1">SPORTS INTELLIGENCE TERMINAL</span>
|
||
</div>
|
||
</div>
|
||
<div style="display:flex;align-items:center;gap:20px">
|
||
<span class="mono" data-event style="font-size:10.5px;letter-spacing:.1em;color:#00D4A0;opacity:0;min-width:0;white-space:nowrap"></span>
|
||
<div style="display:flex;align-items:center;gap:16px;padding-right:18px;border-right:1px solid #1E1E2A">
|
||
<div style="display:flex;flex-direction:column;align-items:flex-end;gap:1px">
|
||
<span class="mono" data-breadth-edges style="font-size:12px;color:#F0F0F0;font-weight:700;line-height:1">14</span>
|
||
<span class="mono" style="font-size:8px;letter-spacing:.16em;color:#707080;line-height:1">EDGES</span>
|
||
</div>
|
||
<div style="display:flex;flex-direction:column;align-items:flex-end;gap:1px">
|
||
<span class="mono" data-breadth-clv style="font-size:12px;color:#00D4A0;font-weight:700;line-height:1">+2.8%</span>
|
||
<span class="mono" style="font-size:8px;letter-spacing:.16em;color:#707080;line-height:1">AVG CLV</span>
|
||
</div>
|
||
</div>
|
||
<div style="display:flex;align-items:center;gap:8px">
|
||
<span style="width:7px;height:7px;border-radius:50%;background:#00D4A0;animation:vy-syncdot 1.4s ease-in-out infinite"></span>
|
||
<span class="mono" style="font-size:11px;letter-spacing:.18em;color:#B8BCC8">SYNC</span>
|
||
<span class="mono" data-sync-clock style="font-size:12px;color:#F0F0F0;letter-spacing:.06em">--:--:--</span>
|
||
</div>
|
||
<button onClick="{{ openCmd }}" style="cursor:pointer;display:inline-flex;align-items:center;gap:7px;height:26px;padding:0 9px;border-radius:7px;background:#101018;border:1px solid #1E1E2A" style-hover="background:#14141E;border-color:#2A2A38">
|
||
<span class="mono" style="font-size:9.5px;letter-spacing:.1em;color:#707080">SEARCH</span>
|
||
<span class="mono" style="font-size:9px;color:#B8BCC8;background:#06060B;border:1px solid #2A2A38;border-radius:4px;padding:1px 5px;letter-spacing:.02em">⌘K</span>
|
||
</button>
|
||
<div class="mono" style="font-size:11px;color:#707080;letter-spacing:.12em">$44.99<span style="color:#2A2A38">/mo</span></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div style="max-width:1240px;margin:0 auto;padding:0 40px">
|
||
|
||
<!-- ============ MASTHEAD ============ -->
|
||
<div style="padding:52px 0 30px">
|
||
<div class="mono" style="font-size:11px;letter-spacing:.34em;color:#00D4A0;margin-bottom:16px">01 · THE TERMINAL · VISUAL SYSTEM v2</div>
|
||
<h1 style="font-size:44px;font-weight:800;letter-spacing:-.02em;line-height:1.02;max-width:760px">The instrument, not the sportsbook.</h1>
|
||
<p style="margin-top:16px;max-width:560px;color:#B8BCC8;font-size:15px;line-height:1.55">Dense but ranked. Mostly still, then it reacts — a number pulses the instant a line moves, a card breathes when its game goes live. One hero per screen.</p>
|
||
</div>
|
||
|
||
<!-- ============ HERO ASSEMBLY ============ -->
|
||
<div id="terminal" data-screen-label="Hero assembly" style="margin-top:14px">
|
||
<div style="display:flex;align-items:baseline;justify-content:space-between;margin-bottom:14px">
|
||
<div style="display:flex;align-items:center;gap:12px">
|
||
<span class="mono" style="font-size:12px;letter-spacing:.28em;color:#F0F0F0;font-weight:700">TONIGHT'S SLATE</span>
|
||
<span class="mono" style="font-size:10.5px;letter-spacing:.2em;color:#707080">MULTI-LEAGUE · 47 GAMES · 312 PROPS GRADED</span>
|
||
</div>
|
||
<span class="mono" style="font-size:10.5px;letter-spacing:.2em;color:#707080">RANKED BY EDGE</span>
|
||
</div>
|
||
|
||
<div style="display:grid;grid-template-columns:1fr 1fr;gap:16px">
|
||
<!-- LEFT: ranked edge board -->
|
||
<div ref="{{ boardRef }}" style="position:relative;border-radius:16px;background:#0A0A10;border:1px solid #1E1E2A;overflow:hidden;box-shadow:0 30px 60px -34px rgba(0,0,0,.9),inset 0 1px 0 rgba(255,255,255,.03)">
|
||
<div style="display:flex;align-items:center;justify-content:space-between;padding:15px 16px 13px">
|
||
<div style="display:flex;align-items:center;gap:9px">
|
||
<span class="mono" style="font-size:10.5px;letter-spacing:.24em;color:#F0F0F0;font-weight:700">EDGE BOARD</span>
|
||
<span class="mono" style="font-size:9px;letter-spacing:.14em;color:#707080">14 LIVE</span>
|
||
</div>
|
||
<span class="mono" style="font-size:9px;letter-spacing:.16em;color:#707080">SORTED · EDGE ▼</span>
|
||
</div>
|
||
<div style="height:1px;background:#14141E;transform-origin:left;animation:vy-bootline .6s ease-out both"></div>
|
||
<div style="display:grid;grid-template-columns:20px 1fr auto 58px;align-items:center;gap:12px;padding:9px 16px 7px">
|
||
<span class="mono" style="font-size:8.5px;letter-spacing:.14em;color:#4a4a58">#</span>
|
||
<span class="mono" style="font-size:8.5px;letter-spacing:.14em;color:#4a4a58">READ</span>
|
||
<span class="mono" style="font-size:8.5px;letter-spacing:.14em;color:#4a4a58;justify-self:end">GRD</span>
|
||
<span class="mono" style="font-size:8.5px;letter-spacing:.14em;color:#4a4a58;justify-self:end">EDGE</span>
|
||
</div>
|
||
|
||
<div data-row="jokic" style="--o:1;opacity:1;display:grid;grid-template-columns:20px 1fr auto 58px;align-items:center;gap:12px;padding:9px 16px;border-top:1px solid #101018;box-shadow:inset 2px 0 0 rgba(0,212,160,.55);animation:vy-rowin .5s cubic-bezier(.2,.8,.2,1) both;animation-delay:.14s">
|
||
<span class="mono" style="font-size:11px;color:#00D4A0;font-weight:700">01</span>
|
||
<div style="min-width:0"><div style="display:flex;align-items:center;gap:8px"><span style="width:7px;height:7px;border-radius:2px;background:#4C8BF5;flex:none"></span><span style="font-size:13px;font-weight:700">Jokić <span style="color:#B8BCC8;font-weight:500">o27.5 PTS</span></span></div><div class="mono" style="font-size:8.5px;letter-spacing:.1em;color:#707080;margin-top:3px;padding-left:15px">NBA · <span style="display:inline-block;width:10px;height:10px;border-radius:3px;background:linear-gradient(135deg,#0E4DA4,#4C8BF5);vertical-align:-1.5px;margin-right:3px"></span>DEN @ <span style="display:inline-block;width:10px;height:10px;border-radius:3px;background:linear-gradient(135deg,#0C2340,#236192);vertical-align:-1.5px;margin-right:3px"></span>MIN</div></div>
|
||
<span class="mono" style="justify-self:end;display:inline-flex;align-items:center;height:18px;padding:0 7px;border-radius:5px;background:rgba(0,212,160,.14);color:#00D4A0;font-weight:800;font-size:10.5px;border:1px solid rgba(0,212,160,.3)">A+</span>
|
||
<span class="mono" data-react data-fmt="edge" style="justify-self:end;text-align:right;font-size:12.5px;font-weight:700;color:#00D4A0;padding:1px 4px;border-radius:5px">+8.4%</span>
|
||
</div>
|
||
<div data-row="skenes" style="--o:1;opacity:1;display:grid;grid-template-columns:20px 1fr auto 58px;align-items:center;gap:12px;padding:9px 16px;border-top:1px solid #101018;animation:vy-rowin .5s cubic-bezier(.2,.8,.2,1) both;animation-delay:.2s">
|
||
<span class="mono" style="font-size:11px;color:#707080;font-weight:600">02</span>
|
||
<div style="min-width:0"><div style="display:flex;align-items:center;gap:8px"><span style="width:7px;height:7px;border-radius:2px;background:#C9A227;flex:none"></span><span style="font-size:13px;font-weight:700">Skenes <span style="color:#B8BCC8;font-weight:500">o6.5 K</span></span></div><div class="mono" style="font-size:8.5px;letter-spacing:.1em;color:#707080;margin-top:3px;padding-left:15px">MLB · <span style="display:inline-block;width:10px;height:10px;border-radius:3px;background:linear-gradient(135deg,#2b2b2b,#c9a227);vertical-align:-1.5px;margin-right:3px"></span>PIT @ <span style="display:inline-block;width:10px;height:10px;border-radius:3px;background:linear-gradient(135deg,#0E3386,#CC3433);vertical-align:-1.5px;margin-right:3px"></span>CHC</div></div>
|
||
<span class="mono" style="justify-self:end;display:inline-flex;align-items:center;height:18px;padding:0 7px;border-radius:5px;background:rgba(0,212,160,.1);color:#00D4A0;font-weight:800;font-size:10.5px;border:1px solid rgba(0,212,160,.24)">A</span>
|
||
<span class="mono" data-react data-fmt="edge" style="justify-self:end;text-align:right;font-size:12.5px;font-weight:700;color:#00D4A0;padding:1px 4px;border-radius:5px">+6.1%</span>
|
||
</div>
|
||
<div data-row="edwards" style="--o:1;opacity:1;display:grid;grid-template-columns:20px 1fr auto 58px;align-items:center;gap:12px;padding:9px 16px;border-top:1px solid #101018;box-shadow:inset 2px 0 0 rgba(0,212,160,.4);animation:vy-rowin .5s cubic-bezier(.2,.8,.2,1) both;animation-delay:.26s">
|
||
<span class="mono" style="font-size:11px;color:#707080;font-weight:600">03</span>
|
||
<div style="min-width:0"><div style="display:flex;align-items:center;gap:8px"><span style="width:7px;height:7px;border-radius:50%;background:#00D4A0;flex:none;animation:vy-livedot 1.5s ease-in-out infinite"></span><span style="font-size:13px;font-weight:700">Edwards <span style="color:#B8BCC8;font-weight:500">o5.5 AST</span></span></div><div class="mono" style="font-size:8.5px;letter-spacing:.1em;color:#00D4A0;margin-top:3px;padding-left:15px">LIVE · Q3 4:12 · DEN @ MIN</div></div>
|
||
<span class="mono" style="justify-self:end;display:inline-flex;align-items:center;height:18px;padding:0 7px;border-radius:5px;background:rgba(0,212,160,.1);color:#00D4A0;font-weight:800;font-size:10.5px;border:1px solid rgba(0,212,160,.24)">A</span>
|
||
<span class="mono" data-react data-fmt="edge" style="justify-self:end;text-align:right;font-size:12.5px;font-weight:700;color:#00D4A0;padding:1px 4px;border-radius:5px">+5.2%</span>
|
||
</div>
|
||
<div data-row="judge" style="--o:.86;opacity:.86;display:grid;grid-template-columns:20px 1fr auto 58px;align-items:center;gap:12px;padding:9px 16px;border-top:1px solid #101018;animation:vy-rowin .5s cubic-bezier(.2,.8,.2,1) both;animation-delay:.32s">
|
||
<span class="mono" style="font-size:11px;color:#707080;font-weight:600">04</span>
|
||
<div style="min-width:0"><div style="display:flex;align-items:center;gap:8px"><span style="width:7px;height:7px;border-radius:2px;background:#1b3a6b;flex:none"></span><span style="font-size:13px;font-weight:600">Judge <span style="color:#B8BCC8;font-weight:500">o1.5 TB</span></span></div><div class="mono" style="font-size:8.5px;letter-spacing:.1em;color:#707080;margin-top:3px;padding-left:15px">MLB · <span style="display:inline-block;width:10px;height:10px;border-radius:3px;background:linear-gradient(135deg,#1b3a6b,#0C2340);vertical-align:-1.5px;margin-right:3px"></span>NYY @ <span style="display:inline-block;width:10px;height:10px;border-radius:3px;background:linear-gradient(135deg,#BD3039,#6b1c22);vertical-align:-1.5px;margin-right:3px"></span>BOS</div></div>
|
||
<span class="mono" style="justify-self:end;display:inline-flex;align-items:center;height:18px;padding:0 7px;border-radius:5px;background:#14141E;color:#F0F0F0;font-weight:800;font-size:10.5px;border:1px solid #1E1E2A">B</span>
|
||
<span class="mono" data-react data-fmt="edge" style="justify-self:end;text-align:right;font-size:12.5px;font-weight:700;color:#00D4A0;padding:1px 4px;border-radius:5px">+3.4%</span>
|
||
</div>
|
||
<div data-row="mcdavid" style="--o:.86;opacity:.86;display:grid;grid-template-columns:20px 1fr auto 58px;align-items:center;gap:12px;padding:9px 16px;border-top:1px solid #101018;animation:vy-rowin .5s cubic-bezier(.2,.8,.2,1) both;animation-delay:.38s">
|
||
<span class="mono" style="font-size:11px;color:#707080;font-weight:600">05</span>
|
||
<div style="min-width:0"><div style="display:flex;align-items:center;gap:8px"><span style="width:7px;height:7px;border-radius:2px;background:#FC4C02;flex:none"></span><span style="font-size:13px;font-weight:600">McDavid <span style="color:#B8BCC8;font-weight:500">o1.5 PTS</span></span></div><div class="mono" style="font-size:8.5px;letter-spacing:.1em;color:#707080;margin-top:3px;padding-left:15px">NHL · EDM @ CGY</div></div>
|
||
<span class="mono" style="justify-self:end;display:inline-flex;align-items:center;height:18px;padding:0 7px;border-radius:5px;background:#14141E;color:#F0F0F0;font-weight:800;font-size:10.5px;border:1px solid #1E1E2A">B</span>
|
||
<span class="mono" data-react data-fmt="edge" style="justify-self:end;text-align:right;font-size:12.5px;font-weight:700;color:#00D4A0;padding:1px 4px;border-radius:5px">+3.0%</span>
|
||
</div>
|
||
<div data-row="mahomes" style="--o:.86;opacity:.86;display:grid;grid-template-columns:20px 1fr auto 58px;align-items:center;gap:12px;padding:9px 16px;border-top:1px solid #101018;animation:vy-rowin .5s cubic-bezier(.2,.8,.2,1) both;animation-delay:.44s">
|
||
<span class="mono" style="font-size:11px;color:#707080;font-weight:600">06</span>
|
||
<div style="min-width:0"><div style="display:flex;align-items:center;gap:8px"><span style="width:7px;height:7px;border-radius:2px;background:#E31837;flex:none"></span><span style="font-size:13px;font-weight:600">Mahomes <span style="color:#B8BCC8;font-weight:500">o274.5 PYD</span></span></div><div class="mono" style="font-size:8.5px;letter-spacing:.1em;color:#707080;margin-top:3px;padding-left:15px">NFL · KC @ BUF</div></div>
|
||
<span class="mono" style="justify-self:end;display:inline-flex;align-items:center;height:18px;padding:0 7px;border-radius:5px;background:#14141E;color:#F0F0F0;font-weight:800;font-size:10.5px;border:1px solid #1E1E2A">B</span>
|
||
<span class="mono" data-react data-fmt="edge" style="justify-self:end;text-align:right;font-size:12.5px;font-weight:700;color:#00D4A0;padding:1px 4px;border-radius:5px">+2.6%</span>
|
||
</div>
|
||
<div data-row="betts" style="--o:.64;opacity:.64;display:grid;grid-template-columns:20px 1fr auto 58px;align-items:center;gap:12px;padding:9px 16px;border-top:1px solid #101018;animation:vy-rowin .5s cubic-bezier(.2,.8,.2,1) both;animation-delay:.5s">
|
||
<span class="mono" style="font-size:11px;color:#707080;font-weight:600">07</span>
|
||
<div style="min-width:0"><div style="display:flex;align-items:center;gap:8px"><span style="width:7px;height:7px;border-radius:2px;background:#2f7fd0;flex:none"></span><span style="font-size:13px;font-weight:600">Betts <span style="color:#B8BCC8;font-weight:500">o1.5 TB</span></span></div><div class="mono" style="font-size:8.5px;letter-spacing:.1em;color:#707080;margin-top:3px;padding-left:15px">MLB · <span style="display:inline-block;width:10px;height:10px;border-radius:3px;background:linear-gradient(135deg,#005A9C,#2f7fd0);vertical-align:-1.5px;margin-right:3px"></span>LAD @ <span style="display:inline-block;width:10px;height:10px;border-radius:3px;background:linear-gradient(135deg,#2F241D,#8a6d4a);vertical-align:-1.5px;margin-right:3px"></span>SD</div></div>
|
||
<span class="mono" style="justify-self:end;display:inline-flex;align-items:center;height:18px;padding:0 7px;border-radius:5px;background:#14141E;color:#B8BCC8;font-weight:800;font-size:10.5px;border:1px solid #1E1E2A">C</span>
|
||
<span class="mono" data-react data-fmt="edge" style="justify-self:end;text-align:right;font-size:12.5px;font-weight:700;color:#00D4A0;padding:1px 4px;border-radius:5px">+2.1%</span>
|
||
</div>
|
||
<div data-row="brunson" style="--o:.64;opacity:.64;display:grid;grid-template-columns:20px 1fr auto 58px;align-items:center;gap:12px;padding:9px 16px;border-top:1px solid #101018;animation:vy-rowin .5s cubic-bezier(.2,.8,.2,1) both;animation-delay:.56s">
|
||
<span class="mono" style="font-size:11px;color:#707080;font-weight:600">08</span>
|
||
<div style="min-width:0"><div style="display:flex;align-items:center;gap:8px"><span style="width:7px;height:7px;border-radius:2px;background:#F58426;flex:none"></span><span style="font-size:13px;font-weight:600">Brunson <span style="color:#B8BCC8;font-weight:500">o24.5 PTS</span></span></div><div class="mono" style="font-size:8.5px;letter-spacing:.1em;color:#707080;margin-top:3px;padding-left:15px">NBA · NYK @ BOS</div></div>
|
||
<span class="mono" style="justify-self:end;display:inline-flex;align-items:center;height:18px;padding:0 7px;border-radius:5px;background:#14141E;color:#B8BCC8;font-weight:800;font-size:10.5px;border:1px solid #1E1E2A">C</span>
|
||
<span class="mono" data-react data-fmt="edge" style="justify-self:end;text-align:right;font-size:12.5px;font-weight:700;color:#00D4A0;padding:1px 4px;border-radius:5px">+1.4%</span>
|
||
</div>
|
||
<div data-row="curry" style="--o:.48;opacity:.48;display:grid;grid-template-columns:20px 1fr auto 58px;align-items:center;gap:12px;padding:9px 16px;border-top:1px solid #101018;animation:vy-rowin .5s cubic-bezier(.2,.8,.2,1) both;animation-delay:.62s">
|
||
<span class="mono" style="font-size:11px;color:#707080;font-weight:600">09</span>
|
||
<div style="min-width:0"><div style="display:flex;align-items:center;gap:8px"><span style="width:7px;height:7px;border-radius:2px;background:#1D428A;flex:none"></span><span style="font-size:13px;font-weight:600">Curry <span style="color:#B8BCC8;font-weight:500">o4.5 3PM</span></span></div><div class="mono" style="font-size:8.5px;letter-spacing:.1em;color:#707080;margin-top:3px;padding-left:15px">NBA · GSW @ SAC</div></div>
|
||
<span class="mono" style="justify-self:end;display:inline-flex;align-items:center;height:18px;padding:0 7px;border-radius:5px;background:#14141E;color:#707080;font-weight:800;font-size:10.5px;border:1px solid #1E1E2A">C</span>
|
||
<span class="mono" data-react data-fmt="edge" style="justify-self:end;text-align:right;font-size:12.5px;font-weight:700;color:#00D4A0;padding:1px 4px;border-radius:5px">+0.4%</span>
|
||
</div>
|
||
<div data-row="lavine" style="--o:.48;opacity:.48;display:grid;grid-template-columns:20px 1fr auto 58px;align-items:center;gap:12px;padding:9px 16px;border-top:1px solid #101018;animation:vy-rowin .5s cubic-bezier(.2,.8,.2,1) both;animation-delay:.68s">
|
||
<span class="mono" style="font-size:11px;color:#707080;font-weight:600">10</span>
|
||
<div style="min-width:0"><div style="display:flex;align-items:center;gap:8px"><span style="width:7px;height:7px;border-radius:2px;background:#CE1141;flex:none"></span><span style="font-size:13px;font-weight:600">LaVine <span style="color:#B8BCC8;font-weight:500">o22.5 PTS</span></span></div><div class="mono" style="font-size:8.5px;letter-spacing:.1em;color:#707080;margin-top:3px;padding-left:15px">NBA · <span style="display:inline-block;width:10px;height:10px;border-radius:3px;background:linear-gradient(135deg,#CE1141,#6d0a22);vertical-align:-1.5px;margin-right:3px"></span>CHI @ <span style="display:inline-block;width:10px;height:10px;border-radius:3px;background:linear-gradient(135deg,#00471B,#0a7a3a);vertical-align:-1.5px;margin-right:3px"></span>MIL</div></div>
|
||
<span class="mono" style="justify-self:end;display:inline-flex;align-items:center;height:18px;padding:0 7px;border-radius:5px;background:rgba(255,71,87,.1);color:#FF4757;font-weight:800;font-size:10.5px;border:1px solid rgba(255,71,87,.28)">D</span>
|
||
<span class="mono" data-react data-fmt="edge" style="justify-self:end;text-align:right;font-size:12.5px;font-weight:700;color:#FF4757;padding:1px 4px;border-radius:5px">-1.2%</span>
|
||
</div>
|
||
<div style="padding:11px 16px;border-top:1px solid #101018;display:flex;align-items:center;justify-content:space-between">
|
||
<span class="mono" style="font-size:9px;letter-spacing:.14em;color:#4a4a58">+ 37 GRADED READS BELOW</span>
|
||
<span class="mono" style="font-size:9px;letter-spacing:.14em;color:#707080">VIEW ALL ▸</span>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- RIGHT: hero grade reveal -->
|
||
<div style="position:relative;border-radius:16px;background:linear-gradient(180deg,#12121C,#0C0C12);border:1px solid #2A2A38;overflow:hidden;box-shadow:0 30px 60px -34px rgba(0,0,0,.9),inset 0 1px 0 rgba(255,255,255,.05);animation:vy-arrive .7s cubic-bezier(.2,.8,.2,1) both">
|
||
<div class="vy-scanwrap"></div>
|
||
<div style="position:relative;padding:22px 24px">
|
||
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:20px">
|
||
<span class="mono" style="font-size:10.5px;letter-spacing:.28em;color:#707080">DECLASSIFIED · TOP GRADE TONIGHT</span>
|
||
<span class="mono" style="font-size:10px;letter-spacing:.18em;color:#00D4A0">CLV-VERIFIED</span>
|
||
</div>
|
||
|
||
<div style="display:flex;align-items:center;gap:20px">
|
||
<div style="display:flex;flex-direction:column;align-items:center;gap:6px">
|
||
<div class="mono" style="font-size:82px;line-height:.82;font-weight:800;color:#00D4A0;text-shadow:0 0 34px rgba(0,212,160,.5)">A+</div>
|
||
<div class="mono" style="font-size:9.5px;letter-spacing:.24em;color:#707080">TIER</div>
|
||
</div>
|
||
<div style="flex:1;min-width:0">
|
||
<div style="display:flex;align-items:center;gap:10px;margin-bottom:8px">
|
||
<span style="width:38px;height:38px;border-radius:9px;background:linear-gradient(135deg,#0E4DA4,#4C8BF5);display:flex;align-items:center;justify-content:center;font-weight:800;font-size:13px;color:#fff">NJ</span>
|
||
<div>
|
||
<div style="font-weight:700;font-size:16px;line-height:1.1">Nikola Jokić</div>
|
||
<div class="mono" style="font-size:10.5px;color:#707080;letter-spacing:.08em">C · DEN · <span style="color:#B8BCC8">CONFIRMED</span></div>
|
||
</div>
|
||
</div>
|
||
<div style="font-size:15px;font-weight:600;line-height:1.35">Over 27.5 Points</div>
|
||
<div style="display:flex;align-items:center;gap:10px;margin-top:8px">
|
||
<span class="mono" style="font-size:11px;color:#B8BCC8">DK <span style="color:#F0F0F0">-114</span></span>
|
||
<span class="mono" style="font-size:12px;color:#00D4A0">▲</span>
|
||
<span class="mono" style="font-size:10.5px;color:#707080;letter-spacing:.1em">opened 25.5</span>
|
||
</div>
|
||
<!-- steam sparkline: the story of the line -->
|
||
<div style="margin-top:12px">
|
||
<svg width="100%" height="34" viewBox="0 0 220 34" preserveAspectRatio="none" style="display:block">
|
||
<polyline points="0,26 30,26 55,24 80,25 105,18 130,17 155,10 185,8 214,5" fill="none" stroke="#00D4A0" stroke-width="1.6" stroke-linejoin="round" stroke-linecap="round" opacity=".9"></polyline>
|
||
<polyline points="0,26 30,26 55,24 80,25 105,18 130,17 155,10 185,8 214,5 214,34 0,34" fill="rgba(0,212,160,.07)" stroke="none"></polyline>
|
||
<circle cx="214" cy="5" r="2.6" fill="#00D4A0" style="animation:vy-livedot 1.5s ease-in-out infinite"></circle>
|
||
</svg>
|
||
<div style="display:flex;align-items:center;justify-content:space-between;margin-top:4px">
|
||
<span class="mono" style="font-size:8.5px;letter-spacing:.12em;color:#4a4a58">OPEN 25.5 · 9:02 AM</span>
|
||
<span class="mono" style="font-size:8.5px;letter-spacing:.12em;color:#00D4A0">STEAM 4:40 PM ▲</span>
|
||
<span class="mono" style="font-size:8.5px;letter-spacing:.12em;color:#4a4a58">NOW 27.5</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- edge + stat context row -->
|
||
<div style="display:grid;grid-template-columns:repeat(3,1fr);gap:1px;margin-top:20px;background:#1E1E2A;border:1px solid #1E1E2A;border-radius:10px;overflow:hidden">
|
||
<div style="background:#0E0E14;padding:12px 14px">
|
||
<div class="mono" style="font-size:9.5px;letter-spacing:.18em;color:#707080;margin-bottom:6px">EDGE</div>
|
||
<div class="mono" data-react data-fmt="edge" style="font-size:20px;font-weight:800;color:#00D4A0;padding:1px 4px;border-radius:5px">+8.4%</div>
|
||
</div>
|
||
<div style="background:#0E0E14;padding:12px 14px">
|
||
<div class="mono" style="font-size:9.5px;letter-spacing:.18em;color:#707080;margin-bottom:6px">L10 HIT</div>
|
||
<div class="mono" style="font-size:20px;font-weight:800;color:#F0F0F0">8<span style="color:#707080;font-size:13px">/10</span></div>
|
||
</div>
|
||
<div style="background:#0E0E14;padding:12px 14px">
|
||
<div class="mono" style="font-size:9.5px;letter-spacing:.18em;color:#707080;margin-bottom:6px">PROJ</div>
|
||
<div class="mono" style="font-size:20px;font-weight:800;color:#F0F0F0">30.8</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- last 10 dot strip + legend -->
|
||
<div style="display:flex;align-items:center;justify-content:space-between;margin-top:16px">
|
||
<div style="display:flex;align-items:center;gap:5px">
|
||
<span style="width:14px;height:14px;border-radius:4px;background:#00D4A0"></span>
|
||
<span style="width:14px;height:14px;border-radius:4px;background:#00D4A0"></span>
|
||
<span style="width:14px;height:14px;border-radius:4px;background:#FF4757"></span>
|
||
<span style="width:14px;height:14px;border-radius:4px;background:#00D4A0"></span>
|
||
<span style="width:14px;height:14px;border-radius:4px;background:#00D4A0"></span>
|
||
<span style="width:14px;height:14px;border-radius:4px;background:#00D4A0"></span>
|
||
<span style="width:14px;height:14px;border-radius:4px;background:#FF4757"></span>
|
||
<span style="width:14px;height:14px;border-radius:4px;background:#00D4A0"></span>
|
||
<span style="width:14px;height:14px;border-radius:4px;background:#00D4A0"></span>
|
||
<span style="width:14px;height:14px;border-radius:4px;background:#00D4A0"></span>
|
||
</div>
|
||
<div style="display:flex;align-items:center;gap:12px">
|
||
<span style="display:flex;align-items:center;gap:5px"><span style="width:9px;height:9px;border-radius:2px;background:#00D4A0"></span><span class="mono" style="font-size:9.5px;color:#707080;letter-spacing:.1em">HIT</span></span>
|
||
<span style="display:flex;align-items:center;gap:5px"><span style="width:9px;height:9px;border-radius:2px;background:#FF4757"></span><span class="mono" style="font-size:9.5px;color:#707080;letter-spacing:.1em">MISS</span></span>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- VYNDR intelligence panel -->
|
||
<div style="margin-top:16px;background:#0A0A10;border:1px solid #14141E;border-radius:10px;padding:14px 16px">
|
||
<div style="display:flex;align-items:center;gap:8px;margin-bottom:8px">
|
||
<span style="width:5px;height:5px;border-radius:50%;background:#00D4A0"></span>
|
||
<span class="mono" style="font-size:9.5px;letter-spacing:.24em;color:#B8BCC8">VYNDR INTELLIGENCE</span>
|
||
</div>
|
||
<p style="font-size:12.5px;line-height:1.5;color:#B8BCC8">MIN plays the 4th-fastest pace vs. centers and concedes <span class="mono" style="color:#F0F0F0">+3.1</span> rebounds to <span style="color:#F0F0F0">CONDUCTOR</span>-type bigs. Line lagged the pace matchup by <span class="mono" style="color:#00D4A0">2.0</span> — the steam confirms it.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ============ ACT II ============ -->
|
||
<div data-reveal style="margin-top:110px;display:flex;align-items:baseline;gap:18px;border-bottom:1px solid #14141E;padding-bottom:18px">
|
||
<span class="mono" style="font-size:64px;font-weight:800;line-height:.8;color:#14141E;-webkit-text-stroke:1px #2A2A38">02</span>
|
||
<div><div class="mono" style="font-size:13px;letter-spacing:.3em;color:#F0F0F0;font-weight:800">THE SYSTEM</div><div style="font-size:12.5px;color:#707080;margin-top:5px">Five components + 74 marks. Every other page is assembled from these.</div></div>
|
||
</div>
|
||
|
||
<div id="system" data-screen-label="Component gallery" style="margin-top:44px">
|
||
<div style="display:flex;align-items:center;gap:12px;margin-bottom:6px">
|
||
<span class="mono" style="font-size:12px;letter-spacing:.28em;color:#F0F0F0;font-weight:700">COMPONENT SYSTEM</span>
|
||
<span class="mono" style="font-size:10.5px;letter-spacing:.18em;color:#707080">THE PARTS EVERY SURFACE INHERITS</span>
|
||
</div>
|
||
<div style="height:1px;background:#14141E;margin:14px 0 26px"></div>
|
||
|
||
<div style="display:grid;grid-template-columns:1fr 1fr;gap:26px 34px">
|
||
|
||
<!-- STAT BLOCK -->
|
||
<div>
|
||
<div class="mono" style="font-size:10px;letter-spacing:.2em;color:#00D4A0;margin-bottom:12px">02 · STAT BLOCK</div>
|
||
<div style="border-radius:14px;background:#0E0E14;border:1px solid #1E1E2A;padding:18px">
|
||
<div style="display:flex;align-items:baseline;justify-content:space-between">
|
||
<span class="mono" style="font-size:10px;letter-spacing:.16em;color:#707080">PTS / GAME · L15</span>
|
||
<span class="mono" style="font-size:10px;letter-spacing:.12em;color:#00D4A0">▲ +2.3</span>
|
||
</div>
|
||
<div style="display:flex;align-items:flex-end;gap:12px;margin-top:8px">
|
||
<span class="mono" style="font-size:46px;font-weight:800;line-height:.9;color:#F0F0F0">28.6</span>
|
||
<div style="padding-bottom:6px">
|
||
<div class="mono" style="font-size:11px;color:#00D4A0;font-weight:700">#4 <span style="color:#707080;font-weight:400">of 82 C</span></div>
|
||
<div class="mono" style="font-size:10px;color:#707080">vs <span style="display:inline-block;width:10px;height:10px;border-radius:3px;background:linear-gradient(135deg,#0C2340,#236192);vertical-align:-1.5px;margin-right:3px"></span>MIN allows 26.1</div>
|
||
</div>
|
||
</div>
|
||
<div style="display:flex;align-items:center;gap:4px;margin-top:14px">
|
||
<span style="width:12px;height:12px;border-radius:3px;background:#00D4A0"></span>
|
||
<span style="width:12px;height:12px;border-radius:3px;background:#00D4A0"></span>
|
||
<span style="width:12px;height:12px;border-radius:3px;background:#FF4757"></span>
|
||
<span style="width:12px;height:12px;border-radius:3px;background:#00D4A0"></span>
|
||
<span style="width:12px;height:12px;border-radius:3px;background:#00D4A0"></span>
|
||
<span style="width:12px;height:12px;border-radius:3px;background:#00D4A0"></span>
|
||
<span style="width:12px;height:12px;border-radius:3px;background:#00D4A0"></span>
|
||
<span style="width:12px;height:12px;border-radius:3px;background:#FF4757"></span>
|
||
<span style="width:12px;height:12px;border-radius:3px;background:#00D4A0"></span>
|
||
<span style="width:12px;height:12px;border-radius:3px;background:#00D4A0"></span>
|
||
<span style="flex:1"></span>
|
||
<span class="mono" style="font-size:9.5px;color:#707080;letter-spacing:.1em">L10</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- PLAYER IDENTITY BLOCK -->
|
||
<div>
|
||
<div class="mono" style="font-size:10px;letter-spacing:.2em;color:#00D4A0;margin-bottom:12px">03 · PLAYER IDENTITY</div>
|
||
<div style="border-radius:14px;background:#0E0E14;border:1px solid #1E1E2A;padding:18px;display:flex;gap:15px;align-items:center">
|
||
<div style="position:relative;width:64px;height:64px;flex:none">
|
||
<div style="width:64px;height:64px;border-radius:12px;background:linear-gradient(135deg,#0E4DA4,#1a2f5a);display:flex;align-items:center;justify-content:center;font-family:'JetBrains Mono',monospace;font-weight:800;font-size:22px;color:#8fb4ff;border:1px solid rgba(76,139,245,.4)">NJ</div>
|
||
<image-slot id="headshot-jokic" shape="rounded" radius="12" placeholder="" style="position:absolute;inset:0;width:64px;height:64px"></image-slot>
|
||
</div>
|
||
<div style="flex:1;min-width:0">
|
||
<div style="display:flex;align-items:center;gap:8px">
|
||
<span style="font-weight:700;font-size:17px">Nikola Jokić</span>
|
||
<span class="mono" style="display:inline-flex;align-items:center;height:17px;padding:0 6px;border-radius:4px;background:rgba(0,212,160,.12);border:1px solid rgba(0,212,160,.3);color:#00D4A0;font-size:9px;font-weight:700;letter-spacing:.08em">CONFIRMED</span>
|
||
</div>
|
||
<div class="mono" style="font-size:11px;color:#707080;margin-top:3px;letter-spacing:.06em">C · #15 · Denver Nuggets</div>
|
||
<div style="display:flex;align-items:center;gap:8px;margin-top:10px">
|
||
<span style="display:inline-flex;align-items:center;gap:5px;height:22px;padding:0 9px;border-radius:6px;background:#14141E;border:1px solid #2A2A38">
|
||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none"><circle cx="12" cy="16" r="2.6" fill="#6C8CFF"/><path fill="none" stroke="#6C8CFF" stroke-width="2.2" stroke-linecap="round" d="M12 14 6 5M12 14l6-9M12 14v-4"/></svg>
|
||
<span class="mono" style="font-size:10px;letter-spacing:.1em;color:#6C8CFF;font-weight:700">CONDUCTOR</span>
|
||
</span>
|
||
<span style="display:inline-flex;align-items:center;gap:5px;height:22px;padding:0 9px;border-radius:6px;background:#0B0B11;border:1px solid #1E1E2A;opacity:.7">
|
||
<svg width="12" height="12" viewBox="0 0 24 24" fill="none"><path fill="#FF6B4A" fill-opacity=".2" d="M12 2c3.5 4.5 5.5 6 5.5 10a5.5 5.5 0 0 1-11 0C6.5 8 8.5 6.5 12 2Z"/><path fill="none" stroke="#FF6B4A" stroke-width="2.2" stroke-linejoin="round" d="M12 7c2 2.6 3 3.8 3 6a3 3 0 0 1-6 0c0-2.2 1-3.4 3-6Z"/></svg>
|
||
<span class="mono" style="font-size:9.5px;letter-spacing:.1em;color:#B8BCC8;font-weight:600">TORCH</span>
|
||
</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- LINE DISPLAY -->
|
||
<div>
|
||
<div class="mono" style="font-size:10px;letter-spacing:.2em;color:#00D4A0;margin-bottom:12px">04 · LINE DISPLAY</div>
|
||
<div style="border-radius:14px;background:#0E0E14;border:1px solid #1E1E2A;overflow:hidden">
|
||
<div style="display:flex;align-items:center;justify-content:space-between;padding:13px 16px;border-bottom:1px solid #14141E">
|
||
<span style="font-weight:600;font-size:13px">Jokić o27.5 PTS</span>
|
||
<span class="mono" style="font-size:10px;letter-spacing:.14em;color:#00D4A0">STEAM ▲</span>
|
||
</div>
|
||
<div style="display:flex;flex-direction:column">
|
||
<div style="display:flex;align-items:center;justify-content:space-between;padding:11px 16px;background:rgba(0,212,160,.05);border-left:2px solid #00D4A0">
|
||
<span style="font-weight:700;font-size:12px;color:#F0F0F0;letter-spacing:.03em">DraftKings</span>
|
||
<div style="display:flex;align-items:center;gap:12px">
|
||
<span class="mono" data-react data-fmt="odds" style="font-size:12px;color:#F0F0F0">-114</span>
|
||
<span class="mono" style="display:inline-flex;align-items:center;height:16px;padding:0 6px;border-radius:4px;background:rgba(0,212,160,.14);color:#00D4A0;font-size:9px;font-weight:700;letter-spacing:.08em">BEST</span>
|
||
</div>
|
||
</div>
|
||
<div style="display:flex;align-items:center;justify-content:space-between;padding:11px 16px;border-top:1px solid #14141E">
|
||
<span style="font-weight:600;font-size:12px;color:#B8BCC8">FanDuel</span>
|
||
<div style="display:flex;align-items:center;gap:12px">
|
||
<span class="mono" data-react data-fmt="odds" style="font-size:12px;color:#B8BCC8">-120</span>
|
||
<span class="mono" style="font-size:11px;color:#FF9F45">▲</span>
|
||
</div>
|
||
</div>
|
||
<div style="display:flex;align-items:center;justify-content:space-between;padding:11px 16px;border-top:1px solid #14141E">
|
||
<span style="font-weight:600;font-size:12px;color:#B8BCC8">BetMGM</span>
|
||
<div style="display:flex;align-items:center;gap:12px">
|
||
<span class="mono" data-react data-fmt="odds" style="font-size:12px;color:#B8BCC8">-118</span>
|
||
<span class="mono" style="font-size:11px;color:#707080">—</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div style="display:flex;align-items:center;justify-content:space-between;padding:11px 16px;background:#0A0A10;border-top:1px solid #14141E">
|
||
<span class="mono" style="font-size:10px;letter-spacing:.14em;color:#707080">CLV vs CLOSE</span>
|
||
<span class="mono" data-react data-fmt="edge" style="font-size:12px;font-weight:700;color:#00D4A0;padding:1px 4px;border-radius:5px">+2.4%</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- GRADE REVEAL (compact variant) -->
|
||
<div>
|
||
<div class="mono" style="font-size:10px;letter-spacing:.2em;color:#00D4A0;margin-bottom:12px">05 · GRADE REVEAL · tiers</div>
|
||
<div style="border-radius:14px;background:#0E0E14;border:1px solid #1E1E2A;padding:18px">
|
||
<div style="display:grid;grid-template-columns:repeat(5,1fr);gap:10px">
|
||
<div style="display:flex;flex-direction:column;align-items:center;gap:7px">
|
||
<div class="mono" style="font-size:30px;font-weight:800;color:#00D4A0;text-shadow:0 0 18px rgba(0,212,160,.45)">A</div>
|
||
<div class="mono" style="font-size:9px;letter-spacing:.14em;color:#00D4A0">EDGE</div>
|
||
</div>
|
||
<div style="display:flex;flex-direction:column;align-items:center;gap:7px">
|
||
<div class="mono" style="font-size:30px;font-weight:800;color:#F0F0F0">B</div>
|
||
<div class="mono" style="font-size:9px;letter-spacing:.14em;color:#707080">LEAN</div>
|
||
</div>
|
||
<div style="display:flex;flex-direction:column;align-items:center;gap:7px">
|
||
<div class="mono" style="font-size:30px;font-weight:800;color:#B8BCC8">C</div>
|
||
<div class="mono" style="font-size:9px;letter-spacing:.14em;color:#707080">PASS</div>
|
||
</div>
|
||
<div style="display:flex;flex-direction:column;align-items:center;gap:7px">
|
||
<div class="mono" style="font-size:30px;font-weight:800;color:#707080">D</div>
|
||
<div class="mono" style="font-size:9px;letter-spacing:.14em;color:#707080">FADE</div>
|
||
</div>
|
||
<div style="display:flex;flex-direction:column;align-items:center;gap:7px">
|
||
<div class="mono" style="font-size:30px;font-weight:800;color:#FF4757">F</div>
|
||
<div class="mono" style="font-size:9px;letter-spacing:.14em;color:#FF4757">AVOID</div>
|
||
</div>
|
||
</div>
|
||
<div style="height:1px;background:#14141E;margin:16px 0"></div>
|
||
<div style="display:flex;align-items:center;justify-content:space-between">
|
||
<span class="mono" style="font-size:10px;color:#707080;letter-spacing:.1em">GLOW RESERVED FOR A-TIER ONLY</span>
|
||
<span class="mono" style="font-size:10px;color:#B8BCC8">EDGE COLORED BY SIGN</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ============ ARCHETYPE GLYPHS ============ -->
|
||
<div id="glyphs" data-screen-label="Archetype glyphs" style="margin-top:64px">
|
||
<div style="display:flex;align-items:center;gap:12px;margin-bottom:6px">
|
||
<span class="mono" style="font-size:12px;letter-spacing:.28em;color:#F0F0F0;font-weight:700">ARCHETYPE GLYPHS</span>
|
||
<span class="mono" style="font-size:10.5px;letter-spacing:.18em;color:#707080">FULL SYSTEM · 83 UNIQUE MARKS · 8 SPORTS + CLASSIFIER LEGACY</span>
|
||
</div>
|
||
<div style="height:1px;background:#14141E;margin:14px 0 20px"></div>
|
||
|
||
<p style="max-width:660px;color:#B8BCC8;font-size:13px;line-height:1.55;margin-bottom:6px">One grid, one weight, one construction logic — filled base plus weighted stroke, so each mark reads as an emblem before the word. Colors deduped <span style="color:#F0F0F0">off signal-green</span> so <span class="mono" style="color:#00D4A0">#00D4A0</span> stays uniquely "edge."</p>
|
||
<p style="max-width:660px;color:#707080;font-size:11.5px;line-height:1.5;margin-bottom:22px"><span class="mono" style="color:#B8BCC8">↺</span> marks names reused across sports — the vocabulary is a language: a <span class="mono" style="color:#B8BCC8">WALL</span> is the immovable last line in every sport.</p>
|
||
|
||
<!-- rendered glyph grid -->
|
||
<div ref="{{ glyphGridRef }}" style="display:grid;grid-template-columns:repeat(6,1fr);gap:12px"></div>
|
||
|
||
<!-- BLEND EXAMPLE -->
|
||
<div style="margin-top:26px;display:grid;grid-template-columns:1fr 1fr;gap:34px;align-items:center">
|
||
<div>
|
||
<div class="mono" style="font-size:10px;letter-spacing:.2em;color:#00D4A0;margin-bottom:12px">THE BLEND · MULTI-ARCHETYPE FINGERPRINT</div>
|
||
<p style="color:#B8BCC8;font-size:13px;line-height:1.55">Players aren't one archetype — they carry a weighted blend. The mark system <span style="color:#F0F0F0">combines</span>: primary dominant + supporting muted. This is the moat nobody copies.</p>
|
||
</div>
|
||
<div style="border-radius:14px;background:#0E0E14;border:1px solid #1E1E2A;padding:20px">
|
||
<div style="display:flex;align-items:center;gap:9px;margin-bottom:16px">
|
||
<span style="width:34px;height:34px;border-radius:8px;background:linear-gradient(135deg,#8B1A1A,#d34a3a);display:flex;align-items:center;justify-content:center;font-weight:800;font-size:11px;color:#fff">TB</span>
|
||
<div>
|
||
<div style="font-weight:700;font-size:14px">Brandon Lowe</div>
|
||
<div class="mono" style="font-size:10px;color:#707080">2B · Tampa Bay Rays</div>
|
||
</div>
|
||
</div>
|
||
<div style="display:flex;align-items:center;gap:16px">
|
||
<div style="display:flex;flex-direction:column;align-items:center;gap:8px">
|
||
<div style="width:56px;height:56px;border-radius:12px;background:rgba(255,159,69,.1);border:1.5px solid rgba(255,159,69,.5);display:flex;align-items:center;justify-content:center">
|
||
<svg width="30" height="30" viewBox="0 0 24 24" fill="none"><path fill="#FF9F45" fill-opacity=".2" d="M12 3l7 9h-4v8H9v-8H5z"/><path fill="none" stroke="#FF9F45" stroke-width="2" stroke-linejoin="round" d="M12 3l7 9h-4v8H9v-8H5z"/></svg>
|
||
</div>
|
||
<div class="mono" style="font-size:9px;letter-spacing:.12em;color:#FF9F45;font-weight:700">BOMBER</div>
|
||
</div>
|
||
<div style="flex:1">
|
||
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:5px">
|
||
<span class="mono" style="font-size:10px;color:#FF9F45;letter-spacing:.1em">PRIMARY · BOMBER</span>
|
||
<span class="mono" style="font-size:11px;color:#F0F0F0;font-weight:700">54%</span>
|
||
</div>
|
||
<div style="height:6px;border-radius:3px;background:#14141E;overflow:hidden;margin-bottom:14px"><div style="width:54%;height:100%;background:#FF9F45"></div></div>
|
||
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:5px">
|
||
<span class="mono" style="font-size:10px;color:#B8BCC8;letter-spacing:.1em">SUPPORTING · DRIVER</span>
|
||
<span class="mono" style="font-size:11px;color:#B8BCC8;font-weight:700">46%</span>
|
||
</div>
|
||
<div style="height:6px;border-radius:3px;background:#14141E;overflow:hidden"><div style="width:46%;height:100%;background:#5A7D9A"></div></div>
|
||
</div>
|
||
<div style="display:flex;flex-direction:column;align-items:center;gap:8px;opacity:.72">
|
||
<div style="width:44px;height:44px;border-radius:10px;background:#0B0B11;border:1px solid #1E1E2A;display:flex;align-items:center;justify-content:center">
|
||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill="none" stroke="#5A7D9A" stroke-width="2.4" stroke-linecap="round" d="M5 19 17 7"/><circle cx="19" cy="5" r="2.2" fill="#5A7D9A"/><path fill="none" stroke="#5A7D9A" stroke-width="1.8" stroke-linecap="round" d="M4 14a10 10 0 0 0 6 6"/></svg>
|
||
</div>
|
||
<div class="mono" style="font-size:8.5px;letter-spacing:.1em;color:#B8BCC8">DRIVER</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ============ STREAKS BILLBOARD ============ -->
|
||
<!-- ============ ACT III ============ -->
|
||
<div data-reveal style="margin-top:110px;display:flex;align-items:baseline;gap:18px;border-bottom:1px solid #14141E;padding-bottom:18px">
|
||
<span class="mono" style="font-size:64px;font-weight:800;line-height:.8;color:#14141E;-webkit-text-stroke:1px #2A2A38">03</span>
|
||
<div><div class="mono" style="font-size:13px;letter-spacing:.3em;color:#F0F0F0;font-weight:800">THE SURFACES</div><div style="font-size:12.5px;color:#707080;margin-top:5px">What gets posted. The timeline is customer #1 — these stop a scroll.</div></div>
|
||
</div>
|
||
|
||
<div id="surfaces" data-screen-label="Streaks billboard" style="margin-top:44px">
|
||
<div style="display:flex;align-items:center;gap:12px;margin-bottom:6px">
|
||
<span class="mono" style="font-size:12px;letter-spacing:.28em;color:#F0F0F0;font-weight:700">STREAKS</span>
|
||
<span class="mono" style="font-size:10.5px;letter-spacing:.18em;color:#707080">A BLOOMBERG ALERT, NOT A LOG LINE</span>
|
||
</div>
|
||
<div style="height:1px;background:#14141E;margin:14px 0 20px"></div>
|
||
|
||
<div style="display:flex;flex-direction:column;gap:10px">
|
||
<!-- streak row 1 -->
|
||
<div style="display:flex;align-items:center;gap:20px;border-radius:14px;background:#0E0E14;border:1px solid #1E1E2A;padding:16px 22px">
|
||
<div style="position:relative;width:52px;height:52px;flex:none">
|
||
<div style="width:52px;height:52px;border-radius:11px;background:linear-gradient(135deg,#552583,#8b5cc7);display:flex;align-items:center;justify-content:center;font-family:'JetBrains Mono',monospace;font-weight:800;font-size:15px;color:#FDB927">LA</div>
|
||
<image-slot id="streak-luka" shape="rounded" radius="11" placeholder="" style="position:absolute;inset:0;width:52px;height:52px"></image-slot>
|
||
</div>
|
||
<div style="flex:1;min-width:0">
|
||
<div style="display:flex;align-items:center;gap:9px">
|
||
<span style="font-weight:700;font-size:16px">Luka Dončić</span>
|
||
<span style="display:inline-flex;align-items:center;gap:5px;height:20px;padding:0 8px;border-radius:6px;background:#14141E;border:1px solid #2A2A38">
|
||
<svg width="12" height="12" viewBox="0 0 24 24" fill="none"><path fill="#FF6B4A" fill-opacity=".2" d="M12 2c3.5 4.5 5.5 6 5.5 10a5.5 5.5 0 0 1-11 0C6.5 8 8.5 6.5 12 2Z"/><path fill="none" stroke="#FF6B4A" stroke-width="2.2" stroke-linejoin="round" d="M12 7c2 2.6 3 3.8 3 6a3 3 0 0 1-6 0c0-2.2 1-3.4 3-6Z"/></svg>
|
||
<span class="mono" style="font-size:9px;letter-spacing:.1em;color:#FF6B4A;font-weight:700">TORCH</span>
|
||
</span>
|
||
</div>
|
||
<div class="mono" style="font-size:11px;color:#707080;margin-top:4px;letter-spacing:.04em">o29.5 PTS · built vs bottom-10 defenses</div>
|
||
</div>
|
||
<div style="display:flex;flex-direction:column;align-items:flex-end;gap:2px">
|
||
<div style="display:flex;align-items:baseline;gap:6px">
|
||
<span class="mono" style="font-size:38px;font-weight:800;line-height:.9;color:#00D4A0;text-shadow:0 0 22px rgba(0,212,160,.4)">11</span>
|
||
<span class="mono" style="font-size:12px;color:#00D4A0;letter-spacing:.1em">STRAIGHT</span>
|
||
</div>
|
||
<span class="mono" style="font-size:10px;color:#707080;letter-spacing:.1em">HIT RATE 100% · L11</span>
|
||
</div>
|
||
</div>
|
||
<!-- streak row 2 (amber caution) -->
|
||
<div style="display:flex;align-items:center;gap:20px;border-radius:14px;background:#0E0E14;border:1px solid #1E1E2A;padding:16px 22px">
|
||
<div style="position:relative;width:52px;height:52px;flex:none">
|
||
<div style="width:52px;height:52px;border-radius:11px;background:linear-gradient(135deg,#134A8E,#3f7fd0);display:flex;align-items:center;justify-content:center;font-family:'JetBrains Mono',monospace;font-weight:800;font-size:15px;color:#fff">TOR</div>
|
||
<image-slot id="streak-vladdy" shape="rounded" radius="11" placeholder="" style="position:absolute;inset:0;width:52px;height:52px"></image-slot>
|
||
</div>
|
||
<div style="flex:1;min-width:0">
|
||
<div style="display:flex;align-items:center;gap:9px">
|
||
<span style="font-weight:700;font-size:16px">Vladimir Guerrero Jr.</span>
|
||
<span style="display:inline-flex;align-items:center;gap:5px;height:20px;padding:0 8px;border-radius:6px;background:#14141E;border:1px solid #2A2A38">
|
||
<svg width="12" height="12" viewBox="0 0 24 24" fill="none"><path fill="#FF9F45" fill-opacity=".22" d="M12 3l7 9h-4v8H9v-8H5z"/><path fill="none" stroke="#FF9F45" stroke-width="2" stroke-linejoin="round" d="M12 3l7 9h-4v8H9v-8H5z"/></svg>
|
||
<span class="mono" style="font-size:9px;letter-spacing:.1em;color:#FF9F45;font-weight:700">BOMBER</span>
|
||
</span>
|
||
</div>
|
||
<div class="mono" style="font-size:11px;color:#707080;margin-top:4px;letter-spacing:.04em">o1.5 TB · <span style="color:#FFB347">correlated w/ team total</span></div>
|
||
</div>
|
||
<div style="display:flex;flex-direction:column;align-items:flex-end;gap:2px">
|
||
<div style="display:flex;align-items:baseline;gap:6px">
|
||
<span class="mono" style="font-size:38px;font-weight:800;line-height:.9;color:#FFB347">7</span>
|
||
<span class="mono" style="font-size:12px;color:#FFB347;letter-spacing:.1em">STRAIGHT</span>
|
||
</div>
|
||
<span class="mono" style="font-size:10px;color:#707080;letter-spacing:.1em">CAUTION · CORRELATION FLAG</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<!-- ============ /u PUBLIC PROFILE ============ -->
|
||
<div data-screen-label="/u public profile" style="margin-top:64px">
|
||
<div style="display:flex;align-items:center;gap:12px;margin-bottom:6px">
|
||
<span class="mono" style="font-size:12px;letter-spacing:.28em;color:#F0F0F0;font-weight:700">PUBLIC RECORD</span>
|
||
<span class="mono" style="font-size:10.5px;letter-spacing:.18em;color:#707080">vyndr.io/u/edgehunter · THE VERIFIED WEAPON</span>
|
||
</div>
|
||
<div style="height:1px;background:#14141E;margin:14px 0 22px"></div>
|
||
|
||
<div style="border-radius:18px;background:linear-gradient(180deg,#0F0F17,#0A0A10);border:1px solid #2A2A38;overflow:hidden;box-shadow:0 30px 70px -40px rgba(0,0,0,.9),inset 0 1px 0 rgba(255,255,255,.04)">
|
||
<!-- profile header -->
|
||
<div style="display:flex;align-items:center;gap:20px;padding:26px 28px;border-bottom:1px solid #14141E">
|
||
<div style="width:74px;height:74px;flex:none;border-radius:16px;background:linear-gradient(135deg,#00D4A0,#0a5f4c);display:flex;align-items:center;justify-content:center;font-family:'JetBrains Mono',monospace;font-weight:800;font-size:24px;color:#06060B">EH</div>
|
||
<div style="flex:1;min-width:0">
|
||
<div style="display:flex;align-items:center;gap:10px">
|
||
<span style="font-weight:800;font-size:22px;letter-spacing:-.01em">@edgehunter</span>
|
||
<span class="mono" style="display:inline-flex;align-items:center;gap:6px;height:22px;padding:0 10px;border-radius:6px;background:rgba(0,212,160,.12);border:1px solid rgba(0,212,160,.35);color:#00D4A0;font-size:9.5px;font-weight:700;letter-spacing:.1em"><span style="width:5px;height:5px;border-radius:50%;background:#00D4A0"></span>CLV-VERIFIED</span>
|
||
</div>
|
||
<div style="display:flex;align-items:center;gap:14px;margin-top:8px">
|
||
<span style="display:inline-flex;align-items:center;gap:6px">
|
||
<svg width="15" height="15" viewBox="0 0 24 24" fill="none" style="color:#FF6B4A"><path fill="currentColor" fill-opacity=".2" d="M12 2c3.5 4.5 5.5 6 5.5 10a5.5 5.5 0 0 1-11 0C6.5 8 8.5 6.5 12 2Z"/><path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linejoin="round" d="M12 7c2 2.6 3 3.8 3 6a3 3 0 0 1-6 0c0-2.2 1-3.4 3-6Z"/></svg>
|
||
<span class="mono" style="font-size:11px;letter-spacing:.1em;color:#FF6B4A;font-weight:700">TORCH-HEAVY BETTOR</span>
|
||
</span>
|
||
<span class="mono" style="font-size:11px;color:#707080;letter-spacing:.05em">412 graded · since Mar '24</span>
|
||
</div>
|
||
</div>
|
||
<button style="cursor:pointer;display:inline-flex;align-items:center;gap:8px;height:38px;padding:0 16px;border-radius:9px;background:#00D4A0;border:none;color:#06060B;font-family:'JetBrains Mono',monospace;font-weight:700;font-size:11px;letter-spacing:.08em">
|
||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none"><path stroke="#06060B" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" d="M4 12v7h16v-7M12 3v12M8 7l4-4 4 4"/></svg>
|
||
SHARE CARD
|
||
</button>
|
||
</div>
|
||
|
||
<!-- stat rail -->
|
||
<div style="display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:#14141E;border-bottom:1px solid #14141E">
|
||
<div style="background:#0C0C12;padding:18px 22px">
|
||
<div class="mono" style="font-size:9.5px;letter-spacing:.18em;color:#707080;margin-bottom:8px">HIT RATE</div>
|
||
<div class="mono" style="font-size:32px;font-weight:800;color:#00D4A0;line-height:.9">64.2<span style="font-size:16px">%</span></div>
|
||
</div>
|
||
<div style="background:#0C0C12;padding:18px 22px">
|
||
<div class="mono" style="font-size:9.5px;letter-spacing:.18em;color:#707080;margin-bottom:8px">UNITS</div>
|
||
<div class="mono" style="font-size:32px;font-weight:800;color:#00D4A0;line-height:.9">+38.6<span style="font-size:16px;color:#707080">u</span></div>
|
||
</div>
|
||
<div style="background:#0C0C12;padding:18px 22px">
|
||
<div class="mono" style="font-size:9.5px;letter-spacing:.18em;color:#707080;margin-bottom:8px">ROI</div>
|
||
<div class="mono" style="font-size:32px;font-weight:800;color:#F0F0F0;line-height:.9">+11.4<span style="font-size:16px;color:#707080">%</span></div>
|
||
</div>
|
||
<div style="background:#0C0C12;padding:18px 22px">
|
||
<div class="mono" style="font-size:9.5px;letter-spacing:.18em;color:#707080;margin-bottom:8px">AVG CLV</div>
|
||
<div class="mono" style="font-size:32px;font-weight:800;color:#F0F0F0;line-height:.9">+3.1<span style="font-size:16px;color:#707080">%</span></div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- grade history -->
|
||
<div style="padding:22px 28px;border-bottom:1px solid #14141E">
|
||
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:14px">
|
||
<span class="mono" style="font-size:10px;letter-spacing:.2em;color:#B8BCC8">GRADE HISTORY · LAST 24</span>
|
||
<div style="display:flex;align-items:center;gap:12px">
|
||
<span style="display:flex;align-items:center;gap:5px"><span style="width:9px;height:9px;border-radius:2px;background:#00D4A0"></span><span class="mono" style="font-size:9px;color:#707080;letter-spacing:.1em">HIT</span></span>
|
||
<span style="display:flex;align-items:center;gap:5px"><span style="width:9px;height:9px;border-radius:2px;background:#FF4757"></span><span class="mono" style="font-size:9px;color:#707080;letter-spacing:.1em">MISS</span></span>
|
||
</div>
|
||
</div>
|
||
<div ref="{{ gradeHistoryRef }}" style="display:grid;grid-template-columns:repeat(12,1fr);gap:7px"></div>
|
||
</div>
|
||
|
||
<!-- fingerprint + log -->
|
||
<div style="display:grid;grid-template-columns:1fr 1.2fr;gap:1px;background:#14141E">
|
||
<div style="background:#0A0A10;padding:22px 26px">
|
||
<div class="mono" style="font-size:10px;letter-spacing:.2em;color:#B8BCC8;margin-bottom:16px">ARCHETYPE FINGERPRINT</div>
|
||
<div style="display:flex;flex-direction:column;gap:14px">
|
||
<div>
|
||
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:6px">
|
||
<span style="display:inline-flex;align-items:center;gap:7px"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" style="color:#FF6B4A"><path fill="currentColor" fill-opacity=".2" d="M12 2c3.5 4.5 5.5 6 5.5 10a5.5 5.5 0 0 1-11 0C6.5 8 8.5 6.5 12 2Z"/><path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linejoin="round" d="M12 7c2 2.6 3 3.8 3 6a3 3 0 0 1-6 0c0-2.2 1-3.4 3-6Z"/></svg><span class="mono" style="font-size:11px;color:#FF6B4A;font-weight:700;letter-spacing:.06em">TORCH</span></span>
|
||
<span class="mono" style="font-size:11px;color:#F0F0F0;font-weight:700">32%</span>
|
||
</div>
|
||
<div style="height:6px;border-radius:3px;background:#14141E;overflow:hidden"><div style="width:32%;height:100%;background:#FF6B4A"></div></div>
|
||
</div>
|
||
<div>
|
||
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:6px">
|
||
<span style="display:inline-flex;align-items:center;gap:7px"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" style="color:#FF9F45"><path fill="currentColor" fill-opacity=".2" d="M12 3l7 9h-4v8H9v-8H5z"/><path fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" d="M12 3l7 9h-4v8H9v-8H5z"/></svg><span class="mono" style="font-size:11px;color:#FF9F45;font-weight:700;letter-spacing:.06em">BOMBER</span></span>
|
||
<span class="mono" style="font-size:11px;color:#F0F0F0;font-weight:700">24%</span>
|
||
</div>
|
||
<div style="height:6px;border-radius:3px;background:#14141E;overflow:hidden"><div style="width:24%;height:100%;background:#FF9F45"></div></div>
|
||
</div>
|
||
<div>
|
||
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:6px">
|
||
<span style="display:inline-flex;align-items:center;gap:7px"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" style="color:#7C5CFF"><path fill="currentColor" fill-opacity=".18" d="M12 3 4 20h16z"/><path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linejoin="round" d="M12 3 4 20h16zM8.5 14h7"/></svg><span class="mono" style="font-size:11px;color:#7C5CFF;font-weight:700;letter-spacing:.06em">ALPHA</span></span>
|
||
<span class="mono" style="font-size:11px;color:#F0F0F0;font-weight:700">18%</span>
|
||
</div>
|
||
<div style="height:6px;border-radius:3px;background:#14141E;overflow:hidden"><div style="width:18%;height:100%;background:#7C5CFF"></div></div>
|
||
</div>
|
||
<div>
|
||
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:6px">
|
||
<span style="display:inline-flex;align-items:center;gap:7px"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" style="color:#6C8CFF"><circle cx="12" cy="16" r="2.6" fill="currentColor"/><path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" d="M12 14 6 5M12 14l6-9M12 14v-4"/></svg><span class="mono" style="font-size:11px;color:#6C8CFF;font-weight:700;letter-spacing:.06em">CONDUCTOR</span></span>
|
||
<span class="mono" style="font-size:11px;color:#F0F0F0;font-weight:700">14%</span>
|
||
</div>
|
||
<div style="height:6px;border-radius:3px;background:#14141E;overflow:hidden"><div style="width:14%;height:100%;background:#6C8CFF"></div></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div style="background:#0A0A10;padding:22px 26px">
|
||
<div class="mono" style="font-size:10px;letter-spacing:.2em;color:#B8BCC8;margin-bottom:16px">RECENT SETTLED</div>
|
||
<div style="display:flex;flex-direction:column;gap:2px">
|
||
<div style="display:flex;align-items:center;justify-content:space-between;padding:9px 0;border-bottom:1px solid #12121A">
|
||
<div style="min-width:0"><div style="font-size:12.5px;font-weight:600">Jokić o27.5 PTS</div><div class="mono" style="font-size:9.5px;color:#707080"><span style="display:inline-block;width:10px;height:10px;border-radius:3px;background:linear-gradient(135deg,#0E4DA4,#4C8BF5);vertical-align:-1.5px;margin-right:3px"></span>DEN · settled 30 · CLV +2.4%</div></div>
|
||
<div style="display:flex;align-items:center;gap:10px"><span class="mono" style="display:inline-flex;align-items:center;height:18px;padding:0 7px;border-radius:5px;background:rgba(0,212,160,.14);color:#00D4A0;font-weight:800;font-size:10px">A</span><span class="mono" style="font-size:10px;color:#00D4A0;letter-spacing:.1em;font-weight:700">HIT</span></div>
|
||
</div>
|
||
<div style="display:flex;align-items:center;justify-content:space-between;padding:9px 0;border-bottom:1px solid #12121A">
|
||
<div style="min-width:0"><div style="font-size:12.5px;font-weight:600">Judge o1.5 TB</div><div class="mono" style="font-size:9.5px;color:#707080"><span style="display:inline-block;width:10px;height:10px;border-radius:3px;background:linear-gradient(135deg,#1b3a6b,#0C2340);vertical-align:-1.5px;margin-right:3px"></span>NYY · settled 2 · CLV +1.1%</div></div>
|
||
<div style="display:flex;align-items:center;gap:10px"><span class="mono" style="display:inline-flex;align-items:center;height:18px;padding:0 7px;border-radius:5px;background:#14141E;color:#B8BCC8;font-weight:800;font-size:10px">B</span><span class="mono" style="font-size:10px;color:#00D4A0;letter-spacing:.1em;font-weight:700">HIT</span></div>
|
||
</div>
|
||
<div style="display:flex;align-items:center;justify-content:space-between;padding:9px 0;border-bottom:1px solid #12121A">
|
||
<div style="min-width:0"><div style="font-size:12.5px;font-weight:600">Edwards o5.5 REB</div><div class="mono" style="font-size:9.5px;color:#707080"><span style="display:inline-block;width:10px;height:10px;border-radius:3px;background:linear-gradient(135deg,#0C2340,#236192);vertical-align:-1.5px;margin-right:3px"></span>MIN · settled 4 · CLV −0.8%</div></div>
|
||
<div style="display:flex;align-items:center;gap:10px"><span class="mono" style="display:inline-flex;align-items:center;height:18px;padding:0 7px;border-radius:5px;background:#14141E;color:#707080;font-weight:800;font-size:10px">C</span><span class="mono" style="font-size:10px;color:#FF4757;letter-spacing:.1em;font-weight:700">MISS</span></div>
|
||
</div>
|
||
<div style="display:flex;align-items:center;justify-content:space-between;padding:9px 0">
|
||
<div style="min-width:0"><div style="font-size:12.5px;font-weight:600">Skenes o6.5 K</div><div class="mono" style="font-size:9.5px;color:#707080"><span style="display:inline-block;width:10px;height:10px;border-radius:3px;background:linear-gradient(135deg,#2b2b2b,#c9a227);vertical-align:-1.5px;margin-right:3px"></span>PIT · settled 8 · CLV +4.0%</div></div>
|
||
<div style="display:flex;align-items:center;gap:10px"><span class="mono" style="display:inline-flex;align-items:center;height:18px;padding:0 7px;border-radius:5px;background:rgba(0,212,160,.14);color:#00D4A0;font-weight:800;font-size:10px">A+</span><span class="mono" style="font-size:10px;color:#00D4A0;letter-spacing:.1em;font-weight:700">HIT</span></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- tier record calibration -->
|
||
<div style="border-top:1px solid #14141E">
|
||
<div style="display:flex;align-items:center;justify-content:space-between;padding:14px 28px 4px">
|
||
<span class="mono" style="font-size:10px;letter-spacing:.2em;color:#B8BCC8">TIER RECORD · CALIBRATION</span>
|
||
<span class="mono" style="font-size:9px;letter-spacing:.14em;color:#707080">SEASON · ALL SPORTS</span>
|
||
</div>
|
||
<div style="display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:#14141E;margin-top:10px">
|
||
<div style="background:#0C0C12;padding:13px 18px"><div style="display:flex;align-items:baseline;gap:7px"><span class="mono" style="font-size:17px;font-weight:800;color:#00D4A0;text-shadow:0 0 12px rgba(0,212,160,.4)">A+</span><span class="mono" style="font-size:11px;color:#F0F0F0">24–6</span></div><div class="mono" style="font-size:9px;color:#00D4A0;font-weight:700;margin-top:4px">+31% ROI</div></div>
|
||
<div style="background:#0C0C12;padding:13px 18px"><div style="display:flex;align-items:baseline;gap:7px"><span class="mono" style="font-size:17px;font-weight:800;color:#00D4A0">A</span><span class="mono" style="font-size:11px;color:#F0F0F0">41–19</span></div><div class="mono" style="font-size:9px;color:#00D4A0;font-weight:700;margin-top:4px">+18% ROI</div></div>
|
||
<div style="background:#0C0C12;padding:13px 18px"><div style="display:flex;align-items:baseline;gap:7px"><span class="mono" style="font-size:17px;font-weight:800;color:#F0F0F0">B</span><span class="mono" style="font-size:11px;color:#B8BCC8">58–42</span></div><div class="mono" style="font-size:9px;color:#B8BCC8;margin-top:4px">+6% ROI</div></div>
|
||
<div style="background:#0C0C12;padding:13px 18px"><div style="display:flex;align-items:baseline;gap:7px"><span class="mono" style="font-size:17px;font-weight:800;color:#B8BCC8">C</span><span class="mono" style="font-size:11px;color:#707080">30–28</span></div><div class="mono" style="font-size:9px;color:#707080;margin-top:4px">+1% ROI</div></div>
|
||
<div style="background:#0C0C12;padding:13px 18px"><div style="display:flex;align-items:baseline;gap:7px"><span class="mono" style="font-size:17px;font-weight:800;color:#FF4757">D</span><span class="mono" style="font-size:11px;color:#707080">12–20</span></div><div class="mono" style="font-size:9px;color:#FF4757;font-weight:700;margin-top:4px">FADE ✓</div></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ============ SHARE CARDS ============ -->
|
||
<div data-screen-label="Share cards" style="margin-top:64px">
|
||
<div style="display:flex;align-items:center;gap:12px;margin-bottom:6px">
|
||
<span class="mono" style="font-size:12px;letter-spacing:.28em;color:#F0F0F0;font-weight:700">SHARE CARDS</span>
|
||
<span class="mono" style="font-size:10.5px;letter-spacing:.18em;color:#707080">STOP-THE-SCROLL · TIMELINE IS CUSTOMER #1</span>
|
||
</div>
|
||
<div style="height:1px;background:#14141E;margin:14px 0 26px"></div>
|
||
|
||
<div style="display:flex;flex-wrap:wrap;gap:34px;align-items:flex-start;justify-content:center">
|
||
|
||
<!-- PORTRAIT 1080x1350 -->
|
||
<div>
|
||
<div class="mono" style="font-size:10px;letter-spacing:.16em;color:#707080;margin-bottom:10px;text-align:center">THE SETTLE · 1080 × 1350</div>
|
||
<div data-export="settle" style="width:360px;height:450px;border-radius:14px;overflow:hidden;border:1px solid #2A2A38;box-shadow:0 24px 60px -24px rgba(0,0,0,.8)">
|
||
<div style="width:1080px;height:1350px;transform:scale(.3333);transform-origin:top left;background:radial-gradient(700px 500px at 80% 0%,rgba(0,212,160,.09),transparent 60%),#06060B;color:#F0F0F0;padding:72px 68px;display:flex;flex-direction:column">
|
||
<div style="display:flex;align-items:center;justify-content:space-between">
|
||
<span style="display:flex;align-items:center;gap:16px">
|
||
<svg width="52" height="52" viewBox="0 0 32 32" fill="none"><rect x="1" y="1" width="30" height="30" rx="7" fill="#0E0E14" stroke="#2A2A38" stroke-width="1"></rect><path d="M8 9 L16 24 L24 9" fill="none" stroke="#F0F0F0" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round"></path><path d="M16 24 L24 9" fill="none" stroke="#00D4A0" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round"></path><circle cx="24" cy="9" r="2" fill="#00D4A0"></circle></svg>
|
||
<span class="mono" style="font-size:34px;font-weight:800;letter-spacing:.3em">VYND<span style="color:#00D4A0">R</span></span>
|
||
</span>
|
||
<span class="mono" style="font-size:22px;letter-spacing:.1em;color:#707080">JUL 11</span>
|
||
</div>
|
||
<div style="margin-top:56px">
|
||
<div class="mono" style="font-size:26px;letter-spacing:.3em;color:#707080">DAILY SETTLE</div>
|
||
<div style="display:flex;align-items:flex-end;gap:28px;margin-top:14px">
|
||
<span class="mono" style="font-size:180px;font-weight:800;line-height:.82;color:#00D4A0;text-shadow:0 0 60px rgba(0,212,160,.45)">+5.4u</span>
|
||
</div>
|
||
<div class="mono" style="font-size:34px;margin-top:16px;color:#B8BCC8;letter-spacing:.05em">7–2 · <span style="color:#F0F0F0">78% HIT</span> · 9 GRADED</div>
|
||
</div>
|
||
<div style="margin-top:56px;display:flex;flex-direction:column;gap:0;flex:1">
|
||
<div style="display:flex;align-items:center;justify-content:space-between;padding:24px 0;border-top:1px solid #1E1E2A">
|
||
<span style="font-size:34px;font-weight:600">Jokić o27.5 PTS</span>
|
||
<span style="display:flex;align-items:center;gap:20px"><span class="mono" style="padding:6px 16px;border-radius:9px;background:rgba(0,212,160,.14);color:#00D4A0;font-weight:800;font-size:30px">A+</span><span class="mono" style="font-size:28px;color:#00D4A0;font-weight:700;width:120px;text-align:right">HIT</span></span>
|
||
</div>
|
||
<div style="display:flex;align-items:center;justify-content:space-between;padding:24px 0;border-top:1px solid #1E1E2A">
|
||
<span style="font-size:34px;font-weight:600">Skenes o6.5 K</span>
|
||
<span style="display:flex;align-items:center;gap:20px"><span class="mono" style="padding:6px 16px;border-radius:9px;background:rgba(0,212,160,.14);color:#00D4A0;font-weight:800;font-size:30px">A</span><span class="mono" style="font-size:28px;color:#00D4A0;font-weight:700;width:120px;text-align:right">HIT</span></span>
|
||
</div>
|
||
<div style="display:flex;align-items:center;justify-content:space-between;padding:24px 0;border-top:1px solid #1E1E2A">
|
||
<span style="font-size:34px;font-weight:600;color:#B8BCC8">Edwards o5.5 REB</span>
|
||
<span style="display:flex;align-items:center;gap:20px"><span class="mono" style="padding:6px 16px;border-radius:9px;background:#14141E;color:#707080;font-weight:800;font-size:30px">C</span><span class="mono" style="font-size:28px;color:#FF4757;font-weight:700;width:120px;text-align:right">MISS</span></span>
|
||
</div>
|
||
<div style="display:flex;align-items:center;justify-content:space-between;padding:24px 0;border-top:1px solid #1E1E2A">
|
||
<span style="font-size:34px;font-weight:600">Judge o1.5 TB</span>
|
||
<span style="display:flex;align-items:center;gap:20px"><span class="mono" style="padding:6px 16px;border-radius:9px;background:#14141E;color:#B8BCC8;font-weight:800;font-size:30px">B</span><span class="mono" style="font-size:28px;color:#00D4A0;font-weight:700;width:120px;text-align:right">HIT</span></span>
|
||
</div>
|
||
</div>
|
||
<div style="display:flex;align-items:center;justify-content:space-between;padding-top:34px;border-top:1px solid #2A2A38">
|
||
<span class="mono" style="font-size:30px;font-weight:700;color:#F0F0F0">@edgehunter</span>
|
||
<span class="mono" style="display:inline-flex;align-items:center;gap:12px;font-size:24px;letter-spacing:.12em;color:#00D4A0"><span style="width:12px;height:12px;border-radius:50%;background:#00D4A0"></span>CLV-VERIFIED</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- OG 1200x630 -->
|
||
<div>
|
||
<div class="mono" style="font-size:10px;letter-spacing:.16em;color:#707080;margin-bottom:10px;text-align:center">GRADE REVEAL · 1200 × 630 OG</div>
|
||
<div data-export="og" style="width:540px;height:283px;border-radius:14px;overflow:hidden;border:1px solid #2A2A38;box-shadow:0 24px 60px -24px rgba(0,0,0,.8)">
|
||
<div style="width:1200px;height:630px;transform:scale(.45);transform-origin:top left;background:radial-gradient(700px 500px at 78% 0%,rgba(0,212,160,.1),transparent 60%),#06060B;color:#F0F0F0;padding:56px 60px;display:flex;flex-direction:column">
|
||
<div style="display:flex;align-items:center;justify-content:space-between">
|
||
<span style="display:flex;align-items:center;gap:14px">
|
||
<svg width="46" height="46" viewBox="0 0 32 32" fill="none"><rect x="1" y="1" width="30" height="30" rx="7" fill="#0E0E14" stroke="#2A2A38" stroke-width="1"></rect><path d="M8 9 L16 24 L24 9" fill="none" stroke="#F0F0F0" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round"></path><path d="M16 24 L24 9" fill="none" stroke="#00D4A0" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round"></path><circle cx="24" cy="9" r="2" fill="#00D4A0"></circle></svg>
|
||
<span class="mono" style="font-size:30px;font-weight:800;letter-spacing:.3em">VYND<span style="color:#00D4A0">R</span></span>
|
||
</span>
|
||
<span class="mono" style="display:inline-flex;align-items:center;gap:12px;font-size:22px;letter-spacing:.14em;color:#00D4A0"><span style="width:11px;height:11px;border-radius:50%;background:#00D4A0"></span>CLV-VERIFIED</span>
|
||
</div>
|
||
<div style="display:flex;align-items:center;gap:48px;margin-top:auto;margin-bottom:auto">
|
||
<div style="display:flex;flex-direction:column;align-items:center;gap:10px">
|
||
<span class="mono" style="font-size:170px;line-height:.8;font-weight:800;color:#00D4A0;text-shadow:0 0 66px rgba(0,212,160,.5)">A+</span>
|
||
<span class="mono" style="font-size:22px;letter-spacing:.24em;color:#707080">TIER</span>
|
||
</div>
|
||
<div style="flex:1;border-left:1px solid #1E1E2A;padding-left:44px">
|
||
<div style="font-size:52px;font-weight:800;letter-spacing:-.01em;line-height:1.05">Nikola Jokić</div>
|
||
<div style="font-size:40px;font-weight:600;margin-top:12px;color:#F0F0F0">Over 27.5 Points</div>
|
||
<div style="display:flex;align-items:center;gap:40px;margin-top:34px">
|
||
<div><div class="mono" style="font-size:20px;letter-spacing:.16em;color:#707080">EDGE</div><div class="mono" style="font-size:52px;font-weight:800;color:#00D4A0;line-height:1">+8.4%</div></div>
|
||
<div><div class="mono" style="font-size:20px;letter-spacing:.16em;color:#707080">L10</div><div class="mono" style="font-size:52px;font-weight:800;color:#F0F0F0;line-height:1">8/10</div></div>
|
||
<div><div class="mono" style="font-size:20px;letter-spacing:.16em;color:#707080">DK</div><div class="mono" style="font-size:52px;font-weight:800;color:#F0F0F0;line-height:1">−114</div></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="mono" style="font-size:24px;letter-spacing:.06em;color:#707080">vyndr.io/u/edgehunter</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ============ COMBAT HEAD-TO-HEAD ============ -->
|
||
<!-- ============ ACT IV ============ -->
|
||
<div data-reveal style="margin-top:110px;display:flex;align-items:baseline;gap:18px;border-bottom:1px solid #14141E;padding-bottom:18px">
|
||
<span class="mono" style="font-size:64px;font-weight:800;line-height:.8;color:#14141E;-webkit-text-stroke:1px #2A2A38">04</span>
|
||
<div><div class="mono" style="font-size:13px;letter-spacing:.3em;color:#F0F0F0;font-weight:800">THE INTELLIGENCE</div><div style="font-size:12.5px;color:#707080;margin-top:5px">One analysis, many grades — style matchups, arsenal reads, correlation math.</div></div>
|
||
</div>
|
||
|
||
<div id="intel" data-screen-label="Combat head-to-head" style="margin-top:44px">
|
||
<div style="display:flex;align-items:center;gap:12px;margin-bottom:6px">
|
||
<span class="mono" style="font-size:12px;letter-spacing:.28em;color:#F0F0F0;font-weight:700">STYLE MATCHUP</span>
|
||
<span class="mono" style="font-size:10.5px;letter-spacing:.18em;color:#707080">COMBAT · STYLES MAKE FIGHTS · FIGHT-WEEK WEAPON</span>
|
||
</div>
|
||
<div style="height:1px;background:#14141E;margin:14px 0 22px"></div>
|
||
|
||
<div style="border-radius:18px;background:linear-gradient(180deg,#0F0F17,#0A0A10);border:1px solid #2A2A38;overflow:hidden;box-shadow:0 30px 70px -40px rgba(0,0,0,.9),inset 0 1px 0 rgba(255,255,255,.04)">
|
||
<div style="display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid #14141E">
|
||
<span class="mono" style="font-size:10px;letter-spacing:.22em;color:#707080">UFC 312 · LIGHTWEIGHT · 5 RND MAIN</span>
|
||
<span class="mono" style="font-size:10px;letter-spacing:.18em;color:#00D4A0">CLV-VERIFIED READ</span>
|
||
</div>
|
||
|
||
<div style="display:grid;grid-template-columns:1fr 132px 1fr">
|
||
<!-- FIGHTER A -->
|
||
<div style="padding:22px 22px 22px 24px">
|
||
<div style="display:flex;align-items:center;gap:13px;margin-bottom:16px">
|
||
<div style="position:relative;width:52px;height:52px;flex:none">
|
||
<div style="width:52px;height:52px;border-radius:12px;background:linear-gradient(135deg,#7C6CC0,#332a5a);display:flex;align-items:center;justify-content:center;font-family:'JetBrains Mono',monospace;font-weight:800;font-size:16px;color:#d8ccff">IM</div>
|
||
<image-slot id="fighter-islam" shape="rounded" radius="12" placeholder="" style="position:absolute;inset:0;width:52px;height:52px"></image-slot>
|
||
</div>
|
||
<div><div style="font-weight:700;font-size:16px">Islam M.</div><div class="mono" style="font-size:10px;color:#707080;margin-top:2px">26–1 · ORTHODOX · 70" REACH</div></div>
|
||
</div>
|
||
<div style="margin-bottom:8px"><div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:5px"><span style="display:inline-flex;align-items:center;gap:6px"><svg width="14" height="14" viewBox="0 0 24 24" fill="none"><path fill="none" stroke="#7C6CC0" stroke-width="2.3" stroke-linecap="round" stroke-linejoin="round" d="M6 4v9M6 13l-3-3M6 13l3-3M18 20v-9M18 11l-3 3M18 11l3 3"/><path stroke="#7C6CC0" stroke-width="2.2" stroke-linecap="round" d="M9 12h6"/></svg><span class="mono" style="font-size:10px;color:#7C6CC0;font-weight:700;letter-spacing:.06em">GRAPPLER</span></span><span class="mono" style="font-size:11px;color:#F0F0F0;font-weight:700">80%</span></div><div style="height:6px;border-radius:3px;background:#14141E;overflow:hidden"><div style="width:80%;height:100%;background:#7C6CC0"></div></div></div>
|
||
<div style="margin-bottom:16px"><div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:5px"><span style="display:inline-flex;align-items:center;gap:6px"><svg width="13" height="13" viewBox="0 0 24 24" fill="none"><path fill="none" stroke="#FF7A4A" stroke-width="2.4" stroke-linecap="round" d="M3 12h8"/><path fill="none" stroke="#FF7A4A" stroke-width="2.1" stroke-linejoin="round" d="M12 8h7v8h-7z"/></svg><span class="mono" style="font-size:9.5px;color:#B8BCC8;font-weight:600;letter-spacing:.06em">STRIKER</span></span><span class="mono" style="font-size:10px;color:#B8BCC8">30%</span></div><div style="height:5px;border-radius:3px;background:#14141E;overflow:hidden"><div style="width:30%;height:100%;background:#5A5A6A"></div></div></div>
|
||
<div style="display:flex;flex-wrap:wrap;gap:6px">
|
||
<span class="mono" style="display:inline-flex;align-items:center;gap:5px;font-size:9px;letter-spacing:.04em;color:#B8BCC8;background:#0B0B11;border:1px solid #1E1E2A;border-radius:6px;padding:4px 8px"><span style="color:#00D4A0">✓</span>COMBAT SAMBO</span>
|
||
<span class="mono" style="display:inline-flex;align-items:center;gap:5px;font-size:9px;letter-spacing:.04em;color:#B8BCC8;background:#0B0B11;border:1px solid #1E1E2A;border-radius:6px;padding:4px 8px"><span style="color:#00D4A0">✓</span>DAGESTAN WRESTLING</span>
|
||
<span class="mono" style="display:inline-flex;align-items:center;gap:5px;font-size:9px;letter-spacing:.04em;color:#B8BCC8;background:#0B0B11;border:1px solid #1E1E2A;border-radius:6px;padding:4px 8px"><span style="color:#00D4A0">✓</span>BJJ BROWN</span>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- CENTER VERDICT -->
|
||
<div style="position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:22px 8px;border-left:1px solid #14141E;border-right:1px solid #14141E;background:#08080D">
|
||
<div class="mono" style="font-size:9px;letter-spacing:.24em;color:#707080">VERDICT</div>
|
||
<div class="mono" style="font-size:26px;font-weight:800;color:#F0F0F0;letter-spacing:.06em">VS</div>
|
||
<div class="mono" style="display:inline-flex;align-items:center;height:20px;padding:0 8px;border-radius:6px;background:rgba(124,108,192,.14);color:#b3a6e8;font-weight:700;font-size:10px;border:1px solid rgba(124,108,192,.35)">GRAPPLER EDGE</div>
|
||
</div>
|
||
|
||
<!-- FIGHTER B -->
|
||
<div style="padding:22px 24px 22px 22px;text-align:right">
|
||
<div style="display:flex;align-items:center;gap:13px;margin-bottom:16px;flex-direction:row-reverse">
|
||
<div style="position:relative;width:52px;height:52px;flex:none">
|
||
<div style="width:52px;height:52px;border-radius:12px;background:linear-gradient(135deg,#FF6B4A,#5a281c);display:flex;align-items:center;justify-content:center;font-family:'JetBrains Mono',monospace;font-weight:800;font-size:16px;color:#ffd4c6">AV</div>
|
||
<image-slot id="fighter-volk" shape="rounded" radius="12" placeholder="" style="position:absolute;inset:0;width:52px;height:52px"></image-slot>
|
||
</div>
|
||
<div><div style="font-weight:700;font-size:16px">Alex V.</div><div class="mono" style="font-size:10px;color:#707080;margin-top:2px">26–3 · ORTHODOX · 71.5" REACH</div></div>
|
||
</div>
|
||
<div style="margin-bottom:8px"><div style="display:flex;align-items:center;justify-content:space-between;flex-direction:row-reverse;margin-bottom:5px"><span style="display:inline-flex;align-items:center;gap:6px;flex-direction:row-reverse"><svg width="14" height="14" viewBox="0 0 24 24" fill="none"><path fill="none" stroke="#FF6B4A" stroke-width="2.3" stroke-linecap="round" stroke-linejoin="round" d="M3 8h9M3 12h9M3 16h9M9 6l4 6-4 6"/><path stroke="#FF6B4A" stroke-width="2.6" stroke-linecap="round" d="M18 4v16"/></svg><span class="mono" style="font-size:10px;color:#FF6B4A;font-weight:700;letter-spacing:.06em">PRESSURE</span></span><span class="mono" style="font-size:11px;color:#F0F0F0;font-weight:700">72%</span></div><div style="height:6px;border-radius:3px;background:#14141E;overflow:hidden;transform:scaleX(-1)"><div style="width:72%;height:100%;background:#FF6B4A"></div></div></div>
|
||
<div style="margin-bottom:16px"><div style="display:flex;align-items:center;justify-content:space-between;flex-direction:row-reverse;margin-bottom:5px"><span style="display:inline-flex;align-items:center;gap:6px;flex-direction:row-reverse"><svg width="13" height="13" viewBox="0 0 24 24" fill="none"><circle cx="15" cy="9" r="5" stroke="#7AA6D8" stroke-width="2"/><path stroke="#7AA6D8" stroke-width="2" stroke-linecap="round" d="M15 6v6M12 9h6M3 20l6.5-6.5"/></svg><span class="mono" style="font-size:9.5px;color:#B8BCC8;font-weight:600;letter-spacing:.06em">TECHNICIAN</span></span><span class="mono" style="font-size:10px;color:#B8BCC8">44%</span></div><div style="height:5px;border-radius:3px;background:#14141E;overflow:hidden;transform:scaleX(-1)"><div style="width:44%;height:100%;background:#5A5A6A"></div></div></div>
|
||
<div style="display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end">
|
||
<span class="mono" style="display:inline-flex;align-items:center;gap:5px;font-size:9px;letter-spacing:.04em;color:#B8BCC8;background:#0B0B11;border:1px solid #1E1E2A;border-radius:6px;padding:4px 8px"><span style="color:#00D4A0">✓</span>KICKBOXING</span>
|
||
<span class="mono" style="display:inline-flex;align-items:center;gap:5px;font-size:9px;letter-spacing:.04em;color:#B8BCC8;background:#0B0B11;border:1px solid #1E1E2A;border-radius:6px;padding:4px 8px"><span style="color:#00D4A0">✓</span>ELITE TDD 94%</span>
|
||
<span class="mono" style="display:inline-flex;align-items:center;gap:5px;font-size:9px;letter-spacing:.04em;color:#707080;background:#0B0B11;border:1px dashed #2A2A38;border-radius:6px;padding:4px 8px"><span style="color:#FFB347">?</span>WRESTLING BASE</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- the read + one-analysis-many-grades -->
|
||
<div style="padding:16px 20px;border-top:1px solid #14141E;background:#08080D">
|
||
<p style="font-size:13.5px;line-height:1.5;color:#F0F0F0;margin-bottom:4px">Takedown defense is the whole fight. <span style="color:#B8BCC8">Islam's chain-wrestling beats a pure striker — but Volk's 94% TDD is the one variable that flips it.</span></p>
|
||
<div style="display:flex;align-items:center;gap:8px;margin-top:10px;padding:8px 11px;border-radius:8px;background:rgba(255,179,71,.07);border:1px solid rgba(255,179,71,.2)">
|
||
<span class="mono" style="font-size:9px;letter-spacing:.14em;color:#FFB347;font-weight:700">RECENT-FORM OVERRIDE</span>
|
||
<span class="mono" style="font-size:10.5px;color:#B8BCC8;letter-spacing:.02em">Volk stuffed 11 of 12 TDs last 3 fights → pushes this toward DECISION, not submission.</span>
|
||
</div>
|
||
</div>
|
||
<div style="display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:#14141E;border-top:1px solid #14141E">
|
||
<div style="background:#0A0A10;padding:13px 14px"><div class="mono" style="font-size:9px;letter-spacing:.14em;color:#707080;margin-bottom:6px">MONEYLINE</div><div style="display:flex;align-items:center;gap:7px"><span class="mono" style="display:inline-flex;align-items:center;height:19px;padding:0 7px;border-radius:5px;background:rgba(0,212,160,.12);color:#00D4A0;font-weight:800;font-size:11px;border:1px solid rgba(0,212,160,.28)">A-</span><span class="mono" style="font-size:11px;color:#B8BCC8">Islam -230</span></div></div>
|
||
<div style="background:#0A0A10;padding:13px 14px"><div class="mono" style="font-size:9px;letter-spacing:.14em;color:#707080;margin-bottom:6px">DECISION</div><div style="display:flex;align-items:center;gap:7px"><span class="mono" style="display:inline-flex;align-items:center;height:19px;padding:0 7px;border-radius:5px;background:rgba(0,212,160,.12);color:#00D4A0;font-weight:800;font-size:11px;border:1px solid rgba(0,212,160,.28)">A</span><span class="mono" style="font-size:11px;color:#B8BCC8">+120</span></div></div>
|
||
<div style="background:#0A0A10;padding:13px 14px"><div class="mono" style="font-size:9px;letter-spacing:.14em;color:#707080;margin-bottom:6px">SUBMISSION</div><div style="display:flex;align-items:center;gap:7px"><span class="mono" style="display:inline-flex;align-items:center;height:19px;padding:0 7px;border-radius:5px;background:#14141E;color:#F0F0F0;font-weight:800;font-size:11px;border:1px solid #1E1E2A">B+</span><span class="mono" style="font-size:11px;color:#B8BCC8">+280</span></div></div>
|
||
<div style="background:#0A0A10;padding:13px 14px"><div class="mono" style="font-size:9px;letter-spacing:.14em;color:#707080;margin-bottom:6px">KO / TKO</div><div style="display:flex;align-items:center;gap:7px"><span class="mono" style="display:inline-flex;align-items:center;height:19px;padding:0 7px;border-radius:5px;background:#14141E;color:#707080;font-weight:800;font-size:11px;border:1px solid #1E1E2A">C</span><span class="mono" style="font-size:11px;color:#B8BCC8">+650</span></div></div>
|
||
<div style="background:#0A0A10;padding:13px 14px"><div class="mono" style="font-size:9px;letter-spacing:.14em;color:#707080;margin-bottom:6px">O 2.5 RND</div><div style="display:flex;align-items:center;gap:7px"><span class="mono" style="display:inline-flex;align-items:center;height:19px;padding:0 7px;border-radius:5px;background:rgba(0,212,160,.12);color:#00D4A0;font-weight:800;font-size:11px;border:1px solid rgba(0,212,160,.28)">A-</span><span class="mono" style="font-size:11px;color:#B8BCC8">-140</span></div></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ============ LIVE GRADE-SHIFT + PRICING + EMPTY ============ -->
|
||
<div data-screen-label="Live + system states" style="margin-top:64px">
|
||
<div style="display:flex;align-items:center;gap:12px;margin-bottom:6px">
|
||
<span class="mono" style="font-size:12px;letter-spacing:.28em;color:#F0F0F0;font-weight:700">SYSTEM SURFACES</span>
|
||
<span class="mono" style="font-size:10.5px;letter-spacing:.18em;color:#707080">LIVE GRADE-SHIFT · THE $44.99 TIER · EMPTY STATE</span>
|
||
</div>
|
||
<div style="height:1px;background:#14141E;margin:14px 0 22px"></div>
|
||
|
||
<div style="display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start">
|
||
|
||
<!-- LIVE GRADE-SHIFT -->
|
||
<div style="position:relative;border-radius:16px;background:#0E0E14;border:1px solid #1E1E2A;overflow:hidden;box-shadow:inset 0 1px 0 rgba(255,255,255,.03)">
|
||
<div style="display:flex;align-items:center;justify-content:space-between;padding:15px 18px;border-bottom:1px solid #14141E">
|
||
<div style="display:flex;align-items:center;gap:9px"><span style="width:7px;height:7px;border-radius:50%;background:#00D4A0;animation:vy-livedot 1.5s ease-in-out infinite"></span><span class="mono" style="font-size:10px;letter-spacing:.2em;color:#00D4A0;font-weight:700">LIVE GRADE</span></div>
|
||
<span class="mono" style="font-size:10px;letter-spacing:.14em;color:#707080">Q3 4:12 · <span style="display:inline-block;width:12px;height:12px;border-radius:3px;background:linear-gradient(135deg,#0E4DA4,#4C8BF5);vertical-align:-1.5px;margin-right:3px"></span>DEN @ <span style="display:inline-block;width:12px;height:12px;border-radius:3px;background:linear-gradient(135deg,#0C2340,#236192);vertical-align:-1.5px;margin-right:3px"></span>MIN</span>
|
||
</div>
|
||
<div style="padding:20px 18px">
|
||
<div style="display:flex;align-items:center;gap:18px">
|
||
<div style="display:flex;flex-direction:column;align-items:center;gap:5px">
|
||
<div class="mono" data-lg-grade style="font-size:64px;line-height:.82;font-weight:800;color:#00D4A0;text-shadow:0 0 30px rgba(0,212,160,.45)">A+</div>
|
||
<div class="mono" style="font-size:9px;letter-spacing:.2em;color:#707080">LIVE TIER</div>
|
||
</div>
|
||
<div style="flex:1;min-width:0">
|
||
<div style="font-weight:700;font-size:15px">Edwards o5.5 AST</div>
|
||
<div class="mono" data-lg-note style="font-size:10.5px;color:#00D4A0;margin-top:6px;letter-spacing:.04em">GRADE FIRMED ▲ 04:12</div>
|
||
<div style="display:flex;align-items:center;gap:14px;margin-top:12px">
|
||
<span class="mono" style="font-size:10px;color:#B8BCC8">PACE <span style="color:#00D4A0">▲</span></span>
|
||
<span class="mono" style="font-size:10px;color:#B8BCC8">USAGE <span style="color:#00D4A0">▲</span></span>
|
||
<span class="mono" style="font-size:10px;color:#B8BCC8">MATCHUP <span style="color:#00D4A0">✓</span></span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<!-- grade over game-time -->
|
||
<div style="margin-top:18px">
|
||
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:8px"><span class="mono" style="font-size:9px;letter-spacing:.16em;color:#707080">GRADE · BY GAME CLOCK</span><span class="mono" data-lg-edge data-react data-fmt="edge" style="font-size:11px;font-weight:700;color:#00D4A0;padding:1px 4px;border-radius:5px">+6.8%</span></div>
|
||
<div style="display:flex;align-items:flex-end;gap:5px;height:40px">
|
||
<div style="flex:1;height:44%;border-radius:3px 3px 0 0;background:#2A2A38"></div>
|
||
<div style="flex:1;height:52%;border-radius:3px 3px 0 0;background:#3A3A48"></div>
|
||
<div style="flex:1;height:48%;border-radius:3px 3px 0 0;background:#2A2A38"></div>
|
||
<div style="flex:1;height:64%;border-radius:3px 3px 0 0;background:rgba(0,212,160,.5)"></div>
|
||
<div style="flex:1;height:72%;border-radius:3px 3px 0 0;background:rgba(0,212,160,.6)"></div>
|
||
<div style="flex:1;height:70%;border-radius:3px 3px 0 0;background:rgba(0,212,160,.55)"></div>
|
||
<div style="flex:1;height:88%;border-radius:3px 3px 0 0;background:rgba(0,212,160,.8)"></div>
|
||
<div style="flex:1;height:100%;border-radius:3px 3px 0 0;background:#00D4A0"></div>
|
||
</div>
|
||
<div style="display:flex;align-items:center;justify-content:space-between;margin-top:6px"><span class="mono" style="font-size:8.5px;color:#4a4a58">TIP</span><span class="mono" style="font-size:8.5px;color:#4a4a58">NOW</span></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- PRICING TIER (the $44.99 done right) -->
|
||
<div style="position:relative;border-radius:16px;background:linear-gradient(180deg,#0F1512,#0A0A10);border:1px solid rgba(0,212,160,.4);overflow:hidden;box-shadow:0 30px 60px -34px rgba(0,212,160,.25),inset 0 1px 0 rgba(0,212,160,.12)">
|
||
<div class="vy-scanwrap"></div>
|
||
<div style="position:relative;padding:22px 22px 20px">
|
||
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:16px">
|
||
<span class="mono" style="font-size:10px;letter-spacing:.24em;color:#00D4A0;font-weight:700">VYNDR PRO</span>
|
||
<span style="display:inline-flex;border:1px solid #2A2A38;border-radius:6px;overflow:hidden"><span class="mono" style="font-size:8.5px;letter-spacing:.12em;color:#707080;padding:3px 9px">FREE</span><span class="mono" style="font-size:8.5px;letter-spacing:.12em;color:#06060B;background:#00D4A0;padding:3px 9px;font-weight:700">PRO</span></span>
|
||
</div>
|
||
<div style="display:flex;align-items:flex-end;gap:8px">
|
||
<span class="mono" style="font-size:52px;font-weight:800;line-height:.85;color:#F0F0F0">$44.99</span>
|
||
<span class="mono" style="font-size:13px;color:#707080;padding-bottom:6px">/mo</span>
|
||
</div>
|
||
<p style="font-size:12.5px;line-height:1.5;color:#B8BCC8;margin-top:12px">The whole engine — grades, CLV, the board. <span style="color:#707080">Free gives you live scores + tonight's top 3 grades — Pro unlocks the whole board.</span></p>
|
||
<div style="display:flex;flex-direction:column;gap:9px;margin-top:16px">
|
||
<span style="display:flex;align-items:center;gap:9px;font-size:12.5px;color:#F0F0F0"><span style="color:#00D4A0;font-weight:700">✓</span> Every graded read, every league, every night</span>
|
||
<span style="display:flex;align-items:center;gap:9px;font-size:12.5px;color:#F0F0F0"><span style="color:#00D4A0;font-weight:700">✓</span> CLV-verified public record + share cards</span>
|
||
<span style="display:flex;align-items:center;gap:9px;font-size:12.5px;color:#F0F0F0"><span style="color:#00D4A0;font-weight:700">✓</span> Live grade-shift + steam alerts</span>
|
||
<span style="display:flex;align-items:center;gap:9px;font-size:12.5px;color:#F0F0F0"><span style="color:#00D4A0;font-weight:700">✓</span> Archetype fingerprints + combat style engine</span>
|
||
</div>
|
||
<button style="cursor:pointer;width:100%;margin-top:20px;height:44px;border-radius:11px;background:#00D4A0;border:none;color:#06060B;font-family:'JetBrains Mono',monospace;font-weight:800;font-size:12px;letter-spacing:.1em">UPGRADE TO PRO</button>
|
||
<div class="mono" style="font-size:9.5px;letter-spacing:.06em;color:#707080;text-align:center;margin-top:11px">cancel anytime · no trial — the free tier is the trial</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- EMPTY / ERROR STATE (404-quality bar) -->
|
||
<div style="margin-top:16px;position:relative;border-radius:16px;background:#0A0A10;border:1px solid #1E1E2A;overflow:hidden">
|
||
<div class="vy-scanwrap"></div>
|
||
<div style="position:relative;display:flex;flex-direction:column;align-items:center;text-align:center;padding:40px 24px">
|
||
<div class="vy-glitch mono" style="font-size:13px;letter-spacing:.4em;color:#FF4757;font-weight:800;animation:vy-glitch 5s steps(1) infinite">TRANSMISSION QUIET</div>
|
||
<div style="font-size:19px;font-weight:700;margin-top:16px;letter-spacing:-.01em">No reads cleared the A-tier threshold yet.</div>
|
||
<p style="max-width:420px;color:#B8BCC8;font-size:13px;line-height:1.55;margin-top:8px">The engine graded 312 props tonight — none hit the edge floor. That's the system protecting you, not a bug. Grades refresh as lines move.</p>
|
||
<div style="display:flex;align-items:center;gap:12px;margin-top:22px">
|
||
<button style="cursor:pointer;height:38px;padding:0 18px;border-radius:10px;background:#00D4A0;border:none;color:#06060B;font-family:'JetBrains Mono',monospace;font-weight:800;font-size:11px;letter-spacing:.08em">VIEW ALL GRADES</button>
|
||
<button style="cursor:pointer;height:38px;padding:0 16px;border-radius:10px;background:transparent;border:1px solid #2A2A38;color:#B8BCC8;font-family:'JetBrains Mono',monospace;font-weight:700;font-size:11px;letter-spacing:.08em">NOTIFY WHEN LIVE</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ============ PITCHER IDENTITY LAYER ============ -->
|
||
<div data-screen-label="Pitcher identity" style="margin-top:64px">
|
||
<div style="display:flex;align-items:center;gap:12px;margin-bottom:6px">
|
||
<span class="mono" style="font-size:12px;letter-spacing:.28em;color:#F0F0F0;font-weight:700">PITCHER IDENTITY</span>
|
||
<span class="mono" style="font-size:10.5px;letter-spacing:.18em;color:#707080">THE ARSENAL READ · ONE IDENTITY → MANY PROPS</span>
|
||
</div>
|
||
<div style="height:1px;background:#14141E;margin:14px 0 22px"></div>
|
||
|
||
<div style="border-radius:18px;background:linear-gradient(180deg,#0F0F17,#0A0A10);border:1px solid #2A2A38;overflow:hidden;box-shadow:0 30px 70px -40px rgba(0,0,0,.9),inset 0 1px 0 rgba(255,255,255,.04)">
|
||
<div style="display:grid;grid-template-columns:1fr 1.35fr">
|
||
<!-- identity -->
|
||
<div style="padding:22px 24px;border-right:1px solid #14141E">
|
||
<div style="display:flex;align-items:center;gap:14px;margin-bottom:18px">
|
||
<div style="width:58px;height:58px;flex:none;border-radius:13px;background:linear-gradient(135deg,#2b2b2b,#c9a227);display:flex;align-items:center;justify-content:center;font-family:'JetBrains Mono',monospace;font-weight:800;font-size:15px;color:#fff">PIT</div>
|
||
<div>
|
||
<div style="display:flex;align-items:center;gap:8px"><span style="font-weight:700;font-size:17px">Paul Skenes</span><span class="mono" style="display:inline-flex;align-items:center;height:17px;padding:0 6px;border-radius:4px;background:rgba(0,212,160,.12);border:1px solid rgba(0,212,160,.3);color:#00D4A0;font-size:9px;font-weight:700;letter-spacing:.06em">CONFIRMED</span></div>
|
||
<div class="mono" style="font-size:10.5px;color:#707080;margin-top:3px;letter-spacing:.05em">RHP · #30 · Pittsburgh · vs <span style="display:inline-block;width:11px;height:11px;border-radius:3px;background:linear-gradient(135deg,#0E3386,#CC3433);vertical-align:-1.5px;margin-right:3px"></span>CHC</div>
|
||
</div>
|
||
</div>
|
||
<div class="mono" style="font-size:9px;letter-spacing:.2em;color:#707080;margin-bottom:10px">IDENTITY BLEND</div>
|
||
<div style="display:flex;align-items:center;gap:10px;margin-bottom:10px">
|
||
<span style="display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 11px;border-radius:7px;background:rgba(124,92,255,.12);border:1px solid rgba(124,92,255,.4)"><svg width="15" height="15" viewBox="0 0 24 24" fill="none"><path fill="#7C5CFF" fill-opacity=".16" d="M12 3 4 20h16z"/><path fill="none" stroke="#7C5CFF" stroke-width="2.2" stroke-linejoin="round" d="M12 3 4 20h16zM8.5 14h7"/></svg><span class="mono" style="font-size:10.5px;color:#7C5CFF;font-weight:700;letter-spacing:.06em">ALPHA</span></span>
|
||
<span style="display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 10px;border-radius:7px;background:#0B0B11;border:1px solid #1E1E2A;opacity:.85"><svg width="13" height="13" viewBox="0 0 24 24" fill="none"><path fill="none" stroke="#FF7A5A" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" d="M7 4v16M7 12l9-8M9 13l7 7"/></svg><span class="mono" style="font-size:9.5px;color:#FF7A5A;font-weight:600;letter-spacing:.06em">PUNCHOUT</span></span>
|
||
</div>
|
||
<div style="margin-top:16px;padding:12px 14px;border-radius:10px;background:#08080D;border:1px solid #14141E">
|
||
<div style="display:flex;align-items:center;gap:8px;margin-bottom:6px"><span style="width:5px;height:5px;border-radius:50%;background:#7C5CFF"></span><span class="mono" style="font-size:9px;letter-spacing:.2em;color:#B8BCC8">APPROACH · TUNNELER</span></div>
|
||
<p style="font-size:11.5px;line-height:1.5;color:#B8BCC8">Splinker + slider tunnel off the 99mph 4-seam — hitters commit early and miss. Whiffs cluster the 3rd time through.</p>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- arsenal -->
|
||
<div style="padding:22px 24px">
|
||
<div style="display:grid;grid-template-columns:1fr 56px 46px 52px;gap:8px;padding-bottom:9px;border-bottom:1px solid #14141E">
|
||
<span class="mono" style="font-size:8.5px;letter-spacing:.14em;color:#4a4a58">PITCH</span>
|
||
<span class="mono" style="font-size:8.5px;letter-spacing:.14em;color:#4a4a58;text-align:right">VELO</span>
|
||
<span class="mono" style="font-size:8.5px;letter-spacing:.14em;color:#4a4a58;text-align:right">USE</span>
|
||
<span class="mono" style="font-size:8.5px;letter-spacing:.14em;color:#4a4a58;text-align:right">WHIFF</span>
|
||
</div>
|
||
<div style="display:grid;grid-template-columns:1fr 56px 46px 52px;gap:8px;align-items:center;padding:8px 0;border-bottom:1px solid #101018"><span style="display:flex;align-items:center;gap:8px"><span style="width:6px;height:6px;border-radius:2px;background:#FF7A5A"></span><span style="font-size:12.5px;font-weight:600">4-Seam</span></span><span class="mono" style="font-size:12px;color:#F0F0F0;text-align:right">99.1</span><span class="mono" style="font-size:11px;color:#B8BCC8;text-align:right">32%</span><span class="mono" style="font-size:11px;color:#B8BCC8;text-align:right">26%</span></div>
|
||
<div style="display:grid;grid-template-columns:1fr 56px 46px 52px;gap:8px;align-items:center;padding:8px 0;border-bottom:1px solid #101018"><span style="display:flex;align-items:center;gap:8px"><span style="width:6px;height:6px;border-radius:2px;background:#E0803D"></span><span style="font-size:12.5px;font-weight:600">Splinker</span></span><span class="mono" style="font-size:12px;color:#F0F0F0;text-align:right">94.2</span><span class="mono" style="font-size:11px;color:#B8BCC8;text-align:right">24%</span><span class="mono" style="font-size:12px;color:#00D4A0;font-weight:700;text-align:right">38%</span></div>
|
||
<div style="display:grid;grid-template-columns:1fr 56px 46px 52px;gap:8px;align-items:center;padding:8px 0;border-bottom:1px solid #101018"><span style="display:flex;align-items:center;gap:8px"><span style="width:6px;height:6px;border-radius:2px;background:#7C5CFF"></span><span style="font-size:12.5px;font-weight:600">Slider</span></span><span class="mono" style="font-size:12px;color:#F0F0F0;text-align:right">87.0</span><span class="mono" style="font-size:11px;color:#B8BCC8;text-align:right">22%</span><span class="mono" style="font-size:12px;color:#00D4A0;font-weight:700;text-align:right">41%</span></div>
|
||
<div style="display:grid;grid-template-columns:1fr 56px 46px 52px;gap:8px;align-items:center;padding:8px 0"><span style="display:flex;align-items:center;gap:8px"><span style="width:6px;height:6px;border-radius:2px;background:#6C9CB0"></span><span style="font-size:12.5px;font-weight:600;color:#B8BCC8">Curve</span></span><span class="mono" style="font-size:12px;color:#B8BCC8;text-align:right">82.5</span><span class="mono" style="font-size:11px;color:#707080;text-align:right">14%</span><span class="mono" style="font-size:11px;color:#B8BCC8;text-align:right">33%</span></div>
|
||
</div>
|
||
</div>
|
||
<!-- one identity many props -->
|
||
<div style="display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:#14141E;border-top:1px solid #14141E">
|
||
<div style="background:#0A0A10;padding:13px 15px"><div class="mono" style="font-size:9px;letter-spacing:.14em;color:#707080;margin-bottom:6px">STRIKEOUTS O6.5</div><div style="display:flex;align-items:center;gap:7px"><span class="mono" style="display:inline-flex;align-items:center;height:19px;padding:0 7px;border-radius:5px;background:rgba(0,212,160,.12);color:#00D4A0;font-weight:800;font-size:11px;border:1px solid rgba(0,212,160,.28)">A</span><span class="mono" data-react data-fmt="edge" style="font-size:11px;color:#00D4A0;font-weight:700;padding:1px 4px;border-radius:5px">+6.1%</span></div></div>
|
||
<div style="background:#0A0A10;padding:13px 15px"><div class="mono" style="font-size:9px;letter-spacing:.14em;color:#707080;margin-bottom:6px">OUTS O16.5</div><div style="display:flex;align-items:center;gap:7px"><span class="mono" style="display:inline-flex;align-items:center;height:19px;padding:0 7px;border-radius:5px;background:rgba(0,212,160,.1);color:#00D4A0;font-weight:800;font-size:11px;border:1px solid rgba(0,212,160,.24)">A-</span><span class="mono" style="font-size:11px;color:#00D4A0;font-weight:700">+4.2%</span></div></div>
|
||
<div style="background:#0A0A10;padding:13px 15px"><div class="mono" style="font-size:9px;letter-spacing:.14em;color:#707080;margin-bottom:6px">EARNED RUNS U2.5</div><div style="display:flex;align-items:center;gap:7px"><span class="mono" style="display:inline-flex;align-items:center;height:19px;padding:0 7px;border-radius:5px;background:#14141E;color:#F0F0F0;font-weight:800;font-size:11px;border:1px solid #1E1E2A">B+</span><span class="mono" style="font-size:11px;color:#00D4A0;font-weight:700">+2.4%</span></div></div>
|
||
<div style="background:#0A0A10;padding:13px 15px"><div class="mono" style="font-size:9px;letter-spacing:.14em;color:#707080;margin-bottom:6px">1ST-INNING K</div><div style="display:flex;align-items:center;gap:7px"><span class="mono" style="display:inline-flex;align-items:center;height:19px;padding:0 7px;border-radius:5px;background:#14141E;color:#B8BCC8;font-weight:800;font-size:11px;border:1px solid #1E1E2A">B</span><span class="mono" style="font-size:11px;color:#00D4A0;font-weight:700">+1.6%</span></div></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ============ CORRELATION / PARLAY BUILDER ============ -->
|
||
<div data-screen-label="Correlation builder" style="margin-top:64px">
|
||
<div style="display:flex;align-items:center;gap:12px;margin-bottom:6px">
|
||
<span class="mono" style="font-size:12px;letter-spacing:.28em;color:#F0F0F0;font-weight:700">CORRELATION BUILDER</span>
|
||
<span class="mono" style="font-size:10.5px;letter-spacing:.18em;color:#707080">PARLAY MATH · THE STAKE-DOWN SIGNAL · TAP TO BUILD</span>
|
||
</div>
|
||
<div style="height:1px;background:#14141E;margin:14px 0 22px"></div>
|
||
|
||
<div style="display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start">
|
||
<!-- legs -->
|
||
<div style="border-radius:16px;background:#0A0A10;border:1px solid #1E1E2A;overflow:hidden;box-shadow:inset 0 1px 0 rgba(255,255,255,.03)">
|
||
<div style="padding:14px 16px;border-bottom:1px solid #14141E"><span class="mono" style="font-size:10px;letter-spacing:.22em;color:#F0F0F0;font-weight:700">TONIGHT'S A/B READS</span><span class="mono" style="font-size:9px;letter-spacing:.14em;color:#707080;margin-left:8px">TAP TO ADD</span></div>
|
||
<div ref="{{ parlayLegsRef }}">
|
||
<div data-leg="jokic" data-dec="2.05" data-game="DENMIN" data-grade="A+" data-label="Jokić o27.5 PTS" data-sub="NBA · DEN @ MIN" data-odds="+105" style="display:flex;align-items:center;gap:12px;padding:12px 16px;border-top:1px solid #101018;cursor:pointer">
|
||
<span data-check style="width:18px;height:18px;flex:none;border-radius:5px;border:1.5px solid #2A2A38;display:flex;align-items:center;justify-content:center"></span>
|
||
<div style="flex:1;min-width:0"><div style="font-size:13px;font-weight:600">Jokić <span style="color:#B8BCC8;font-weight:500">o27.5 PTS</span></div><div class="mono" style="font-size:8.5px;letter-spacing:.1em;color:#707080;margin-top:2px">NBA · <span style="display:inline-block;width:10px;height:10px;border-radius:3px;background:linear-gradient(135deg,#0E4DA4,#4C8BF5);vertical-align:-1.5px;margin-right:3px"></span>DEN @ <span style="display:inline-block;width:10px;height:10px;border-radius:3px;background:linear-gradient(135deg,#0C2340,#236192);vertical-align:-1.5px;margin-right:3px"></span>MIN</div></div>
|
||
<span class="mono" style="display:inline-flex;align-items:center;height:18px;padding:0 7px;border-radius:5px;background:rgba(0,212,160,.14);color:#00D4A0;font-weight:800;font-size:10px;border:1px solid rgba(0,212,160,.3)">A+</span>
|
||
<span class="mono" style="font-size:11.5px;color:#F0F0F0;width:42px;text-align:right">+105</span>
|
||
</div>
|
||
<div data-leg="edwards" data-dec="2.30" data-game="DENMIN" data-grade="A" data-label="Edwards o5.5 AST" data-sub="NBA · DEN @ MIN" data-odds="+130" style="display:flex;align-items:center;gap:12px;padding:12px 16px;border-top:1px solid #101018;cursor:pointer">
|
||
<span data-check style="width:18px;height:18px;flex:none;border-radius:5px;border:1.5px solid #2A2A38;display:flex;align-items:center;justify-content:center"></span>
|
||
<div style="flex:1;min-width:0"><div style="font-size:13px;font-weight:600">Edwards <span style="color:#B8BCC8;font-weight:500">o5.5 AST</span></div><div class="mono" style="font-size:8.5px;letter-spacing:.1em;color:#707080;margin-top:2px">NBA · <span style="display:inline-block;width:10px;height:10px;border-radius:3px;background:linear-gradient(135deg,#0E4DA4,#4C8BF5);vertical-align:-1.5px;margin-right:3px"></span>DEN @ <span style="display:inline-block;width:10px;height:10px;border-radius:3px;background:linear-gradient(135deg,#0C2340,#236192);vertical-align:-1.5px;margin-right:3px"></span>MIN</div></div>
|
||
<span class="mono" style="display:inline-flex;align-items:center;height:18px;padding:0 7px;border-radius:5px;background:rgba(0,212,160,.1);color:#00D4A0;font-weight:800;font-size:10px;border:1px solid rgba(0,212,160,.24)">A</span>
|
||
<span class="mono" style="font-size:11.5px;color:#F0F0F0;width:42px;text-align:right">+130</span>
|
||
</div>
|
||
<div data-leg="skenes" data-dec="1.83" data-game="PITCHC" data-grade="A" data-label="Skenes o6.5 K" data-sub="MLB · PIT @ CHC" data-odds="-120" style="display:flex;align-items:center;gap:12px;padding:12px 16px;border-top:1px solid #101018;cursor:pointer">
|
||
<span data-check style="width:18px;height:18px;flex:none;border-radius:5px;border:1.5px solid #2A2A38;display:flex;align-items:center;justify-content:center"></span>
|
||
<div style="flex:1;min-width:0"><div style="font-size:13px;font-weight:600">Skenes <span style="color:#B8BCC8;font-weight:500">o6.5 K</span></div><div class="mono" style="font-size:8.5px;letter-spacing:.1em;color:#707080;margin-top:2px">MLB · <span style="display:inline-block;width:10px;height:10px;border-radius:3px;background:linear-gradient(135deg,#2b2b2b,#c9a227);vertical-align:-1.5px;margin-right:3px"></span>PIT @ <span style="display:inline-block;width:10px;height:10px;border-radius:3px;background:linear-gradient(135deg,#0E3386,#CC3433);vertical-align:-1.5px;margin-right:3px"></span>CHC</div></div>
|
||
<span class="mono" style="display:inline-flex;align-items:center;height:18px;padding:0 7px;border-radius:5px;background:rgba(0,212,160,.1);color:#00D4A0;font-weight:800;font-size:10px;border:1px solid rgba(0,212,160,.24)">A</span>
|
||
<span class="mono" style="font-size:11.5px;color:#F0F0F0;width:42px;text-align:right">-120</span>
|
||
</div>
|
||
<div data-leg="judge" data-dec="2.40" data-game="NYYBOS" data-grade="B" data-label="Judge o1.5 TB" data-sub="MLB · NYY @ BOS" data-odds="+140" style="display:flex;align-items:center;gap:12px;padding:12px 16px;border-top:1px solid #101018;cursor:pointer">
|
||
<span data-check style="width:18px;height:18px;flex:none;border-radius:5px;border:1.5px solid #2A2A38;display:flex;align-items:center;justify-content:center"></span>
|
||
<div style="flex:1;min-width:0"><div style="font-size:13px;font-weight:600">Judge <span style="color:#B8BCC8;font-weight:500">o1.5 TB</span></div><div class="mono" style="font-size:8.5px;letter-spacing:.1em;color:#707080;margin-top:2px">MLB · <span style="display:inline-block;width:10px;height:10px;border-radius:3px;background:linear-gradient(135deg,#1b3a6b,#0C2340);vertical-align:-1.5px;margin-right:3px"></span>NYY @ <span style="display:inline-block;width:10px;height:10px;border-radius:3px;background:linear-gradient(135deg,#BD3039,#6b1c22);vertical-align:-1.5px;margin-right:3px"></span>BOS</div></div>
|
||
<span class="mono" style="display:inline-flex;align-items:center;height:18px;padding:0 7px;border-radius:5px;background:#14141E;color:#F0F0F0;font-weight:800;font-size:10px;border:1px solid #1E1E2A">B</span>
|
||
<span class="mono" style="font-size:11.5px;color:#F0F0F0;width:42px;text-align:right">+140</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- slip -->
|
||
<div style="border-radius:16px;background:linear-gradient(180deg,#0F0F17,#0A0A10);border:1px solid #2A2A38;overflow:hidden;box-shadow:0 30px 60px -34px rgba(0,0,0,.9),inset 0 1px 0 rgba(255,255,255,.04)">
|
||
<div style="display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid #14141E">
|
||
<span class="mono" style="font-size:10px;letter-spacing:.22em;color:#F0F0F0;font-weight:700">PARLAY SLIP</span>
|
||
<span class="mono" data-parlay-count style="font-size:10px;letter-spacing:.14em;color:#707080">2 LEGS</span>
|
||
</div>
|
||
<div data-parlay-legs style="padding:8px 10px;min-height:96px"></div>
|
||
<div data-parlay-warn style="display:none;margin:0 12px 12px;padding:11px 13px;border-radius:10px;background:rgba(255,179,71,.08);border:1px solid rgba(255,179,71,.28)">
|
||
<div style="display:flex;align-items:center;gap:8px;margin-bottom:5px"><svg width="13" height="13" viewBox="0 0 24 24" fill="none"><path fill="none" stroke="#FFB347" stroke-width="2.1" stroke-linecap="round" stroke-linejoin="round" d="M12 3 2 20h20L12 3zM12 10v4M12 17v.5"/></svg><span class="mono" style="font-size:9px;letter-spacing:.16em;color:#FFB347;font-weight:700">SAME-GAME CORRELATION</span></div>
|
||
<span class="mono" data-parlay-warntext style="font-size:10.5px;line-height:1.45;color:#B8BCC8;letter-spacing:.02em"></span>
|
||
</div>
|
||
<div style="display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:#14141E;border-top:1px solid #14141E">
|
||
<div style="background:#0A0A10;padding:13px 15px"><div class="mono" style="font-size:9px;letter-spacing:.14em;color:#707080;margin-bottom:6px">COMBINED</div><div class="mono" data-parlay-odds style="font-size:19px;font-weight:800;color:#F0F0F0">+320</div></div>
|
||
<div style="background:#0A0A10;padding:13px 15px"><div class="mono" style="font-size:9px;letter-spacing:.14em;color:#707080;margin-bottom:6px">GRADE</div><div class="mono" data-parlay-grade style="font-size:19px;font-weight:800;color:#FFB347">B</div></div>
|
||
<div style="background:#0A0A10;padding:13px 15px"><div class="mono" style="font-size:9px;letter-spacing:.14em;color:#707080;margin-bottom:6px">VYNDR STAKE</div><div class="mono" data-parlay-stake style="font-size:19px;font-weight:800;color:#FFB347">0.4u</div></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div data-screen-label="footer" style="margin-top:64px">
|
||
<div style="padding-top:22px;border-top:1px solid #14141E;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 24px">
|
||
<span class="mono" style="font-size:10px;letter-spacing:.16em;color:#707080">COMPONENTS · 74 GLYPHS · EDGE BOARD · /u · SHARE · COMBAT · LIVE GRADE · PRO · STATES</span>
|
||
<span class="mono" style="font-size:10px;letter-spacing:.16em;color:#00D4A0">VYNDR VISUAL SYSTEM · v2</span>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
</x-dc>
|
||
<script type="text/x-dc" data-dc-script data-props="{"$preview":{"width":1240,"height":2400},"reactionsLive":{"editor":"boolean","default":true,"tsType":"boolean","section":"Behavior"},"reactionSpeed":{"editor":"range","default":2300,"min":800,"max":5000,"step":100,"unit":"ms","tsType":"number","section":"Behavior"}}">
|
||
class Component extends DCLogic {
|
||
constructor(props){
|
||
super(props);
|
||
this.rootNode = null;
|
||
this.glyphGrid = null;
|
||
this.state = { cmdOpen:false };
|
||
}
|
||
|
||
renderVals(){
|
||
return {
|
||
rootRef: (n)=>{ this.rootNode = n; },
|
||
glyphGridRef: (n)=>{ this.glyphGrid = n; },
|
||
gradeHistoryRef: (n)=>{ this.gradeHistory = n; },
|
||
boardRef: (n)=>{ this.board = n; },
|
||
parlayLegsRef: (n)=>{ this.parlayLegs = n; },
|
||
cmdOpen: this.state.cmdOpen,
|
||
openCmd: ()=>{ this.openCmdBar(); },
|
||
closeCmd: ()=>{ this.setState({cmdOpen:false}); },
|
||
stopCmd: (e)=>{ e.stopPropagation(); },
|
||
onCmdInput: (e)=>{ this.filterCmd(e.target.value); }
|
||
};
|
||
}
|
||
|
||
glyphDefs(){
|
||
// Master mark library. Colors deduped OFF signal-green #00D4A0 (and off reserved amber #FFB347 / red #FF4757).
|
||
// Each mark: duotone — filled base + weighted stroke, currentColor, 24 grid.
|
||
return {
|
||
TORCH:{c:'#FF6B4A',g:'<path fill="currentColor" fill-opacity=".16" d="M12 2c3.5 4.5 5.5 6 5.5 10a5.5 5.5 0 0 1-11 0C6.5 8 8.5 6.5 12 2Z"/><path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linejoin="round" d="M12 7c2 2.6 3 3.8 3 6a3 3 0 0 1-6 0c0-2.2 1-3.4 3-6Z"/>'},
|
||
CONDUCTOR:{c:'#6C8CFF',g:'<circle cx="12" cy="16" r="2.6" fill="currentColor"/><path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" d="M12 14 6 5M12 14l6-9M12 14v-4"/>'},
|
||
ARCHITECT:{c:'#B07CFF',g:'<path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linejoin="round" d="M12 3 4 19h16z"/><path fill="currentColor" fill-opacity=".18" d="m12 9 4 8H8z"/>'},
|
||
LINK:{c:'#7AA6FF',g:'<path fill="none" stroke="currentColor" stroke-width="2.3" d="M9.5 9a4 4 0 1 0 0 6"/><path fill="none" stroke="currentColor" stroke-width="2.3" d="M14.5 9a4 4 0 1 1 0 6"/><path stroke="currentColor" stroke-width="2.3" stroke-linecap="round" d="M9 12h6"/>'},
|
||
FORTRESS:{c:'#4C6FA5',g:'<path fill="currentColor" fill-opacity=".16" d="M5 5h3v2h2V5h4v2h2V5h3v6c0 5-4 7-7 8-3-1-7-3-7-8V5Z"/><path fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" d="M5 5h3v2h2V5h4v2h2V5h3v6c0 5-4 7-7 8-3-1-7-3-7-8V5Z"/>'},
|
||
PISTON:{c:'#E87B4A',g:'<path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" d="M8 4h8v16H8zM12 8v8M9.5 10.5 12 8l2.5 2.5M9.5 13.5 12 16l2.5-2.5"/>'},
|
||
ARTILLERY:{c:'#C98A5A',g:'<path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" d="M3 20C7 8 14 6 20 6"/><path fill="currentColor" d="M20 6l-4 .3 2 3.4z"/><path stroke="currentColor" stroke-width="1.8" stroke-linecap="round" d="M19 4v-2M22 7h-2"/>'},
|
||
SENTINEL:{c:'#4FA0C4',g:'<path fill="currentColor" fill-opacity=".16" d="M12 3 5 6v5c0 5 3.5 7.5 7 9 3.5-1.5 7-4 7-9V6z"/><path fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" d="M12 3 5 6v5c0 5 3.5 7.5 7 9 3.5-1.5 7-4 7-9V6z"/><circle cx="12" cy="11" r="2" fill="currentColor"/>'},
|
||
IGNITER:{c:'#FF8A3D',g:'<path fill="currentColor" d="M12 2c.6 4.8 2.4 6.6 7.2 7.2C14.4 9.8 12.6 11.6 12 16.4 11.4 11.6 9.6 9.8 4.8 9.2 9.6 8.6 11.4 6.8 12 2Z"/><path fill="currentColor" d="M18 15c.3 2 1 2.7 3 3-2 .3-2.7 1-3 3-.3-2-1-2.7-3-3 2-.3 2.7-1 3-3Z"/>'},
|
||
SURGE:{c:'#FFA24A',g:'<path fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" d="M4 18l4-4 3 2 5-6"/><path stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" d="M16 10h4v4"/>'},
|
||
PRISM:{c:'#B36CFF',g:'<path fill="currentColor" fill-opacity=".16" d="M11 4 3 19h8z"/><path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linejoin="round" d="M11 4 3 19h8z"/><path stroke="currentColor" stroke-width="1.8" stroke-linecap="round" d="M11 9h10M11 12h10M11 15h10"/>'},
|
||
GLUE:{c:'#8A94A8',g:'<path fill="none" stroke="currentColor" stroke-width="2.3" stroke-linecap="round" d="M9 4C6 4 6 12 9 12 6 12 6 20 9 20M15 4c3 0 3 8 0 8 3 0 3 8 0 8"/><circle cx="12" cy="12" r="1.8" fill="currentColor"/>'},
|
||
BOLT:{c:'#45B7E8',g:'<path fill="currentColor" fill-opacity=".18" d="M13 2 4 14h6l-1 8 9-13h-6z"/><path fill="none" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round" d="M13 2 4 14h6l-1 8 9-13h-6z"/>'},
|
||
BRUISER:{c:'#C05A5A',g:'<path fill="currentColor" fill-opacity=".16" d="M5 8h14v10H5z"/><path fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" d="M5 8h14v10H5zM8 8V6M11 8V5M14 8V5M17 8V6"/>'},
|
||
LOCKDOWN:{c:'#5A6474',g:'<path fill="currentColor" fill-opacity=".16" d="M5 10h14v10H5z"/><path fill="none" stroke="currentColor" stroke-width="2.1" stroke-linejoin="round" d="M5 10h14v10H5zM8 10V7a4 4 0 0 1 8 0v3"/><circle cx="12" cy="15" r="1.6" fill="currentColor"/>'},
|
||
ANCHOR:{c:'#4C86C4',g:'<circle cx="12" cy="5" r="2.2" fill="none" stroke="currentColor" stroke-width="2.1"/><path fill="none" stroke="currentColor" stroke-width="2.1" stroke-linecap="round" stroke-linejoin="round" d="M12 7v12M6 13c0 4 3 6 6 6s6-2 6-6M4 13h4M16 13h4"/>'},
|
||
SPARK:{c:'#F0A93D',g:'<circle cx="12" cy="12" r="3" fill="currentColor"/><path fill="none" stroke="currentColor" stroke-width="2.3" stroke-linecap="round" d="M12 3v3M12 18v3M4.5 7.5l2.2 2.2M17.3 14.3l2.2 2.2M4.5 16.5l2.2-2.2M17.3 9.7l2.2-2.2"/>'},
|
||
SHIELD:{c:'#5A8CA8',g:'<path fill="currentColor" fill-opacity=".16" d="M12 3 5 6v5c0 5 3.5 7.5 7 9 3.5-1.5 7-4 7-9V6z"/><path fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" d="M12 3 5 6v5c0 5 3.5 7.5 7 9 3.5-1.5 7-4 7-9V6z"/><path stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" d="m9 11 2 2 4-4"/>'},
|
||
RANGE:{c:'#C77CE0',g:'<path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" d="M4 17a8 8 0 0 1 16 0"/><path stroke="currentColor" stroke-width="2.2" stroke-linecap="round" d="M12 17V7"/><path fill="currentColor" d="M12 5l-2.4 4h4.8z"/>'},
|
||
ENGINE:{c:'#E0803D',g:'<circle cx="12" cy="12" r="3.6" fill="none" stroke="currentColor" stroke-width="2.2"/><path stroke="currentColor" stroke-width="2.2" stroke-linecap="round" d="M12 4v3M12 17v3M4 12h3M17 12h3M6.5 6.5l2 2M15.5 15.5l2 2M17.5 6.5l-2 2M6.5 17.5l2-2"/>'},
|
||
HUB:{c:'#6C9CD8',g:'<circle cx="12" cy="12" r="2.5" fill="currentColor"/><circle cx="12" cy="4.5" r="1.7" fill="none" stroke="currentColor" stroke-width="1.8"/><circle cx="5" cy="8.5" r="1.7" fill="none" stroke="currentColor" stroke-width="1.8"/><circle cx="19" cy="8.5" r="1.7" fill="none" stroke="currentColor" stroke-width="1.8"/><circle cx="8" cy="19" r="1.7" fill="none" stroke="currentColor" stroke-width="1.8"/><circle cx="16" cy="19" r="1.7" fill="none" stroke="currentColor" stroke-width="1.8"/><path stroke="currentColor" stroke-width="1.5" d="M12 9.5V6M10 10.5 6.4 9M14 10.5l3.6-1.5M10.6 13.8 9 17.5M13.4 13.8 15 17.5"/>'},
|
||
BOMBER:{c:'#FF9F45',g:'<path fill="currentColor" fill-opacity=".18" d="M12 3l7 9h-4v8H9v-8H5z"/><path fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" d="M12 3l7 9h-4v8H9v-8H5z"/>'},
|
||
SLASH:{c:'#E0C64A',g:'<path fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" d="M6 18 18 6M10 19 19 10M5 14 13 6"/>'},
|
||
CATALYST:{c:'#E88AC0',g:'<path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" d="M3 12h11M10 7l5 5-5 5"/><path fill="currentColor" fill-opacity=".2" d="M16 8h5v8h-5z"/><path fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" d="M16 8h5v8h-5z"/>'},
|
||
DRIVER:{c:'#5A7D9A',g:'<path fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" d="M5 19 17 7"/><circle cx="19" cy="5" r="2.2" fill="currentColor"/><path fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" d="M4 14a10 10 0 0 0 6 6"/>'},
|
||
GHOST:{c:'#3FD8E0',g:'<path fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" d="M4 6l6 6-6 6M11 6l6 6-6 6"/>'},
|
||
WEDGE:{c:'#9AA0C0',g:'<path fill="currentColor" fill-opacity=".18" d="M12 4 4 20h8z"/><path fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" d="M12 4 4 20h16zM12 4v16"/>'},
|
||
MIRROR:{c:'#B0B6C8',g:'<path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" d="M9 5 4 12l5 7M15 5l5 7-5 7"/><path stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-dasharray="2 2.6" d="M12 4v16"/>'},
|
||
UNICORN:{c:'#C77CE0',g:'<path fill="none" stroke="currentColor" stroke-width="2.3" stroke-linecap="round" stroke-linejoin="round" d="M5 20c1-7 6-11 13-13M18 7l-1-4M18 7l4-1"/>'},
|
||
SWISS:{c:'#8A94A8',g:'<path fill="none" stroke="currentColor" stroke-width="2.3" stroke-linecap="round" d="M12 4v16M4 12h16M6.5 6.5l11 11M17.5 6.5l-11 11"/>'},
|
||
ALPHA:{c:'#7C5CFF',g:'<path fill="currentColor" fill-opacity=".16" d="M12 3 4 20h16z"/><path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linejoin="round" d="M12 3 4 20h16zM8.5 14h7"/>'},
|
||
PUNCHOUT:{c:'#FF7A5A',g:'<path fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" d="M7 4v16M7 12l9-8M9 13l7 7"/>'},
|
||
SINKER:{c:'#5A9AB0',g:'<path fill="none" stroke="currentColor" stroke-width="2.3" stroke-linecap="round" d="M5 5c6 1 9 5 9 13"/><path fill="currentColor" d="M14 20l-3-4.5 6 .4z"/>'},
|
||
WORKHORSE:{c:'#C89B5A',g:'<path fill="none" stroke="currentColor" stroke-width="2.8" stroke-linecap="round" d="M4 7h16M4 12h16M4 17h16"/>'},
|
||
HAMMER:{c:'#FF4D6D',g:'<path fill="currentColor" fill-opacity=".18" d="M6 4h11v5H6z"/><path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" d="M6 4h11v5H6zM11.5 9v11M8 20h7"/>'},
|
||
BRIDGE:{c:'#6C9CB0',g:'<path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" d="M4 18v-8a8 8 0 0 1 16 0v8M4 14h16M9 18v-4M15 18v-4"/>'},
|
||
CANNON:{c:'#4FB0C6',g:'<path fill="currentColor" fill-opacity=".16" d="M4 15l12-6 3 3-9 8-6-1z"/><path fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" d="M4 15l12-6 3 3-9 8-6-1z"/><circle cx="19" cy="6" r="2.2" fill="currentColor"/>'},
|
||
MAESTRO:{c:'#D9A441',g:'<path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" d="M5 19 16 6"/><circle cx="17" cy="5" r="1.9" fill="currentColor"/><path fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" d="M5 9c2-2 5-2 7 0M4 13c2.5-2.5 6-2.5 9 0"/>'},
|
||
'BELL COW':{c:'#B5895A',g:'<path fill="currentColor" fill-opacity=".16" d="M6 17c0-6 2-9 6-9s6 3 6 9z"/><path fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" d="M6 17c0-6 2-9 6-9s6 3 6 9zM4 17h16M12 8V5"/><circle cx="12" cy="20" r="1.6" fill="currentColor"/>'},
|
||
LIGHTNING:{c:'#E8C34A',g:'<path fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" d="M9 4l7 8-7 8"/><path stroke="currentColor" stroke-width="2.2" stroke-linecap="round" d="M3 9h4M2 15h5"/>'},
|
||
BURNER:{c:'#FF7A4A',g:'<path fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" d="M3 19 19 5M14 5h5v5"/><path stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M4 14l2 2M8 10l2 2"/>'},
|
||
CHAINMOVER:{c:'#7A94A8',g:'<path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" d="M4 12h9M10 8l4 4-4 4"/><path stroke="currentColor" stroke-width="2.6" stroke-linecap="round" d="M18 5v14"/>'},
|
||
SEAM:{c:'#6CB0C0',g:'<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-dasharray="3 3" d="M7 4v16M17 4v16"/><path fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" d="M12 20v-9"/><path fill="currentColor" d="M12 5l-3 5h6z"/>'},
|
||
HUNTER:{c:'#C05A5A',g:'<path fill="none" stroke="currentColor" stroke-width="2.3" stroke-linecap="round" stroke-linejoin="round" d="M5 4c8 0 12 5 12 14M17 18l-4-2M17 18l-1-4"/><circle cx="6" cy="6" r="1.6" fill="currentColor"/>'},
|
||
PLUG:{c:'#5A6474',g:'<path fill="currentColor" fill-opacity=".16" d="M6 6h12v12H6z"/><path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linejoin="round" d="M6 6h12v12H6z"/><path stroke="currentColor" stroke-width="2.2" stroke-linecap="round" d="M12 2v4M12 18v4"/>'},
|
||
ISLAND:{c:'#4C86C4',g:'<circle cx="12" cy="12" r="8" fill="none" stroke="currentColor" stroke-width="2" stroke-dasharray="3 3"/><circle cx="12" cy="10" r="2.3" fill="currentColor"/><path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" d="M8.5 17c1-2.5 6-2.5 7 0"/>'},
|
||
CENTERFIELD:{c:'#5A9AB0',g:'<path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" d="M3 16a9 9 0 0 1 18 0"/><circle cx="12" cy="9" r="2.2" fill="currentColor"/><path stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M3 16h3M18 16h3"/>'},
|
||
LEG:{c:'#C89B5A',g:'<path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" d="M7 20h10M9 20v-7M15 20v-7M7 13h10"/><path fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-dasharray="3 3" d="M12 13c0-5-4-6-4-9"/><circle cx="8" cy="4" r="1.8" fill="currentColor"/>'},
|
||
SNIPER:{c:'#E85D9E',g:'<circle cx="12" cy="12" r="7" fill="none" stroke="currentColor" stroke-width="2"/><path stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M12 3v4M12 17v4M3 12h4M17 12h4"/><circle cx="12" cy="12" r="2" fill="currentColor"/>'},
|
||
SETUP:{c:'#6C8CFF',g:'<path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" d="M4 16c5 2 10-1 12-8"/><path fill="currentColor" d="M16 8l-4 1 1.4 3.6z"/><circle cx="4" cy="16" r="2.2" fill="currentColor"/>'},
|
||
WALL:{c:'#5A7D9A',g:'<path fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" d="M4 5h16v14H4z"/><path stroke="currentColor" stroke-width="1.8" d="M4 9.7h16M4 14.3h16M11 5v4.7M8 9.7v4.6M15 9.7v4.6M11 14.3V19"/>'},
|
||
REARGUARD:{c:'#7C6CC0',g:'<path fill="currentColor" fill-opacity=".16" d="M12 3 5 6v6c0 5 4 7 7 8 3-1 7-3 7-8V6z"/><path fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" d="M12 3 5 6v6c0 5 4 7 7 8 3-1 7-3 7-8V6z"/><path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" d="M12 16v-6M9.5 12.5 12 10l2.5 2.5"/>'},
|
||
PEST:{c:'#E0803D',g:'<path fill="none" stroke="currentColor" stroke-width="2.1" stroke-linecap="round" stroke-linejoin="round" d="M12 4l1.8 2.8L17 6l-.8 3.2L19 11l-2.8 1.8L17 16l-3.2-.8L12 18l-1.8-2.8L7 16l.8-3.2L5 11l2.8-1.8L7 6l3.2.8z"/><circle cx="12" cy="11" r="1.6" fill="currentColor"/>'},
|
||
ENFORCER:{c:'#C05A5A',g:'<path fill="currentColor" fill-opacity=".16" d="M4 9h6v9H4zM14 9h6v9h-6z"/><path fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" d="M4 9h6v9H4zM14 9h6v9h-6zM4 9c0-2 1.5-3 3-3s3 1 3 3M14 9c0-2 1.5-3 3-3s3 1 3 3"/>'},
|
||
VAULT:{c:'#5A9AB0',g:'<path fill="currentColor" fill-opacity=".16" d="M7 5h10l1 8c0 4-3 6-6 6s-6-2-6-6z"/><path fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" d="M7 5h10l1 8c0 4-3 6-6 6s-6-2-6-6z"/><path stroke="currentColor" stroke-width="1.7" stroke-linecap="round" d="M9 9h6M9 12h6M11 15h2"/>'},
|
||
HOWITZER:{c:'#B5895A',g:'<path fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" d="M4 20 15 9"/><path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" d="M15 9l4-1-1 4"/><path stroke="currentColor" stroke-width="1.8" stroke-linecap="round" d="M18 14l2 2M20 11l2 1"/>'},
|
||
FINISHER:{c:'#FF7A5A',g:'<path fill="none" stroke="currentColor" stroke-width="1.9" d="M4 6h16v12H4z"/><path stroke="currentColor" stroke-width="1.3" d="M4 10h16M4 14h16M9 6v12M15 6v12"/><circle cx="17" cy="9" r="2.1" fill="currentColor"/>'},
|
||
TOWER:{c:'#6C9CB0',g:'<circle cx="12" cy="6" r="2.6" fill="currentColor"/><path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" d="M12 9v8M8 20l4-3 4 3M8 13h8"/>'},
|
||
MOTOR:{c:'#E0A03D',g:'<path fill="none" stroke="currentColor" stroke-width="2.3" stroke-linecap="round" stroke-linejoin="round" d="M6 8a7 7 0 0 1 12 2M18 16a7 7 0 0 1-12-2"/><path fill="currentColor" d="M18 5l1.4 4.2-4.2-1zM6 19l-1.4-4.2 4.2 1z"/>'},
|
||
BLADE:{c:'#B36CFF',g:'<path fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" d="M4 20C10 18 16 12 20 4"/><path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" d="M13 5l7-1-1 7"/>'},
|
||
PRESSURE:{c:'#FF6B4A',g:'<path fill="none" stroke="currentColor" stroke-width="2.3" stroke-linecap="round" stroke-linejoin="round" d="M3 8h9M3 12h9M3 16h9M9 6l4 6-4 6"/><path stroke="currentColor" stroke-width="2.6" stroke-linecap="round" d="M18 4v16"/>'},
|
||
COUNTER:{c:'#6C8CFF',g:'<path fill="none" stroke="currentColor" stroke-width="2.3" stroke-linecap="round" stroke-linejoin="round" d="M4 9h11M11 5l4 4-4 4M20 15H9M13 11l-4 4 4 4"/>'},
|
||
TECHNICIAN:{c:'#7AA6D8',g:'<circle cx="15" cy="9" r="5" fill="none" stroke="currentColor" stroke-width="2"/><path stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M15 6v6M12 9h6"/><path stroke="currentColor" stroke-width="2.4" stroke-linecap="round" d="M3 20l6.5-6.5"/>'},
|
||
SLUGGER:{c:'#C05A5A',g:'<path fill="currentColor" fill-opacity=".18" d="M12 2l2.4 5.6L20 8l-4 4 1.6 6L12 15l-5.6 3L8 12 4 8l5.6-.4z"/><path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round" d="M12 2l2.4 5.6L20 8l-4 4 1.6 6L12 15l-5.6 3L8 12 4 8l5.6-.4z"/>'},
|
||
PHANTOM:{c:'#9B8CFF',g:'<path fill="currentColor" fill-opacity=".16" d="M6 18V11a6 6 0 0 1 12 0v7l-2-2-2 2-2-2-2 2z"/><path fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" d="M6 18V11a6 6 0 0 1 12 0v7l-2-2-2 2-2-2-2 2z"/><circle cx="10" cy="11" r="1" fill="currentColor"/><circle cx="14" cy="11" r="1" fill="currentColor"/>'},
|
||
SOUTHPAW:{c:'#E0C64A',g:'<circle cx="10" cy="6" r="2.2" fill="currentColor"/><path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" d="M10 8v6M10 10l-5 1M10 11l5 3M10 14l-3 6M10 14l4 5"/>'},
|
||
GRAPPLER:{c:'#7C6CC0',g:'<path fill="none" stroke="currentColor" stroke-width="2.3" stroke-linecap="round" stroke-linejoin="round" d="M6 4v9M6 13l-3-3M6 13l3-3M18 20v-9M18 11l-3 3M18 11l3 3"/><path stroke="currentColor" stroke-width="2.2" stroke-linecap="round" d="M9 12h6"/>'},
|
||
STRIKER:{c:'#FF7A4A',g:'<path fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" d="M3 12h8"/><path fill="currentColor" fill-opacity=".2" d="M12 8h7v8h-7z"/><path fill="none" stroke="currentColor" stroke-width="2.1" stroke-linejoin="round" d="M12 8h7v8h-7z"/><path stroke="currentColor" stroke-width="1.8" stroke-linecap="round" d="M20 6l2-1M20.5 12H22M20 18l2 1"/>'},
|
||
IRON:{c:'#8A94A8',g:'<path fill="currentColor" fill-opacity=".16" d="M4 8h7v2c0 2 2 3 4 3h5v1c0 4-4 6-8 6s-8-3-8-8z"/><path fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" d="M4 8h7v2c0 2 2 3 4 3h5v1c0 4-4 6-8 6s-8-3-8-8z"/><path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M9 5h6v3"/>'},
|
||
GRINDER:{c:'#5A7D9A',g:'<path fill="none" stroke="currentColor" stroke-width="2.3" stroke-linecap="round" d="M4 15c3-4 5-4 8 0s5 4 8 0"/><path stroke="currentColor" stroke-width="2.3" stroke-linecap="round" d="M4 20h16"/><circle cx="12" cy="9" r="1.8" fill="currentColor"/>'},
|
||
AGGRESSOR:{c:'#FF6B4A',g:'<path fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" d="M4 20 15 9M15 9h-5M15 9v5"/><path stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M17 16l3 3"/><circle cx="19" cy="6" r="1.8" fill="currentColor"/>'},
|
||
SURGEON:{c:'#7AA6D8',g:'<path fill="none" stroke="currentColor" stroke-width="2" d="M4 5h16v14H4z"/><path stroke="currentColor" stroke-width="1.6" d="M4 12h16M12 5v14"/><circle cx="16.5" cy="8.5" r="2" fill="currentColor"/>'},
|
||
TOPSPIN:{c:'#B36CFF',g:'<path fill="none" stroke="currentColor" stroke-width="2.3" stroke-linecap="round" d="M18.5 8a7 7 0 1 0 1.2 6"/><path fill="currentColor" d="M20 5l-.3 4.6L16 7.4z"/><path stroke="currentColor" stroke-width="1.6" stroke-linecap="round" d="M9 12.5c1.5-1.5 4.5-1.5 6 0"/>'},
|
||
BRUSH:{c:'#E0B84A',g:'<path fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" d="M5 19 15 9"/><path fill="currentColor" fill-opacity=".2" d="M15 9l4-4 1.6 1.6-4 4z"/><path fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" d="M15 9l4-4M5 19l-1 1M7 20l-2 1"/>'},
|
||
WHIFF:{c:'#E86A6A',g:'<path fill="none" stroke="currentColor" stroke-width="2.3" stroke-linecap="round" d="M4 16c5 3 11 3 16-2"/><path fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-dasharray="2.5 3" d="M4 11c5 3 10 3 15-1.5"/><circle cx="18" cy="6" r="2.2" fill="currentColor"/>'},
|
||
CONNECTOR:{c:'#9AB0C4',g:'<circle cx="6" cy="7" r="2.4" fill="currentColor"/><circle cx="18" cy="17" r="2.4" fill="currentColor"/><path fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" d="M8 8.5C13 11 11 13 16 15.5"/>'},
|
||
DISTRIBUTOR:{c:'#7AB8D8',g:'<circle cx="12" cy="12" r="2.6" fill="currentColor"/><path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" d="M12 9V4M10 6l2-2 2 2M9.5 13.8 5 16.5M7.5 14.2l-2.5 2.3.8 3.2M14.5 13.8 19 16.5M16.5 14.2l2.5 2.3-.8 3.2"/>'},
|
||
FASTBREAK:{c:'#4AA0E8',g:'<path fill="currentColor" fill-opacity=".18" d="M10 5l8 7-8 7z"/><path fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" d="M10 5l8 7-8 7z"/><path stroke="currentColor" stroke-width="2.2" stroke-linecap="round" d="M5 8h3M4 12h4M5 16h3"/>'},
|
||
FLEX:{c:'#A08AC8',g:'<path fill="none" stroke="currentColor" stroke-width="2.3" stroke-linecap="round" d="M8 4C4 8 4 16 8 20M16 4c4 4 4 12 0 16"/><circle cx="12" cy="12" r="2" fill="currentColor"/>'},
|
||
HYBRID:{c:'#C88AB0',g:'<circle cx="10" cy="12" r="6" fill="none" stroke="currentColor" stroke-width="2"/><path fill="currentColor" fill-opacity=".18" d="M15 6l6 12H9z"/><path fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" d="M15 6l6 12H9z"/>'},
|
||
SWITCH:{c:'#C0B08A',g:'<path fill="none" stroke="currentColor" stroke-width="2.3" stroke-linecap="round" stroke-linejoin="round" d="M5 8h11M13 4l4 4-4 4M19 16H8M11 12l-4 4 4 4"/>'},
|
||
SWITCHBOARD:{c:'#90A0E8',g:'<circle cx="6" cy="6" r="1.8" fill="currentColor"/><circle cx="18" cy="6" r="1.8" fill="none" stroke="currentColor" stroke-width="1.8"/><circle cx="6" cy="18" r="1.8" fill="none" stroke="currentColor" stroke-width="1.8"/><circle cx="18" cy="18" r="1.8" fill="currentColor"/><path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M7.5 7.5c4 4 5 4 9 9"/>'},
|
||
RETURNER:{c:'#6C9CB0',g:'<path fill="none" stroke="currentColor" stroke-width="2.3" stroke-linecap="round" stroke-linejoin="round" d="M20 6 8 18M8 18h6M8 18v-6"/><path stroke="currentColor" stroke-width="2.3" stroke-linecap="round" d="M4 4l3.5 3.5"/>'}
|
||
};
|
||
}
|
||
|
||
sportSets(){
|
||
return [
|
||
{sport:'NBA', names:['TORCH','CONDUCTOR','ARCHITECT','LINK','FORTRESS','PISTON','ARTILLERY','SENTINEL','IGNITER','SURGE','PRISM','GLUE','BOLT','BRUISER','LOCKDOWN']},
|
||
{sport:'WNBA', names:['ANCHOR','CONDUCTOR','SPARK','SHIELD','RANGE','PRISM','IGNITER','ENGINE','HUB']},
|
||
{sport:'MLB', names:['BOMBER','SLASH','CATALYST','DRIVER','GHOST','WEDGE','MIRROR','UNICORN','SWISS','ALPHA','PUNCHOUT','SINKER','WORKHORSE','HAMMER','BRIDGE']},
|
||
{sport:'NFL', names:['CANNON','MAESTRO','BELL COW','LIGHTNING','BURNER','CHAINMOVER','SEAM','ANCHOR','HUNTER','PLUG','HAMMER','ISLAND','CENTERFIELD','SWISS','LEG']},
|
||
{sport:'HOCKEY', names:['SNIPER','SETUP','WALL','REARGUARD','PEST','WORKHORSE','ENFORCER','SPARK','VAULT','HOWITZER']},
|
||
{sport:'SOCCER', names:['FINISHER','MAESTRO','TOWER','MOTOR','BLADE','WALL']},
|
||
{sport:'BOXING / MMA', names:['PRESSURE','COUNTER','TECHNICIAN','SLUGGER','PHANTOM','SOUTHPAW','GRAPPLER','STRIKER','IRON','FINISHER']},
|
||
{sport:'TENNIS', names:['CANNON','GRINDER','AGGRESSOR','SURGEON','TOPSPIN','RETURNER']},
|
||
{sport:'CLASSIFIER LEGACY · BASKETBALL / BASEBALL', names:['BRUSH','WHIFF','CONNECTOR','DISTRIBUTOR','FASTBREAK','FLEX','HYBRID','SWITCH','SWITCHBOARD']}
|
||
];
|
||
}
|
||
|
||
buildGlyphs(){
|
||
if(!this.glyphGrid) return;
|
||
const defs=this.glyphDefs();
|
||
const sets=this.sportSets();
|
||
// count appearances to flag cross-sport reuse
|
||
const seen={};
|
||
sets.forEach(s=>s.names.forEach(n=>{seen[n]=(seen[n]||0)+1;}));
|
||
let html='';
|
||
sets.forEach(grp=>{
|
||
html+='<div style="grid-column:1/-1;display:flex;align-items:center;gap:12px;margin:20px 0 4px"><span class="mono" style="font-size:11px;letter-spacing:.24em;color:#F0F0F0;font-weight:700">'+grp.sport+'</span><span class="mono" style="font-size:9px;letter-spacing:.14em;color:#707080">'+grp.names.length+' MARKS</span><span style="flex:1;height:1px;background:#14141E"></span></div>';
|
||
grp.names.forEach(n=>{
|
||
const d=defs[n]; if(!d) return;
|
||
const shared=seen[n]>1;
|
||
html+='<div style="position:relative;display:flex;flex-direction:column;align-items:center;gap:9px;padding:15px 6px;border-radius:12px;background:#0E0E14;border:1px solid #1E1E2A">'
|
||
+(shared?'<span class="mono" title="shared across sports" style="position:absolute;top:7px;right:8px;font-size:8px;letter-spacing:.06em;color:#4a4a58">\u21ba</span>':'')
|
||
+'<div style="width:46px;height:46px;border-radius:11px;background:'+this.hexA(d.c,0.09)+';border:1.5px solid '+this.hexA(d.c,0.42)+';display:flex;align-items:center;justify-content:center;color:'+d.c+'">'
|
||
+'<svg width="27" height="27" viewBox="0 0 24 24" fill="none">'+d.g+'</svg></div>'
|
||
+'<div class="mono" style="font-size:9px;letter-spacing:.08em;font-weight:700;color:'+d.c+';text-align:center;line-height:1.1">'+n+'</div>'
|
||
+'</div>';
|
||
});
|
||
});
|
||
this.glyphGrid.innerHTML=html;
|
||
}
|
||
|
||
hexA(hex,a){
|
||
const h=hex.replace('#','');
|
||
const r=parseInt(h.substring(0,2),16),gg=parseInt(h.substring(2,4),16),b=parseInt(h.substring(4,6),16);
|
||
return 'rgba('+r+','+gg+','+b+','+a+')';
|
||
}
|
||
|
||
buildGradeHistory(){
|
||
if(!this.gradeHistory) return;
|
||
// tier -> color; each entry: grade + hit/miss. Mostly hits (64%).
|
||
const seq=[
|
||
['A+',1],['A',1],['B',1],['A',1],['C',0],['A+',1],['B',1],['A',1],
|
||
['A',1],['B',0],['A+',1],['A',1],['C',1],['B',1],['A',0],['A+',1],
|
||
['B',1],['A',1],['A+',1],['C',0],['A',1],['B',1],['A',1],['A+',1]
|
||
];
|
||
const tierColor=g=> g.indexOf('A')===0 ? '#00D4A0' : g==='B' ? '#F0F0F0' : g==='C' ? '#B8BCC8' : '#FF4757';
|
||
let html='';
|
||
seq.forEach(([g,hit])=>{
|
||
const tint = hit ? 'rgba(0,212,160,.10)' : 'rgba(255,71,87,.12)';
|
||
const bord = hit ? 'rgba(0,212,160,.28)' : 'rgba(255,71,87,.4)';
|
||
html+='<div class="mono" style="aspect-ratio:1;border-radius:7px;background:'+tint+';border:1px solid '+bord+';display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:800;color:'+tierColor(g)+'">'+g+'</div>';
|
||
});
|
||
this.gradeHistory.innerHTML=html;
|
||
}
|
||
|
||
clock(){ const d=new Date(); const p=n=>String(n).padStart(2,'0'); return p(d.getMinutes())+':'+p(d.getSeconds()); }
|
||
|
||
setupScroll(){
|
||
if(!this.rootNode) return;
|
||
// arrival: sections + act dividers boot in once when reached
|
||
const sections=[...this.rootNode.querySelectorAll('[data-screen-label],[data-reveal]')];
|
||
sections.forEach(s=>{ if(!s.hasAttribute('data-reveal')) s.setAttribute('data-reveal',''); });
|
||
this._io=new IntersectionObserver((ents)=>{
|
||
ents.forEach(en=>{ if(en.isIntersecting){ en.target.classList.add('vy-in'); this._io.unobserve(en.target); } });
|
||
},{threshold:.08});
|
||
sections.forEach(s=>this._io.observe(s));
|
||
// safety: anything above the fold reveals immediately
|
||
setTimeout(()=>{ sections.forEach(s=>{ if(s.getBoundingClientRect().top<window.innerHeight) s.classList.add('vy-in'); }); },300);
|
||
|
||
// rail highlighting
|
||
const map=['terminal','system','glyphs','surfaces','intel'];
|
||
this._so=new IntersectionObserver((ents)=>{
|
||
ents.forEach(en=>{
|
||
if(!en.isIntersecting) return;
|
||
const id=en.target.id;
|
||
this.rootNode.querySelectorAll('.vy-navdot').forEach(a=>a.classList.toggle('on', a.getAttribute('data-nav')===id));
|
||
});
|
||
},{rootMargin:'-30% 0px -55% 0px'});
|
||
map.forEach(id=>{ const el=this.rootNode.querySelector('#'+id); if(el) this._so.observe(el); });
|
||
}
|
||
|
||
setupParlay(){
|
||
if(!this.parlayLegs) return;
|
||
const legs=[...this.parlayLegs.querySelectorAll('[data-leg]')];
|
||
legs.forEach(l=>{
|
||
l.addEventListener('click',()=>{
|
||
l.dataset.sel = l.dataset.sel==='1' ? '0' : '1';
|
||
this.paintLeg(l);
|
||
this.updateParlay();
|
||
});
|
||
});
|
||
// default: jokic + edwards (demonstrates the correlation flag)
|
||
legs.forEach(l=>{ if(l.getAttribute('data-leg')==='jokic'||l.getAttribute('data-leg')==='edwards'){ l.dataset.sel='1'; } this.paintLeg(l); });
|
||
this.updateParlay();
|
||
}
|
||
|
||
paintLeg(l){
|
||
const on=l.dataset.sel==='1';
|
||
const chk=l.querySelector('[data-check]');
|
||
l.style.background = on ? 'rgba(0,212,160,.05)' : '';
|
||
l.style.boxShadow = on ? 'inset 2px 0 0 #00D4A0' : '';
|
||
if(chk){
|
||
chk.style.borderColor = on ? '#00D4A0' : '#2A2A38';
|
||
chk.style.background = on ? '#00D4A0' : 'transparent';
|
||
chk.innerHTML = on ? '<svg width="11" height="11" viewBox="0 0 24 24" fill="none"><path stroke="#06060B" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" d="M5 12l5 5L20 6"/></svg>' : '';
|
||
}
|
||
}
|
||
|
||
gradeRank(g){ return {'A+':0,'A':1,'A-':2,'B+':3,'B':4,'C':5,'D':6,'F':7}[g] ?? 4; }
|
||
rankGrade(r){ return ['A+','A','A-','B+','B','C','D','F'][Math.max(0,Math.min(7,r))]; }
|
||
gradeColor(g){ return g.indexOf('A')===0 ? '#00D4A0' : (g[0]==='B'?'#F0F0F0':(g[0]==='C'?'#B8BCC8':'#FF4757')); }
|
||
|
||
updateParlay(){
|
||
if(!this.rootNode || !this.parlayLegs) return;
|
||
const sel=[...this.parlayLegs.querySelectorAll('[data-leg]')].filter(l=>l.dataset.sel==='1');
|
||
const legsBox=this.rootNode.querySelector('[data-parlay-legs]');
|
||
const count=this.rootNode.querySelector('[data-parlay-count]');
|
||
const oddsEl=this.rootNode.querySelector('[data-parlay-odds]');
|
||
const gradeEl=this.rootNode.querySelector('[data-parlay-grade]');
|
||
const stakeEl=this.rootNode.querySelector('[data-parlay-stake]');
|
||
const warn=this.rootNode.querySelector('[data-parlay-warn]');
|
||
const warnText=this.rootNode.querySelector('[data-parlay-warntext]');
|
||
|
||
if(count) count.textContent = sel.length+' LEG'+(sel.length===1?'':'S');
|
||
|
||
// slip legs list
|
||
if(legsBox){
|
||
if(!sel.length){
|
||
legsBox.innerHTML='<div class="mono" style="display:flex;align-items:center;justify-content:center;height:96px;font-size:10.5px;letter-spacing:.12em;color:#4a4a58">TAP READS TO BUILD A SLIP</div>';
|
||
} else {
|
||
legsBox.innerHTML = sel.map(l=>'<div style="display:flex;align-items:center;justify-content:space-between;padding:8px 8px"><span style="font-size:12.5px;font-weight:600">'+l.getAttribute('data-label')+'</span><span class="mono" style="font-size:11px;color:#B8BCC8">'+l.getAttribute('data-odds')+'</span></div>').join('');
|
||
}
|
||
}
|
||
|
||
// combined decimal odds
|
||
let dec=1; sel.forEach(l=>{ dec*=parseFloat(l.getAttribute('data-dec'))||1; });
|
||
let american='—';
|
||
if(sel.length){ american = dec>=2 ? '+'+Math.round((dec-1)*100) : '-'+Math.round(100/(dec-1)); }
|
||
if(oddsEl) oddsEl.textContent = american;
|
||
|
||
// correlation: any two selected share a game
|
||
const games={}; let corr=false; let corrGame='';
|
||
sel.forEach(l=>{ const g=l.getAttribute('data-game'); if(games[g]){corr=true;corrGame=g;} games[g]=(games[g]||0)+1; });
|
||
|
||
// grade: worst selected, downgraded a tier if correlated
|
||
let grade='—', gcol='#707080';
|
||
if(sel.length){
|
||
let worst=Math.max(...sel.map(l=>this.gradeRank(l.getAttribute('data-grade'))));
|
||
if(corr) worst=Math.min(7,worst+1);
|
||
grade=this.rankGrade(worst);
|
||
gcol=corr ? '#FFB347' : this.gradeColor(grade);
|
||
}
|
||
if(gradeEl){ gradeEl.textContent=grade; gradeEl.style.color=gcol; }
|
||
|
||
// stake recommendation
|
||
let stake='—', scol='#707080';
|
||
if(sel.length===1){ stake='1.0u'; scol='#00D4A0'; }
|
||
else if(sel.length>1 && !corr){ stake='0.75u'; scol='#F0F0F0'; }
|
||
else if(sel.length>1 && corr){ stake='0.4u'; scol='#FFB347'; }
|
||
if(stakeEl){ stakeEl.textContent=stake; stakeEl.style.color=scol; }
|
||
|
||
// warning
|
||
if(warn){
|
||
if(corr){
|
||
warn.style.display='';
|
||
const gm = corrGame==='DENMIN'?'DEN @ MIN':corrGame;
|
||
if(warnText) warnText.textContent = gm+' — legs move together. Books cap combined value and the true edge shrinks; VYNDR trims the stake to size the real risk.';
|
||
} else {
|
||
warn.style.display='none';
|
||
}
|
||
}
|
||
}
|
||
|
||
liveGradeTick(){
|
||
const g=this.rootNode.querySelector('[data-lg-grade]');
|
||
if(!g) return;
|
||
const up=Math.random()<0.62;
|
||
g.textContent = up ? 'A+' : 'A';
|
||
g.style.animation='none'; void g.offsetWidth;
|
||
g.style.animation='vy-arrive .5s cubic-bezier(.2,.8,.2,1)';
|
||
const e=this.rootNode.querySelector('[data-lg-edge]');
|
||
if(e) this.nudge(e, up);
|
||
const note=this.rootNode.querySelector('[data-lg-note]');
|
||
if(note){
|
||
note.textContent = (up ? 'GRADE FIRMED ▲ ' : 'GRADE EASED ▼ ') + this.clock();
|
||
note.style.color = up ? '#00D4A0' : '#FFB347';
|
||
}
|
||
}
|
||
|
||
openCmdBar(){
|
||
this.setState({cmdOpen:true});
|
||
let t=0;
|
||
const p=setInterval(()=>{
|
||
t++;
|
||
const item=this.rootNode && this.rootNode.querySelector('[data-cmd-item]');
|
||
if(item){ this.initCmd(); clearInterval(p); }
|
||
if(t>30) clearInterval(p);
|
||
},20);
|
||
}
|
||
|
||
initCmd(){
|
||
if(!this.rootNode) return;
|
||
const i=this.rootNode.querySelector('[data-cmd-input]');
|
||
if(i){ i.value=''; try{ i.focus(); }catch(e){} }
|
||
this.filterCmd('');
|
||
}
|
||
|
||
filterCmd(q){
|
||
if(!this.rootNode) return;
|
||
q=(q||'').trim().toLowerCase();
|
||
const items=[...this.rootNode.querySelectorAll('[data-cmd-item]')];
|
||
let shown=0;
|
||
items.forEach(it=>{
|
||
const hay=(it.getAttribute('data-tags')||'')+' '+it.textContent.toLowerCase();
|
||
const match=!q || hay.toLowerCase().indexOf(q)>-1;
|
||
it.style.display=match?'flex':'none';
|
||
if(match) shown++;
|
||
});
|
||
// hide section headers with no visible items below is overkill; just toggle empty state
|
||
const empty=this.rootNode.querySelector('[data-cmd-empty]');
|
||
if(empty) empty.style.display= shown? 'none':'block';
|
||
// hide section headers whose group has no visible items
|
||
const list=this.rootNode.querySelector('[data-cmd-list]');
|
||
if(list){
|
||
const kids=[...list.children];
|
||
kids.forEach((el,idx)=>{
|
||
if(el.hasAttribute('data-cmd-item')||el.hasAttribute('data-cmd-empty')) return;
|
||
let vis=false;
|
||
for(let j=idx+1;j<kids.length;j++){
|
||
const n=kids[j];
|
||
if(!n.hasAttribute('data-cmd-item')){ if(n.hasAttribute('data-cmd-empty')) continue; else break; }
|
||
if(n.style.display!=='none'){ vis=true; break; }
|
||
}
|
||
el.style.display = vis ? '' : 'none';
|
||
});
|
||
}
|
||
}
|
||
|
||
setupBoardHover(){
|
||
if(!this.board) return;
|
||
const RAT={
|
||
jokic:'MIN 4th-fastest pace vs C · line lagged the matchup by +2.0',
|
||
skenes:'CHC whiff rate 8th-worst vs RHP · K number soft into the start',
|
||
edwards:'Usage +6% live w/ Gobert off · MIN pushing pace late',
|
||
judge:'BOS bullpen LHP-heavy · Judge TB vs LHP top-5 in the league',
|
||
mcdavid:'CGY concedes the most high-danger chances · PP1 minutes heavy',
|
||
mahomes:'BUF secondary banged up · pass rate over expectation in spot',
|
||
betts:'SD throwing RHP · Betts barrel% top-5 vs velocity',
|
||
brunson:'BOS drops coverage · Brunson mid-range volume travels',
|
||
curry:'SAC transition D 22nd · GSW 3PA rate elevated on the road',
|
||
lavine:'MIL perimeter D 3rd · usage down w/ Giddey on — the FADE'
|
||
};
|
||
this.board.querySelectorAll('[data-row]').forEach(r=>{
|
||
const key=r.getAttribute('data-row');
|
||
r.style.transition='background .15s ease,opacity .15s ease';
|
||
r.style.cursor='pointer';
|
||
r.addEventListener('mouseenter',()=>{
|
||
r.dataset.o = r.style.opacity || '1';
|
||
r.style.opacity='1';
|
||
r.style.background='rgba(255,255,255,.028)';
|
||
if(r._detail) return;
|
||
const d=document.createElement('div');
|
||
d.setAttribute('style','padding:0 16px 10px 51px;background:rgba(255,255,255,.028);animation:vy-detailin .16s ease-out');
|
||
d.innerHTML='<div style="display:flex;align-items:flex-start;justify-content:space-between;gap:14px"><span class="mono" style="font-size:9.5px;letter-spacing:.04em;line-height:1.45;color:#B8BCC8">'+(RAT[key]||'')+'</span><span class="mono" style="font-size:9px;letter-spacing:.12em;color:#00D4A0;white-space:nowrap;flex:none">VIEW READ \u25B8</span></div>';
|
||
r.insertAdjacentElement('afterend',d);
|
||
r._detail=d;
|
||
});
|
||
r.addEventListener('mouseleave',()=>{
|
||
r.style.opacity = r.dataset.o || '1';
|
||
r.style.background='';
|
||
if(r._detail){ r._detail.remove(); r._detail=null; }
|
||
});
|
||
});
|
||
}
|
||
|
||
componentDidUpdate(prevProps, prevState){
|
||
if(this.state.cmdOpen && (!prevState || !prevState.cmdOpen) && this.rootNode){
|
||
const i=this.rootNode.querySelector('[data-cmd-input]');
|
||
if(i){ i.value=''; this.filterCmd(''); setTimeout(()=>i.focus(),20); }
|
||
}
|
||
}
|
||
|
||
componentDidMount(){
|
||
this.buildGlyphs();
|
||
this.buildGradeHistory();
|
||
this.setupBoardHover();
|
||
this.setupParlay();
|
||
this.setupScroll();
|
||
this._key=(e)=>{
|
||
const k=(e.key||'').toLowerCase();
|
||
if((e.metaKey||e.ctrlKey) && k==='k'){ e.preventDefault(); if(this.state.cmdOpen){ this.setState({cmdOpen:false}); } else { this.openCmdBar(); } }
|
||
else if(e.key==='Escape' && this.state.cmdOpen){ this.setState({cmdOpen:false}); }
|
||
};
|
||
document.addEventListener('keydown',this._key);
|
||
|
||
// THE WIRE — session log: one entry, holds, then the next
|
||
this._wireEntries=[
|
||
['STEAM','Jokić o27.5 PTS — line 25.5 → 27.5 since open. Grade holds A+.','#00D4A0'],
|
||
['GRADE','Skenes o6.5 K firmed to A — CHC whiff rate confirms the read.','#00D4A0'],
|
||
['LIVE','Edwards o5.5 AST pacing ▲ — usage +6% with Gobert off.','#00D4A0'],
|
||
['FLAG','Vlad Jr. streak correlated with team total — stake trimmed.','#FFB347'],
|
||
['CLV','Portfolio closing-line value tonight: +2.8% across 14 edges.','#B8BCC8'],
|
||
['FADE','LaVine o22.5 drifting — MIL perimeter D. Graded D, avoid.','#FF4757']
|
||
];
|
||
this._wi=0;
|
||
const wireTick=()=>{
|
||
if(!this.rootNode) return;
|
||
const w=this.rootNode.querySelector('[data-wire]');
|
||
const t=this.rootNode.querySelector('[data-wire-time]');
|
||
if(!w) return;
|
||
const [tag,msg,col]=this._wireEntries[this._wi % this._wireEntries.length]; this._wi++;
|
||
w.innerHTML='<span style="color:'+col+';font-weight:700">'+tag+'</span><span style="color:#2A2A38"> · </span>'+msg;
|
||
if(t){const d=new Date();const p=n=>String(n).padStart(2,'0');t.textContent=p(d.getHours())+':'+p(d.getMinutes())+':'+p(d.getSeconds());}
|
||
w.style.animation='none'; void w.offsetWidth;
|
||
w.style.animation='vy-wirein 6.4s ease-out';
|
||
};
|
||
this._wire=setInterval(wireTick,6500);
|
||
setTimeout(wireTick,1800);
|
||
|
||
// live grade-shift micro-view — grade reacts to game state
|
||
this._lg=setInterval(()=>{
|
||
if(this.props.reactionsLive===false || !this._booted || !this.rootNode) return;
|
||
this.liveGradeTick();
|
||
},3600);
|
||
// sync clock
|
||
const tick=()=>{
|
||
const el=this.rootNode && this.rootNode.querySelector('[data-sync-clock]');
|
||
if(el){const d=new Date();const p=n=>String(n).padStart(2,'0');el.textContent=p(d.getHours())+':'+p(d.getMinutes())+':'+p(d.getSeconds());}
|
||
};
|
||
tick();
|
||
this._clock=setInterval(tick,1000);
|
||
|
||
// EARNED MOTION: nothing pulses until boot completes, then reactions
|
||
// fire only as discrete "events" (a real datum changing), not on a loop.
|
||
this._booted=false;
|
||
this._bootTimer=setTimeout(()=>{ this._booted=true; },1500);
|
||
|
||
const speed=this.props.reactionSpeed||2300;
|
||
this._evi=0;
|
||
this._rx=setInterval(()=>{
|
||
if(this.props.reactionsLive===false) return;
|
||
if(!this._booted || !this.rootNode) return;
|
||
this.fireEvent();
|
||
},speed);
|
||
}
|
||
|
||
events(){
|
||
// discrete, opponent/market-specific truths — the chip text matches the row it moves
|
||
return [
|
||
{row:'jokic', chip:'STEAM · Jokić o27.5 ▲', up:true},
|
||
{row:'mahomes', chip:'LINE MOVE · Mahomes 274.5 ▼', up:false},
|
||
{row:'edwards', chip:'LIVE · Edwards o5.5 AST ▲', up:true},
|
||
{row:'betts', chip:'CLV · Betts o1.5 TB ▲', up:true},
|
||
{row:'skenes', chip:'STEAM · Skenes o6.5 K ▲', up:true},
|
||
{row:'lavine', chip:'FADE · LaVine drifting ▼', up:false},
|
||
{row:'mcdavid', chip:'CLV · McDavid o1.5 ▲', up:true},
|
||
{row:'judge', chip:'LINE MOVE · Judge o1.5 ▲', up:true}
|
||
];
|
||
}
|
||
|
||
fireEvent(){
|
||
const evs=this.events();
|
||
const ev=evs[this._evi % evs.length]; this._evi++;
|
||
const row=this.rootNode.querySelector('[data-row="'+ev.row+'"]');
|
||
if(row){
|
||
const cell=row.querySelector('[data-react]');
|
||
if(cell) this.nudge(cell, ev.up);
|
||
}
|
||
// occasionally also move the hero panel edge (the declassified read)
|
||
if(this._evi % 3===0){
|
||
const hero=this.rootNode.querySelector('.vy-scanwrap');
|
||
const panel=hero && hero.parentElement;
|
||
const heroEdge=panel && panel.querySelector('[data-react][data-fmt="edge"]');
|
||
if(heroEdge) this.nudge(heroEdge, ev.up);
|
||
}
|
||
this.showEvent(ev.chip, ev.up);
|
||
this.tickBreadth(ev.up);
|
||
}
|
||
|
||
showEvent(text, up){
|
||
const el=this.rootNode.querySelector('[data-event]');
|
||
if(!el) return;
|
||
el.textContent=text;
|
||
el.style.color = up ? '#00D4A0' : '#FF4757';
|
||
el.style.animation='none';
|
||
void el.offsetWidth;
|
||
el.style.animation='vy-eventin 2.6s ease-out';
|
||
}
|
||
|
||
tickBreadth(up){
|
||
const clv=this.rootNode.querySelector('[data-breadth-clv]');
|
||
if(clv){
|
||
let v=parseFloat(clv.textContent.replace(/[^0-9.\-]/g,''));
|
||
v=Math.max(1.2,Math.min(4.4, v+(up?0.1:-0.1)));
|
||
clv.textContent='+'+v.toFixed(1)+'%';
|
||
clv.classList.remove('rx-up','rx-down');void clv.offsetWidth;
|
||
clv.classList.add(up?'rx-up':'rx-down');
|
||
setTimeout(()=>clv.classList.remove('rx-up','rx-down'),760);
|
||
}
|
||
const eg=this.rootNode.querySelector('[data-breadth-edges]');
|
||
if(eg && Math.random()<0.5){
|
||
let n=parseInt(eg.textContent,10)||14;
|
||
n=Math.max(9,Math.min(19,n+(up?1:-1)));
|
||
eg.textContent=String(n);
|
||
}
|
||
}
|
||
|
||
nudge(c, forceUp){
|
||
const fmt=c.getAttribute('data-fmt');
|
||
const cur=parseFloat(c.textContent.replace(/[^0-9.\-]/g,''));
|
||
if(isNaN(cur)) return;
|
||
let up = (forceUp===undefined) ? (Math.random()<0.5) : !!forceUp;
|
||
let next=cur;
|
||
if(fmt==='line'){next=cur+(up?0.5:-0.5);c.textContent=next.toFixed(1);}
|
||
else if(fmt==='score'){next=cur+(up? (Math.random()<0.5?2:3):0);if(next===cur)up=true;c.textContent=String(Math.round(next));}
|
||
else if(fmt==='odds'){const step=up?2:-2;next=cur+step*2;c.textContent=(next>0?'+':'')+Math.round(next);}
|
||
else if(fmt==='edge'||fmt==='pct'){next=cur+(up?0.2:-0.2);const s=next>=0?'+':'';c.textContent=s+next.toFixed(1)+'%';
|
||
c.style.color = next>=0 ? '#00D4A0' : '#FF4757';}
|
||
// flash — the reaction to truth
|
||
c.classList.remove('rx-up','rx-down');
|
||
void c.offsetWidth;
|
||
c.classList.add(up?'rx-up':'rx-down');
|
||
setTimeout(()=>{c.classList.remove('rx-up','rx-down');},760);
|
||
}
|
||
|
||
componentWillUnmount(){
|
||
clearInterval(this._clock);
|
||
clearInterval(this._rx);
|
||
clearTimeout(this._bootTimer);
|
||
clearInterval(this._lg);
|
||
clearInterval(this._wire);
|
||
if(this._io) this._io.disconnect();
|
||
if(this._so) this._so.disconnect();
|
||
if(this._key) document.removeEventListener('keydown',this._key);
|
||
}
|
||
}
|
||
</script>
|
||
</body>
|
||
</html>
|