monsimas commited on
Commit
91be521
·
verified ·
1 Parent(s): eee851e

Deploy redesigned landing page (light theme)

Browse files
Files changed (1) hide show
  1. index.html +56 -48
index.html CHANGED
@@ -6,7 +6,7 @@
6
  <title>Trace Commons · An open dataset for code agent traces</title>
7
  <meta name="description" content="Donate your coding-agent sessions, anonymized on your own machine, to one open public dataset anyone can train on. The data that trains coding models should belong to everyone.">
8
  <link rel="canonical" href="https://trace-commons-web.hf.space/">
9
- <meta name="theme-color" content="#0f201f">
10
  <!-- Open Graph / social preview -->
11
  <meta property="og:type" content="website">
12
  <meta property="og:site_name" content="Trace Commons">
@@ -20,23 +20,25 @@
20
  <meta name="twitter:title" content="Trace Commons · An open commons for code agent traces">
21
  <meta name="twitter:description" content="The data that trains coding models should belong to everyone. Donate your coding-agent sessions to one open public dataset anyone can train on.">
22
  <meta name="twitter:image" content="https://trace-commons-web.hf.space/og.png">
23
- <link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect x='1.5' y='1.5' width='21' height='21' rx='4' fill='%230f201f' stroke='%23e8743b' stroke-width='1.5'/%3E%3Cline x1='6' y1='9' x2='18' y2='9' stroke='%23e8743b' stroke-width='1.6'/%3E%3Cline x1='6' y1='12.5' x2='14.5' y2='12.5' stroke='%237fb09a' stroke-width='1.6'/%3E%3Cline x1='6' y1='16' x2='16' y2='16' stroke='%23cdbfa8' stroke-width='1.6'/%3E%3C/svg%3E">
24
  <link rel="preconnect" href="https://fonts.googleapis.com">
25
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
26
  <link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,500;9..144,600&family=Spline+Sans:wght@400;500;600&family=Spline+Sans+Mono:wght@400;500;600&display=swap" rel="stylesheet">
27
  <style>
28
  :root{
29
- --ink:#0e1c1b; /* deep archival teal-black */
30
- --surface:#0f201f;
31
- --panel:#13302d;
32
- --panel-edge:#1e423d;
33
- --paper-pure:#f6f1e7;
34
- --paper-dim:#cdbfa8;
35
- --signal:#e8743b; /* restrained emberthe one bold color */
36
- --signal-soft:#f0a878;
37
- --leaf:#7fb09a; /* muted verdigris, commons/green nod */
38
- --line:rgba(243,236,224,0.14);
39
- --line-strong:rgba(243,236,224,0.28);
 
 
40
  --mono:'Spline Sans Mono',ui-monospace,monospace;
41
  --sans:'Spline Sans',system-ui,sans-serif;
42
  --display:'Fraunces',Georgia,serif;
@@ -52,13 +54,13 @@
52
  overflow-x:hidden;
53
  }
54
  body{background:
55
- radial-gradient(900px 500px at 82% -8%, rgba(232,116,59,0.10), transparent 60%),
56
- radial-gradient(700px 500px at 5% 8%, rgba(127,176,154,0.07), transparent 55%),
57
  var(--surface);
58
  }
59
  .wrap{max-width:1080px;margin:0 auto;padding:0 28px}
60
  a{color:inherit}
61
- ::selection{background:var(--signal);color:var(--ink)}
62
  :focus-visible{outline:2px solid var(--signal-soft);outline-offset:3px;border-radius:5px}
63
 
64
  /* ---------- nav ---------- */
@@ -76,7 +78,7 @@
76
  .brand .mark::before{content:"";position:absolute;inset:5px 4px;
77
  background:
78
  linear-gradient(var(--signal),var(--signal)) 0 0/100% 1.5px no-repeat,
79
- linear-gradient(var(--leaf),var(--leaf)) 0 4px/70% 1.5px no-repeat,
80
  linear-gradient(var(--paper-dim),var(--paper-dim)) 0 8px/85% 1.5px no-repeat;
81
  }
82
  .nav-right{display:flex;gap:18px;align-items:center}
@@ -99,7 +101,9 @@
99
  letter-spacing:-0.02em;margin-bottom:26px;
100
  font-optical-sizing:auto;text-wrap:balance;
101
  }
102
- h1 em{font-style:italic;color:var(--signal-soft)}
 
 
103
  .lede{
104
  font-size:clamp(18px,2.1vw,21px);line-height:1.55;
105
  color:var(--paper-dim);max-width:720px;margin-bottom:38px;
@@ -112,7 +116,7 @@
112
  display:inline-flex;align-items:center;gap:10px;cursor:pointer;
113
  border:1px solid transparent;transition:transform .15s, background .2s, border-color .2s;
114
  }
115
- .btn-primary{background:var(--signal);color:var(--ink)}
116
  .btn-primary:hover{transform:translateY(-2px);background:var(--signal-soft)}
117
  .btn-ghost{border-color:var(--line-strong);color:var(--paper-pure)}
118
  .btn-ghost:hover{border-color:var(--paper-dim);transform:translateY(-2px)}
@@ -129,14 +133,14 @@
129
  .hero-code .copy{font-size:13px;padding:8px 15px}
130
  .oss-pledge{
131
  display:flex;gap:11px;align-items:flex-start;margin-top:22px;max-width:520px;
132
- border:1px solid rgba(127,176,154,.32);border-radius:10px;padding:13px 15px;
133
- background:rgba(127,176,154,.06);font-size:14px;line-height:1.5;color:var(--paper-pure);
134
  }
135
- .oss-pledge .oss-ic{color:var(--leaf);flex:none;font-size:12px;margin-top:3px}
136
 
137
  .hero-how{margin-top:16px;max-width:560px;font-size:15px;line-height:1.6;color:var(--paper-dim)}
138
- .hero-how code{font-family:var(--mono);font-size:13px;color:var(--paper-pure);
139
- background:rgba(243,236,224,.06);border:1px solid var(--line);border-radius:5px;padding:1px 6px}
140
 
141
  /* ---------- section scaffold ---------- */
142
  section{padding:90px 0;position:relative}
@@ -145,7 +149,9 @@
145
  .sec-label .ix{color:var(--panel-edge)}
146
  h2{font-family:var(--display);font-weight:400;font-size:clamp(30px,4.4vw,46px);
147
  line-height:1.08;letter-spacing:-.018em;margin-bottom:18px;max-width:20ch;text-wrap:balance}
148
- h2 em{font-style:italic;color:var(--signal-soft)}
 
 
149
  .sec-intro{color:var(--paper-dim);max-width:560px;font-size:18px;margin-bottom:46px}
150
 
151
  /* ---------- why / argument ---------- */
@@ -153,16 +159,16 @@
153
  @media(max-width:860px){.why-grid{grid-template-columns:1fr}}
154
  .card{
155
  border:1px solid var(--line);border-radius:13px;padding:28px 26px;
156
- background:linear-gradient(180deg,rgba(19,48,45,.4),transparent);
157
  transition:border-color .25s,transform .25s;
158
  }
159
  .card:hover{border-color:var(--line-strong);transform:translateY(-3px)}
160
  .card .ic{width:38px;height:38px;border-radius:9px;border:1px solid var(--panel-edge);
161
- display:grid;place-items:center;margin-bottom:20px;color:var(--signal-soft);font-family:var(--mono)}
162
  .card h3{font-family:var(--display);font-size:22px;font-weight:500;margin-bottom:10px;letter-spacing:-.01em}
163
  .card p{font-size:15.5px;color:var(--paper-dim);line-height:1.55}
164
- .inline-link{color:var(--signal-soft);text-decoration:none;border-bottom:1px solid rgba(232,116,59,.4);transition:border-color .2s}
165
- .inline-link:hover{border-color:var(--signal-soft)}
166
 
167
  /* ---------- install ---------- */
168
  .install-shell{
@@ -172,26 +178,28 @@
172
  .panel-body{padding:30px 30px 34px}
173
  .step{display:flex;gap:18px;padding:16px 0;border-bottom:1px solid var(--line)}
174
  .step:last-child{border-bottom:none}
175
- .step .num{font-family:var(--mono);color:var(--signal-soft);font-size:14px;flex:none;width:26px;
176
  border:1px solid var(--panel-edge);height:26px;border-radius:6px;display:grid;place-items:center}
177
  .step .body{flex:1}
178
  .step .body h4{font-size:16px;font-weight:600;margin-bottom:9px}
179
  .step .body p{font-size:14.5px;color:var(--paper-dim);margin-bottom:12px}
180
  .code{
181
  display:flex;align-items:center;gap:14px;background:var(--ink);
182
- border:1px solid var(--line);border-radius:9px;padding:13px 15px;
183
- font-family:var(--mono);font-size:13.5px;color:var(--paper-pure);
184
  overflow-x:auto;white-space:nowrap;
 
185
  }
186
- .code .pmt{color:var(--leaf);flex:none}
187
  .code code{flex:1}
188
  .copy{
189
  flex:none;font-family:var(--mono);font-size:12px;color:var(--paper-dim);
190
  border:1px solid var(--line-strong);background:none;border-radius:6px;
191
  padding:6px 11px;cursor:pointer;transition:all .2s
192
  }
193
- .copy:hover{color:var(--ink);background:var(--signal);border-color:var(--signal)}
194
- .copy.done{color:var(--ink);background:var(--leaf);border-color:var(--leaf)}
 
195
  .install-note{font-size:13.5px;color:var(--paper-dim);margin-top:22px;font-family:var(--mono);
196
  display:flex;gap:10px;align-items:flex-start}
197
  .install-note .b{color:var(--leaf);flex:none}
@@ -205,7 +213,7 @@
205
  padding:7px 13px;cursor:pointer;transition:all .18s;
206
  }
207
  .agent-btn:hover{color:var(--paper-pure);border-color:var(--paper-dim)}
208
- .agent-btn.active{background:var(--leaf);color:var(--ink);border-color:var(--leaf)}
209
 
210
  /* ---------- explorer ---------- */
211
  .explore-actions{margin-top:28px;text-align:center}
@@ -215,22 +223,22 @@
215
  background:linear-gradient(180deg,var(--panel),var(--surface));margin-bottom:28px;padding:24px 26px 20px}
216
  .growth-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap;margin-bottom:18px}
217
  .growth-label{font-family:var(--mono);font-size:12.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--paper-dim)}
218
- .growth-total{font-family:var(--display);font-size:38px;font-weight:500;letter-spacing:-.02em;color:var(--signal-soft);line-height:1.1;margin-top:6px}
219
  .growth-unit{font-family:var(--mono);font-size:14px;color:var(--paper-dim);margin-left:8px;letter-spacing:0}
220
  .growth-range{display:flex;gap:6px}
221
  .rbtn{font-family:var(--mono);font-size:12.5px;color:var(--paper-dim);border:1px solid var(--line-strong);
222
  background:none;border-radius:7px;padding:6px 13px;cursor:pointer;transition:all .18s}
223
  .rbtn:hover{color:var(--paper-pure);border-color:var(--paper-dim)}
224
- .rbtn.active{background:var(--paper-pure);color:var(--ink);border-color:var(--paper-pure)}
225
  .growth-chart{position:relative;width:100%;height:300px}
226
  .growth-chart svg{width:100%;height:100%;display:block;overflow:visible}
227
  .growth-tip{position:absolute;pointer-events:none;opacity:0;transform:translate(-50%,-100%);
228
- background:var(--ink);border:1px solid var(--panel-edge);border-radius:8px;padding:8px 11px;
229
- font-family:var(--mono);font-size:12px;white-space:nowrap;transition:opacity .15s;color:var(--paper-pure);z-index:3}
230
- .growth-tip .tipn{color:var(--signal-soft);font-weight:500}
231
- .growth-tip .tipd{color:var(--paper-dim);font-size:11px;margin-top:2px}
232
  .growth-axis{display:flex;justify-content:space-between;font-family:var(--mono);font-size:11.5px;
233
- color:var(--panel-edge);margin-top:10px;letter-spacing:.03em}
234
  .final{text-align:center;padding:100px 0 90px}
235
  .final h2{margin:0 auto 22px;max-width:18ch}
236
  .final .cta-row{justify-content:center}
@@ -523,8 +531,8 @@
523
  // gradient + defs
524
  const defs=document.createElementNS(NS,'defs');
525
  defs.innerHTML=`<linearGradient id="gfill" x1="0" y1="0" x2="0" y2="1">
526
- <stop offset="0%" stop-color="rgba(232,116,59,0.34)"/>
527
- <stop offset="100%" stop-color="rgba(232,116,59,0)"/></linearGradient>`;
528
  svg.appendChild(defs);
529
  // gridlines
530
  for(let g=0;g<=3;g++){
@@ -532,7 +540,7 @@
532
  const ln=document.createElementNS(NS,'line');
533
  ln.setAttribute('x1',PAD);ln.setAttribute('x2',VW-PAD);
534
  ln.setAttribute('y1',y);ln.setAttribute('y2',y);
535
- ln.setAttribute('stroke','rgba(243,236,224,0.07)');ln.setAttribute('stroke-width','1');
536
  svg.appendChild(ln);
537
  }
538
  // build path
@@ -555,8 +563,8 @@
555
  area.style.opacity=0;area.style.transition='opacity 1s ease-out .3s';requestAnimationFrame(()=>area.style.opacity=1);
556
  // endpoint dot — sits exactly on the final line point
557
  const dot=document.createElementNS(NS,'circle');
558
- dot.setAttribute('cx',X(xs)-1.5);dot.setAttribute('cy',Y(maxN));dot.setAttribute('r','4');
559
- dot.setAttribute('fill','var(--signal)');dot.setAttribute('stroke','var(--surface)');dot.setAttribute('stroke-width','2');
560
  dot.setAttribute('vector-effect','non-scaling-stroke');
561
  svg.appendChild(dot);
562
  // axis labels
 
6
  <title>Trace Commons · An open dataset for code agent traces</title>
7
  <meta name="description" content="Donate your coding-agent sessions, anonymized on your own machine, to one open public dataset anyone can train on. The data that trains coding models should belong to everyone.">
8
  <link rel="canonical" href="https://trace-commons-web.hf.space/">
9
+ <meta name="theme-color" content="#ffffff">
10
  <!-- Open Graph / social preview -->
11
  <meta property="og:type" content="website">
12
  <meta property="og:site_name" content="Trace Commons">
 
20
  <meta name="twitter:title" content="Trace Commons · An open commons for code agent traces">
21
  <meta name="twitter:description" content="The data that trains coding models should belong to everyone. Donate your coding-agent sessions to one open public dataset anyone can train on.">
22
  <meta name="twitter:image" content="https://trace-commons-web.hf.space/og.png">
23
+ <link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect x='1.5' y='1.5' width='21' height='21' rx='4' fill='%23ffffff' stroke='%232563eb' stroke-width='1.5'/%3E%3Cline x1='6' y1='9' x2='18' y2='9' stroke='%232563eb' stroke-width='1.6'/%3E%3Cline x1='6' y1='12.5' x2='14.5' y2='12.5' stroke='%23f5b50c' stroke-width='1.6'/%3E%3Cline x1='6' y1='16' x2='16' y2='16' stroke='%230b1f3a' stroke-width='1.6'/%3E%3C/svg%3E">
24
  <link rel="preconnect" href="https://fonts.googleapis.com">
25
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
26
  <link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,500;9..144,600&family=Spline+Sans:wght@400;500;600&family=Spline+Sans+Mono:wght@400;500;600&display=swap" rel="stylesheet">
27
  <style>
28
  :root{
29
+ --ink:#0b1f3a; /* deep navy text on color + dark code blocks */
30
+ --surface:#ffffff; /* white page */
31
+ --panel:#eef4ff; /* faint blue panel */
32
+ --panel-edge:#cfe0fb; /* light blue border */
33
+ --paper-pure:#0b1f3a; /* primary text (navy) */
34
+ --paper-dim:#52607d; /* muted slate-blue secondary text */
35
+ --signal:#2563eb; /* the blueprimary actions & accents */
36
+ --signal-soft:#4b8bf5;/* lighter blue — hovers */
37
+ --gold:#f5b50c; /* the yellow accent */
38
+ --gold-soft:rgba(245,181,12,.34); /* yellow highlighter wash */
39
+ --leaf:#2f6fe0; /* secondary blue — small labels */
40
+ --line:rgba(11,31,58,0.10);
41
+ --line-strong:rgba(11,31,58,0.20);
42
  --mono:'Spline Sans Mono',ui-monospace,monospace;
43
  --sans:'Spline Sans',system-ui,sans-serif;
44
  --display:'Fraunces',Georgia,serif;
 
54
  overflow-x:hidden;
55
  }
56
  body{background:
57
+ radial-gradient(900px 500px at 82% -8%, rgba(37,99,235,0.07), transparent 60%),
58
+ radial-gradient(700px 500px at 5% 8%, rgba(245,181,12,0.10), transparent 55%),
59
  var(--surface);
60
  }
61
  .wrap{max-width:1080px;margin:0 auto;padding:0 28px}
62
  a{color:inherit}
63
+ ::selection{background:var(--gold);color:var(--ink)}
64
  :focus-visible{outline:2px solid var(--signal-soft);outline-offset:3px;border-radius:5px}
65
 
66
  /* ---------- nav ---------- */
 
78
  .brand .mark::before{content:"";position:absolute;inset:5px 4px;
79
  background:
80
  linear-gradient(var(--signal),var(--signal)) 0 0/100% 1.5px no-repeat,
81
+ linear-gradient(var(--gold),var(--gold)) 0 4px/70% 1.5px no-repeat,
82
  linear-gradient(var(--paper-dim),var(--paper-dim)) 0 8px/85% 1.5px no-repeat;
83
  }
84
  .nav-right{display:flex;gap:18px;align-items:center}
 
101
  letter-spacing:-0.02em;margin-bottom:26px;
102
  font-optical-sizing:auto;text-wrap:balance;
103
  }
104
+ h1 em{font-style:italic;color:var(--signal);
105
+ background:linear-gradient(180deg,transparent 62%,var(--gold-soft) 62%);
106
+ padding:0 .04em;border-radius:2px}
107
  .lede{
108
  font-size:clamp(18px,2.1vw,21px);line-height:1.55;
109
  color:var(--paper-dim);max-width:720px;margin-bottom:38px;
 
116
  display:inline-flex;align-items:center;gap:10px;cursor:pointer;
117
  border:1px solid transparent;transition:transform .15s, background .2s, border-color .2s;
118
  }
119
+ .btn-primary{background:var(--signal);color:#fff}
120
  .btn-primary:hover{transform:translateY(-2px);background:var(--signal-soft)}
121
  .btn-ghost{border-color:var(--line-strong);color:var(--paper-pure)}
122
  .btn-ghost:hover{border-color:var(--paper-dim);transform:translateY(-2px)}
 
133
  .hero-code .copy{font-size:13px;padding:8px 15px}
134
  .oss-pledge{
135
  display:flex;gap:11px;align-items:flex-start;margin-top:22px;max-width:520px;
136
+ border:1px solid rgba(245,181,12,.45);border-radius:10px;padding:13px 15px;
137
+ background:rgba(245,181,12,.10);font-size:14px;line-height:1.5;color:var(--paper-pure);
138
  }
139
+ .oss-pledge .oss-ic{color:#c8920a;flex:none;font-size:12px;margin-top:3px}
140
 
141
  .hero-how{margin-top:16px;max-width:560px;font-size:15px;line-height:1.6;color:var(--paper-dim)}
142
+ .hero-how code{font-family:var(--mono);font-size:13px;color:var(--signal);
143
+ background:rgba(37,99,235,.08);border:1px solid rgba(37,99,235,.18);border-radius:5px;padding:1px 6px}
144
 
145
  /* ---------- section scaffold ---------- */
146
  section{padding:90px 0;position:relative}
 
149
  .sec-label .ix{color:var(--panel-edge)}
150
  h2{font-family:var(--display);font-weight:400;font-size:clamp(30px,4.4vw,46px);
151
  line-height:1.08;letter-spacing:-.018em;margin-bottom:18px;max-width:20ch;text-wrap:balance}
152
+ h2 em{font-style:italic;color:var(--signal);
153
+ background:linear-gradient(180deg,transparent 62%,var(--gold-soft) 62%);
154
+ padding:0 .04em;border-radius:2px}
155
  .sec-intro{color:var(--paper-dim);max-width:560px;font-size:18px;margin-bottom:46px}
156
 
157
  /* ---------- why / argument ---------- */
 
159
  @media(max-width:860px){.why-grid{grid-template-columns:1fr}}
160
  .card{
161
  border:1px solid var(--line);border-radius:13px;padding:28px 26px;
162
+ background:linear-gradient(180deg,rgba(37,99,235,.05),transparent);
163
  transition:border-color .25s,transform .25s;
164
  }
165
  .card:hover{border-color:var(--line-strong);transform:translateY(-3px)}
166
  .card .ic{width:38px;height:38px;border-radius:9px;border:1px solid var(--panel-edge);
167
+ display:grid;place-items:center;margin-bottom:20px;color:var(--signal);font-family:var(--mono)}
168
  .card h3{font-family:var(--display);font-size:22px;font-weight:500;margin-bottom:10px;letter-spacing:-.01em}
169
  .card p{font-size:15.5px;color:var(--paper-dim);line-height:1.55}
170
+ .inline-link{color:var(--signal);text-decoration:none;border-bottom:1px solid rgba(37,99,235,.4);transition:border-color .2s}
171
+ .inline-link:hover{border-color:var(--signal)}
172
 
173
  /* ---------- install ---------- */
174
  .install-shell{
 
178
  .panel-body{padding:30px 30px 34px}
179
  .step{display:flex;gap:18px;padding:16px 0;border-bottom:1px solid var(--line)}
180
  .step:last-child{border-bottom:none}
181
+ .step .num{font-family:var(--mono);color:var(--signal);font-size:14px;flex:none;width:26px;
182
  border:1px solid var(--panel-edge);height:26px;border-radius:6px;display:grid;place-items:center}
183
  .step .body{flex:1}
184
  .step .body h4{font-size:16px;font-weight:600;margin-bottom:9px}
185
  .step .body p{font-size:14.5px;color:var(--paper-dim);margin-bottom:12px}
186
  .code{
187
  display:flex;align-items:center;gap:14px;background:var(--ink);
188
+ border:1px solid var(--ink);border-radius:9px;padding:13px 15px;
189
+ font-family:var(--mono);font-size:13.5px;color:#e9f1ff;
190
  overflow-x:auto;white-space:nowrap;
191
+ box-shadow:0 14px 34px -22px rgba(11,31,58,.55);
192
  }
193
+ .code .pmt{color:var(--gold);flex:none}
194
  .code code{flex:1}
195
  .copy{
196
  flex:none;font-family:var(--mono);font-size:12px;color:var(--paper-dim);
197
  border:1px solid var(--line-strong);background:none;border-radius:6px;
198
  padding:6px 11px;cursor:pointer;transition:all .2s
199
  }
200
+ .code .copy{color:#9fb2d6;border-color:rgba(255,255,255,.22)}
201
+ .copy:hover{color:var(--ink);background:var(--gold);border-color:var(--gold)}
202
+ .copy.done{color:#fff;background:var(--signal);border-color:var(--signal)}
203
  .install-note{font-size:13.5px;color:var(--paper-dim);margin-top:22px;font-family:var(--mono);
204
  display:flex;gap:10px;align-items:flex-start}
205
  .install-note .b{color:var(--leaf);flex:none}
 
213
  padding:7px 13px;cursor:pointer;transition:all .18s;
214
  }
215
  .agent-btn:hover{color:var(--paper-pure);border-color:var(--paper-dim)}
216
+ .agent-btn.active{background:var(--gold);color:var(--ink);border-color:var(--gold)}
217
 
218
  /* ---------- explorer ---------- */
219
  .explore-actions{margin-top:28px;text-align:center}
 
223
  background:linear-gradient(180deg,var(--panel),var(--surface));margin-bottom:28px;padding:24px 26px 20px}
224
  .growth-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap;margin-bottom:18px}
225
  .growth-label{font-family:var(--mono);font-size:12.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--paper-dim)}
226
+ .growth-total{font-family:var(--display);font-size:38px;font-weight:500;letter-spacing:-.02em;color:var(--signal);line-height:1.1;margin-top:6px}
227
  .growth-unit{font-family:var(--mono);font-size:14px;color:var(--paper-dim);margin-left:8px;letter-spacing:0}
228
  .growth-range{display:flex;gap:6px}
229
  .rbtn{font-family:var(--mono);font-size:12.5px;color:var(--paper-dim);border:1px solid var(--line-strong);
230
  background:none;border-radius:7px;padding:6px 13px;cursor:pointer;transition:all .18s}
231
  .rbtn:hover{color:var(--paper-pure);border-color:var(--paper-dim)}
232
+ .rbtn.active{background:var(--gold);color:var(--ink);border-color:var(--gold)}
233
  .growth-chart{position:relative;width:100%;height:300px}
234
  .growth-chart svg{width:100%;height:100%;display:block;overflow:visible}
235
  .growth-tip{position:absolute;pointer-events:none;opacity:0;transform:translate(-50%,-100%);
236
+ background:var(--ink);border:1px solid rgba(255,255,255,.18);border-radius:8px;padding:8px 11px;
237
+ font-family:var(--mono);font-size:12px;white-space:nowrap;transition:opacity .15s;color:#e9f1ff;z-index:3}
238
+ .growth-tip .tipn{color:var(--gold);font-weight:500}
239
+ .growth-tip .tipd{color:#9fb2d6;font-size:11px;margin-top:2px}
240
  .growth-axis{display:flex;justify-content:space-between;font-family:var(--mono);font-size:11.5px;
241
+ color:var(--paper-dim);margin-top:10px;letter-spacing:.03em}
242
  .final{text-align:center;padding:100px 0 90px}
243
  .final h2{margin:0 auto 22px;max-width:18ch}
244
  .final .cta-row{justify-content:center}
 
531
  // gradient + defs
532
  const defs=document.createElementNS(NS,'defs');
533
  defs.innerHTML=`<linearGradient id="gfill" x1="0" y1="0" x2="0" y2="1">
534
+ <stop offset="0%" stop-color="rgba(245,181,12,0.34)"/>
535
+ <stop offset="100%" stop-color="rgba(245,181,12,0)"/></linearGradient>`;
536
  svg.appendChild(defs);
537
  // gridlines
538
  for(let g=0;g<=3;g++){
 
540
  const ln=document.createElementNS(NS,'line');
541
  ln.setAttribute('x1',PAD);ln.setAttribute('x2',VW-PAD);
542
  ln.setAttribute('y1',y);ln.setAttribute('y2',y);
543
+ ln.setAttribute('stroke','rgba(11,31,58,0.08)');ln.setAttribute('stroke-width','1');
544
  svg.appendChild(ln);
545
  }
546
  // build path
 
563
  area.style.opacity=0;area.style.transition='opacity 1s ease-out .3s';requestAnimationFrame(()=>area.style.opacity=1);
564
  // endpoint dot — sits exactly on the final line point
565
  const dot=document.createElementNS(NS,'circle');
566
+ dot.setAttribute('cx',X(xs)-1.5);dot.setAttribute('cy',Y(maxN));dot.setAttribute('r','4.5');
567
+ dot.setAttribute('fill','var(--gold)');dot.setAttribute('stroke','var(--surface)');dot.setAttribute('stroke-width','2');
568
  dot.setAttribute('vector-effect','non-scaling-stroke');
569
  svg.appendChild(dot);
570
  // axis labels