Hunter26666666 commited on
Commit
f371c17
·
verified ·
1 Parent(s): 2e6a0cf

Design: immersive OpenSAE organization card and interactive research homepage

Browse files
Files changed (4) hide show
  1. .gitattributes +1 -0
  2. README.md +28 -79
  3. assets/opensae_cover.gif +3 -0
  4. index.html +419 -57
.gitattributes CHANGED
@@ -34,3 +34,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
  assets/opensae_banner.png filter=lfs diff=lfs merge=lfs -text
 
 
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
  assets/opensae_banner.png filter=lfs diff=lfs merge=lfs -text
37
+ assets/opensae_cover.gif filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -1,112 +1,61 @@
1
  ---
2
  title: OpenSAE
3
  emoji: 🧱
4
- colorFrom: blue
5
- colorTo: indigo
6
  sdk: static
7
  app_file: index.html
8
- short_description: Open research for LLM evaluation.
9
  ---
10
 
11
  <div align="center">
12
- <img src="https://huggingface.co/spaces/OpenSAE/README/resolve/main/assets/opensae_banner.png" alt="OpenSAE" width="720" />
 
 
13
  </div>
14
 
15
  <div align="center">
16
 
17
- # OpenSAE
18
 
19
- ### Open research infrastructure for mechanistic interpretability, SAE analysis, and large-scale LLM evaluation
20
 
21
- [![GitHub Organization](https://img.shields.io/badge/GitHub-OpenSAE-111827?logo=github)](https://github.com/OpenSAE)
22
- [![SAEBase Demo](https://img.shields.io/badge/Space-SAEBase%20Research%20Lab-2563eb)](https://huggingface.co/spaces/OpenSAE/SAEBase)
23
- [![Evaluation Dataset](https://img.shields.io/badge/Dataset-SAEBase--Evaluation-0f766e)](https://huggingface.co/datasets/OpenSAE/SAEBase-Evaluation)
24
 
25
  </div>
26
 
27
  ---
28
 
29
- ## From learned features to testable explanations
30
 
31
- OpenSAE develops **open methods, tools, and evaluation infrastructure** for studying how neural networks represent information and how internal components shape model behavior.
32
 
33
- We focus on **sparse autoencoders, feature interventions, behavioral evaluation, and reproducible interpretability workflows**.
34
 
35
- ---
36
-
37
- ## 🧱 Flagship infrastructure
38
-
39
- # SAEBase Research Lab
40
-
41
- **[Launch the interactive lab →](https://huggingface.co/spaces/OpenSAE/SAEBase)**
42
-
43
- SAEBase provides reusable infrastructure for:
44
-
45
- - activation capture and caching
46
- - SAE feature interventions
47
- - benchmarking and controlled evaluation
48
- - reliability analysis and traceable reports
49
- - research workflows for mechanistic interpretability
50
-
51
- ### At a glance
52
-
53
- | Scope | Current release |
54
- | --- | --- |
55
- | **Software** | [SAEBase v0.3.0](https://github.com/OpenSAE/SAEBase/releases/tag/v0.3.0) |
56
- | **Evaluation dataset** | [SAEBase-Evaluation](https://huggingface.co/datasets/OpenSAE/SAEBase-Evaluation) |
57
- | **Verified coverage** | **18** model–SAE configurations |
58
- | **Verified sites** | **48** model/layer sites |
59
- | **Evidence** | Linked reports and traceable evaluation records |
60
-
61
- ### Quick links
62
-
63
- - **[Interactive 5-minute walkthrough](https://huggingface.co/spaces/OpenSAE/SAEBase)**
64
- - **[GitHub repository](https://github.com/OpenSAE/SAEBase)**
65
- - **[Official release v0.3.0](https://github.com/OpenSAE/SAEBase/releases/tag/v0.3.0)**
66
- - **[Evaluation dataset](https://huggingface.co/datasets/OpenSAE/SAEBase-Evaluation)**
67
-
68
- ---
69
 
70
- ## 🔬 Research methods
71
 
72
- OpenSAE also develops research methods for understanding feature interactions, representation changes, and input dependencies.
73
 
74
- | Project | Focus | Explore |
75
- | --- | --- | --- |
76
- | **SAR** | Behavioral compositionality of sparse autoencoder representations | [Project & tutorial](https://github.com/OpenSAE/SAE-Behavioral-Compositionality) |
77
- | **RSS** | Representation redistribution across prompt transformations | [Project & tutorial](https://github.com/OpenSAE/Redistribution-Sensitivity-Score) |
78
- | **Input Localization** | Input dependencies of SAE feature activations | [Project & tutorial](https://github.com/OpenSAE/SAE-Input-Localization) |
79
 
80
  ---
81
 
82
- ## 🚀 Why OpenSAE
83
 
84
- - **Research-first**: built for mechanistic interpretability research rather than generic model hosting
85
- - **Reproducible**: evaluation records are traceable and linked to original reports
86
- - **Practical**: supports real workflows for interventions, benchmarking, and analysis
87
- - **Open**: code, tutorials, and research artifacts are publicly available
88
 
89
- ---
90
-
91
- ## 🌍 Open science
92
-
93
- We share **research code, protocols, tutorials, and evaluation records** to support open and rigorous work on neural network understanding.
94
-
95
- External pretrained model and SAE weights remain with their respective publishers.
96
-
97
- ---
98
-
99
- ## 🔗 Explore OpenSAE
100
 
101
- - **[OpenSAE GitHub organization](https://github.com/OpenSAE)**
102
- - **[SAEBase Research Lab](https://huggingface.co/spaces/OpenSAE/SAEBase)**
103
- - **[SAEBase Evaluation Dataset](https://huggingface.co/datasets/OpenSAE/SAEBase-Evaluation)**
104
- - **[Contributing guide](https://github.com/OpenSAE/SAEBase/blob/main/CONTRIBUTING.md)**
105
 
106
- ---
107
 
108
- ## Contact
109
-
110
- **Haotian Ma**
111
- University of Wisconsin–Madison
112
- Email: **hma232@wisc.edu**
 
1
  ---
2
  title: OpenSAE
3
  emoji: 🧱
4
+ colorFrom: gray
5
+ colorTo: blue
6
  sdk: static
7
  app_file: index.html
8
+ short_description: Open foundations for mechanistic interpretability.
9
  ---
10
 
11
  <div align="center">
12
+ <a href="https://huggingface.co/spaces/OpenSAE/README" title="Enter the OpenSAE interactive research homepage">
13
+ <img src="https://huggingface.co/spaces/OpenSAE/README/resolve/main/assets/opensae_cover.gif" alt="OpenSAE — From learned features to testable explanations" width="100%" />
14
+ </a>
15
  </div>
16
 
17
  <div align="center">
18
 
19
+ ### FROM LEARNED FEATURES TO TESTABLE EXPLANATIONS
20
 
21
+ Open research methods and infrastructure for understanding how neural networks represent information, how their features interact, and how those interactions influence model behavior.
22
 
23
+ **[↗ EXPLORE OUR INTERACTIVE RESEARCH HUB](https://huggingface.co/spaces/OpenSAE/README)** &nbsp; · &nbsp; **[SAEBASE RESEARCH LAB](https://huggingface.co/spaces/OpenSAE/SAEBase)**
 
 
24
 
25
  </div>
26
 
27
  ---
28
 
29
+ ### Research infrastructure
30
 
31
+ **[🧱 SAEBase — Research infrastructure for sparse autoencoders](https://huggingface.co/spaces/OpenSAE/SAEBase)**
32
 
33
+ Capture and reuse model activations, intervene on SAE features, evaluate downstream behavior, and audit experiments with verifiable source records.
34
 
35
+ | **18 configurations** | **48 evaluated layer sites** | **270M–9B models** |
36
+ | :---: | :---: | :---: |
37
+ | Model + SAE pairs | Checkpoint, benchmark and reliability checks | Selected model families |
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
 
39
+ **[Explore SAEBase ↗](https://huggingface.co/spaces/OpenSAE/SAEBase)** · [Browse evaluation data](https://huggingface.co/datasets/OpenSAE/SAEBase-Evaluation) · [GitHub source](https://github.com/OpenSAE/SAEBase) · [v0.3.0 release](https://github.com/OpenSAE/SAEBase/releases/tag/v0.3.0)
40
 
41
+ ### Research directions
42
 
43
+ | Research | Question | Explore |
44
+ | :--- | :--- | :--- |
45
+ | **🧩 Behavioral Compositionality (SAR)** | How do SAE features combine to influence downstream behavior? | [Project and tutorial ↗](https://github.com/OpenSAE/SAE-Behavioral-Compositionality) |
46
+ | **🔀 Representation Redistribution (RSS)** | How does feature activity change across prompt presentations? | [Project and tutorial ↗](https://github.com/OpenSAE/Redistribution-Sensitivity-Score) |
47
+ | **🧭 Input Localization** | Which controlled inputs are needed to explain feature activations? | [Project and tutorial ↗](https://github.com/OpenSAE/SAE-Input-Localization) |
48
 
49
  ---
50
 
51
+ ### Built for open, reproducible research
52
 
53
+ We publish code, evaluation protocols, tutorials, and traceable experimental records. The SAEBase evaluation documents **engineering compatibility under controlled inputs**, not a universal ranking of interpretability or SAE quality. Pretrained model and SAE weights remain with their original publishers.
 
 
 
54
 
55
+ <div align="center">
 
 
 
 
 
 
 
 
 
 
56
 
57
+ **[GitHub](https://github.com/OpenSAE)** &nbsp; · &nbsp; **[Hugging Face Research Lab](https://huggingface.co/spaces/OpenSAE/SAEBase)** &nbsp; · &nbsp; **[Evaluation Dataset](https://huggingface.co/datasets/OpenSAE/SAEBase-Evaluation)** &nbsp; · &nbsp; **[Contribute](https://github.com/OpenSAE/SAEBase/blob/main/CONTRIBUTING.md)**
 
 
 
58
 
59
+ OpenSAE · Research and collaboration: **hma232@wisc.edu**
60
 
61
+ </div>
 
 
 
 
assets/opensae_cover.gif ADDED

Git LFS Details

  • SHA256: d704055df26d1f721ff53e6cf1577d7ddbeee65bd651198d2d6953c072d4be44
  • Pointer size: 131 Bytes
  • Size of remote file: 683 kB
index.html CHANGED
@@ -1,68 +1,430 @@
1
  <!doctype html>
2
  <html lang="en">
3
  <head>
4
- <meta charset="utf-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1">
6
- <meta name="theme-color" content="#f5f9fa">
7
- <meta name="description" content="OpenSAE builds open research infrastructure for mechanistic interpretability, feature interventions, and reliable evaluation.">
8
- <title>OpenSAE · Open Research Infrastructure</title>
 
 
 
 
9
  <style>
10
- :root { --ink: #17313d; --muted: #48616d; --line: #dce8e9; --teal: #087f78; --light: #eef8f6; }
11
- * { box-sizing: border-box; }
12
- body { margin: 0; background: #f6fafb; color: var(--ink); font: 15px/1.55 Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }
13
- a { color: var(--teal); }
14
- a:focus-visible { outline: 3px solid #169888; outline-offset: 3px; border-radius: 6px; }
15
- main { max-width: 880px; margin: 0 auto; padding: 12px 26px 28px; }
16
- .brand { text-align: center; padding: 3px 0 8px; }
17
- .brand img { width: min(360px, 80%); height: auto; display: block; margin: auto; object-fit: contain; }
18
- .eyebrow { font-size: 10px; color: #18786f; letter-spacing: .16em; font-weight: 800; text-transform: uppercase; margin: 11px 0 7px; }
19
- h1 { font-size: clamp(22px, 3.8vw, 31px); font-weight: 780; letter-spacing: -.035em; line-height: 1.16; margin: 0 0 9px; }
20
- .intro { color: var(--muted); max-width: 690px; margin: 0 0 20px; font-size: 14px; }
21
- .links { display: flex; gap: 10px; flex-wrap: wrap; margin-bottom: 20px; }
22
- .action { font-size: 12px; font-weight: 730; text-decoration: none; border: 1px solid #bbded7; padding: 10px 14px; border-radius: 9px; background: white; color: #176159; }
23
- .action.primary { background: #0b504d; border-color: #0b504d; color: #f1fffb; }
24
- .action:hover { box-shadow: 0 4px 16px #0d47451a; }
25
- h2 { font-size: 14px; letter-spacing: -.015em; margin: 18px 0 9px; }
26
- .cards { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 11px; }
27
- .card { background: white; border: 1px solid var(--line); border-radius: 12px; padding: 16px; display: block; text-decoration: none; color: var(--ink); transition: border-color .15s, transform .15s; }
28
- .card:hover { border-color: #5caca2; transform: translateY(-1px); }
29
- .card strong { display: block; font-size: 14px; margin-bottom: 5px; }
30
- .card span { color: var(--muted); display: block; font-size: 12px; line-height: 1.5; }
31
- .card.featured { border-color: #b8dcd5; background: linear-gradient(135deg, #f2fbf9, white); }
32
- .small-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 11px; }
33
- .small-grid .card strong { font-size: 13px; }
34
- .small-grid .card span { font-size: 11px; }
35
- footer { border-top: 1px solid var(--line); padding-top: 13px; margin-top: 23px; color: #617984; font-size: 12px; }
36
- footer a { text-decoration: none; font-weight: 700; }
37
- @media(max-width:620px) { main { padding: 12px 15px 25px; } .brand img { width: min(310px, 85%); } .cards, .small-grid { grid-template-columns: 1fr; } }
38
- @media(prefers-reduced-motion: reduce) { .card { transition: none; } .card:hover { transform: none; } }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  </style>
40
  </head>
41
  <body>
42
- <main>
43
- <div class="brand">
44
- <img src="https://huggingface.co/spaces/OpenSAE/README/resolve/main/assets/opensae_banner.png" alt="OpenSAE official logo" loading="eager">
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  </div>
46
- <div class="eyebrow">Open science · Mechanistic interpretability</div>
47
- <h1>From learned features to testable explanations.</h1>
48
- <p class="intro">OpenSAE builds open research methods and infrastructure to study neural representations, intervene on model behavior, and evaluate how reliably our measurements explain it.</p>
49
- <div class="links">
50
- <a class="action primary" href="https://huggingface.co/spaces/OpenSAE/SAEBase">Explore SAEBase ↗</a>
51
- <a class="action" href="https://huggingface.co/datasets/OpenSAE/SAEBase-Evaluation">Browse evaluation data ↗</a>
52
- <a class="action" href="https://github.com/OpenSAE">OpenSAE on GitHub ↗</a>
53
- </div>
54
- <h2>Research infrastructure</h2>
55
- <div class="cards">
56
- <a class="card featured" href="https://huggingface.co/spaces/OpenSAE/SAEBase"><strong>🧱 SAEBase Research Lab ↗</strong><span>Capture activations, intervene on SAE features, benchmark effects, and audit reliability.</span></a>
57
- <a class="card" href="https://huggingface.co/datasets/OpenSAE/SAEBase-Evaluation"><strong>▤ SAEBase Evaluation ↗</strong><span>Explore 18 model–SAE configurations and 48 verified model/layer sites with traceable reports.</span></a>
58
- </div>
59
- <h2>Research methods and tutorials</h2>
60
- <div class="small-grid">
61
- <a class="card" href="https://github.com/OpenSAE/SAE-Behavioral-Compositionality"><strong>🧩 SAR ↗</strong><span>How SAE features interact to shape downstream model behavior.</span></a>
62
- <a class="card" href="https://github.com/OpenSAE/Redistribution-Sensitivity-Score"><strong>🔀 RSS ↗</strong><span>How feature activity changes across prompt presentations.</span></a>
63
- <a class="card" href="https://github.com/OpenSAE/SAE-Input-Localization"><strong>🧭 Input Localization ↗</strong><span>Which input variables are needed to explain a feature's activation.</span></a>
64
- </div>
65
- <footer>Open research, reproducible evidence, shared tools. &nbsp; <a href="https://github.com/OpenSAE">Contribute ↗</a> &nbsp;·&nbsp; <a href="mailto:hma232@wisc.edu">Contact</a></footer>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
  </main>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  </body>
68
  </html>
 
1
  <!doctype html>
2
  <html lang="en">
3
  <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
6
+ <meta name="theme-color" content="#07121b" />
7
+ <meta name="description" content="OpenSAE develops open methods and research infrastructure for understanding neural representations, intervening on sparse autoencoder features, and evaluating their effects on model behavior." />
8
+ <meta property="og:type" content="website" />
9
+ <meta property="og:title" content="OpenSAE — From learned features to testable explanations" />
10
+ <meta property="og:description" content="Research infrastructure, open methods and reproducible evaluation for mechanistic interpretability." />
11
+ <meta property="og:image" content="https://huggingface.co/spaces/OpenSAE/README/resolve/main/assets/opensae_cover.gif" />
12
+ <title>OpenSAE — From learned features to testable explanations</title>
13
  <style>
14
+ :root {
15
+ color-scheme: dark;
16
+ --ink: #07121b;
17
+ --navy: #0c1c27;
18
+ --surface: #0d1d28;
19
+ --surface-2: #102630;
20
+ --line: rgba(175,225,226,.13);
21
+ --mint: #a7f7dd;
22
+ --mint2: #5fdfc7;
23
+ --gold: #ecc795;
24
+ --white: #eef9f5;
25
+ --muted: #a0b6b9;
26
+ --deepmuted: #6f9298;
27
+ --max: 1210px;
28
+ font-family: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont,"Segoe UI",Arial,sans-serif;
29
+ }
30
+ *{box-sizing:border-box}
31
+ html{scroll-behavior:smooth;scroll-padding-top:100px}
32
+ body{margin:0;background:var(--ink);color:var(--white);overflow-x:hidden;-webkit-font-smoothing:antialiased}
33
+ body::before{content:"";position:fixed;inset:0;z-index:-2;pointer-events:none;opacity:.55;background:radial-gradient(ellipse at 75% 6%,rgba(23,93,91,.28),transparent 46%),radial-gradient(ellipse at 5% 87%,rgba(14,48,65,.38),transparent 48%)}
34
+ body::after{content:"";position:fixed;inset:0;z-index:15;pointer-events:none;opacity:.025;background-image:url('data:image/svg+xml,%3Csvg viewBox=%220 0 160 160%22 xmlns=%22http://www.w3.org/2000/svg%22%3E%3Cfilter id=%22n%22%3E%3CfeTurbulence type=%22fractalNoise%22 baseFrequency=%22.7%22 numOctaves=%222%22 stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect width=%22100%25%22 height=%22100%25%22 filter=%22url(%23n)%22/%3E%3C/svg%3E')}
35
+ a{color:inherit;text-decoration:none}
36
+ button{font:inherit;cursor:pointer}
37
+ button,a{-webkit-tap-highlight-color:transparent}
38
+ :focus-visible{outline:2px solid var(--mint);outline-offset:5px}
39
+ .container{width:min(var(--max),calc(100% - 76px));margin-inline:auto}
40
+ .mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;letter-spacing:.1em;text-transform:uppercase}
41
+ .light{color:var(--mint)}
42
+ .masthead{position:sticky;top:0;z-index:20;backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);background:rgba(7,18,27,.83);border-bottom:1px solid rgba(179,229,221,.12)}
43
+ .nav-inner{min-height:78px;display:flex;align-items:center;justify-content:space-between;gap:24px}
44
+ .brand{display:inline-flex;gap:13px;align-items:center;font-size:21px;font-weight:740;letter-spacing:-.065em;white-space:nowrap}
45
+ .brand-emblem{width:36px;height:36px;display:grid;place-items:center;position:relative;border:1px solid rgba(118,233,208,.4);border-radius:11px;background:rgba(25,85,83,.19)}
46
+ .brand-emblem svg{width:25px;height:25px}
47
+ .brand small{font-weight:450;font-size:9px;letter-spacing:.2em;color:var(--deepmuted);display:block;margin-top:2px}
48
+ .nav-items{display:flex;align-items:center;gap:29px}
49
+ .nav-items>a{font-size:12px;color:#b7c8c9;font-weight:560;transition:color .18s}
50
+ .nav-items>a:hover{color:var(--mint)}
51
+ .nav-right{display:flex;align-items:center;gap:16px}
52
+ .nav-live{font-size:9px;letter-spacing:.16em;color:var(--mint);display:flex;align-items:center;gap:8px}
53
+ .pulse-dot{width:7px;height:7px;border-radius:50%;background:#80e6c4;box-shadow:0 0 0 5px rgba(94,223,193,.12);animation:pulse 2.8s ease-in-out infinite}
54
+ .nav-cta{border:1px solid rgba(131,234,209,.35);background:rgba(85,199,179,.09);color:#d8fcf0;padding:11px 16px;border-radius:6px;font-size:11px;letter-spacing:.025em;font-weight:680;transition:background .2s,transform .2s}
55
+ .nav-cta:hover{background:rgba(85,199,179,.2);transform:translateY(-1px)}
56
+ .menu-toggle{display:none;align-items:center;justify-content:center;background:transparent;color:var(--white);border:1px solid var(--line);width:40px;height:40px;border-radius:6px}
57
+ .hero{position:relative;min-height:750px;display:flex;align-items:center;isolation:isolate;padding:88px 0 110px;overflow:hidden}
58
+ .hero::before{content:"";position:absolute;inset:0;pointer-events:none;z-index:-1;background:linear-gradient(90deg,rgba(7,18,27,1) 1%,rgba(7,18,27,.93) 37%,transparent 78%),radial-gradient(ellipse at 79% 37%,rgba(15,130,120,.22),transparent 49%)}
59
+ .hero-grid{position:absolute;inset:0;z-index:-2;opacity:.28;mask-image:linear-gradient(90deg,transparent,#000 45%);background-image:linear-gradient(rgba(113,204,194,.1) 1px,transparent 1px),linear-gradient(90deg,rgba(113,204,194,.1) 1px,transparent 1px);background-size:78px 78px;transform:perspective(850px) rotateX(13deg) scale(1.22);transform-origin:75% 45%}
60
+ #network{position:absolute;inset:0;z-index:-1;width:100%;height:100%;pointer-events:none;opacity:.55}
61
+ .hero-inner{display:grid;grid-template-columns:minmax(0,1.09fr) minmax(380px,.91fr);gap:26px;align-items:center;position:relative;z-index:2}
62
+ .eyebrow{display:flex;align-items:center;gap:14px;margin-bottom:33px;color:var(--mint2);font-weight:700;font-size:10px;letter-spacing:.22em}
63
+ .eyebrow .rule{width:29px;height:1px;background:var(--mint2)}
64
+ h1,h2,h3,p{margin-top:0}
65
+ .hero h1{font-size:clamp(53px,6.2vw,98px);letter-spacing:-.084em;line-height:1.02;margin-bottom:30px;font-weight:725;max-width:770px}
66
+ .hero h1 .soft{display:block;color:#e8f8f3}
67
+ .hero h1 .gradient{display:block;background:linear-gradient(98deg,var(--mint) 5%,#6fc9d0 43%,#debd91 96%);background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent;padding-bottom:7px}
68
+ .hero-text{max-width:575px}
69
+ .hero-text>p{color:#abbfc1;font-size:17px;line-height:1.83;max-width:520px;margin-bottom:37px}
70
+ .actions{display:flex;flex-wrap:wrap;gap:12px;align-items:center}
71
+ .btn{display:inline-flex;align-items:center;gap:15px;padding:17px 23px;font-size:12px;font-weight:720;border-radius:5px;transition:transform .2s,background .2s,box-shadow .2s;border:1px solid transparent;white-space:nowrap}
72
+ .btn:hover{transform:translateY(-3px)}
73
+ .btn-primary{color:#08221f;background:var(--mint);box-shadow:0 9px 35px rgba(56,229,185,.13)}
74
+ .btn-primary:hover{background:#c2ffeb;box-shadow:0 9px 45px rgba(56,229,185,.23)}
75
+ .btn-outline{border-color:rgba(202,242,234,.29);background:rgba(21,43,54,.32);color:#e8f3ee}
76
+ .btn-outline:hover{background:rgba(66,129,131,.15)}
77
+ .btn-arrow{font-size:15px;line-height:1}
78
+ .hero-caption{display:flex;gap:30px;align-items:center;margin-top:53px;flex-wrap:wrap}
79
+ .hero-caption span{color:#78999c;font-size:10px;letter-spacing:.11em}
80
+ .hero-caption b{color:#a5d0ca;font-size:10px;font-weight:550}
81
+ .hero-visual{height:515px;position:relative;display:grid;place-items:center;perspective:800px;contain:layout}
82
+ .scene-core{position:relative;width:395px;height:395px;animation:drift 9s ease-in-out infinite;filter:drop-shadow(0 0 24px rgba(52,214,184,.1))}
83
+ .orbital{position:absolute;border-radius:50%;left:50%;top:50%;transform:translate(-50%,-50%);border:1px solid rgba(107,218,199,.16);box-shadow:inset 0 0 16px rgba(21,140,121,.035)}
84
+ .orbit1{width:352px;height:352px;border-style:dashed;animation:spin 42s linear infinite}
85
+ .orbit2{width:255px;height:255px;border-color:rgba(105,231,199,.37);animation:reverse 25s linear infinite}
86
+ .orbit3{width:165px;height:165px;border-color:rgba(132,238,215,.19)}
87
+ .orbital::before,.orbital::after{content:"";position:absolute;border-radius:50%;width:7px;height:7px;top:50%;left:-4px;transform:translateY(-50%);background:var(--mint2);box-shadow:0 0 23px rgba(90,227,194,.5)}
88
+ .orbital::after{left:auto;right:-4px;background:var(--gold);width:5px;height:5px}
89
+ .orbit3::before,.orbit3::after{display:none}
90
+ .constellation{position:absolute;width:340px;height:340px;left:50%;top:50%;transform:translate(-50%,-50%);overflow:visible;filter:drop-shadow(0 0 8px rgba(89,218,192,.16))}
91
+ .constellation .stroke{stroke:#78dccc;stroke-width:1.6;fill:none;opacity:.58}
92
+ .constellation .thin{stroke:#71cabe;stroke-width:1;opacity:.23;stroke-dasharray:5 7}
93
+ .constellation .vertex{fill:#09272b;stroke:#b9ffea;stroke-width:1.4}
94
+ .constellation .vertex-glow{fill:#aaf3de;opacity:.93}
95
+ .core{position:absolute;left:50%;top:50%;width:90px;height:90px;border-radius:50%;transform:translate(-50%,-50%);display:flex;align-items:center;justify-content:center;background:radial-gradient(circle at 50% 48%,#153d41,#09212b 72%);border:1px solid rgba(176,255,227,.7);box-shadow:0 0 22px rgba(71,226,186,.34),0 0 90px rgba(71,226,186,.13)}
96
+ .core svg{width:40px;height:40px;filter:drop-shadow(0 0 10px rgba(160,248,220,.45))}
97
+ .float-note{position:absolute;z-index:5;border:1px solid rgba(146,227,213,.2);background:rgba(8,29,39,.78);backdrop-filter:blur(9px);border-radius:7px;padding:11px 14px;min-width:144px;box-shadow:0 20px 70px rgba(0,0,0,.12)}
98
+ .float-note small{display:block;color:#739fa4;font-size:9px;letter-spacing:.13em;margin-bottom:5px}
99
+ .float-note strong{font-size:12px;color:#c8f8e8;font-weight:610}
100
+ .note-top{top:65px;right:-12px;animation:bob 6s ease-in-out infinite}
101
+ .note-bottom{bottom:68px;left:-5px;animation:bob 7s 1s ease-in-out infinite}
102
+ .float-note .mini-dot{width:5px;height:5px;background:var(--mint2);display:inline-block;border-radius:50%;margin-right:5px}
103
+ .edge-id{position:absolute;color:#5c8084;right:0;bottom:2px;font-size:9px}
104
+ .ticker{border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:rgba(9,26,34,.79);overflow:hidden;position:relative}
105
+ .ticker-inner{display:flex;gap:70px;white-space:nowrap;width:max-content;padding:17px 0;animation:marquee 27s linear infinite}
106
+ .ticker-inner span{font-size:10px;font-weight:690;letter-spacing:.19em;color:#8eb6b3}
107
+ .ticker-inner span b{color:#7cdccc;font-weight:550;margin-right:12px}
108
+ .section{padding:118px 0;position:relative}
109
+ .section.alt{background:linear-gradient(180deg,rgba(13,31,40,.62),rgba(7,18,27,.5));border-block:1px solid rgba(160,227,219,.1)}
110
+ .section-title-group{display:flex;justify-content:space-between;gap:35px;align-items:end;margin-bottom:43px}
111
+ .eyeline{font-size:10px;color:var(--mint2);font-weight:740;letter-spacing:.21em;margin-bottom:19px}
112
+ h2{font-size:clamp(38px,4.5vw,61px);font-weight:705;letter-spacing:-.067em;line-height:1.12;margin-bottom:15px}
113
+ .section-title-group>p{max-width:385px;color:var(--muted);line-height:1.8;font-size:14px;margin:0 0 7px}
114
+ .research-strip{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));border:1px solid var(--line);border-radius:9px;overflow:hidden;background:linear-gradient(130deg,rgba(20,49,58,.8),rgba(11,27,39,.8))}
115
+ .stat-block{padding:34px 36px;position:relative}
116
+ .stat-block:not(:last-child){border-right:1px solid var(--line)}
117
+ .stat-block .stat-label{font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:#88acac}
118
+ .stat-block strong{font-size:clamp(46px,5vw,70px);letter-spacing:-.08em;line-height:1.13;display:block;margin:17px 0 8px;font-weight:660;color:var(--white)}
119
+ .stat-block strong .unit{font-size:25px;color:#8aaab0;letter-spacing:-.04em;margin-left:3px}
120
+ .stat-block p{margin:0;font-size:12px;line-height:1.7;color:var(--muted)}
121
+ .stat-corner{position:absolute;top:22px;right:26px;color:#477679;font-size:10px}
122
+ .feature-intro{display:grid;grid-template-columns:minmax(0,.83fr) minmax(0,1.17fr);align-items:center;gap:75px;margin:73px 0 37px}
123
+ .feature-intro h3{font-size:35px;letter-spacing:-.05em;line-height:1.2;margin:0 0 20px}
124
+ .feature-intro p{font-size:15px;line-height:1.9;color:var(--muted);margin-bottom:29px}
125
+ .link-arrow{font-size:13px;color:var(--mint);font-weight:690;display:inline-flex;gap:13px;align-items:center}
126
+ .link-arrow:hover{text-decoration:underline;text-underline-offset:6px}
127
+ .research-terminal{min-height:285px;border:1px solid rgba(131,227,208,.24);background:#081b24;border-radius:9px;overflow:hidden;box-shadow:0 18px 70px rgba(0,0,0,.15)}
128
+ .terminal-bar{height:44px;border-bottom:1px solid var(--line);display:flex;gap:7px;align-items:center;padding:0 20px;color:#759fa2;font-size:9px;letter-spacing:.1em}
129
+ .terminal-bar::before,.terminal-bar::after{content:"";width:7px;height:7px;border-radius:50%;background:#396568}
130
+ .terminal-bar::after{background:#55857d}
131
+ .terminal-bar small{margin-left:auto}
132
+ .terminal-body{padding:28px 30px}
133
+ .terminal-label{font-size:11px;color:var(--mint2);font-weight:690;letter-spacing:.11em;margin-bottom:23px}
134
+ .terminal-lines{display:grid;gap:16px}
135
+ .terminal-line{display:flex;gap:17px;align-items:center}
136
+ .terminal-line em{font-style:normal;color:#91aeb3;width:90px;font-size:10px}
137
+ .meter{height:7px;flex:1;border-radius:3px;background:#173542;overflow:hidden}
138
+ .meter span{display:block;height:100%;width:var(--level);background:linear-gradient(90deg,#257d80,#7ce5cb);border-radius:3px;animation:grow 1.7s ease both}
139
+ .terminal-foot{display:flex;justify-content:space-between;margin-top:24px;gap:16px;color:#64868c;font-size:9px;letter-spacing:.08em}
140
+ .capabilities{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:13px}
141
+ .cap-card{border:1px solid var(--line);padding:29px 23px 31px;min-height:243px;border-radius:8px;background:linear-gradient(175deg,rgba(16,40,50,.7),rgba(9,26,36,.6));transition:transform .25s,border-color .25s,background .25s}
142
+ .cap-card:hover{transform:translateY(-6px);border-color:rgba(98,216,191,.45);background:#103038}
143
+ .cap-icon{width:45px;height:45px;border:1px solid rgba(105,207,192,.22);background:rgba(38,132,122,.1);border-radius:8px;display:grid;place-items:center;color:var(--mint);margin-bottom:23px}
144
+ .cap-icon svg{width:23px;height:23px;stroke:currentColor;fill:none;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}
145
+ .cap-card h3{font-size:16px;letter-spacing:-.015em;margin-bottom:10px}
146
+ .cap-card p{font-size:12px;line-height:1.74;color:var(--muted);margin:0}
147
+ .workflow{display:grid;grid-template-columns:.75fr 1.25fr;gap:55px;align-items:center;margin-top:15px}
148
+ .stage-list{display:grid;gap:11px}
149
+ .stage-button{display:flex;gap:20px;align-items:center;width:100%;border:1px solid var(--line);border-radius:8px;padding:22px;background:rgba(12,29,39,.5);color:#afc2c5;text-align:left;transition:background .2s,border-color .2s}
150
+ .stage-button[aria-pressed="true"]{border-color:rgba(113,233,198,.56);background:rgba(26,79,73,.22);color:var(--white)}
151
+ .stage-button:hover{border-color:rgba(115,227,204,.33)}
152
+ .stage-number{color:#569e9b;font-size:11px}
153
+ .stage-button strong{font-size:17px;font-weight:680;letter-spacing:-.02em}
154
+ .stage-button small{display:block;font-size:11px;color:var(--muted);margin-top:6px;letter-spacing:.025em}
155
+ .workflow-screen{min-height:410px;border:1px solid rgba(108,213,192,.26);border-radius:11px;background:radial-gradient(ellipse at 70% 30%,rgba(22,88,87,.24),transparent 58%),#081b26;padding:36px 42px;position:relative;overflow:hidden}
156
+ .workflow-screen::before{content:"";position:absolute;inset:0;background-image:linear-gradient(rgba(120,213,193,.055) 1px,transparent 1px),linear-gradient(90deg,rgba(120,213,193,.055) 1px,transparent 1px);background-size:39px 39px;pointer-events:none}
157
+ .workflow-screen>*{position:relative}
158
+ .screen-heading{display:flex;justify-content:space-between;gap:12px;align-items:center;border-bottom:1px solid var(--line);padding-bottom:23px}
159
+ .screen-heading small{font-size:10px;color:#6e9ea1;letter-spacing:.14em}
160
+ .screen-badge{border:1px solid rgba(131,231,203,.25);border-radius:50px;color:var(--mint);padding:7px 10px;font-size:10px}
161
+ #stageTitle{font-size:30px;letter-spacing:-.06em;margin:33px 0 12px;font-weight:690}
162
+ #stageDescription{color:#a5bec1;font-size:13px;line-height:1.85;min-height:64px;max-width:480px}
163
+ .signal-bars{display:flex;align-items:end;gap:12px;height:97px;margin:20px 0 26px;border-bottom:1px solid var(--line)}
164
+ .signal-bars i{flex:1;display:block;height:var(--h);background:linear-gradient(0deg,#176966,#9af3d5);border-radius:3px 3px 0 0;opacity:.92;transition:height .45s ease}
165
+ .screen-foot{color:#6a9294;font-size:9px;letter-spacing:.11em;line-height:1.8}
166
+ .method-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:15px;margin-top:35px}
167
+ .method-card{padding:32px 30px;min-height:310px;border:1px solid var(--line);border-radius:9px;background:linear-gradient(157deg,rgba(18,48,58,.76),rgba(8,26,38,.7));position:relative;display:flex;flex-direction:column;overflow:hidden;transition:transform .25s,border-color .25s}
168
+ .method-card:hover{border-color:rgba(112,219,196,.45);transform:translateY(-7px)}
169
+ .method-card::before{content:"";position:absolute;right:-52px;top:-65px;width:185px;height:185px;border:1px solid rgba(91,219,191,.15);border-radius:50%;box-shadow:0 0 0 30px rgba(91,219,191,.04),0 0 0 75px rgba(91,219,191,.03);transition:transform .4s}
170
+ .method-card:hover::before{transform:scale(1.15)}
171
+ .method-card .method-meta{font-size:10px;letter-spacing:.17em;color:var(--mint2);margin-bottom:38px}
172
+ .method-card h3{font-size:25px;letter-spacing:-.045em;line-height:1.22;margin-bottom:13px}
173
+ .method-card p{font-size:13px;line-height:1.8;color:#a9c1c1;margin-bottom:25px}
174
+ .method-card .method-link{font-size:12px;color:var(--mint);font-weight:660;margin-top:auto}
175
+ .evidence-panel{border:1px solid rgba(138,233,208,.2);border-radius:12px;padding:51px 60px;display:grid;grid-template-columns:1.1fr .9fr;gap:50px;align-items:center;position:relative;overflow:hidden;background:radial-gradient(circle at 98% 14%,rgba(24,112,104,.23),transparent 44%),linear-gradient(110deg,#102a32,#0a1b27)}
176
+ .evidence-panel h2{font-size:clamp(33px,3.8vw,52px);margin:9px 0 17px}
177
+ .evidence-panel p{font-size:14px;line-height:1.9;color:#adcbca;margin-bottom:23px}
178
+ .evidence-list{display:grid;gap:14px}
179
+ .evidence-item{display:flex;align-items:center;gap:14px;color:#d2eae2;font-size:13px}
180
+ .evidence-item .evidence-dot{width:9px;height:9px;border-radius:3px;transform:rotate(45deg);background:#79d9bd;box-shadow:0 0 17px rgba(91,214,183,.22)}
181
+ .footer{padding:53px 0 45px;border-top:1px solid var(--line);background:#07121b}
182
+ .footer-inner{display:flex;align-items:center;justify-content:space-between;gap:30px}
183
+ .footer-name{font-size:27px;font-weight:760;letter-spacing:-.065em}
184
+ .footer-info{margin-top:8px;font-size:11px;color:#799b9f}
185
+ .footer-links{display:flex;flex-wrap:wrap;gap:25px;font-size:12px;color:#a8c6c6}
186
+ .footer-links a:hover{color:var(--mint)}
187
+ .copyright{margin-top:38px;border-top:1px solid rgba(128,194,182,.09);padding-top:24px;color:#53777e;font-size:10px;display:flex;justify-content:space-between;gap:12px}
188
+ .reveal{opacity:0;transform:translateY(28px);transition:opacity .75s ease,transform .75s cubic-bezier(.16,1,.3,1)}
189
+ .reveal.visible{opacity:1;transform:none}
190
+ .fade-in{animation:fadeup 1s both}
191
+ @keyframes pulse{50%{box-shadow:0 0 0 9px rgba(94,223,193,0)}}
192
+ @keyframes drift{50%{transform:translateY(-11px)}}
193
+ @keyframes bob{50%{transform:translateY(-9px)}}
194
+ @keyframes grow{from{width:0}to{width:var(--level)}}
195
+ @keyframes spin{to{transform:translate(-50%,-50%) rotate(360deg)}}
196
+ @keyframes reverse{to{transform:translate(-50%,-50%) rotate(-360deg)}}
197
+ @keyframes fadeup{from{opacity:0;transform:translateY(21px)}to{opacity:1;transform:none}}
198
+ @keyframes marquee{to{transform:translateX(-50%)}}
199
+ @media(min-width:1440px){.hero{min-height:790px}}
200
+ @media(max-width:1060px){.nav-items{gap:17px}.nav-items>a{font-size:11px}.hero-inner{grid-template-columns:1fr .77fr}.hero-visual{height:460px}.scene-core{transform:scale(.86);animation:none}.note-top{right:-35px}.note-bottom{left:-25px}.capabilities{grid-template-columns:repeat(2,1fr)}.feature-intro{gap:36px}}
201
+ @media(max-width:790px){
202
+ .container{width:min(100% - 38px,var(--max))}.nav-inner{min-height:69px}.nav-live{display:none}
203
+ .menu-toggle{display:flex}.nav-items{display:none;position:absolute;top:69px;left:0;right:0;padding:16px 23px 22px;background:rgba(6,22,32,.97);border-bottom:1px solid var(--line);flex-direction:column;gap:0;align-items:stretch}.nav-items[data-open="true"]{display:flex}.nav-items a{padding:12px;font-size:13px}
204
+ .hero{min-height:0;padding:83px 0 60px}.hero-inner{grid-template-columns:1fr;gap:0}.hero h1{font-size:clamp(54px,11vw,88px);max-width:600px}.hero-visual{height:370px}.scene-core{transform:scale(.79)}
205
+ .section{padding:78px 0}.section-title-group{display:block}.section-title-group>p{max-width:100%;margin-top:17px}.research-strip{grid-template-columns:1fr}.stat-block{padding:28px 32px}.stat-block:not(:last-child){border-right:0;border-bottom:1px solid var(--line)}
206
+ .feature-intro{grid-template-columns:1fr;margin:59px 0 24px}.capabilities{grid-template-columns:repeat(2,1fr)}.workflow{grid-template-columns:1fr;gap:23px}.method-grid{grid-template-columns:1fr}.method-card{min-height:260px}.evidence-panel{grid-template-columns:1fr;padding:35px 29px;gap:15px}
207
+ }
208
+ @media(max-width:510px){.brand{font-size:19px}.nav-cta{padding:10px 12px;font-size:10px}.container{width:calc(100% - 34px)}.hero{padding-top:67px}.hero h1{font-size:clamp(46px,12vw,64px)}.hero-text>p{font-size:15px}.eyebrow{font-size:9px;letter-spacing:.15em}.btn{width:100%;justify-content:space-between}.hero-caption{gap:14px}.hero-visual{height:300px;overflow:hidden}.scene-core{transform:scale(.65)}.float-note{min-width:115px;padding:9px}.float-note strong{font-size:10px}.note-top{right:2px;top:45px}.note-bottom{left:1px;bottom:44px}.section{padding:64px 0}.section-title-group{margin-bottom:27px}h2{font-size:36px}.capabilities{grid-template-columns:1fr}.cap-card{min-height:0}.terminal-body{padding:25px 19px}.terminal-line em{width:75px}.workflow-screen{padding:27px 23px;min-height:430px}.stage-button{padding:17px}.evidence-panel{padding:32px 20px}.footer-inner{display:block}.footer-links{margin-top:22px;gap:15px}.copyright{display:block;line-height:1.8}}
209
+ @media(max-width:380px){.nav-cta{display:none}.brand{gap:8px}.nav-inner{gap:8px}}
210
+ @media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.reveal{opacity:1;transform:none}}
211
  </style>
212
  </head>
213
  <body>
214
+ <header class="masthead">
215
+ <div class="container nav-inner">
216
+ <a class="brand" href="#top" aria-label="OpenSAE home">
217
+ <span class="brand-emblem" aria-hidden="true">
218
+ <svg viewBox="0 0 48 48"><g fill="none" stroke="#a7f7dd" stroke-width="3" stroke-linecap="round"><path d="M24 7V17M38.7 15.5L30.1 20.5M38.7 32.5L30.1 27.5M24 41V31M9.3 32.5L17.9 27.5M9.3 15.5L17.9 20.5"/></g><circle cx="24" cy="24" r="4" fill="#a7f7dd"/></svg>
219
+ </span>
220
+ <span>OpenSAE<small>RESEARCH INFRASTRUCTURE</small></span>
221
+ </a>
222
+ <nav class="nav-items" id="mainNav" aria-label="Main navigation">
223
+ <a href="#mission">Mission</a><a href="#infrastructure">Infrastructure</a><a href="#methods">Research</a><a href="#evidence">Open science</a>
224
+ </nav>
225
+ <div class="nav-right">
226
+ <span class="nav-live mono"><span class="pulse-dot"></span>OPEN RESEARCH</span>
227
+ <a class="nav-cta" href="https://github.com/OpenSAE" target="_blank" rel="noopener noreferrer">GitHub ↗</a>
228
+ <button type="button" class="menu-toggle" id="menuToggle" aria-expanded="false" aria-controls="mainNav" aria-label="Toggle menu">☰</button>
229
+ </div>
230
  </div>
231
+ </header>
232
+
233
+ <main id="top">
234
+ <section class="hero" aria-labelledby="heroTitle">
235
+ <div class="hero-grid" aria-hidden="true"></div>
236
+ <canvas id="network" aria-hidden="true"></canvas>
237
+ <div class="container hero-inner">
238
+ <div class="hero-copy fade-in">
239
+ <div class="eyebrow mono"><span class="rule"></span>OPEN SCIENCE / MECHANISTIC INTERPRETABILITY</div>
240
+ <h1 id="heroTitle"><span class="soft">From learned</span><span class="soft">features to</span><span class="gradient">testable explanations.</span></h1>
241
+ <p class="hero-text">We build open methods and research infrastructure to understand how neural networks represent information—and how their internal components shape behavior.</p>
242
+ <div class="actions">
243
+ <a class="btn btn-primary" href="https://huggingface.co/spaces/OpenSAE/SAEBase" target="_blank" rel="noopener noreferrer">Explore SAEBase Research Lab <span class="btn-arrow">↗</span></a>
244
+ <a class="btn btn-outline" href="#methods">Explore research <span class="btn-arrow">↘</span></a>
245
+ </div>
246
+ <div class="hero-caption mono"><span>FOCUS <b>SAE FEATURES</b></span><span>METHOD <b>INTERVENTIONS</b></span><span>STANDARD <b>REPRODUCIBILITY</b></span></div>
247
+ </div>
248
+ <div class="hero-visual fade-in" aria-hidden="true">
249
+ <div class="scene-core" id="sceneCore">
250
+ <div class="orbital orbit1"></div><div class="orbital orbit2"></div><div class="orbital orbit3"></div>
251
+ <svg class="constellation" viewBox="0 0 340 340">
252
+ <g class="thin"><path d="M170 20L300 95L300 245L170 320L40 245L40 95Z"/><path d="M170 20L170 320M40 95L300 245M300 95L40 245"/></g>
253
+ <g class="stroke"><path d="M170 71L256 120L256 220L170 269L84 220L84 120Z"/><path d="M170 71L170 170L256 220M84 220L170 170L256 120M84 120L170 170L170 269"/></g>
254
+ <g class="vertex"><circle cx="170" cy="71" r="7"/><circle cx="256" cy="120" r="7"/><circle cx="256" cy="220" r="7"/><circle cx="170" cy="269" r="7"/><circle cx="84" cy="220" r="7"/><circle cx="84" cy="120" r="7"/></g>
255
+ <g class="vertex-glow"><circle cx="170" cy="71" r="2"/><circle cx="256" cy="120" r="2"/><circle cx="256" cy="220" r="2"/><circle cx="170" cy="269" r="2"/><circle cx="84" cy="220" r="2"/><circle cx="84" cy="120" r="2"/></g>
256
+ </svg>
257
+ <div class="core"><svg viewBox="0 0 40 40"><g fill="none" stroke="#b5ffe7" stroke-width="2.3" stroke-linecap="round"><path d="M20 3V12M34.7 11.5L27 16M34.7 28.5L27 24M20 37V28M5.3 28.5L13 24M5.3 11.5L13 16"/></g><circle fill="#b5ffe7" cx="20" cy="20" r="3"/></svg></div>
258
+ </div>
259
+ <div class="float-note note-top"><small class="mono">OBSERVATION</small><strong><span class="mini-dot"></span>FEATURE ACTIVITY</strong></div>
260
+ <div class="float-note note-bottom"><small class="mono">INTERVENTION</small><strong><span class="mini-dot"></span>BEHAVIORAL EFFECT</strong></div>
261
+ <div class="edge-id mono">OPENSAE // RESEARCH SYSTEM 01</div>
262
+ </div>
263
+ </div>
264
+ </section>
265
+
266
+ <div class="ticker" aria-label="Research themes"><div class="ticker-inner mono">
267
+ <span><b>◈</b> MECHANISTIC INTERPRETABILITY</span><span><b>◈</b> SPARSE AUTOENCODERS</span><span><b>◈</b> FEATURE INTERVENTIONS</span><span><b>◈</b> EVALUATION INFRASTRUCTURE</span><span><b>◈</b> REPRODUCIBLE RESEARCH</span>
268
+ <span aria-hidden="true"><b>◈</b> MECHANISTIC INTERPRETABILITY</span><span aria-hidden="true"><b>◈</b> SPARSE AUTOENCODERS</span><span aria-hidden="true"><b>◈</b> FEATURE INTERVENTIONS</span><span aria-hidden="true"><b>◈</b> EVALUATION INFRASTRUCTURE</span><span aria-hidden="true"><b>◈</b> REPRODUCIBLE RESEARCH</span>
269
+ </div></div>
270
+
271
+ <section class="section" id="mission">
272
+ <div class="container">
273
+ <div class="section-title-group reveal"><div><p class="eyeline mono">01 / OUR MISSION</p><h2>Make explanations<br /><span class="light">testable.</span></h2></div><p>We investigate learned representations, interactions among internal components, and the reliability of feature-level explanations. We build tools that let other researchers reproduce and extend these experiments.</p></div>
274
+ <div class="research-strip reveal" aria-label="SAEBase verified coverage">
275
+ <div class="stat-block"><span class="stat-corner mono">01</span><span class="stat-label mono">MODEL / SAE CONFIGURATIONS</span><strong><span class="counter" data-target="18">18</span></strong><p>Selected model–SAE pairs covered by public verification records.</p></div>
276
+ <div class="stat-block"><span class="stat-corner mono">02</span><span class="stat-label mono">EVALUATED MODEL / LAYER SITES</span><strong><span class="counter" data-target="48">48</span></strong><p>Per-layer compatibility, benchmark and reliability records.</p></div>
277
+ <div class="stat-block"><span class="stat-corner mono">03</span><span class="stat-label mono">MODEL PARAMETERS</span><strong>270<span class="unit">M</span>–9<span class="unit">B</span></strong><p>Range represented by the evaluated models and SAE configurations.</p></div>
278
+ </div>
279
+ </div>
280
+ </section>
281
+
282
+ <section class="section alt" id="infrastructure">
283
+ <div class="container">
284
+ <div class="section-title-group reveal"><div><p class="eyeline mono">02 / OPEN INFRASTRUCTURE</p><h2>Built for research.<br /><span class="light">Built to be reused.</span></h2></div><p>SAEBase connects activation capture, feature interventions and quantitative evaluation in one consistent research workflow.</p></div>
285
+ <div class="feature-intro">
286
+ <div class="reveal"><h3>SAEBase <span class="light">Research Lab</span></h3><p>An open-source foundation for studying SAE features and measuring how interventions on them affect downstream model behavior.</p><a class="link-arrow" href="https://huggingface.co/spaces/OpenSAE/SAEBase" target="_blank" rel="noopener noreferrer">Open interactive evaluation lab <span>↗</span></a></div>
287
+ <div class="research-terminal reveal" role="img" aria-label="Illustrative diagram of activation capture, feature intervention and evaluation stages. Not an empirical measurement.">
288
+ <div class="terminal-bar mono">PIPELINE PREVIEW<small>CONCEPTUAL / NOT MEASURED DATA</small></div>
289
+ <div class="terminal-body"><div class="terminal-label mono">REPRODUCIBLE RESEARCH WORKFLOW</div><div class="terminal-lines">
290
+ <div class="terminal-line"><em class="mono">MODEL / SAE</em><div class="meter"><span style="--level:79%"></span></div></div>
291
+ <div class="terminal-line"><em class="mono">ACTIVATIONS</em><div class="meter"><span style="--level:62%"></span></div></div>
292
+ <div class="terminal-line"><em class="mono">INTERVENTIONS</em><div class="meter"><span style="--level:88%"></span></div></div>
293
+ <div class="terminal-line"><em class="mono">AUDIT RECORDS</em><div class="meter"><span style="--level:100%"></span></div></div>
294
+ </div><div class="terminal-foot mono"><span>INPUT → FEATURES → EFFECTS → EVIDENCE</span><span>SAEBASE / v0.3.0</span></div></div>
295
+ </div>
296
+ </div>
297
+ <div class="capabilities">
298
+ <article class="cap-card reveal"><div class="cap-icon"><svg viewBox="0 0 24 24"><ellipse cx="12" cy="5" rx="8" ry="3"/><path d="M4 5v13c0 1.6 3.5 3 8 3s8-1.4 8-3V5M4 11c0 1.6 3.5 3 8 3s8-1.4 8-3"/></svg></div><h3>Activation Store</h3><p>Capture and reuse activation data across feature dictionaries and research experiments.</p></article>
299
+ <article class="cap-card reveal"><div class="cap-icon"><svg viewBox="0 0 24 24"><circle cx="6" cy="6" r="2"/><circle cx="18" cy="6" r="2"/><circle cx="12" cy="18" r="2"/><path d="M7.7 7.3 10.7 16M16.3 7.3 13.3 16M8 6h8"/></svg></div><h3>Feature Interventions</h3><p>Remove, adjust and combine SAE features to inspect their downstream effects.</p></article>
300
+ <article class="cap-card reveal"><div class="cap-icon"><svg viewBox="0 0 24 24"><path d="M4 20V11M10 20V4M16 20v-8M22 20V7M2 20h22"/></svg></div><h3>Benchmarking</h3><p>Measure reconstruction and behavior changes through documented evaluation protocols.</p></article>
301
+ <article class="cap-card reveal"><div class="cap-icon"><svg viewBox="0 0 24 24"><path d="m12 3 8 4v5c0 5-3.2 8-8 10-4.8-2-8-5-8-10V7Z"/><path d="m8 12 2.5 2.5L16 9"/></svg></div><h3>Reliability</h3><p>Audit results, statistical comparisons and traceable source records.</p></article>
302
+ </div>
303
+ </div>
304
+ </section>
305
+
306
+ <section class="section" id="workflow">
307
+ <div class="container">
308
+ <div class="section-title-group reveal"><div><p class="eyeline mono">03 / RESEARCH WORKFLOW</p><h2>Observe. Intervene.<br /><span class="light">Verify.</span></h2></div><p>Explore how the research workflow is organized. This animated visualization illustrates operations; experimental values are available in the verified dataset.</p></div>
309
+ <div class="workflow">
310
+ <div class="stage-list reveal" role="group" aria-label="Research workflow stages">
311
+ <button class="stage-button" data-stage="observe" aria-pressed="true"><span class="stage-number mono">01</span><span><strong>Observe representations</strong><small>Capture and encode feature activity</small></span></button>
312
+ <button class="stage-button" data-stage="intervene" aria-pressed="false"><span class="stage-number mono">02</span><span><strong>Intervene on features</strong><small>Evaluate controlled feature edits</small></span></button>
313
+ <button class="stage-button" data-stage="verify" aria-pressed="false"><span class="stage-number mono">03</span><span><strong>Verify the evidence</strong><small>Benchmark and audit recorded effects</small></span></button>
314
+ </div>
315
+ <div class="workflow-screen reveal" aria-live="polite">
316
+ <div class="screen-heading"><small class="mono">RESEARCH PIPELINE / ACTIVE STAGE</small><span class="screen-badge mono" id="stagePill">CAPTURE</span></div>
317
+ <h3 id="stageTitle">Observe representations</h3>
318
+ <p id="stageDescription">Capture model activations at a selected layer. Encode them with an SAE and record the source identities needed for reproducibility.</p>
319
+ <div class="signal-bars" id="signalBars" aria-hidden="true"><i style="--h:43%"></i><i style="--h:66%"></i><i style="--h:51%"></i><i style="--h:86%"></i><i style="--h:72%"></i><i style="--h:58%"></i><i style="--h:93%"></i><i style="--h:50%"></i><i style="--h:66%"></i></div>
320
+ <div class="screen-foot mono">INTERACTIVE CONCEPTUAL ILLUSTRATION · NOT A MEASURED FEATURE PLOT</div>
321
+ </div>
322
+ </div>
323
+ </div>
324
+ </section>
325
+
326
+ <section class="section alt" id="methods">
327
+ <div class="container">
328
+ <div class="section-title-group reveal"><div><p class="eyeline mono">04 / RESEARCH DIRECTIONS</p><h2>Understand the<br /><span class="light">mechanisms.</span></h2></div><p>Our open research explores how learned features interact, shift across inputs, and depend on controlled variables.</p></div>
329
+ <div class="method-grid">
330
+ <a class="method-card reveal" href="https://github.com/OpenSAE/SAE-Behavioral-Compositionality" target="_blank" rel="noopener noreferrer"><div class="method-meta mono">01 / FEATURE INTERACTIONS</div><h3>SAR<br />Behavioral Compositionality</h3><p>When do the combined effects of SAE features depart from the sum of their individual effects?</p><span class="method-link">Explore project & tutorial ↗</span></a>
331
+ <a class="method-card reveal" href="https://github.com/OpenSAE/Redistribution-Sensitivity-Score" target="_blank" rel="noopener noreferrer"><div class="method-meta mono">02 / CONTEXT SENSITIVITY</div><h3>RSS<br />Representation Redistribution</h3><p>How does sparse feature activity change when a request is presented in different ways?</p><span class="method-link">Explore project & tutorial ↗</span></a>
332
+ <a class="method-card reveal" href="https://github.com/OpenSAE/SAE-Input-Localization" target="_blank" rel="noopener noreferrer"><div class="method-meta mono">03 / INPUT DEPENDENCIES</div><h3>Input<br />Localization</h3><p>Which input variables are needed to explain a feature’s activation under controlled changes?</p><span class="method-link">Explore project & tutorial ↗</span></a>
333
+ </div>
334
+ </div>
335
+ </section>
336
+
337
+ <section class="section" id="evidence">
338
+ <div class="container">
339
+ <div class="evidence-panel reveal">
340
+ <div><p class="eyeline mono">05 / OPEN SCIENCE</p><h2>Evidence you<br />can <span class="light">inspect.</span></h2><p>Explore public model and SAE verification records, experiment configurations and source checks. Measurements reflect controlled benchmark execution and reliability audits—not a general ranking of SAE quality.</p><div class="actions"><a class="btn btn-primary" href="https://huggingface.co/datasets/OpenSAE/SAEBase-Evaluation" target="_blank" rel="noopener noreferrer">Browse evaluation dataset <span class="btn-arrow">↗</span></a></div></div>
341
+ <div class="evidence-list"><div class="evidence-item"><span class="evidence-dot"></span><span>Original model/SAE identities</span></div><div class="evidence-item"><span class="evidence-dot"></span><span>48 recorded layer-site evaluations</span></div><div class="evidence-item"><span class="evidence-dot"></span><span>Benchmark and reliability reports</span></div><div class="evidence-item"><span class="evidence-dot"></span><span>Versioned open-source software</span></div><div class="evidence-item"><span class="evidence-dot"></span><span>Checkable provenance and data links</span></div><div class="evidence-item"><span class="evidence-dot"></span><span>Third-party model weights stay upstream</span></div></div>
342
+ </div>
343
+ </div>
344
+ </section>
345
  </main>
346
+ <footer class="footer">
347
+ <div class="container"><div class="footer-inner"><div><a class="footer-name" href="#top">OpenSAE<span class="light">.</span></a><div class="footer-info">Open foundations for understanding neural networks.</div></div><div class="footer-links"><a href="https://github.com/OpenSAE" target="_blank" rel="noopener noreferrer">GitHub ↗</a><a href="https://huggingface.co/spaces/OpenSAE/SAEBase" target="_blank" rel="noopener noreferrer">SAEBase ↗</a><a href="https://huggingface.co/datasets/OpenSAE/SAEBase-Evaluation" target="_blank" rel="noopener noreferrer">Dataset ↗</a><a href="mailto:hma232@wisc.edu">Contact ↗</a></div></div><div class="copyright mono"><span>© 2026 OPENSAE · OPEN RESEARCH</span><span>DESIGNED FOR INSPECTION, REUSE & REPRODUCIBILITY</span></div></div>
348
+ </footer>
349
+ <script>
350
+ (() => {
351
+ 'use strict';
352
+ const media = window.matchMedia('(prefers-reduced-motion: reduce)');
353
+ const reduced = () => media.matches;
354
+ const menu = document.getElementById('menuToggle');
355
+ const nav = document.getElementById('mainNav');
356
+ menu.addEventListener('click', () => {
357
+ const on = nav.dataset.open !== 'true';
358
+ nav.dataset.open = String(on);
359
+ menu.setAttribute('aria-expanded', String(on));
360
+ menu.textContent = on ? '✕' : '☰';
361
+ });
362
+ nav.querySelectorAll('a').forEach(link => link.addEventListener('click', () => {
363
+ nav.dataset.open = 'false'; menu.setAttribute('aria-expanded','false'); menu.textContent = '☰';
364
+ }));
365
+ const reveals = [...document.querySelectorAll('.reveal')];
366
+ if ('IntersectionObserver' in window && !reduced()) {
367
+ const observer = new IntersectionObserver(entries => entries.forEach(entry => {
368
+ if (!entry.isIntersecting) return;
369
+ entry.target.classList.add('visible'); observer.unobserve(entry.target);
370
+ }), {threshold: 0.12, rootMargin:'0px 0px -28px 0px'});
371
+ reveals.forEach(el => observer.observe(el));
372
+ } else reveals.forEach(el => el.classList.add('visible'));
373
+ const stageData = {
374
+ observe: {title:'Observe representations',description:'Capture model activations at a selected layer. Encode them with an SAE and record the source identities needed for reproducibility.', pill:'CAPTURE', bars:[43,66,51,86,72,58,93,50,66]},
375
+ intervene: {title:'Intervene on features',description:'Apply controlled edits to SAE features, then measure the resulting changes in downstream model behavior.', pill:'INTERVENE', bars:[69,21,78,47,95,29,54,81,41]},
376
+ verify: {title:'Verify the evidence',description:'Evaluate benchmark measurements with recorded protocols, source checks and reliability auditing.', pill:'AUDIT', bars:[76,81,73,91,79,86,74,82,94]},
377
+ };
378
+ const buttons = [...document.querySelectorAll('[data-stage]')];
379
+ const bars = [...document.querySelectorAll('#signalBars i')];
380
+ buttons.forEach(button => button.addEventListener('click', () => {
381
+ const stage = stageData[button.dataset.stage];
382
+ if (!stage) return;
383
+ buttons.forEach(el => el.setAttribute('aria-pressed',String(el===button)));
384
+ document.getElementById('stageTitle').textContent=stage.title;
385
+ document.getElementById('stageDescription').textContent=stage.description;
386
+ document.getElementById('stagePill').textContent=stage.pill;
387
+ bars.forEach((el,i) => el.style.setProperty('--h',stage.bars[i]+'%'));
388
+ }));
389
+ // A quiet, self-contained ambient point-cloud. No external libraries/network.
390
+ const canvas=document.getElementById('network');
391
+ const ctx=canvas.getContext('2d',{alpha:true});
392
+ if (ctx && !reduced()) {
393
+ let width=0,height=0,dpr=1,raf=0,points=[],pointer={x:-1000,y:-1000};
394
+ const rand = (min,max)=>min+Math.random()*(max-min);
395
+ function resize(){
396
+ const box=canvas.getBoundingClientRect();width=box.width;height=box.height;dpr=Math.min(window.devicePixelRatio||1,2);
397
+ canvas.width=Math.round(width*dpr);canvas.height=Math.round(height*dpr);ctx.setTransform(dpr,0,0,dpr,0,0);
398
+ const number=Math.max(18,Math.min(75,Math.floor(width*height/21000)));
399
+ points=Array.from({length:number},()=>({x:rand(width*.35,width*1.02),y:rand(0,height),vx:rand(-.11,.11),vy:rand(-.13,.13),r:rand(.65,1.6)}));
400
+ }
401
+ const observer='ResizeObserver' in window ? new ResizeObserver(resize) : null;
402
+ observer ? observer.observe(canvas) : window.addEventListener('resize',resize,{passive:true});
403
+ resize();
404
+ window.addEventListener('pointermove',event=>{pointer.x=event.clientX;pointer.y=event.clientY-document.querySelector('.hero').getBoundingClientRect().top},{passive:true});
405
+ window.addEventListener('pointerleave',()=>{pointer.x=-1000;pointer.y=-1000});
406
+ function frame(){
407
+ ctx.clearRect(0,0,width,height);
408
+ for (const p of points){
409
+ p.x+=p.vx;p.y+=p.vy;
410
+ if(p.x<width*.3||p.x>width+12)p.vx*=-1;
411
+ if(p.y<0||p.y>height)p.vy*=-1;
412
+ let dx=p.x-pointer.x,dy=p.y-pointer.y,dist=Math.hypot(dx,dy);
413
+ if (dist<125&&dist>2){p.x+=(dx/dist)*.48;p.y+=(dy/dist)*.48;}
414
+ ctx.fillStyle='rgba(138,240,215,.65)';ctx.beginPath();ctx.arc(p.x,p.y,p.r,0,Math.PI*2);ctx.fill();
415
+ }
416
+ for(let i=0;i<points.length;i++){
417
+ for(let j=i+1;j<points.length;j++){
418
+ const a=points[i],b=points[j],d=Math.hypot(a.x-b.x,a.y-b.y);
419
+ if(d<122){ctx.strokeStyle='rgba(110,219,207,'+(.19*(1-d/122)).toFixed(3)+')';ctx.lineWidth=.8;ctx.beginPath();ctx.moveTo(a.x,a.y);ctx.lineTo(b.x,b.y);ctx.stroke();}
420
+ }
421
+ }
422
+ raf=requestAnimationFrame(frame);
423
+ }
424
+ raf=requestAnimationFrame(frame);
425
+ document.addEventListener('visibilitychange',()=>{cancelAnimationFrame(raf);if(!document.hidden)frame();});
426
+ }
427
+ })();
428
+ </script>
429
  </body>
430
  </html>