File size: 11,190 Bytes
6f5367b
 
 
 
 
 
 
3219e2a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6f5367b
 
 
3219e2a
6f5367b
3219e2a
 
 
 
 
 
 
6f5367b
3219e2a
6f5367b
1176350
3219e2a
1176350
 
 
 
3219e2a
6f5367b
3219e2a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6f5367b
3219e2a
6f5367b
3219e2a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6f5367b
3219e2a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6f5367b
3219e2a
 
 
6f5367b
3219e2a
6f5367b
3219e2a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6f5367b
 
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>CROVIA · Start Here</title>
  <style>
    *{margin:0;padding:0;box-sizing:border-box}
    html,body{background:#05060a;color:#e5e7eb;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;line-height:1.6;min-height:100vh}
    a{color:#818cf8;text-decoration:none;transition:color .15s}
    a:hover{color:#a78bfa}
    .page{max-width:860px;margin:0 auto;padding:32px 20px}

    /* Hero */
    .hero{text-align:center;padding:48px 0 36px}
    .hero h1{font-size:36px;font-weight:800;letter-spacing:.16em;text-transform:uppercase;background:linear-gradient(135deg,#818cf8,#38bdf8);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
    .hero .tagline{color:#94a3b8;font-size:17px;margin-top:10px;font-weight:400}
    .hero .thesis{color:#cbd5e1;font-size:14px;margin-top:16px;max-width:600px;margin-left:auto;margin-right:auto;line-height:1.7}

    /* Live stats bar */
    .stats-bar{display:flex;justify-content:center;gap:28px;flex-wrap:wrap;padding:20px 0;border-top:1px solid rgba(255,255,255,.06);border-bottom:1px solid rgba(255,255,255,.06);margin:12px 0 32px}
    .stat{text-align:center}
    .stat .num{font-size:26px;font-weight:800;color:#818cf8}
    .stat .lbl{font-size:10px;color:#64748b;text-transform:uppercase;letter-spacing:.1em;margin-top:2px}

    /* Section */
    .section{margin-bottom:28px}
    .section-title{font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:#a78bfa;margin-bottom:14px;padding-bottom:6px;border-bottom:1px solid rgba(167,139,250,.15)}

    /* Cards grid */
    .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:12px}
    .card{padding:16px;border-radius:10px;border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.03);transition:border-color .2s,background .2s}
    .card:hover{border-color:rgba(129,140,248,.25);background:rgba(129,140,248,.04)}
    .card .card-title{font-size:14px;font-weight:700;color:#e5e7eb;margin-bottom:4px}
    .card .card-desc{font-size:12px;color:#94a3b8;line-height:1.5}
    .card .card-tag{display:inline-block;font-size:9px;padding:2px 8px;border-radius:4px;margin-top:8px;font-weight:700;letter-spacing:.06em}
    .tag-space{background:rgba(56,189,248,.12);color:#38bdf8}
    .tag-dataset{background:rgba(34,197,94,.12);color:#22c55e}
    .tag-web{background:rgba(251,191,36,.12);color:#fbbf24}
    .tag-registry{background:rgba(167,139,250,.12);color:#a78bfa}

    /* Principles */
    .principles{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:8px}
    @media(max-width:600px){.principles{grid-template-columns:1fr}}
    .principle{padding:16px;border-radius:10px;border:1px solid rgba(255,255,255,.06);background:rgba(255,255,255,.02)}
    .principle h4{font-size:13px;font-weight:700;margin-bottom:6px}
    .principle p{font-size:12px;color:#94a3b8;line-height:1.6}
    .principle-open h4{color:#22c55e}
    .principle-pro h4{color:#f59e0b}

    /* Footer */
    .foot{text-align:center;padding:28px 0 12px;border-top:1px solid rgba(255,255,255,.06);margin-top:32px}
    .foot p{font-size:11px;color:#475569}
    .foot a{color:#818cf8}

    /* Disclaimer */
    .disclaimer{text-align:center;margin-top:16px;font-size:10px;color:#475569;font-style:italic}
  </style>
</head>
<body>
  <div class="page">

    <!-- Hero -->
    <div class="hero">
      <h1>CROVIA</h1>
      <div class="tagline">If AI is trained on data, there must be evidence.</div>
      <div class="thesis">
        Crovia operates the first continuous, cryptographically verifiable registry
        of AI training data documentation. We observe. We record. We do not judge.
      </div>
    </div>

    <!-- Live stats (defaults from registry, updated dynamically if CORS allows) -->
    <div class="stats-bar">
      <div class="stat"><div class="num" id="s-models">141</div><div class="lbl">Models Tracked</div></div>
      <div class="stat"><div class="num" id="s-orgs">70</div><div class="lbl">Organizations</div></div>
      <div class="stat"><div class="num" id="s-tpa">200</div><div class="lbl">Temporal Proofs</div></div>
      <div class="stat"><div class="num" id="s-doc">85.8%</div><div class="lbl">Documentation Rate</div></div>
    </div>

    <!-- Surfaces -->
    <div class="section">
      <div class="section-title">Public Evidence Surfaces</div>
      <div class="grid">
        <a href="https://huggingface.co/spaces/Crovia/omission-oracle" target="_blank" class="card">
          <div class="card-title">Registry Observer</div>
          <div class="card-desc">Full interactive dashboard. Model lookup, TPA explorer, DDF drift, lineage graph, compliance mapping, and regulatory context.</div>
          <span class="card-tag tag-space">HF SPACE</span>
        </a>
        <a href="https://huggingface.co/spaces/Crovia/cep-terminal" target="_blank" class="card">
          <div class="card-title">CEP Terminal</div>
          <div class="card-desc">Crovia Evidence Protocol terminal. Inspect, verify, and reproduce cryptographic evidence capsules.</div>
          <span class="card-tag tag-space">HF SPACE</span>
        </a>
        <a href="https://huggingface.co/datasets/Crovia/global-ai-training-omissions" target="_blank" class="card">
          <div class="card-title">Global AI Training Omissions</div>
          <div class="card-desc">Append-only observation ledger. Every scan, every hash, every absence receipt &mdash; timestamped and immutable.</div>
          <span class="card-tag tag-dataset">DATASET</span>
        </a>
        <a href="https://huggingface.co/datasets/Crovia/cep-capsules" target="_blank" class="card">
          <div class="card-title">CEP Reference Capsules</div>
          <div class="card-desc">CEP.v1 cryptographic evidence capsules. Reproducible provenance proofs for AI training data.</div>
          <span class="card-tag tag-dataset">DATASET</span>
        </a>
      </div>
    </div>

    <!-- Registry pages -->
    <div class="section">
      <div class="section-title">CROVIA Registry</div>
      <div class="grid">
        <a href="https://registry.croviatrust.com/registry" target="_blank" class="card">
          <div class="card-title">Registry Home</div>
          <div class="card-desc">Central hub. Live target index, aggregate statistics, observation status.</div>
          <span class="card-tag tag-registry">REGISTRY</span>
        </a>
        <a href="https://registry.croviatrust.com/registry/compliance" target="_blank" class="card">
          <div class="card-title">Compliance Mapping</div>
          <div class="card-desc">Per-model regulatory gap analysis across 20 NEC# elements and 11 jurisdictions. Includes regulatory context with EU AI Act and GDPR citations.</div>
          <span class="card-tag tag-registry">REGISTRY</span>
        </a>
        <a href="https://registry.croviatrust.com/registry/tpa" target="_blank" class="card">
          <div class="card-title">Temporal Proof of Absence</div>
          <div class="card-desc">Cryptographic evidence chain. SHA-256 hashes, Merkle roots, append-only temporal proofs of documentation gaps.</div>
          <span class="card-tag tag-registry">REGISTRY</span>
        </a>
        <a href="https://registry.croviatrust.com/registry/lineage" target="_blank" class="card">
          <div class="card-title">Lineage Graph</div>
          <div class="card-desc">Interactive D3.js visualization of model-organization-dataset relationships. Reveals shared training data dependencies.</div>
          <span class="card-tag tag-registry">REGISTRY</span>
        </a>
        <a href="https://registry.croviatrust.com/registry/omissions" target="_blank" class="card">
          <div class="card-title">Omission Ledger</div>
          <div class="card-desc">Searchable ledger of documented training data omissions across monitored models.</div>
          <span class="card-tag tag-registry">REGISTRY</span>
        </a>
        <a href="https://registry.croviatrust.com/registry/outreach" target="_blank" class="card">
          <div class="card-title">Outreach &amp; Impact</div>
          <div class="card-desc">Transparency engagement tracker. Documents communications with model publishers about documentation gaps.</div>
          <span class="card-tag tag-registry">REGISTRY</span>
        </a>
      </div>
    </div>

    <!-- Principles -->
    <div class="section">
      <div class="section-title">Architecture</div>
      <div class="principles">
        <div class="principle principle-open">
          <h4>Open Plane</h4>
          <p>Everything you see here. Continuous observation of AI model documentation. Cryptographic proof of evidence presence and absence. Verifiable surfaces: timestamps, hashes, Merkle roots, append-only artifacts. No judgment. No accusations.</p>
        </div>
        <div class="principle principle-pro">
          <h4>PRO Plane</h4>
          <p>Quantitative regulatory exposure analysis. Per-model, per-jurisdiction financial impact assessment. Evidence-backed compliance intelligence. Settlement infrastructure. Available to qualified organizations.</p>
          <p style="margin-top:8px"><a href="mailto:info@croviatrust.com" style="color:#f59e0b;font-weight:700;font-size:11px">Contact: info@croviatrust.com</a></p>
        </div>
      </div>
    </div>

    <!-- Footer -->
    <div class="foot">
      <p><a href="https://croviatrust.com" target="_blank">croviatrust.com</a> &middot; <a href="https://github.com/croviatrust" target="_blank">github.com/croviatrust</a></p>
    </div>
    <div class="disclaimer">Observation, not judgment. All data derived from public sources. No claim of violation is made or implied.</div>
  </div>

  <script>
    // Populate live stats from registry API
    fetch('https://registry.croviatrust.com/registry/data/lineage_graph.json')
      .then(r => r.json())
      .then(d => {
        const nodes = d.nodes || [];
        const models = nodes.filter(n => n.type === 'model');
        const shadows = nodes.filter(n => n.type === 'shadow');
        const orgs = nodes.filter(n => n.type === 'org');
        const total = models.length + shadows.length;
        const docRate = total > 0 ? (models.length / total * 100).toFixed(1) : '0';
        document.getElementById('s-models').textContent = total;
        document.getElementById('s-orgs').textContent = orgs.length;
        document.getElementById('s-doc').textContent = docRate + '%';
      })
      .catch(() => {
        document.getElementById('s-models').textContent = '141';
        document.getElementById('s-orgs').textContent = '70';
        document.getElementById('s-doc').textContent = '83.5%';
      });

    fetch('https://registry.croviatrust.com/registry/data/tpa_latest.json')
      .then(r => r.json())
      .then(d => {
        document.getElementById('s-tpa').textContent = d.total_tpas || d.tpas?.length || '200+';
      })
      .catch(() => {
        document.getElementById('s-tpa').textContent = '200+';
      });
  </script>
</body>
</html>