Repository navigation
Expand file tree
/
Copy pathreport.html
More file actions
625 lines (600 loc) · 32.1 KB
/
Copy pathreport.html
File metadata and controls
625 lines (600 loc) · 32.1 KB
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
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="canonical" href="https://ghostmaxxing.vecna.eu/report.html" />
<title>Report a deployment — Ghostmaxxing</title>
<link rel="icon" type="image/svg+xml" href="/images/logo/mark-onlight.svg">
<meta name="description"
content="Five questionnaires for people who have met a real face-recognition deployment: stopped by it, built it, operate it, signed for it, or noticed it. Read the safety guidance first." />
<meta property="og:title" content="Report a deployment — Ghostmaxxing" />
<meta property="og:description"
content="Report facial-recognition deployments only when it is safe for you to share." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://ghostmaxxing.vecna.eu/report.html" />
<meta property="og:image" content="https://ghostmaxxing.vecna.eu/images/social/ghostmaxxing-generic.jpg" />
<meta property="og:image:type" content="image/jpeg" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:alt" content="Ghostmaxxing: test face-recognition camouflage in your browser." />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Report a deployment — Ghostmaxxing" />
<meta name="twitter:description"
content="Report facial-recognition deployments only when it is safe for you to share." />
<meta name="twitter:image" content="https://ghostmaxxing.vecna.eu/images/social/ghostmaxxing-generic.jpg" />
<meta name="twitter:image:alt" content="Ghostmaxxing: test face-recognition camouflage in your browser." />
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebPage",
"@id": "https://ghostmaxxing.vecna.eu/report.html#webpage",
"url": "https://ghostmaxxing.vecna.eu/report.html",
"name": "Report a deployment — Ghostmaxxing",
"description": "Guidance for safely reporting real-world face-recognition deployments. This page introduces a separate submission channel operated by NINA using GlobaLeaks; Ghostmaxxing does not operate or receive submissions through this page.",
"author": {
"@type": "Person",
"@id": "https://me.vecna.eu/#vecna",
"name": "Claudio Agosti",
"alternateName": "vecna",
"url": "https://me.vecna.eu/",
"sameAs": ["https://github.com/vecna", "https://retro.pizza/@vecna"]
},
"publisher": {
"@type": "Organization",
"@id": "https://nina.watch/#organization",
"name": "NINA / Universal Digital Union",
"url": "https://nina.watch/"
},
"mainEntity": {
"@type": "ContactPoint",
"contactType": "Third-party whistleblowing submission channel operated by NINA",
"url": "https://raccontaci.nina.watch/",
"description": "The submission node is separately operated by NINA and based on GlobaLeaks; it is not a Ghostmaxxing service."
}
}
</script>
<link rel="stylesheet" href="/styles/styles.css" />
<link rel="stylesheet" href="/styles/pages.css" />
<link rel="stylesheet" href="/styles/content-pages.css" />
<link rel="stylesheet" href="/styles/report-page.css" />
<link rel="stylesheet" href="/styles/beta-notice.css" />
<script defer src="/pages-js/nav.js"></script>
</head>
<body>
<div class="gm-beta" id="gmBeta" role="dialog" aria-modal="true"
aria-labelledby="gmBetaTitle">
<div class="gm-beta__tape">
<h1 class="gm-beta__title" id="gmBetaTitle">This page is beta
<small>Still in development · content may change</small>
</h1>
</div>
<button class="gm-beta__close" type="button" aria-label="Close the beta notice and continue to the page">
<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<path d="M4 4 20 20 M20 4 4 20" />
</svg>
</button>
<p class="gm-beta__hint" aria-hidden="true">Continue anyway</p>
</div>
<script>
(function () {
var el = document.getElementById('gmBeta');
var KEY = 'gm-beta:' + window.location.pathname;
var dismissed = false;
try { dismissed = sessionStorage.getItem(KEY) === '1'; } catch (e) {}
if (dismissed) { el.remove(); return; }
function close() {
try { sessionStorage.setItem(KEY, '1'); } catch (e) {}
el.remove();
document.removeEventListener('keydown', onKey);
}
function onKey(e) { if (e.key === 'Escape') close(); }
el.querySelector('.gm-beta__close').addEventListener('click', close);
document.addEventListener('keydown', onKey);
el.querySelector('.gm-beta__close').focus({ preventScroll: true });
})();
</script>
<!-- ===== SITE HEADER — canonical. Byte-identical on every page. =========
Only two things may differ per page: aria-current="page" on the link to
the current page, and the optional .gm-site-nav__extra slot.
Styling: styles/chrome.css. Behaviour: lab-js/nav.js.
==================================================================== -->
<header class="gm-site-header">
<a class="gm-site-wordmark" href="/" aria-label="Ghostmaxxing homepage">
<img class="gm-site-wordmark__mark" src="/images/logo/mark-color.svg"
width="40" height="40" alt aria-hidden="true" />
<span class="gm-site-wordmark__text">
<span class="gm-site-wordmark__title">Ghostmaxxing</span>
<span class="gm-site-wordmark__sub">A public lab for testing
camouflage</span>
</span>
</a>
<nav class="gm-site-nav" aria-label="Primary">
<a class="gm-site-chip" href="/fediverse.html">in the Fediverse</a>
<div class="gm-site-nav__group">
<button class="gm-site-nav__trigger" aria-expanded="false"
aria-controls="gmSiteMenu">Know more <span
aria-hidden="true">▾</span></button>
<div class="gm-site-menu" id="gmSiteMenu">
<div>
<p class="gm-site-menu__kicker">Informative</p>
<ul>
<li><a href="/about.html">Vision & about</a></li>
<li><a href="/genealogy.html">The genealogy of the read</a></li>
<li><a href="/report.html" aria-current="page">Report a
deployment</a></li>
<li><a href="/workshops.html">Workshops</a></li>
</ul>
</div>
<div>
<p class="gm-site-menu__kicker">Technology</p>
<ul>
<li><a href="/lab.html">Open the lab ↗</a></li>
<li><a href="/projects/">Related projects</a></li>
<li><a href="/docs/">Docs</a></li>
<li><a
href="https://github.com/vecna/ghostmaxxing">Code</a></li>
</ul>
</div>
</div>
</div>
<a class="gm-site-cta" href="/report.html">Leak to us ↗</a>
</nav>
</header>
<main
class="editorial-homepage content-page editorial-homepage--svg-footer-band">
<div class="editorial-homepage__shell">
<section class="content-page__header-area" aria-labelledby="page-title">
<span class="content-page__kicker">Leak to us</span>
<h1 id="page-title">Document face recognition in the real world.</h1>
<p class="content-page__lead">
Ghostmaxxing cannot test every deployed system.
For this, we need allies:
<b>First-hand reports help us learn what is installed, who runs it,
what fails and who paid for it.</b>
</p>
<p class="content-page__deck">
Read the security guidance before choosing a reporting channel.
</p>
</section>
<div class="content-page__layout">
<article class="content-page__main gm-prose">
<section class="content-section" id="questionnaires">
<h2>There are <i>five</i> points of expertise we want to hear from:</h2>
<div class="audience-grid">
<article class="audience-card">
<span class="audience-card__icon"><img
src="/images/report/affected-individuals.svg"
alt /></span>
<h3>You were stopped, flagged or misidentified.</h3>
<p>A system read your face and something followed: a question,
a refusal, an escort to the
door. You do not need to know how it worked. What happened
to you is the evidence.</p>
<div class="audience-card__actions"
aria-label="Open the stopped, flagged or misidentified questionnaire">
<a class="audience-card__access"
href="https://raccontaci.nina.watch/#/submission?context=7aa60cfe-9632-4d47-8c6a-884264e62751"
target="_blank" rel="noopener noreferrer">
<img src="/images/report/https-access.svg" alt />
<span>Open via HTTPS</span>
</a>
<a class="audience-card__access audience-card__access--tor"
href="http://g3p4uwkfsbrnx2ydlriz7rq7kh6h4jowmkrfbq7xpvhltbarf5qumgyd.onion/#/submission?context=7aa60cfe-9632-4d47-8c6a-884264e62751"
target="_blank" rel="noopener noreferrer">
<img src="/images/report/tor-onion.svg" alt />
<span>Open via Tor</span>
</a>
</div>
</article>
<article class="audience-card">
<span class="audience-card__icon"><img
src="/images/report/builders-testers.svg" alt /></span>
<h3>You build, integrate or test the technology.</h3>
<p>You know how a system is assembled, where one falls short
of its spec sheet, or you have run
a Ghostyle or a workshop look against a real system and can
tell us how it performed. The
form shows only the questions for what you can speak to.</p>
<div class="audience-card__actions"
aria-label="Open the builders, integrators and testers questionnaire">
<a class="audience-card__access"
href="https://raccontaci.nina.watch/#/submission?context=e377d24d-86e4-4d66-8baf-03e619f5f492"
target="_blank" rel="noopener noreferrer">
<img src="/images/report/https-access.svg" alt />
<span>Open via HTTPS</span>
</a>
<a class="audience-card__access audience-card__access--tor"
href="http://g3p4uwkfsbrnx2ydlriz7rq7kh6h4jowmkrfbq7xpvhltbarf5qumgyd.onion/#/submission?context=e377d24d-86e4-4d66-8baf-03e619f5f492"
target="_blank" rel="noopener noreferrer">
<img src="/images/report/tor-onion.svg" alt />
<span>Open via Tor</span>
</a>
</div>
</article>
<article class="audience-card">
<span class="audience-card__icon"><img
src="/images/report/control-panel.svg" alt /></span>
<h3>You operate it, day to day.</h3>
<p>Describe its daily use, instructions and management requirements.</p>
<div class="audience-card__actions"
aria-label="Open the day-to-day operators questionnaire">
<a class="audience-card__access"
href="https://raccontaci.nina.watch/#/submission?context=9bb68569-5ff9-49b9-a1f9-fe364c40ac51"
target="_blank" rel="noopener noreferrer">
<img src="/images/report/https-access.svg" alt />
<span>Open via HTTPS</span>
</a>
<a class="audience-card__access audience-card__access--tor"
href="http://g3p4uwkfsbrnx2ydlriz7rq7kh6h4jowmkrfbq7xpvhltbarf5qumgyd.onion/#/submission?context=9bb68569-5ff9-49b9-a1f9-fe364c40ac51"
target="_blank" rel="noopener noreferrer">
<img src="/images/report/tor-onion.svg" alt />
<span>Open via Tor</span>
</a>
</div>
</article>
<article class="audience-card">
<span class="audience-card__icon"><img
src="/images/report/paperwork-signoff.svg" alt /></span>
<h3>You bought it, sold it or signed it off.</h3>
<p>Contracts, tenders, budgets, vendor pitches, impact
assessments: you know the purchase terms and agreements.</p>
<div class="audience-card__actions"
aria-label="Open the contracts and procurement questionnaire">
<a class="audience-card__access"
href="https://raccontaci.nina.watch/#/submission?context=d61471f5-34b3-4b9f-8c79-ed0fa591f330"
target="_blank" rel="noopener noreferrer">
<img src="/images/report/https-access.svg" alt />
<span>Open via HTTPS</span>
</a>
<a class="audience-card__access audience-card__access--tor"
href="http://g3p4uwkfsbrnx2ydlriz7rq7kh6h4jowmkrfbq7xpvhltbarf5qumgyd.onion/#/submission?context=d61471f5-34b3-4b9f-8c79-ed0fa591f330"
target="_blank" rel="noopener noreferrer">
<img src="/images/report/tor-onion.svg" alt />
<span>Open via Tor</span>
</a>
</div>
</article>
<article class="audience-card">
<span class="audience-card__icon"><img
src="/images/report/public-sightings.svg" alt /></span>
<h3>You noticed something, or none of the above fits.</h3>
<p>A camera, a kiosk, a sign, a pair of glasses you did not
expect. Or something about face
recognition the other four questionnaires do not ask for. No
inside access needed.</p>
<div class="audience-card__actions"
aria-label="Open the sightings and everything else questionnaire">
<a class="audience-card__access"
href="https://raccontaci.nina.watch/#/submission?context=3e5b86b0-cc9d-4cdc-90f4-614a2f254173"
target="_blank" rel="noopener noreferrer">
<img src="/images/report/https-access.svg" alt />
<span>Open via HTTPS</span>
</a>
<a class="audience-card__access audience-card__access--tor"
href="http://g3p4uwkfsbrnx2ydlriz7rq7kh6h4jowmkrfbq7xpvhltbarf5qumgyd.onion/#/submission?context=3e5b86b0-cc9d-4cdc-90f4-614a2f254173"
target="_blank" rel="noopener noreferrer">
<img src="/images/report/tor-onion.svg" alt />
<span>Open via Tor</span>
</a>
</div>
</article>
</div>
</section>
<section class="content-section" id="before-you-write">
<h2>Before you write anything.</h2>
<p>
If you want to report, remember that browsers might save and
record digital activities; it happens
automatically and without explicit knowledge.
Consider these hints before preparing a report.
</p>
<ul class="opsec-list">
<li>Do not tell people who might disclose your reporting plans.</li>
<li>Do not use your employer's device, account or network to
read this page or to prepare
anything.</li>
<li>Report what you already know and can access within your normal permissions.
Do not seek additional material for us.</li>
<li>Photos and documents carry hidden information: timestamps,
device IDs, GPS coordinates, printer
tracking dots. We do not publish material we receive; we use
it as a lead. When in doubt,
describe what you saw in your own words instead of uploading
the original file.</li>
<li>When you are ready, use <a
href="https://www.torproject.org/download/" target="_blank"
rel="noopener noreferrer">Tor Browser</a> to open the
submission page, from a device and a
network that are not tied to your workplace.</li>
</ul>
<div class="callout">
<p>
These practices reduce avoidable exposure; no reporting
channel removes every risk. Choose the
precautions that match your situation, and do not continue if
doing so would put you in danger.
If you need help assessing that risk, a digital-rights or
whistleblower-support organisation may
be able to help before you send anything.
</p>
</div>
<h3>Further guidance</h3>
<p>The whistleblowing
platform is based on <a href="https://www.globaleaks.org"
target="_blank" rel="noopener noreferrer">GlobaLeaks</a>, the
open-source system used by newsrooms and NGOs worldwide, and it
is reachable over Tor.
</p>
<p>
Each questionnaire asks only what a person in that position can
answer, and almost every field is optional, answer only what you
know!
<b>You can always add to a report later with
your receipt code</b>.
</p>
<p>
These resources offer further help with digital security and ongoing risks.
</p>
<div class="resource-grid">
<a class="resource-card" href="https://ssd.eff.org/"
target="_blank" rel="noopener noreferrer">
<h3>Surveillance Self-Defense</h3>
<p>EFF's general guide to digital security, from the basics to
specific tools and scenarios.</p>
</a>
<a class="resource-card"
href="https://holistic-security.tacticaltech.org/"
target="_blank"
rel="noopener noreferrer">
<h3>Holistic Security</h3>
<p>Tactical Tech's guide for activists. Digital, physical and
psychological safety treated as one
problem.</p>
</a>
<a class="resource-card"
href="https://whistleblowingnetwork.org/" target="_blank"
rel="noopener noreferrer">
<h3>Whistleblowing International Network</h3>
<p>Directory of national whistleblower-support organisations
that can advise on legal protection
where you live.</p>
</a>
</div>
</section>
<section class="content-section" id="what-we-do">
<h2>What happens to what you send.</h2>
<p>
The submission screen names the editorial and research team members
who will read your report. These rules apply to every channel:
</p>
<ul class="opsec-list">
<li><strong>Nothing you send is published as received.</strong>
Reports are leads, not articles. A
document or a screenshot is used to verify and to direct the
next test, and it stays inside the
reporting system.</li>
<li><strong>Everything is corroborated before it is
used.</strong> Each questionnaire ends by asking
how you know and what would confirm it. A single-source claim
is treated as a question to
investigate, not as a finding to repeat.</li>
<li><strong>We follow your restrictions.</strong> At the end of
each form you can tell us to use a report only as a lead, not
to quote you, not to name a place
or an organisation, or not to contact anyone before asking
you. We honour that.</li>
<li><strong>What returns to the public is minimised.</strong> A
finding becomes public only after
editorial and security review, stripped of anything that
points to a source: aggregated where
several reports agree, redacted where one does not. Verified
findings can change the
<a href="/references/">reference archive</a>, the tests run in
the
<a href="/lab.html">lab</a> and what is published
<a href="/fediverse.html">in the Fediverse</a>. Confidential
reports never go there directly.</li>
</ul>
<p>
<br>
We may suggest a newsroom or advocacy organisation through your receipt code.
We will not forward anything without your agreement.
</p>
<p>
Reports that receive no further activity are deleted from the
reporting system after 180 days. A
case that is still open can be kept longer by the people
handling it, and you can ask, through the
receipt, for a report to be deleted at any time.
</p>
<h3>What we cannot promise.</h3>
<ul class="opsec-list">
<li><strong>Legal protection.</strong> Whistleblower laws,
including the EU directive and its
national versions, mostly protect reports made to your
employer, to a designated authority or,
under conditions, to the public. Reporting to a research
project is usually not one of the
protected routes. If your position depends on legal
protection, talk to a whistleblower-support
organisation or a lawyer first; the resources above can point
you to one.</li>
<li><strong>Intervention in your case.</strong> We investigate
systems. We are not able to appeal a
decision, represent you or act on your behalf, though we can
suggest who might.</li>
<li><strong>A reply on a deadline.</strong> A person reads new
reports at least weekly and answers
through the receipt conversation. Nothing is forgotten, but
this is volunteer work.</li>
<li><strong>Payment.</strong> We do not pay for information, and
we would treat an offer to sell it
as a reason for caution.</li>
</ul>
</section>
<section class="content-section" id="how-it-works">
<h2>How the submission works.</h2>
<p>
The reporting node is a separate GlobaLeaks installation with
two addresses. The first is a normal
HTTPS site. The second is an Onion Service, opened with Tor
Browser, which hides from your network
and from us where you are connecting from, and resists selective
blocking. Prefer the Onion address
whenever you can.
</p>
<div class="receipt-callout">
<span class="receipt-callout__code"
aria-hidden="true">.onion</span>
<p>
HTTPS: <a href="https://raccontaci.nina.watch" target="_blank"
rel="noopener noreferrer">raccontaci.nina.watch</a><br />
Tor: <a
href="http://g3p4uwkfsbrnx2ydlriz7rq7kh6h4jowmkrfbq7xpvhltbarf5qumgyd.onion/"
target="_blank" rel="noopener noreferrer"><code>g3p4uwkfsbrnx2ydlriz7rq7kh6h4jowmkrfbq7xpvhltbarf5qumgyd.onion</code></a>
</p>
</div>
<ul class="opsec-list">
<li>You do not create an account, and nothing in the forms asks
for your name or contact details.</li>
<li>Most fields are optional. Answer what you can and skip the
rest.</li>
<li>Write in the language you think in. We read Italian and
English directly and translate the
rest.</li>
<li>Files are optional everywhere. A description in your own
words is often safer and just as
useful.</li>
<li>If Whistleblowing is a new concept for you, check out <a
href="https://en.wikipedia.org/wiki/Whistleblower"
target="_blank" rel="noopener noreferrer">this Wikipedia
article</a>.</li>
</ul>
</section>
<section class="content-section" id="after-you-submit">
<h2>Submitting is the beginning, not the end.</h2>
<p>
At the end of the form you are given a private <strong>receipt
code</strong>.
</p>
<div class="receipt-callout">
<span class="receipt-callout__code" aria-hidden="true">•••• ••••
•••• ••••</span>
<p>
That code is the only way, for you or for us, to reopen your
report. Save it somewhere safe,
offline if you can. If it is lost, the conversation cannot be
recovered. That is by design.
</p>
</div>
<p>
Come back and use it. We may have follow-up questions, we may
want to check one detail before a
finding moves forward, and you may want to add something you
left out or withdraw something you
regret. A source who keeps that thread open helps an
investigation go much further than a single
anonymous drop. Secure reporting works when there is a network
of technical, legal and editorial
support around it rather than a box that swallows a report and
returns nothing, which is the same
thinking behind GlobaLeaks' own
<a
href="https://globaleaks.org/2026/06/23/supporting-the-house-of-whistleblowers-expanding-the-ecosystem-around-secure-reporting/"
target="_blank" rel="noopener noreferrer">House of
Whistleblowers</a> initiative.
</p>
</section>
</article>
<aside class="content-page__aside" aria-label="Page sections">
<h2>Jump to</h2>
<nav>
<a href="#questionnaires">The five questionnaires</a>
<a href="#before-you-write">Before you write anything</a>
<a href="#what-we-do">What happens to what you send</a>
<a href="#how-it-works">How the submission works</a>
<a href="#after-you-submit">After you submit</a>
</nav>
</aside>
</div>
</div>
</main>
<!-- ===== SITE FOOTER — canonical. Byte-identical on every page. =========
Pyre band, soil edge, link row. Replaces the .camera-band div, which
pointed at images/homepage-camera-band.svg — not in the repo, so it only
ever painted a faint gradient. The camera icons are INLINE <svg>: the
files in images/icons/ are class-driven and render black through <img>.
==================================================================== -->
<footer class="gm-site-footer">
<div class="gm-site-footer__pyre" data-mode="full">
<img src="/images/motifs/pyre.svg" alt aria-hidden="true" />
</div>
<img class="gm-site-footer__edge" src="/images/motifs/soil-edge.svg" alt
aria-hidden="true" />
<div class="gm-site-footer__row">
<div class="gm-site-footer__cams">
<svg class="cam" viewBox="0 0 100 100" aria-hidden="true"
focusable="false">
<path class="cam-mount" d="M6,29 H94" stroke-width="7"></path>
<path class="cam-shell" d="M20,29 A30,30 0 0 0 80,29 Z"></path>
<circle class="cam-lens" cx="50" cy="44" r="15"></circle>
<circle class="cam-iris" id="iris-dome" cx="50" cy="44"
r="6.6"></circle>
<circle class="cam-glint" cx="45.5" cy="39.5" r="2.55"></circle>
</svg>
<svg class="cam" viewBox="0 0 100 100" aria-hidden="true"
focusable="false">
<path class="cam-mount" d="M80,26 V92" stroke-width="6"></path>
<path class="cam-mount" d="M80,30 H44" stroke-width="6"></path>
<path class="cam-mount" d="M52,30 V40" stroke-width="5"></path>
<rect class="cam-shell" x="10" y="40" width="72" height="30"
rx="7"></rect>
<rect class="cam-panel" x="54" y="47" width="22" height="16"
rx="3"></rect>
<g class="cam-dot"><circle cx="60" cy="51" r="2"></circle><circle
cx="70" cy="51" r="2"></circle><circle cx="60" cy="59"
r="2"></circle><circle cx="70" cy="59" r="2"></circle></g>
<circle class="cam-lens" cx="32" cy="55" r="12"></circle>
<circle class="cam-iris" id="iris-street" cx="32" cy="55"
r="5.3"></circle>
<circle class="cam-glint" cx="28.4" cy="51.2" r="2"></circle>
</svg>
<svg class="cam" viewBox="0 0 100 100" aria-hidden="true"
focusable="false">
<path class="cam-mount" d="M8,44 L2,32 M92,44 L98,32"
stroke-width="5"></path>
<path class="cam-shell"
d="M50,45 C65,25 90,25 90,45 C90,65 65,65 50,45 C35,25 10,25 10,45 C10,65 35,65 50,45 Z"
stroke-linecap="round"></path>
<path class="cam-glare" d="M22,52 L34,38 M29,53 L37,44"></path>
<path class="cam-glare" d="M66,52 L78,38 M73,53 L81,44"></path>
<circle class="cam-iris cam-iris--void" id="iris-glasses-l" cx="28"
cy="45" r="9"></circle>
<circle class="cam-iris cam-iris--void" id="iris-glasses-r" cx="72"
cy="45" r="9"></circle>
</svg>
<svg class="cam" viewBox="0 0 100 100" aria-hidden="true"
focusable="false">
<path class="cam-mount" d="M45,30 V12 M32,12 H58"
stroke-width="5"></path>
<rect class="cam-shell" x="16" y="36" width="66" height="34"
rx="5"></rect>
<path class="cam-mount" d="M12,30 H74 L84,40"
stroke-width="5"></path>
<circle class="cam-lens" cx="60" cy="51" r="14"></circle>
<circle class="cam-iris" id="iris-bullet" cx="60" cy="51"
r="6.2"></circle>
<circle class="cam-glint" cx="55.8" cy="46.8" r="2.4"></circle>
</svg>
</div>
<div class="gm-site-footer__links">
<a href="/docs/">Technical documentation</a>
<a href="https://github.com/vecna/ghostmaxxing">Code</a>
<a href="/loader.html">Video Loader</a>
<a href="/realtime.html">Latent Space Visualizer</a>
</div>
</div>
</footer>
</body>
</html>