PageSourceSearch

https://openteam.community/eta_glossary.html

html openteam.community collected 2026-10-04 00:21:25 UTC 61,715 bytes, 1,222 lines download raw bytes

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.0">
6<title>ETA Glossary — Ethical Technology Assessment · OpenTEAM</title>
7<link rel="preconnect" href="https://fonts.googleapis.com">
8<link href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=DM+Mono:wght@300;400;500&family=DM+Sans:ital,wght@0,300;0,400;0,500;0,600;1,400&display=swap" rel="stylesheet">
9<style>
10/* ── RESET & BASE ─────────────────────────────────────── */
11*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
12:root{
13  --ink:#1c1c1a;
14  --ink-dim:#5a5a54;
15  --ink-faint:#9a9a92;
16  --cream:#f5f0e8;
17  --cream-dk:#ede6d8;
18  --cream-dkr:#e2d9c8;
19  --white:#ffffff;
20  --forest:#1b4332;
21  --forest-md:#2d6a4f;
22  --forest-lt:#74c69d;
23  --forest-pale:#d8f3dc;
24  --sage:#52796f;
25  --sage-lt:#84a98c;
26  --gold:#b5892a;
27  --gold-lt:#e9c46a;
28  --gold-pale:#fdf5d9;
29  --rust:#9b3a1a;
30  --rust-pale:#fde8e0;
31  --sky:#1d4e89;
32  --sky-pale:#dbeafe;
33  --line:#d5cec0;
34  --line-dk:#b8b0a0;
35  --shadow:0 2px 16px rgba(27,67,50,.09);
36  --shadow-lg:0 8px 40px rgba(27,67,50,.14);
37  --r:8px;
38}
39html{scroll-behavior:smooth;font-size:16px}
40body{background:var(--cream);color:var(--ink);font-family:'DM Sans',sans-serif;line-height:1.6;min-height:100vh}
41
42/* ── TOPBAR ─────────────────────────────────────── */
43.topbar{
44  position:sticky;top:0;z-index:100;
45  background:var(--forest);
46  border-bottom:3px solid #0d2818;
47  box-shadow:0 2px 20px rgba(0,0,0,.3);
48  padding:0;
49}
50.topbar-inner{
51  max-width:1100px;margin:0 auto;
52  display:flex;align-items:stretch;justify-content:space-between;
53  padding:0 24px;
54}
55.brand{
56  display:flex;align-items:center;gap:12px;
57  text-decoration:none;padding:14px 0;
58}
59.brand-logo{
60  width:36px;height:36px;background:rgba(255,255,255,.12);
61  border-radius:6px;display:flex;align-items:center;justify-content:center;
62  font-family:'DM Mono',monospace;font-size:13px;font-weight:500;color:var(--forest-lt);
63  letter-spacing:.02em;flex:0 0 36px;
64}
65.brand-text{
66  display:flex;flex-direction:column;
67}
68.brand-name{
69  font-family:'DM Sans',sans-serif;font-size:14px;font-weight:600;color:white;
70  letter-spacing:.01em;line-height:1;
71}
72.brand-sub{
73  font-family:'DM Mono',monospace;font-size:9.5px;color:rgba(255,255,255,.5);
74  letter-spacing:.12em;text-transform:uppercase;margin-top:3px;
75}
76.topbar-nav{display:flex;align-items:stretch;gap:0}
77.topbar-nav a{
78  font-family:'DM Mono',monospace;font-size:10px;font-weight:500;
79  letter-spacing:.12em;text-transform:uppercase;
80  color:rgba(255,255,255,.6);text-decoration:none;
81  padding:0 16px;display:flex;align-items:center;
82  border-left:1px solid rgba(255,255,255,.1);
83  transition:color .15s,background .15s;
84}
85.topbar-nav a:hover{color:white;background:rgba(255,255,255,.08)}
86.topbar-nav a.active{color:var(--forest-lt)}
87
88/* ── HERO ─────────────────────────────────────── */
89.hero{
90  background:linear-gradient(155deg, var(--forest) 0%, #0d4a2a 60%, #163d25 100%);
91  padding:64px 24px 56px;
92  position:relative;overflow:hidden;
93}
94.hero::before{
95  content:'';position:absolute;inset:0;
96  background:url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.02'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
97}
98.hero-inner{max-width:1100px;margin:0 auto;position:relative}
99.hero-badge{
100  display:inline-flex;align-items:center;gap:8px;
101  background:rgba(116,198,157,.15);border:1px solid rgba(116,198,157,.3);
102  border-radius:20px;padding:5px 14px;
103  font-family:'DM Mono',monospace;font-size:10px;font-weight:500;
104  letter-spacing:.12em;text-transform:uppercase;color:var(--forest-lt);
105  margin-bottom:20px;
106}
107.hero-badge::before{content:'◆';font-size:8px}
108.hero h1{
109  font-family:'DM Serif Display',serif;
110  font-size:clamp(2.2rem,5vw,3.6rem);
111  font-weight:400;color:white;line-height:1.1;
112  letter-spacing:-.02em;margin-bottom:8px;
113}
114.hero h1 em{font-style:italic;color:var(--forest-lt)}
115.hero-sub{
116  font-size:17px;color:rgba(255,255,255,.65);
117  max-width:580px;line-height:1.6;margin-bottom:32px;
118}
119.hero-meta{
120  display:flex;flex-wrap:wrap;gap:20px;align-items:center;
121  font-family:'DM Mono',monospace;font-size:10.5px;color:rgba(255,255,255,.4);
122  letter-spacing:.08em;text-transform:uppercase;
123}
124.hero-meta span{display:flex;align-items:center;gap:6px}
125.hero-meta span::before{
126  content:'';width:6px;height:6px;border-radius:50%;
127  background:var(--forest-lt);flex:0 0 6px;
128}
129
130/* ── SEARCH & FILTERS ─────────────────────────────────────── */
131.controls-bar{
132  background:var(--white);
133  border-bottom:1px solid var(--line);
134  padding:16px 24px;
135  position:sticky;top:67px;z-index:90;
136  box-shadow:0 2px 8px rgba(0,0,0,.05);
137}
138.controls-inner{
139  max-width:1100px;margin:0 auto;
140  display:flex;gap:12px;flex-wrap:wrap;align-items:center;
141}
142.search-wrap{position:relative;flex:1;min-width:240px}
143.search-wrap svg{
144  position:absolute;left:12px;top:50%;transform:translateY(-50%);
145  width:16px;height:16px;stroke:var(--ink-faint);fill:none;
146  pointer-events:none;
147}
148#search-input{
149  width:100%;padding:10px 14px 10px 38px;
150  border:1.5px solid var(--line);border-radius:var(--r);
151  font-family:'DM Sans',sans-serif;font-size:14px;color:var(--ink);
152  background:var(--cream);outline:none;transition:border .15s,box-shadow .15s;
153}
154#search-input:focus{border-color:var(--forest-md);box-shadow:0 0 0 3px var(--forest-pale)}
155.filter-pills{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
156.filter-pill{
157  display:inline-flex;align-items:center;gap:5px;
158  padding:6px 14px;border-radius:20px;
159  font-family:'DM Mono',monospace;font-size:10px;font-weight:500;
160  letter-spacing:.09em;text-transform:uppercase;
161  border:1.5px solid var(--line);background:transparent;
162  cursor:pointer;transition:all .15s;color:var(--ink-dim);
163}
164.filter-pill:hover{border-color:var(--forest-md);color:var(--forest)}
165.filter-pill.active{background:var(--forest);border-color:var(--forest);color:white}
166.filter-pill .dot{
167  width:7px;height:7px;border-radius:50%;flex:0 0 7px;
168}
169.count-badge{
170  font-family:'DM Mono',monospace;font-size:11px;color:var(--ink-faint);
171  margin-left:auto;white-space:nowrap;
172}
173
174/* ── LAYOUT ─────────────────────────────────────── */
175.page-body{
176  max-width:1100px;margin:0 auto;
177  display:grid;grid-template-columns:220px 1fr;
178  gap:0;padding:32px 24px 80px;
179  align-items:start;
180}
181@media(max-width:768px){.page-body{grid-template-columns:1fr}}
182
183/* ── ALPHA SIDEBAR ─────────────────────────────────────── */
184.alpha-nav{
185  position:sticky;top:130px;
186  display:flex;flex-direction:column;gap:2px;
187  padding-right:24px;
188}
189.alpha-nav a{
190  font-family:'DM Mono',monospace;font-size:11px;font-weight:500;
191  letter-spacing:.12em;text-transform:uppercase;
192  color:var(--ink-faint);text-decoration:none;
193  padding:5px 10px;border-radius:5px;
194  transition:all .12s;display:flex;align-items:center;gap:8px;
195}
196.alpha-nav a:hover{background:var(--cream-dk);color:var(--forest)}
197.alpha-nav a.active{background:var(--forest-pale);color:var(--forest);font-weight:600}
198.alpha-nav a .alpha-count{
199  margin-left:auto;font-size:10px;color:var(--ink-faint);
200}
201.alpha-section-label{
202  font-family:'DM Mono',monospace;font-size:9px;
203  letter-spacing:.15em;text-transform:uppercase;
204  color:var(--line-dk);padding:10px 10px 4px;
205}
206@media(max-width:768px){.alpha-nav{display:none}}
207
208/* ── GLOSSARY LIST ─────────────────────────────────────── */
209.glossary-main{}
210.letter-section{margin-bottom:48px}
211.letter-anchor{
212  display:flex;align-items:center;gap:14px;margin-bottom:20px;
213}
214.letter-glyph{
215  font-family:'DM Serif Display',serif;
216  font-size:52px;font-weight:400;
217  color:var(--line-dk);line-height:1;
218  flex:0 0 44px;
219}
220.letter-rule{flex:1;height:1px;background:var(--line)}
221
222/* ── TERM CARD ─────────────────────────────────────── */
223.term-card{
224  background:var(--white);
225  border:1px solid var(--line);
226  border-radius:var(--r);
227  margin-bottom:12px;
228  overflow:hidden;
229  transition:box-shadow .15s,border-color .15s;
230}
231.term-card:hover{
232  box-shadow:var(--shadow);
233  border-color:var(--line-dk);
234}
235.term-card.hidden{display:none}
236
237.term-header{
238  display:flex;align-items:flex-start;gap:14px;
239  padding:18px 20px 14px;
240  cursor:pointer;
241  user-select:none;
242}
243.term-accent{
244  width:36px;height:36px;border-radius:6px;
245  flex:0 0 36px;
246  display:flex;align-items:center;justify-content:center;
247  font-size:17px;
248  margin-top:1px;
249}
250.term-header-text{flex:1;min-width:0}
251.term-name{
252  font-family:'DM Serif Display',serif;
253  font-size:19px;font-weight:400;
254  color:var(--ink);line-height:1.2;
255  margin-bottom:4px;
256  letter-spacing:-.01em;
257}
258.term-def{
259  font-size:13.5px;color:var(--ink-dim);
260  line-height:1.55;display:-webkit-box;
261  -webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
262}
263.term-def.expanded{-webkit-line-clamp:unset;overflow:visible}
264.term-tags{
265  display:flex;flex-wrap:wrap;gap:5px;
266  margin-top:8px;
267}
268.term-tag{
269  display:inline-flex;align-items:center;
270  padding:2px 9px;border-radius:12px;
271  font-family:'DM Mono',monospace;font-size:9.5px;font-weight:500;
272  letter-spacing:.08em;text-transform:uppercase;
273}
274.tag-eta{background:var(--forest-pale);color:var(--forest-md);border:1px solid rgba(45,106,79,.2)}
275.tag-dtap{background:var(--gold-pale);color:var(--gold);border:1px solid rgba(181,137,42,.2)}
276.tag-fair{background:var(--sky-pale);color:var(--sky);border:1px solid rgba(29,78,137,.2)}
277.tag-gdpr{background:var(--rust-pale);color:var(--rust);border:1px solid rgba(155,58,26,.2)}
278.tag-role{background:#f0e8ff;color:#5b21b6;border:1px solid rgba(91,33,182,.2)}
279.tag-data{background:var(--cream-dkr);color:var(--ink-dim);border:1px solid var(--line)}
280
281.term-toggle{
282  flex:0 0 28px;width:28px;height:28px;
283  border-radius:50%;border:1.5px solid var(--line);
284  background:transparent;cursor:pointer;
285  display:flex;align-items:center;justify-content:center;
286  transition:all .15s;margin-top:4px;
287}
288.term-toggle svg{
289  width:10px;height:10px;stroke:var(--ink-dim);fill:none;
290  transition:transform .2s;
291}
292.term-card.open .term-toggle svg{transform:rotate(180deg)}
293.term-card.open .term-toggle{border-color:var(--forest-md);background:var(--forest-pale)}
294.term-card.open .term-toggle svg{stroke:var(--forest)}
295
296/* ── EXPANDED BODY ─────────────────────────────────────── */
297.term-body{
298  display:none;
299  border-top:1px solid var(--line);
300  background:var(--cream);
301}
302.term-card.open .term-body{display:block}
303.term-body-inner{
304  padding:20px;
305  display:grid;grid-template-columns:1fr 1fr;
306  gap:16px;
307}
308@media(max-width:600px){.term-body-inner{grid-template-columns:1fr}}
309
310.detail-block{
311  background:var(--white);
312  border:1px solid var(--line);
313  border-radius:6px;
314  padding:14px 16px;
315}
316.detail-block.full{grid-column:1/-1}
317.detail-label{
318  font-family:'DM Mono',monospace;font-size:9px;font-weight:500;
319  letter-spacing:.14em;text-transform:uppercase;
320  color:var(--ink-faint);margin-bottom:6px;
321  display:flex;align-items:center;gap:6px;
322}
323.detail-label::before{
324  content:'';width:3px;height:3px;border-radius:50%;
325  background:var(--forest-lt);flex:0 0 3px;
326}
327.detail-content{font-size:13px;color:var(--ink-dim);line-height:1.6}
328.detail-content a{color:var(--forest-md);text-decoration:none}
329.detail-content a:hover{text-decoration:underline}
330.detail-content strong{color:var(--ink);font-weight:600}
331.detail-content p{margin-bottom:8px}
332.detail-content p:last-child{margin:0}
333
334/* Related terms pills */
335.related-pill{
336  display:inline-flex;align-items:center;
337  padding:3px 10px;margin:2px;
338  border-radius:12px;
339  font-family:'DM Mono',monospace;font-size:10px;
340  background:var(--forest-pale);color:var(--forest-md);
341  border:1px solid rgba(45,106,79,.2);
342  cursor:pointer;text-decoration:none;
343  transition:background .12s;
344}
345.related-pill:hover{background:var(--forest-pale);border-color:var(--forest-md)}
346
347/* ETA score indicator strip */
348.eta-strip{
349  background:linear-gradient(90deg, var(--forest), var(--sage));
350  height:3px;
351  border-radius:0 0 2px 2px;
352}
353
354/* ── VERSION BANNER ─────────────────────────────────────── */
355.version-banner{
356  background:var(--gold-pale);
357  border:1px solid rgba(181,137,42,.25);
358  border-radius:var(--r);
359  padding:14px 18px;
360  margin-bottom:24px;
361  display:flex;align-items:center;gap:14px;
362  font-size:13px;
363}
364.version-banner .vb-icon{
365  width:32px;height:32px;flex:0 0 32px;
366  border-radius:6px;background:var(--gold);
367  display:flex;align-items:center;justify-content:center;
368  color:white;font-size:16px;
369}
370.version-banner .vb-text{flex:1}
371.version-banner .vb-label{
372  font-family:'DM Mono',monospace;font-size:9.5px;font-weight:500;
373  letter-spacing:.12em;text-transform:uppercase;
374  color:var(--gold);margin-bottom:2px;
375}
376.version-banner .vb-desc{color:var(--ink-dim)}
377
378/* ── EMPTY STATE ─────────────────────────────────────── */
379.empty-state{
380  text-align:center;padding:60px 20px;
381  color:var(--ink-faint);
382  display:none;
383}
384.empty-state.visible{display:block}
385.empty-state-icon{font-size:48px;margin-bottom:16px;opacity:.3}
386.empty-state h3{font-family:'DM Serif Display',serif;font-size:22px;font-weight:400;color:var(--ink-dim);margin-bottom:8px}
387
388/* ── FOOTER ─────────────────────────────────────── */
389footer{
390  background:var(--forest);
391  padding:32px 24px;
392  margin-top:40px;
393}
394.foot-inner{
395  max-width:1100px;margin:0 auto;
396  display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px;
397  font-family:'DM Mono',monospace;font-size:10.5px;
398  color:rgba(255,255,255,.4);
399}
400.foot-inner a{color:rgba(255,255,255,.6);text-decoration:none}
401.foot-inner a:hover{color:white}
402
403/* ── SCROLL ANIMATION ─────────────────────────────────────── */
404@keyframes fadeUp{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
405.term-card{animation:fadeUp .3s ease both}
406.letter-section:nth-child(1) .term-card{animation-delay:.05s}
407.letter-section:nth-child(2) .term-card{animation-delay:.1s}
408
409/* ── HIGHLIGHT MATCH ─────────────────────────────────────── */
410.hl{background:var(--gold-pale);border-radius:2px;color:var(--gold)}
411</style>
412</head>
413<body>
414
415<!-- TOPBAR -->
416<nav class="topbar" aria-label="Site navigation">
417  <div class="topbar-inner">
418    <a class="brand" href="#">
419      <div class="brand-logo">OT</div>
420      <div class="brand-text">
421        <span class="brand-name">OpenTEAM</span>
422        <span class="brand-sub">ETA Glossary</span>
423      </div>
424    </a>
425    <div class="topbar-nav">
426      <a href="#" class="active">Glossary</a>
427      <a href="eta_unified.html">ETA Tool</a>
428      <a href="https://openteam-agreements.community/TermsandDefinitions/" target="_blank">Full Glossary</a>
429    </div>
430  </div>
431</nav>
432
433<!-- HERO -->
434<header class="hero">
435  <div class="hero-inner">
436    <div class="hero-badge">ETA Framework v1.0</div>
437    <h1>Ethical Technology<br><em>Assessment Glossary</em></h1>
438    <p class="hero-sub">Key terms and definitions for the ETA & DTAP frameworks — covering transparency, data sovereignty, commons fit, interoperability, and assessment methodology.</p>
439    <div class="hero-meta">
440      <span>37 Terms Defined</span>
441      <span>ETA + DTAP Frameworks</span>
442      <span>OpenTEAM · Ag Knowledge Concordance</span>
443    </div>
444  </div>
445</header>
446
447<!-- CONTROLS -->
448<div class="controls-bar" role="search">
449  <div class="controls-inner">
450    <div class="search-wrap">
451      <svg viewBox="0 0 24 24" stroke-width="2" stroke-linecap="round"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.35-4.35"/></svg>
452      <input type="text" id="search-input" placeholder="Search terms, definitions, tags…" aria-label="Search glossary">
453    </div>
454    <div class="filter-pills" role="group" aria-label="Filter by framework">
455      <button class="filter-pill active" data-filter="all">All</button>
456      <button class="filter-pill" data-filter="eta"><span class="dot" style="background:#2d6a4f"></span>ETA</button>
457      <button class="filter-pill" data-filter="dtap"><span class="dot" style="background:#b5892a"></span>DTAP</button>
458      <button class="filter-pill" data-filter="fair"><span class="dot" style="background:#1d4e89"></span>FAIR</button>
459      <button class="filter-pill" data-filter="role"><span class="dot" style="background:#5b21b6"></span>Roles</button>
460    </div>
461    <span class="count-badge" id="count-badge">37 terms</span>
462  </div>
463</div>
464
465<!-- PAGE BODY -->
466<div class="page-body">
467  
468  <!-- ALPHA NAV -->
469  <nav class="alpha-nav" aria-label="Alphabetical navigation">
470    <div class="alpha-section-label">Jump to</div>
471    <a href="#letter-A" data-letter="A">A <span class="alpha-count"></span></a>
472    <a href="#letter-C" data-letter="C">C <span class="alpha-count"></span></a>
473    <a href="#letter-D" data-letter="D">D <span class="alpha-count"></span></a>
474    <a href="#letter-E" data-letter="E">E <span class="alpha-count"></span></a>
475    <a href="#letter-F" data-letter="F">F <span class="alpha-count"></span></a>
476    <a href="#letter-G" data-letter="G">G <span class="alpha-count"></span></a>
477    <a href="#letter-I" data-letter="I">I <span class="alpha-count"></span></a>
478    <a href="#letter-L" data-letter="L">L <span class="alpha-count"></span></a>
479    <a href="#letter-M" data-letter="M">M <span class="alpha-count"></span></a>
480    <a href="#letter-O" data-letter="O">O <span class="alpha-count"></span></a>
481    <a href="#letter-P" data-letter="P">
481P <span class="alpha-count"></span></a>
482    <a href="#letter-R" data-letter="R">R <span class="alpha-count"></span></a>
483    <a href="#letter-S" data-letter="S">S <span class="alpha-count"></span></a>
484    <a href="#letter-T" data-letter="T">T <span class="alpha-count"></span></a>
485    <a href="#letter-V" data-letter="V">V <span class="alpha-count"></span></a>
486  </nav>
487
488  <!-- GLOSSARY TERMS -->
489  <main class="glossary-main" id="glossary-main">
490    
491    <div class="version-banner">
492      <div class="vb-icon">📋</div>
493      <div class="vb-text">
494        <div class="vb-label">Version 1.0 · February 2026</div>
495        <div class="vb-desc">Terms specific to the Ethical Technology Assessment (ETA) and Data Trust Assessment Protocol (DTAP) frameworks. For the full OpenTEAM Ag Data Glossary, see the <a href="openteam-glossary.html">complete glossary</a>.</div>
496      </div>
497    </div>
498    
499    <div id="glossary-content"></div>
500    <div class="empty-state" id="empty-state">
501      <div class="empty-state-icon">🔍</div>
502      <h3>No matching terms</h3>
503      <p>Try a different search or clear your filters.</p>
504    </div>
505  </main>
506</div>
507
508<footer>
509  <div class="foot-inner">
510    <span>OpenTEAM · ETA Glossary v1.0 · February 2026</span>
511    <div style="display:flex;gap:20px">
512      <a href="eta_unified.html">ETA Tool</a>
513      <a href="openteam-glossary.html">Full Glossary</a>
514      <a href="https://openteam-agreements.community/" target="_blank">openteam-agreements.community</a>
515    </div>
516  </div>
517</footer>
518
519<script>
520// ── GLOSSARY DATA ──────────────────────────────────────────────────────────
521const TERMS = [
522  {
523    letter: "A",
524    name: "Accessible (FAIR Principle)",
525    emoji: "🔓",
526    accentBg: "#dbeafe",
527    tags: ["fair"],
528    shortDef: "There should be clear means of viewing and using data, metadata, or infrastructure. Once found, data should be retrievable via open, standardized protocols.",
529    altDefs: "The FAIR Principles: 'Once the user finds the required data, they need to know how they can be accessed.' Protocols must be open, free, and universally implementable (A1.1). Metadata must remain accessible even when data is no longer available (A2).",
530    agExample: "Data should be 'As Open as Possible, As Closed as Necessary.' In ETA assessments, G2 (Rights & Control) evaluates whether a tool's outputs and data are accessible without unjustified lock-in.",
531    etaRelevance: "Central to Gate G2 — Rights & Control. Tools must not require proprietary viewers or lock farmers into closed data formats to pass ETA review.",
532    related: ["Findable (FAIR)","Interoperable (FAIR)","Reusable (FAIR)","Open Data","Data Portability","G2 Rights & Control"],
533    refs: ["https://www.go-fair.org/fair-principles/"],
534    steward: "GO FAIR",
535    framework: ["fair","eta"]
536  },
537  {
538    letter: "A",
539    name: "Accountability",
540    emoji: "⚖️",
541    accentBg: "#fde8e0",
542    tags: ["eta","gdpr"],
543    shortDef: "All parties involved in collection, storage, and use of agricultural data must be held responsible for their engagement in data management and subject to appropriate oversight.",
544    altDefs: "GDPR: accountability means to be 'responsible for, and be able to demonstrate compliance with' principles and regulations of data protection.",
545    agExample: "A software platform certified under ETA must demonstrate accountability through auditable logs, documented data flows, and a named point of contact — contributing to G4 (Stewardship).",
546    etaRelevance: "Directly scored in Gate G4 (Safety & Stewardship) and the Governance category of DTAP. Lack of a named contact or oversight process triggers a flag.",
547    related: ["Data Governance","Data Transparency","G4 Safety & Stewardship","Data Steward"],
548    refs: ["https://edps.europa.eu/data-protection/our-work/subjects/accountability_en"],
549    steward: "GDPR / EU AI Act",
550    framework: ["eta","dtap"]
551  },
552  {
553    letter: "A",
554    name: "Accuracy",
555    emoji: "🎯",
556    accentBg: "#d8f3dc",
557    tags: ["eta","gdpr"],
558    shortDef: "Ensuring that data collected, processed, and reported within a tool or dataset is correct, complete, and not misleading.",
559    altDefs: "UK GDPR Art. 5(1)(d): personal data shall be 'accurate and, where necessary, kept up to date; every reasonable step must be taken to ensure that inaccurate data is erased or rectified.'",
560    agExample: "In DTAP, accuracy is assessed under D2 (Provenance) — whether datasets document calibration methods, known error bounds, and correction protocols.",
561    etaRelevance: "Scored in D2 Provenance (DTAP) and flagged when documentation is insufficient to verify data quality. In ETA, inaccurate claims about tool capabilities may fail G1 (Transparency).",
562    related: ["Provenance","Data Quality","G1 Transparency","D2 Provenance"],
563    refs: ["https://ico.org.uk/for-organisations/guide-to-data-protection/"],
564    steward: "UK ICO / GDPR",
565    framework: ["eta","dtap"]
566  },
567  {
568    letter: "C",
569    name: "Confidence Tier",
570    emoji: "🏅",
571    accentBg: "#fdf5d9",
572    tags: ["eta"],
573    shortDef: "A 3-level system in the ETA/DTAP framework indicating how independently a score has been validated. Tier 1 = self-assessed, Tier 2 = peer reviewed, Tier 3 = ecosystem steward / auditor.",
574    altDefs: "Each tier applies a score modifier: Steward self-assessment ×0.92, Peer review ×1.00, Auditor/ecosystem steward ×1.04.",
575    agExample: "A farmOS deployment self-assessed at Score 78 becomes 71.8 at Tier 1 confidence. If peer-reviewed, it stays 78. If audited by an ecosystem steward, it becomes 81.",
576    etaRelevance: "Core to the ETA scoring system. Encourages external validation. Displayed on every published ETA/DTAP card.",
577    related: ["ETA Score","DTAP Score","Reviewer Role","Assessment Card"],
578    refs: [],
579    steward: "OpenTEAM / Ag Knowledge Concordance",
580    framework: ["eta","dtap"]
581  },
582  {
583    letter: "C",
584    name: "Commons Fit",
585    emoji: "🌐",
586    accentBg: "#d8f3dc",
587    tags: ["eta"],
588    shortDef: "A scored ETA category (0–5) measuring whether a tool supports shared infrastru
588cture, interoperability with open standards, and avoids creating data silos or proprietary lock-in.",
589    altDefs: "Commons Fit asks: Does this tool strengthen the agricultural data commons? Can communities build collective knowledge from it? Does it mesh with open protocols like ISOBUS, AgGateway, or LDP?",
590    agExample: "A soil sensor with a closed API that only connects to its own cloud platform scores low on Commons Fit. An open-source sensor with MQTT output and documented schemas scores high.",
591    etaRelevance: "One of 4 scored categories in ETA Hardware/Software (15 pts max). Also assessed in DTAP as the alignment of dataset licensing with open reuse.",
592    related: ["Interoperable (FAIR)","Open Source","Open Data","ETA Score","Lock-in"],
593    refs: [],
594    steward: "OpenTEAM",
595    framework: ["eta"]
596  },
597  {
598    letter: "C",
599    name: "Consent",
600    emoji: "✋",
601    accentBg: "#fde8e0",
602    tags: ["dtap","eta","gdpr"],
603    shortDef: "Freely given, specific, informed, and unambiguous agreement by a data subject to the collection, processing, or sharing of their data.",
604    altDefs: "GDPR: consent must be 'freely given, specific, informed and unambiguous.' In DTAP, D1 evaluates whether data collection from farmers or land stewards followed documented consent protocols.",
605    agExample: "A dataset compiled from farm sensor networks must document whether farmers consented to data aggregation, external sharing, or commercial use. Absent documentation scores 0 in D1 (Consent).",
606    etaRelevance: "First of 6 DTAP dimensions (D1 Consent, 10 pts). Also relevant to G2 (Rights & Control) in ETA, which checks for clear data control rights.",
607    related: ["Data Sovereignty","GDPR","CARE Principles","D1 Consent","G2 Rights & Control"],
608    refs: ["https://gdpr-info.eu/art-4-gdpr/"],
609    steward: "GDPR / OpenTEAM",
610    framework: ["dtap","eta"]
611  },
612  {
613    letter: "D",
614    name: "Data Ethics",
615    emoji: "🧭",
616    accentBg: "#d8f3dc",
617    tags: ["eta"],
618    shortDef: "A scored ETA category for software (0–5) measuring whether a tool protects farmers' data rights, limits secondary use, and avoids exploitative data practices.",
619    altDefs: "Covers: purpose limitation, no unauthorized secondary sale of farm data, clear opt-out mechanisms, and alignment with farmer data sovereignty principles.",
620    agExample: "A farm management platform that sells anonymized farm data to input companies without farmer opt-out fails Data Ethics scoring and may fail Gate G3 (No Abuse).",
621    etaRelevance: "One of 4 scored categories in ETA Software (15 pts max). No equivalent in Hardware ETA — replaced by Resource Ethics.",
622    related: ["Data Sovereignty","Purpose Limitation","GDPR","G3 No Abuse","Data Minimization"],
623    refs: [],
624    steward: "OpenTEAM",
625    framework: ["eta"]
626  },
627  {
628    letter: "D",
629    name: "Data Sovereignty",
630    emoji: "🏡",
631    accentBg: "#f0e8ff",
632    tags: ["dtap","eta"],
633    shortDef: "A farmer's or community's ability to create, control, and manage their own data — including knowledge of and meaningful consent over how it is used by others.",
634    altDefs: "Closely related to Indigenous Data Sovereignty as defined by the CARE Principles. In agricultural contexts, extends to all land stewards regardless of Indigenous status.",
635    agExample: "A land steward who can export all their farm data in an open format at any time, revoke access, and view exactly what data a platform holds about them has meaningful data sovereignty.",
636    etaRelevance: "Central value underlying ETA Gate G2 (Rights & Control) and DTAP D1 (Consent) and D3 (Access). Tools that prevent data export or lock in data fail ETA review.",
637    related: ["Consent","Open Data","Data Portability","CARE Principles","G2 Rights & Control","D3 Access"],
638    refs: [],
639    steward: "OpenTEAM / Global Indigenous Data Alliance",
640    framework: ["dtap","eta"]
641  },
642  {
643    letter: "D",
644    name: "DTAP Score",
645    emoji: "📊",
646    accentBg: "#fdf5d9",
647    tags: ["dtap"],
648    shortDef: "The 0–100 composite score produced by the Data Trust Assessment Protocol, averaging scores across 6 dimensions: Consent, Provenance, Acce
648ss, Machine-Readability, Longitudinal Integrity, and Governance.",
649    altDefs: "Calculated as: avg(Q1+Q2) × (100/30) × confidence_modifier for each dimension pair, then summed. Each dimension contributes up to ~16.7 points to the total.",
650    agExample: "A USDA open dataset with documented consent protocols, clear provenance, full public API, CSV format, 15-year history, and a named data steward might score 82–90 DTAP.",
651    etaRelevance: "The primary output of a DTAP assessment. Published alongside the dataset record in the OpenTEAM FAIR registry.",
652    related: ["Confidence Tier","D1 Consent","D2 Provenance","D3 Access","D4 Machine-Readability","D5 Longitudinal","D6 Governance"],
653    refs: [],
654    steward: "OpenTEAM / Ag Knowledge Concordance",
655    framework: ["dtap"]
656  },
657  {
658    letter: "D",
659    name: "D1 — Consent Dimension",
660    emoji: "✅",
661    accentBg: "#fdf5d9",
662    tags: ["dtap"],
663    shortDef: "First DTAP dimension (10 pts). Evaluates whether data collection from individuals or communities followed documented, freely given, and revocable consent procedures.",
664    altDefs: "Q1: Is consent documented and accessible? Q2: Do subjects have the right to withdraw or limit future use?",
665    agExample: "A dataset where farmers agreed verbally but no written consent exists scores low. One with a signed data sharing agreement that includes opt-out provisions scores high.",
666    etaRelevance: "Scored 0–5 per question (Q1, Q2). Averaged to dimension score. Feeds into DTAP total.",
667    related: ["Consent","Data Sovereignty","DTAP Score","GDPR"],
668    refs: [],
669    steward: "OpenTEAM",
670    framework: ["dtap"]
671  },
672  {
673    letter: "D",
674    name: "D2 — Provenance",
675    emoji: "📍",
676    accentBg: "#fdf5d9",
677    tags: ["dtap"],
678    shortDef: "Second DTAP dimension (10 pts). Evaluates whether the dataset's origin, collection methods, calibration history, and known error sources are documented.",
679    altDefs: "Q3: Is collection methodology documented? Q4: Are known errors, biases, or calibration issues disclosed?",
680    agExample: "A soil carbon dataset that documents sensor models, calibration dates, and identifies spatial gaps in coverage scores high on D2.",
681    etaRelevance: "Critical for datasets used in AI/ML training or policy analysis. Poor provenance inflates false precision.",
682    related: ["Accuracy","Metadata","DTAP Score","Machine Readable"],
683    refs: [],
684    steward: "OpenTEAM",
685    framework: ["dtap"]
686  },
687  {
688    letter: "D",
689    name: "D3 — Access",
690    emoji: "🔑",
691    accentBg: "#fdf5d9",
692    tags: ["dtap"],
693    shortDef: "Third DTAP dimension (10 pts). Evaluates whether data is accessible to the public, under clear licensing terms, and without prohibitive barriers to download or use.",
694    altDefs: "Q5: Is data publicly accessible (open or with free registration)? Q6: Is the license clearly stated and permissive for research use?",
695    agExample: "A USDA open-access database with a CC0 license scores high. A dataset requiring institutional purchase agreement scores low.",
696    etaRelevance: "Reflects FAIR Accessible principle and OpenTEAM's commitment to farmer data access.",
697    related: ["Accessible (FAIR)","Open Data","Data Sovereignty","D1 Consent","DTAP Score"],
698    refs: [],
699    steward: "OpenTEAM",
700    framework: ["dtap"]
701  },
702  {
703    letter: "D",
704    name: "D4 — Machine-Readability",
705    emoji: "🤖",
706    accentBg: "#fdf5d9",
707    tags: ["dtap"],
708    shortDef: "Fourth DTAP dimension (10 pts). Evaluates whether data is available in structured, machine-processable formats (CSV, JSON, GeoJSON, NetCDF) rather than PDF or paper only.",
709    altDefs: "Q7: Is data available in at least one structured format? Q8: Is an API or bulk download available?",
710    agExample: "A crop yield database available as PDFs only scores 0. One available as CSV with a REST API scores 10.",
711    etaRelevance: "Required for data to be usable in AI/ML pipelines, interoperability tools, or automated reporting. Scores feed directly into DTAP.",
712    related: ["Machine Readable","Interoperable (FAIR)","Open Data","API","DTAP Score"],
713    refs: [],
714    steward: "OpenTEAM",
715    framework: ["dtap"]
716  },
717  {
718    letter: "D",
719    name: "D5 — Longitudinal Integrity",
720    emoji: "📅",
721    accentBg: "#fdf5d9",
722    tags: ["dtap"],
723    shortDef: "Fifth DTAP dimension (10 pts). Evaluates whether the dataset spans sufficient time for trend anal
723ysis, and whether historical records are maintained consistently.",
724    altDefs: "Q9: Does the dataset span ≥5 years of consistent coverage? Q10: Are version history and data changes documented?",
725    agExample: "A 15-year soil health dataset with annual versioning and change logs scores high. A 2-year pilot dataset with no archiving scores low.",
726    etaRelevance: "Essential for climate-smart agriculture assessments, carbon accounting, and conservation practice evaluation.",
727    related: ["Metadata","Provenance","Data Governance","DTAP Score"],
728    refs: [],
729    steward: "OpenTEAM",
730    framework: ["dtap"]
731  },
732  {
733    letter: "D",
734    name: "D6 — Governance",
735    emoji: "🏛️",
736    accentBg: "#fdf5d9",
737    tags: ["dtap"],
738    shortDef: "Sixth DTAP dimension (10 pts). Evaluates whether a named steward, documented update protocol, and community feedback mechanism exist for the dataset.",
739    altDefs: "Q11: Is there a named data steward or custodian organization? Q12: Is there a documented process for corrections, feedback, or version updates?",
740    agExample: "USDA NASS CDL scores high: named steward, annual release process, and documented correction workflows. An orphaned research dataset with no current maintainer scores low.",
741    etaRelevance: "Governance without stewardship is fragile. DTAP flags datasets with no named contact.",
742    related: ["Data Steward","Data Governance","Accountability","D5 Longitudinal","DTAP Score"],
743    refs: [],
744    steward: "OpenTEAM",
745    framework: ["dtap"]
746  },
747  {
748    letter: "E",
749    name: "Entry Gate",
750    emoji: "🚪",
751    accentBg: "#d8f3dc",
752    tags: ["eta"],
753    shortDef: "One of four binary pass/fail criteria in the ETA framework (G1–G4), each worth 10 points. Failing any gate prevents a tool from receiving a passing ETA score regardless of category scores.",
754    altDefs: "G1 Transparency · G2 Rights & Control · G3 No Abuse · G4 Safety & Stewardship. All four must pass for a tool to be ETA-eligible. Gates account for 40 of 100 possible points.",
755    agExample: "A powerful soil analysis tool with a proprietary data format that prevents farmer export would fail Gate G2 (Rights & Control) and cannot pass ETA regardless of other scores.",
756    etaRelevance: "The gate structure ensures minimum standards are non-negotiable. A tool scoring 60/60 on categories but failing one gate receives a failed ETA status.",
757    related: ["G1 Transparency","G2 Rights & Control","G3 No Abuse","G4 Safety & Stewardship","ETA Score"],
758    refs: [],
759    steward: "OpenTEAM",
760    framework: ["eta"]
761  },
762  {
763    letter: "E",
764    name: "ETA Score",
765    emoji: "⭐",
766    accentBg: "#d8f3dc",
767    tags: ["eta"],
768    shortDef: "The 0–100 composite score from the Ethical Technology Assessment, combining 40 gate points (binary) and 60 category points (scored 0–5 per question), adjusted by confidence tier.",
769    altDefs: "Score = Σ(gate_pts) + Σ(cat_scores × 3) × confidence_modifier. Scores ≥70 = Eligible, 50–69 = Conditional, <50 or any gate fail = Ineligible.",
770    agExample: "A farmOS tool passing all 4 gates (40 pts) and averaging 3.5/5 across 12 category questions earns 40 + (3.5×12×5/3)=82 before confidence adjustment.",
771    etaRelevance: "The primary output of an ETA assessment. Published on the ETA card and used in the OpenTEAM FAIR registry to rank and filter tools.",
772    related: ["Confidence Tier","Entry Gate","ETA Card","Assessment Card","DTAP Score"],
773    refs: [],
774    steward: "OpenTEAM / Ag Knowledge Concordance",
775    framework: ["eta"]
776  },
777  {
778    letter: "F",
779    name: "FAIR Principles",
780    emoji: "📐",
781    accentBg: "#dbeafe",
782    tags: ["fair","eta"],
783    shortDef: "Guidelines for 'good data management' that improve discovery and reuse of data by humans and computers. The four principles: Findable, Accessible, Interoperable, Reusable.",
784    altDefs: "Developed by Wilkinson et al. (2016, Nature). Each principle has specific sub-criteria for identifiers, protocols, metadata standards, and licensing.",
785    agExample: "The USDA registry applies FAIR principles by requiring tools and datasets to have stable URLs, documented APIs, standard formats, and clear reuse licenses.",
786    etaRelevance: "DTAP is grounded in FAIR. ETA also draws on FAIR through its Interoperability category and Commons Fit scoring.",
787    related: ["Findable (FAIR)","Accessible (FAIR)","Interoperable (FAIR)","Reusable (FAIR)","DTAP Score","Commons Fit"],
788    refs: ["https://www.go-fair.org/fair-principles/"],
789    steward: "GO FAIR",
790    framework: ["fair","eta","dtap"]
791  },
792  {
793    letter: "F",
794    name: "Findable (FAIR Principle)",
795    emoji: "🔎",
796    accentBg: "#dbeafe",
797    tags: ["fair"],
798    shortDef: "Data and metadata should be easy to find for both humans and computers. Each dataset should have a persistent, globally unique identifier and rich metadata.",
799    altDefs: "FAIR sub-criteria: F1 (persistent identifier), F2 (rich metadata), F3 (identifier in metadata), F4 (indexed in a searchable resource).",
800    agExample: "A soil health dataset registered in the OpenTEAM FAIR registry with a DOI and tagged metadata is findable. A CSV emailed by a researcher is not.",
801    etaRelevance: "Supports DTAP D2 (Provenance) — datasets must have stable identifiers and searchable metadata to score well.",
802    related: ["FAIR Principles","Accessible (FAIR)","Metadata","Open Data"],
803    refs: ["https://www.go-fair.org/fair-principles/"],
804    steward: "GO FAIR",
805    framework: ["fair"]
806  },
807  {
808    letter: "G",
809    name: "G1 — Transparency",
810    emoji: "💡",
811    accentBg: "#d8f3dc",
812    tags: ["eta"],
813    shortDef: "First ETA Entry Gate (10 pts). The tool must have accessible, honest documentation describing what it does, who built it, how it processes data, and what its limitations are.",
814    altDefs: "Q: Is there a public URL documenting the tool's purpose, methods, and data flows? Is the documentation accurate and up to date?",
815    agExample: "A farm software app with a detailed user guide, open changelog, and published API docs passes G1. One with only a sales landing page fails.",
816    etaRelevance: "Gate G1 is a prerequisite for ETA eligibility. Connects to FAIR Findable (F2 metadata) and EU AI Act transparency requirements.",
817    related: ["Entry Gate","Data Transparency","ETA Score","G2 Rights & Control"],
818    refs: [],
819    steward: "OpenTEAM",
820    framework: ["eta"]
821  },
822  {
823    letter: "G",
824    name: "G2 — Rights & Control",
825    emoji: "🛡️",
826    accentBg: "#d8f3dc",
827    tags: ["eta"],
828    shortDef: "Second ETA Entry Gate (10 pts). Farmers must retain meaningful control over their data: right to export, right to delete, right to see what is collected, no unauthorized secondary sale.",
829    altDefs: "Q: Does the tool allow full data export in an open format? Can users delete their data? Are data rights clearly stated?",
830    agExample: "A platform that locks yield maps into its proprietary format without export fails G2. One offering CSV/GeoJSON export on demand passes.",
831    etaRelevance: "Directly protects data sovereignty. Connects to GDPR rights (access, portability, erasure) and OpenTEAM's Ag Data Bill of Rights.",
832    related: ["Data Sovereignty","Data Portability","Consent","G1 Transparency","G3 No Abuse","ETA Score"],
833    refs: [],
834    steward: "OpenTEAM",
835    framework: ["eta"]
836  },
837  {
838    letter: "G",
839    name: "G3 — No Abuse / No Lock-in",
840    emoji: "🚫",
841    accentBg: "#d8f3dc",
842    tags: ["eta"],
843    shortDef: "Third ETA Entry Gate (10 pts). The tool must not exploit data for purposes beyond the stated agreement, must not create anticompetitive lock-in, and must not surveil or manipulate users.",
844    altDefs: "Q: Does the tool sell farm data to third parties without consent? Does it create artificial switching costs? Does it use dark patterns to retain users?",
845    agExample: "A seed company app that uses yield data to adjust input pricing against the same farmer fails G3. An open platform with standard export formats passes.",
846    etaRelevance: "Targets the most harmful data practices. Connects to Purpose Limitation (GDPR) and data justice principles.",
847    related: ["Purpose Limitation","Data Ethics","Data Justice","G2 Rights & Control","Conditional Use"],
848    refs: [],
849    steward: "OpenTEAM",
850    framework: ["eta"]
851  },
852  {
853    letter: "G",
854    name: "G4 — Safety & Stewardship",
855    emoji: "🧑‍🔧",
856    accentBg: "#d8f3dc",
857    tags: ["eta"],
858    shortDef: "Fourth ETA Entry Gate (10 pts). There must be a named point of contact, documented maintenance plan, and reasonable security practices protecting user data.",
859    altDefs: "Q: Is there a named maintainer or steward organization? Is there a security disclosure policy? Is the tool actively maintained?",
860    agExample: "An abandoned open-source tool with no maintainer and unpatched vulnerabilities fails G4. One with a named maintainer and regular security releases passes.",
861    etaRelevance: "Ensures tools are not orphaned risks. Connects to DTAP D6 (Governance) and Accountability principles.",
862    related: ["Accountability","Data Steward","Data Governance","G1 Transparency","ETA Score"],
863    refs: [],
864    steward: "OpenTEAM",
865    framework: ["eta"]
866  },
867  {
868    letter: "I",
869    name: "Interoperable (FAIR Principle)",
870    emoji: "🔌",
871    accentBg: "#dbeafe",
872    tags: ["fair","eta"],
873    shortDef: "A dataset's or system's ability to work with other datasets, applications, or workflows using shared standards. Key to the FAIR Principles and ETA's Interoperability category.",
874    altDefs: "FAIR: 'data need to be integrated with other data and to interoperate with applications or workflows for analysis, storage, and processing.'",
875    agExample: "A soil sensor using LoRaWAN with an MQTT broker and documented JSON schema is interoperable. One with a proprietary radio protocol and closed data format is not.",
876    etaRelevance: "One of 4 scored categories in ETA Software (15 pts max). Also scored in Commons Fit for both Hardware and Software.",
877    related: ["FAIR Principles","Commons Fit","Open Source","Open Data","API"],
878    refs: ["https://www.go-fair.org/fair-principles/"],
879    steward: "GO FAIR",
880    framework: ["fair","eta"]
881  },
882  {
883    letter: "L",
884    name: "Lock-in",
885    emoji: "🔐",
886    accentBg: "#fde8e0",
887    tags: ["eta"],
888    shortDef: "A condition where a user cannot easily switch to an alternative tool or export their data without significant cost, data loss, or technical barrier — typically created by proprietary formats.",
889    altDefs: "Vendor lock-in in agriculture often manifests as: proprietary data formats, no data export, platform-only APIs, or contractual barriers to switching.",
890    agExample: "Climate FieldView's proprietary shape file format for field boundaries creates mild lock-in. A platform with no export at all creates strong lock-in and fails ETA Gate G2.",
891    etaRelevance: "Gate G3 explicitly addresses lock-in as an abusive practice. Low Commons Fit scores often correlate with lock-in.",
892    related: ["G2 Rights & Control","G3 No Abuse","Commons Fit","Data Portability","Open Source"],
893    refs: [],
894    steward: "OpenTEAM",
895    framework: ["eta"]
896  },
897  {
898    letter: "M",
899    name: "Machine Readable",
900    emoji: "🤖",
901    accentBg: "#dbeafe",
902    tags: ["dtap","fair"],
903    shortDef: "Data available in a format that a computer, AI, or algorithm can process automatically — such as CSV, JSON, GeoJSON, XML, or NetCDF.",
904    altDefs: "Open Data Handbook: 'Machine-readable data must be structured data. Data in a format that can be automatically read and processed by a computer.'",
905    agExample: "Planting dates entered in a CSV are machine readable. The same data in a scanned PDF are not, even if legible to humans.",
906    etaRelevance: "Scored in DTAP D4 (Machine-Readability, 10 pts). Also relevant to ETA Interoperability category.",
907    related: ["Interoperable (FAIR)","D4 Machine-Readability","FAIR Principles","Open Data","Metadata"],
908    refs: ["https://opendatahandbook.org/glossary/en/terms/machine-readable/"],
909    steward: "Open Data Handbook",
910    framework: ["dtap","fair"]
911  },
912  {
913    letter: "O",
914    name: "Open Source",
915    emoji: "📂",
916    accentBg: "#d8f3dc",
917    tags: ["eta"],
918    shortDef: "Software or hardware designs that are publicly accessible and can be modified and shared by all users, enabling transparency, community inspection, and collaborative improvement.",
919    altDefs: "Common open-source licenses relevant to ETA: GPL v3, AGPL, Apache 2.0, MIT (software); CERN OHL, TAPR OHL (hardware); CC BY, CC BY-SA (documentation/data).",
920    agExample: "farmOS is open source (GPLv2), inspectable and self-hostable. This earns strong ETA scores in G1 (Transparency) and Commons Fit.",
921    etaRelevance: "Open source is not required by ETA but strongly favors G1, G2, G3, Commons Fit, and Accessibility scores. Source-available or proprietary tools must demonstrate equivalent openness to score well.",
922    related: ["Commons Fit","G1 Transparency","G2 Rights & Control","Open Data","Lock-in"],
923    refs: [],
924    steward: "OSI / OpenTEAM",
925    framework: ["eta"]
926  },
927  {
928    letter: "P",
929    name: "Provenance",
930    emoji: "🗂️",
931    accentBg: "#fdf5d9",
932    tags: ["dtap"],
933    shortDef: "The documented history of how data was collected, processed, and curated — including collection methods, instruments, calibration records, and any transformations applied.",
934    altDefs: "W3C PROV standard defines provenance as 'information about entities, activities, and people involved in producing a piece of data or thing.'",
935    agExample: "A crop yield dataset with documented GPS equipment models, calibration intervals, combine settings, and known field-edge artifacts has strong provenance.",
936    etaRelevance: "DTAP D2 (Provenance) directly scores this dimension. Weak provenance is one of the most common DTAP flags.",
937    related: ["D2 Provenance","Accuracy","Metadata","DTAP Score","Machine Readable"],
938    refs: [],
939    steward: "OpenTEAM / W3C PROV",
940    framework: ["dtap"]
941  },
942  {
943    letter: "P",
944    name: "Purpose Limitation",
945    emoji: "🎯",
946    accentBg: "#fde8e0",
947    tags: ["eta","gdpr"],
948    shortDef: "The principle that personal or agricultural data is only collected for specific, explicit, and legitimate purposes and is not used beyond those stated purposes without fresh consent.",
949    altDefs: "GDPR Art. 5: data shall be 'collected for specified, explicit and legitimate purposes and not further processed in a manner that is incompatible with those purposes.'",
950    agExample: "Using precision irrigation sensor data to generate targeted marketing for pesticides — without farmer consent — violates purpose limitation and fails ETA Gate G3.",
951    etaRelevance: "Evaluated in ETA Gate G3 (No Abuse) and DTAP D1 (Consent). A clear statement of data use purpose is required to pass G1 (Transparency).",
952    related: ["G3 No Abuse","Consent","Data Ethics","Data Minimization","GDPR"],
953    refs: ["https://gdpr-info.eu/art-5-gdpr/"],
954    steward: "GDPR / OpenTEAM",
955    framework: ["eta","dtap"]
956  },
957  {
958    letter: "R",
959    name: "Resilience",
960    emoji: "💪",
961    accentBg: "#d8f3dc",
962    tags: ["eta"],
963    shortDef: "A scored ETA Hardware category (0–5) measuring whether a tool can be repaired, maintained, and operated by its users without dependence on a single vendor or service for continued operation.",
964    altDefs: "Resilience asks: Can farmers fix this tool? Are spare parts available? Does it work offline? Would it survive the vendor closing?",
965    agExample: "A soil moisture sensor with an open repair manual, standard connectors, and local data storage scores high on Resilience. One requiring factory servicing for any repair scores low.",
966    etaRelevance: "One of 4 scored categories in ETA Hardware (15 pts max). Reflects right-to-repair principles and long-term agricultural technology resilience.",
967    related: ["Commons Fit","Open Source","G4 Safety & Stewardship","Lock-in"],
968    refs: [],
969    steward: "OpenTEAM",
970    framework: ["eta"]
971  },
972  {
973    letter: "R",
974    name: "Resource Ethics",
975    emoji: "🌱",
976    accentBg: "#d8f3dc",
977    tags: ["eta"],
978    shortDef: "A scored ETA Hardware category (0–5) measuring the environmental impact of a tool: energy use, materials sourcing, end-of-life disposal, and lifecycle footprint.",
979    altDefs: "Resource Ethics covers: embedded carbon in manufacturing, energy draw during operation, repairability, recyclability, and conflict mineral sourcing.",
980    agExample: "A solar-powered soil sensor made from standard components with a published disassembly guide scores high. A battery-hungry sensor with non-replaceable proprietary batteries scores low.",
981    etaRelevance: "One of 4 scored categories in ETA Hardware only (15 pts max). No equivalent in Software ETA — replaced by Data Ethics.",
982    related: ["Commons Fit","Resilience","ETA Score"],
983    refs: [],
984    steward: "OpenTEAM",
985    framework: ["eta"]
986  },
987  {
988    letter: "R",
989    name: "Reusable (FAIR Principle)",
990    emoji: "♻️",
991    accentBg: "#dbeafe",
992    tags: ["fair","dtap"],
993    shortDef: "Data and metadata should be well-described, clearly licensed, and formatted to enable (re)use, replication, and combination with other datasets in different settings.",
994    altDefs: "FAIR: 'the ultimate goal of FAIR is to optimise the reuse of data.' Requires rich provenance, clear licenses, and domain-relevant community standards.",
995    agExample: "A yield dataset released under CC0 with ISO 11783 field codes, documented methodology, and complete metadata is reusable. One with no license and ad-hoc column names is not.",
996    etaRelevance: "Supports DTAP D3 (Access) and D6 (Governance). Tools enabling reusable data output earn higher ETA Commons Fit scores.",
997    related: ["FAIR Principles","Accessible (FAIR)","Open Data","D3 Access","Metadata"],
998    refs: ["https://www.go-fair.org/fair-principles/"],
999    steward: "GO FAIR",
1000    framework: ["fair","dtap"]
1001  },
1002  {
1003    letter: "S",
1004    name: "Social Ethics",
1005    emoji: "🤝",
1006    accentBg: "#f0e8ff",
1007    tags: ["eta"],
1008    shortDef: "A scored ETA Hardware category (0–5) measuring whether a tool's design, supply chain, and deployment respect worker rights, community equity, and inclusive access.",
1009    altDefs: "Social Ethics asks: Were workers involved in manufacturing fairly treated? Does the tool accommodate diverse users including those with limited connectivity or tech literacy?",
1010    agExample: "A hardware tool designed with small-scale farmer input, manufactured without conflict minerals, with a multilingual interface scores high on Social Ethics.",
1011    etaRelevance: "One of 4 scored categories in ETA Hardware (15 pts max). Connects to data justice and the CARE Principles.",
1012    related: ["Data Justice","CARE Principles","Accessibility","ETA Score","Resource Ethics"],
1013    refs: [],
1014    steward: "OpenTEAM",
1015    framework: ["eta"]
1016  },
1017  {
1018    letter: "T",
1019    name: "Transparency",
1020    emoji: "🪟",
1021    accentBg: "#d8f3dc",
1022    tags: ["eta","gdpr"],
1023    shortDef: "The condition in which individuals are informed and have access to comprehensive information about their data — what is being collected, how it is used, and who has access.",
1024    altDefs: "EU AI Act Principle: systems must be transparent about their capabilities and limitations. GDPR: lawful basis for processing must be communicated clearly.",
1025    agExample: "An ETA-compliant tool publishes a plain-language data use policy, explains its AI/ML methods, and notifies farmers of data sharing before it occurs.",
1026    etaRelevance: "The foundation of ETA Gate G1. Also measured in Commons Fit (tool documentation) and Data Ethics (secondary use disclosure).",
1027    related: ["G1 Transparency","Data Transparency","Accountability","Open Source"],
1028    refs: [],
1029    steward: "EU AI Act / OpenTEAM / GDPR",
1030    framework: ["eta","dtap"]
1031  },
1032  {
1033    letter: "V",
1034    name: "Versioning",
1035    emoji: "🔄",
1036    accentBg: "#fdf5d9",
1037    tags: ["dtap","eta"],
1038    shortDef: "The practice of tracking and documenting changes to a tool, dataset, or glossary over time — enabling reproducibility, comparison, and transparent evolution of content.",
1039    altDefs: "Semantic versioning (v1.0.0): Major.Minor.Patch. ETA framework documents use this convention. Dataset versioning typically follows calendar versioning (YYYY.MM).",
1040    agExample: "DTAP D5 (Longitudinal Integrity) scores datasets that maintain version history with changelogs. ETA cards include the framework version used for the assessment.",
1041    etaRelevance: "Required for DTAP D5 (Longitudinal Integrity) scoring. Recommended for all ETA assessments to enable comparison over time.",
1042    related: ["D5 Longitudinal Integrity","DTAP Score","Assessment Card","Metadata"],
1043    refs: [],
1044    steward: "OpenTEAM",
1045    framework: ["dtap","eta"]
1046  }
1047];
1048
1049// ── RENDER ──────────────────────────────────────────────────────────────────
1050function tagClass(t){
1051  return {eta:'tag-eta',dtap:'tag-dtap',fair:'tag-fair',gdpr:'tag-gdpr',role:'tag-role',data:'tag-data'}[t]||'tag-data';
1052}
1053function tagLabel(t){
1054  return {eta:'ETA',dtap:'DTAP',fair:'FAIR',gdpr:'GDPR',role:'Role',data:'Data'}[t]||t;
1055}
1056
1057function renderGlossary(terms){
1058  const container = document.getElementById('glossary-content');
1059  const letters = [...new Set(terms.map(t=>t.letter))].sort();
1060  container.innerHTML = '';
1061  
1062  letters.forEach(letter => {
1063    const letterTerms = terms.filter(t=>t.letter===letter);
1064    const section = document.createElement('div');
1065    section.className = 'letter-section';
1066    section.id = `letter-${letter}`;
1067    section.innerHTML = `
1068      <div class="letter-anchor">
1069        <span class="letter-glyph">${letter}</span>
1070        <div class="letter-rule"></div>
1071      </div>
1072    `;
1073    letterTerms.forEach(term => {
1074      section.appendChild(termCard(term));
1075    });
1076    container.appendChild(section);
1077  });
1078  
1079  updateAlphaCounts(terms);
1080  document.getElementById('count-badge').textContent = `${terms.length} term${terms.length!==1?'s':''}`;
1081  document.getElementById('empty-state').classList.toggle('visible', terms.length===0);
1082}
1083
1084function termCard(term){
1085  const div = document.createElement('div');
1086  div.className = 'term-card';
1087  div.dataset.name = term.name.toLowerCase();
1088  div.dataset.def = (term.shortDef+' '+term.altDefs).toLowerCase();
1089  div.dataset.tags = term.tags.join(',');
1090  div.dataset.framework = (term.framework||[]).join(',');
1091  
1092  const tagsHtml = term.tags.map(t=>`<span class="term-tag ${tagClass(t)}">${tagLabel(t)}</span>`).join('');
1093  const relatedHtml = (term.related||[]).map(r=>`<a class="related-pill" href="#" onclick="searchFor('${r}');return false">${r}</a>`).join('');
1094  const refsHtml = (term.refs||[]).filter(r=>r).map(r=>`<a href="${r}" target="_blank" rel="noopener">${r}</a>`).join('<br>');
1095  
1096  div.innerHTML = `
1097    <div class="eta-strip"></div>
1098    <div class="term-header" onclick="toggleCard(this)">
1099      <div class="term-accent" style="background:${term.accentBg}">${term.emoji}</div>
1100      <div class="term-header-text">
1101        <div class="term-name">${term.name}</div>
1102        <div class="term-def">${term.shortDef}</div>
1103        <div class="term-tags">${tagsHtml}</div>
1104      </div>
1105      <button class="term-toggle" aria-label="Expand term">
1106        <svg viewBox="0 0 10 10" stroke-width="2" stroke-linecap="round"><path d="M2 4l3 3 3-3"/></svg>
1107      </button>
1108    </div>
1109    <div class="term-body">
1110      <div class="term-body-inner">
1111        <div class="detail-block full">
1112          <div class="detail-label">Full Definition</div>
1113          <div class="detail-content">${term.shortDef}</div>
1114        </div>
1115        ${term.altDefs ? `<div class="detail-block full">
1116          <div class="detail-label">Alternative / Framework Definitions</div>
1117          <div class="detail-content">${term.altDefs}</div>
1118        </div>` : ''}
1119        ${term.agExample ? `<div class="detail-block full">
1120          <div class="detail-label">Agricultural / ETA Example</div>
1121          <div class="detail-content">${term.agExample}</div>
1122        </div>` : ''}
1123        ${term.etaRelevance ? `<div class="detail-block">
1124          <div class="detail-label">ETA/DTAP Relevance</div>
1125          <div class="detail-content">${term.etaRelevance}</div>
1126        </div>` : ''}
1127        ${relatedHtml ? `<div class="detail-block">
1128          <div class="detail-label">Related Terms</div>
1129          <div class="detail-content">${relatedHtml}</div>
1130        </div>` : ''}
1131        ${refsHtml ? `<div class="detail-block">
1132          <div class="detail-label">References</div>
1133          <div class="detail-content">${refsHtml}</div>
1134        </div>` : ''}
1135        ${term.steward ? `<div class="detail-block">
1136          <div class="detail-label">Steward</div>
1137          <div class="detail-content">${term.steward}</div>
1138        </div>` : ''}
1139      </div>
1140    </div>
1141  `;
1142  return div;
1143}
1144
1145function toggleCard(header){
1146  const card = header.closest('.term-card');
1147  const isOpen = card.classList.contains('open');
1148  // Optionally close others
1149  card.classList.toggle('open', !isOpen);
1150}
1151
1152function updateAlphaCounts(terms){
1153  document.querySelectorAll('.alpha-nav a[data-letter]').forEach(a=>{
1154    const letter = a.dataset.letter;
1155    const count = terms.filter(t=>t.letter===letter).length;
1156    a.querySelector('.alpha-count').textContent = count || '';
1157    a.style.opacity = count ? '1' : '0.3';
1158    a.style.pointerEvents = count ? '' : 'none';
1159  });
1160}
1161
1162// ── SEARCH & FILTER ──────────────────────────────────────────────────────────
1163let activeFilter = 'all';
1164let searchQuery = '';
1165
1166function applyFilters(){
1167  const q = searchQuery.toLowerCase().trim();
1168  const filtered = TERMS.filter(term => {
1169    const matchFilter = activeFilter === 'all' || (term.framework||[]).includes(activeFilter) || term.tags.includes(activeFilter);
1170    const matchSearch = !q || 
1171      term.name.toLowerCase().includes(q) ||
1172      term.shortDef.toLowerCase().includes(q) ||
1173      (term.altDefs||'').toLowerCase().includes(q) ||
1174      (term.agExample||'').toLowerCase().includes(q) ||
1175      (term.tags||[]).some(t=>t.includes(q));
1176    return matchFilter && matchSearch;
1177  });
1178  renderGlossary(filtered);
1179}
1180
1181document.getElementById('search-input').addEventListener('input', function(){
1182  searchQuery = this.value;
1183  applyFilters();
1184});
1185
1186document.querySelectorAll('.filter-pill').forEach(btn=>{
1187  btn.addEventListener('click', ()=>{
1188    document.querySelectorAll('.filter-pill').forEach(b=>b.classList.remove('active'));
1189    btn.classList.add('active');
1190    activeFilter = btn.dataset.filter;
1191    applyFilters();
1192  });
1193});
1194
1195function searchFor(term){
1196  const input = document.getElementById('search-input');
1197  input.value = term;
1198  searchQuery = term;
1199  activeFilter = 'all';
1200  document.querySelectorAll('.filter-pill').forEach(b=>b.classList.remove('active'));
1201  document.querySelector('[data-filter="all"]').classList.add('active');
1202  applyFilters();
1203  input.focus();
1204  window.scrollTo({top:200,behavior:'smooth'});
1205}
1206
1207// ── ALPHA NAV ACTIVE STATE ────────────────────────────────────────────────────
1208const obs = new IntersectionObserver(entries=>{
1209  entries.forEach(e=>{
1210    if(e.isIntersecting){
1211      const letter = e.target.id.replace('letter-','');
1212      document.querySelectorAll('.alpha-nav a').forEach(a=>a.classList.toggle('active', a.dataset.letter===letter));
1213    }
1214  });
1215},{threshold:.3,rootMargin:'-100px 0px -60% 0px'});
1216
1217// ── INIT ──────────────────────────────────────────────────────────────────
1218renderGlossary(TERMS);
1219document.querySelectorAll('.letter-section').forEach(s=>obs.observe(s));
1220</script>
1220
1221</body>
1222</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.