File size: 1,512 Bytes
0e24aff
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
interface HeroStep {
  index: string;
  title: string;
  body: string;
  accent: string;
}

const STEPS: HeroStep[] = [
  {
    index: "01",
    title: "Observe",
    body: "We sample a noisy time series from a known physical system (free fall, pendulum, damped spring, …). The agent never sees the true equation.",
    accent: "text-accentBlue",
  },
  {
    index: "02",
    title: "Hypothesise",
    body: "Each turn the agent proposes an ODE in a small SymPy grammar (e.g. d2y/dt2 = -9.81 + 0.05 * vy**2).",
    accent: "text-primary",
  },
  {
    index: "03",
    title: "Verify",
    body: "We integrate the proposal forward and score it against the observation by per-step R². No LLM-as-judge in the reward loop.",
    accent: "text-accentGreen",
  },
];

export function HeroIntro(): JSX.Element {
  return (
    <section
      aria-label="How PhysiX-Live works"
      className="grid grid-cols-1 gap-3 md:grid-cols-3"
    >
      {STEPS.map((step) => (
        <article
          key={step.index}
          className="panel flex flex-col gap-2"
        >
          <div className="flex items-baseline gap-3">
            <span className={`font-mono text-sm font-semibold ${step.accent}`}>
              {step.index}
            </span>
            <h3 className="text-base font-semibold text-textPrimary">
              {step.title}
            </h3>
          </div>
          <p className="text-sm leading-relaxed text-textMuted">{step.body}</p>
        </article>
      ))}
    </section>
  );
}