|
11 | 11 | <link rel="icon" href="assets/vortex_mark.png" /> |
12 | 12 | <link rel="preconnect" href="https://fonts.googleapis.com" /> |
13 | 13 | <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> |
14 | | - <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" /> |
| 14 | + <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&family=Fraunces:opsz,wght@9..144,500;9..144,600;9..144,700;9..144,900&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" /> |
15 | 15 | <style> |
16 | 16 | :root { |
17 | 17 | --bg: #fff7fa; |
|
26 | 26 | --accent-deep: #c2185b; |
27 | 27 | --shadow: 0 18px 50px -20px rgba(200, 24, 91, .35); |
28 | 28 | --shadow-soft: 0 10px 30px -16px rgba(176, 106, 179, .35); |
| 29 | + --serif: "Fraunces", Georgia, "Times New Roman", serif; |
| 30 | + --maxw: 1040px; |
29 | 31 | } |
30 | 32 | * { box-sizing: border-box; } |
31 | 33 | html { scroll-behavior: smooth; } |
|
42 | 44 | -webkit-font-smoothing: antialiased; |
43 | 45 | } |
44 | 46 | a { color: var(--accent-deep); } |
45 | | - .wrap { max-width: 1080px; margin: 0 auto; padding: 0 24px; } |
| 47 | + .wrap { max-width: var(--maxw); margin: 0 auto; padding: 0 24px; } |
46 | 48 |
|
47 | 49 | /* ---------- nav ---------- */ |
48 | 50 | nav { |
|
51 | 53 | background: rgba(255, 247, 250, .78); |
52 | 54 | border-bottom: 1px solid var(--border-soft); |
53 | 55 | } |
54 | | - .nav-inner { max-width: 1080px; margin: 0 auto; padding: 12px 24px; display: flex; align-items: center; gap: 18px; } |
| 56 | + .nav-inner { max-width: var(--maxw); margin: 0 auto; padding: 12px 24px; display: flex; align-items: center; gap: 18px; } |
55 | 57 | .brand { display: flex; align-items: center; gap: 10px; font-weight: 800; letter-spacing: -.02em; font-size: 1.12rem; text-decoration: none; color: var(--fg); } |
56 | 58 | .brand img { width: 28px; height: 28px; } |
57 | 59 | .brand .grad { background: linear-gradient(100deg, var(--accent), var(--accent-2)); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; } |
|
66 | 68 | header.hero { text-align: center; padding: 76px 0 26px; } |
67 | 69 | .hero .mark { width: min(120px, 32%); height: auto; margin: 0 auto 18px; display: block; filter: drop-shadow(0 14px 30px rgba(232,67,147,.30)); } |
68 | 70 | .eyebrow { display: inline-block; font-weight: 700; font-size: .82rem; letter-spacing: .14em; text-transform: uppercase; color: var(--accent-deep); background: var(--bg-soft); border: 1px solid var(--border); padding: 6px 14px; border-radius: 999px; } |
69 | | - h1.title { font-size: clamp(2.6rem, 6vw, 4.3rem); line-height: 1.05; letter-spacing: -.035em; margin: 20px 0 6px; font-weight: 900; } |
| 71 | + h1.title { font-family: var(--serif); font-size: clamp(3rem, 7vw, 5rem); line-height: 1.02; letter-spacing: -.03em; margin: 18px 0 8px; font-weight: 900; } |
70 | 72 | h1.title .grad { background: linear-gradient(110deg, var(--accent-deep), var(--accent) 45%, var(--accent-2)); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; } |
71 | | - .subtitle { font-size: clamp(1.05rem, 2.4vw, 1.4rem); font-weight: 600; color: var(--fg); margin: 6px auto 0; max-width: 760px; letter-spacing: -.01em; } |
| 73 | + .subtitle { font-family: var(--serif); font-style: italic; font-size: clamp(1.15rem, 2.6vw, 1.55rem); font-weight: 500; color: var(--fg); margin: 8px auto 0; max-width: 760px; letter-spacing: -.01em; } |
72 | 74 | .tagline { color: var(--muted); font-size: 1.06rem; margin: 16px auto 0; max-width: 680px; } |
73 | 75 | .tagline strong { color: var(--accent-deep); } |
74 | 76 |
|
|
89 | 91 | section.block { padding: 70px 0 8px; } |
90 | 92 | .sec-head { display: flex; align-items: center; gap: 12px; margin: 0 0 6px; } |
91 | 93 | .sec-chip { font-weight: 800; font-size: .78rem; letter-spacing: .14em; text-transform: uppercase; color: #fff; background: linear-gradient(120deg, var(--accent), var(--accent-2)); padding: 6px 12px; border-radius: 999px; } |
92 | | - h2.sec-title { font-size: clamp(1.7rem, 3.6vw, 2.4rem); font-weight: 800; letter-spacing: -.025em; margin: 14px 0 10px; } |
93 | | - .lead { font-size: 1.1rem; color: #4a313c; max-width: 760px; } |
| 94 | + h2.sec-title { font-family: var(--serif); font-size: clamp(1.9rem, 3.8vw, 2.7rem); font-weight: 600; letter-spacing: -.02em; margin: 14px 0 12px; } |
| 95 | + .lead { font-size: 1.12rem; color: #4a313c; max-width: none; } |
94 | 96 | .lead strong { color: var(--accent-deep); } |
95 | 97 |
|
96 | 98 | .split { display: grid; grid-template-columns: 1.05fr .95fr; gap: 30px; align-items: center; margin-top: 26px; } |
|
112 | 114 | .feature h3 { margin: 8px 0 6px; font-size: 1.12rem; } |
113 | 115 | .feature p { margin: 0; color: var(--muted); font-size: .95rem; } |
114 | 116 |
|
| 117 | + /* pipeline (numbered steps with arrows) */ |
| 118 | + .pipeline { display: flex; align-items: stretch; gap: 8px; margin-top: 28px; } |
| 119 | + .pipeline .step { flex: 1; background: linear-gradient(180deg, #fff, #fff7fb); border: 1px solid var(--border); border-radius: 18px; padding: 20px 18px; box-shadow: var(--shadow-soft); transition: transform .14s, border-color .14s; } |
| 120 | + .pipeline .step:hover { transform: translateY(-3px); border-color: var(--accent); } |
| 121 | + .pipeline .step .num { display: inline-flex; align-items: center; justify-content: center; width: 30px; height: 30px; border-radius: 9px; font-weight: 900; color: #fff; background: linear-gradient(120deg, var(--accent), var(--accent-2)); box-shadow: var(--shadow-soft); } |
| 122 | + .pipeline .step h4 { margin: 11px 0 6px; font-size: 1.08rem; } |
| 123 | + .pipeline .step p { margin: 0; color: var(--muted); font-size: .92rem; } |
| 124 | + .pipeline .arrow { display: flex; align-items: center; color: var(--accent); font-size: 1.4rem; font-weight: 800; } |
| 125 | + .pipeline .arrow.loop { color: var(--accent-2); } |
| 126 | + @media (max-width: 760px) { .pipeline { flex-direction: column; } .pipeline .arrow { justify-content: center; transform: rotate(90deg); } } |
| 127 | + |
115 | 128 | /* trio blocks (per-section supporting cards) */ |
116 | 129 | .trio { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin-top: 26px; } |
117 | 130 | @media (max-width: 760px) { .trio { grid-template-columns: 1fr; } } |
|
148 | 161 | .cite pre { background: #fff; color: #50363f; border: 1px solid var(--border); } |
149 | 162 |
|
150 | 163 | footer { margin-top: 80px; border-top: 1px solid var(--border-soft); background: rgba(255,238,245,.5); } |
151 | | - .foot-inner { max-width: 1080px; margin: 0 auto; padding: 36px 24px; display: flex; flex-wrap: wrap; gap: 14px 26px; align-items: center; justify-content: center; text-align: center; color: var(--muted); font-size: .92rem; } |
| 164 | + .foot-inner { max-width: var(--maxw); margin: 0 auto; padding: 36px 24px; display: flex; flex-wrap: wrap; gap: 14px 26px; align-items: center; justify-content: center; text-align: center; color: var(--muted); font-size: .92rem; } |
152 | 165 | .foot-inner a { color: var(--accent-deep); text-decoration: none; font-weight: 600; } |
153 | 166 | .foot-inner a:hover { text-decoration: underline; } |
154 | 167 | .foot-sep { color: var(--border); } |
@@ -219,10 +232,15 @@ <h2 class="sec-title reveal">Agents as algorithm designers</h2> |
219 | 232 | <figcaption>Each point is one sparse-attention algorithm generated or optimized by AI agents using Vortex (Qwen3-1.7B, AIME, NVIDIA H200).</figcaption> |
220 | 233 | </figure> |
221 | 234 | </div> |
222 | | - <div class="trio"> |
223 | | - <div class="blk reveal"><span class="idx">01</span><h3>Express</h3><p>An agent writes the sparse-attention idea in a few lines of high-level Python ops — scoring, reductions, top-<em>k</em>.</p></div> |
224 | | - <div class="blk reveal"><span class="idx">02</span><h3>Deploy</h3><p>Vortex JIT-compiles it into fused kernels that run inside a real LLM serving stack — no model-code changes.</p></div> |
225 | | - <div class="blk reveal"><span class="idx">03</span><h3>Iterate</h3><p>The agent reads measured throughput and accuracy, then refines — autonomous discovery in a closed loop.</p></div> |
| 235 | + <p class="lead reveal" style="margin-top:34px">It runs as a closed <strong>discovery loop</strong>:</p> |
| 236 | + <div class="pipeline reveal"> |
| 237 | + <div class="step"><span class="num">1</span><h4>Express</h4><p>An agent writes the idea in a few lines of high-level Python ops — scoring, reductions, top-<em>k</em>.</p></div> |
| 238 | + <div class="arrow">→</div> |
| 239 | + <div class="step"><span class="num">2</span><h4>Deploy</h4><p>Vortex JIT-compiles it into fused kernels inside a real LLM serving stack — no model-code changes.</p></div> |
| 240 | + <div class="arrow">→</div> |
| 241 | + <div class="step"><span class="num">3</span><h4>Measure</h4><p>Real throughput and accuracy come back from an end-to-end benchmark, not an estimate.</p></div> |
| 242 | + <div class="arrow loop">↺</div> |
| 243 | + <div class="step"><span class="num">4</span><h4>Refine</h4><p>The agent reads the result and proposes the next variant — discovery without a human in the inner loop.</p></div> |
226 | 244 | </div> |
227 | 245 | </section> |
228 | 246 |
|
|
0 commit comments