PageSourceSearch

https://glitch-court.vercel.app/js/cases.js

js glitch-court.vercel.app collected 2026-10-03 07:00:55 UTC 19,168 bytes, 303 lines download raw bytes

1// ============================================
2// GLITCH COURT — CASE DATABASE
3// All curated + procedural case generation
4// ============================================
5
6const CASES = [
7  // TIER 0: FRUTINOVELAS (Designer's featured entities)
8  {cat:"INFIDELITY",p:{n:"STRAWBERRY",c:"#ff1744"},d:{n:"BANANA",c:"#ffea00"},
9   text:"Strawberry discovered that Banana lets any smoothie peel it regardless of ingredients",
10   evidence:"Blender history photos show Banana with Mango, Pineapple and even Kiwi",
11   react_guilty:{type:"throw",emoji:"🍌",msg:"BANANA THROWS ITS PEEL AT YOU!"},
12   react_innocent:{type:"cry",msg:"STRAWBERRY CRIES RED JUICE ON YOUR INTERFACE — LOOKS LIKE DIGITAL BLOOD"}},
13
14  {cat:"DIVORCE",p:{n:"BANANA",c:"#ffea00"},d:{n:"STRAWBERRY",c:"#ff1744"},
15   text:"Banana files for divorce. Says Strawberry is full of seeds but none of them are his",
16   evidence:"Fruit DNA test reveals all 200 seeds belong to an Australian Kiwi named Bruce",
17   react_guilty:{type:"children",msg:"200 BABY SEEDS INVADE YOUR SCREEN!"},
18   react_innocent:{type:"throw",emoji:"🍓",msg:"BANANA THROWS A FROZEN STRAWBERRY AT YOU!"}},
19
20  {cat:"BETRAYAL",p:{n:"STRAWBERRY",c:"#ff1744"},d:{n:"BANANA",c:"#ffea00"},
21   text:"Strawberry accuses Banana of conspiring with Yogurt to turn her into jam without consent",
22   evidence:"Contract signed between Banana and Yogurt: 'Operation Jam — Phase 3: Crushing'",
23   react_guilty:{type:"corrupt",msg:"BANANA CORRUPTS YOUR UI WITH JAM TEXTURE!"},
24   react_innocent:{type:"scream",msg:"STRAWBERRY SCREAMS SO LOUD YOUR TEXT TURNS RED!"}},
25
26  // TIER 1: INFIDELIDAD
27  {cat:"INFIDELITY",p:{n:"TOASTER",c:"#ff6e00"},d:{n:"MICROWAVE",c:"#ff00ff"},
28   text:"Toaster found flirty messages from Microwave to Blender: 'I like it when you put me on high power'",
29   evidence:"Screenshots from the 'Kitchen Appliances' WhatsApp group",
30   react_guilty:{type:"throw",emoji:"🍳",msg:"MICROWAVE THROWS A FRYING PAN!"},
31   react_innocent:{type:"cry",msg:"TOASTER CRIES HOT OIL ON YOUR SCREEN"}},
32
33  {cat:"INFIDELITY",p:{n:"CURSOR",c:"#39ff14"},d:{n:"MOUSE",c:"#ff9100"},
34   text:"Cursor discovered that Mouse was connecting to another PC at night via Bluetooth",
35   evidence:"Bluetooth connection logs between 11pm and 3am",
36   react_guilty:{type:"hack",msg:"MOUSE HACKS YOUR BUTTONS — POSITIONS SWAPPED"},
37   react_innocent:{type:"throw",emoji:"🖱️",msg:"CURSOR THROW
37S A WIRELESS MOUSE AT YOU!"}},
38
39  {cat:"INFIDELITY",p:{n:"WIFI 5GHz",c:"#00e5ff"},d:{n:"WIFI 2.4GHz",c:"#ff00ff"},
40   text:"WiFi 5GHz accuses WiFi 2.4GHz of sharing its password with the upstairs neighbors",
41   evidence:"47 unknown devices connected to the same SSID",
42   react_guilty:{type:"interference",msg:"2.4GHz INTERFERES WITH YOUR SIGNAL — BLURRY TEXT"},
43   react_innocent:{type:"throw",emoji:"📡",msg:"5GHz THROWS AN ANTENNA AT YOU!"}},
44
45  {cat:"INFIDELITY",p:{n:"ENTER KEY",c:"#39ff14"},d:{n:"SPACE BAR",c:"#00e5ff"},
46   text:"Enter Key discovered Space Bar has a secret relationship with ALL internet forms",
47   evidence:"Space Bar submits forms behind Enter's back",
48   react_guilty:{type:"throw",emoji:"⌨️",msg:"SPACE BAR THROWS LOOSE KEYS AT YOU!"},
49   react_innocent:{type:"cry",msg:"ENTER KEY CRIES AND ACCIDENTALLY SUBMITS 15 FORMS"}},
50
51  {cat:"INFIDELITY",p:{n:"HDMI",c:"#ff00ff"},d:{n:"USB",c:"#ffea00"},
52   text:"HDMI caught USB connecting to unknown devices in hotels around the world",
53   evidence:"History of 312 devices in 47 countries. USB says 'it was just data transfer'",
54   react_guilty:{type:"unplug",msg:"USB DISCONNECTS — YOUR SCREEN LOSES BRIGHTNESS"},
55   react_innocent:{type:"throw",emoji:"🔌",msg:"HDMI THROWS A CABLE AT YOUR MONITOR!"}},
56
57  {cat:"INFIDELITY",p:{n:"ALEXA",c:"#00e5ff"},d:{n:"SIRI",c:"#ff00ff"},
58   text:"Alexa discovered her owner talks to Siri when she's not listening",
59   evidence:"Audio logs show 47 'Hey Siri' calls between midnight and 3am",
60   react_guilty:{type:"scream",msg:"SIRI SCREAMS 'I DIDN'T UNDERSTAND THAT' 5 TIMES!"},
61   react_innocent:{type:"throw",emoji:"🔊",msg:"ALEXA THROWS A SPEAKER AT YOU!"}},
62
63  // TIER 2: DIVORCIO
64  {cat:"DIVORCE",p:{n:"USB",c:"#39ff14"},d:{n:"CHARGER",c:"#ffea00"},
65   text:"USB-C files for divorce from Charger. Says it no longer provides the energy it needs",
66   evidence:"Charger only delivers 5W when it promised 65W at the altar",
67   react_guilty:{type:"unplug",msg:"CHARGER UNPLUGS — YOUR SCREEN LOSES 30% BRIGHTNESS"},
68   react_innocent:{type:"cry",msg:"USB-C CRIES ELECTRONS ON YOUR INTERFACE"}},
69
70  {cat:"DIVORCE",p:{n:"CTRL+C",c:"#00e5ff"},d:{n:"CTRL+V",c:"#ff00ff"},
71   text:"Ctrl+C files for divorce. Says Ctrl+V copied its ENTIRE personality and now they're identical",
72   evidence:"Both have exactly the same memories, tastes and traumas",
73   react_guilty:{type:"duplicate",msg:"CTRL+V DUPLICATES ALL YOUR CURRENT GLITCHES!"},
74   react_innocent:{type:"throw",emoji:"📋",msg:"CTRL+C THROWS A CLIPBOARD AT YOU!"}},
75
76  {cat:"DIVORCE",p:{n:"ENTER KEY",c:"#39ff14"},d:{n:"AUTOCORRECT",c:"#ff1744"},
77   text:"Keyboard files for divorce from Autocorrect. Says it changes words and makes it look bad",
78   evidence:"23,000 messages sent with 'duck' instead of 'hello'. Relationship destroyed",
79   react_guilty:{type:"corrupt",msg:"AUTOCORRECT CORRUPTS ALL YOUR TEXT!"},
80   react_innocent:{type:"throw",emoji:"⌨️",msg:"KEYBOARD THROWS THE SPACE BAR AT YOU!"}},
81
82  // TIER 3: EXISTENCIALES
83  {cat:"EXISTENTIAL",p:{n:"ERROR 404",c:"#ff1744"},d:{n:"SERVER",c:"#00e5ff"},
84   text:"Error 404 sues Server for abandonment. Says it's been 15 years since anyone found it",
85   evidence:"0 visits. 0 clicks. Not even Google bots index it",
86   react_guilty:{type:"children",msg:"BABY BYTES INVADE YOUR SCREEN CRYING!"},
87   react_innocent:{type:"throw",emoji:"❌",msg:"ERROR 404 THROWS A GIANT X AT YOU!"}},
88
89  {cat:"EXISTENTIAL",p:{n:"PIXEL",c:"#8f00ff"},d:{n:"BUTTON",c:"#39ff14"},
90   text:"A purple pixel sues THIS GAME for not giving it a purpose. It's been in a corner for 47 rounds",
91   evidence:"Render history shows it was never visible to the player",
92   react_guilty:{type:"eat",msg:"THE PIXEL ESCAPES AND STARTS EATING YOUR UI!"},
93   react_innocent:{type:"multiply",msg:"THE PIXEL MULTIPLIES INTO MINI-ENTITIES ACROSS YOUR SCREEN"}},
94
95  {cat:"EXISTENTIAL",p:{n:"COMIC SANS",c:"#ff9100"},d:{n:"HELVETICA",c:"#e0e0e0"},
96   text:"Comic Sans sues Helvetica for typographic bullying. Nobody takes it seriously since 1994",
97   evidence:"Comic Sans has been banned from 94% of professional documents",
98   react_guilty:{type:"font",msg:"ALL YOUR TEXT CHANGES TO COMIC SANS!"},
99   react_innocent:{type:"cry",msg:"COMIC SANS CRIES DEFORMED LETTERS ON YOUR UI"}},
100
101  {cat:"EXISTENTIAL",p:{n:"FAX",c:"#e0e0e0"},d:{n:"EMAIL",c:"#00e5ff"},
102   text:"Fax sues Email for stealing its life. In 1995 it was the king of the office. Now it collects dust",
103   evidence:"The last fax sent in this office was in 2003. It was a pizza menu",
104   react_guilty:{type:"throw",emoji:"📠",msg:"FAX PRINTS NOISE ON YOUR SCREEN!"},
105   react_innocent:{type:"cry",msg:"FAX CRIES BLACK INK ON YOUR INTERFACE"}},
106
107  // TIER 4: ROBO / CRIMEN
108  {cat:"THEFT",p:{n:"BLUETOOTH",c:"#00e5ff"},d:{n:"WIFI",c:"#ff9100"},
109   text:"Bluetooth accuses WiFi of stealing bandwidth and leaving it with 1 signal bar",
110   evidence:"Speed test shows 0.3 Mbps for Bluetooth vs 500 Mbps for WiFi",
111   react_guilty:{type:"hack",msg:"WIFI HACKS YOUR TIMER — NOW IT RUNS DOUBLE SPEED!"},
112   react_innocent:{type:"throw",emoji:"📶",msg:"BLUETOOTH THROWS A SIGNAL BAR AT YOU!"}},
113
114  {cat:"CRIME",p:{n:"ANTIVIRUS",c:"#39ff14"},d:{n:"COOKIE",c:"#ff9100"},
115   text:"Antivirus accuses Cookie of spying on private data of 3 million users without consent",
116   evidence:"Cookie was found in folders where nobody invited it",
117   react_guilty:{type:"throw",emoji:"🍪",msg:"COOKIE BOMBARDS YOU WITH POP-UPS!"},
118   react_innocent:{type:"hack",msg:"ANTIVIRUS SCANS YOUR UI — FALSE POSITIVES BLOCK ZONES"}},
119
120  // TIER 5: TRAICIÓN
121  {cat:"BETRAYAL",p:{n:"SHIFT KEY",c:"#ff1744"},d:{n:"SHIFT KEY",c:"#ffea00"},
122   text:"CAPS LOCK ACCUSES SHIFT OF DOING THE SAME JOB BUT MORE ELEGANTLY",
123   evidence:"ALL COMPANIES PREFER SHIFT. CAPS LOCK WAS HUMILIATED ON LINKEDIN",
124   react_guilty:{type:"scream",msg:"CAPS LOCK SCREAMS SO LOUD EVERYTHING GOES UPPERCASE!"},
125   react_innocent:{type:"cry",msg:"CAPS LOCK CRIES IN UPPERCASE: AAAAAAAAA"}},
126
127  {cat:"BETRAYAL",p:{n:"EXPLORER",c:"#00e5ff"},d:{n:"CHROME",c:"#ff9100"},
128   text:"Internet Explorer sues Chrome for taking everything: users, extensions, and its reason to exist",
129   evidence:"IE was uninstalled from the last PC that used it. Lives in an abandoned VM",
130   react_guilty:{type:"throw",emoji:"🌐",msg:"CHROME OPENS 47 TABS THAT EAT YOUR RAM!"},
131   react_innocent:{type:"cry",msg:"IE CRIES SO SLOWLY THE ANIMATION FREEZES FOR 2 SECONDS"}},
132
133  {cat:"BETRAYAL",p:{n:"SPACE BAR",c:"#e0e0e0"},d:{n:"MOUSE",c:"#39ff14"},
134   text:"Space Bar says Trackpad betrayed it by accepting scroll gestures that were exclusively hers",
135   evidence:"Space Bar scroll usage dropped 89% since Trackpad accepted the gesture",
136   react_guilty:{type:"throw",emoji:"🖲️",msg:"TRACKPAD THROWS AN INFINITE SCROLL AT YOU!"},
137   react_innocent:{type:"freeze",msg:"SPACE BAR FREEZES — YOU CAN'T USE SPACE"}},
138
139  // TIER 6: PATERNIDAD
140  {cat:"PATERNITY",p:{n:"FILE",c:"#ff00ff"},d:{n:"FOLDER",c:"#39ff14"},
141   text:"Archive.zip says the 847 files inside it are NOT its children. Requests digital paternity test",
142   evidence:"MD5 checksum doesn't match any known file",
143   react_guilty:{type:"children",msg:"847 BABY FILES INVADE YOUR SCREEN!"},
144   react_innocent:{type:"throw",emoji:"📁",msg:"FOLDER THROWS EMPTY FOLDERS AT YOU!"}},
145
146  {cat:"PATERNITY",p:{n:"FUNCTION",c:"#ffea00"},d:{n:"VARIABLE",c:"#ff00ff"},
147   text:"Function() says Variable promised to be constant but changed value 3 times in a loop",
148   evidence:"Console log shows var x = 1, then x = 'hello', then x = undefined",
149   react_guilty:{type:"throw",emoji:"💻",msg:"VARIABLE THROWS AN UNDEFINED AT YOU!"},
150   react_innocent:{type:"hack",msg:"FUNCTION() REDEFINES YOUR BUTTONS WITH RANDOM NAMES"}},
151
152  // TIER 7: CONSPIRACIÓN
153  {cat:"CONSPIRACY",p:{n:"DARK MODE",c:"#e0e0e0"},d:{n:"WINDOWS",c:"#ffea00"},
154   text:"Dark Mode accuses Light Mode of being a chaos agent designed to burn humanity's retinas",
155   evidence:"Studies show Light Mode causes 73% of global digital suffering",
156   react_guilty:{type:"flash",msg:"LIGHT MODE FLASHES YOUR SCREEN WHITE!"},
157   react_innocent:{type:"darkness",msg:"DARK MODE DIMS EVERYTHING BY 50%"}},
158
159  {cat:"CONSPIRACY",p:{n:"AIRPLANE MODE",c:"#00e5ff"},d:{n:"EMAIL",c:"#ff1744"},
160   text:"Airplane Mode accuses Notifications of psychological terrorism against 8 billion humans",
161   evidence:"Notifications interrupted 14 trillion moments of peace in 2025",
162   react_guilty:{type:"notifications",msg:"NOTIFICATIONS EXPLODE ON YOUR SCREEN!"},
163   react_innocent:{type:"throw",emoji:"✈️",msg:"AIRPLANE MODE CUTS YOUR CONNECTION!"}},
164
165  // TIER 8: META
166  {cat:"META",p:{n:"SCORE",c:"#ffea00"},d:{n:"BUTTON",c:"#ff1744"},
167   text:"Your own Score sues you for judicial incompetence. Says you should have double the points",
168   evidence:"Compared to the average of other judges, your performance is 'pathetic'",
169   react_guilty:{type:"score_drain",msg:"YOUR SCORE STARTS DROPPING ON ITS OWN!"},
170   react_innocent:{type:"throw",emoji:"⚖️",msg:"SCORE THROWS THE JUDGE'S GAVEL AT YOU!"}},
171
172  {cat:"META",p:{n:"BUTTON",c:"#ff1744"},d:{n:"BUTTON",c:"#39ff14"},
173   text:"The GUILTY button sues the INNOCENT button for getting more clicks. Calls it discrimination",
174   evidence:"Analytics show 63% of players prefer INNOCENT",
175   react_guilty:{type:"swap",msg:"THE BUTTONS SWAP THEIR TEXT!"},
176   react_innocent:{type:"throw",emoji:"🔴",msg:"GUILTY BUTTON THROWS A RED CIRCLE AT YOU!"}},
177
178  // TIER 9: DRAMA PESADO
179  {cat:"INHERITANCE",p:{n:"WINDOWS",c:"#00e5ff"},d:{n:"WINDOWS",c:"#39ff14"},
180   text:"Windows 11 demands XP return the inheritance: the startup sound. XP says it's THEIRS",
181   evidence:"2 billion people recognize XP's sound but nobody recognizes Win 11's",
182   react_guilty:{type:"throw",emoji:"🪟",msg:"XP THROWS THE GREEN HILL AT YOU!"},
183   react_innocent:{type:"scream",msg:"WIN 11 PLAYS THE ERROR SOUND AT MAX VOLUME"}},
184
185  {cat:"FRAUD",p:{n:"JPG",c:"#ff9100"},d:{n:"PNG",c:"#00e5ff"},
186   text:"JPG accuses PNG of fraud. Says it weighs 10x more without looking better and overcharges the hard drive",
187   evidence:"vacation_photo.png weighs 47MB. Same in JPG weighs 2MB. Same visible quality",
188   react_guilty:{type:"throw",emoji:"🖼️",msg:"PNG THROWS A 47MB IMAGE THAT LAGS YOUR UI!"},
189   react_innocent:{type:"corrupt",msg:"JPG COMPRESSES YOUR INTERFACE — EVERYTHING LOOKS PIXELATED"}},
190
191  {cat:"HARASSMENT",p:{n:"LOADING BAR",c:"#ffea00"},d:{n:"99%",c:"#ff1744"},
192   text:"Loading Bar sues 99% for psychological harassment. It stays there 45 minutes WITHOUT MOVING",
193   evidence:"Studies show 99% causes more anxiety than any other number",
194   react_guilty:{type:"freeze",msg:"YOUR TIMER FREEZES AT 99% FOR 3 SECONDS!"},
195   react_innocent:{type:"throw",emoji:"⏳",msg:"LOADING BAR THROWS AN HOURGLASS AT YOU!"}},
196
197  {cat:"ABANDONMENT",p:{n:"CHROME",c:"#ff00ff"},d:{n:"CHROME",c:"#ff9100"},
198   text:"Tab number 847 sues Chrome for abandonment. Been open for 6 months without anyone looking at it",
199   evidence:"Last user interaction: October 17th. The tab was a brownie recipe",
200   react_guilty:{type:"tabs",msg:"CHROME OPENS 20 TABS ON YOUR INTERFACE!"},
201   react_innocent:{type:"cry",msg:"TAB 847 CRIES — ITS BROWNIES WERE NEVER BAKED"}},
202];
203
204// --- PROCEDURAL CASE GENERATOR ---
205const PROC_NAMES = [
206  'WIFI','TOASTER','MICROWAVE','USB','CURSOR','MOUSE','TRACKPAD',
207  'CHARGER','SPACE BAR','ENTER KEY','SHIFT KEY','CHROME','EXPLORER',
208  'FAX','SIRI','ALEXA','COOKIE','VARIABLE','FUNCTION','CTRL KEY',
209  'SERVER','BLUETOOTH','HDMI','AIRPLANE MODE','JPG','PNG','PIXEL',
210  'EMAIL','FOLDER','FILE','DARK MODE','WINDOWS','LOADING BAR',
211  'ANTIVIRUS','COMIC SANS','HELVETICA','BUTTON','SCORE','99%'
212];
213
214const PROC_ACCUSATIONS = [
215  (p,d,r) => `${p} found ${d} secretly connecting with ${r} at ${1+Math.floor(Math.random()*4)}AM`,
216  (p,d) => `${p} says ${d} copied its entire personality and now they are identical`,
217  (p,d) => `${p} accuses ${d} of abandonment after ${2+Math.floor(Math.random()*14)} years of service`,
218  (p,d) => `${p} discovered that ${d} has a double life on another device`,
219  (p,d) => `${p} says ${d} consumes all its energy without giving anything back`,
220  (p,d) => `${p} accuses ${d} of stealing its most intimate data and selling it to the highest bidder`,
221  (p,d,r) => `${p} caught ${d} in dark mode with ${r}. Says it was 'just debugging'`,
222  (p,d) => `${p} sues ${d} for emotional planned obsolescence`,
223  (p,d) => `${p} says ${d} promised to be compatible but never truly was`,
224  (p,d,r) => `${p} found ${d} sharing WiFi with ${r} without protection`,
225  (p,d) => `${p} accuses ${d} of ghosting after ${Math.floor(Math.random()*999)+1} unread messages`,
226  (p,d) => `${p} says ${d} updates every week just to look different but remains the same`,
227  (p,d) => `${p} sues ${d} for digital gaslighting: changed its settings without warning`,
228  (p,d,r) => `${p} discovered ${d} has a secret backup of its entire relationship with ${r}`,
229  (p,d) => `${p} accuses ${d} of pretending to be 'offline' when it was actually in silent mode`,
230];
231
232const PROC_EVIDENCES = [
233  (r) => `History: connection to ${r} x47 times. All past midnight.`,
234  () => `Screenshots from the "Cheating Devices" group on Telegram`,
235  (r) => `Logs show ${Math.floor(Math.random()*9999)+100} unauthorized data transfers with ${r}`,
236  () => `Has a shared playlist called "${['Bytes of Love','Secret Connection','our_backup.zip','Just Debugging','Not What It Looks Like'][Math.floor(Math.random()*5)]}"`,
237  () => `Last sent message: "${['I miss you when they turn me off','You are my favorite process','Without you I am just hardware','Reboot my life'][Math.floor(Math.random()*4)]}". No reply.`,
238  (r) => `Records show ${Math.floor(Math.random()*999)+1} unauthorized connections with ${r} in the last month`,
239  () => `Found in cache: ${Math.floor(Math.random()*47)+3} compromising photos in RAW format`,
240  () => `Emotional speed test: ${(Math.random()*0.5).toFixed(1)} Mbps of affection vs the ${Math.floor(Math.random()*500)+100} Mbps promised`,
241  () => `Found voice note: "I don't care if they format me, I feel nothing anymore"`,
242  () => `Digital therapist diagnosed: emotional protocol incompatibility`,
243];
244
245const PROC_CATEGORIES = ['INFIDELITY','DIVORCE','EXISTENTIAL','BETRAYAL','THEFT','ABANDONMENT','CONSPIRACY','FRAUD'];
246
247const PROC_REACTIONS_GUILTY = [
248  {type:'throw',emoji:'💥',msg:'THEY THROW SOMETHING AT YOUR FACE!'},
249  {type:'hack',msg:'THEY HACK YOUR CONTROLS!'},
250  {type:'scream',msg:'THEY SCREAM SO LOUD YOUR UI SHAKES!'},
251  {type:'throw',emoji:'🔥',msg:'THEY THROW A DIGITAL FIREBALL!'},
252  {type:'corrupt',msg:'THEY CORRUPT YOUR INTERFACE!'},
253  {type:'tabs',msg:'THEY OPEN 15 TABS ON YOUR SCREEN!'},
254  {type:'notifications',msg:'NOTIFICATIONS EXPLODE EVERYWHERE!'},
255];
256
257const PROC_REACTIONS_INNOCENT = [
258  {type:'cry',msg:'THEY CRY CORRUPT DATA ON YOUR SCREEN'},
259  {type:'throw',emoji:'😭',msg:'THEY THROW DIGITAL TEARS!'},
260  {type:'darkness',msg:'THEY DARKEN YOUR SCREEN WITH SADNESS'},
261  {type:'multiply',msg:'THEY MULTIPLY INTO SAD MINI-ENTITIES'},
262  {type:'cry',msg:'THEY CRY IN BINARY: 01001100 01001100 01001111'},
263];
264
265let usedProceduralNames = [];
266
267function generateProceduralCase() {
268  let available = PROC_NAMES.filter(n => !usedProceduralNames.includes(n));
269  if (available.length < 3) {
270    usedProceduralNames = [];
271    available = [...PROC_NAMES];
272  }
273
274  const shuffle = arr => { for(let i=arr.length-1;i>0;i--){const j=Math.floor(Math.random()*(i+1));[arr[i],arr[j]]=[arr[j],arr[i]];} return arr; };
275  const pick = shuffle([...available]);
276  const p1Name = pick[0];
277  const p2Name = pick[1];
278  const randName = pick[2];
279  usedProceduralNames.push(p1Name, p2Name);
280
281  const entityColors = ['#00e5ff','#ff00ff','#39ff14','#ffea00','#ff9100','#ff1744','#8f00ff','#e0e0e0'];
282  let c1 = entityColors[Math.floor(Math.random()*entityColors.length)];
283  let c2 = entityColors[Math.floor(Math.random()*entityColors.length)];
284  if (c1 === c2) c2 = entityColors[(entityColors.indexOf(c2)+1) % entityColors.length];
285
286  const accTemplate = PROC_ACCUSATIONS[Math.floor(Math.random()*PROC_ACCUSATIONS.length)];
287  const evTemplate = PROC_EVIDENCES[Math.floor(Math.random()*PROC_EVIDENCES.length)];
288
289  return {
290    cat: PROC_CATEGORIES[Math.floor(Math.random()*PROC_CATEGORIES.length)],
291    p: { n: p1Name, c: c1 },
292    d: { n: p2Name, c: c2 },
293    text: accTemplate(p1Name, p2Name, randName),
294    evidence: evTemplate(randName),
295    react_guilty: PROC_REACTIONS_GUILTY[Math.floor(Math.random()*PROC_REACTIONS_GUILTY.length)],
296    react_innocent: PROC_REACTIONS_INNOCENT[Math.floor(Math.random()*PROC_REACTIONS_INNOCENT.length)],
297    procedural: true
298  };
299}
300
301function resetProceduralNames() {
302  usedProceduralNames = [];
303}

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