File size: 67,411 Bytes
75ca900
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6397f73
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75ca900
 
 
 
 
 
 
 
 
 
 
6397f73
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
672d7cc
6397f73
 
 
 
 
 
 
 
672d7cc
 
 
 
 
 
 
 
6397f73
75ca900
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
672d7cc
75ca900
 
 
 
 
af1f3a7
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
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Substrate Education Simulator</title>
<meta name="description" content="A bounded pressure-map simulator for education, cognition, parent inheritance, AI-crutch formation debt, hidden genius, context density, and repair-path visibility." />
<meta property="og:type" content="website" />
<meta property="og:title" content="Substrate Education Simulator" />
<meta property="og:description" content="Learning through healing. Pressure made visible. Repair made navigable." />
<meta property="og:image" content="assets/social-preview.png" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Substrate Education Simulator" />
<meta name="twitter:description" content="Learning through healing. Pressure made visible. Repair made navigable." />
<meta name="twitter:image" content="assets/social-preview.png" />
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml" />

<style>
  :root {
    --bg: #0b0d10;
    --panel: #151922;
    --panel2: #1d2330;
    --text: #e8edf4;
    --muted: #a9b4c4;
    --line: #30394a;
    --accent: #b9893a;
    --green: #63c27a;
    --yellow: #e4c45b;
    --orange: #e08b45;
    --red: #d85d66;
    --blue: #6ba6ff;
  }
  * { box-sizing: border-box; }
  body {
    margin: 0;
    font-family: Inter, ui-sans-serif, system-ui, -apple-system, Segoe UI, Arial, sans-serif;
    background: radial-gradient(circle at top left, #202415 0, #0b0d10 38%, #08090b 100%);
    color: var(--text);
  }
  header {
    padding: 22px 26px;
    border-bottom: 1px solid var(--line);
    background: rgba(10, 12, 16, 0.92);
    position: sticky;
    top: 0;
    z-index: 5;
    backdrop-filter: blur(10px);
  }
  h1 { margin: 0 0 6px; font-size: 22px; letter-spacing: .2px; }
  .sub { color: var(--muted); font-size: 13px; line-height: 1.45; max-width: 1200px; }
  .coreline {
    color: #f2d18a;
    font-weight: 700;
  }
  main {
    display: grid;
    grid-template-columns: 380px 1fr;
    gap: 18px;
    padding: 18px;
  }
  .card {
    background: rgba(21,25,34,.95);
    border: 1px solid var(--line);
    border-radius: 16px;
    padding: 16px;
    box-shadow: 0 10px 26px rgba(0,0,0,.22);
  }
  .controls {
    position: sticky;
    top: 98px;
    max-height: calc(100vh - 116px);
    overflow: auto;
  }
  label { display: block; font-size: 12px; color: var(--muted); margin-bottom: 6px; }
  select, input[type="text"], textarea {
    width: 100%;
    background: #0e1118;
    color: var(--text);
    border: 1px solid var(--line);
    border-radius: 10px;
    padding: 10px;
    outline: none;
  }
  button {
    background: #202737;
    color: var(--text);
    border: 1px solid #3a465c;
    border-radius: 10px;
    padding: 9px 12px;
    cursor: pointer;
    font-weight: 650;
  }
  button:hover { border-color: var(--accent); }
  .button-row { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 10px; }
  .small { font-size: 12px; color: var(--muted); line-height: 1.4; }
  .results {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
    gap: 12px;
    margin-bottom: 18px;
  }
  .metric {
    background: linear-gradient(145deg, #151b27, #10141c);
    border: 1px solid var(--line);
    border-radius: 14px;
    padding: 13px;
  }
  .metric h3 { margin: 0 0 9px; font-size: 13px; color: var(--muted); font-weight: 650; }
  .score { font-size: 28px; font-weight: 800; letter-spacing: .4px; }
  .bar {
    height: 8px;
    background: #0b0f15;
    border-radius: 99px;
    overflow: hidden;
    margin-top: 9px;
    border: 1px solid #263041;
  }
  .fill { height: 100%; width: 0%; transition: width .2s ease; }
  .route {
    display: inline-block;
    padding: 4px 8px;
    border-radius: 999px;
    font-size: 11px;
    font-weight: 800;
    margin-top: 8px;
  }
  .GREEN { background: rgba(99,194,122,.16); color: var(--green); border: 1px solid rgba(99,194,122,.45); }
  .YELLOW { background: rgba(228,196,91,.16); color: var(--yellow); border: 1px solid rgba(228,196,91,.45); }
  .ORANGE { background: rgba(224,139,69,.16); color: var(--orange); border: 1px solid rgba(224,139,69,.45); }
  .RED { background: rgba(216,93,102,.16); color: var(--red); border: 1px solid rgba(216,93,102,.45); }
  .var-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(310px, 1fr));
    gap: 10px;
  }
  details {
    background: rgba(29,35,48,.7);
    border: 1px solid var(--line);
    border-radius: 14px;
    padding: 10px 12px;
  }
  summary {
    cursor: pointer;
    font-weight: 800;
    color: #f0d193;
  }
  .var {
    border-top: 1px solid #2e3748;
    padding: 11px 0;
  }
  .var:first-of-type { border-top: none; }
  .v-head { display:flex; justify-content:space-between; gap:10px; align-items: baseline; }
  .v-title { font-size: 13px; font-weight: 700; }
  .v-symbol { color: var(--muted); font-size: 11px; }
  .v-def { color: var(--muted); font-size: 11px; margin: 4px 0 7px; line-height: 1.35; }
  input[type="range"] { width: 100%; accent-color: var(--accent); }
  .value-pill {
    min-width: 44px;
    text-align: right;
    color: #f1cc7c;
    font-weight: 800;
    font-variant-numeric: tabular-nums;
  }
  .badge {
    font-size: 10px;
    color: var(--muted);
    border: 1px solid #39445a;
    padding: 2px 6px;
    border-radius: 999px;
  }
  .top-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 12px;
    margin-bottom: 12px;
  }
  .boundary {
    border-left: 4px solid var(--accent);
    background: rgba(185,137,58,.08);
  }
  .log {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    white-space: pre-wrap;
    font-size: 12px;
    color: #d8e1ef;
    background: #090b0f;
    border: 1px solid #2d3545;
    border-radius: 12px;
    padding: 12px;
    max-height: 300px;
    overflow: auto;
  }
  @media (max-width: 980px) {
    main { grid-template-columns: 1fr; }
    .controls { position: static; max-height: none; }
    .top-grid { grid-template-columns: 1fr; }
  }

  .landing-hero {
    position: relative;
    overflow: hidden;
    border-bottom: 1px solid var(--line);
    background: #090b0f;
  }
  .landing-hero-inner {
    display: grid;
    grid-template-columns: minmax(0, 1.15fr) minmax(320px, 0.85fr);
    gap: 22px;
    align-items: center;
    padding: 22px 26px 24px;
    max-width: 1440px;
    margin: 0 auto;
  }
  .hero-video-frame {
    border: 1px solid rgba(242, 209, 142, 0.28);
    border-radius: 18px;
    overflow: hidden;
    background: #05070a;
    box-shadow: 0 16px 40px rgba(0,0,0,.42);
  }
  .hero-video {
    display: block;
    width: 100%;
    height: auto;
    aspect-ratio: 16 / 9;
    object-fit: cover;
    background: #05070a;
  }
  .hero-copy {
    padding: 14px 8px;
  }
  .hero-kicker {
    color: #f2d18a;
    font-size: 12px;
    text-transform: uppercase;
    letter-spacing: .14em;
    font-weight: 800;
    margin-bottom: 10px;
  }
  .hero-copy h2 {
    margin: 0 0 10px;
    font-size: clamp(30px, 4vw, 58px);
    line-height: .98;
    letter-spacing: -.04em;
  }
  .hero-copy p {
    color: var(--muted);
    font-size: 15px;
    line-height: 1.55;
    max-width: 580px;
  }
  .hero-copy .hero-line {
    color: #f2d18a;
    font-weight: 800;
  }
  .hero-actions {
    display: flex;
    gap: 10px;
    flex-wrap: wrap;
    margin-top: 16px;
  }
  .hero-actions a {
    color: var(--text);
    text-decoration: none;
    border: 1px solid #3a465c;
    background: #202737;
    border-radius: 12px;
    padding: 10px 13px;
    font-weight: 800;
    font-size: 13px;
  }
  .hero-note {
    margin-top: 10px;
    font-size: 12px;
    color: var(--muted);
  }
  @media (max-width: 980px) {
    .landing-hero-inner {
      grid-template-columns: 1fr;
      padding: 16px;
    }
    .hero-copy h2 {
      font-size: 34px;
    }
  }

</style>
</head>
<body>
<header>
  <h1>Major Rescue Atlas / Substrate Education Simulator <span class="badge">Prototype v0.1</span></h1>
  <div class="sub">
    Runtime prototype built from v1.0 Master Record, v0.9.1 schema, and v0.9.2 continuity/context-density layer.
    <span class="coreline">A thing survives transfer when it can come back to the whole.</span>
  </div>
</header>

<section class="landing-hero" aria-label="Substrate Education Simulator hero">
  <div class="landing-hero-inner">
    <div class="hero-video-frame">
      <video class="hero-video" controls playsinline preload="metadata" poster="assets/social-preview.png">
        <source src="assets/hero-video.mp4" type="video/mp4" />
        Your browser does not support the video tag.
      </video>
    </div>
    <div class="hero-copy">
      <div class="hero-kicker">Learning through healing</div>
      <h2>Pressure made visible. Repair made navigable.</h2>
      <p>
        A bounded pressure-map simulator for education, cognition literacy, AI-crutch formation debt,
        hidden genius, context density, and repair-path visibility.
      </p>
      <p class="hero-line">
        A thing survives transfer when it can come back to the whole.
      </p>
      <div class="hero-actions">
        <a href="#simulator">Explore simulator</a>
        <a href="docs/Master_Record_v1_1_CONSOLIDATED.txt">Read master record</a>
      </div>
      <div class="hero-note">
        Video includes campus/classroom atmosphere. Use controls to play with sound.
      </div>
    </div>
  </div>
</section>


<section class="card" style="max-width:1440px;margin:18px auto 0;padding:18px 22px;border:1px solid #30394a;background:#111722;border-radius:18px;">
  <h2 style="margin:0 0 8px;color:#f2d18a;">v1.1 Loop Mechanics Patch</h2>
  <p style="margin:0 0 10px;color:#c9d3e2;line-height:1.55;">New layer: ouroboros → infinity loop reorientation, time reclamation, outsourced agency consumption, summer-puddle vs reservoir depth, and dignity-preserving bounded AI articulation.</p>
  <p style="margin:0 0 12px;color:#f2d18a;font-weight:800;">People are already time-impoverished. The work is to help them find where their time went and return it back to themselves.</p>
  <p style="margin:0;color:#a9b4c4;font-size:13px;">Docs: <a style="color:#f2d18a;" href="docs/v1_1_Continuity_Patch_Ouroboros_Infinity_Time_Reclamation.txt">v1.1 patch</a> · <a style="color:#f2d18a;" href="docs/Master_Record_v1_1_CONSOLIDATED.txt">v1.1 master record</a> · <a style="color:#f2d18a;" href="docs/Schema_Extension_v1_1_Loop_Mechanics.json">schema extension</a></p>
</section>

<main id="simulator">
  <aside class="card controls">
    <h2 style="margin-top:0;font-size:18px;">Scenario Controls</h2>
    <label for="preset">Preset scenario</label>
    <select id="preset"></select>
    <div class="button-row">
      <button onclick="loadPreset()">Load preset</button>
      <button onclick="resetAll()">Reset sparse</button>
      <button onclick="exportScenario()">Export JSON</button>
    </div>
    <p class="small">
      Default semantics: unset variables = <b>0.00</b>. This avoids silently injecting false pressure or false repair.
      Scores are scenario pressure-map outputs, not prediction, diagnosis, proof, or blame.
    </p>
    <div class="top-grid">
      <div>
        <label>A_t — Activation</label>
        <input type="range" min="0" max="1" step="0.01" id="A_t" value="0.60" oninput="compute()" />
        <div class="small">Current: <b id="A_val">0.60</b></div>
      </div>
      <div>
        <label>B_t — Baseline</label>
        <input type="range" min="0" max="1" step="0.01" id="B_t" value="0.60" oninput="compute()" />
        <div class="small">Current: <b id="B_val">0.60</b></div>
      </div>
    </div>
    <label for="search">Search variables</label>
    <input id="search" type="text" placeholder="context, parent, AI, teacher..." oninput="renderVariables()" />
    <div class="button-row">
      <button onclick="expandAll(true)">Expand all</button>
      <button onclick="expandAll(false)">Collapse all</button>
    </div>
    <hr style="border:0;border-top:1px solid var(--line);margin:14px 0;">
    <div class="card boundary" style="padding:12px;">
      <b>Boundary</b>
      <div class="small" style="margin-top:6px;">
        Pressure/backtrace simulator. Not empirical validation. Not diagnosis. Not prediction. Not anti-AI, anti-college, or anti-non-college path.
      </div>
    </div>
  </aside>

  <section>
    <div class="results" id="results"></div>

    <div class="card" style="margin-bottom:18px;">
      <h2 style="margin-top:0;font-size:18px;">Run Interpretation</h2>
      <div id="interpretation" class="small"></div>
    </div>

    <div class="card" style="margin-bottom:18px;">
      <h2 style="margin-top:0;font-size:18px;">Variables</h2>
      <div id="variableGroups" class="var-grid"></div>
    </div>

    <div class="card">
      <h2 style="margin-top:0;font-size:18px;">Exported Scenario JSON</h2>
      <textarea id="exportBox" rows="12" spellcheck="false"></textarea>
    </div>
  </section>
</main>

<script>
const VARIABLES = [{"id": "P_cost", "symbol": "P_cost", "display_name": "Cost", "category": "OAM_PRESSURE", "layer": "Education Access", "definition": "Education cost pressure including tuition, fees, living cost, and opportunity cost.", "default": 0.0, "polarity": "subtract"}, {"id": "P_debt", "symbol": "P_debt", "display_name": "Debt", "category": "OAM_PRESSURE", "layer": "Education Access", "definition": "Delayed pressure from loans and debt drag.", "default": 0.0, "polarity": "subtract"}, {"id": "P_credential", "symbol": "P_credential", "display_name": "Credential", "category": "OAM_PRESSURE", "layer": "Credential Blindness", "definition": "Credential blindness or dismissal of capability because formal credential markers are missing.", "default": 0.0, "polarity": "subtract"}, {"id": "P_access", "symbol": "P_access", "display_name": "Access", "category": "OAM_PRESSURE", "layer": "Education Access", "definition": "Access variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "P_attention", "symbol": "P_attention", "display_name": "Attention", "category": "OAM_PRESSURE", "layer": "Attention", "definition": "Short-form fragmentation, no-closure loops, hook-bait, and context loss.", "default": 0.0, "polarity": "subtract"}, {"id": "P_sensational", "symbol": "P_sensational", "display_name": "Sensational", "category": "OAM_PRESSURE", "layer": "Attention Market", "definition": "Sensational variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "P_algorithm", "symbol": "P_algorithm", "display_name": "Algorithm", "category": "OAM_PRESSURE", "layer": "Platform Routing", "definition": "Algorithm variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "P_time", "symbol": "P_time", "display_name": "Time", "category": "OAM_PRESSURE", "layer": "Time Theft", "definition": "Time variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "P_AI", "symbol": "P_AI", "display_name": "AI Pressure", "category": "OAM_PRESSURE", "layer": "AI / Formation", "definition": "AI output replacing formation rather than supporting it.", "default": 0.0, "polarity": "subtract"}, {"id": "P_AI_crutch", "symbol": "P_AI-crutch", "display_name": "AI Crutch", "category": "RISK", "layer": "AI / Formation Debt", "definition": "AI dependency, formation debt, verification gap, or competence shock.", "default": 0.0, "polarity": "subtract"}, {"id": "P_institution", "symbol": "P_institution", "display_name": "Institution", "category": "OAM_PRESSURE", "layer": "Institutional", "definition": "Institution variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "P_civic", "symbol": "P_civic", "display_name": "Civic", "category": "OAM_PRESSURE", "layer": "Civic", "definition": "Civic variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "P_connection", "symbol": "P_connection", "display_name": "Connection", "category": "OAM_PRESSURE", "layer": "Belonging", "definition": "Connection variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "P_weightless", "symbol": "P_weightless", "display_name": "Weightless", "category": "OAM_PRESSURE", "layer": "Online Consequence", "definition": "Weightless variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "P_school", "symbol": "P_school", "display_name": "School", "category": "OAM_PRESSURE", "layer": "Early Education", "definition": "School variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "P_identity", "symbol": "P_identity", "display_name": "Identity", "category": "OAM_PRESSURE", "layer": "Identity Formation", "definition": "Identity variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "P_home", "symbol": "P_home", "display_name": "Home", "category": "OAM_PRESSURE", "layer": "Family", "definition": "Home variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "P_forced_gradient", "symbol": "P_forced-gradient", "display_name": "Forced Gradient", "category": "OAM_PRESSURE", "layer": "Forced Path", "definition": "Forced Gradient variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "P_home_fracture", "symbol": "P_home-fracture", "display_name": "Home Fracture", "category": "OAM_PRESSURE", "layer": "Family Fracture", "definition": "Home Fracture variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "P_civic_capture", "symbol": "P_civic-capture", "display_name": "Civic Capture", "category": "RISK", "layer": "Civic Capture", "definition": "Civic Capture variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "P_personal", "symbol": "P_personal", "display_name": "Personal", "category": "OAM_PRESSURE", "layer": "Individual Future Loss", "definition": "Personal variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "P_future_loss", "symbol": "P_future-loss", "display_name": "Future Loss", "category": "OAM_PRESSURE", "layer": "Individual Future Loss", "definition": "Future Loss variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "P_coping", "symbol": "P_coping", "display_name": "Coping", "category": "RISK", "layer": "False Closure", "definition": "Coping variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "P_societal_capture", "symbol": "P_societal-capture", "display_name": "Societal Capture", "category": "OAM_PRESSURE", "layer": "Permission / Belonging", "definition": "Societal Capture variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "P_dogma", "symbol": "P_dogma", "display_name": "Dogma", "category": "OAM_PRESSURE", "layer": "Permission / Dogma", "definition": "Dogma variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "P_belonging_loss", "symbol": "P_belonging-loss", "display_name": "Belonging Loss", "category": "OAM_PRESSURE", "layer": "Permission / Belonging", "definition": "Belonging Loss variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "P_self_censorship", "symbol": "P_self-censorship", "display_name": "Self Censorship", "category": "OAM_PRESSURE", "layer": "Permission / Identity", "definition": "Self Censorship variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "P_identity_lock", "symbol": "P_identity-lock", "display_name": "Identity Lock", "category": "OAM_PRESSURE", "layer": "Identity", "definition": "Identity Lock variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "PEI_t", "symbol": "PEI_t", "display_name": "Pei", "category": "OAM_PRESSURE", "layer": "Parent Education Inheritance", "definition": "Parent education pressure history transferred into the child’s education field.", "default": 0.0, "polarity": "subtract"}, {"id": "P_college_only", "symbol": "P_college-only", "display_name": "College Only", "category": "OAM_PRESSURE", "layer": "Parent Education Inheritance", "definition": "Pressure that college is the only safe or successful path.", "default": 0.0, "polarity": "subtract"}, {"id": "P_college_avoidance", "symbol": "P_college-avoidance", "display_name": "College Avoidance", "category": "OAM_PRESSURE", "layer": "Parent Education Inheritance", "definition": "Pressure that college is dangerous, excluding, a debt trap, or betrayal.", "default": 0.0, "polarity": "subtract"}, {"id": "PCE_t", "symbol": "PCE_t", "display_name": "Pce", "category": "OAM_PRESSURE", "layer": "Cognition Graduation", "definition": "Premature college expectation before cognition visibility or path resonance.", "default": 0.0, "polarity": "subtract"}, {"id": "CFD_t", "symbol": "CFD_t", "display_name": "Cfd", "category": "STATE", "layer": "Cognition Graduation", "definition": "Choice fog density around a student's next path.", "default": 0.0, "polarity": "subtract"}, {"id": "P_labeling", "symbol": "P_labeling", "display_name": "Labeling", "category": "OAM_PRESSURE", "layer": "Genius Recognition", "definition": "Labels that misread cognition or latent genius as failure, laziness, defiance, or lack of ability.", "default": 0.0, "polarity": "subtract"}, {"id": "OA_t", "symbol": "OA_t", "display_name": "Oa", "category": "OAM_PRESSURE", "layer": "Agency", "definition": "Oa variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "ROA_t", "symbol": "ROA_t", "display_name": "Roa", "category": "OAM_PRESSURE", "layer": "Role Agency", "definition": "Roa variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "CD_t", "symbol": "CD_t", "display_name": "Cd", "category": "STATE", "layer": "Closure", "definition": "Cd variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "CP_t", "symbol": "CP_t", "display_name": "Cp", "category": "OAM_PRESSURE", "layer": "Craving", "definition": "Cp variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "TT_t", "symbol": "TT_t", "display_name": "Tt", "category": "OAM_PRESSURE", "layer": "Time Theft", "definition": "Tt variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "WC_t", "symbol": "WC_t", "display_name": "Wc", "category": "OAM_PRESSURE", "layer": "Online Consequence", "definition": "Wc variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "RF_loss_t", "symbol": "RF_loss_t", "display_name": "Rf Loss", "category": "OAM_PRESSURE", "layer": "Reality Friction Loss", "definition": "Rf Loss variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "CTF_t", "symbol": "CTF_t", "display_name": "Ctf", "category": "OAM_PRESSURE", "layer": "Cognition Translation", "definition": "Ctf variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "IF_t", "symbol": "IF_t", "display_name": "If", "category": "OAM_PRESSURE", "layer": "Identity Formation", "definition": "If variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "FIL_t", "symbol": "FIL_t", "display_name": "Fil", "category": "OAM_PRESSURE", "layer": "Future Imagination", "definition": "Fil variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "HDB_t", "symbol": "HDB_t", "display_name": "Hdb", "category": "OUTPUT", "layer": "Human Dust Bowl", "definition": "Hdb variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "computed"}, {"id": "FCI_t", "symbol": "FCI_t", "display_name": "Fci", "category": "OUTPUT", "layer": "False Closure", "definition": "Fci variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "computed"}, {"id": "AD_t", "symbol": "AD_t", "display_name": "Ad", "category": "OUTPUT", "layer": "Agency Drain", "definition": "Ad variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "computed"}, {"id": "TIP_t", "symbol": "TIP_t", "display_name": "Tip", "category": "RISK", "layer": "Teacher Strain", "definition": "Tip variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "CCL_t", "symbol": "CCL_t", "display_name": "Ccl", "category": "RISK", "layer": "Classroom Load", "definition": "Ccl variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "AFF_t", "symbol": "AFF_t", "display_name": "Aff", "category": "OAM_PRESSURE", "layer": "AI Future Fear", "definition": "Aff variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "PEM_t", "symbol": "PEM_t", "display_name": "Pem", "category": "OAM_PRESSURE", "layer": "Parent Literacy", "definition": "Pem variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "PEL_deficit_t", "symbol": "PEL_deficit_t", "display_name": "Pel Deficit", "category": "OAM_PRESSURE", "layer": "Parent Literacy", "definition": "Pel Deficit variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "subtract"}, {"id": "LC_t", "symbol": "LC_t", "display_name": "Lc", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Actual closure of a learning, repair, meaning, or agency loop.", "default": 0.0, "polarity": "add"}, {"id": "IE_t", "symbol": "IE_t", "display_name": "Ie", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Internal / Externalize: making hidden cognition visible without freezing identity.", "default": 0.0, "polarity": "add"}, {"id": "EOW_t", "symbol": "EOW_t", "display_name": "Eow", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Reviewable evidence of work, including artifacts, receipts, demonstrations, logs, or outputs.", "default": 0.0, "polarity": "add"}, {"id": "ID_t", "symbol": "ID_t", "display_name": "Id", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Id variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "TC_t", "symbol": "TC_t", "display_name": "Tc", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Tc variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "PF_t", "symbol": "PF_t", "display_name": "Pf", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Pf variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "CareerBridge_t", "symbol": "CareerBridge_t", "display_name": "Careerbridge", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Careerbridge variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "Cascade_t", "symbol": "Cascade_t", "display_name": "Cascade", "category": "BRIDGE", "layer": "General / Cross-Layer", "definition": "Cascade variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "Reach_t", "symbol": "Reach_t", "display_name": "Reach", "category": "BRIDGE", "layer": "General / Cross-Layer", "definition": "Reach variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "TrustedConnection_t", "symbol": "TrustedConnection_t", "display_name": "Trustedconnection", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Trustedconnection variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "RF_t", "symbol": "RF_t", "display_name": "Rf", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Rf variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "Grit_t", "symbol": "Grit_t", "display_name": "Grit", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Grit variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "VerificationTraining_t", "symbol": "VerificationTraining_t", "display_name": "Verificationtraining", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Verificationtraining variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "HumanMentorship_t", "symbol": "HumanMentorship_t", "display_name": "Humanmentorship", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Humanmentorship variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "ScaffoldDiscipline_t", "symbol": "ScaffoldDiscipline_t", "display_name": "Scaffolddiscipline", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Scaffolddiscipline variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "FormationPreservingAI_t", "symbol": "FormationPreservingAI_t", "display_name": "Formationpreservingai", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "AI that supports formation rather than replacing it.", "default": 0.0, "polarity": "add"}, {"id": "FutureImagination_t", "symbol": "FutureImagination_t", "display_name": "Futureimagination", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Futureimagination variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "FamilySupport_t", "symbol": "FamilySupport_t", "display_name": "Familysupport", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Familysupport variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "TeacherTime_t", "symbol": "TeacherTime_t", "display_name": "Teachertime", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Teachertime variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "PublicProvenance_t", "symbol": "PublicProvenance_t", "display_name": "Publicprovenance", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Publicprovenance variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "ParentLiteracy_t", "symbol": "ParentLiteracy_t", "display_name": "Parentliteracy", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Parent understanding of learning formation, cognition, AI risk, pressure, and loop closure.", "default": 0.0, "polarity": "add"}, {"id": "ActualLearningStateVisibility_t", "symbol": "ActualLearningStateVisibility_t", "display_name": "Actuallearningstatevisibility", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Actuallearningstatevisibility variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "ChildCognitionVisibility_t", "symbol": "ChildCognitionVisibility_t", "display_name": "Childcognitionvisibility", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Childcognitionvisibility variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "CivicLiteracy_t", "symbol": "CivicLiteracy_t", "display_name": "Civicliteracy", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Civicliteracy variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "HouseholdSupport_t", "symbol": "HouseholdSupport_t", "display_name": "Householdsupport", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Householdsupport variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "FuturePathVisibility_t", "symbol": "FuturePathVisibility_t", "display_name": "Futurepathvisibility", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Futurepathvisibility variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "SafeRepairPath_t", "symbol": "SafeRepairPath_t", "display_name": "Saferepairpath", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Saferepairpath variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "AccountabilityWithRepair_t", "symbol": "AccountabilityWithRepair_t", "display_name": "Accountabilitywithrepair", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Accountabilitywithrepair variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "FormationSupport_t", "symbol": "FormationSupport_t", "display_name": "Formationsupport", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Formationsupport variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "CuriositySafety_t", "symbol": "CuriositySafety_t", "display_name": "Curiositysafety", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Curiositysafety variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "QuestionPermission_t", "symbol": "QuestionPermission_t", "display_name": "Questionpermission", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Questionpermission variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "BelongingWithoutCapture_t", "symbol": "BelongingWithoutCapture_t", "display_name": "Belongingwithoutcapture", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Belongingwithoutcapture variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "IdentityMobility_t", "symbol": "IdentityMobility_t", "display_name": "Identitymobility", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Identitymobility variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "SafeDissent_t", "symbol": "SafeDissent_t", "display_name": "Safedissent", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Safedissent variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "EducationHistoryVisibility_t", "symbol": "EducationHistoryVisibility_t", "display_name": "Educationhistoryvisibility", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Parent visibility into how their own education story affects the child's path.", "default": 0.0, "polarity": "add"}, {"id": "PressureInheritanceAwareness_t", "symbol": "PressureInheritanceAwareness_t", "display_name": "Pressureinheritanceawareness", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Recognition of inherited fear, shame, debt memory, status pressure, or credential wounds before projection.", "default": 0.0, "polarity": "add"}, {"id": "FutureFitDialogue_t", "symbol": "FutureFitDialogue_t", "display_name": "Futurefitdialogue", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Honest parent/student dialogue about fit, cost, cognition, desire, ability, dignity, and path.", "default": 0.0, "polarity": "add"}, {"id": "ChoicePlurality_t", "symbol": "ChoicePlurality_t", "display_name": "Choiceplurality", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Multiple valid post-school paths can be compared without shame.", "default": 0.0, "polarity": "add"}, {"id": "DebtTransparentPlanning_t", "symbol": "DebtTransparentPlanning_t", "display_name": "Debttransparentplanning", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Debttransparentplanning variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "NonProjectionSupport_t", "symbol": "NonProjectionSupport_t", "display_name": "Nonprojectionsupport", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Nonprojectionsupport variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "CG_t", "symbol": "CG_t", "display_name": "Cg", "category": "OUTPUT", "layer": "General / Cross-Layer", "definition": "Cognition Graduation: the degree to which a student exits high school understanding their own cognition.", "default": 0.0, "polarity": "computed"}, {"id": "CL_t", "symbol": "CL_t", "display_name": "Cl", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Cognition Literacy: understanding how one's mind learns, maps, creates, repairs, and responds under pressure.", "default": 0.0, "polarity": "add"}, {"id": "PR_t", "symbol": "PR_t", "display_name": "Pr", "category": "BRIDGE", "layer": "General / Cross-Layer", "definition": "Path Resonance: fit between cognition, values, capacity, curiosity, and next path.", "default": 0.0, "polarity": "add"}, {"id": "DR_t", "symbol": "DR_t", "display_name": "Dr", "category": "BRIDGE", "layer": "General / Cross-Layer", "definition": "Domain Resonance: fit between cognition and a field, problem, craft, medium, role, or mission.", "default": 0.0, "polarity": "add"}, {"id": "DE_t", "symbol": "DE_t", "display_name": "De", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Domain Exposure: breadth and quality of exposure to possible fields, crafts, roles, problems, and futures.", "default": 0.0, "polarity": "add"}, {"id": "FCA_t", "symbol": "FCA_t", "display_name": "Fca", "category": "OUTPUT", "layer": "General / Cross-Layer", "definition": "Future Choice Agency: ability to choose a path because the student understands self and options.", "default": 0.0, "polarity": "computed"}, {"id": "GR_t", "symbol": "GR_t", "display_name": "Gr", "category": "OUTPUT", "layer": "General / Cross-Layer", "definition": "Genius Recognition: system capacity to identify nonstandard or under-translated genius.", "default": 0.0, "polarity": "computed"}, {"id": "TL_t", "symbol": "TL_t", "display_name": "Tl", "category": "BRIDGE", "layer": "General / Cross-Layer", "definition": "Talent Legibility: the degree to which ability becomes visible to reviewers, mentors, institutions, employers, or the public.", "default": 0.0, "polarity": "add"}, {"id": "LG_t", "symbol": "LG_t", "display_name": "Lg", "category": "STATE", "layer": "General / Cross-Layer", "definition": "Latent Genius: high potential not yet matched to field, language, recognition, proof path, or resonance.", "default": 0.0, "polarity": "contextual"}, {"id": "MentorBridge_t", "symbol": "MentorBridge_t", "display_name": "Mentorbridge", "category": "HIR_REPAIR", "layer": "General / Cross-Layer", "definition": "Mentorbridge variable from the v0.9 Substrate Education model.", "default": 0.0, "polarity": "add"}, {"id": "G_visibility", "symbol": "G_visibility", "display_name": "G Visibility", "category": "OUTPUT", "layer": "General / Cross-Layer", "definition": "Computed visibility of genius after cognition literacy, exposure, resonance, and evidence overcome blindness and labeling.", "default": 0.0, "polarity": "computed"}, {"id": "G_recovery", "symbol": "G_recovery", "display_name": "G Recovery", "category": "OUTPUT", "layer": "General / Cross-Layer", "definition": "Computed recovery path for latent genius through literacy, exposure, resonance, mentorship, evidence, and provenance.", "default": 0.0, "polarity": "computed"}, {"id": "CDens_t", "symbol": "CDens_t", "display_name": "Context Density", "category": "HIR_REPAIR", "layer": "Continuity / Context Density", "definition": "Degree to which signal carries meaning, provenance, intent, boundary, and relational structure.", "default": 0.0, "polarity": "add"}, {"id": "SB_t", "symbol": "SB_t", "display_name": "Structural Baseline", "category": "HIR_REPAIR", "layer": "Continuity / Baseline", "definition": "Stable reference structure the system can compare against under pressure.", "default": 0.0, "polarity": "add"}, {"id": "BR_t", "symbol": "BR_t", "display_name": "Baseline Reversion", "category": "HIR_REPAIR", "layer": "Continuity / Baseline", "definition": "Ability to return to structural baseline after drift, ambiguity, corruption, or pressure.", "default": 0.0, "polarity": "add"}, {"id": "RJC_t", "symbol": "RJC_t", "display_name": "Rejoin Capacity", "category": "HIR_REPAIR", "layer": "Continuity / Transfer", "definition": "Ability of a fragment to reconnect to the larger structure it belongs to without losing meaning.", "default": 0.0, "polarity": "add"}, {"id": "DLC_t", "symbol": "DLC_t", "display_name": "Data Loop Closure", "category": "OUTPUT", "layer": "Continuity / Transfer", "definition": "Degree to which transferred data closes its loop by returning to context.", "default": 0.0, "polarity": "computed"}, {"id": "RDT_t", "symbol": "RDT_t", "display_name": "Resonant Data Transfer", "category": "OUTPUT", "layer": "Continuity / Transfer", "definition": "Transfer in which data returns to structure with context, baseline, and relational integrity intact.", "default": 0.0, "polarity": "computed"}, {"id": "RCtx_t", "symbol": "RCtx_t", "display_name": "Reconstructed Context Fidelity", "category": "OUTPUT", "layer": "Continuity / Reconstruction", "definition": "Fidelity of reconstructed context after corruption, fragmentation, drift, or partial loss.", "default": 0.0, "polarity": "computed"}, {"id": "HD_t", "symbol": "HD_t", "display_name": "Hollow Data", "category": "OAM_PRESSURE", "layer": "Continuity / Failure", "definition": "Data or metadata without enough context, provenance, consent clarity, meaning, or boundary structure.", "default": 0.0, "polarity": "subtract"}, {"id": "HC_t", "symbol": "HC_t", "display_name": "Hollow Code", "category": "OAM_PRESSURE", "layer": "Continuity / Failure", "definition": "Code that functions syntactically but lacks governance, context boundaries, repair logic, or pressure stability.", "default": 0.0, "polarity": "subtract"}, {"id": "SC_t", "symbol": "SC_t", "display_name": "Structural Collapse", "category": "RISK", "layer": "Continuity / Failure", "definition": "Collapse of meaning, trust, baseline, or relational structure under pressure.", "default": 0.0, "polarity": "subtract"}, {"id": "RS_t", "symbol": "RS_t", "display_name": "Relational Structure", "category": "HIR_REPAIR", "layer": "Continuity / Structure", "definition": "Internal relationship structure among concepts, claims, equations, boundaries, files, or memories.", "default": 0.0, "polarity": "add"}, {"id": "BA_t", "symbol": "BA_t", "display_name": "Baseline Anchors", "category": "HIR_REPAIR", "layer": "Continuity / Structure", "definition": "Stable reference points that let fragments locate their original structure.", "default": 0.0, "polarity": "add"}, {"id": "RepCap_t", "symbol": "RepCap_t", "display_name": "Repair Capacity", "category": "HIR_REPAIR", "layer": "Continuity / Repair", "definition": "Ability to correct, heal, repair, or restore continuity after pressure.", "default": 0.0, "polarity": "add"}, {"id": "Frag_t", "symbol": "Frag_t", "display_name": "Fragmentation Load", "category": "OAM_PRESSURE", "layer": "Continuity / Failure", "definition": "Degree to which signal or information is broken into pieces that cannot easily rejoin.", "default": 0.0, "polarity": "subtract"}, {"id": "CC_t", "symbol": "CC_t", "display_name": "Context Collapse", "category": "OAM_PRESSURE", "layer": "Continuity / Failure", "definition": "Loss of surrounding meaning, relationship, source condition, and interpretive boundary.", "default": 0.0, "polarity": "subtract"}, {"id": "Drift_t", "symbol": "Drift_t", "display_name": "Drift Pressure", "category": "OAM_PRESSURE", "layer": "Continuity / Failure", "definition": "Pressure causing a system, memory, data object, or runtime to move away from baseline.", "default": 0.0, "polarity": "subtract"}, {"id": "Corr_t", "symbol": "Corr_t", "display_name": "Corruption Load", "category": "OAM_PRESSURE", "layer": "Continuity / Failure", "definition": "Damage, loss, malformed content, broken links, missing files, or degraded transfer.", "default": 0.0, "polarity": "subtract"}, {"id": "AL_t", "symbol": "AL_t", "display_name": "Ambiguity Load", "category": "OAM_PRESSURE", "layer": "Continuity / Failure", "definition": "Multiple possible reconstructions competing without enough structure to resolve safely.", "default": 0.0, "polarity": "subtract"}, {"id": "BI_t", "symbol": "BI_t", "display_name": "Bit Integrity", "category": "HIR_REPAIR", "layer": "Archival Integrity", "definition": "Degree to which file/data remains technically readable or bit-preserved.", "default": 0.0, "polarity": "add"}, {"id": "PI_t", "symbol": "PI_t", "display_name": "Provenance Integrity", "category": "HIR_REPAIR", "layer": "Archival Integrity", "definition": "Degree to which origin, version, custody, and transformation path remain traceable.", "default": 0.0, "polarity": "add"}, {"id": "MD_t", "symbol": "MD_t", "display_name": "Meaning Drift", "category": "OAM_PRESSURE", "layer": "Archival Integrity", "definition": "Interpretation changes without traceable correction.", "default": 0.0, "polarity": "subtract"}, {"id": "MH_t", "symbol": "MH_t", "display_name": "Metadata Hollowing", "category": "OAM_PRESSURE", "layer": "Archival Integrity", "definition": "Metadata exists but lacks lived/contextual density.", "default": 0.0, "polarity": "subtract"}, {"id": "SCorr_t", "symbol": "SCorr_t", "display_name": "Structural Corruption", "category": "OAM_PRESSURE", "layer": "Archival Integrity", "definition": "Data still exists but no longer holds coherent shape.", "default": 0.0, "polarity": "subtract"}, {"id": "SDS_t", "symbol": "SDS_t", "display_name": "Surviving Density Signal", "category": "HIR_REPAIR", "layer": "Reconstruction", "definition": "Amount of meaningful structure that remains after corruption.", "default": 0.0, "polarity": "add"}, {"id": "PA_t", "symbol": "PA_t", "display_name": "Provenance Anchors", "category": "HIR_REPAIR", "layer": "Reconstruction", "definition": "Traceable origin/version/context markers that constrain reconstruction.", "default": 0.0, "polarity": "add"}, {"id": "BSig_t", "symbol": "BSig_t", "display_name": "Baseline Signature", "category": "HIR_REPAIR", "layer": "Reconstruction", "definition": "Signature of the governing baseline structure.", "default": 0.0, "polarity": "add"}, {"id": "RMC_t", "symbol": "RMC_t", "display_name": "Redundant Meaning Cues", "category": "HIR_REPAIR", "layer": "Reconstruction", "definition": "Repeated but non-identical structural signals preserving meaning across transfer or corruption.", "default": 0.0, "polarity": "add"}, {"id": "P_context_collapse", "symbol": "P_context_collapse", "display_name": "Context Collapse Pressure", "category": "OAM_PRESSURE", "layer": "AI Substrate / Context Collapse", "definition": "Combined pressure from metadata extraction, provenance loss, consent opacity, purpose drift, and lived context loss.", "default": 0.0, "polarity": "subtract"}, {"id": "GuardrailCompensation_t", "symbol": "GuardrailCompensation_t", "display_name": "Guardrail Compensation", "category": "OAM_PRESSURE", "layer": "AI Substrate / Compute Waste", "definition": "Downstream expansion of safety/filtering/moderation burden caused by upstream context weakness.", "default": 0.0, "polarity": "subtract"}, {"id": "ComputeOverhead_t", "symbol": "ComputeOverhead_t", "display_name": "Compute Overhead", "category": "OAM_PRESSURE", "layer": "AI Substrate / Compute Waste", "definition": "Additional compute required to compensate for ambiguity or weak provenance.", "default": 0.0, "polarity": "subtract"}, {"id": "TrustErosion_t", "symbol": "TrustErosion_t", "display_name": "Trust Erosion", "category": "OAM_PRESSURE", "layer": "AI Substrate / Trust", "definition": "Loss of trust caused by opacity, extraction, decontextualization, or misuse.", "default": 0.0, "polarity": "subtract"}, {"id": "PurposeBoundUse_t", "symbol": "PurposeBoundUse_t", "display_name": "Purpose-Bound Use", "category": "HIR_REPAIR", "layer": "AI Substrate / Data Stewardship", "definition": "Data or information used only within declared bounded purpose.", "default": 0.0, "polarity": "add"}, {"id": "HumanMeaningAnchor_t", "symbol": "HumanMeaningAnchor_t", "display_name": "Human Meaning Anchor", "category": "HIR_REPAIR", "layer": "AI Substrate / Context", "definition": "Human-provided intent, context, or meaning remains attached to information.", "default": 0.0, "polarity": "add"}, {"id": "Auditability_t", "symbol": "Auditability_t", "display_name": "Auditability", "category": "HIR_REPAIR", "layer": "AI Substrate / Accountability", "definition": "Independent review can inspect what happened.", "default": 0.0, "polarity": "add"}, {"id": "ComputeStewardship_t", "symbol": "ComputeStewardship_t", "display_name": "Compute Stewardship", "category": "HIR_REPAIR", "layer": "AI Substrate / Stewardship", "definition": "Compute is treated as resource responsibility rather than infinite default.", "default": 0.0, "polarity": "add"}, {"id": "WaterStewardship_t", "symbol": "WaterStewardship_t", "display_name": "Water Stewardship", "category": "HIR_REPAIR", "layer": "AI Substrate / Stewardship", "definition": "Cooling and water cost are included in system accounting.", "default": 0.0, "polarity": "add"}, {"id": "Scale_t", "symbol": "Scale_t", "display_name": "Scale", "category": "MULTIPLIER", "layer": "AI Substrate / Compute Waste", "definition": "Scale of context-collapse pressure expansion.", "default": 0.0, "polarity": "subtract"}, {"id": "Ambiguity_t", "symbol": "Ambiguity_t", "display_name": "Ambiguity", "category": "OAM_PRESSURE", "layer": "AI Substrate / Compute Waste", "definition": "Ambiguity introduced by context-poor data or weak provenance.", "default": 0.0, "polarity": "subtract"}, {"id": "ComputeIntensity_t", "symbol": "ComputeIntensity_t", "display_name": "Compute Intensity", "category": "MULTIPLIER", "layer": "AI Substrate / Compute Waste", "definition": "Relative compute intensity of downstream compensation.", "default": 0.0, "polarity": "subtract"}];
const PRESETS = [{"id": "credential_blind_talent_loss", "display_name": "Credential-Blind Talent Loss", "description": "High cost/credential pressure hides non-traditional talent.", "variables": {"P_cost": 0.85, "P_credential": 0.9, "P_access": 0.75, "P_time": 0.7, "EOW_t": 0.25, "PublicProvenance_t": 0.2, "TC_t": 0.3, "ID_t": 0.35}}, {"id": "ai_crutch_formation_debt", "display_name": "AI-Crutch Formation Debt", "description": "AI used as crutch creates passed-but-unformed states.", "variables": {"P_AI": 0.8, "P_AI_crutch": 0.85, "VerificationTraining_t": 0.25, "ScaffoldDiscipline_t": 0.3, "HumanMentorship_t": 0.35, "RF_t": 0.4, "FormationPreservingAI_t": 0.35}}, {"id": "teacher_pressure_chamber", "display_name": "Teacher Pressure Chamber", "description": "High teacher overload turns classroom into compression field.", "variables": {"TIP_t": 0.85, "CCL_t": 0.8, "PEM_t": 0.75, "P_attention": 0.75, "P_AI": 0.65, "P_institution": 0.75, "TeacherTime_t": 0.25, "ParentLiteracy_t": 0.3, "IE_t": 0.35}}, {"id": "parent_projection_college_survival", "display_name": "Parent Projection / College-as-Survival", "description": "Parent fear drives premature college pressure.", "variables": {"PEI_t": 0.85, "P_college_only": 0.9, "PCE_t": 0.8, "CFD_t": 0.75, "EducationHistoryVisibility_t": 0.3, "FutureFitDialogue_t": 0.35, "ChoicePlurality_t": 0.25, "CG_t": 0.4, "PR_t": 0.45, "FCA_t": 0.35}}, {"id": "latent_genius_burial", "display_name": "Latent Genius Burial", "description": "High-potential cognition is misread as failure.", "variables": {"LG_t": 0.8, "P_labeling": 0.85, "P_credential": 0.75, "CTF_t": 0.7, "IF_t": 0.65, "CL_t": 0.3, "DE_t": 0.35, "DR_t": 0.3, "EOW_t": 0.4, "MentorBridge_t": 0.35, "TL_t": 0.3}}, {"id": "hollow_metadata_context_collapse", "display_name": "Hollow Metadata / Context Collapse", "description": "Metadata remains while meaning collapses.", "variables": {"HD_t": 0.85, "CC_t": 0.85, "MH_t": 0.8, "P_context_collapse": 0.85, "AL_t": 0.75, "CDens_t": 0.25, "PI_t": 0.25, "BA_t": 0.25, "RMC_t": 0.2, "Auditability_t": 0.25}}, {"id": "density_bound_reconstruction", "display_name": "Density-Bound Reconstruction", "description": "Context can be reconstructed from surviving density with bounded uncertainty.", "variables": {"SDS_t": 0.85, "RS_t": 0.8, "PA_t": 0.8, "BSig_t": 0.85, "RMC_t": 0.8, "Corr_t": 0.2, "AL_t": 0.25, "CDens_t": 0.8, "BA_t": 0.8, "BR_t": 0.75}}, {"id": "context_lossless_transfer", "display_name": "Context-Lossless Transfer", "description": "Transfer preserves both bits and meaning-structure.", "variables": {"BI_t": 0.95, "CDens_t": 0.85, "PI_t": 0.85, "BA_t": 0.8, "RMC_t": 0.75, "RJC_t": 0.8, "CLoss_t": 0.1, "CC_t": 0.1, "Corr_t": 0.1, "AL_t": 0.15}}, {"id": "ai_context_collapse_compute_waste", "display_name": "AI Context Collapse / Compute Waste", "description": "Compute and guardrail burden rise because context was stripped upstream.", "variables": {"P_context_collapse": 0.9, "GuardrailCompensation_t": 0.85, "ComputeOverhead_t": 0.8, "TrustErosion_t": 0.8, "Scale_t": 0.85, "Ambiguity_t": 0.8, "ComputeIntensity_t": 0.75, "PI_t": 0.25, "PurposeBoundUse_t": 0.2, "HumanMeaningAnchor_t": 0.2, "Auditability_t": 0.25, "ComputeStewardship_t": 0.25}}, {"id": "diamond_framework_reconstruction", "display_name": "6.10 KB Diamond / Framework Reconstruction", "description": "Compact framework seed re-expands into recognizable HIR/OAM structure.", "variables": {"CDens_t": 0.95, "RS_t": 0.9, "BA_t": 0.9, "BSig_t": 0.95, "RMC_t": 0.85, "BR_t": 0.9, "RJC_t": 0.9, "CC_t": 0.1, "AL_t": 0.15, "Drift_t": 0.1, "SB_t": 0.9, "RepCap_t": 0.85}}];

let values = {};

function clamp01(x) {
  x = Number.isFinite(x) ? x : 0;
  return Math.max(0, Math.min(1, x));
}
function get(id) {
  return clamp01(values[id] ?? 0);
}
function avg(ids) {
  const vals = ids.map(get);
  if (!vals.length) return 0;
  return vals.reduce((a,b)=>a+b,0)/vals.length;
}
function prod(ids) {
  if (!ids.length) return 0;
  return ids.map(get).reduce((a,b)=>a*b,1);
}
function route(score, risk=0, repair=0) {
  if (score < 0.30 || (risk >= 0.80 && repair < 0.35)) return "RED";
  if (score < 0.50 || risk >= 0.80 || risk >= 0.65 && repair < 0.35) return "ORANGE";
  if (score < 0.70 || risk >= 0.65) return "YELLOW";
  return "GREEN";
}
function routeLabel(r) {
  return {
    GREEN: "GREEN — STABLE",
    YELLOW: "YELLOW — WATCH",
    ORANGE: "ORANGE — REPAIR REQUIRED",
    RED: "RED — HARD REPAIR"
  }[r] || r;
}
function colorForRoute(r) {
  return {GREEN:"var(--green)",YELLOW:"var(--yellow)",ORANGE:"var(--orange)",RED:"var(--red)"}[r] || "var(--blue)";
}
const OAM_CORE = [
  "P_cost","P_debt","P_credential","P_access","P_attention","P_sensational","P_algorithm","P_time",
  "P_AI","P_AI_crutch","P_institution","P_civic","P_connection","P_weightless","P_school","P_identity",
  "P_home","P_forced_gradient","P_home_fracture","P_civic_capture","P_personal","P_future_loss","P_coping",
  "P_societal_capture","P_dogma","PEI_t","P_college_only","P_college_avoidance","PCE_t","CFD_t","P_labeling",
  "OA_t","CD_t","CTF_t","IF_t","HDB_t","FCI_t","AD_t","TIP_t","CCL_t","AFF_t","PEM_t","PEL_deficit_t"
];
const HIR_CORE = [
  "LC_t","IE_t","EOW_t","ID_t","TC_t","Reach_t","Cascade_t","TrustedConnection_t","RF_t","Grit_t",
  "VerificationTraining_t","HumanMentorship_t","ScaffoldDiscipline_t","FormationPreservingAI_t",
  "FutureImagination_t","TeacherTime_t","PublicProvenance_t","ParentLiteracy_t","ChildCognitionVisibility_t",
  "CivicLiteracy_t","HouseholdSupport_t","FuturePathVisibility_t","SafeRepairPath_t","AccountabilityWithRepair_t",
  "CuriositySafety_t","QuestionPermission_t","BelongingWithoutCapture_t","IdentityMobility_t","SafeDissent_t",
  "EducationHistoryVisibility_t","PressureInheritanceAwareness_t","FutureFitDialogue_t","ChoicePlurality_t",
  "DebtTransparentPlanning_t","NonProjectionSupport_t","CG_t","CL_t","PR_t","DR_t","DE_t","FCA_t","GR_t","TL_t"
];
const CONT_PRESSURES = ["HD_t","HC_t","CC_t","Frag_t","Drift_t","Corr_t","AL_t","MD_t","MH_t","SCorr_t","P_context_collapse","GuardrailCompensation_t","ComputeOverhead_t","TrustErosion_t","Ambiguity_t"];
const CONT_REPAIRS = ["CDens_t","SB_t","BR_t","RJC_t","RS_t","BA_t","RepCap_t","BI_t","PI_t","SDS_t","PA_t","BSig_t","RMC_t","PurposeBoundUse_t","HumanMeaningAnchor_t","Auditability_t","ComputeStewardship_t","WaterStewardship_t"];

function balancedScore(positiveIds, negativeIds, base=null) {
  const p = avg(positiveIds);
  const n = avg(negativeIds);
  if (base === null) return clamp01((p + (1-n)) / 2);
  return clamp01((base + p + (1-n)) / 3);
}

function compute() {
  document.getElementById("A_val").textContent = Number(document.getElementById("A_t").value).toFixed(2);
  document.getElementById("B_val").textContent = Number(document.getElementById("B_t").value).toFixed(2);
  const A = Number(document.getElementById("A_t").value);
  const B = Number(document.getElementById("B_t").value);
  const base = A * B;

  // Output formulas use normalized scenario scoring to avoid false extremes from large unweighted additive stacks.
  const pressureMean = avg(OAM_CORE);
  const repairMean = avg(HIR_CORE);
  const riskMean = avg(["P_AI_crutch","P_civic_capture","P_coping","HDB_t","FCI_t","TIP_t","CCL_t","P_labeling","P_context_collapse","SC_t"]);
  const contPressure = avg(CONT_PRESSURES);
  const contRepair = avg(CONT_REPAIRS);

  const outputs = {};
  outputs.S_future = balancedScore(HIR_CORE, OAM_CORE, base);
  outputs.S_path = clamp01((get("CG_t") + get("PR_t") + get("FCA_t") + (1-get("PCE_t")) + (1-get("CFD_t"))) / 5);
  outputs.S_parent_alignment = balancedScore(
    ["ParentLiteracy_t","EducationHistoryVisibility_t","PressureInheritanceAwareness_t","ChildCognitionVisibility_t","FutureFitDialogue_t","ChoicePlurality_t","DebtTransparentPlanning_t","NonProjectionSupport_t"],
    ["PEM_t","PEL_deficit_t","PEI_t","P_college_only","P_college_avoidance","P_time","P_debt","P_home_fracture","P_societal_capture","P_dogma"],
    base
  );
  outputs.G_visibility = balancedScore(["CL_t","DE_t","DR_t","EOW_t"], ["P_credential","P_labeling","CTF_t","IF_t"]);
  outputs.G_recovery = balancedScore(["CL_t","DE_t","DR_t","MentorBridge_t","EOW_t","PublicProvenance_t"], ["P_labeling","P_credential","P_time","P_attention","P_societal_capture","P_dogma"]);
  outputs.Continuity_t = balancedScore(["CDens_t","RS_t","BA_t","RepCap_t","RJC_t"], ["Frag_t","CC_t","Drift_t","Corr_t"]);
  outputs.S_data = balancedScore(["BI_t","CDens_t","PI_t","BR_t"], ["CC_t","MD_t","MH_t","SCorr_t"]);
  outputs.S_runtime = balancedScore(["CDens_t","SB_t","BR_t"], ["HD_t","HC_t","CC_t","Drift_t"]);
  outputs.S_data_loop = balancedScore(["CDens_t","BA_t","RS_t","RJC_t"], ["Frag_t","CC_t","Drift_t","AL_t"]);
  outputs.RCtx_t = balancedScore(["SDS_t","RS_t","PA_t","BSig_t","RMC_t"], ["Corr_t","AL_t"]);
  outputs.W_AI = clamp01((avg(["P_context_collapse","GuardrailCompensation_t","ComputeOverhead_t","TrustErosion_t","Ambiguity_t"]) + get("Scale_t") + get("ComputeIntensity_t")) / 3 - avg(["PI_t","PurposeBoundUse_t","HumanMeaningAnchor_t","Auditability_t","ComputeStewardship_t"]) / 3);
  outputs.S_AI_substrate = balancedScore(["PI_t","PurposeBoundUse_t","HumanMeaningAnchor_t","Auditability_t","ComputeStewardship_t","WaterStewardship_t"], ["P_context_collapse","P_algorithm","P_attention","ComputeOverhead_t","GuardrailCompensation_t","TrustErosion_t"], base);

  renderResults(outputs, riskMean, repairMean, contPressure, contRepair);
  updateExport(outputs);
}

function renderResults(outputs, riskMean, repairMean, contPressure, contRepair) {
  const metrics = [
    ["S_future", "Future Formation", outputs.S_future, riskMean, repairMean],
    ["S_path", "Student Path Stability", outputs.S_path, avg(["PCE_t","CFD_t"]), avg(["CG_t","PR_t","FCA_t"])],
    ["S_parent_alignment", "Parent Alignment", outputs.S_parent_alignment, avg(["PEI_t","P_college_only","P_college_avoidance","PEM_t"]), avg(["EducationHistoryVisibility_t","FutureFitDialogue_t","ChoicePlurality_t"])],
    ["G_visibility", "Genius Visibility", outputs.G_visibility, avg(["P_labeling","P_credential","CTF_t","IF_t"]), avg(["CL_t","DE_t","DR_t","EOW_t"])],
    ["G_recovery", "Latent Genius Recovery", outputs.G_recovery, avg(["P_labeling","P_credential","P_time","P_attention"]), avg(["CL_t","DE_t","DR_t","MentorBridge_t","EOW_t"])],
    ["Continuity_t", "Continuity", outputs.Continuity_t, contPressure, contRepair],
    ["S_data", "Data / Archival Integrity", outputs.S_data, avg(["CC_t","MD_t","MH_t","SCorr_t"]), avg(["BI_t","CDens_t","PI_t","BR_t"])],
    ["S_runtime", "Runtime Stability", outputs.S_runtime, avg(["HD_t","HC_t","CC_t","Drift_t"]), avg(["CDens_t","SB_t","BR_t"])],
    ["S_data_loop", "Data Loop Closure", outputs.S_data_loop, avg(["Frag_t","CC_t","Drift_t","AL_t"]), avg(["CDens_t","BA_t","RS_t","RJC_t"])],
    ["RCtx_t", "Reconstructed Context Fidelity", outputs.RCtx_t, avg(["Corr_t","AL_t"]), avg(["SDS_t","RS_t","PA_t","BSig_t","RMC_t"])],
    ["W_AI", "AI Compute / Guardrail Waste", outputs.W_AI, outputs.W_AI, 1-outputs.W_AI],
    ["S_AI_substrate", "AI Substrate Stability", outputs.S_AI_substrate, avg(["P_context_collapse","ComputeOverhead_t","GuardrailCompensation_t"]), avg(["PI_t","PurposeBoundUse_t","Auditability_t"])]
  ];
  const el = document.getElementById("results");
  el.innerHTML = metrics.map(([id,name,score,risk,repair]) => {
    const r = id === "W_AI" ? route(1-score, risk, repair) : route(score, risk, repair);
    const color = colorForRoute(r);
    const percent = Math.round(score*100);
    const direction = id === "W_AI" ? "higher = more waste pressure" : "higher = stronger stability/repair";
    return `<div class="metric">
      <h3>${name}</h3>
      <div class="score">${score.toFixed(2)}</div>
      <div class="bar"><div class="fill" style="width:${percent}%;background:${color};"></div></div>
      <div class="route ${r}">${routeLabel(r)}</div>
      <div class="small" style="margin-top:7px;">${direction}</div>
    </div>`;
  }).join("");

  const topRisks = Object.entries(values)
    .filter(([k,v]) => v >= 0.75)
    .map(([k,v]) => `${k}=${v.toFixed(2)}`)
    .slice(0, 12);

  document.getElementById("interpretation").innerHTML = `
    <b>Safe read:</b> This is a pressure-map run. It shows relative pressure, repair, context-density, and loop-closure patterns, not prediction or diagnosis.<br><br>
    <b>Active high variables:</b> ${topRisks.length ? topRisks.join(", ") : "none above 0.75"}<br><br>
    <b>Core principle:</b> A thing survives transfer when it can come back to the whole.
  `;
}

function renderVariables() {
  const q = (document.getElementById("search")?.value || "").toLowerCase();
  const groups = {};
  for (const v of VARIABLES) {
    const text = `${v.id} ${v.symbol} ${v.display_name} ${v.category} ${v.layer} ${v.definition}`.toLowerCase();
    if (q && !text.includes(q)) continue;
    const key = v.layer || "General";
    if (!groups[key]) groups[key] = [];
    groups[key].push(v);
  }
  const container = document.getElementById("variableGroups");
  container.innerHTML = Object.keys(groups).sort().map(layer => {
    const items = groups[layer].map(v => {
      const val = get(v.id);
      return `<div class="var">
        <div class="v-head">
          <div>
            <div class="v-title">${v.display_name} <span class="badge">${v.category}</span></div>
            <div class="v-symbol">${v.symbol} / ${v.id}</div>
          </div>
          <div class="value-pill" id="val_${v.id}">${val.toFixed(2)}</div>
        </div>
        <div class="v-def">${(v.definition || "").replaceAll("<","&lt;").replaceAll(">","&gt;")}</div>
        <input type="range" min="0" max="1" step="0.01" value="${val}" oninput="setVar('${v.id}', this.value)" />
      </div>`;
    }).join("");
    return `<details><summary>${layer} <span class="badge">${groups[layer].length}</span></summary>${items}</details>`;
  }).join("");
}

function setVar(id, val) {
  values[id] = clamp01(parseFloat(val));
  const label = document.getElementById("val_" + id);
  if (label) label.textContent = values[id].toFixed(2);
  compute();
}

function init() {
  for (const v of VARIABLES) values[v.id] = v.default || 0;
  const select = document.getElementById("preset");
  select.innerHTML = PRESETS.map(p => `<option value="${p.id}">${p.display_name}</option>`).join("");
  renderVariables();
  compute();
}
function resetAll() {
  for (const v of VARIABLES) values[v.id] = 0;
  renderVariables();
  compute();
}
function loadPreset() {
  resetAll();
  const id = document.getElementById("preset").value;
  const preset = PRESETS.find(p => p.id === id);
  if (!preset) return;
  for (const [k,v] of Object.entries(preset.variables || {})) {
    values[k] = clamp01(v);
  }
  renderVariables();
  compute();
}
function updateExport(outputs={}) {
  const active = {};
  for (const [k,v] of Object.entries(values)) {
    if (v > 0) active[k] = Number(v.toFixed(2));
  }
  const preset = PRESETS.find(p => p.id === document.getElementById("preset").value);
  const payload = {
    simulator: "Major Rescue Atlas / Substrate Education Simulator",
    version: "prototype_v0_1",
    scoring_mode: "sparse_default_zero_normalized_pressure_map",
    scenario_id: preset?.id || "custom",
    scenario_name: preset?.display_name || "Custom",
    boundary: "pressure map only; not prediction, diagnosis, proof, or blame",
    A_t: Number(document.getElementById("A_t").value),
    B_t: Number(document.getElementById("B_t").value),
    variables: active,
    outputs: Object.fromEntries(Object.entries(outputs).map(([k,v]) => [k, Number(v.toFixed(3))]))
  };
  document.getElementById("exportBox").value = JSON.stringify(payload, null, 2);
}
function exportScenario() {
  updateExport();
  document.getElementById("exportBox").focus();
  document.getElementById("exportBox").select();
}
function expandAll(open) {
  document.querySelectorAll("details").forEach(d => d.open = open);
}

window.addEventListener("DOMContentLoaded", init);
</script>

<footer style="padding:22px 26px;border-top:1px solid #30394a;color:#a9b4c4;background:#0b0d10;font-size:12px;line-height:1.55;">
  <b style="color:#f2d18a;">Substrate Education Simulator</b><br/>
  A bounded pressure-map simulator. Not prediction, diagnosis, proof, or blame.<br/>
  Core line: <i>A thing survives transfer when it can come back to the whole.</i><br/>
  Included docs: <a style="color:#f2d18a;" href="docs/Master_Record_v1_1_CONSOLIDATED.txt">Master Record v1.1</a> ·
  <a style="color:#f2d18a;" href="docs/Simulator_Schema_v0_9_1.json">Schema</a> ·
  <a style="color:#f2d18a;" href="docs/README_SIMULATOR.txt">README</a>
</footer>

</body>
</html>