Spaces:
Running
Running
Deploy redesigned landing page (light theme)
Browse files- 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="#
|
| 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='%
|
| 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:#
|
| 30 |
-
--surface:#
|
| 31 |
-
--panel:#
|
| 32 |
-
--panel-edge:#
|
| 33 |
-
--paper-pure:#
|
| 34 |
-
--paper-dim:#
|
| 35 |
-
--signal:#
|
| 36 |
-
--signal-soft:#
|
| 37 |
-
--
|
| 38 |
-
--
|
| 39 |
-
--
|
|
|
|
|
|
|
| 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(
|
| 56 |
-
radial-gradient(700px 500px at 5% 8%, rgba(
|
| 57 |
var(--surface);
|
| 58 |
}
|
| 59 |
.wrap{max-width:1080px;margin:0 auto;padding:0 28px}
|
| 60 |
a{color:inherit}
|
| 61 |
-
::selection{background:var(--
|
| 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(--
|
| 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
|
|
|
|
|
|
|
| 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:
|
| 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(
|
| 133 |
-
background:rgba(
|
| 134 |
}
|
| 135 |
-
.oss-pledge .oss-ic{color:
|
| 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(--
|
| 139 |
-
background:rgba(
|
| 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
|
|
|
|
|
|
|
| 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(
|
| 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
|
| 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
|
| 165 |
-
.inline-link:hover{border-color:var(--signal
|
| 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
|
| 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(--
|
| 183 |
-
font-family:var(--mono);font-size:13.5px;color:
|
| 184 |
overflow-x:auto;white-space:nowrap;
|
|
|
|
| 185 |
}
|
| 186 |
-
.code .pmt{color:var(--
|
| 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
|
| 194 |
-
.copy
|
|
|
|
| 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(--
|
| 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
|
| 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(--
|
| 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
|
| 229 |
-
font-family:var(--mono);font-size:12px;white-space:nowrap;transition:opacity .15s;color:
|
| 230 |
-
.growth-tip .tipn{color:var(--
|
| 231 |
-
.growth-tip .tipd{color:
|
| 232 |
.growth-axis{display:flex;justify-content:space-between;font-family:var(--mono);font-size:11.5px;
|
| 233 |
-
color:var(--
|
| 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(
|
| 527 |
-
<stop offset="100%" stop-color="rgba(
|
| 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(
|
| 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(--
|
| 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 blue — primary 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
|