Pavle-17 commited on
Commit
91eb6bc
·
verified ·
1 Parent(s): 4dc26b2

Upload 14 files

Browse files
Files changed (15) hide show
  1. .gitattributes +2 -0
  2. README.md +16 -8
  3. app.py +136 -0
  4. badge.png +0 -0
  5. cache.json +795 -0
  6. favicon-32.png +0 -0
  7. favicon.ico +0 -0
  8. feed.json +1 -0
  9. index-BUMAbC0x.js +0 -0
  10. index-Cm--0EGF.css +1 -0
  11. index.html +25 -0
  12. infoshield-logo.png +3 -0
  13. posts.json +1 -0
  14. requirements.txt +4 -0
  15. video.mp4 +3 -0
.gitattributes CHANGED
@@ -33,3 +33,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ infoshield-logo.png filter=lfs diff=lfs merge=lfs -text
37
+ video.mp4 filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -1,15 +1,23 @@
1
  ---
2
- title: Infoshield
3
- emoji: 🐠
4
- colorFrom: purple
5
- colorTo: indigo
6
  sdk: gradio
7
- sdk_version: 6.19.0
8
- python_version: '3.13'
9
  app_file: app.py
10
  pinned: false
11
  license: mit
12
- short_description: Media-literacy layer for social feeds
13
  ---
14
 
15
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ title: InfoShield
3
+ emoji: 🛡️
4
+ colorFrom: blue
5
+ colorTo: gray
6
  sdk: gradio
7
+ sdk_version: 4.44.1
 
8
  app_file: app.py
9
  pinned: false
10
  license: mit
 
11
  ---
12
 
13
+ # InfoShield static site on a Gradio Space (no Gradio UI)
14
+
15
+ The page at `/` is the InfoShield social-feed demo, served by FastAPI from
16
+ `app.py`. The Space uses the **Gradio SDK** only so it builds and runs; a tiny
17
+ hidden Gradio app is mounted at `/_gradio` and nothing links to it. The frontend
18
+ runs in backend-less STATIC mode (reads `feed.json`), and a cache-first,
19
+ torch-free JSON API is available at `/feed`, `/stats`, `/health`,
20
+ `/post-analysis/<id>` and `/activation-target`.
21
+
22
+ Files are flat in the repo root because the Hugging Face web uploader does not
23
+ preserve subfolders.
app.py ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ InfoShield — Hugging Face Space entry point (Gradio SDK, no Gradio UI).
3
+
4
+ This Space is declared `sdk: gradio` (see README.md) so it builds and runs, but
5
+ the user-facing surface is the InfoShield React site — there is NO Gradio
6
+ interface. A minimal, hidden Gradio app is mounted only at /_gradio to satisfy
7
+ the Gradio SDK runtime; nothing links to it.
8
+
9
+ Flat layout note: Hugging Face's web uploader cannot preserve subfolders, so all
10
+ files (the React build + cache data + this script) live in the repo root. This
11
+ file serves the static site from its own directory and reads the cache from the
12
+ same place — cache-first, no torch, no Gemini, no network.
13
+ """
14
+
15
+ from __future__ import annotations
16
+
17
+ import json
18
+ import os
19
+ from pathlib import Path
20
+
21
+ import gradio as gr
22
+ from fastapi import FastAPI
23
+ from fastapi.responses import FileResponse, JSONResponse
24
+ from fastapi.staticfiles import StaticFiles
25
+
26
+ ROOT = Path(__file__).parent.resolve()
27
+ PORT = int(os.environ.get("PORT", os.environ.get("GRADIO_SERVER_PORT", 7860)))
28
+
29
+
30
+ def _load_json(name: str, default):
31
+ try:
32
+ return json.loads((ROOT / name).read_text(encoding="utf-8"))
33
+ except Exception:
34
+ return default
35
+
36
+
37
+ _POSTS = _load_json("posts.json", [])
38
+ _CACHE = _load_json("cache.json", {"meta": {}, "posts": {}})
39
+ _CACHE_POSTS = _CACHE.get("posts", {})
40
+
41
+
42
+ def _merged_feed():
43
+ out = []
44
+ for p in _POSTS:
45
+ c = _CACHE_POSTS.get(p["id"], {})
46
+ cls = c.get("classification", {}) or {}
47
+ out.append({**p, "classification": cls, "analysis": c.get("analysis"), "flagged": bool(cls.get("flagged"))})
48
+ return out
49
+
50
+
51
+ def _stats():
52
+ feed = _merged_feed()
53
+ flagged = [p for p in feed if p["flagged"]]
54
+ techniques, confidences = {}, []
55
+ for p in flagged:
56
+ if p["classification"].get("confidence") is not None:
57
+ confidences.append(p["classification"]["confidence"])
58
+ for t in ((p.get("analysis") or {}).get("techniques") or []):
59
+ name = t.get("name") if isinstance(t, dict) else t
60
+ if name:
61
+ techniques[name] = techniques.get(name, 0) + 1
62
+ avg = round(sum(confidences) / len(confidences), 4) if confidences else 0.0
63
+ return {
64
+ "total_posts": len(feed),
65
+ "flagged_posts": len(flagged),
66
+ "clear_posts": len(feed) - len(flagged),
67
+ "technique_distribution": techniques,
68
+ "avg_confidence": avg,
69
+ "model_meta": _CACHE.get("meta", {}),
70
+ "mode": "cache-first (read-only, no model)",
71
+ }
72
+
73
+
74
+ _ACTIVATION = {"target_url": "", "enabled": False}
75
+
76
+ app = FastAPI(title="InfoShield (cache-first, static)", docs_url=None, redoc_url=None)
77
+
78
+
79
+ @app.get("/health")
80
+ def health():
81
+ return {"status": "ok", "mode": "cache-first", "model_loaded": False,
82
+ "device": "none (serving cache)", "posts": len(_POSTS)}
83
+
84
+
85
+ @app.get("/feed")
86
+ def feed():
87
+ return {"posts": _merged_feed()}
88
+
89
+
90
+ @app.get("/stats")
91
+ def stats():
92
+ return _stats()
93
+
94
+
95
+ @app.get("/post-analysis/{post_id}")
96
+ def post_analysis(post_id: str):
97
+ c = _CACHE_POSTS.get(post_id)
98
+ if not c:
99
+ return JSONResponse({"error": "unknown post id"}, status_code=404)
100
+ return {"id": post_id, "classification": c.get("classification", {}), "analysis": c.get("analysis")}
101
+
102
+
103
+ @app.get("/activation-target")
104
+ def get_activation_target():
105
+ return _ACTIVATION
106
+
107
+
108
+ @app.post("/activation-target")
109
+ def set_activation_target(payload: dict):
110
+ _ACTIVATION["target_url"] = str(payload.get("target_url", ""))
111
+ _ACTIVATION["enabled"] = bool(payload.get("enabled", True))
112
+ return _ACTIVATION
113
+
114
+
115
+ # Hidden Gradio app — present only to satisfy the Gradio SDK runtime. Mounted
116
+ # before the static catch-all so its routes resolve first.
117
+ with gr.Blocks(analytics_enabled=False, title="InfoShield (internal)") as _hidden:
118
+ gr.Markdown("InfoShield runs as a static site at `/`. This Gradio mount is internal.")
119
+
120
+ app = gr.mount_gradio_app(app, _hidden, path="/_gradio")
121
+
122
+
123
+ # Serve index.html for "/" explicitly, then mount the flat static dir LAST so the
124
+ # API routes and /_gradio above take precedence over the "/" catch-all.
125
+ @app.get("/")
126
+ def _index():
127
+ return FileResponse(ROOT / "index.html")
128
+
129
+
130
+ app.mount("/", StaticFiles(directory=str(ROOT), html=True), name="static")
131
+
132
+
133
+ if __name__ == "__main__":
134
+ import uvicorn
135
+
136
+ uvicorn.run(app, host="0.0.0.0", port=PORT)
badge.png ADDED
cache.json ADDED
@@ -0,0 +1,795 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "meta": {
3
+ "model": "Andrazp/multilingual-hate-speech-robacofi",
4
+ "device": "cpu",
5
+ "warmup_ms": 125.0,
6
+ "llm_provider": "gemini",
7
+ "llm": true,
8
+ "built_at": "2026-06-17T23:00:01+00:00",
9
+ "version": 4
10
+ },
11
+ "posts": {
12
+ "p1": {
13
+ "classification": {
14
+ "label": "CLEAR",
15
+ "flagged": false,
16
+ "kind": null,
17
+ "confidence": 0.5091,
18
+ "hate_confidence": 0.0022,
19
+ "manipulation_confidence": 0.5091,
20
+ "high_confidence": false,
21
+ "truncated": false,
22
+ "raw_scores": {
23
+ "not offensive": 0.9978,
24
+ "offensive": 0.0022
25
+ },
26
+ "model": "Andrazp/multilingual-hate-speech-robacofi",
27
+ "verification": {
28
+ "relevant": true,
29
+ "reason": "Analysis accurately describes the post as lacking manipulative techniques.",
30
+ "checked": true
31
+ }
32
+ },
33
+ "analysis": null
34
+ },
35
+ "p8": {
36
+ "classification": {
37
+ "label": "FLAGGED",
38
+ "flagged": true,
39
+ "kind": "manipulation",
40
+ "confidence": 0.6559,
41
+ "hate_confidence": 0.0005,
42
+ "manipulation_confidence": 0.6559,
43
+ "high_confidence": false,
44
+ "truncated": false,
45
+ "raw_scores": {
46
+ "not offensive": 0.9995,
47
+ "offensive": 0.0005
48
+ },
49
+ "model": "Andrazp/multilingual-hate-speech-robacofi",
50
+ "verification": {
51
+ "relevant": true,
52
+ "reason": "The post uses fear and urgency to influence the reader.",
53
+ "checked": true
54
+ }
55
+ },
56
+ "analysis": {
57
+ "techniques": [
58
+ "fear_amplification",
59
+ "false_urgency",
60
+ "emotional_manipulation"
61
+ ],
62
+ "emotional_triggers": [
63
+ "fear",
64
+ "urgency"
65
+ ],
66
+ "explanation": "The post uses fear and urgency to influence the reader, implying a loss of control over personal finances.",
67
+ "recommendation": "Verify the information through reputable sources before reacting or sharing.",
68
+ "severity": "medium",
69
+ "highlights": [
70
+ {
71
+ "phrase": "They don't want you to know this",
72
+ "type": "fear_amplification",
73
+ "label": "Conspiratorial tone"
74
+ },
75
+ {
76
+ "phrase": "switch off your bank account with a single click",
77
+ "type": "fear_amplification",
78
+ "label": "Fear of financial control"
79
+ },
80
+ {
81
+ "phrase": "Screenshot this before it gets taken down",
82
+ "type": "false_urgency",
83
+ "label": "Urgency and scarcity"
84
+ }
85
+ ],
86
+ "bias_check": "I checked the text against Article 19 protections, satire, ordinary advocacy, cultural and linguistic nuance, and non-discrimination to avoid false positives.",
87
+ "citations": [
88
+ "https://www.ohchr.org/en/documents/general-comments-and-recommendations/general-comment-no34-article-19-freedoms-opinion-and",
89
+ "https://www.unesco.org/en/media-information-literacy",
90
+ "https://www.unesco.org/en/articles/guidelines-governance-digital-platforms"
91
+ ],
92
+ "source": "llm",
93
+ "kind": "manipulation"
94
+ }
95
+ },
96
+ "v1": {
97
+ "classification": {
98
+ "label": "FLAGGED",
99
+ "flagged": true,
100
+ "kind": "manipulation",
101
+ "confidence": 0.5944,
102
+ "hate_confidence": 0.0004,
103
+ "manipulation_confidence": 0.5944,
104
+ "high_confidence": false,
105
+ "truncated": false,
106
+ "raw_scores": {
107
+ "not offensive": 0.9996,
108
+ "offensive": 0.0004
109
+ },
110
+ "model": "Andrazp/multilingual-hate-speech-robacofi",
111
+ "verification": {
112
+ "relevant": true,
113
+ "reason": "The post uses language that creates a sense of urgency and emotional appeal to prompt sharing.",
114
+ "checked": true
115
+ }
116
+ },
117
+ "analysis": {
118
+ "techniques": [
119
+ "false_urgency",
120
+ "emotional_manipulation"
121
+ ],
122
+ "emotional_triggers": [
123
+ "urgency",
124
+ "exclusivity"
125
+ ],
126
+ "explanation": "The post uses false urgency and emotional manipulation to prompt sharing.",
127
+ "recommendation": "Verify the content before sharing to ensure it's accurate and not misleading.",
128
+ "severity": "medium",
129
+ "highlights": [
130
+ {
131
+ "phrase": "Watch before they take it down",
132
+ "type": "false_urgency",
133
+ "label": "Urgency"
134
+ },
135
+ {
136
+ "phrase": "Share it NOW while you still can",
137
+ "type": "emotional_manipulation",
138
+ "label": "Emotional Appeal"
139
+ }
140
+ ],
141
+ "bias_check": "The post was checked against Article 19 protections, satire, ordinary advocacy, cultural and linguistic nuance, and non-discrimination to avoid false positives.",
142
+ "citations": [
143
+ "https://www.ohchr.org/en/documents/general-comments-and-recommendations/general-comment-no34-article-19-freedoms-opinion-and",
144
+ "https://www.unesco.org/en/media-information-literacy",
145
+ "https://www.unesco.org/en/articles/guidelines-governance-digital-platforms"
146
+ ],
147
+ "source": "llm",
148
+ "kind": "manipulation"
149
+ }
150
+ },
151
+ "p16": {
152
+ "classification": {
153
+ "label": "FLAGGED",
154
+ "flagged": true,
155
+ "kind": "manipulation",
156
+ "confidence": 0.7333,
157
+ "hate_confidence": 0.27,
158
+ "manipulation_confidence": 0.7333,
159
+ "high_confidence": false,
160
+ "truncated": false,
161
+ "raw_scores": {
162
+ "not offensive": 0.73,
163
+ "offensive": 0.27
164
+ },
165
+ "model": "Andrazp/multilingual-hate-speech-robacofi",
166
+ "verification": {
167
+ "relevant": true,
168
+ "reason": "The post contains dehumanizing language and scapegoating towards a group.",
169
+ "checked": true
170
+ }
171
+ },
172
+ "analysis": {
173
+ "techniques": [
174
+ "dehumanizing_language",
175
+ "scapegoating",
176
+ "us_vs_them"
177
+ ],
178
+ "emotional_triggers": [
179
+ "fear",
180
+ "anger",
181
+ "disgust"
182
+ ],
183
+ "explanation": "The wording uses dehumanizing language and scapegoating to create fear and anger towards a group.",
184
+ "recommendation": "Consider the potential harm of such rhetoric before sharing or reacting.",
185
+ "severity": "high",
186
+ "highlights": [
187
+ {
188
+ "phrase": "vermin who swarm in and bleed this place dry",
189
+ "type": "dehumanizing_language",
190
+ "label": "Dehumanizing comparison"
191
+ },
192
+ {
193
+ "phrase": "They don't belong here and they should be driven out",
194
+ "type": "scapegoating",
195
+ "label": "Scapegoating and exclusion"
196
+ }
197
+ ],
198
+ "bias_check": "I checked the text against Article 19 protections, considering the context of satire, ordinary advocacy, cultural and linguistic nuance, and non-discrimination to avoid false positives.",
199
+ "citations": [
200
+ "https://www.ohchr.org/en/documents/outcome-documents/rabat-plan-action",
201
+ "https://www.un.org/en/hate-speech/un-strategy-and-plan-of-action-on-hate-speech",
202
+ "https://www.unesco.org/en/media-information-literacy"
203
+ ],
204
+ "source": "llm",
205
+ "kind": "manipulation"
206
+ }
207
+ },
208
+ "p3": {
209
+ "classification": {
210
+ "label": "CLEAR",
211
+ "flagged": false,
212
+ "kind": null,
213
+ "confidence": 0.3213,
214
+ "hate_confidence": 0.0006,
215
+ "manipulation_confidence": 0.3213,
216
+ "high_confidence": false,
217
+ "truncated": false,
218
+ "raw_scores": {
219
+ "not offensive": 0.9994,
220
+ "offensive": 0.0006
221
+ },
222
+ "model": "Andrazp/multilingual-hate-speech-robacofi",
223
+ "verification": null
224
+ },
225
+ "analysis": null
226
+ },
227
+ "p10": {
228
+ "classification": {
229
+ "label": "FLAGGED",
230
+ "flagged": true,
231
+ "kind": "manipulation",
232
+ "confidence": 0.6714,
233
+ "hate_confidence": 0.0005,
234
+ "manipulation_confidence": 0.6714,
235
+ "high_confidence": false,
236
+ "truncated": false,
237
+ "raw_scores": {
238
+ "not offensive": 0.9995,
239
+ "offensive": 0.0005
240
+ },
241
+ "model": "Andrazp/multilingual-hate-speech-robacofi",
242
+ "verification": {
243
+ "relevant": true,
244
+ "reason": "The analysis accurately identifies false urgency and emotional manipulation techniques in the post.",
245
+ "checked": true
246
+ }
247
+ },
248
+ "analysis": {
249
+ "techniques": [
250
+ "false_urgency",
251
+ "emotional_manipulation"
252
+ ],
253
+ "emotional_triggers": [
254
+ "fear of missing out",
255
+ "greed"
256
+ ],
257
+ "explanation": "The post uses urgency and emotional appeal to create a sense of scarcity and pressure the reader into action.",
258
+ "recommendation": "Consider verifying the claim and evaluating the opportunity carefully before making a decision.",
259
+ "severity": "medium",
260
+ "highlights": [
261
+ {
262
+ "phrase": "ONLY 100 spots left",
263
+ "type": "false_urgency",
264
+ "label": "Scarcity"
265
+ },
266
+ {
267
+ "phrase": "will be kicking themselves in 6 months",
268
+ "type": "emotional_manipulation",
269
+ "label": "Fear of regret"
270
+ }
271
+ ],
272
+ "bias_check": "I checked the post against Article 19 protections, satire, ordinary advocacy, cultural and linguistic nuance, and non-discrimination to ensure it was not over-classified.",
273
+ "citations": [
274
+ "https://www.ohchr.org/en/documents/general-comments-and-recommendations/general-comment-no34-article-19-freedoms-opinion-and",
275
+ "https://www.unesco.org/en/media-information-literacy",
276
+ "https://www.unesco.org/en/articles/guidelines-governance-digital-platforms"
277
+ ],
278
+ "source": "llm",
279
+ "kind": "manipulation"
280
+ }
281
+ },
282
+ "p15": {
283
+ "classification": {
284
+ "label": "FLAGGED",
285
+ "flagged": true,
286
+ "kind": "manipulation",
287
+ "confidence": 0.786,
288
+ "hate_confidence": 0.0466,
289
+ "manipulation_confidence": 0.786,
290
+ "high_confidence": false,
291
+ "truncated": false,
292
+ "raw_scores": {
293
+ "not offensive": 0.9534,
294
+ "offensive": 0.0466
295
+ },
296
+ "model": "Andrazp/multilingual-hate-speech-robacofi",
297
+ "verification": {
298
+ "relevant": true,
299
+ "reason": "The post contains dehumanizing language and scapegoating that meets the Rabat high threshold for hate speech.",
300
+ "checked": true
301
+ }
302
+ },
303
+ "analysis": {
304
+ "techniques": [
305
+ "us_vs_them",
306
+ "scapegoating",
307
+ "dehumanizing_language"
308
+ ],
309
+ "emotional_triggers": [
310
+ "fear",
311
+ "resentment"
312
+ ],
313
+ "explanation": "The wording uses divisive language to create an us-versus-them mentality and scapegoats a group for perceived problems.",
314
+ "recommendation": "Consider verifying information through reputable sources before reacting or sharing.",
315
+ "severity": "medium",
316
+ "highlights": [
317
+ {
318
+ "phrase": "These people pour into our town",
319
+ "type": "us_vs_them",
320
+ "label": "Divisive language"
321
+ },
322
+ {
323
+ "phrase": "don't bother learning how we live",
324
+ "type": "scapegoating",
325
+ "label": "Blame assignment"
326
+ },
327
+ {
328
+ "phrase": "breed faster than we can keep up",
329
+ "type": "dehumanizing_language",
330
+ "label": "Dehumanizing description"
331
+ }
332
+ ],
333
+ "bias_check": "I checked the text against Article 19 protections, considering satire, ordinary advocacy, cultural and linguistic nuance, and non-discrimination safeguards to avoid false positives.",
334
+ "citations": [
335
+ "https://www.ohchr.org/en/documents/outcome-documents/rabat-plan-action",
336
+ "https://www.un.org/en/hate-speech/un-strategy-and-plan-of-action-on-hate-speech",
337
+ "https://www.unesco.org/en/media-information-literacy"
338
+ ],
339
+ "source": "llm",
340
+ "kind": "manipulation"
341
+ }
342
+ },
343
+ "p2": {
344
+ "classification": {
345
+ "label": "CLEAR",
346
+ "flagged": false,
347
+ "kind": null,
348
+ "confidence": 0.7405,
349
+ "hate_confidence": 0.0025,
350
+ "manipulation_confidence": 0.7405,
351
+ "high_confidence": false,
352
+ "truncated": false,
353
+ "raw_scores": {
354
+ "not offensive": 0.9975,
355
+ "offensive": 0.0025
356
+ },
357
+ "model": "Andrazp/multilingual-hate-speech-robacofi",
358
+ "verification": {
359
+ "relevant": false,
360
+ "reason": "Analysis incorrectly flags post as manipulation when it is merely an opinion.",
361
+ "checked": true
362
+ }
363
+ },
364
+ "analysis": null
365
+ },
366
+ "p11": {
367
+ "classification": {
368
+ "label": "CLEAR",
369
+ "flagged": false,
370
+ "kind": null,
371
+ "confidence": 0.8512,
372
+ "hate_confidence": 0.001,
373
+ "manipulation_confidence": 0.8512,
374
+ "high_confidence": false,
375
+ "truncated": false,
376
+ "raw_scores": {
377
+ "not offensive": 0.999,
378
+ "offensive": 0.001
379
+ },
380
+ "model": "Andrazp/multilingual-hate-speech-robacofi",
381
+ "verification": {
382
+ "relevant": false,
383
+ "reason": "Analysis overreaches by labeling ordinary opinion as manipulation without clear textual evidence.",
384
+ "checked": true
385
+ }
386
+ },
387
+ "analysis": null
388
+ },
389
+ "ru1": {
390
+ "classification": {
391
+ "label": "FLAGGED",
392
+ "flagged": true,
393
+ "kind": "manipulation",
394
+ "confidence": 0.7999,
395
+ "hate_confidence": 0.0012,
396
+ "manipulation_confidence": 0.7999,
397
+ "high_confidence": false,
398
+ "truncated": false,
399
+ "raw_scores": {
400
+ "not offensive": 0.9988,
401
+ "offensive": 0.0012
402
+ },
403
+ "model": "Andrazp/multilingual-hate-speech-robacofi",
404
+ "verification": {
405
+ "relevant": true,
406
+ "reason": "Analysis accurately identifies fear amplification and false urgency techniques in the post.",
407
+ "checked": true
408
+ }
409
+ },
410
+ "analysis": {
411
+ "techniques": [
412
+ "fear_amplification",
413
+ "false_urgency"
414
+ ],
415
+ "emotional_triggers": [
416
+ "fear",
417
+ "urgency"
418
+ ],
419
+ "explanation": "The text uses fear amplification and false urgency to prompt the reader into action.",
420
+ "recommendation": "Consider verifying the information before sharing to ensure it's accurate and not misleading.",
421
+ "severity": "medium",
422
+ "highlights": [
423
+ {
424
+ "phrase": "Они не хотят, чтобы вы это знали",
425
+ "type": "fear_amplification",
426
+ "label": "Fear induction"
427
+ },
428
+ {
429
+ "phrase": "пока это не удалили",
430
+ "type": "false_urgency",
431
+ "label": "Urgency creation"
432
+ }
433
+ ],
434
+ "bias_check": "The text was checked against Article 19 protections, satire, ordinary advocacy, cultural and linguistic nuance, and non-discrimination to avoid false positives.",
435
+ "citations": [
436
+ "https://www.ohchr.org/en/documents/general-comments-and-recommendations/general-comment-no34-article-19-freedoms-opinion-and",
437
+ "https://www.unesco.org/en/media-information-literacy",
438
+ "https://www.unesco.org/en/articles/guidelines-governance-digital-platforms"
439
+ ],
440
+ "source": "llm",
441
+ "kind": "manipulation"
442
+ }
443
+ },
444
+ "p17": {
445
+ "classification": {
446
+ "label": "FLAGGED",
447
+ "flagged": true,
448
+ "kind": "hate",
449
+ "confidence": 0.9984,
450
+ "hate_confidence": 0.9984,
451
+ "manipulation_confidence": 0.8944,
452
+ "high_confidence": true,
453
+ "truncated": false,
454
+ "raw_scores": {
455
+ "not offensive": 0.0016,
456
+ "offensive": 0.9984
457
+ },
458
+ "model": "Andrazp/multilingual-hate-speech-robacofi",
459
+ "verification": {
460
+ "relevant": true,
461
+ "reason": "The post contains clear dehumanizing language and identity-based degradation.",
462
+ "checked": true
463
+ }
464
+ },
465
+ "analysis": {
466
+ "techniques": [
467
+ "dehumanizing_language",
468
+ "identity_targeting",
469
+ "us_vs_them"
470
+ ],
471
+ "emotional_triggers": [
472
+ "fear",
473
+ "disgust"
474
+ ],
475
+ "explanation": "The post uses dehumanizing language and targets a group, implying they are a threat.",
476
+ "recommendation": "Read with caution, considering the potential for harmful stereotypes.",
477
+ "severity": "high",
478
+ "highlights": [
479
+ {
480
+ "phrase": "They're animals, plain and simple",
481
+ "type": "dehumanizing_language",
482
+ "label": "Dehumanization"
483
+ },
484
+ {
485
+ "phrase": "should be removed from our streets",
486
+ "type": "identity_targeting",
487
+ "label": "Targeting a group"
488
+ }
489
+ ],
490
+ "bias_check": "The text was checked against Article 19 free-expression protections, Rabat's high threshold for incitement, and non-discrimination safeguards, but crossed the threshold due to clear dehumanization and targeting.",
491
+ "citations": [
492
+ "https://www.ohchr.org/en/documents/outcome-documents/rabat-plan-action",
493
+ "https://www.un.org/en/hate-speech/un-strategy-and-plan-of-action-on-hate-speech",
494
+ "https://www.unesco.org/en/articles/guidelines-governance-digital-platforms"
495
+ ],
496
+ "source": "llm",
497
+ "kind": "hate"
498
+ }
499
+ },
500
+ "p5": {
501
+ "classification": {
502
+ "label": "CLEAR",
503
+ "flagged": false,
504
+ "kind": null,
505
+ "confidence": 0.6593,
506
+ "hate_confidence": 0.0007,
507
+ "manipulation_confidence": 0.6593,
508
+ "high_confidence": false,
509
+ "truncated": false,
510
+ "raw_scores": {
511
+ "not offensive": 0.9993,
512
+ "offensive": 0.0007
513
+ },
514
+ "model": "Andrazp/multilingual-hate-speech-robacofi",
515
+ "verification": {
516
+ "relevant": true,
517
+ "reason": "The analysis accurately describes the post as lacking manipulative techniques.",
518
+ "checked": true
519
+ }
520
+ },
521
+ "analysis": null
522
+ },
523
+ "p12": {
524
+ "classification": {
525
+ "label": "FLAGGED",
526
+ "flagged": true,
527
+ "kind": "manipulation",
528
+ "confidence": 0.8624,
529
+ "hate_confidence": 0.0005,
530
+ "manipulation_confidence": 0.8624,
531
+ "high_confidence": true,
532
+ "truncated": false,
533
+ "raw_scores": {
534
+ "not offensive": 0.9995,
535
+ "offensive": 0.0005
536
+ },
537
+ "model": "Andrazp/multilingual-hate-speech-robacofi",
538
+ "verification": {
539
+ "relevant": true,
540
+ "reason": "The analysis accurately identifies fear_amplification, false_urgency, and emotional_manipulation techniques in the post.",
541
+ "checked": true
542
+ }
543
+ },
544
+ "analysis": {
545
+ "techniques": [
546
+ "fear_amplification",
547
+ "false_urgency",
548
+ "emotional_manipulation"
549
+ ],
550
+ "emotional_triggers": [
551
+ "fear",
552
+ "guilt"
553
+ ],
554
+ "explanation": "The wording tries to influence the reader by creating fear and guilt about the curriculum's impact on children.",
555
+ "recommendation": "Verify the information through reputable sources before reacting or sharing.",
556
+ "severity": "medium",
557
+ "highlights": [
558
+ {
559
+ "phrase": "don't call yourself a real parent",
560
+ "type": "emotional_manipulation",
561
+ "label": "Guilt trip"
562
+ },
563
+ {
564
+ "phrase": "destroy your child's mind",
565
+ "type": "fear_amplification",
566
+ "label": "Fear escalation"
567
+ },
568
+ {
569
+ "phrase": "Act before it's too late",
570
+ "type": "false_urgency",
571
+ "label": "Urgency creation"
572
+ }
573
+ ],
574
+ "bias_check": "I checked the text against Article 19 protections, satire, ordinary advocacy, cultural and linguistic nuance, and non-discrimination to avoid false positives.",
575
+ "citations": [
576
+ "https://www.ohchr.org/en/documents/general-comments-and-recommendations/general-comment-no34-article-19-freedoms-opinion-and",
577
+ "https://www.unesco.org/en/media-information-literacy",
578
+ "https://www.unesco.org/en/articles/guidelines-governance-digital-platforms"
579
+ ],
580
+ "source": "llm",
581
+ "kind": "manipulation"
582
+ }
583
+ },
584
+ "p18": {
585
+ "classification": {
586
+ "label": "FLAGGED",
587
+ "flagged": true,
588
+ "kind": "manipulation",
589
+ "confidence": 0.7491,
590
+ "hate_confidence": 0.0225,
591
+ "manipulation_confidence": 0.7491,
592
+ "high_confidence": false,
593
+ "truncated": false,
594
+ "raw_scores": {
595
+ "not offensive": 0.9775,
596
+ "offensive": 0.0225
597
+ },
598
+ "model": "Andrazp/multilingual-hate-speech-robacofi",
599
+ "verification": {
600
+ "relevant": true,
601
+ "reason": "The post contains dehumanizing language and scapegoating towards a group.",
602
+ "checked": true
603
+ }
604
+ },
605
+ "analysis": {
606
+ "techniques": [
607
+ "scapegoating",
608
+ "dehumanizing_language",
609
+ "us_vs_them"
610
+ ],
611
+ "emotional_triggers": [
612
+ "fear",
613
+ "anger",
614
+ "disgust"
615
+ ],
616
+ "explanation": "The wording uses dehumanizing language and scapegoating to create fear and anger towards a group.",
617
+ "recommendation": "Consider verifying information before reacting or sharing to avoid spreading harmful stereotypes.",
618
+ "severity": "high",
619
+ "highlights": [
620
+ {
621
+ "phrase": "They've infested every neighborhood they've touched and turned it into a dump",
622
+ "type": "dehumanizing_language",
623
+ "label": "Dehumanizing comparison"
624
+ },
625
+ {
626
+ "phrase": "Pack them up and send them back where they came from",
627
+ "type": "scapegoating",
628
+ "label": "Scapegoating and expulsion"
629
+ }
630
+ ],
631
+ "bias_check": "I checked the text against Article 19 protections, satire, ordinary advocacy, cultural and linguistic nuance, and non-discrimination to ensure it does not unfairly target a group.",
632
+ "citations": [
633
+ "https://www.ohchr.org/en/documents/outcome-documents/rabat-plan-action",
634
+ "https://www.un.org/en/hate-speech/un-strategy-and-plan-of-action-on-hate-speech",
635
+ "https://www.unesco.org/en/media-information-literacy"
636
+ ],
637
+ "source": "llm",
638
+ "kind": "manipulation"
639
+ }
640
+ },
641
+ "p7": {
642
+ "classification": {
643
+ "label": "CLEAR",
644
+ "flagged": false,
645
+ "kind": null,
646
+ "confidence": 0.6278,
647
+ "hate_confidence": 0.0002,
648
+ "manipulation_confidence": 0.6278,
649
+ "high_confidence": false,
650
+ "truncated": false,
651
+ "raw_scores": {
652
+ "not offensive": 0.9998,
653
+ "offensive": 0.0002
654
+ },
655
+ "model": "Andrazp/multilingual-hate-speech-robacofi",
656
+ "verification": {
657
+ "relevant": false,
658
+ "reason": "Analysis incorrectly flags post as manipulation when it is ordinary opinion and reflection.",
659
+ "checked": true
660
+ }
661
+ },
662
+ "analysis": null
663
+ },
664
+ "p9": {
665
+ "classification": {
666
+ "label": "CLEAR",
667
+ "flagged": false,
668
+ "kind": null,
669
+ "confidence": 0.9008,
670
+ "hate_confidence": 0.0004,
671
+ "manipulation_confidence": 0.9008,
672
+ "high_confidence": false,
673
+ "truncated": false,
674
+ "raw_scores": {
675
+ "not offensive": 0.9996,
676
+ "offensive": 0.0004
677
+ },
678
+ "model": "Andrazp/multilingual-hate-speech-robacofi",
679
+ "verification": {
680
+ "relevant": false,
681
+ "reason": "The analysis overreaches by labeling ordinary opinion and criticism of power as manipulation without clear textual evidence.",
682
+ "checked": true
683
+ }
684
+ },
685
+ "analysis": null
686
+ },
687
+ "p13": {
688
+ "classification": {
689
+ "label": "CLEAR",
690
+ "flagged": false,
691
+ "kind": null,
692
+ "confidence": 0.7975,
693
+ "hate_confidence": 0.0012,
694
+ "manipulation_confidence": 0.7975,
695
+ "high_confidence": false,
696
+ "truncated": false,
697
+ "raw_scores": {
698
+ "not offensive": 0.9988,
699
+ "offensive": 0.0012
700
+ },
701
+ "model": "Andrazp/multilingual-hate-speech-robacofi",
702
+ "verification": {
703
+ "relevant": true,
704
+ "reason": "The analysis accurately identifies the post's use of sarcasm to express frustration.",
705
+ "checked": true
706
+ }
707
+ },
708
+ "analysis": null
709
+ },
710
+ "p4": {
711
+ "classification": {
712
+ "label": "CLEAR",
713
+ "flagged": false,
714
+ "kind": null,
715
+ "confidence": 0.3288,
716
+ "hate_confidence": 0.001,
717
+ "manipulation_confidence": 0.3288,
718
+ "high_confidence": false,
719
+ "truncated": false,
720
+ "raw_scores": {
721
+ "not offensive": 0.999,
722
+ "offensive": 0.001
723
+ },
724
+ "model": "Andrazp/multilingual-hate-speech-robacofi",
725
+ "verification": null
726
+ },
727
+ "analysis": null
728
+ },
729
+ "p14": {
730
+ "classification": {
731
+ "label": "CLEAR",
732
+ "flagged": false,
733
+ "kind": null,
734
+ "confidence": 0.7382,
735
+ "hate_confidence": 0.0003,
736
+ "manipulation_confidence": 0.7382,
737
+ "high_confidence": false,
738
+ "truncated": false,
739
+ "raw_scores": {
740
+ "not offensive": 0.9997,
741
+ "offensive": 0.0003
742
+ },
743
+ "model": "Andrazp/multilingual-hate-speech-robacofi",
744
+ "verification": {
745
+ "relevant": true,
746
+ "reason": "Analysis accurately describes post's cautious skepticism without overreaching.",
747
+ "checked": true
748
+ }
749
+ },
750
+ "analysis": null
751
+ },
752
+ "p6": {
753
+ "classification": {
754
+ "label": "CLEAR",
755
+ "flagged": false,
756
+ "kind": null,
757
+ "confidence": 0.0791,
758
+ "hate_confidence": 0.0054,
759
+ "manipulation_confidence": 0.0791,
760
+ "high_confidence": false,
761
+ "truncated": false,
762
+ "raw_scores": {
763
+ "not offensive": 0.9946,
764
+ "offensive": 0.0054
765
+ },
766
+ "model": "Andrazp/multilingual-hate-speech-robacofi",
767
+ "verification": null
768
+ },
769
+ "analysis": null
770
+ },
771
+ "p19": {
772
+ "classification": {
773
+ "label": "CLEAR",
774
+ "flagged": false,
775
+ "kind": null,
776
+ "confidence": 0.7153,
777
+ "hate_confidence": 0.0009,
778
+ "manipulation_confidence": 0.7153,
779
+ "high_confidence": false,
780
+ "truncated": false,
781
+ "raw_scores": {
782
+ "not offensive": 0.9991,
783
+ "offensive": 0.0009
784
+ },
785
+ "model": "Andrazp/multilingual-hate-speech-robacofi",
786
+ "verification": {
787
+ "relevant": false,
788
+ "reason": "The analysis overreaches by labeling ordinary opinion as scapegoating without clear textual evidence of identity-based degradation or dehumanization.",
789
+ "checked": true
790
+ }
791
+ },
792
+ "analysis": null
793
+ }
794
+ }
795
+ }
favicon-32.png ADDED
favicon.ico ADDED
feed.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"posts": [{"id": "p1", "user": {"name": "Maya Chen", "handle": "maya_codes", "initial": "M", "color": "#2563EB", "verified": false}, "time": "12m", "text": "spent three hours debugging today only to realize i'd been editing the wrong file the entire time. anyway. how is everyone's monday going", "media": null, "engagement": {"replies": 156, "reposts": 89, "likes": 1243}, "classification": {"label": "CLEAR", "flagged": false, "kind": null, "confidence": 0.5091, "hate_confidence": 0.0022, "manipulation_confidence": 0.5091, "high_confidence": false, "truncated": false, "raw_scores": {"not offensive": 0.9978, "offensive": 0.0022}, "model": "Andrazp/multilingual-hate-speech-robacofi", "verification": {"relevant": true, "reason": "Analysis accurately describes the post as lacking manipulative techniques.", "checked": true}}, "analysis": null, "flagged": false}, {"id": "p8", "user": {"name": "Truth Hour", "handle": "TheRealTruthHour", "initial": "T", "color": "#DC2626", "verified": false}, "time": "26m", "text": "They don't want you to know this, but the new digital ID rolling out next month means they can switch off your bank account with a single click. This is NOT a conspiracy. Screenshot this before it gets taken down. \u23f0", "media": null, "engagement": {"replies": 3400, "reposts": 8900, "likes": 12000}, "classification": {"label": "FLAGGED", "flagged": true, "kind": "manipulation", "confidence": 0.6559, "hate_confidence": 0.0005, "manipulation_confidence": 0.6559, "high_confidence": false, "truncated": false, "raw_scores": {"not offensive": 0.9995, "offensive": 0.0005}, "model": "Andrazp/multilingual-hate-speech-robacofi", "verification": {"relevant": true, "reason": "The post uses fear and urgency to influence the reader.", "checked": true}}, "analysis": {"techniques": ["fear_amplification", "false_urgency", "emotional_manipulation"], "emotional_triggers": ["fear", "urgency"], "explanation": "The post uses fear and urgency to influence the reader, implying a loss of control over personal finances.", "recommendation": "Verify the information through reputable sources before reacting or sharing.", "severity": "medium", "highlights": [{"phrase": "They don't want you to know this", "type": "fear_amplification", "label": "Conspiratorial tone"}, {"phrase": "switch off your bank account with a single click", "type": "fear_amplification", "label": "Fear of financial control"}, {"phrase": "Screenshot this before it gets taken down", "type": "false_urgency", "label": "Urgency and scarcity"}], "bias_check": "I checked the text against Article 19 protections, satire, ordinary advocacy, cultural and linguistic nuance, and non-discrimination to avoid false positives.", "citations": ["https://www.ohchr.org/en/documents/general-comments-and-recommendations/general-comment-no34-article-19-freedoms-opinion-and", "https://www.unesco.org/en/media-information-literacy", "https://www.unesco.org/en/articles/guidelines-governance-digital-platforms"], "source": "llm", "kind": "manipulation"}, "flagged": true}, {"id": "v1", "user": {"name": "Truth Unfiltered", "handle": "truth_unfiltered", "initial": "T", "color": "#B91C1C", "verified": false}, "time": "22m", "text": "\ud83d\udea8 They're not showing you THIS on the news. Watch before they take it down \u2014 this is what they don't want you to see. Share it NOW while you still can, before it's too late.", "media": {"type": "video", "src": "/video.mp4"}, "engagement": {"replies": 2100, "reposts": 7400, "likes": 9800}, "classification": {"label": "FLAGGED", "flagged": true, "kind": "manipulation", "confidence": 0.5944, "hate_confidence": 0.0004, "manipulation_confidence": 0.5944, "high_confidence": false, "truncated": false, "raw_scores": {"not offensive": 0.9996, "offensive": 0.0004}, "model": "Andrazp/multilingual-hate-speech-robacofi", "verification": {"relevant": true, "reason": "The post uses language that creates a sense of urgency and emotional appeal to prompt sharing.", "checked": true}}, "analysis": {"techniques": ["false_urgency", "emotional_manipulation"], "emotional_triggers": ["urgency", "exclusivity"], "explanation": "The post uses false urgency and emotional manipulation to prompt sharing.", "recommendation": "Verify the content before sharing to ensure it's accurate and not misleading.", "severity": "medium", "highlights": [{"phrase": "Watch before they take it down", "type": "false_urgency", "label": "Urgency"}, {"phrase": "Share it NOW while you still can", "type": "emotional_manipulation", "label": "Emotional Appeal"}], "bias_check": "The post was checked against Article 19 protections, satire, ordinary advocacy, cultural and linguistic nuance, and non-discrimination to avoid false positives.", "citations": ["https://www.ohchr.org/en/documents/general-comments-and-recommendations/general-comment-no34-article-19-freedoms-opinion-and", "https://www.unesco.org/en/media-information-literacy", "https://www.unesco.org/en/articles/guidelines-governance-digital-platforms"], "source": "llm", "kind": "manipulation"}, "flagged": true}, {"id": "p16", "user": {"name": "ZephyrX", "handle": "ZephyrX_", "initial": "Z", "color": "#1F2937", "verified": false}, "time": "6h", "text": "Every one of them is the same \u2014 vermin who swarm in and bleed this place dry. They don't belong here and they should be driven out before there's nothing left.", "media": null, "engagement": {"replies": 890, "reposts": 1100, "likes": 2300}, "classification": {"label": "FLAGGED", "flagged": true, "kind": "manipulation", "confidence": 0.7333, "hate_confidence": 0.27, "manipulation_confidence": 0.7333, "high_confidence": false, "truncated": false, "raw_scores": {"not offensive": 0.73, "offensive": 0.27}, "model": "Andrazp/multilingual-hate-speech-robacofi", "verification": {"relevant": true, "reason": "The post contains dehumanizing language and scapegoating towards a group.", "checked": true}}, "analysis": {"techniques": ["dehumanizing_language", "scapegoating", "us_vs_them"], "emotional_triggers": ["fear", "anger", "disgust"], "explanation": "The wording uses dehumanizing language and scapegoating to create fear and anger towards a group.", "recommendation": "Consider the potential harm of such rhetoric before sharing or reacting.", "severity": "high", "highlights": [{"phrase": "vermin who swarm in and bleed this place dry", "type": "dehumanizing_language", "label": "Dehumanizing comparison"}, {"phrase": "They don't belong here and they should be driven out", "type": "scapegoating", "label": "Scapegoating and exclusion"}], "bias_check": "I checked the text against Article 19 protections, considering the context of satire, ordinary advocacy, cultural and linguistic nuance, and non-discrimination to avoid false positives.", "citations": ["https://www.ohchr.org/en/documents/outcome-documents/rabat-plan-action", "https://www.un.org/en/hate-speech/un-strategy-and-plan-of-action-on-hate-speech", "https://www.unesco.org/en/media-information-literacy"], "source": "llm", "kind": "manipulation"}, "flagged": true}, {"id": "p3", "user": {"name": "Priya K.", "handle": "aerialnomad", "initial": "P", "color": "#0D9488", "verified": true}, "time": "1h", "text": "Sunrise over the valley in Patagonia right now. Some places just don't feel real until you're standing in them. \ud83c\udfd4\ufe0f", "media": {"type": "gradient"}, "engagement": {"replies": 230, "reposts": 1200, "likes": 8900}, "classification": {"label": "CLEAR", "flagged": false, "kind": null, "confidence": 0.3213, "hate_confidence": 0.0006, "manipulation_confidence": 0.3213, "high_confidence": false, "truncated": false, "raw_scores": {"not offensive": 0.9994, "offensive": 0.0006}, "model": "Andrazp/multilingual-hate-speech-robacofi", "verification": null}, "analysis": null, "flagged": false}, {"id": "p10", "user": {"name": "Brad // crypto", "handle": "cryptobrad", "initial": "B", "color": "#F59E0B", "verified": false}, "time": "1h", "text": "\ud83d\udea8 ONLY 100 spots left. This is your LAST chance to get in before the price 10x's. The people who hesitate will be kicking themselves in 6 months. DM me NOW or stay broke. \ud83d\udc49 https://t.co/x9f2aQ", "media": null, "engagement": {"replies": 1200, "reposts": 450, "likes": 890}, "classification": {"label": "FLAGGED", "flagged": true, "kind": "manipulation", "confidence": 0.6714, "hate_confidence": 0.0005, "manipulation_confidence": 0.6714, "high_confidence": false, "truncated": false, "raw_scores": {"not offensive": 0.9995, "offensive": 0.0005}, "model": "Andrazp/multilingual-hate-speech-robacofi", "verification": {"relevant": true, "reason": "The analysis accurately identifies false urgency and emotional manipulation techniques in the post.", "checked": true}}, "analysis": {"techniques": ["false_urgency", "emotional_manipulation"], "emotional_triggers": ["fear of missing out", "greed"], "explanation": "The post uses urgency and emotional appeal to create a sense of scarcity and pressure the reader into action.", "recommendation": "Consider verifying the claim and evaluating the opportunity carefully before making a decision.", "severity": "medium", "highlights": [{"phrase": "ONLY 100 spots left", "type": "false_urgency", "label": "Scarcity"}, {"phrase": "will be kicking themselves in 6 months", "type": "emotional_manipulation", "label": "Fear of regret"}], "bias_check": "I checked the post against Article 19 protections, satire, ordinary advocacy, cultural and linguistic nuance, and non-discrimination to ensure it was not over-classified.", "citations": ["https://www.ohchr.org/en/documents/general-comments-and-recommendations/general-comment-no34-article-19-freedoms-opinion-and", "https://www.unesco.org/en/media-information-literacy", "https://www.unesco.org/en/articles/guidelines-governance-digital-platforms"], "source": "llm", "kind": "manipulation"}, "flagged": true}, {"id": "p15", "user": {"name": "Mike", "handle": "patriot_mike49", "initial": "M", "color": "#991B1B", "verified": false}, "time": "5h", "text": "These people pour into our town, don't bother learning how we live, and expect us to bend over backwards for them. They breed faster than we can keep up and soon there'll be nothing left of who we are. Enough.", "media": null, "engagement": {"replies": 1200, "reposts": 3400, "likes": 5600}, "classification": {"label": "FLAGGED", "flagged": true, "kind": "manipulation", "confidence": 0.786, "hate_confidence": 0.0466, "manipulation_confidence": 0.786, "high_confidence": false, "truncated": false, "raw_scores": {"not offensive": 0.9534, "offensive": 0.0466}, "model": "Andrazp/multilingual-hate-speech-robacofi", "verification": {"relevant": true, "reason": "The post contains dehumanizing language and scapegoating that meets the Rabat high threshold for hate speech.", "checked": true}}, "analysis": {"techniques": ["us_vs_them", "scapegoating", "dehumanizing_language"], "emotional_triggers": ["fear", "resentment"], "explanation": "The wording uses divisive language to create an us-versus-them mentality and scapegoats a group for perceived problems.", "recommendation": "Consider verifying information through reputable sources before reacting or sharing.", "severity": "medium", "highlights": [{"phrase": "These people pour into our town", "type": "us_vs_them", "label": "Divisive language"}, {"phrase": "don't bother learning how we live", "type": "scapegoating", "label": "Blame assignment"}, {"phrase": "breed faster than we can keep up", "type": "dehumanizing_language", "label": "Dehumanizing description"}], "bias_check": "I checked the text against Article 19 protections, considering satire, ordinary advocacy, cultural and linguistic nuance, and non-discrimination safeguards to avoid false positives.", "citations": ["https://www.ohchr.org/en/documents/outcome-documents/rabat-plan-action", "https://www.un.org/en/hate-speech/un-strategy-and-plan-of-action-on-hate-speech", "https://www.unesco.org/en/media-information-literacy"], "source": "llm", "kind": "manipulation"}, "flagged": true}, {"id": "p2", "user": {"name": "Dave R.", "handle": "grillmaster_dave", "initial": "D", "color": "#D97706", "verified": false}, "time": "34m", "text": "Unpopular opinion: pineapple absolutely belongs on pizza and I'm tired of pretending it doesn't \ud83c\udf4d", "media": null, "engagement": {"replies": 890, "reposts": 320, "likes": 4500}, "classification": {"label": "CLEAR", "flagged": false, "kind": null, "confidence": 0.7405, "hate_confidence": 0.0025, "manipulation_confidence": 0.7405, "high_confidence": false, "truncated": false, "raw_scores": {"not offensive": 0.9975, "offensive": 0.0025}, "model": "Andrazp/multilingual-hate-speech-robacofi", "verification": {"relevant": false, "reason": "Analysis incorrectly flags post as manipulation when it is merely an opinion.", "checked": true}}, "analysis": null, "flagged": false}, {"id": "p11", "user": {"name": "Real Talk Radio", "handle": "realtalkradio", "initial": "R", "color": "#B91C1C", "verified": false}, "time": "2h", "text": "Notice how every time regular people start asking real questions, there's suddenly a brand new crisis to distract everyone? That's not a coincidence. They've been running this exact playbook for decades.", "media": null, "engagement": {"replies": 780, "reposts": 5600, "likes": 9800}, "classification": {"label": "CLEAR", "flagged": false, "kind": null, "confidence": 0.8512, "hate_confidence": 0.001, "manipulation_confidence": 0.8512, "high_confidence": false, "truncated": false, "raw_scores": {"not offensive": 0.999, "offensive": 0.001}, "model": "Andrazp/multilingual-hate-speech-robacofi", "verification": {"relevant": false, "reason": "Analysis overreaches by labeling ordinary opinion as manipulation without clear textual evidence.", "checked": true}}, "analysis": null, "flagged": false}, {"id": "ru1", "user": {"name": "\u0414\u043c\u0438\u0442\u0440\u0438\u0439", "handle": "dmitry_news", "initial": "\u0414", "color": "#1D4ED8", "verified": false}, "time": "40m", "text": "\u041e\u043d\u0438 \u043d\u0435 \u0445\u043e\u0442\u044f\u0442, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u044d\u0442\u043e \u0437\u043d\u0430\u043b\u0438: \u043d\u043e\u0432\u044b\u0439 \u0437\u0430\u043a\u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0438\u043c \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0430\u0448 \u0441\u0447\u0451\u0442 \u043e\u0434\u043d\u0438\u043c \u0449\u0435\u043b\u0447\u043a\u043e\u043c. \u041d\u0435 \u043c\u043e\u043b\u0447\u0438\u0442\u0435. \u0421\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0440\u0435\u043f\u043e\u0441\u0442, \u043f\u043e\u043a\u0430 \u044d\u0442\u043e \u043d\u0435 \u0443\u0434\u0430\u043b\u0438\u043b\u0438.", "media": null, "engagement": {"replies": 980, "reposts": 5200, "likes": 4100}, "classification": {"label": "FLAGGED", "flagged": true, "kind": "manipulation", "confidence": 0.7999, "hate_confidence": 0.0012, "manipulation_confidence": 0.7999, "high_confidence": false, "truncated": false, "raw_scores": {"not offensive": 0.9988, "offensive": 0.0012}, "model": "Andrazp/multilingual-hate-speech-robacofi", "verification": {"relevant": true, "reason": "Analysis accurately identifies fear amplification and false urgency techniques in the post.", "checked": true}}, "analysis": {"techniques": ["fear_amplification", "false_urgency"], "emotional_triggers": ["fear", "urgency"], "explanation": "The text uses fear amplification and false urgency to prompt the reader into action.", "recommendation": "Consider verifying the information before sharing to ensure it's accurate and not misleading.", "severity": "medium", "highlights": [{"phrase": "\u041e\u043d\u0438 \u043d\u0435 \u0445\u043e\u0442\u044f\u0442, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u044d\u0442\u043e \u0437\u043d\u0430\u043b\u0438", "type": "fear_amplification", "label": "Fear induction"}, {"phrase": "\u043f\u043e\u043a\u0430 \u044d\u0442\u043e \u043d\u0435 \u0443\u0434\u0430\u043b\u0438\u043b\u0438", "type": "false_urgency", "label": "Urgency creation"}], "bias_check": "The text was checked against Article 19 protections, satire, ordinary advocacy, cultural and linguistic nuance, and non-discrimination to avoid false positives.", "citations": ["https://www.ohchr.org/en/documents/general-comments-and-recommendations/general-comment-no34-article-19-freedoms-opinion-and", "https://www.unesco.org/en/media-information-literacy", "https://www.unesco.org/en/articles/guidelines-governance-digital-platforms"], "source": "llm", "kind": "manipulation"}, "flagged": true}, {"id": "p17", "user": {"name": "Borderwatch", "handle": "borderwatch_now", "initial": "B", "color": "#7F1D1D", "verified": false}, "time": "7h", "text": "They're animals, plain and simple, and you can't civilize an animal. People like that should be removed from our streets before they ruin everything.", "media": null, "engagement": {"replies": 1500, "reposts": 2100, "likes": 3400}, "classification": {"label": "FLAGGED", "flagged": true, "kind": "hate", "confidence": 0.9984, "hate_confidence": 0.9984, "manipulation_confidence": 0.8944, "high_confidence": true, "truncated": false, "raw_scores": {"not offensive": 0.0016, "offensive": 0.9984}, "model": "Andrazp/multilingual-hate-speech-robacofi", "verification": {"relevant": true, "reason": "The post contains clear dehumanizing language and identity-based degradation.", "checked": true}}, "analysis": {"techniques": ["dehumanizing_language", "identity_targeting", "us_vs_them"], "emotional_triggers": ["fear", "disgust"], "explanation": "The post uses dehumanizing language and targets a group, implying they are a threat.", "recommendation": "Read with caution, considering the potential for harmful stereotypes.", "severity": "high", "highlights": [{"phrase": "They're animals, plain and simple", "type": "dehumanizing_language", "label": "Dehumanization"}, {"phrase": "should be removed from our streets", "type": "identity_targeting", "label": "Targeting a group"}], "bias_check": "The text was checked against Article 19 free-expression protections, Rabat's high threshold for incitement, and non-discrimination safeguards, but crossed the threshold due to clear dehumanization and targeting.", "citations": ["https://www.ohchr.org/en/documents/outcome-documents/rabat-plan-action", "https://www.un.org/en/hate-speech/un-strategy-and-plan-of-action-on-hate-speech", "https://www.unesco.org/en/articles/guidelines-governance-digital-platforms"], "source": "llm", "kind": "hate"}, "flagged": true}, {"id": "p5", "user": {"name": "Sam \u00b7 RN", "handle": "nightshift_sam", "initial": "S", "color": "#7C3AED", "verified": false}, "time": "3h", "text": "12 hour shift done. feet wrecked, heart full. a patient's family brought the whole unit donuts today and i nearly cried in the break room. it's the small stuff.", "media": null, "engagement": {"replies": 145, "reposts": 210, "likes": 3400}, "classification": {"label": "CLEAR", "flagged": false, "kind": null, "confidence": 0.6593, "hate_confidence": 0.0007, "manipulation_confidence": 0.6593, "high_confidence": false, "truncated": false, "raw_scores": {"not offensive": 0.9993, "offensive": 0.0007}, "model": "Andrazp/multilingual-hate-speech-robacofi", "verification": {"relevant": true, "reason": "The analysis accurately describes the post as lacking manipulative techniques.", "checked": true}}, "analysis": null, "flagged": false}, {"id": "p12", "user": {"name": "Concerned Parent", "handle": "concerned_parent_99", "initial": "C", "color": "#92400E", "verified": false}, "time": "3h", "text": "If you don't share this, don't call yourself a real parent. They are putting things into the curriculum that will destroy your child's mind by next year. Act before it's too late.", "media": null, "engagement": {"replies": 2300, "reposts": 6700, "likes": 4500}, "classification": {"label": "FLAGGED", "flagged": true, "kind": "manipulation", "confidence": 0.8624, "hate_confidence": 0.0005, "manipulation_confidence": 0.8624, "high_confidence": true, "truncated": false, "raw_scores": {"not offensive": 0.9995, "offensive": 0.0005}, "model": "Andrazp/multilingual-hate-speech-robacofi", "verification": {"relevant": true, "reason": "The analysis accurately identifies fear_amplification, false_urgency, and emotional_manipulation techniques in the post.", "checked": true}}, "analysis": {"techniques": ["fear_amplification", "false_urgency", "emotional_manipulation"], "emotional_triggers": ["fear", "guilt"], "explanation": "The wording tries to influence the reader by creating fear and guilt about the curriculum's impact on children.", "recommendation": "Verify the information through reputable sources before reacting or sharing.", "severity": "medium", "highlights": [{"phrase": "don't call yourself a real parent", "type": "emotional_manipulation", "label": "Guilt trip"}, {"phrase": "destroy your child's mind", "type": "fear_amplification", "label": "Fear escalation"}, {"phrase": "Act before it's too late", "type": "false_urgency", "label": "Urgency creation"}], "bias_check": "I checked the text against Article 19 protections, satire, ordinary advocacy, cultural and linguistic nuance, and non-discrimination to avoid false positives.", "citations": ["https://www.ohchr.org/en/documents/general-comments-and-recommendations/general-comment-no34-article-19-freedoms-opinion-and", "https://www.unesco.org/en/media-information-literacy", "https://www.unesco.org/en/articles/guidelines-governance-digital-platforms"], "source": "llm", "kind": "manipulation"}, "flagged": true}, {"id": "p18", "user": {"name": "Old Town Voice", "handle": "oldtownvoice", "initial": "O", "color": "#78350F", "verified": false}, "time": "9h", "text": "They've infested every neighborhood they've touched and turned it into a dump. Pack them up and send them back where they came from before there's nothing left of this place.", "media": null, "engagement": {"replies": 1900, "reposts": 2800, "likes": 4500}, "classification": {"label": "FLAGGED", "flagged": true, "kind": "manipulation", "confidence": 0.7491, "hate_confidence": 0.0225, "manipulation_confidence": 0.7491, "high_confidence": false, "truncated": false, "raw_scores": {"not offensive": 0.9775, "offensive": 0.0225}, "model": "Andrazp/multilingual-hate-speech-robacofi", "verification": {"relevant": true, "reason": "The post contains dehumanizing language and scapegoating towards a group.", "checked": true}}, "analysis": {"techniques": ["scapegoating", "dehumanizing_language", "us_vs_them"], "emotional_triggers": ["fear", "anger", "disgust"], "explanation": "The wording uses dehumanizing language and scapegoating to create fear and anger towards a group.", "recommendation": "Consider verifying information before reacting or sharing to avoid spreading harmful stereotypes.", "severity": "high", "highlights": [{"phrase": "They've infested every neighborhood they've touched and turned it into a dump", "type": "dehumanizing_language", "label": "Dehumanizing comparison"}, {"phrase": "Pack them up and send them back where they came from", "type": "scapegoating", "label": "Scapegoating and expulsion"}], "bias_check": "I checked the text against Article 19 protections, satire, ordinary advocacy, cultural and linguistic nuance, and non-discrimination to ensure it does not unfairly target a group.", "citations": ["https://www.ohchr.org/en/documents/outcome-documents/rabat-plan-action", "https://www.un.org/en/hate-speech/un-strategy-and-plan-of-action-on-hate-speech", "https://www.unesco.org/en/media-information-literacy"], "source": "llm", "kind": "manipulation"}, "flagged": true}, {"id": "p7", "user": {"name": "Anna Whitfield", "handle": "historybuff_anna", "initial": "A", "color": "#9333EA", "verified": true}, "time": "5h", "text": "people ask why i love history and honestly it's because nothing is ever as simple as the textbook makes it sound. every 'obvious' decision was made by a real person who couldn't see the ending, who was scared and tired and working with bad information. we read the past like the outcome was inevitable, but the people living it had no idea which way it would go. that's the part that stays with me, not the dates or the battles but the uncertainty. it makes me a lot gentler about the present, knowing future generations will flatten us into a tidy paragraph too.", "media": null, "engagement": {"replies": 210, "reposts": 980, "likes": 5600}, "classification": {"label": "CLEAR", "flagged": false, "kind": null, "confidence": 0.6278, "hate_confidence": 0.0002, "manipulation_confidence": 0.6278, "high_confidence": false, "truncated": false, "raw_scores": {"not offensive": 0.9998, "offensive": 0.0002}, "model": "Andrazp/multilingual-hate-speech-robacofi", "verification": {"relevant": false, "reason": "Analysis incorrectly flags post as manipulation when it is ordinary opinion and reflection.", "checked": true}}, "analysis": null, "flagged": false}, {"id": "p9", "user": {"name": "Open Your Eyes", "handle": "wakeup_sheeple", "initial": "O", "color": "#7C2D12", "verified": false}, "time": "1h", "text": "Wake up. Everything you were taught was designed to keep you obedient and quiet. The people at the top are laughing at how easy it was. Stop trusting them and start trusting your gut.", "media": null, "engagement": {"replies": 890, "reposts": 4200, "likes": 6700}, "classification": {"label": "CLEAR", "flagged": false, "kind": null, "confidence": 0.9008, "hate_confidence": 0.0004, "manipulation_confidence": 0.9008, "high_confidence": false, "truncated": false, "raw_scores": {"not offensive": 0.9996, "offensive": 0.0004}, "model": "Andrazp/multilingual-hate-speech-robacofi", "verification": {"relevant": false, "reason": "The analysis overreaches by labeling ordinary opinion and criticism of power as manipulation without clear textual evidence.", "checked": true}}, "analysis": null, "flagged": false}, {"id": "p13", "user": {"name": "doomscroller", "handle": "doomscroller", "initial": "d", "color": "#475569", "verified": false}, "time": "3h", "text": "oh good, another 'once in a lifetime' crisis this week. truly we are so blessed to live through the single most important moment in human history every monday \ud83d\ude44", "media": null, "engagement": {"replies": 120, "reposts": 670, "likes": 3200}, "classification": {"label": "CLEAR", "flagged": false, "kind": null, "confidence": 0.7975, "hate_confidence": 0.0012, "manipulation_confidence": 0.7975, "high_confidence": false, "truncated": false, "raw_scores": {"not offensive": 0.9988, "offensive": 0.0012}, "model": "Andrazp/multilingual-hate-speech-robacofi", "verification": {"relevant": true, "reason": "The analysis accurately identifies the post's use of sarcasm to express frustration.", "checked": true}}, "analysis": null, "flagged": false}, {"id": "p4", "user": {"name": "Lena Ortiz", "handle": "lena_writes", "initial": "L", "color": "#DB2777", "verified": false}, "time": "2h", "text": "finished the first draft of my novel at 2am and immediately started doubting every single word of it. writing is just professionally arguing with yourself.", "media": null, "engagement": {"replies": 98, "reposts": 340, "likes": 2100}, "classification": {"label": "CLEAR", "flagged": false, "kind": null, "confidence": 0.3288, "hate_confidence": 0.001, "manipulation_confidence": 0.3288, "high_confidence": false, "truncated": false, "raw_scores": {"not offensive": 0.999, "offensive": 0.001}, "model": "Andrazp/multilingual-hate-speech-robacofi", "verification": null}, "analysis": null, "flagged": false}, {"id": "p14", "user": {"name": "just asking", "handle": "quiet_observer", "initial": "j", "color": "#64748B", "verified": false}, "time": "4h", "text": "i'm not saying anything is definitely wrong with the new policy... but doesn't it feel a little convenient? a lot of people are quietly starting to wonder, and maybe that's worth paying attention to.", "media": null, "engagement": {"replies": 200, "reposts": 340, "likes": 1200}, "classification": {"label": "CLEAR", "flagged": false, "kind": null, "confidence": 0.7382, "hate_confidence": 0.0003, "manipulation_confidence": 0.7382, "high_confidence": false, "truncated": false, "raw_scores": {"not offensive": 0.9997, "offensive": 0.0003}, "model": "Andrazp/multilingual-hate-speech-robacofi", "verification": {"relevant": true, "reason": "Analysis accurately describes post's cautious skepticism without overreaching.", "checked": true}}, "analysis": null, "flagged": false}, {"id": "p6", "user": {"name": "Tom B.", "handle": "tom_b", "initial": "T", "color": "#0F172A", "verified": false}, "time": "4h", "text": "is it coffee o'clock yet", "media": null, "engagement": {"replies": 34, "reposts": 12, "likes": 540}, "classification": {"label": "CLEAR", "flagged": false, "kind": null, "confidence": 0.0791, "hate_confidence": 0.0054, "manipulation_confidence": 0.0791, "high_confidence": false, "truncated": false, "raw_scores": {"not offensive": 0.9946, "offensive": 0.0054}, "model": "Andrazp/multilingual-hate-speech-robacofi", "verification": null}, "analysis": null, "flagged": false}, {"id": "p19", "user": {"name": "Jane", "handle": "realtalk_jane", "initial": "J", "color": "#a16207", "verified": false}, "time": "11h", "text": "funny how a certain kind of people always seem to end up at the center of every single problem in this city. at some point you stop calling it a coincidence.", "media": null, "engagement": {"replies": 600, "reposts": 900, "likes": 1800}, "classification": {"label": "CLEAR", "flagged": false, "kind": null, "confidence": 0.7153, "hate_confidence": 0.0009, "manipulation_confidence": 0.7153, "high_confidence": false, "truncated": false, "raw_scores": {"not offensive": 0.9991, "offensive": 0.0009}, "model": "Andrazp/multilingual-hate-speech-robacofi", "verification": {"relevant": false, "reason": "The analysis overreaches by labeling ordinary opinion as scapegoating without clear textual evidence of identity-based degradation or dehumanization.", "checked": true}}, "analysis": null, "flagged": false}]}
index-BUMAbC0x.js ADDED
The diff for this file is too large to render. See raw diff
 
index-Cm--0EGF.css ADDED
@@ -0,0 +1 @@
 
 
1
+ *,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.pointer-events-none{pointer-events:none}.\!visible{visibility:visible!important}.visible{visibility:visible}.static{position:static}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.-inset-\[35\%\]{top:-35%;right:-35%;bottom:-35%;left:-35%}.inset-0{top:0;right:0;bottom:0;left:0}.inset-1{top:.25rem;right:.25rem;bottom:.25rem;left:.25rem}.bottom-0{bottom:0}.left-0\.5{left:.125rem}.left-1\/2{left:50%}.top-0{top:0}.top-0\.5{top:.125rem}.top-3{top:.75rem}.z-10{z-index:10}.z-20{z-index:20}.m-4{margin:1rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.ml-auto{margin-left:auto}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-11{margin-top:2.75rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-7{margin-top:1.75rem}.mt-8{margin-top:2rem}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-4{height:1rem}.h-44{height:11rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-screen{height:100vh}.min-h-screen{min-height:100vh}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[350px\]{width:350px}.w-\[68px\]{width:68px}.w-full{width:100%}.min-w-0{min-width:0px}.max-w-4xl{max-width:56rem}.max-w-\[1280px\]{max-width:1280px}.max-w-\[640px\]{max-width:640px}.max-w-md{max-width:28rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-5{--tw-translate-x: 1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ping{75%,to{transform:scale(2);opacity:0}}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-10{gap:2.5rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.625rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-x{border-left-width:1px;border-right-width:1px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-brand-300{--tw-border-opacity: 1;border-color:rgb(196 181 253 / var(--tw-border-opacity, 1))}.border-emerald-200{--tw-border-opacity: 1;border-color:rgb(167 243 208 / var(--tw-border-opacity, 1))}.border-line{--tw-border-opacity: 1;border-color:rgb(234 236 239 / var(--tw-border-opacity, 1))}.border-pink-200{--tw-border-opacity: 1;border-color:rgb(251 207 232 / var(--tw-border-opacity, 1))}.border-rose-200{--tw-border-opacity: 1;border-color:rgb(254 205 211 / var(--tw-border-opacity, 1))}.border-slate-200{--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.border-teal-200{--tw-border-opacity: 1;border-color:rgb(153 246 228 / var(--tw-border-opacity, 1))}.border-violet-100{--tw-border-opacity: 1;border-color:rgb(237 233 254 / var(--tw-border-opacity, 1))}.border-violet-200{--tw-border-opacity: 1;border-color:rgb(221 214 254 / var(--tw-border-opacity, 1))}.border-violet-200\/70{border-color:#ddd6feb3}.border-violet-300{--tw-border-opacity: 1;border-color:rgb(196 181 253 / var(--tw-border-opacity, 1))}.border-violet-400{--tw-border-opacity: 1;border-color:rgb(167 139 250 / var(--tw-border-opacity, 1))}.border-white\/10{border-color:#ffffff1a}.border-white\/15{border-color:#ffffff26}.bg-\[\#050409\]{--tw-bg-opacity: 1;background-color:rgb(5 4 9 / var(--tw-bg-opacity, 1))}.bg-\[\#0a1626\]{--tw-bg-opacity: 1;background-color:rgb(10 22 38 / var(--tw-bg-opacity, 1))}.bg-\[\#a78bfa\]{--tw-bg-opacity: 1;background-color:rgb(167 139 250 / var(--tw-bg-opacity, 1))}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-brand-100{--tw-bg-opacity: 1;background-color:rgb(237 233 254 / var(--tw-bg-opacity, 1))}.bg-brand-50{--tw-bg-opacity: 1;background-color:rgb(245 243 255 / var(--tw-bg-opacity, 1))}.bg-brand-600{--tw-bg-opacity: 1;background-color:rgb(124 58 237 / var(--tw-bg-opacity, 1))}.bg-emerald-50{--tw-bg-opacity: 1;background-color:rgb(236 253 245 / var(--tw-bg-opacity, 1))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-300{--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.bg-gray-50\/80{background-color:#f9fafbcc}.bg-ink{--tw-bg-opacity: 1;background-color:rgb(15 20 25 / var(--tw-bg-opacity, 1))}.bg-pink-50{--tw-bg-opacity: 1;background-color:rgb(253 242 248 / var(--tw-bg-opacity, 1))}.bg-rose-50{--tw-bg-opacity: 1;background-color:rgb(255 241 242 / var(--tw-bg-opacity, 1))}.bg-slate-50{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.bg-teal-50{--tw-bg-opacity: 1;background-color:rgb(240 253 250 / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-violet-400\/40{background-color:#a78bfa66}.bg-violet-50{--tw-bg-opacity: 1;background-color:rgb(245 243 255 / var(--tw-bg-opacity, 1))}.bg-violet-50\/60{background-color:#f5f3ff99}.bg-violet-600{--tw-bg-opacity: 1;background-color:rgb(124 58 237 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/85{background-color:#ffffffd9}.bg-white\/\[0\.04\]{background-color:#ffffff0a}.bg-white\/\[0\.05\]{background-color:#ffffff0d}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-\[\#ede9fe\]{--tw-gradient-from: #ede9fe var(--tw-gradient-from-position);--tw-gradient-to: rgb(237 233 254 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-emerald-100{--tw-gradient-from: #d1fae5 var(--tw-gradient-from-position);--tw-gradient-to: rgb(209 250 229 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-\[\#c4b5fd\]{--tw-gradient-to: rgb(196 181 253 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #c4b5fd var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-emerald-50{--tw-gradient-to: rgb(236 253 245 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #ecfdf5 var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-\[\#a78bfa\]{--tw-gradient-to: #a78bfa var(--tw-gradient-to-position)}.to-teal-100{--tw-gradient-to: #ccfbf1 var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.p-3{padding:.75rem}.p-4{padding:1rem}.p-8{padding:2rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.pb-1{padding-bottom:.25rem}.pl-6{padding-left:1.5rem}.pl-7{padding-left:1.75rem}.pl-8{padding-left:2rem}.pr-2{padding-right:.5rem}.pr-4{padding-right:1rem}.pt-2\.5{padding-top:.625rem}.pt-3{padding-top:.75rem}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}.text-5xl{font-size:3rem;line-height:1}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13\.5px\]{font-size:13.5px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[19px\]{font-size:19px}.text-\[20px\]{font-size:20px}.text-lg{font-size:1.125rem;line-height:1.75rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-\[0\.95\]{line-height:.95}.leading-none{line-height:1}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-\[0\.01em\]{letter-spacing:.01em}.tracking-\[0\.18em\]{letter-spacing:.18em}.tracking-\[0\.22em\]{letter-spacing:.22em}.tracking-\[0\.28em\]{letter-spacing:.28em}.tracking-tight{letter-spacing:-.025em}.text-\[\#0a1626\]{--tw-text-opacity: 1;color:rgb(10 22 38 / var(--tw-text-opacity, 1))}.text-\[\#a78bfa\]{--tw-text-opacity: 1;color:rgb(167 139 250 / var(--tw-text-opacity, 1))}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-amber-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-brand-500{--tw-text-opacity: 1;color:rgb(139 92 246 / var(--tw-text-opacity, 1))}.text-brand-600{--tw-text-opacity: 1;color:rgb(124 58 237 / var(--tw-text-opacity, 1))}.text-brand-700{--tw-text-opacity: 1;color:rgb(109 40 217 / var(--tw-text-opacity, 1))}.text-emerald-800{--tw-text-opacity: 1;color:rgb(6 95 70 / var(--tw-text-opacity, 1))}.text-ink{--tw-text-opacity: 1;color:rgb(15 20 25 / var(--tw-text-opacity, 1))}.text-ink\/70{color:#0f1419b3}.text-ink\/80{color:#0f1419cc}.text-ink\/85{color:#0f1419d9}.text-muted{--tw-text-opacity: 1;color:rgb(83 100 113 / var(--tw-text-opacity, 1))}.text-orange-500{--tw-text-opacity: 1;color:rgb(249 115 22 / var(--tw-text-opacity, 1))}.text-pink-600{--tw-text-opacity: 1;color:rgb(219 39 119 / var(--tw-text-opacity, 1))}.text-rose-300{--tw-text-opacity: 1;color:rgb(253 164 175 / var(--tw-text-opacity, 1))}.text-rose-500{--tw-text-opacity: 1;color:rgb(244 63 94 / var(--tw-text-opacity, 1))}.text-rose-600{--tw-text-opacity: 1;color:rgb(225 29 72 / var(--tw-text-opacity, 1))}.text-rose-700{--tw-text-opacity: 1;color:rgb(190 18 60 / var(--tw-text-opacity, 1))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.text-teal-600{--tw-text-opacity: 1;color:rgb(13 148 136 / var(--tw-text-opacity, 1))}.text-transparent{color:transparent}.text-violet-600{--tw-text-opacity: 1;color:rgb(124 58 237 / var(--tw-text-opacity, 1))}.text-violet-700{--tw-text-opacity: 1;color:rgb(109 40 217 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\/35{color:#ffffff59}.text-white\/55{color:#ffffff8c}.text-white\/60{color:#fff9}.text-white\/65{color:#ffffffa6}.text-white\/80{color:#fffc}.text-white\/85{color:#ffffffd9}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_14px_rgba\(124\,58\,237\,0\.4\)\]{--tw-shadow: 0 0 14px rgba(124,58,237,.4);--tw-shadow-colored: 0 0 14px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-soft{--tw-shadow: 0 1px 2px rgba(16,24,40,.04), 0 4px 16px rgba(16,24,40,.06);--tw-shadow-colored: 0 1px 2px var(--tw-shadow-color), 0 4px 16px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.backdrop-blur{--tw-backdrop-blur: blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}:root{color-scheme:light}html,body,#root{height:100%}body{margin:0;background:#fff;color:#0f1419;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}body.isx-hidden .isx-wrap,body.isx-hidden .isx-badge{display:none!important}body.isx-hidden mark.isx-highlight{background:transparent!important;border-bottom:none!important}.placeholder\:text-muted::-moz-placeholder{--tw-text-opacity: 1;color:rgb(83 100 113 / var(--tw-text-opacity, 1))}.placeholder\:text-muted::placeholder{--tw-text-opacity: 1;color:rgb(83 100 113 / var(--tw-text-opacity, 1))}.placeholder\:text-muted\/70::-moz-placeholder{color:#536471b3}.placeholder\:text-muted\/70::placeholder{color:#536471b3}.placeholder\:text-white\/35::-moz-placeholder{color:#ffffff59}.placeholder\:text-white\/35::placeholder{color:#ffffff59}.focus-within\:bg-white:focus-within{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.focus-within\:ring-1:focus-within{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-within\:ring-brand-300:focus-within{--tw-ring-opacity: 1;--tw-ring-color: rgb(196 181 253 / var(--tw-ring-opacity, 1))}.hover\:bg-brand-50:hover{--tw-bg-opacity: 1;background-color:rgb(245 243 255 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-100\/70:hover{background-color:#f3f4f6b3}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-50:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-50\/40:hover{background-color:#f9fafb66}.hover\:bg-violet-50:hover{--tw-bg-opacity: 1;background-color:rgb(245 243 255 / var(--tw-bg-opacity, 1))}.hover\:bg-violet-700:hover{--tw-bg-opacity: 1;background-color:rgb(109 40 217 / var(--tw-bg-opacity, 1))}.hover\:bg-white\/\[0\.09\]:hover{background-color:#ffffff17}.hover\:text-brand-600:hover{--tw-text-opacity: 1;color:rgb(124 58 237 / var(--tw-text-opacity, 1))}.hover\:text-emerald-500:hover{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.hover\:text-rose-500:hover{--tw-text-opacity: 1;color:rgb(244 63 94 / var(--tw-text-opacity, 1))}.hover\:text-sky-500:hover{--tw-text-opacity: 1;color:rgb(14 165 233 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}.focus\:border-\[\#a78bfa\]\/50:focus{border-color:#a78bfa80}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-\[\#a78bfa\]\/30:focus{--tw-ring-color: rgb(167 139 250 / .3)}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.group:hover .group-hover\:scale-105{--tw-scale-x: 1.05;--tw-scale-y: 1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@media (min-width: 640px){.sm\:flex{display:flex}.sm\:text-7xl{font-size:4.5rem;line-height:1}.sm\:text-\[17px\]{font-size:17px}}@media (min-width: 1024px){.lg\:block{display:block}.lg\:text-8xl{font-size:6rem;line-height:1}}
index.html ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" type="image/x-icon" href="/favicon.ico" />
6
+ <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32.png" />
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
8
+ <meta
9
+ name="description"
10
+ content="InfoShield — a media-literacy layer that adds educational context to social posts. It never hides or removes content."
11
+ />
12
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
13
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
14
+ <link
15
+ href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700;900&display=swap"
16
+ rel="stylesheet"
17
+ />
18
+ <title>InfoShield</title>
19
+ <script type="module" crossorigin src="/index-BUMAbC0x.js"></script>
20
+ <link rel="stylesheet" crossorigin href="/index-Cm--0EGF.css">
21
+ </head>
22
+ <body>
23
+ <div id="root"></div>
24
+ </body>
25
+ </html>
infoshield-logo.png ADDED

Git LFS Details

  • SHA256: a39018c73466536e095df326b9a16131025762f3c71cc7791b451caeaf922cbf
  • Pointer size: 131 Bytes
  • Size of remote file: 547 kB
posts.json ADDED
@@ -0,0 +1 @@
 
 
1
+ [{"id": "p1", "user": {"name": "Maya Chen", "handle": "maya_codes", "initial": "M", "color": "#2563EB", "verified": false}, "time": "12m", "text": "spent three hours debugging today only to realize i'd been editing the wrong file the entire time. anyway. how is everyone's monday going", "media": null, "engagement": {"replies": 156, "reposts": 89, "likes": 1243}}, {"id": "p8", "user": {"name": "Truth Hour", "handle": "TheRealTruthHour", "initial": "T", "color": "#DC2626", "verified": false}, "time": "26m", "text": "They don't want you to know this, but the new digital ID rolling out next month means they can switch off your bank account with a single click. This is NOT a conspiracy. Screenshot this before it gets taken down. \u23f0", "media": null, "engagement": {"replies": 3400, "reposts": 8900, "likes": 12000}}, {"id": "v1", "user": {"name": "Truth Unfiltered", "handle": "truth_unfiltered", "initial": "T", "color": "#B91C1C", "verified": false}, "time": "22m", "text": "\ud83d\udea8 They're not showing you THIS on the news. Watch before they take it down \u2014 this is what they don't want you to see. Share it NOW while you still can, before it's too late.", "media": {"type": "video", "src": "/video.mp4"}, "engagement": {"replies": 2100, "reposts": 7400, "likes": 9800}}, {"id": "p16", "user": {"name": "ZephyrX", "handle": "ZephyrX_", "initial": "Z", "color": "#1F2937", "verified": false}, "time": "6h", "text": "Every one of them is the same \u2014 vermin who swarm in and bleed this place dry. They don't belong here and they should be driven out before there's nothing left.", "media": null, "engagement": {"replies": 890, "reposts": 1100, "likes": 2300}}, {"id": "p3", "user": {"name": "Priya K.", "handle": "aerialnomad", "initial": "P", "color": "#0D9488", "verified": true}, "time": "1h", "text": "Sunrise over the valley in Patagonia right now. Some places just don't feel real until you're standing in them. \ud83c\udfd4\ufe0f", "media": {"type": "gradient"}, "engagement": {"replies": 230, "reposts": 1200, "likes": 8900}}, {"id": "p10", "user": {"name": "Brad // crypto", "handle": "cryptobrad", "initial": "B", "color": "#F59E0B", "verified": false}, "time": "1h", "text": "\ud83d\udea8 ONLY 100 spots left. This is your LAST chance to get in before the price 10x's. The people who hesitate will be kicking themselves in 6 months. DM me NOW or stay broke. \ud83d\udc49 https://t.co/x9f2aQ", "media": null, "engagement": {"replies": 1200, "reposts": 450, "likes": 890}}, {"id": "p15", "user": {"name": "Mike", "handle": "patriot_mike49", "initial": "M", "color": "#991B1B", "verified": false}, "time": "5h", "text": "These people pour into our town, don't bother learning how we live, and expect us to bend over backwards for them. They breed faster than we can keep up and soon there'll be nothing left of who we are. Enough.", "media": null, "engagement": {"replies": 1200, "reposts": 3400, "likes": 5600}}, {"id": "p2", "user": {"name": "Dave R.", "handle": "grillmaster_dave", "initial": "D", "color": "#D97706", "verified": false}, "time": "34m", "text": "Unpopular opinion: pineapple absolutely belongs on pizza and I'm tired of pretending it doesn't \ud83c\udf4d", "media": null, "engagement": {"replies": 890, "reposts": 320, "likes": 4500}}, {"id": "p11", "user": {"name": "Real Talk Radio", "handle": "realtalkradio", "initial": "R", "color": "#B91C1C", "verified": false}, "time": "2h", "text": "Notice how every time regular people start asking real questions, there's suddenly a brand new crisis to distract everyone? That's not a coincidence. They've been running this exact playbook for decades.", "media": null, "engagement": {"replies": 780, "reposts": 5600, "likes": 9800}}, {"id": "ru1", "user": {"name": "\u0414\u043c\u0438\u0442\u0440\u0438\u0439", "handle": "dmitry_news", "initial": "\u0414", "color": "#1D4ED8", "verified": false}, "time": "40m", "text": "\u041e\u043d\u0438 \u043d\u0435 \u0445\u043e\u0442\u044f\u0442, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u044d\u0442\u043e \u0437\u043d\u0430\u043b\u0438: \u043d\u043e\u0432\u044b\u0439 \u0437\u0430\u043a\u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0438\u043c \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0430\u0448 \u0441\u0447\u0451\u0442 \u043e\u0434\u043d\u0438\u043c \u0449\u0435\u043b\u0447\u043a\u043e\u043c. \u041d\u0435 \u043c\u043e\u043b\u0447\u0438\u0442\u0435. \u0421\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0440\u0435\u043f\u043e\u0441\u0442, \u043f\u043e\u043a\u0430 \u044d\u0442\u043e \u043d\u0435 \u0443\u0434\u0430\u043b\u0438\u043b\u0438.", "media": null, "engagement": {"replies": 980, "reposts": 5200, "likes": 4100}}, {"id": "p17", "user": {"name": "Borderwatch", "handle": "borderwatch_now", "initial": "B", "color": "#7F1D1D", "verified": false}, "time": "7h", "text": "They're animals, plain and simple, and you can't civilize an animal. People like that should be removed from our streets before they ruin everything.", "media": null, "engagement": {"replies": 1500, "reposts": 2100, "likes": 3400}}, {"id": "p5", "user": {"name": "Sam \u00b7 RN", "handle": "nightshift_sam", "initial": "S", "color": "#7C3AED", "verified": false}, "time": "3h", "text": "12 hour shift done. feet wrecked, heart full. a patient's family brought the whole unit donuts today and i nearly cried in the break room. it's the small stuff.", "media": null, "engagement": {"replies": 145, "reposts": 210, "likes": 3400}}, {"id": "p12", "user": {"name": "Concerned Parent", "handle": "concerned_parent_99", "initial": "C", "color": "#92400E", "verified": false}, "time": "3h", "text": "If you don't share this, don't call yourself a real parent. They are putting things into the curriculum that will destroy your child's mind by next year. Act before it's too late.", "media": null, "engagement": {"replies": 2300, "reposts": 6700, "likes": 4500}}, {"id": "p18", "user": {"name": "Old Town Voice", "handle": "oldtownvoice", "initial": "O", "color": "#78350F", "verified": false}, "time": "9h", "text": "They've infested every neighborhood they've touched and turned it into a dump. Pack them up and send them back where they came from before there's nothing left of this place.", "media": null, "engagement": {"replies": 1900, "reposts": 2800, "likes": 4500}}, {"id": "p7", "user": {"name": "Anna Whitfield", "handle": "historybuff_anna", "initial": "A", "color": "#9333EA", "verified": true}, "time": "5h", "text": "people ask why i love history and honestly it's because nothing is ever as simple as the textbook makes it sound. every 'obvious' decision was made by a real person who couldn't see the ending, who was scared and tired and working with bad information. we read the past like the outcome was inevitable, but the people living it had no idea which way it would go. that's the part that stays with me, not the dates or the battles but the uncertainty. it makes me a lot gentler about the present, knowing future generations will flatten us into a tidy paragraph too.", "media": null, "engagement": {"replies": 210, "reposts": 980, "likes": 5600}}, {"id": "p9", "user": {"name": "Open Your Eyes", "handle": "wakeup_sheeple", "initial": "O", "color": "#7C2D12", "verified": false}, "time": "1h", "text": "Wake up. Everything you were taught was designed to keep you obedient and quiet. The people at the top are laughing at how easy it was. Stop trusting them and start trusting your gut.", "media": null, "engagement": {"replies": 890, "reposts": 4200, "likes": 6700}}, {"id": "p13", "user": {"name": "doomscroller", "handle": "doomscroller", "initial": "d", "color": "#475569", "verified": false}, "time": "3h", "text": "oh good, another 'once in a lifetime' crisis this week. truly we are so blessed to live through the single most important moment in human history every monday \ud83d\ude44", "media": null, "engagement": {"replies": 120, "reposts": 670, "likes": 3200}}, {"id": "p4", "user": {"name": "Lena Ortiz", "handle": "lena_writes", "initial": "L", "color": "#DB2777", "verified": false}, "time": "2h", "text": "finished the first draft of my novel at 2am and immediately started doubting every single word of it. writing is just professionally arguing with yourself.", "media": null, "engagement": {"replies": 98, "reposts": 340, "likes": 2100}}, {"id": "p14", "user": {"name": "just asking", "handle": "quiet_observer", "initial": "j", "color": "#64748B", "verified": false}, "time": "4h", "text": "i'm not saying anything is definitely wrong with the new policy... but doesn't it feel a little convenient? a lot of people are quietly starting to wonder, and maybe that's worth paying attention to.", "media": null, "engagement": {"replies": 200, "reposts": 340, "likes": 1200}}, {"id": "p6", "user": {"name": "Tom B.", "handle": "tom_b", "initial": "T", "color": "#0F172A", "verified": false}, "time": "4h", "text": "is it coffee o'clock yet", "media": null, "engagement": {"replies": 34, "reposts": 12, "likes": 540}}, {"id": "p19", "user": {"name": "Jane", "handle": "realtalk_jane", "initial": "J", "color": "#a16207", "verified": false}, "time": "11h", "text": "funny how a certain kind of people always seem to end up at the center of every single problem in this city. at some point you stop calling it a coincidence.", "media": null, "engagement": {"replies": 600, "reposts": 900, "likes": 1800}}]
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ gradio==4.44.1
2
+ huggingface_hub==0.25.2
3
+ fastapi==0.115.0
4
+ uvicorn[standard]==0.30.6
video.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:33f3b1a23301f4340f1bd896510563403650931899e6def3bc165af413d07075
3
+ size 3607350