File size: 31,760 Bytes
8af1084
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
# ReelShield β€” Wireframes & Design Documentation

> **High-fidelity mockups:** every numbered screen below has a matching
> standalone HTML render under [`mockups/`](mockups/) β€” open any of
> those files in a browser for a production-quality view of the same
> screen described here. The ASCII below conveys structural intent;
> the HTML conveys finished fidelity.

## Screen 1: Home / Search

> **Mockup:** [`mockups/01-home.html`](mockups/01-home.html)

```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  [Skip to content]                                 β”‚
β”‚                                                    β”‚
β”‚                  🎬 ReelShield                     β”‚
β”‚         AI-powered analysis β€” Gemini + TMDB    [βš™] β”‚
β”‚                                                    β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚ Search for a movie                           β”‚  β”‚
β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚  β”‚
β”‚  β”‚ β”‚  e.g. Interstellar, The Dark Knight...   β”‚ β”‚  β”‚
β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚  β”‚
β”‚  β”‚  3 results found                             β”‚  β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”                 β”‚  β”‚
β”‚  β”‚  β”‚posterβ”‚ β”‚posterβ”‚ β”‚posterβ”‚                 β”‚  β”‚
β”‚  β”‚  β”‚      β”‚ β”‚      β”‚ β”‚      β”‚                 β”‚  β”‚
β”‚  β”‚  β”‚Title β”‚ β”‚Title β”‚ β”‚Title β”‚                 β”‚  β”‚
β”‚  β”‚  β”‚ 1997 β”‚ β”‚ 2023 β”‚ β”‚ 2018 β”‚                 β”‚  β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”˜                 β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                                                    β”‚
β”‚        β—‹ Generating content warnings...            β”‚
β”‚                                                    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

**Design decisions:**
- Search is full-width and immediately visible β€” primary action
- Poster grid for results: visual recognition faster than text lists
- Spinner with status messages prevents perceived abandonment during AI call
- βš™ button top-right: discoverable but not distracting for primary users

---

## Screen 2: Movie Loaded (Desktop β€” 2-column)

> **Mockup:** [`mockups/02-movie-loaded.html`](mockups/02-movie-loaded.html)

```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ ⚠️ PHOTOSENSITIVE EPILEPSY WARNING                           β”‚
β”‚ This film contains flashing lights... [specific notes]       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ 🚫 Content Warnings      β”‚  β”‚ πŸ’¬ Ask Questions               β”‚
β”‚                          β”‚  β”‚                                β”‚
β”‚ Titanic (1997)           β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚ [PG-13] [⚠️ Predicts     β”‚  β”‚ β”‚ Ask me anything about    β”‚   β”‚
β”‚  R/NC-17 Β· 87%]          β”‚  β”‚ β”‚ this film.               β”‚   β”‚
β”‚ [194 min] [Drama]        β”‚  β”‚                            β”‚   β”‚
β”‚                          β”‚  β”‚    [You: Who is Rose?]     β”‚   β”‚
β”‚ Our ML classifier        β”‚  β”‚                            β”‚   β”‚
β”‚ estimates this film's    β”‚  β”‚  [AI: Rose is a young...]  β”‚   β”‚
β”‚ profile better matches   β”‚  β”‚                            β”‚   β”‚
β”‚ R/NC-17 than its PG-13   β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚ rating.                  β”‚  β”‚                              β”‚   β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” [Send] β”‚   β”‚
β”‚ β”‚ Overview blurb text  β”‚ β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β”‚   β”‚
β”‚ β”‚ from TMDB...         β”‚ β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                          β”‚
β”‚ Spoiler mode: Off  [β—‹]   β”‚
β”‚                          β”‚
β”‚ ⚠️ Flashing Lights  Mild β”‚
β”‚    βœ“ Confirmed           β”‚
β”‚    Brief flashing...     β”‚
β”‚                          β”‚
β”‚ Violence & Gore  Moderateβ”‚
β”‚    βœ“ Confirmed           β”‚
β”‚    Drowning, injuries... β”‚
β”‚                          β”‚
β”‚ Sexual Content  Moderate β”‚
β”‚    βœ“ Confirmed           β”‚
β”‚                          β”‚
β”‚ Language  Mild           β”‚
β”‚    βœ“ Confirmed           β”‚
β”‚                          β”‚
β”‚ Self-Harm  None          β”‚
β”‚    βœ“ Confirmed absent    β”‚
β”‚                          β”‚
β”‚ 🎬 Content twins         β”‚
β”‚   (Adult drama cluster)  β”‚
β”‚  β”Œβ”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”    β”‚
β”‚  β”‚ B  β”‚ β”‚ C  β”‚ β”‚ D  β”‚    β”‚
β”‚  β”‚Ξ”.42β”‚ β”‚Ξ”.51β”‚ β”‚Ξ”.63β”‚    β”‚
β”‚  β””β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”˜    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

**Design decisions:**
- Epilepsy banner always renders above everything else β€” critical safety info
- 2-column layout: warnings left, chat right β€” parallel use without scrolling
- Warnings sorted by severity descending (most severe first)
- Color-coded left border: red=severe, orange=moderate, green=mild, grey=none
- βœ“ Confirmed in green builds trust; ~% in grey signals uncertainty
- Spoiler toggle above warnings: visible but default off
- MPA-disagreement badge sits next to the TMDB cert badge in amber when the LR classifier disagrees β‰₯70% confident; rendered in the same row as the cert so the comparison is the headline, not a footnote
- Content twins (K-Means neighbors) render below warnings as a small grid; Ξ” = Euclidean distance in 9-dim severity space, so smaller Ξ” = closer content-profile match

---

## Screen 3: Mobile (Single Column)

```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ 🎬 ReelShield           β”‚
β”‚                      [βš™]β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ ⚠️ EPILEPSY WARNING      β”‚
β”‚ Brief flashing lights   β”‚
β”‚ during sinking sequence β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Search for a movie      β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ e.g. Titanic...     β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 🚫 Content Warnings     β”‚
β”‚ Titanic (1997)          β”‚
β”‚ [PG-13][194 min][Drama] β”‚
β”‚ Overview blurb...       β”‚
β”‚                         β”‚
β”‚ ⚠️ Flashing Lights Mild  β”‚
β”‚   βœ“ Confirmed           β”‚
β”‚                         β”‚
β”‚ Violence & Gore Moderateβ”‚
β”‚   βœ“ Confirmed           β”‚
β”‚ ...                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ πŸ’¬ Ask Questions        β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Chat history...     β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”[Send] β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜       β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

**Responsive behavior:** At <768px, columns stack. Epilepsy banner stays pinned to top. Chat moves below warnings.

---

## Screen 4: Prompt Editor Modal

```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  ✏️ Edit AI Prompt                                    β”‚
β”‚                                                      β”‚
β”‚  Customize how Gemini generates content warnings.    β”‚
β”‚  Required placeholders: {title} {year} {rating}      β”‚
β”‚  {genres} {overview} {keywords}                      β”‚
β”‚                                                      β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚ You are a film content expert...               β”‚  β”‚
β”‚  β”‚                                                β”‚  β”‚
β”‚  β”‚ Movie: "{title}" ({year})                      β”‚  β”‚
β”‚  β”‚ MPA Rating: {rating}                           β”‚  β”‚
β”‚  β”‚ ...                                            β”‚  β”‚
β”‚  β”‚ Return ONLY valid JSON...                      β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                                                      β”‚
β”‚  [Save Prompt]  [Reset to Default]  [Cancel]         β”‚
β”‚                                                      β”‚
β”‚  βœ“ Prompt updated. New searches will use this.       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

---

## Screen 5: Find Movies (Discover)

> **Mockup:** [`mockups/03-discover.html`](mockups/03-discover.html)

```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Find Movies                                                          β”‚
β”‚  Choose your mood and the warnings you want to avoid β€” we'll find     β”‚
β”‚  the best matches from our movie cache.                               β”‚
β”‚                                                                       β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚  How are you feeling? (optional) β”‚  β”‚  Warnings to avoid     β”‚   β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€  β”‚  (pick up to 3)        β”‚   β”‚
β”‚  β”‚  [ Light and easy            ]   β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚  β”‚  [ Some emotion, nothing heavy]  β”‚  β”‚  ☐ Violence & Gore     β”‚   β”‚
β”‚  β”‚  [ Can handle intense        ]   β”‚  β”‚  ☐ Self-Harm & Suicide β”‚   β”‚
β”‚  β”‚  [ Feel something deep       ]   β”‚  β”‚  ☐ Miscarriage         β”‚   β”‚
β”‚  β”‚  [ Comfort and familiarity   ]   β”‚  β”‚  ☐ Sexual Content      β”‚   β”‚
β”‚  β”‚  (one selected = highlighted;    β”‚  β”‚  ☐ Animal Abuse        β”‚   β”‚
β”‚  β”‚   click again to deselect)       β”‚  β”‚  ☐ Substance Use       β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚  ☐ Language            β”‚   β”‚
β”‚                                        β”‚  ☐ Horror / Intensity  β”‚   β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚  ☐ Flashing Lights     β”‚   β”‚
β”‚  β”‚ πŸ’­ You're feeling X β€” we'll      β”‚  β”‚  β“˜ "Pick up to 3"      β”‚   β”‚
β”‚  β”‚    look for Y                    β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚  β”‚ Tones that fit:  [whimsical]…    β”‚                               β”‚
β”‚  β”‚ Tones to skip:   [grim]…         β”‚                               β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                               β”‚
β”‚                                                                       β”‚
β”‚  [ Find Movies ]                                                      β”‚
β”‚                                                                       β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”                       β”‚
β”‚  β”‚ Safe β”‚ β”‚ Safe β”‚ β”‚ Safe β”‚ β”‚ Safe β”‚ β”‚ Safe β”‚   ← color-coded badge β”‚
β”‚  β”‚ 100  β”‚ β”‚  92  β”‚ β”‚  88  β”‚ β”‚  80  β”‚ β”‚  72  β”‚   per match quality   β”‚
β”‚  β”‚posterβ”‚ β”‚posterβ”‚ β”‚posterβ”‚ β”‚posterβ”‚ β”‚posterβ”‚                       β”‚
β”‚  β”‚Title β”‚ β”‚Title β”‚ β”‚Title β”‚ β”‚Title β”‚ β”‚Title β”‚                       β”‚
β”‚  β”‚ Mood β”‚ β”‚ Mood β”‚ β”‚ Mood β”‚ β”‚ Mood β”‚ β”‚ Mood β”‚   ← mood fit %        β”‚
β”‚  β”‚  …   β”‚ β”‚  …   β”‚ β”‚  …   β”‚ β”‚  …   β”‚ β”‚  …   β”‚                       β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”˜                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

**Design decisions:**
- Two-column layout puts emotional state and content rules side-by-side β€” neither is more important
- Mood is optional; warnings-to-avoid is the load-bearing filter
- Cap of 3 avoid categories is a soft constraint announced via `aria-live`, not a disabled checkbox β€” keeps the UI accessible
- Live mood-profile box updates as the user picks moods, so they understand what's about to be searched
- Results are scored 0–100 (safer = higher) with mood-fit shown separately

---

## Screen 6: Group Watch Finder

> **Mockup:** [`mockups/04-group-watch.html`](mockups/04-group-watch.html)

```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  πŸ‘₯ Group Watch Finder                                                 β”‚
β”‚  Add everyone in your group, merge their sensitivities, and find       β”‚
β”‚  movies safe for all.                                                  β”‚
β”‚                                                                        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  Group Members                  β”‚  β”‚  Group Profile              β”‚ β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚
β”‚  β”‚  β€’ Sarah  βœ•                     β”‚  β”‚  This group needs movies    β”‚ β”‚
β”‚  β”‚    Violence, Animal abuse       β”‚  β”‚  free of violence, animal   β”‚ β”‚
β”‚  β”‚  β€’ Leo  βœ•                       β”‚  β”‚  abuse, and miscarriage.    β”‚ β”‚
β”‚  β”‚    Miscarriage, Self-harm       β”‚  β”‚                             β”‚ β”‚
β”‚  β”‚                                 β”‚  β”‚  All sensitivities:         β”‚ β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚  β”‚  [Violence] [Animal abuse]  β”‚ β”‚
β”‚  β”‚  β”‚ Member name…              β”‚  β”‚  β”‚  [Miscarriage] [Self-harm]  β”‚ β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚  β”‚                             β”‚ β”‚
β”‚  β”‚  Their sensitivities:           β”‚  β”‚  Avoid genres:              β”‚ β”‚
β”‚  β”‚  ☐ Violence  ☐ Self-Harm        β”‚  β”‚  [Horror] [War]             β”‚ β”‚
β”‚  β”‚  ☐ Animal    ☐ Sexual           β”‚  β”‚                             β”‚ β”‚
β”‚  β”‚  ☐ Substance ☐ Language         β”‚  β”‚  Suggested genres:          β”‚ β”‚
β”‚  β”‚  ☐ Horror    ☐ Flashing         β”‚  β”‚  [Family] [Comedy] [Animation] β”‚
β”‚  β”‚  ☐ Miscarriage                  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚  β”‚  [+ Add Member]                 β”‚                                  β”‚
β”‚  β”‚                                 β”‚  Find Movies                     β”‚
β”‚  β”‚  [βš™ Merge Profiles]             β”‚  Mood: [Any mood       β–Ό]        β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  Platform (optional): [____]     β”‚
β”‚                                                                        β”‚
β”‚                                       [ Find Movies ]                  β”‚
β”‚                                                                        β”‚
β”‚  3 movie(s) safe for everyone in the group:                            β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                   β”‚
β”‚  β”‚  100/100     β”‚ β”‚   95/100     β”‚ β”‚   88/100     β”‚                   β”‚
β”‚  β”‚  poster      β”‚ β”‚   poster     β”‚ β”‚   poster     β”‚                   β”‚
β”‚  β”‚  Title       β”‚ β”‚   Title      β”‚ β”‚   Title      β”‚                   β”‚
β”‚  β”‚  Why safe…   β”‚ β”‚   Why safe…  β”‚ β”‚   Why safe…  β”‚                   β”‚
β”‚  β”‚  One concern β”‚ β”‚  One concern β”‚ β”‚  One concern β”‚                   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

**Design decisions:**
- Member-builder on the left, profile-and-results on the right β€” read left-to-right
- Merge button stays disabled until β‰₯1 member is added (prevents empty-state confusion)
- Privacy: rejection messages refer to "the group", never name the individual member who triggered them
- Each result card includes both `why_safe` and `one_concern` so the group can debate trade-offs

---

## Screen 7: My Watchlist

> **Mockup:** [`mockups/05-watchlist.html`](mockups/05-watchlist.html)

```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  πŸ“‹ My Watchlist                                                       β”‚
β”‚  Movies are ranked safest-to-most-triggering based on your             β”‚
β”‚  sensitivity profile.                                                  β”‚
β”‚                                                                        β”‚
β”‚  [ ⭐ Rank by My Sensitivities ]                                       β”‚
β”‚                                                                        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                  β”‚
β”‚  β”‚ β‘  βœ•      β”‚ β”‚ β‘‘ βœ•      β”‚ β”‚ β‘’ βœ•      β”‚ β”‚ β‘£ βœ•      β”‚                  β”‚
β”‚  β”‚  poster  β”‚ β”‚  poster  β”‚ β”‚  poster  β”‚ β”‚  poster  β”‚                  β”‚
β”‚  β”‚  Title   β”‚ β”‚  Title   β”‚ β”‚  Title   β”‚ β”‚  Title   β”‚                  β”‚
β”‚  β”‚  1997    β”‚ β”‚  2019    β”‚ β”‚  2023    β”‚ β”‚  2017    β”‚                  β”‚
β”‚  β”‚ 🟒 Safe  β”‚ β”‚πŸŸ‘ Mild   β”‚ β”‚πŸŸ‘ Mild   β”‚ β”‚πŸ”΄ Strong β”‚                  β”‚
β”‚  β”‚ No trig… β”‚ β”‚Brief…    β”‚ β”‚Some…     β”‚ β”‚Heavy…    β”‚                  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                  β”‚
β”‚                                                                        β”‚
β”‚  (Rank β‘  in top-left, βœ• in top-right to remove)                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

**Design decisions:**
- Rank badge (top-left) is the headline β€” at a glance the user sees what's safest tonight
- Color-coded watchlist badge (🟒 / 🟑 / πŸ”΄) mirrors the severity scale used on the warning cards
- Remove (βœ•) is one click but lives in the top-right corner so it isn't fat-fingered while scanning
- Re-ranking is explicit, not automatic β€” running Gemini on the whole list is costly, so the user opts in

---

## Screen 8: Reviews & Ratings (inline on movie page)

```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  ⭐ Reviews & Ratings                                                 β”‚
β”‚                                                                       β”‚
β”‚  From critics & aggregators:                                          β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                          β”‚
β”‚  β”‚ IMDb   β”‚  β”‚ Rotten      β”‚  β”‚ Metacritic β”‚                          β”‚
β”‚  β”‚ 7.8/10 β”‚  β”‚ Tomatoes 89%β”‚  β”‚ 74/100     β”‚                          β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                          β”‚
β”‚  ─────────────────────────────────────────────────────────────────    β”‚
β”‚                                                                       β”‚
β”‚  Critic Reviews                                                       β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚ A. Critic β€” "An absorbing, careful film…"                       β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚  ─────────────────────────────────────────────────────────────────    β”‚
β”‚                                                                       β”‚
β”‚  User Reviews                                                         β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚ Your rating                                                     β”‚   β”‚
β”‚  β”‚ β˜… β˜… β˜… β˜… β˜†                                                       β”‚   β”‚
β”‚  β”‚ Your review                                                     β”‚   β”‚
β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚   β”‚
β”‚  β”‚ β”‚ Share your thoughts...                                      β”‚ β”‚   β”‚
β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚   β”‚
β”‚  β”‚ [ Post Review ]                                                 β”‚   β”‚
β”‚  β”‚ (or: "Log in to post a review." if not authenticated)           β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                       β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚ @maria Β· β˜…β˜…β˜…β˜…β˜… Β· 2 days ago                                    β”‚   β”‚
β”‚  β”‚ Watched with my kids and felt prepared for every scene…         β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚ @jordan Β· β˜…β˜…β˜…β˜†β˜† Β· 1 week ago                                   β”‚   β”‚
β”‚  β”‚ Flashing-lights warning was spot-on, missed a couple of cuts…   β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

**Design decisions:**
- Three trust layers stacked: external aggregators β†’ critic reviews β†’ user reviews β€” heaviest signal at top
- Star widget is keyboard-accessible (each star is a button with `aria-label`)
- Login gate is in-place: an inline note replaces the form, so the user isn't surprised by a redirect
- User reviews show username + star rating + relative timestamp β€” matches conventions users already know

---

## Screen 9: Sensitivity Profile Editor (Modal)

```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  πŸ›‘οΈ My Sensitivity Profile                            β”‚
β”‚                                                       β”‚
β”‚  Select the content categories you want to be warned β”‚
β”‚  about. This personalizes your watchlist ranking     β”‚
β”‚  and badges.                                          β”‚
β”‚                                                       β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚  β”‚ β˜‘ Violence & Gore   β”‚  β”‚ ☐ Substance Use     β”‚    β”‚
β”‚  β”‚ β˜‘ Self-Harm/Suicide β”‚  β”‚ ☐ Language          β”‚    β”‚
β”‚  β”‚ ☐ Miscarriage       β”‚  β”‚ β˜‘ Horror / Intensityβ”‚    β”‚
β”‚  β”‚ ☐ Sexual Content    β”‚  β”‚ β˜‘ Flashing Lights   β”‚    β”‚
β”‚  β”‚ ☐ Animal Abuse      β”‚  β”‚                     β”‚    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β”‚                                                       β”‚
β”‚  [ Save Profile ]   [ Cancel ]                        β”‚
β”‚                                                       β”‚
β”‚  βœ“ Profile saved.                                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

**Design decisions:**
- Modal carries `role="dialog"` and `aria-modal="true"` β€” screen readers announce it as an interrupting layer
- Two-column grid keeps all 9 categories on one screen without scrolling on desktop
- "Save" is the primary button (filled), "Cancel" is the ghost button β€” visual weight matches intent
- Saved state announced via `aria-live="polite"` so assistive tech users get confirmation without focus shift

---

## Style Guide

### Colors
| Token | Hex | Usage |
|-------|-----|-------|
| `--bg` | `#0f1117` | Page background |
| `--surf` | `#1a1d27` | Card/panel surface |
| `--surf2` | `#242736` | Input fields, nested surfaces |
| `--bdr` | `#2e3347` | Borders |
| `--text` | `#e8eaf0` | Primary text |
| `--muted` | `#8891a8` | Secondary text, labels |
| `--accent` | `#6c8eff` | Primary interactive elements |
| `--mild` | `#4caf50` | Mild severity, confirmed absent |
| `--moderate` | `#ff9800` | Moderate severity |
| `--severe` | `#f44336` | Severe severity |
| `--epi-bdr` | `#ff2222` | Epilepsy banner border |

### Typography
- Font: `'Segoe UI', system-ui, sans-serif`
- Heading: 800 weight
- Body: 400 weight, 1.6 line-height
- Code/prompt: `'Courier New', monospace`

### Spacing
- Base unit: 8px
- Card padding: 24px
- Gap between cards: 20px
- Border radius: 8-12px

### Accessibility Rationale
- Dark theme chosen: reduces eye strain for photosensitive users (Persona 2)
- 3px focus outlines: clearly visible on dark backgrounds
- `aria-live="polite"` on search results and warnings: non-disruptive announcements
- `role="alert"` on epilepsy banner: immediate announcement, highest priority
- Color contrast targets WCAG AA (4.5:1 normal text, 3:1 UI components)

### Audit evidence

A Lighthouse accessibility audit run against the live container on
2026-05-15 scores **100 / 100** β€” all 26 audits pass, zero element
findings. The full report (raw JSON + HTML + a remediation-history
README documenting the four fixes that took the page from an initial
89/100 to 100/100) is committed under [`accessibility/`](accessibility/)
so the run is reproducible.