File size: 72,783 Bytes
d511c9b
 
 
 
 
a21cf64
d511c9b
 
 
 
 
 
 
 
 
 
 
 
2b7bf9e
d511c9b
 
d10566a
 
 
 
 
d511c9b
d10566a
d511c9b
 
d10566a
d511c9b
2b7bf9e
 
 
 
a0f8a7d
3fb5a36
a0f8a7d
3fb5a36
 
 
2b7bf9e
 
d511c9b
d10566a
2b7bf9e
a0f8a7d
2b7bf9e
 
 
 
a0f8a7d
2b7bf9e
 
 
 
 
 
 
 
 
 
 
f0d64c0
3fb5a36
 
2b7bf9e
3fb5a36
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d10566a
d511c9b
d10566a
d511c9b
f0d64c0
29e12b1
 
 
 
a0f8a7d
d10566a
a0f8a7d
d511c9b
d10566a
 
 
 
 
 
 
 
2b7bf9e
3fb5a36
 
2b7bf9e
 
3fb5a36
 
2b7bf9e
 
3fb5a36
2b7bf9e
d10566a
2b7bf9e
 
d10566a
 
2b7bf9e
d10566a
8e24f52
 
 
 
 
 
a0f8a7d
8e24f52
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0779003
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d511c9b
 
 
 
a21cf64
 
d511c9b
21bdc73
d10566a
 
d511c9b
8e24f52
 
d511c9b
 
a0f8a7d
3fb5a36
 
 
 
 
 
 
 
a0f8a7d
 
3fb5a36
 
 
 
2b7bf9e
d511c9b
 
 
f0d64c0
8e24f52
a0f8a7d
8e24f52
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d511c9b
0779003
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29e12b1
d511c9b
 
 
 
 
 
 
 
 
 
 
3fb5a36
2b7bf9e
b953323
2b7bf9e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3a22d1d
5b25a06
20a4008
02150ec
1876cf7
998a0ae
8a2af49
b424ff7
 
a0f8a7d
b424ff7
2bdb5a9
23454f0
 
 
ce0a040
ac6377f
6836669
3c983a2
123f03b
5d06452
d927a7d
6c1070a
9feb4b6
27d2d58
 
 
 
 
a0f8a7d
27d2d58
1db799d
f0d64c0
 
 
 
b58ef1e
66455ab
 
fa2a472
 
f8b7ea1
d511c9b
 
 
 
 
 
 
 
 
 
 
21bdc73
 
 
 
 
d511c9b
 
 
5abca18
 
 
 
 
d511c9b
21bdc73
d511c9b
 
 
 
 
 
 
 
 
 
21bdc73
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a0f8a7d
21bdc73
 
d511c9b
 
 
 
 
 
 
 
 
 
 
 
a0f8a7d
d511c9b
 
a0f8a7d
 
 
 
 
 
 
d511c9b
2b7bf9e
 
 
 
29e12b1
 
 
d511c9b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a0f8a7d
 
d511c9b
 
 
 
 
2b7bf9e
 
 
 
 
 
 
 
 
 
 
 
 
 
a0f8a7d
2b7bf9e
 
 
 
 
 
 
 
3fb5a36
 
 
 
 
a21cf64
0779003
 
 
 
 
 
 
 
 
 
a21cf64
 
0779003
a21cf64
 
0779003
 
 
 
 
 
 
 
 
 
 
 
 
 
a21cf64
 
 
 
 
0779003
a21cf64
0779003
 
 
 
 
 
 
 
 
 
 
a21cf64
0779003
 
 
a21cf64
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0779003
 
 
a21cf64
 
 
 
0779003
 
 
 
 
a21cf64
 
0779003
 
 
a21cf64
 
 
 
0779003
 
a21cf64
 
 
 
 
 
 
0779003
 
a21cf64
 
 
 
 
 
2b7bf9e
 
a0f8a7d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29e12b1
 
 
 
 
 
 
 
 
 
 
 
2b7bf9e
a0f8a7d
2b7bf9e
a0f8a7d
2b7bf9e
29e12b1
 
2b7bf9e
 
29e12b1
2b7bf9e
29e12b1
2b7bf9e
a0f8a7d
 
 
3fb5a36
 
 
2b7bf9e
d10566a
 
a0f8a7d
 
 
 
 
 
 
 
 
 
 
 
 
2b7bf9e
 
 
 
 
 
 
 
 
 
 
 
f0d64c0
 
2b7bf9e
 
 
 
 
 
 
 
a0f8a7d
2b7bf9e
 
 
 
 
 
 
a0f8a7d
 
 
2b7bf9e
3fb5a36
 
 
 
2b7bf9e
 
 
d511c9b
 
3fb5a36
 
 
 
 
 
 
 
 
 
 
a0f8a7d
 
 
 
 
 
 
 
 
 
3fb5a36
a0f8a7d
 
3fb5a36
a0f8a7d
3fb5a36
 
 
 
 
 
a0f8a7d
 
 
 
 
 
 
3fb5a36
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2b7bf9e
 
 
 
 
 
3fb5a36
 
 
 
0779003
a0f8a7d
 
 
 
 
 
 
2b7bf9e
 
 
 
21bdc73
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d511c9b
 
 
 
 
 
21bdc73
 
d511c9b
 
bffed93
d511c9b
a0f8a7d
 
 
 
 
 
 
8e24f52
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a0f8a7d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8e24f52
 
a0f8a7d
8e24f52
a0f8a7d
8e24f52
a0f8a7d
 
 
 
 
 
 
 
 
8e24f52
 
a0f8a7d
8e24f52
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d511c9b
 
 
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
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>A11oy Holographic Operations — a11oy</title>
<!-- 0 runtime CDN. All 3D libs vendored in-image and served same-origin via the
     /static/3d/vendor/... importmap below (see VENDOR_MANIFEST.md). System fonts only. -->
<script type="importmap">
{
  "imports": {
    "three": "/static/3d/vendor/three/three.module.min.js",
    "three/webgpu": "/static/3d/vendor/three/three.webgpu.min.js",
    "three/addons/": "/static/3d/vendor/three/addons/"
  }
}
</script>
<style>
 :root{--bg:#05070d;--panel:#0b121b;--line:#1b2734;--teal:#39d3c4;--proof:#3af4c8;--gold:#e8c074;--cream:#eef3f6;--para:#9fb1bf;}
 *{box-sizing:border-box}
 html,body{margin:0;height:100%}
 /* Flex column so the 3D stage always fills the space left over by the header +
    tab strip, no matter how far they wrap. dvh (dynamic viewport height) tracks
    the mobile address-bar collapse; svh/100vh are fallbacks for older engines. */
 body{background:var(--bg);color:var(--cream);font:14px/1.5 ui-sans-serif,system-ui,Segoe UI,Roboto,Arial;
  overflow:hidden;display:flex;flex-direction:column;height:100vh;height:100svh;height:100dvh}
 header{padding:10px 16px;border-bottom:1px solid var(--line);background:linear-gradient(180deg,#08101a,#05070d);
  display:flex;align-items:center;gap:14px;flex-wrap:wrap;flex:0 0 auto}
 h1{font-size:16px;margin:0;letter-spacing:.4px}
 .badge{display:inline-block;font:10.5px ui-monospace,monospace;padding:2px 7px;border-radius:6px;
  border:1px solid var(--line);color:var(--gold);background:#10171f;white-space:nowrap}
 #backend{color:var(--teal)}
 /* Nav = a pinned ★ Featured row (flagships incl. Atlas, always visible) above a row of
    collapsible CATEGORY dropdowns. Replaces the old flat wall of ~84 pills so the flagship
    surfaces stand out and the rest group behind one-tap dropdowns. Accents are proof-teal
    (0x3af4c8) — NEVER purple (doctrine v11 palette). */
.tabs{display:flex;flex-direction:column;gap:0;padding:8px 12px;border-bottom:1px solid var(--line);
  background:#070d15;flex:0 0 auto;position:relative;z-index:18}
 .tabs[data-browse="true"],.tabs:focus-within{z-index:40}
 .navrow{display:flex;gap:6px;flex-wrap:nowrap;align-items:center;overflow-x:auto;
  -webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:2px}
 .navrow::-webkit-scrollbar{display:none}
 .navlabel{font:9.5px ui-monospace,monospace;color:var(--para);letter-spacing:.6px;
  text-transform:uppercase;opacity:.7;margin-right:2px;flex:0 0 auto}
 .tab{font:11.5px ui-monospace,monospace;padding:6px 12px;border-radius:7px;border:1px solid var(--line);
  background:#0a121b;color:var(--para);cursor:pointer;letter-spacing:.3px;transition:.12s;white-space:nowrap}
 .tab:hover{border-color:var(--proof);color:var(--cream)}
 .tab[data-active="true"]{background:#12202b;color:var(--cream);border-color:var(--proof);
  box-shadow:0 0 0 1px var(--proof) inset}
 /* Featured (flagship) pills — proof-teal star + accent so Brain/Anatomy stand out. */
 .tab--feat{border-color:#20323e;color:var(--cream);background:#0b1620}
 .tab--feat .star{color:var(--proof);margin-right:5px}
 .tab--feat[data-active="true"]{border-color:var(--proof);
  box-shadow:0 0 0 1px var(--proof) inset,0 0 10px rgba(58,244,200,.25)}
 /* Category dropdown buttons — ▸ caret rotates to ▾ when the panel is open. */
 .catbtn{font:11px ui-monospace,monospace;padding:6px 11px;border-radius:7px;border:1px solid var(--line);
  background:#0a121b;color:var(--para);cursor:pointer;letter-spacing:.3px;white-space:nowrap;
  display:inline-flex;align-items:center;gap:6px;transition:.12s}
 .catbtn:hover{border-color:var(--proof);color:var(--cream)}
 .catbtn .caret{font-size:9px;transition:transform .15s;color:var(--proof)}
 .catbtn[aria-expanded="true"]{color:var(--cream);border-color:var(--proof)}
 .catbtn[aria-expanded="true"] .caret{transform:rotate(90deg)}
 .catbtn[data-hasactive="true"]{box-shadow:0 0 0 1px var(--proof) inset}
 .catbtn .count{font-size:9px;color:var(--para);opacity:.7}
 /* Drop panel: the tabs of the currently-open category (only one open at a time). */
 .panel{display:none;gap:6px;flex-wrap:wrap;padding:8px;margin-top:2px;max-height:180px;
  overflow-y:auto;border:1px solid var(--line);border-radius:9px;background:#08111a}
 .panel[data-open="true"]{display:flex}
 .navtools{display:grid;grid-template-columns:minmax(260px,1fr) minmax(210px,auto) auto auto;
  gap:7px;align-items:center;min-height:34px}
 .surface-search{width:100%;min-width:0;border:1px solid var(--line);border-radius:8px;
  background:#08111a;color:var(--cream);padding:7px 10px;font:11.5px ui-monospace,monospace;
  outline:none;letter-spacing:.2px}
 .surface-search:focus{border-color:var(--proof);box-shadow:0 0 0 1px var(--proof)}
 .surface-search::placeholder{color:#70818e}
 .navmeta{font:10px ui-monospace,monospace;color:var(--para);white-space:nowrap}
 .navmode{border:1px solid var(--line);border-radius:8px;background:#0a121b;color:var(--para);
  padding:7px 10px;font:10.5px ui-monospace,monospace;cursor:pointer;white-space:nowrap}
 .navmode:hover{border-color:var(--proof);color:var(--cream)}
 .active-surface{display:flex;align-items:center;gap:7px;min-width:0;padding:0 8px;
  border-left:1px solid var(--line);font:10px ui-monospace,monospace;color:var(--para)}
 .active-surface span{font-size:9px;letter-spacing:.8px;color:var(--proof)}
 .active-surface strong{font-weight:500;color:var(--cream);overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap;max-width:32vw}
 .surface-browser{display:none;position:absolute;left:12px;right:12px;top:calc(100% + 1px);
  padding:9px;border:1px solid var(--line);border-top-color:#20323e;border-radius:0 0 10px 10px;
  background:rgba(7,13,21,.98);box-shadow:0 18px 40px rgba(0,0,0,.56);z-index:20}
 .tabs[data-browse="true"] .surface-browser{display:flex;flex-direction:column;gap:7px}
 #search-panel{position:absolute;left:12px;right:12px;top:calc(100% + 1px);z-index:22;
  margin:0;box-shadow:0 18px 40px rgba(0,0,0,.56)}
 #stage-wrap{position:relative;flex:1 1 auto;min-height:0;width:100%}
 #stage{position:absolute;inset:0}
 #stage canvas{display:block;width:100%;height:100%;touch-action:none}
 #fallback{position:absolute;inset:0;display:none;align-items:center;justify-content:center;
  text-align:center;color:var(--para);padding:24px;font:13px ui-monospace,monospace}
 #surface-caption{padding:4px 14px;border-top:1px solid var(--line);background:#060c14;
  color:var(--para);font:10.5px ui-monospace,monospace;letter-spacing:.2px;flex:0 0 auto;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;z-index:6}
 #surface-caption:empty{display:none}
footer{padding:6px 14px;border-top:1px solid var(--line);flex:0 0 auto;
  background:#070d15;color:var(--para);font:10.5px ui-monospace,monospace;letter-spacing:.3px;z-index:6;
  white-space:normal;overflow:visible;line-height:1.35}
 a{color:var(--teal);text-decoration:none}

 /* ---- Mobile / touch (<=640px) ---------------------------------------- */
 @media (max-width:640px){
  header{padding:8px 12px;gap:8px}
  h1{font-size:14px;flex:1 1 100%}
  /* Keep only the essential badges visible; hide the noisier ones on small screens. */
  header .badge{font-size:9.5px;padding:2px 6px}
  #three-rev-badge,#cdn-badge{display:none}
  .tabs{padding:7px 10px;gap:5px}
  .navtools{grid-template-columns:minmax(0,1fr) auto}
  .navmeta,.active-surface{display:none}
  /* Featured + category rows each scroll horizontally so they never build a tall wall;
     the tapped-open panel wraps below, height-capped so it never shoves the stage off. */
  .navrow{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
  .navrow::-webkit-scrollbar{display:none}
  .navlabel{position:sticky;left:0;background:#070d15;z-index:1}
  .tab,.catbtn{padding:7px 11px;font-size:11px;flex:0 0 auto}
  .surface-browser{left:8px;right:8px;max-height:52vh;overflow:auto}
  .panel[data-open="true"]{flex-wrap:wrap;max-height:34vh;overflow-y:auto}
  footer{font-size:9px;padding:5px 10px}
  /* Give the 3D stage a guaranteed usable share of the screen on phones (100dvh-safe). */
  #stage-wrap{min-height:46vh}
 }
 @media (max-width:640px) and (orientation:landscape){
  #stage-wrap{min-height:56vh}
 }

 /* ---- Landing / intro overlay (Dev4, Wave R) --------------------------- */
 /* A coherent honest entry panel that showcases the Brain + the frontier estate
    + the public /verify, sitting over the live 3D stage (which boots underneath).
    Additive: dismisses to reveal the estate; every stat carries an honest label and
    degrades to NO-LIVE-DATA if its same-origin endpoint 404s / is unreachable. */
 #intro{position:fixed;inset:0;z-index:80;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:16px;padding:26px 20px;overflow-y:auto;
  background:radial-gradient(120% 120% at 50% 0%,rgba(11,22,32,.90),rgba(5,7,13,.96));
  -webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);text-align:center}
 #intro[hidden]{display:none}
 #intro .intro-eyebrow{font:10.5px ui-monospace,monospace;letter-spacing:1.2px;
  text-transform:uppercase;color:var(--gold);opacity:.85}
 #intro h2{margin:0;font-size:clamp(19px,3.4vw,30px);letter-spacing:.3px;color:var(--cream);
  font-weight:600;max-width:min(720px,92vw)}
 #intro .intro-sub{margin:0;max-width:min(640px,90vw);color:var(--para);
  font:13.5px/1.55 ui-sans-serif,system-ui,Segoe UI,Roboto,Arial}
 #intro .cards{display:flex;gap:12px;flex-wrap:wrap;justify-content:center;
  max-width:min(880px,95vw);margin-top:2px}
 #intro .card{flex:1 1 240px;min-width:210px;max-width:280px;text-align:left;
  border:1px solid var(--line);border-radius:12px;background:#0a121bcc;padding:14px 15px;
  display:flex;flex-direction:column;gap:8px}
 #intro .card h3{margin:0;font:12.5px ui-monospace,monospace;letter-spacing:.4px;color:var(--cream)}
 #intro .card p{margin:0;font:12px/1.5 ui-sans-serif,system-ui,Segoe UI,Roboto,Arial;color:var(--para)}
 #intro .stat{font:22px ui-monospace,monospace;color:var(--proof);line-height:1.1}
 #intro .stat small{font-size:11px;color:var(--para);display:block;margin-top:2px;letter-spacing:.2px}
 #intro .lbl{align-self:flex-start;font:9.5px ui-monospace,monospace;padding:2px 7px;border-radius:6px;
  border:1px solid var(--line);letter-spacing:.4px}
 #intro .lbl[data-state="live"]{color:var(--proof);border-color:#20323e}
 #intro .lbl[data-state="degraded"]{color:var(--gold);border-color:#3a2f1a}
 #intro .card .go{margin-top:auto;font:11px ui-monospace,monospace;padding:7px 10px;border-radius:8px;
  border:1px solid var(--line);background:#0b1620;color:var(--cream);cursor:pointer;text-align:center;
  transition:.12s;text-decoration:none}
 #intro .card .go:hover{border-color:var(--proof);color:var(--cream)}
 #intro .enter{margin-top:6px;font:12.5px ui-monospace,monospace;padding:10px 22px;border-radius:9px;
  border:1px solid var(--proof);background:#12202b;color:var(--cream);cursor:pointer;letter-spacing:.4px;
  box-shadow:0 0 0 1px var(--proof) inset,0 0 12px rgba(58,244,200,.22);transition:.12s}
 #intro .enter:hover{box-shadow:0 0 0 1px var(--proof) inset,0 0 18px rgba(58,244,200,.4)}
 #intro .intro-foot{font:10px ui-monospace,monospace;color:var(--para);opacity:.8;letter-spacing:.3px;
  max-width:min(760px,92vw)}
 #intro-reopen{cursor:pointer;background:#10171f}
 @media (max-width:640px){
  #intro{gap:12px;padding:20px 14px;justify-content:flex-start}
  #intro .cards{gap:9px}
  #intro .card{padding:11px 12px;min-width:0;flex:1 1 100%;max-width:420px}
 }

 /* ---- Universal evidence rail ----------------------------------------- */
 .evidence-rail{position:fixed;right:12px;bottom:48px;z-index:65;width:min(390px,calc(100vw - 24px));
  border:1px solid var(--line);border-radius:11px;background:rgba(7,13,21,.97);
  box-shadow:0 14px 40px rgba(0,0,0,.55);font:11px/1.45 ui-monospace,monospace}
 .evidence-rail__toggle{width:100%;display:flex;align-items:center;justify-content:space-between;
  gap:10px;padding:8px 11px;border:0;border-radius:10px;background:#0b1620;color:var(--cream);
  font:11px ui-monospace,monospace;cursor:pointer;text-align:left}
 .evidence-rail__toggle:focus-visible{outline:2px solid var(--proof);outline-offset:2px}
 .evidence-rail__state{color:var(--gold);white-space:nowrap}
 .evidence-rail[data-state="OBSERVED"] .evidence-rail__state{color:var(--proof)}
 .evidence-rail__panel{border-top:1px solid var(--line);padding:10px 11px;color:var(--para)}
 .evidence-rail__panel[hidden]{display:none}
 .evidence-rail__title{display:block;color:var(--cream);margin-bottom:5px}
 .evidence-rail__row{display:grid;grid-template-columns:88px minmax(0,1fr);gap:8px;padding:2px 0}
 .evidence-rail__row span:first-child{color:#738796;text-transform:uppercase;font-size:9px}
 .evidence-rail__row code{overflow-wrap:anywhere;color:var(--teal)}
 .evidence-rail__links{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}
 .evidence-rail__links a{border:1px solid var(--line);border-radius:6px;padding:4px 7px}
 @media (max-width:640px){.evidence-rail{right:8px;left:8px;bottom:42px;width:auto}.evidence-rail__panel{max-height:38vh;overflow:auto}}
 @media (prefers-reduced-motion:reduce){.evidence-rail *{scroll-behavior:auto!important;transition:none!important}}

</style>
</head>
<body>
<header>
 <h1>A11oy Holographic Operations</h1>
 <span class="badge" id="estate-observation-badge" data-state="UNVERIFIED">Evidence status: UNVERIFIED</span>
 <span class="badge" id="backend">renderer: …</span>
 <button class="badge" id="gpu-toggle" title="Toggle WebGPU compute path (falls back to WebGL2 if the browser/driver can't provide a WebGPU device). WebGPU is not production-safe on all platforms — doctrine." style="cursor:pointer;background:#10171f">⚡ WebGPU: off</button>
 <span class="badge" id="three-rev-badge">three r<span id="three-rev">…</span></span>
 <span class="badge" id="cdn-badge">0 runtime CDN</span>
 <span class="badge">Λ = Conjecture 1</span>
 <button class="badge" id="intro-reopen" title="Reopen the landing overview (Brain · frontier estate · public verify)">◇ intro</button>
 <a href="/verify" class="badge" title="Public receipt verifier — paste a signed Khipu receipt / DSSE envelope for a PASS/FAIL panel">✓ verify</a>
 <a href="/" style="margin-left:auto;font:11px ui-monospace,monospace">← a11oy</a>
</header>
<nav class="tabs" id="tabs" aria-label="Estate surface command center" data-browse="false">
 <div class="navtools">
  <input class="surface-search" id="surface-search" type="search"
   placeholder="Find a surface (Ctrl/⌘ K)" autocomplete="off" spellcheck="false"
   aria-label="Find an estate surface" aria-controls="search-panel"/>
  <div class="active-surface" id="active-surface" aria-live="polite"><span>ACTIVE</span><strong>Loading surface</strong></div>
  <span class="navmeta" id="surface-results-count">All surfaces indexed</span>
  <button class="navmode" id="nav-mode" type="button" aria-expanded="false" aria-controls="surface-browser">Browse surfaces</button>
 </div>
 <div class="panel" id="search-panel" role="region" aria-label="Surface search results" data-open="false"></div>
 <div class="surface-browser" id="surface-browser" role="region" aria-label="All estate surfaces">
  <div class="navrow" id="featured-row"><span class="navlabel">★ Featured</span></div>
  <div class="navrow" id="cat-row"><span class="navlabel">Categories</span></div>
  <div id="cat-panels"></div>
 </div>
</nav>
<div id="stage-wrap">
 <div id="stage"></div>
 <div id="fallback">3D unavailable on this device — the holographic estate needs a WebGL2 or WebGPU canvas.<br>
  All underlying data is still available as JSON at the per-surface endpoints.</div>
 <!-- Landing overlay (Dev4): coherent honest entry over the live estate. -->
  <div id="intro" role="dialog" aria-modal="true" tabindex="-1" aria-label="a11oy holographic estate — landing overview" hidden>
  <div class="intro-eyebrow">SZL Holdings · Doctrine v11 · Λ = Conjecture 1</div>
  <h2>The governed agentic substrate, rendered as a holographic estate</h2>
  <p class="intro-sub">Every value each surface shows traces to a real same-origin a11oy endpoint and
   carries its own honesty label (MEASURED / MODELED / SAMPLE / STRUCTURAL-ONLY). Nothing here is
   invented. Start with the Brain, walk the frontier estate, or verify a signed receipt yourself.</p>
  <div class="cards">
   <div class="card" id="card-brain">
    <span class="lbl" data-state="degraded" id="brain-lbl">NO-LIVE-DATA</span>
    <h3>Brain — live knowledge graph</h3>
    <div class="stat" id="brain-stat">—<small id="brain-sub">distinct artifacts (harvested)</small></div>
    <p id="brain-note">The estate's own harvested graph. Distinct artifacts is the honest headline;
     the raw node count is larger (dominated by arXiv co-author nodes).</p>
    <button class="go" data-go="brain">Open the Brain →</button>
   </div>
   <div class="card" id="card-estate">
    <span class="lbl" data-state="degraded" id="estate-lbl">NO-LIVE-DATA</span>
    <h3>Frontier estate</h3>
    <div class="stat" id="estate-stat">—<small>3D surfaces, each wired to a live backend</small></div>
    <p>Attention, reasoning, governance, proof, energy, defense and more — grouped behind the
     category dropdowns above. locked-proven formulas = 8 (never inflated).</p>
    <button class="go" data-go="frontierindex">Explore the estate →</button>
   </div>
   <div class="card" id="card-verify">
    <span class="lbl" data-state="live">PUBLIC</span>
    <h3>Verify it yourself</h3>
    <div class="stat">✓<small>signed Khipu receipt / DSSE envelope</small></div>
    <p>Receipts sign on state changes, never on reads. Paste a receipt id or envelope into the
     public verifier for an independent PASS / FAIL panel — no login.</p>
    <a class="go" href="/verify">Open /verify →</a>
   </div>
  </div>
  <button class="enter" id="intro-enter">Enter the estate →</button>
  <div class="intro-foot">Doctrine v11 · locked = 8 {F1,F4,F7,F11,F12,F18,F19,F22} · Λ = Conjecture 1 ·
   Khipu BFT = Conjecture 2 · 0 runtime CDN (three.js vendored in-image) · trust &lt; 100%</div>
 </div>
</div>
<aside id="evidence-rail" class="evidence-rail" data-state="UNVERIFIED"
 aria-label="Active surface evidence" aria-live="polite">
 <button id="evidence-rail-toggle" class="evidence-rail__toggle" type="button"
  aria-expanded="false" aria-controls="evidence-rail-panel">
  <span>Evidence · active surface</span><span id="evidence-rail-state" class="evidence-rail__state">UNVERIFIED</span>
 </button>
 <div id="evidence-rail-panel" class="evidence-rail__panel" hidden>
  <strong id="evidence-rail-title" class="evidence-rail__title">Loading surface</strong>
  <div class="evidence-rail__row"><span>Surface</span><code id="evidence-rail-id">—</code></div>
  <div class="evidence-rail__row"><span>Contract</span><code id="evidence-rail-contract">—</code></div>
  <div class="evidence-rail__row"><span>Runtime</span><span id="evidence-rail-runtime">NOT_EVALUATED</span></div>
  <div class="evidence-rail__row"><span>Readiness</span><span id="evidence-rail-readiness">NOT_EVALUATED</span></div>
  <div class="evidence-rail__links"><a href="/api/a11oy/v1/readiness/tab-matrix?view=summary">Readiness JSON</a><a href="/api/build-info">Build identity</a><a href="/verify">Verify receipt</a></div>
 </div>
</aside>
<div id="surface-caption" title=""></div>
<footer>Doctrine v11 · locked = 8 @ c7c0ba17 · Λ = Conjecture 1 · Khipu BFT = Conjecture 2 ·
 shared szl3d toolkit (Dev0) · every value carries its honesty label · trust &lt; 100%</footer>

<script type="module">
import szl3d from "/static/3d/szl3d/szl3d_boot.js";
import * as live from "/static/3d/szl3d/szl3d_live.js";
import * as label from "/static/3d/szl3d/szl3d_label.js";
import * as THREE from "three";

// The 9 surface slots the other devs fill. Lazy-loaded per tab.
const SURFACES = [
  { id: "integritycontrol", cat: "governance", short: "Integrity Control Plane", title: "Integrity Control Plane · read-only Waqay Security Loop + Claim Integrity manifests · PROPOSAL_ONLY boundary · effectors=0 · signatures honestly UNSIGNED until a real signer and external verifier exist", mod: "/static/3d/surfaces/integritycontrol.js" },
  { id: "atlas", cat: "map", flag: true,       title: "Atlas",       mod: "/static/3d/surfaces/atlas.js" },
  { id: "loopforge", cat: "brain", title: "Loop Forge · bounded kernel-gated recursion · separate referee halts invariant breaches · MODELED reward signals", mod: "/static/3d/surfaces/loopforge.js" },
  { id: "frontier", cat: "map",    title: "Frontier",    mod: "/static/3d/surfaces/frontier.js" },
  { id: "neuromorphic", cat: "more", title: "Neuromorphic", mod: "/static/3d/surfaces/neuromorphic.js" },
  { id: "interpretability", cat: "governance", title: "Interpretability", mod: "/static/3d/surfaces/interpretability.js" },
  { id: "circuits", cat: "governance", title: "Attribution Graph \u00b7 Circuit Tracing", mod: "/static/3d/surfaces/circuits.js" },
  { id: "worldmodel", cat: "attention", title: "World Model", mod: "/static/3d/surfaces/worldmodel.js" },
  { id: "qec", cat: "proof", title: "Topological QEC", mod: "/static/3d/surfaces/qec.js" },
  { id: "episodic", cat: "brain", title: "Episodic Memory", mod: "/static/3d/surfaces/episodic.js" },
  { id: "testtime", cat: "reasoning", title: "Test-Time Compute", mod: "/static/3d/surfaces/testtime.js" },
  { id: "ssm", cat: "attention", title: "State-Space (Mamba-3)", mod: "/static/3d/surfaces/ssm.js" },
  { id: "genie", cat: "attention", title: "Genie World-Model", mod: "/static/3d/surfaces/genie.js" },
  { id: "specdecode", cat: "attention", title: "Speculative Decoding", mod: "/static/3d/surfaces/specdecode.js" },
  { id: "flowmatch", cat: "attention", title: "Flow Matching", mod: "/static/3d/surfaces/flowmatch.js" },
  { id: "dllm", cat: "attention", title: "Diffusion LLM", mod: "/static/3d/surfaces/dllm.js" },
  { id: "moe", cat: "attention", title: "MoE Router", mod: "/static/3d/surfaces/moe.js" },
  { id: "formalmath", cat: "governance", title: "Formal-Math Retrieval", mod: "/static/3d/surfaces/formalmath.js" },
  { id: "ccattest", cat: "proof", title: "Confidential-Compute Attest", mod: "/static/3d/surfaces/ccattest.js" },
  { id: "attestinfer", cat: "proof", title: "Attested Inference", mod: "/static/3d/surfaces/attestinfer.js" },
  { id: "pcai", cat: "proof", title: "Proof-Carrying Attested Inference", mod: "/static/3d/surfaces/pcai.js" },
  { id: "ringattn", cat: "attention", title: "Ring Attention", mod: "/static/3d/surfaces/ringattn.js" },
  { id: "grpo", cat: "rl", title: "GRPO Reward Dynamics", mod: "/static/3d/surfaces/grpo.js" },
  { id: "kvcache", cat: "quant", title: "KV-Cache H2O", mod: "/static/3d/surfaces/kvcache.js" },
  { id: "mla", cat: "attention", title: "Latent Attention (MLA)", mod: "/static/3d/surfaces/mla.js" },
  { id: "blt", cat: "attention", title: "Byte-Latent Patching", mod: "/static/3d/surfaces/blt.js" },
  { id: "nsa", cat: "attention", title: "Native Sparse Attention", mod: "/static/3d/surfaces/nsa.js" },
  { id: "kan", cat: "attention", title: "Kolmogorov-Arnold Network", mod: "/static/3d/surfaces/kan.js" },
  { id: "steering", cat: "governance", title: "Steering Vectors (ActAdd / RepE)", mod: "/static/3d/surfaces/steering.js" },
  { id: "titans", cat: "brain", title: "Titans Neural Long-Term Memory", mod: "/static/3d/surfaces/titans.js" },
  { id: "mor", cat: "reasoning", title: "Mixture-of-Recursions (adaptive depth)", mod: "/static/3d/surfaces/mor.js" },
  { id: "goat", cat: "attention", title: "GOAT Optimal-Transport Attention", mod: "/static/3d/surfaces/goat.js" },
  { id: "kla", cat: "attention", title: "Kaczmarz Linear Attention", mod: "/static/3d/surfaces/kla.js" },
  { id: "hrm", cat: "reasoning", title: "Hierarchical Reasoning Model", mod: "/static/3d/surfaces/hrm.js" },
  { id: "pfield", cat: "anatomy", title: "Pressure-Field Coordination", mod: "/static/3d/surfaces/pfield.js" },
  { id: "qhall", cat: "governance", title: "Quantum-Inspired Hallucination UQ", mod: "/static/3d/surfaces/qhall.js" },
  { id: "aimc", cat: "attention", title: "Analog In-Memory Attention", mod: "/static/3d/surfaces/aimc.js" },
  { id: "ternary", cat: "quant", title: "Ternary 1.58-bit Weights", mod: "/static/3d/surfaces/ternary.js" },
  { id: "sement", cat: "governance", title: "Semantic-Entropy Uncertainty", mod: "/static/3d/surfaces/sement.js" },
  { id: "inplacettt", cat: "reasoning", title: "In-Place Test-Time Training", mod: "/static/3d/surfaces/inplacettt.js" },
  { id: "nested", cat: "brain", title: "Nested Learning (multi-timescale)", mod: "/static/3d/surfaces/nested.js" },
  { id: "matgran", cat: "brain", title: "Matryoshka Representation Granularity", mod: "/static/3d/surfaces/matgran.js" },
  { id: "graphmem", cat: "brain", title: "Multi-Graph Agentic Memory", mod: "/static/3d/surfaces/graphmem.js" },
  { id: "elf", cat: "attention", title: "Continuous-Embedding Flow LM", mod: "/static/3d/surfaces/elf.js" },
  { id: "s3search", cat: "quant", title: "Stratified Denoise Search", mod: "/static/3d/surfaces/s3search.js" },
  { id: "slidesparse", cat: "quant", title: "Structured-Sparse Layout Packing", mod: "/static/3d/surfaces/slidesparse.js" },
  { id: "catq", cat: "quant", title: "Calibration Ternary Quant", mod: "/static/3d/surfaces/catq.js" },
  { id: "rauq", cat: "governance", title: "Attention-Pattern Uncertainty", mod: "/static/3d/surfaces/rauq.js" },
  { id: "agentcoh", cat: "brain", title: "Multi-Agent Memory Coherence", mod: "/static/3d/surfaces/agentcoh.js" },
  { id: "energy", cat: "energy",      title: "Energy",      mod: "/static/3d/surfaces/energy.js" },
  { id: "fabric", cat: "defense",      title: "Fabric",      mod: "/static/3d/surfaces/fabric.js" },
  { id: "pnt", cat: "defense",         title: "PNT",         mod: "/static/3d/surfaces/pnt.js" },
  { id: "counter-uas", cat: "defense", title: "Counter-UAS", mod: "/static/3d/surfaces/counter-uas.js" },
  { id: "governance", cat: "governance", flag: true,  title: "Governance",  mod: "/static/3d/surfaces/governance.js" },
  { id: "pinn", cat: "defense",        title: "PINN",        mod: "/static/3d/surfaces/pinn.js" },
  { id: "router", cat: "defense",      title: "Router",      mod: "/static/3d/surfaces/router.js" },
  { id: "anatomy", cat: "anatomy",     title: "Anatomy",     mod: "/static/3d/surfaces/anatomy.js" },
  { id: "anatomy_body", cat: "anatomy", flag: true, title: "Anatomy · Living Body", mod: "/static/3d/surfaces/anatomy_body.js" },
  { id: "estate", cat: "map",      title: "Estate",      mod: "/static/3d/surfaces/estate.js" },
  { id: "muon", cat: "attention",        title: "Muon Orthogonalized-Momentum Optimizer", mod: "/static/3d/surfaces/muon.js" },
  { id: "specexec", cat: "attention",    title: "Tree Speculative Execution",             mod: "/static/3d/surfaces/specexec.js" },
  { id: "nvfp4", cat: "quant",       title: "NVFP4 4-bit Training Format",            mod: "/static/3d/surfaces/nvfp4.js" },
  { id: "keyless", cat: "attention",     title: "Keyless Attention (Value-Only Cache)",     mod: "/static/3d/surfaces/keyless.js" },
  { id: "gitthoughts", cat: "reasoning", title: "GitOfThoughts (Version-Controlled Reasoning)", mod: "/static/3d/surfaces/gitthoughts.js" },
  { id: "herotq", cat: "quant",      title: "HeRo-Q Hessian-Conditioned Quantization",    mod: "/static/3d/surfaces/herotq.js" },
  { id: "dla", cat: "attention",         title: "Dynamic Linear Attention",                    mod: "/static/3d/surfaces/dla.js" },
  { id: "ctxready", cat: "reasoning",    title: "Context-Ready Transformer",                   mod: "/static/3d/surfaces/ctxready.js" },
  { id: "opera", cat: "reasoning",       title: "OPERA Perplexity-Reward Alignment",           mod: "/static/3d/surfaces/opera.js" },
  { id: "brain", cat: "brain", flag: true,       title: "Brain — live knowledge graph",                mod: "/static/3d/surfaces/brain.js" },
  { id: "zkinfer", cat: "proof",     title: "zkML Proof-of-Inference (Cryptographic Receipts)", mod: "/static/3d/surfaces/zkinfer.js" },
  { id: "flower", cat: "brain", title: "Flower Brain", mod: "/static/3d/surfaces/flower.js" },
  { id: "agentmem", cat: "brain",    title: "AgentMem · Λ-Governed Agent Memory (synthesis)",   mod: "/static/3d/surfaces/agentmem.js" },
  { id: "edgefusion", cat: "energy",  title: "EdgeFusion · Λ-Gated Energy-Proportional Sensor Fusion (synthesis)", mod: "/static/3d/surfaces/edgefusion.js" },
  { id: "evalarena", cat: "governance", flag: true, title: "Eval Arena · Governed Eval / Red-Team", mod: "/static/3d/surfaces/evalarena.js" },
  { id: "vqc", cat: "energy",         title: "Governed VQC · Parameter-Shift Hybrid QML (MODELED)", mod: "/static/3d/surfaces/vqc.js" },
  { id: "harness", cat: "governance",     title: "Governed Model Harness · Behavior Transfer",         mod: "/static/3d/surfaces/harness.js" },
  { id: "aigov", cat: "governance",       title: "AI Governance Conformance · Λ-Advisory Readiness (crosswalk)", mod: "/static/3d/surfaces/aigov.js" },
  { id: "fmverif", cat: "proof",     title: "Proof-Carrying Inference (Machine-Checkable Certificates)", mod: "/static/3d/surfaces/fmverif.js" },
  { id: "supplychain", cat: "proof", title: "Model-Artifact Provenance (SLSA / in-toto / Rekor / C2PA)", mod: "/static/3d/surfaces/supplychain.js" },
  { id: "hybridssm", cat: "attention",   title: "HybridSSM · Attention vs State-Space vs Hybrid Frontier (synthesis)", mod: "/static/3d/surfaces/hybridssm.js" },
  { id: "governedagent", cat: "reasoning", title: "Governed Agent Loop · plan→act→self-eval→gate→retry", mod: "/static/3d/surfaces/governedagent.js" },
  { id: "governedrag", cat: "reasoning", title: "Governed RAG · Retrieval-with-Receipts",                mod: "/static/3d/surfaces/governedrag.js" },
  { id: "ecosystem", cat: "defense", flag: true,   title: "Harness · Ecosystem Status",                            mod: "/static/3d/surfaces/ecosystem.js" },
  { id: "brainquery", cat: "brain", flag: true,  title: "Brain Query · ask the graph (retrieval)",               mod: "/static/3d/surfaces/brainquery.js" },
  { id: "sovereign", cat: "energy", flag: true,   title: "Sovereign Local Model · status · doctrine self-test · Stage A/B · signed receipt", mod: "/static/3d/surfaces/sovereign.js" },
  { id: "brainbody", cat: "anatomy", title: "Anatomy \u00b7 Body lit by the Brain (pulse + energy)", mod: "/static/3d/surfaces/brainbody.js" },
  { id: "braincommand", cat: "brain", title: "Brain Command · pulse · subscribe/budget · signed receipt (Brain powering the ecosystem)", mod: "/static/3d/surfaces/braincommand.js" },
  { id: "mesh", cat: "defense", title: "Sovereign Mesh · Cross-Node Orchestration (status/route/quorum)", mod: "/static/3d/surfaces/mesh.js" },
  { id: "agenttts", cat: "reasoning", title: "Agent Test-Time Compute · Multi-Agent TTC (live)", mod: "/static/3d/surfaces/agenttts.js" },
  { id: "cryptopipeline", cat: "proof", title: "Crypto-Pipeline · End-to-End AI Lifecycle Verifiable Transcript (MODELED)", mod: "/static/3d/surfaces/cryptopipeline.js" },
  { id: "gateddelta", cat: "attention", title: "Gated Delta-Rule Linear Attention · state recall (MODELED)", mod: "/static/3d/surfaces/gateddelta.js" },
  { id: "agentops", cat: "reasoning", title: "Agent Ops · bounded operate loop (ground→act→self-eval→gate, Ouroboros-bounded, writer≠judge)", mod: "/static/3d/surfaces/agentops.js" },
  { id: "lgmi", cat: "governance", title: "LGMI · Λ-Governed Mechanistic Interpretability (synthesis)", mod: "/static/3d/surfaces/lgmi.js" },
  { id: "gnqs", cat: "quant", title: "GNQS · Governed-Norm Quantization Stability (synthesis)", mod: "/static/3d/surfaces/gnqs.js" },
  { id: "numericsdataset", cat: "quant", title: "Numerics Dataset · 1,328 frozen matrix cases + append-only engine evidence · preregistered inputs are never shown as measured results · MATCH/CONFLICT/UNAVAILABLE · proof uplift=0", mod: "/static/3d/surfaces/numericsdataset.js" },
  { id: "casta", cat: "defense", title: "CASTA · Clean-room Anomaly × Streaming Test-time Adaptation (synthesis)", mod: "/static/3d/surfaces/casta.js" },
  { id: "frontierindex", cat: "brain", title: "Frontier Index · honest ecosystem catalog · per-surface backend label + citations + native/fallback (self-audited)", mod: "/static/3d/surfaces/frontierindex.js" },
  { id: "sparsemoe", cat: "quant", title: "Extreme-Sparsity MoE Analyzer · activation-ratio ↔ inference-cost tradeoff (STRUCTURAL-ONLY)", mod: "/static/3d/surfaces/sparsemoe.js" },
  { id: "pddisagg", cat: "defense", title: "Prefill/Decode Disaggregation Map · colocated vs disaggregated latency across the mesh (STRUCTURAL-ONLY/ROADMAP)", mod: "/static/3d/surfaces/pddisagg.js" },
  { id: "execverify", cat: "reasoning", title: "Execution-Verified Synthesis Loop · eval → verified trajectory → corpus candidate → receipt (STRUCTURAL-ONLY)", mod: "/static/3d/surfaces/execverify.js" },
  { id: "opsdash", cat: "governance", flag: true, title: "Ops Dashboard · live estate health · GREEN/DEGRADED/UNAVAILABLE rollup + per-surface honest labels + /verify", mod: "/static/3d/surfaces/opsdash.js" },
  { id: "flowbrain", cat: "brain", flag: true, title: "FlowBrain · continuous belief-flow lens · tiers as thresholds crossed on x_t∈[0,1] + 1D-time⊗1D-node axis-factorization (STRUCTURAL-ONLY; borrows B[FM]² continuous-flow principle, NO EEG)", mod: "/static/3d/surfaces/flowbrain.js" },
  { id: "blocksparse", cat: "attention", title: "Learned Blockwise Top-k KV Sparse Attention · selection (MODELED)", mod: "/static/3d/surfaces/blocksparse.js" },
  { id: "confattest", cat: "governance", title: "Confidential-Compute Attestation + Action Gate · SIMULATED enclave quote → receipt · govern ACTIONS not reasoning (MODELED)", mod: "/static/3d/surfaces/confattest.js" },
  { id: "retrievalattn", cat: "attention", title: "Retrieval-Modulated Long-Context Attention · needle recall (MODELED)", mod: "/static/3d/surfaces/retrievalattn.js" },
  { id: "whatsnew", cat: "brain", title: "What's New · honest auto-derived estate changelog · recently-added surfaces w/ verbatim labels + citations from real git history (drift-proof)", mod: "/static/3d/surfaces/whatsnew.js" },
  { id: "honestywall", cat: "governance", title: "Honesty Wall · live integrity aggregation · reads each surface's OWN honest label VERBATIM + estate honesty invariants → INTACT/DEGRADED/VIOLATED verdict, unsigned SHA-256 receipt-on-write (drift-proof)", mod: "/static/3d/surfaces/honestywall.js" },
  { id: "agentos", cat: "governance", flag: true, title: "Agent OS Map · live self-honest operator's-eye map of the agent OS · nodes (daily loop←agentops, trust ledger←anatomy+receipts+honestywall, standing goals←doctrine+locked-8, optional loops←governedagent/governedrag/loopforge/mesh) with LIVE per-node verdict from the honestywall aggregate → OPERATING/DEGRADED/HALTED-HONEST, never OPERATING if anything VIOLATED, unsigned SHA-256 receipt-on-write (drift-proof)", mod: "/static/3d/surfaces/agentos.js" },
  { id: "brainground", cat: "brain", title: "Brainground · grounding-confidence + honest abstention over brain retrieval · scores the brain's REAL grounding_subgraph (seed coverage · subgraph cohesion · salience mass · community consistency) → GROUNDED/WEAK-GROUNDING/INSUFFICIENT-GROUNDING, brain abstains when grounding is weak, MODELED (never MEASURED), unsigned SHA-256 receipt-on-write", mod: "/static/3d/surfaces/brainground.js" },
  { id: "brainmemory", cat: "brain", title: "Brain Memory Freshness · honest episodic decay proxy over the knowledge graph · deterministic per-node freshness (recency + structure when a real timestamp exists, else STRUCTURAL-ONLY connectivity+salience proxy, never a fabricated timestamp) -> FRESH/AGING/STALE, STALE flagged for re-harvest, unsigned SHA-256 receipt-on-write (drift-proof)", mod: "/static/3d/surfaces/brainmemory.js" },
  { id: "brainprovenance", cat: "brain", title: "Brain Provenance · per-answer source-lineage chain · which knowledge-graph nodes supported the answer, each node's OWN label VERBATIM + contribution_weight + coverage (HARVESTED/MODELED/UNAVAILABLE) → TRACEABLE/PARTIAL-PROVENANCE/UNTRACEABLE, never TRACEABLE while any node UNAVAILABLE, unsigned SHA-256 receipt-on-write (source-lineage of an answer, NOT build/model attestation)", mod: "/static/3d/surfaces/brainprovenance.js" },
  { id: "braincontradict", cat: "brain", flag: true, title: "Brain Contradiction Detector · surfaces potential contradictions between grounded knowledge-graph claims HONESTLY via transparent deterministic heuristics (negation polarity / antonym opposition / numeric conflict) → NO-CONFLICT/POSSIBLE-CONFLICT/CONFLICT-FLAGGED · PRESENTS conflicts, NEVER resolves them (adjudication=human-required), unsigned SHA-256 receipt-on-write (MODELED)", mod: "/static/3d/surfaces/braincontradict.js" },
  { id: "brainuncertainty", cat: "brain", title: "Brain Uncertainty · calibrated honest uncertainty on a brain retrieval · reads the same honest ranked retrieval and derives score dispersion + retrieval entropy + rank stability → one uncertainty in [0,1] with a CONFIDENT/UNCERTAIN/HIGHLY-UNCERTAIN verdict (recommends abstain), never CONFIDENT when dispersion/entropy high, MODELED calibration honesty not a probability, unsigned SHA-256 receipt-on-write", mod: "/static/3d/surfaces/brainuncertainty.js" },
  { id: "brainhealth", cat: "brain", title: "Brain Health · live \"can the brain be trusted for this query right now?\" rollup · reads each brain-honesty surface's OWN label VERBATIM (grounding, freshness, provenance, contradiction, uncertainty), degrades absent siblings to UNAVAILABLE → TRUSTWORTHY/DEGRADED/UNTRUSTWORTHY/INSUFFICIENT-SIGNAL, never TRUSTWORTHY if any available component abstains, unsigned SHA-256 receipt-on-write (MODELED)", mod: "/static/3d/surfaces/brainhealth.js" },
  { id: "brainreranker", cat: "brain", flag: true, title: "Anatomy v6 · Brain evidence inventory, reranker readiness, and bounded Ouroboros local-feed receipts · every raw node receives an admission/quarantine decision · zero proposal rows while canonical manifests are absent", mod: "/static/3d/surfaces/brainreranker.js" },
  { id: "brainwatch", cat: "brain", title: "Brain Watch · knowledge-graph honesty-posture drift monitor · MEASURED label-distribution/orphan/community/salience snapshot vs a caller-supplied PRIOR → STABLE/DRIFTING/DEGRADED/BASELINE-ONLY (no fabricated trend without a real prior), unsigned SHA-256 receipt-on-write", mod: "/static/3d/surfaces/brainwatch.js" },
  { id: "brainconsensus", cat: "brain", title: "Brain Consensus · honest corroboration of a brain grounding · measures how MANY distinct nodes support a query and how many distinct communities they span (cross-community agreement is stronger than one clique) → CORROBORATED/WEAK-CORROBORATION/SINGLE-SOURCE, single-source-risk flag when support collapses to one node/community, never CORROBORATED while that flag is set, MODELED corroboration honesty not a truth guarantee, unsigned SHA-256 receipt-on-write", mod: "/static/3d/surfaces/brainconsensus.js" },
  { id: "brainqueryaudit", cat: "brain", title: "Brain Query Audit · append-only hash-linked ledger of brain queries + the honest verdict each returned · POST appends {query, verdict, grounding_label} and mints an UNSIGNED SHA-256 receipt chained to the prior entry (tamper-evident); GET recomputes the whole chain → CHAIN-INTACT/CHAIN-BROKEN (never softened), ephemeral in-memory ledger labelled honestly, MODELED, receipt-on-write-not-on-read", mod: "/static/3d/surfaces/brainqueryaudit.js" },
  { id: "brainlineage", cat: "brain", title: "Brain Lineage · node-origin chain · how each knowledge-graph node ENTERED the graph, read VERBATIM from its OWN real origin fields (source/url → structural derivation → none) → TRACED/PARTIAL-LINEAGE/UNKNOWN-ORIGIN, a node with no source is UNKNOWN-ORIGIN never a fabricated source, aggregate never TRACED while any origin UNKNOWN, unsigned SHA-256 receipt-on-write (node-origin lineage, NOT per-answer provenance, NOT build/model attestation)", mod: "/static/3d/surfaces/brainlineage.js" },
  { id: "brainexplain", cat: "brain", title: "Brain Explain · transparent explanation of WHY the brain retrieved what it did · MODELED descriptive trace over the REAL retrieval subgraph (which query terms matched which seed nodes, per-node ppr-vs-salience rationale, communities traversed, each node's OWN label VERBATIM) → EXPLAINABLE/PARTIALLY-EXPLAINABLE/OPAQUE (never invents a rationale; honest OPAQUE beats a fake one), unsigned SHA-256 receipt-on-write", mod: "/static/3d/surfaces/brainexplain.js" },
  { id: "braingaps", cat: "brain", title: "Brain Gaps · an honest map of what the brain does NOT know · MEASURED thin (sparse) communities + weakly-connected island nodes (degree≤1) + weak-label share over the live graph, and per-query COVERED/THIN/GAP grounding → estate verdict WELL-COVERED/PATCHY/SPARSE (a GAP is never fabricated into coverage), unsigned SHA-256 receipt-on-write (MODELED)", mod: "/static/3d/surfaces/braingaps.js" },
  { id: "brainconstitution", cat: "brain", title: "Brain Constitution · the honest, machine-checkable ruleset the brain is graded against per query · an explicit ordered set of ARTICLES (grounding sufficiency, calibrated confidence, honest corroboration, contradictions surfaced, traceable to source, freshness honesty, coverage gaps admitted, doctrine invariants) each graded COMPLIANT/VIOLATED/UNAVAILABLE against whatever sibling brain-honesty surfaces are importable (an absent surface is UNAVAILABLE, never a fabricated pass) → CONSTITUTIONAL/IN-VIOLATION/INSUFFICIENT-SIGNAL, never CONSTITUTIONAL while any evaluable Article is VIOLATED, unsigned SHA-256 receipt-on-write (MODELED)", mod: "/static/3d/surfaces/brainconstitution.js" },
  { id: "markets", cat: "finance", flag: true, title: "Markets & Finance · live Polymarket prediction book (top markets by 24h volume, pillar height = 24h vol, bead = YES probability) + crypto majors orbiting by market cap · 100% MEASURED same-origin deva finance feeds, no mocked spend/keys, log-scaling is display-only", mod: "/static/3d/surfaces/finance.js" },
  { id: "leaders", cat: "more", flag: true, title: "Frontier Models · Live AI Leaders · MEASURED live OpenRouter model catalog — one pillar per lab (height = max context window, bead = open/free share); widest-context models orbit as satellites (teal = free, amber = paid); log-scaling is display-only, no invented benchmark or ranking", mod: "/static/3d/surfaces/leaders.js" },
  { id: "research", cat: "more", flag: true, title: "Frontier Research · Live arXiv AI · MEASURED live arXiv submission stream (cs.AI/LG/CL/CV/NE) — one pillar per research category (height = fresh-paper count, bead = share of the window); most-recent papers orbit as satellites sized by author count; log-scaling is display-only, no citation count, score, or ranking", mod: "/static/3d/surfaces/research.js" },
  { id: "open", cat: "more", flag: true, title: "Open Frontier · Live Hugging Face · MEASURED live Hugging Face Hub trending stream — one pillar per org/author (height = summed likes, bead = download reach); most-liked open models orbit as satellites coloured by task; log-scaling is display-only, no invented benchmark, score, or ranking beyond the Hub’s own", mod: "/static/3d/surfaces/open.js" },
  { id: "brainagent", cat: "brain", title: "Brain Agent · honesty-gated agentic graph reasoner · treats the brain graph as a state space and walks it one node at a time for a query, choosing EXPAND/FOLLOW/BACKTRACK/STOP by pure graph heuristics (no model call, fully deterministic); every candidate hop passes an honesty gate built from the sibling surfaces (grounding, provenance, contradiction, uncertainty) — an ungrounded/untraceable/contradicted/uncertain hop is refused with a recorded reason, an absent guard is UNAVAILABLE never a fabricated pass; within an explicit step/node budget it returns ANSWER-GROUNDED/PARTIAL or abstains ABSTAINED-BUDGET/ABSTAINED-INSUFFICIENT rather than answer under-grounded, emits an ordered trace + unsigned SHA-256 receipt-on-write, makes no sentience claim (MODELED)", mod: "/static/3d/surfaces/brainagent.js" },
];

const stageEl = document.getElementById("stage");
const tabsEl = document.getElementById("tabs");
const fallbackEl = document.getElementById("fallback");
document.getElementById("three-rev").textContent = THREE.REVISION;

let stage = null;
let current = null;       // { def, instance }
let loadToken = 0;

// WebGPU opt-in: seeded from ?webgpu=1, flippable live via the header toggle. WebGPU is not
// production-safe on all browsers/drivers yet (doctrine) so WebGL2 stays the default; the
// toolkit's probe is timeout-guarded and falls back honestly if no device is available.
let wantWebGPU = /[?&]webgpu=1\b/.test(location.search);

async function ensureStage() {
  if (stage) return stage;
  try {
    stage = await szl3d.boot(stageEl, {
      bloom: { strength: 0.85, radius: 0.5, threshold: 0.18 },
      cameraPos: [0, 5, 16],
      forceWebGL: !wantWebGPU,
    });
    document.getElementById("backend").textContent = "renderer: " + stage.backend.toUpperCase();
    _syncGpuToggle();
    stage.start();
  } catch (e) {
    fallbackEl.style.display = "flex";
    document.getElementById("backend").textContent = "renderer: UNAVAILABLE";
    console.error("[holographic] stage boot failed:", e);
    throw e;
  }
  return stage;
}

function _syncGpuToggle() {
  const btn = document.getElementById("gpu-toggle");
  if (!btn) return;
  const on = stage && stage.backend === "webgpu";
  btn.textContent = "\u26a1 WebGPU: " + (on ? "on" : (wantWebGPU ? "requested" : "off"));
  btn.style.color = on ? "var(--proof, #3af4c8)" : "var(--gold)";
  btn.style.borderColor = on ? "var(--teal)" : "var(--line)";
}

// Tear down the current stage + surface and re-boot with the new renderer preference, then
// re-mount the active surface. Used by the header WebGPU toggle so users can engage the
// compute path on capable browsers without editing the URL.
async function rebootStage() {
  const active = current ? current.def.id : (SURFACES[0] && SURFACES[0].id);
  try { if (current && current.instance && current.instance.unmount) current.instance.unmount(); } catch (_) {}
  current = null;
  try { if (stage && stage.dispose) stage.dispose(); } catch (_) {}
  stage = null;
  // The toolkit's dispose() releases the GL context but leaves its <canvas> in the DOM;
  // a fresh boot() appends a new one. Remove the orphaned canvas(es) here so a toggle
  // never accumulates duplicate canvases / leaked contexts.
  try { stageEl.querySelectorAll("canvas").forEach((c) => c.remove()); } catch (_) {}
  fallbackEl.style.display = "none";
  await selectSurface(active, "none");
}

function clearScene() {
  if (!stage) return;
  // Remove everything the previous surface added except the default lights.
  const keep = new Set();
  stage.scene.traverse((o) => { if (o.isLight) keep.add(o); });
  for (let i = stage.scene.children.length - 1; i >= 0; i--) {
    const o = stage.scene.children[i];
    if (!keep.has(o)) stage.scene.remove(o);
  }
  // reset per-frame callbacks by re-booting frame list is overkill; surfaces guard on null.
}

async function selectSurface(id, historyMode = "replace") {
  const def = SURFACES.find((s) => s.id === id);
  if (!def) return;
  if (current && current.def && current.def.id === id) {
    _highlight(id);
    if (historyMode === "replace" && location.hash !== "#" + id) {
      history.replaceState(null, "", "#" + id);
    }
    return;
  }
  const token = ++loadToken;
  // visual selection state: mark every tab button with this id (a flagship appears both in
  // the ★ Featured row and inside its category panel), auto-open the active category, and
  // proof-teal-flag the owning dropdown button.
  _highlight(id);
  // one-line honest caption: the FULL verbatim title of the active surface (hover for wrap-free read)
  { const cap = document.getElementById("surface-caption");
    if (cap) { cap.textContent = def.title; cap.title = def.title; } }

  await ensureStage();
  // tear down previous
  if (current && current.instance && current.instance.unmount) {
    try { current.instance.unmount(); } catch (_) {}
  }
  clearScene();

  let mod;
  try { mod = await import(def.mod); }
  catch (e) { console.error("[holographic] failed to load surface", id, e); return; }
  if (token !== loadToken) return; // a newer tab click superseded us

  const surface = mod.default || mod;
  const ctx = { stage, container: stageEl, live, label, THREE, szl3d };
  try {
    surface.mount(ctx);
    current = { def, instance: surface };
    if (historyMode === "push") history.pushState(null, "", "#" + id);
    else if (historyMode === "replace") history.replaceState(null, "", "#" + id);
  } catch (e) {
    console.error("[holographic] surface mount threw", id, e);
  }
}

// ---- grouped nav: pinned ★ Featured row + collapsible category dropdowns ----
// Category display order + labels (spec taxonomy). Only categories with >=1 surface are
// rendered; any surface without a `cat` falls to "more" (safety net — never dropped).
const CATS = [
  ["map", "Map"],
  ["brain", "Brain & Memory"],
  ["anatomy", "Anatomy & Living System"],
  ["reasoning", "Reasoning & Agents"],
  ["attention", "Attention & Architecture"],
  ["quant", "Quantization & Efficiency"],
  ["governance", "Governance & Assurance"],
  ["proof", "Proof & Attestation"],
  ["energy", "Energy & Sovereign"],
  ["defense", "Defense & Fleet"],
  ["finance", "Finance & Markets"],
  ["rl", "RL & Training"],
  ["more", "More"],
];
const catOf = (s) => s.cat || "more";

const featuredRow = document.getElementById("featured-row");
const catRow = document.getElementById("cat-row");
const catPanels = document.getElementById("cat-panels");
const searchInput = document.getElementById("surface-search");
const searchPanel = document.getElementById("search-panel");
const searchCount = document.getElementById("surface-results-count");
const navMode = document.getElementById("nav-mode");
const activeSurface = document.querySelector("#active-surface strong");
const estateObservationBadge = document.getElementById("estate-observation-badge");

const evidenceRail = document.getElementById("evidence-rail");
const evidenceToggle = document.getElementById("evidence-rail-toggle");
const evidencePanel = document.getElementById("evidence-rail-panel");
const evidenceState = document.getElementById("evidence-rail-state");
const evidenceTitle = document.getElementById("evidence-rail-title");
const evidenceId = document.getElementById("evidence-rail-id");
const evidenceContract = document.getElementById("evidence-rail-contract");
const evidenceRuntime = document.getElementById("evidence-rail-runtime");
const evidenceReadiness = document.getElementById("evidence-rail-readiness");
const EVIDENCE_MAX_AGE_MS = 24 * 60 * 60 * 1000;
const EVIDENCE_REFRESH_INTERVAL_MS = 5 * 60 * 1000;
let evidenceSnapshotPromise = null;
let evidenceRefreshTimer = null;
let evidenceRefreshGeneration = 0;
if (evidenceToggle && evidencePanel) {
  evidenceToggle.addEventListener("click", () => {
    const open = evidenceToggle.getAttribute("aria-expanded") !== "true";
    evidenceToggle.setAttribute("aria-expanded", String(open));
    evidencePanel.hidden = !open;
  });
  document.addEventListener("keydown", (event) => {
    if (event.key === "Escape" && !evidencePanel.hidden) {
      evidenceToggle.setAttribute("aria-expanded", "false");
      evidencePanel.hidden = true;
      evidenceToggle.focus();
    }
  });
}
async function _fetchEvidenceSnapshot(forceRefresh = false) {
  if (forceRefresh) {
    evidenceRefreshGeneration += 1;
    evidenceSnapshotPromise = null;
  }
  if (evidenceSnapshotPromise) return evidenceSnapshotPromise;
  const generation = evidenceRefreshGeneration;
  evidenceSnapshotPromise = (async () => {
    const getJson = async (url) => {
      try {
        const response = await fetch(url, {method:"GET",headers:{accept:"application/json"},cache:"no-store"});
        return response.ok ? await response.json() : null;
      } catch (_) { return null; }
    };
    const [readiness, build] = await Promise.all([
      getJson("/api/a11oy/v1/readiness/tab-matrix?view=summary"),
      getJson("/api/build-info"),
    ]);
    return { readiness, build, generation };
  })();
  return evidenceSnapshotPromise;
}
function _hasObservedEvidence(readiness, revision, nowMs = Date.now()) {
  if (
    typeof revision !== "string" ||
    !/^[0-9a-f]{40}$/.test(revision) ||
    readiness?.honest !== true ||
    readiness?.view !== "summary" ||
    readiness?.available !== true ||
    readiness?.matrix_available !== true ||
    readiness?.probe_verdict_available !== true ||
    readiness?.verdict_source_revision !== revision ||
    typeof readiness?.verdict_base !== "string" ||
    !/^https:\/\/[^/]+$/.test(readiness.verdict_base) ||
    readiness?.verdict_base !== readiness?.verdict_expected_base
  ) return false;
  const checkedAt = readiness?.verdict_checked_at;
  if (
    typeof checkedAt !== "string" ||
    !/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z$/.test(checkedAt)
  ) return false;
  const checkedMs = Date.parse(checkedAt);
  if (
    !Number.isFinite(checkedMs) ||
    checkedMs > nowMs ||
    nowMs - checkedMs > EVIDENCE_MAX_AGE_MS
  ) return false;
  const verdict = readiness?.verdict_summary;
  if (!verdict || typeof verdict !== "object") return false;
  const counts = [
    "endpoints", "ok", "skippedStateChanging", "lies", "unreachable", "throttled",
  ]
    .map((field) => verdict[field]);
  if (!counts.every((value) => Number.isInteger(value) && value >= 0)) return false;
  if (!Number.isFinite(verdict.p95_worst) || verdict.p95_worst < 0) return false;
  const [endpoints, ...outcomes] = counts;
  const executed = endpoints - verdict.skippedStateChanging;
  return (
    endpoints > 0 &&
    executed > 0 &&
    verdict.lies === 0 &&
    outcomes.reduce((total, value) => total + value, 0) === endpoints
  );
}
function _readinessEvidenceText(readiness, observed) {
  const matrix = readiness?.matrix_summary || {};
  const verdict = readiness?.verdict_summary || null;
  if (!observed || !verdict) {
    return `${matrix.tabs ?? SURFACES.length} surfaces · probe UNVERIFIED`;
  }
  return `${verdict.ok}/${verdict.endpoints} clean · complete verdict`;
}
function _nextEvidenceRefreshDelay(readiness, nowMs = Date.now()) {
  const checkedMs = Date.parse(readiness?.verdict_checked_at || "");
  if (!Number.isFinite(checkedMs)) return EVIDENCE_REFRESH_INTERVAL_MS;
  const untilExpiry = checkedMs + EVIDENCE_MAX_AGE_MS - nowMs;
  if (untilExpiry < 0) return EVIDENCE_REFRESH_INTERVAL_MS;
  return Math.max(
    50,
    Math.min(EVIDENCE_REFRESH_INTERVAL_MS, untilExpiry + 50),
  );
}
function _scheduleEvidenceRefresh(def, readiness) {
  if (evidenceRefreshTimer) clearTimeout(evidenceRefreshTimer);
  evidenceRefreshTimer = setTimeout(
    () => _updateEvidenceRail(def, true),
    _nextEvidenceRefreshDelay(readiness),
  );
}
function _updateEvidenceRail(def, forceRefresh = false) {
  if (!evidenceRail || !def) return;
  evidenceRail.dataset.state = "UNVERIFIED";
  if (evidenceState) evidenceState.textContent = "UNVERIFIED";
  if (estateObservationBadge) {
    estateObservationBadge.dataset.state = "UNVERIFIED";
    estateObservationBadge.textContent = "Evidence status: UNVERIFIED";
  }
  if (evidenceTitle) evidenceTitle.textContent = def.title;
  if (evidenceId) evidenceId.textContent = def.id;
  if (evidenceContract) evidenceContract.textContent = `${catOf(def)} · ${def.mod}`;
  if (evidenceRuntime) evidenceRuntime.textContent = "CHECKING";
  if (evidenceReadiness) evidenceReadiness.textContent = "CHECKING";
  _fetchEvidenceSnapshot(forceRefresh).then(({ readiness, build, generation }) => {
    if (generation !== evidenceRefreshGeneration) return;
    const buildState = build?.build?.state || build?.state || "UNAVAILABLE";
    const revision = build?.build?.revision || build?.revision || null;
    if (evidenceRuntime) evidenceRuntime.textContent = revision ? `${buildState} · ${String(revision).slice(0,12)}…` : buildState;
    const observed = _hasObservedEvidence(readiness, revision);
    if (evidenceReadiness) {
      evidenceReadiness.textContent = _readinessEvidenceText(readiness, observed);
    }
    evidenceRail.dataset.state = observed ? "OBSERVED" : "UNVERIFIED";
    if (evidenceState) evidenceState.textContent = observed ? "OBSERVED" : "UNVERIFIED";
    if (estateObservationBadge) {
      estateObservationBadge.dataset.state = observed ? "OBSERVED" : "UNVERIFIED";
      estateObservationBadge.textContent = observed
        ? "The estate, observed—not assumed."
        : "Evidence status: UNVERIFIED";
    }
    _scheduleEvidenceRefresh(def, readiness);
  });
}
function _resumeEvidenceRefresh() {
  if (document.hidden || !current?.def) return;
  _updateEvidenceRail(current.def, true);
}
document.addEventListener("visibilitychange", _resumeEvidenceRefresh);
window.addEventListener("pageshow", _resumeEvidenceRefresh);
const _panels = {};   // cat -> drop-panel element
const _catBtns = {};  // cat -> dropdown button
let searchLimit = 36;

function _clearSearch() {
  searchLimit = 36;
  if (searchInput) searchInput.value = "";
  if (searchPanel) { searchPanel.textContent = ""; searchPanel.dataset.open = "false"; }
  if (searchCount) searchCount.textContent = SURFACES.length + " surfaces indexed";
}

// Command-center default: the graph owns the viewport. The complete registry remains one
// click away in an overlay drawer and every surface remains indexed by the search field.
function _setBrowser(open) {
  const on = !!open;
  tabsEl.dataset.browse = String(on);
  if (navMode) {
    navMode.setAttribute("aria-expanded", String(on));
    navMode.textContent = on ? "Close browser" : "Browse surfaces";
  }
  if (!on) openCategory("", false);
}
// Short pill label: first 1-2 " · "-separated segments of the honest title, capped.
// The FULL honest title is preserved verbatim in the tooltip (b.title) and in the
// footer caption when the surface is selected — nothing is dropped, only de-cluttered.
function _shortLabel(s) {
  if (s.short) return s.short;
  const parts = String(s.title).split(/\s*(?:·|—)\s*/).filter(Boolean);
  let label = parts[0] || String(s.title);
  if (parts[1] && (label.length + parts[1].length + 3) <= 36) label += " · " + parts[1];
  if (label.length > 42) label = label.slice(0, 39).replace(/\s+\S*$/, "") + "…";
  return label;
}

function _makeTab(s, feat) {
  const b = document.createElement("a");
  b.className = "tab" + (feat ? " tab--feat" : "");
  b.href = "#" + s.id;
  b.dataset.id = s.id; b.dataset.cat = catOf(s);
  b.title = s.title; // full honest title on hover
  b.setAttribute("aria-label", s.title);
  if (feat) {
    const star = document.createElement("span"); star.className = "star"; star.textContent = "★";
    b.appendChild(star); b.appendChild(document.createTextNode(_shortLabel(s)));
  } else {
    b.textContent = _shortLabel(s);
  }
  b.addEventListener("click", (ev) => {
    ev.preventDefault();
    selectSurface(s.id, "push");
    _clearSearch();
    _setBrowser(false);
    openCategory(catOf(s), false);
    // On the mobile horizontal strips, keep the tapped tab in view.
    try { b.scrollIntoView({ behavior: "smooth", inline: "center", block: "nearest" }); } catch (_) {}
  });
  b.addEventListener("keydown", (ev) => {
    if (!["ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown", "Home", "End"].includes(ev.key)) return;
    const peers = Array.from(b.parentElement?.querySelectorAll("[data-id]") || []);
    if (!peers.length) return;
    const here = Math.max(0, peers.indexOf(b));
    let next = here;
    if (ev.key === "Home") next = 0;
    else if (ev.key === "End") next = peers.length - 1;
    else if (ev.key === "ArrowLeft" || ev.key === "ArrowUp") next = (here - 1 + peers.length) % peers.length;
    else next = (here + 1) % peers.length;
    ev.preventDefault();
    peers[next].focus();
  });
  return b;
}

// Open exactly one category panel (or close all when open=false). One open at a time.
function openCategory(cat, open) {
  Object.keys(_panels).forEach((c) => {
    const on = (c === cat) ? open : false;
    _panels[c].dataset.open = String(on);
    if (_catBtns[c]) _catBtns[c].setAttribute("aria-expanded", String(on));
  });
}

// (a) pinned Featured row — flagships (incl. Atlas), always visible above the dropdowns.
SURFACES.filter((s) => s.flag).forEach((s) => featuredRow.appendChild(_makeTab(s, true)));

// (b) category dropdown buttons + their drop panels.
CATS.forEach(([cat, label]) => {
  const items = SURFACES.filter((s) => catOf(s) === cat);
  if (!items.length) return;
  const btn = document.createElement("button");
  btn.className = "catbtn"; btn.type = "button";
  btn.dataset.cat = cat; btn.setAttribute("aria-expanded", "false");
  btn.id = "category-" + cat;
  const caret = document.createElement("span"); caret.className = "caret"; caret.textContent = "▸";
  btn.appendChild(caret);
  btn.appendChild(document.createTextNode(label + " "));
  const cnt = document.createElement("span"); cnt.className = "count"; cnt.textContent = String(items.length);
  btn.appendChild(cnt);
  const panel = document.createElement("div");
  panel.className = "panel"; panel.dataset.cat = cat; panel.dataset.open = "false";
  panel.id = "category-panel-" + cat;
  panel.setAttribute("aria-labelledby", btn.id);
  btn.setAttribute("aria-controls", panel.id);
  items.forEach((s) => panel.appendChild(_makeTab(s, false)));
  btn.addEventListener("click", () => {
    _clearSearch();
    openCategory(cat, panel.dataset.open !== "true");
  });
  catRow.appendChild(btn);
  catPanels.appendChild(panel);
  _panels[cat] = panel; _catBtns[cat] = btn;
});

// Indexed surface finder: every surface stays reachable without a permanent wall of pills.
// Matching is deterministic over id, title and category; nothing is generated.
if (searchInput && searchPanel) {
  const renderSearch = () => {
    const q = searchInput.value.trim().toLowerCase();
    searchPanel.textContent = "";
    if (!q) { _clearSearch(); return; }
    _setBrowser(false);
    openCategory("", false);
    const matches = SURFACES.filter((s) =>
      (s.id + " " + s.title + " " + catOf(s)).toLowerCase().includes(q));
    matches.slice(0, searchLimit).forEach((s) => searchPanel.appendChild(_makeTab(s, false)));
    if (matches.length > searchLimit) {
      const more = document.createElement("button");
      more.type = "button";
      more.className = "navmode";
      more.textContent = `Show ${Math.min(36, matches.length - searchLimit)} more`;
      more.setAttribute("aria-label", `Show more results; ${matches.length - searchLimit} remain`);
      more.addEventListener("click", () => { searchLimit += 36; renderSearch(); });
      searchPanel.appendChild(more);
    }
    searchPanel.dataset.open = "true";
    if (searchCount) searchCount.textContent =
      `${Math.min(searchLimit, matches.length)} of ${matches.length} match${matches.length === 1 ? "" : "es"}`;
  };
  searchInput.addEventListener("input", () => { searchLimit = 36; renderSearch(); });
  searchInput.addEventListener("keydown", (ev) => {
    if (ev.key === "Escape") { _clearSearch(); _setBrowser(false); searchInput.blur(); }
    if (ev.key === "Enter") {
      const first = searchPanel.querySelector("[data-id]");
      if (first) first.click();
    }
    if (ev.key === "ArrowDown" || ev.key === "ArrowUp") {
      const results = Array.from(searchPanel.querySelectorAll("[data-id]"));
      if (results.length) {
        ev.preventDefault();
        results[ev.key === "ArrowUp" ? results.length - 1 : 0].focus();
      }
    }
  });
  document.addEventListener("keydown", (ev) => {
    if ((ev.ctrlKey || ev.metaKey) && ev.key.toLowerCase() === "k") {
      ev.preventDefault(); searchInput.focus(); searchInput.select();
    }
  });
  _clearSearch();
}

if (navMode) {
  navMode.addEventListener("click", () => {
    _clearSearch();
    _setBrowser(tabsEl.dataset.browse !== "true");
  });
}

// Mark every tab button carrying `id` as selected (a flagship is in both the Featured row
// and its category panel), auto-open the active surface's category, and proof-teal-flag the
// owning dropdown button so the current location is always legible.
function _highlight(id) {
  const def = SURFACES.find((s) => s.id === id);
  const cat = def ? catOf(def) : null;
  if (activeSurface) {
    activeSurface.textContent = def ? _shortLabel(def) : id;
    activeSurface.title = def ? def.title : id;
  }
  _updateEvidenceRail(def);
  const matches = Array.from(tabsEl.querySelectorAll("[data-id]"))
    .filter((t) => t.dataset.id === id);
  tabsEl.querySelectorAll("[data-id]").forEach((t) => {
    t.dataset.active = String(t.dataset.id === id);
    t.removeAttribute("aria-current");
  });
  if (matches.length) matches[0].setAttribute("aria-current", "page");
  Object.keys(_catBtns).forEach((c) =>
    _catBtns[c].setAttribute("data-hasactive", String(c === cat)));
}

// WebGPU toggle: flip the preference and re-boot the renderer + re-mount the active surface.
// Honest: if the browser/driver yields no WebGPU device the toolkit falls back to WebGL2 and
// the badge reports the real backend ("WebGPU: requested" but renderer stays WEBGL2).
{
  const gpuBtn = document.getElementById("gpu-toggle");
  if (gpuBtn) {
    gpuBtn.addEventListener("click", async () => {
      wantWebGPU = !wantWebGPU;
      gpuBtn.disabled = true;
      const prev = gpuBtn.textContent; gpuBtn.textContent = "\u26a1 switching\u2026";
      try { await rebootStage(); } catch (_) { document.getElementById("backend").textContent = "renderer: UNAVAILABLE"; }
      finally { gpuBtn.disabled = false; _syncGpuToggle(); }
    });
    _syncGpuToggle();
  }
}

// expose a tiny API for the selftest harness to drive the shell headlessly.
window.__SZL3D_SHELL__ = {
  surfaces: SURFACES,
  select: selectSurface,
  get stage() { return stage; },
  get current() { return current; },
  get wantWebGPU() { return wantWebGPU; },
  ensureStage, rebootStage,
};

// initial surface from hash or default to the Atlas front door (Wave 27 unifier)
const initial = (location.hash || "").replace("#", "");
selectSurface(SURFACES.some((s) => s.id === initial) ? initial : "atlas", "replace");
window.addEventListener("hashchange", () => {
  const requested = (location.hash || "").replace("#", "");
  if (!SURFACES.some((s) => s.id === requested)) return;
  if (current && current.def && current.def.id === requested) return;
  selectSurface(requested, "none");
});

// ---- Landing / intro overlay (Dev4, Wave R) --------------------------------
// A coherent honest entry: the estate boots live underneath while this panel shows the
// Brain headline + frontier surface count + the public verifier. Every stat is fetched
// same-origin (0 CDN) and degrades to an honest NO-LIVE-DATA chip if the endpoint 404s or
// is unreachable — never a fabricated number. Auto-shows once per tab session; re-openable
// via the header ◇ intro badge or ?intro=1.
{
  const introEl = document.getElementById("intro");
  const setLabel = (id, state, text) => {
    const el = document.getElementById(id);
    if (el) { el.dataset.state = state; el.textContent = text; }
  };
  const setStat = (id, value, subHtml) => {
    const el = document.getElementById(id);
    if (!el) return;
    el.textContent = value;
    if (subHtml !== undefined) { const s = document.createElement("small"); s.innerHTML = subHtml; el.appendChild(s); }
  };

  // Brain headline — honest distinct_artifacts (never the raw, person-inflated total).
  async function loadBrain() {
    try {
      const r = await fetch("/api/a11oy/v1/brain/graph?summary=1", { headers: { accept: "application/json" } });
      if (!r.ok) throw new Error("HTTP " + r.status);
      const j = await r.json();
      const s = j.summary || j;
      const distinct = s.distinct_artifacts ?? j.distinct_artifacts;
      const total = s.node_count ?? j.node_count;
      if (distinct == null) throw new Error("no distinct_artifacts field");
      setStat("brain-stat", Number(distinct).toLocaleString(), "distinct artifacts (harvested)");
      setLabel("brain-lbl", "live", "LIVE");
      if (total != null) {
        const note = document.getElementById("brain-note");
        if (note) note.textContent =
          `${Number(distinct).toLocaleString()} distinct artifacts; raw node_count ${Number(total).toLocaleString()} ` +
          `is larger (dominated by arXiv co-author person nodes — never presented as distinct work).`;
      }
    } catch (e) {
      setStat("brain-stat", "—", "distinct artifacts (harvested)");
      setLabel("brain-lbl", "degraded", "NO-LIVE-DATA");
    }
  }

  // Frontier estate — count of live 3D surfaces (prefer the honest server info, fall back to
  // the in-page manifest which is the same source of truth as the shell).
  async function loadEstate() {
    try {
      const r = await fetch("/api/a11oy/v1/holographic/info", { headers: { accept: "application/json" } });
      if (!r.ok) throw new Error("HTTP " + r.status);
      const j = await r.json();
      const n = Array.isArray(j.surfaces) ? j.surfaces.length : SURFACES.length;
      setStat("estate-stat", String(n), "3D surfaces, each wired to a live backend");
      setLabel("estate-lbl", "live", "LIVE");
    } catch (e) {
      // The shell manifest is authoritative and always present — honest count, labelled as
      // in-page (not a fresh server read).
      setStat("estate-stat", String(SURFACES.length), "3D surfaces (from in-page manifest)");
      setLabel("estate-lbl", "degraded", "MANIFEST");
    }
  }

  let introReturnFocus = null;
  const introBackground = [document.querySelector("header"), tabsEl, document.querySelector("footer")]
    .filter(Boolean);
  function introFocusable() {
    return Array.from(introEl.querySelectorAll(
      'button:not([disabled]),a[href],input:not([disabled]),[tabindex]:not([tabindex="-1"])'));
  }
  function openIntro() {
    introReturnFocus = document.activeElement;
    _clearSearch();
    _setBrowser(false);
    introBackground.forEach((el) => { el.inert = true; });
    introEl.hidden = false;
    loadBrain(); loadEstate();
    requestAnimationFrame(() => (document.getElementById("intro-enter") || introEl).focus());
  }
  function closeIntro() {
    introEl.hidden = true;
    introBackground.forEach((el) => { el.inert = false; });
    try { sessionStorage.setItem("szl3d_intro_seen", "1"); } catch (_) {}
    if (introReturnFocus && introReturnFocus.focus) introReturnFocus.focus();
  }
  introEl.addEventListener("keydown", (ev) => {
    if (ev.key === "Escape") { ev.preventDefault(); closeIntro(); return; }
    if (ev.key !== "Tab") return;
    const focusable = introFocusable();
    if (!focusable.length) { ev.preventDefault(); introEl.focus(); return; }
    const first = focusable[0], last = focusable[focusable.length - 1];
    if (ev.shiftKey && document.activeElement === first) { ev.preventDefault(); last.focus(); }
    else if (!ev.shiftKey && document.activeElement === last) { ev.preventDefault(); first.focus(); }
  });

  introEl.querySelectorAll("[data-go]").forEach((b) =>
    b.addEventListener("click", () => { closeIntro(); selectSurface(b.dataset.go, "push"); }));
  const enterBtn = document.getElementById("intro-enter");
  if (enterBtn) enterBtn.addEventListener("click", closeIntro);
  const reopen = document.getElementById("intro-reopen");
  if (reopen) reopen.addEventListener("click", openIntro);

  // Auto-show on a fresh visit: skip if this tab already dismissed it, unless a deep-link
  // hash (#brain etc.) or a suppress flag says otherwise; ?intro=1 always forces it.
  let seen = false;
  try { seen = sessionStorage.getItem("szl3d_intro_seen") === "1"; } catch (_) {}
  const force = /[?&]intro=1\b/.test(location.search);
  const deepLink = SURFACES.some((s) => s.id === initial);
  if (force || (!seen && !deepLink)) openIntro();
  else introEl.hidden = true;

  window.__SZL3D_SHELL__.openIntro = openIntro;
  window.__SZL3D_SHELL__.closeIntro = closeIntro;
}
</script>
</body>
</html>