Commit c9834ccb45a195e1ab2a2c985ef48993b993a79a

Authored by yibo
1 parent caca3b43

Add a visible nickname edit button

Previously the nickname modal only appeared implicitly on first chat send,
with no way to see or change it afterward. Adds an always-visible "昵称 X ✎"
button next to the chat panel title — same modal, pre-filled with the
current nickname, keeps the existing uid when editing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
library.json
1 1 [
2 2 {
  3 + "id": "0ade3648412f",
  4 + "source": "h3console",
  5 + "prompt": "来一只猫在草地上玩耍",
  6 + "fullPrompt": "来一只猫在草地上玩耍",
  7 + "edited": false,
  8 + "width": 832,
  9 + "height": 480,
  10 + "duration": 5,
  11 + "partition": "text",
  12 + "likes": 0,
  13 + "createdAt": 1788239781137
  14 + },
  15 + {
3 16 "id": "af0d86637410",
4 17 "source": "h3console",
5 18 "prompt": "叫几个小猫咪和绿巨人一起跳舞",
... ... @@ -25,7 +38,7 @@
25 38 "likes": 0,
26 39 "createdAt": 1788192916199,
27 40 "promptEn": "taoist eyes the old house suspiciously",
28   - "lastPlayedAt": 1788238919277
  41 + "lastPlayedAt": 1788242974304
29 42 },
30 43 {
31 44 "id": "cb5baad5d724",
... ... @@ -40,7 +53,7 @@
40 53 "likes": 0,
41 54 "createdAt": 1788192915845,
42 55 "promptEn": "scholar watches the room warily",
43   - "lastPlayedAt": 1788239169402
  56 + "lastPlayedAt": 1788246004885
44 57 },
45 58 {
46 59 "id": "e8cbb73560ef",
... ... @@ -55,7 +68,7 @@
55 68 "likes": 0,
56 69 "createdAt": 1788192915549,
57 70 "promptEn": "taoist steels himself to exorcise something",
58   - "lastPlayedAt": 1788239125383
  71 + "lastPlayedAt": 1788246217066
59 72 },
60 73 {
61 74 "id": "5b6dcb357792",
... ... @@ -69,7 +82,8 @@
69 82 "partition": "ref2va",
70 83 "likes": 0,
71 84 "createdAt": 1788192915268,
72   - "promptEn": "scholar softens up, starts to trust"
  85 + "promptEn": "scholar softens up, starts to trust",
  86 + "lastPlayedAt": 1788249389537
73 87 },
74 88 {
75 89 "id": "0c7565a5c8e8",
... ... @@ -84,7 +98,7 @@
84 98 "likes": 0,
85 99 "createdAt": 1788192914949,
86 100 "promptEn": "taoist acts tough but is nervous",
87   - "lastPlayedAt": 1788239063344
  101 + "lastPlayedAt": 1788247784361
88 102 },
89 103 {
90 104 "id": "167ce1bfa285",
... ... @@ -99,7 +113,7 @@
99 113 "likes": 0,
100 114 "createdAt": 1788192914047,
101 115 "promptEn": "scholar looks scared, wants to flee",
102   - "lastPlayedAt": 1788239189657
  116 + "lastPlayedAt": 1788247259915
103 117 },
104 118 {
105 119 "id": "053bc957b4f8",
... ... @@ -114,7 +128,7 @@
114 128 "likes": 0,
115 129 "createdAt": 1788192913886,
116 130 "promptEn": "taoist panics, freaked out",
117   - "lastPlayedAt": 1788237354074
  131 + "lastPlayedAt": 1788247778362
118 132 },
119 133 {
120 134 "id": "45c1136d1e05",
... ... @@ -129,7 +143,7 @@
129 143 "likes": 0,
130 144 "createdAt": 1788192913551,
131 145 "promptEn": "taoist looking panicked and scared",
132   - "lastPlayedAt": 1788238667095
  146 + "lastPlayedAt": 1788249177441
133 147 },
134 148 {
135 149 "id": "d169d42a67de",
... ... @@ -144,7 +158,7 @@
144 158 "likes": 0,
145 159 "createdAt": 1788192913492,
146 160 "promptEn": "scholar defiant out of desperation",
147   - "lastPlayedAt": 1788237894431
  161 + "lastPlayedAt": 1788248821262
148 162 },
149 163 {
150 164 "id": "2abd2793fae9",
... ... @@ -159,7 +173,7 @@
159 173 "likes": 0,
160 174 "createdAt": 1788192913244,
161 175 "promptEn": "scholar cornered but still defiant",
162   - "lastPlayedAt": 1788239435546
  176 + "lastPlayedAt": 1788248124656
163 177 },
164 178 {
165 179 "id": "bbf7efb467e0",
... ... @@ -174,7 +188,7 @@
174 188 "likes": 0,
175 189 "createdAt": 1788192912912,
176 190 "promptEn": "taoist charmed, hesitating",
177   - "lastPlayedAt": 1788239405537
  191 + "lastPlayedAt": 1788249011362
178 192 },
179 193 {
180 194 "id": "f8da9934c823",
... ... @@ -189,7 +203,7 @@
189 203 "likes": 0,
190 204 "createdAt": 1788192912819,
191 205 "promptEn": "scholar dazed, charmed",
192   - "lastPlayedAt": 1788239529590
  206 + "lastPlayedAt": 1788249063385
193 207 },
194 208 {
195 209 "id": "feb96d5be50f",
... ... @@ -204,7 +218,7 @@
204 218 "likes": 0,
205 219 "createdAt": 1788191432903,
206 220 "promptEn": "woman in white startled, a bit shy",
207   - "lastPlayedAt": 1788235312284
  221 + "lastPlayedAt": 1788247175839
208 222 },
209 223 {
210 224 "id": "14f482bdae7f",
... ... @@ -219,7 +233,7 @@
219 233 "likes": 0,
220 234 "createdAt": 1788191432362,
221 235 "promptEn": "woman in white being intimate and alluring",
222   - "lastPlayedAt": 1788239853614
  236 + "lastPlayedAt": 1788247648262
223 237 },
224 238 {
225 239 "id": "362b15ab1811",
... ... @@ -234,7 +248,7 @@
234 248 "likes": 0,
235 249 "createdAt": 1788191431874,
236 250 "promptEn": "woman in white gently comforting someone",
237   - "lastPlayedAt": 1788239698615
  251 + "lastPlayedAt": 1788245286273
238 252 },
239 253 {
240 254 "id": "a2c515055269",
... ... @@ -249,7 +263,7 @@
249 263 "likes": 0,
250 264 "createdAt": 1788191431505,
251 265 "promptEn": "woman in white scared, dodging the question",
252   - "lastPlayedAt": 1788237426143
  266 + "lastPlayedAt": 1788248629102
253 267 },
254 268 {
255 269 "id": "667978d52305",
... ... @@ -264,7 +278,7 @@
264 278 "likes": 0,
265 279 "createdAt": 1788191431016,
266 280 "promptEn": "woman in white coldly threatening",
267   - "lastPlayedAt": 1788237922460
  281 + "lastPlayedAt": 1788249305499
268 282 },
269 283 {
270 284 "id": "7f5213748d87",
... ... @@ -279,7 +293,7 @@
279 293 "likes": 0,
280 294 "createdAt": 1788188423583,
281 295 "promptEn": "woman in white scared, dodging",
282   - "lastPlayedAt": 1788239361511
  296 + "lastPlayedAt": 1788244191373
283 297 },
284 298 {
285 299 "id": "1597db4be561",
... ... @@ -293,7 +307,7 @@
293 307 "partition": "ref2va",
294 308 "likes": 0,
295 309 "createdAt": 1788187365789,
296   - "lastPlayedAt": 1788236567379,
  310 + "lastPlayedAt": 1788247402036,
297 311 "promptEn": "woman in white being gentle and comforting"
298 312 },
299 313 {
... ... @@ -308,7 +322,7 @@
308 322 "partition": "ref2va",
309 323 "likes": 0,
310 324 "createdAt": 1788186218619,
311   - "lastPlayedAt": 1788239105368,
  325 + "lastPlayedAt": 1788248797247,
312 326 "promptEn": "woman in white evading, scared"
313 327 },
314 328 {
... ... @@ -324,7 +338,7 @@
324 338 "likes": 0,
325 339 "createdAt": 1788185090875,
326 340 "promptEn": "woman in white cold and threatening",
327   - "lastPlayedAt": 1788236497319
  341 + "lastPlayedAt": 1788249227469
328 342 },
329 343 {
330 344 "id": "a46f1daa9ee0",
... ... @@ -339,7 +353,7 @@
339 353 "likes": 0,
340 354 "createdAt": 1788181569491,
341 355 "promptEn": "a massive warship glides through the stars, the bridge suddenly shakes hard",
342   - "lastPlayedAt": 1788239135388
  356 + "lastPlayedAt": 1788244309493
343 357 },
344 358 {
345 359 "id": "44bf5b969e94",
... ... @@ -354,7 +368,7 @@
354 368 "likes": 0,
355 369 "createdAt": 1788162094002,
356 370 "promptEn": "woman in old chinese robe talking, gentle but wary, in an old room",
357   - "lastPlayedAt": 1788238847245
  371 + "lastPlayedAt": 1788248591076
358 372 },
359 373 {
360 374 "id": "e17cfe57f56a",
... ... @@ -369,7 +383,7 @@
369 383 "likes": 0,
370 384 "createdAt": 1788160917846,
371 385 "promptEn": "woman in old chinese robe talking, gentle but wary, in an old room",
372   - "lastPlayedAt": 1788234265405
  386 + "lastPlayedAt": 1788248635111
373 387 },
374 388 {
375 389 "id": "24e49e5ae069",
... ... @@ -384,7 +398,7 @@
384 398 "likes": 0,
385 399 "createdAt": 1788159367556,
386 400 "promptEn": "constable talking nervously in an old room, looking scared",
387   - "lastPlayedAt": 1788233737163
  401 + "lastPlayedAt": 1788249213459
388 402 },
389 403 {
390 404 "id": "a6d767413426",
... ... @@ -399,7 +413,7 @@
399 413 "likes": 0,
400 414 "createdAt": 1788157322611,
401 415 "promptEn": "constable talking, looking scared",
402   - "lastPlayedAt": 1788239195414
  416 + "lastPlayedAt": 1788244543682
403 417 },
404 418 {
405 419 "id": "7977eeeabe8b",
... ... @@ -414,7 +428,7 @@
414 428 "likes": 0,
415 429 "createdAt": 1788157177505,
416 430 "promptEn": "constable bursts in and blocks the door, talks to a pale woman behind the screen",
417   - "lastPlayedAt": 1788236561376
  431 + "lastPlayedAt": 1788249173441
418 432 },
419 433 {
420 434 "id": "a9c4ba5e453b",
... ... @@ -429,7 +443,7 @@
429 443 "likes": 0,
430 444 "createdAt": 1788156878022,
431 445 "promptEn": "constable bursts in and blocks the door, talks to a pale woman behind the screen",
432   - "lastPlayedAt": 1788238326802
  446 + "lastPlayedAt": 1788245662609
433 447 },
434 448 {
435 449 "id": "a0b752e7ac0d",
... ... @@ -444,7 +458,7 @@
444 458 "likes": 0,
445 459 "createdAt": 1788154942596,
446 460 "promptEn": "constable talking, looking scared",
447   - "lastPlayedAt": 1788239059343
  461 + "lastPlayedAt": 1788247279933
448 462 },
449 463 {
450 464 "id": "b6608e2eac60",
... ... @@ -459,7 +473,7 @@
459 473 "likes": 0,
460 474 "createdAt": 1788153988474,
461 475 "promptEn": "astronaut at a martian canyon, visor reflecting alien ruins, then aerial view of the city",
462   - "lastPlayedAt": 1788238420888
  476 + "lastPlayedAt": 1788248997353
463 477 },
464 478 {
465 479 "id": "194fc2b56cb5",
... ... @@ -474,7 +488,7 @@
474 488 "likes": 0,
475 489 "createdAt": 1788138492364,
476 490 "promptEn": "astronaut on a Martian canyon, helmet reflecting an alien ruined city",
477   - "lastPlayedAt": 1788239857611
  491 + "lastPlayedAt": 1788247866434
478 492 },
479 493 {
480 494 "id": "f84b8f044ec5",
... ... @@ -489,7 +503,7 @@
489 503 "likes": 0,
490 504 "createdAt": 1788120171725,
491 505 "promptEn": "constable bursts in and blocks the door, talks to a pale woman behind the screen",
492   - "lastPlayedAt": 1788228063021
  506 + "lastPlayedAt": 1788248607084
493 507 },
494 508 {
495 509 "id": "5c364152e54c",
... ... @@ -504,7 +518,7 @@
504 518 "likes": 0,
505 519 "createdAt": 1788120171608,
506 520 "promptEn": "constable bursts in and blocks the door, talks to a pale woman behind the screen",
507   - "lastPlayedAt": 1788239624540
  521 + "lastPlayedAt": 1788248811254
508 522 },
509 523 {
510 524 "id": "b8c762a3672e",
... ... @@ -519,7 +533,7 @@
519 533 "likes": 0,
520 534 "createdAt": 1788106707982,
521 535 "promptEn": "constable bursts in and blocks the door, talks to a pale woman behind the screen",
522   - "lastPlayedAt": 1788235032035
  536 + "lastPlayedAt": 1788247638248
523 537 },
524 538 {
525 539 "id": "1fa40bca47f5",
... ... @@ -534,7 +548,7 @@
534 548 "likes": 0,
535 549 "createdAt": 1788085282201,
536 550 "promptEn": "constable stands still, quietly says he won't make a sound, woman stays silent behind the screen",
537   - "lastPlayedAt": 1788238925278
  551 + "lastPlayedAt": 1788248290798
538 552 },
539 553 {
540 554 "id": "683ab2fd4681",
... ... @@ -549,7 +563,7 @@
549 563 "likes": 0,
550 564 "createdAt": 1788071067702,
551 565 "promptEn": "constable stands still, quietly says he won't make a sound, woman stays silent behind the screen",
552   - "lastPlayedAt": 1788239269456
  566 + "lastPlayedAt": 1788247289944
553 567 },
554 568 {
555 569 "id": "2e09fcd3d42c",
... ... @@ -564,7 +578,7 @@
564 578 "likes": 0,
565 579 "createdAt": 1788062322252,
566 580 "promptEn": "constable stands still, quietly says he won't make a sound, woman stays silent behind the screen",
567   - "lastPlayedAt": 1788237998513
  581 + "lastPlayedAt": 1788247317966
568 582 },
569 583 {
570 584 "id": "12ea9ce00f36",
... ... @@ -579,7 +593,7 @@
579 593 "likes": 0,
580 594 "createdAt": 1788039783070,
581 595 "promptEn": "silver-haired idol backstage, red light pulsing, offering a blood-red contract",
582   - "lastPlayedAt": 1788236086962
  596 + "lastPlayedAt": 1788247167832
583 597 },
584 598 {
585 599 "id": "75bdbacd3012",
... ... @@ -594,7 +608,7 @@
594 608 "likes": 0,
595 609 "createdAt": 1788039782992,
596 610 "promptEn": "silver-haired idol backstage, red light pulsing, offering a blood-red contract",
597   - "lastPlayedAt": 1788238901269
  611 + "lastPlayedAt": 1788249243476
598 612 },
599 613 {
600 614 "id": "69e75a6b3997",
... ... @@ -609,7 +623,7 @@
609 623 "likes": 0,
610 624 "createdAt": 1788027833836,
611 625 "promptEn": "wounded hunter at a ruined subway dungeon entrance, lightning flickers, pointing into the tunnel",
612   - "lastPlayedAt": 1788238448910
  626 + "lastPlayedAt": 1788248889310
613 627 },
614 628 {
615 629 "id": "cde399c27dc4",
... ... @@ -624,7 +638,7 @@
624 638 "likes": 0,
625 639 "createdAt": 1788026877547,
626 640 "promptEn": "a deity in gold crown and red veil, quietly judging you in a moonlit bridal chamber",
627   - "lastPlayedAt": 1788239662572
  641 + "lastPlayedAt": 1788248094627
628 642 },
629 643 {
630 644 "id": "d5f811737e95",
... ... @@ -639,7 +653,7 @@
639 653 "likes": 0,
640 654 "createdAt": 1788026876886,
641 655 "promptEn": "apartment manager in an eerie corridor, red elevator light flickering, holding out a key",
642   - "lastPlayedAt": 1788239031335
  656 + "lastPlayedAt": 1788245048064
643 657 },
644 658 {
645 659 "id": "cdd03cca8461",
... ... @@ -654,7 +668,7 @@
654 668 "likes": 0,
655 669 "createdAt": 1788026569422,
656 670 "promptEn": "stitched-face long-haired curse on a subway platform, flickering lights, cruel smile",
657   - "lastPlayedAt": 1788239131385
  671 + "lastPlayedAt": 1788247712313
658 672 },
659 673 {
660 674 "id": "b8dd0f62f648",
... ... @@ -669,7 +683,7 @@
669 683 "likes": 0,
670 684 "createdAt": 1788026569123,
671 685 "promptEn": "pale dream demon in a suit, reaching out a hand inside a dream train car",
672   - "lastPlayedAt": 1788237442156
  686 + "lastPlayedAt": 1788248166697
673 687 },
674 688 {
675 689 "id": "bd6e2b264243",
... ... @@ -684,7 +698,7 @@
684 698 "likes": 0,
685 699 "createdAt": 1788026568815,
686 700 "promptEn": "blond soldier in combat gear, bracing at the entrance of a ruined basement battlefield",
687   - "lastPlayedAt": 1788237670284
  701 + "lastPlayedAt": 1788249067384
688 702 },
689 703 {
690 704 "id": "b0d6af33eace",
... ... @@ -699,7 +713,7 @@
699 713 "likes": 0,
700 714 "createdAt": 1788026568516,
701 715 "promptEn": "orange-haired villain in a black cloak with red clouds, raising a hand in a ruined village",
702   - "lastPlayedAt": 1788239243436
  716 + "lastPlayedAt": 1788248893311
703 717 },
704 718 {
705 719 "id": "b077fd090415",
... ... @@ -714,7 +728,7 @@
714 728 "likes": 0,
715 729 "createdAt": 1788026568242,
716 730 "promptEn": "magma commander in a white coat, raising a lava fist on the battlefield",
717   - "lastPlayedAt": 1788239786023
  731 + "lastPlayedAt": 1788248741209
718 732 },
719 733 {
720 734 "id": "1442013e94f0",
... ... @@ -729,7 +743,7 @@
729 743 "likes": 0,
730 744 "createdAt": 1788026068497,
731 745 "promptEn": "black-haired prince in a red cloak, pressing down an execution order in the trial hall",
732   - "lastPlayedAt": 1788235548506
  746 + "lastPlayedAt": 1788247147812
733 747 },
734 748 {
735 749 "id": "0a5e37bb328c",
... ... @@ -744,7 +758,7 @@
744 758 "likes": 0,
745 759 "createdAt": 1788025642732,
746 760 "promptEn": "Vecna reaching out a claw in his lair in the Upside Down, red lightning",
747   - "lastPlayedAt": 1788236459278
  761 + "lastPlayedAt": 1788246201053
748 762 },
749 763 {
750 764 "id": "00862f966c3f",
... ... @@ -759,7 +773,7 @@
759 773 "likes": 0,
760 774 "createdAt": 1788025640972,
761 775 "promptEn": "Voldemort in a graveyard, wand raised, stepping closer",
762   - "lastPlayedAt": 1788233989281
  776 + "lastPlayedAt": 1788249433560
763 777 },
764 778 {
765 779 "id": "c3875fbd6cc4",
... ... @@ -774,7 +788,7 @@
774 788 "likes": 0,
775 789 "createdAt": 1788025632028,
776 790 "promptEn": "a giant mouth embedded in the wall at the end of an endless hotel corridor, slowly opening",
777   - "lastPlayedAt": 1788239439551
  791 + "lastPlayedAt": 1788246707462
778 792 },
779 793 {
780 794 "id": "1c6e2df243f4",
... ... @@ -789,7 +803,7 @@
789 803 "likes": 0,
790 804 "createdAt": 1788025630249,
791 805 "promptEn": "white-haired villain in a ruined street at night, cracked smile, reaching out a hand",
792   - "lastPlayedAt": 1788237604251
  806 + "lastPlayedAt": 1788248865293
793 807 },
794 808 {
795 809 "id": "d735f1fc010f",
... ... @@ -804,7 +818,7 @@
804 818 "likes": 0,
805 819 "createdAt": 1788025624377,
806 820 "promptEn": "cat-eared white-haired guard crouching in a ruined palace, purple aura around them",
807   - "lastPlayedAt": 1788239069350
  821 + "lastPlayedAt": 1788244791899
808 822 },
809 823 {
810 824 "id": "b16b64e52f83",
... ... @@ -819,7 +833,7 @@
819 833 "likes": 0,
820 834 "createdAt": 1788025623833,
821 835 "promptEn": "cat-eared white-haired guard crouching in a ruined palace, purple aura around them",
822   - "lastPlayedAt": 1788237726312
  836 + "lastPlayedAt": 1788249503586
823 837 },
824 838 {
825 839 "id": "0d721acbc298",
... ... @@ -834,7 +848,7 @@
834 848 "likes": 0,
835 849 "createdAt": 1788025622363,
836 850 "promptEn": "detective in a surveillance room squinting at the monitors",
837   - "lastPlayedAt": 1788237418135
  851 + "lastPlayedAt": 1788247902462
838 852 },
839 853 {
840 854 "id": "639069dea7c5",
... ... @@ -849,7 +863,7 @@
849 863 "likes": 0,
850 864 "createdAt": 1788025620717,
851 865 "promptEn": "alien tyrant holding a glowing energy sphere, sneering on a rocky green battlefield",
852   - "lastPlayedAt": 1788238961298
  866 + "lastPlayedAt": 1788249089402
853 867 },
854 868 {
855 869 "id": "9db41d807330",
... ... @@ -864,7 +878,7 @@
864 878 "likes": 0,
865 879 "createdAt": 1788025220954,
866 880 "promptEn": "pirate captain plants a cutlass on the table, making a dangerous bargain",
867   - "lastPlayedAt": 1788239620537
  881 + "lastPlayedAt": 1788247468104
868 882 },
869 883 {
870 884 "id": "3e03975ff40a",
... ... @@ -879,7 +893,7 @@
879 893 "likes": 0,
880 894 "createdAt": 1788025003469,
881 895 "promptEn": "vampire idol with red eyes, offering a blood-red contract backstage",
882   - "lastPlayedAt": 1788238038549
  896 + "lastPlayedAt": 1788243983188
883 897 },
884 898 {
885 899 "id": "2857aacf11bb",
... ... @@ -894,7 +908,7 @@
894 908 "likes": 0,
895 909 "createdAt": 1788024900966,
896 910 "promptEn": "player 101 blocking the path on a high glass bridge, threatening you",
897   - "lastPlayedAt": 1788238777192
  911 + "lastPlayedAt": 1788248885312
898 912 },
899 913 {
900 914 "id": "d6aab3fce63d",
... ... @@ -909,7 +923,7 @@
909 923 "likes": 0,
910 924 "createdAt": 1788024747209,
911 925 "promptEn": "wounded hunter leaning on a subway turnstile, ordering you into the tunnel",
912   - "lastPlayedAt": 1788239325490
  926 + "lastPlayedAt": 1788248130662
913 927 },
914 928 {
915 929 "id": "fdefca4e4980",
... ... @@ -924,7 +938,7 @@
924 938 "likes": 0,
925 939 "createdAt": 1788024491625,
926 940 "promptEn": "prince signs an execution order in the trial hall, points at the guillotine",
927   - "lastPlayedAt": 1788239261453
  941 + "lastPlayedAt": 1788247143814
928 942 },
929 943 {
930 944 "id": "8a933feb52c4",
... ... @@ -939,7 +953,7 @@
939 953 "likes": 0,
940 954 "createdAt": 1788019483999,
941 955 "promptEn": "constable rushes in, glances back at the door, then talks to the woman behind the screen",
942   - "lastPlayedAt": 1788238909272
  956 + "lastPlayedAt": 1788249277490
943 957 },
944 958 {
945 959 "id": "998e3e6f9a2f",
... ... @@ -954,7 +968,7 @@
954 968 "likes": 0,
955 969 "createdAt": 1788016668421,
956 970 "promptEn": "pirate negotiation, catching Barbossa's flaw and turning the tables",
957   - "lastPlayedAt": 1788238619060
  971 + "lastPlayedAt": 1788248855284
958 972 },
959 973 {
960 974 "id": "e3b18b5dfd8e",
... ... @@ -969,7 +983,7 @@
969 983 "likes": 0,
970 984 "createdAt": 1788016434846,
971 985 "promptEn": "pirate negotiation, catching Barbossa's flaw and turning the tables",
972   - "lastPlayedAt": 1788237756332
  986 + "lastPlayedAt": 1788241122721
973 987 },
974 988 {
975 989 "id": "03e32ff5f0ef",
... ... @@ -984,7 +998,7 @@
984 998 "likes": 0,
985 999 "createdAt": 1788016203093,
986 1000 "promptEn": "pirate negotiation, held the goal but paid a price",
987   - "lastPlayedAt": 1788236333170
  1001 + "lastPlayedAt": 1788248931331
988 1002 },
989 1003 {
990 1004 "id": "18aa882cbd0b",
... ... @@ -999,7 +1013,7 @@
999 1013 "likes": 0,
1000 1014 "createdAt": 1788015968838,
1001 1015 "promptEn": "pirate negotiation, held the goal but paid a price",
1002   - "lastPlayedAt": 1788238100608
  1016 + "lastPlayedAt": 1788249093401
1003 1017 },
1004 1018 {
1005 1019 "id": "b328649000d1",
... ... @@ -1014,7 +1028,7 @@
1014 1028 "likes": 0,
1015 1029 "createdAt": 1788015737873,
1016 1030 "promptEn": "pirate negotiation, went in head-on and Barbossa saw it coming",
1017   - "lastPlayedAt": 1788237117870
  1031 + "lastPlayedAt": 1788245038056
1018 1032 },
1019 1033 {
1020 1034 "id": "2a5ee87b8f13",
... ... @@ -1029,7 +1043,7 @@
1029 1043 "likes": 0,
1030 1044 "createdAt": 1788015493445,
1031 1045 "promptEn": "pirate negotiation, went in head-on and Barbossa saw it coming",
1032   - "lastPlayedAt": 1788237736321
  1046 + "lastPlayedAt": 1788249283490
1033 1047 },
1034 1048 {
1035 1049 "id": "3f30f5097438",
... ... @@ -1044,7 +1058,7 @@
1044 1058 "likes": 0,
1045 1059 "createdAt": 1788015035234,
1046 1060 "promptEn": "pirate negotiation, stayed passive and got cornered",
1047   - "lastPlayedAt": 1788238905268
  1061 + "lastPlayedAt": 1788241330893
1048 1062 },
1049 1063 {
1050 1064 "id": "6a0d14cabe17",
... ... @@ -1059,7 +1073,7 @@
1059 1073 "likes": 0,
1060 1074 "createdAt": 1788014791733,
1061 1075 "promptEn": "pirate negotiation, stayed passive and got cornered",
1062   - "lastPlayedAt": 1788239570515
  1076 + "lastPlayedAt": 1788249325507
1063 1077 },
1064 1078 {
1065 1079 "id": "08120928cc77",
... ... @@ -1074,7 +1088,7 @@
1074 1088 "likes": 0,
1075 1089 "createdAt": 1788014790969,
1076 1090 "promptEn": "pirate negotiation, stayed passive and got cornered",
1077   - "lastPlayedAt": 1788239443550
  1091 + "lastPlayedAt": 1788248146678
1078 1092 },
1079 1093 {
1080 1094 "id": "e14fe7c3220e",
... ... @@ -1089,7 +1103,7 @@
1089 1103 "likes": 0,
1090 1104 "createdAt": 1788014563344,
1091 1105 "promptEn": "captain's cabin on the Black Pearl, surrounded by pirates, negotiation could turn into an execution",
1092   - "lastPlayedAt": 1788238589036
  1106 + "lastPlayedAt": 1788246847578
1093 1107 },
1094 1108 {
1095 1109 "id": "c6e8560f62a2",
... ... @@ -1104,7 +1118,7 @@
1104 1118 "likes": 0,
1105 1119 "createdAt": 1788014336515,
1106 1120 "promptEn": "captain's cabin on the Black Pearl, surrounded by pirates, negotiation could turn into an execution",
1107   - "lastPlayedAt": 1788235820732
  1121 + "lastPlayedAt": 1788245304286
1108 1122 },
1109 1123 {
1110 1124 "id": "eae105ee1204",
... ... @@ -1119,7 +1133,7 @@
1119 1133 "likes": 0,
1120 1134 "createdAt": 1788014099497,
1121 1135 "promptEn": "glass bridge game, exploiting a flaw to push back player 101",
1122   - "lastPlayedAt": 1788237704301
  1136 + "lastPlayedAt": 1788248180707
1123 1137 },
1124 1138 {
1125 1139 "id": "24576c264a25",
... ... @@ -1134,7 +1148,7 @@
1134 1148 "likes": 0,
1135 1149 "createdAt": 1788013870849,
1136 1150 "promptEn": "glass bridge game, exploiting a flaw to push back player 101",
1137   - "lastPlayedAt": 1788237432150
  1151 + "lastPlayedAt": 1788244557694
1138 1152 },
1139 1153 {
1140 1154 "id": "dd12bbb55060",
... ... @@ -1149,7 +1163,7 @@
1149 1163 "likes": 0,
1150 1164 "createdAt": 1788013634333,
1151 1165 "promptEn": "glass bridge game, held the goal but paid a price",
1152   - "lastPlayedAt": 1788238096601
  1166 + "lastPlayedAt": 1788247720319
1153 1167 },
1154 1168 {
1155 1169 "id": "5b8ef21616d4",
... ... @@ -1164,7 +1178,7 @@
1164 1178 "likes": 0,
1165 1179 "createdAt": 1788013632065,
1166 1180 "promptEn": "glass bridge game, held the goal but paid a price",
1167   - "lastPlayedAt": 1788238787200
  1181 + "lastPlayedAt": 1788247840412
1168 1182 },
1169 1183 {
1170 1184 "id": "892b923eed29",
... ... @@ -1179,7 +1193,7 @@
1179 1193 "likes": 0,
1180 1194 "createdAt": 1788013393463,
1181 1195 "promptEn": "guessed wrong in a survival game, got countered",
1182   - "lastPlayedAt": 1788239548495
  1196 + "lastPlayedAt": 1788248362870
1183 1197 },
1184 1198 {
1185 1199 "id": "7880a91928c6",
... ... @@ -1194,7 +1208,7 @@
1194 1208 "likes": 0,
1195 1209 "createdAt": 1788013155592,
1196 1210 "promptEn": "glass bridge game, stayed passive and got cornered",
1197   - "lastPlayedAt": 1788237956491
  1211 + "lastPlayedAt": 1788242766130
1198 1212 },
1199 1213 {
1200 1214 "id": "f80c8ec1a8c8",
... ... @@ -1209,7 +1223,7 @@
1209 1223 "likes": 0,
1210 1224 "createdAt": 1788012917294,
1211 1225 "promptEn": "standing on the glass bridge, facing off with player 101",
1212   - "lastPlayedAt": 1788237284002
  1226 + "lastPlayedAt": 1788248120651
1213 1227 },
1214 1228 {
1215 1229 "id": "8f23de61904f",
... ... @@ -1224,7 +1238,7 @@
1224 1238 "likes": 0,
1225 1239 "createdAt": 1788012917185,
1226 1240 "promptEn": "standing on the glass bridge, facing off with player 101",
1227   - "lastPlayedAt": 1788239642565
  1241 + "lastPlayedAt": 1788244377528
1228 1242 },
1229 1243 {
1230 1244 "id": "bb4a8351d822",
... ... @@ -1239,7 +1253,7 @@
1239 1253 "likes": 0,
1240 1254 "createdAt": 1788012679740,
1241 1255 "promptEn": "in the mental lair, exploiting a flaw to counter Vecna",
1242   - "lastPlayedAt": 1788236895678
  1256 + "lastPlayedAt": 1788245658603
1243 1257 },
1244 1258 {
1245 1259 "id": "3913752bbe3a",
... ... @@ -1254,7 +1268,7 @@
1254 1268 "likes": 0,
1255 1269 "createdAt": 1788012441458,
1256 1270 "promptEn": "facing Vecna, held the goal but paid a price",
1257   - "lastPlayedAt": 1788236173036
  1271 + "lastPlayedAt": 1788248951336
1258 1272 },
1259 1273 {
1260 1274 "id": "691c2f679759",
... ... @@ -1269,7 +1283,7 @@
1269 1283 "likes": 0,
1270 1284 "createdAt": 1788012202802,
1271 1285 "promptEn": "facing Vecna, went in head-on and got seen through",
1272   - "lastPlayedAt": 1788235248233
  1286 + "lastPlayedAt": 1788244267443
1273 1287 },
1274 1288 {
1275 1289 "id": "07f957783a09",
... ... @@ -1284,7 +1298,7 @@
1284 1298 "likes": 0,
1285 1299 "createdAt": 1788012202708,
1286 1300 "promptEn": "facing Vecna, went in head-on and got seen through",
1287   - "lastPlayedAt": 1788239507583
  1301 + "lastPlayedAt": 1788248276792
1288 1302 },
1289 1303 {
1290 1304 "id": "40ccb04f76e9",
... ... @@ -1299,7 +1313,7 @@
1299 1313 "likes": 0,
1300 1314 "createdAt": 1788011964828,
1301 1315 "promptEn": "facing Vecna, stayed passive and got cornered",
1302   - "lastPlayedAt": 1788235900804
  1316 + "lastPlayedAt": 1788247774359
1303 1317 },
1304 1318 {
1305 1319 "id": "7161aecafa32",
... ... @@ -1329,7 +1343,7 @@
1329 1343 "likes": 0,
1330 1344 "createdAt": 1788011488775,
1331 1345 "promptEn": "graveyard standoff, exploiting a flaw to counter Voldemort",
1332   - "lastPlayedAt": 1788237678291
  1346 + "lastPlayedAt": 1788249467572
1333 1347 },
1334 1348 {
1335 1349 "id": "24845be71ea0",
... ... @@ -1344,7 +1358,7 @@
1344 1358 "likes": 0,
1345 1359 "createdAt": 1788011488667,
1346 1360 "promptEn": "graveyard standoff, exploiting a flaw to counter Voldemort",
1347   - "lastPlayedAt": 1788239425542
  1361 + "lastPlayedAt": 1788248432935
1348 1362 },
1349 1363 {
1350 1364 "id": "f1012a3d7aa7",
... ... @@ -1359,7 +1373,7 @@
1359 1373 "likes": 0,
1360 1374 "createdAt": 1788011251158,
1361 1375 "promptEn": "facing Voldemort, held the goal but paid a price",
1362   - "lastPlayedAt": 1788239329493
  1376 + "lastPlayedAt": 1788244998065
1363 1377 },
1364 1378 {
1365 1379 "id": "58f68b111429",
... ... @@ -1374,7 +1388,7 @@
1374 1388 "likes": 0,
1375 1389 "createdAt": 1788011013309,
1376 1390 "promptEn": "facing Voldemort, went in head-on and got seen through",
1377   - "lastPlayedAt": 1788234335440
  1391 + "lastPlayedAt": 1788245638583
1378 1392 },
1379 1393 {
1380 1394 "id": "682cbc166479",
... ... @@ -1389,7 +1403,7 @@
1389 1403 "likes": 0,
1390 1404 "createdAt": 1788010775613,
1391 1405 "promptEn": "facing Voldemort, stayed passive and got cornered",
1392   - "lastPlayedAt": 1788239736647
  1406 + "lastPlayedAt": 1788241054655
1393 1407 },
1394 1408 {
1395 1409 "id": "795842efa4a1",
... ... @@ -1404,7 +1418,7 @@
1404 1418 "likes": 0,
1405 1419 "createdAt": 1788010537514,
1406 1420 "promptEn": "the triwizard cup teleports you to the graveyard, Voldemort's revival just finished",
1407   - "lastPlayedAt": 1788238659090
  1421 + "lastPlayedAt": 1788243204518
1408 1422 },
1409 1423 {
1410 1424 "id": "6ed9eaf4fa1d",
... ... @@ -1419,7 +1433,7 @@
1419 1433 "likes": 0,
1420 1434 "createdAt": 1788010299688,
1421 1435 "promptEn": "facing Thanos, exploiting a flaw to counter him",
1422   - "lastPlayedAt": 1788237710304
  1436 + "lastPlayedAt": 1788249423555
1423 1437 },
1424 1438 {
1425 1439 "id": "469294a4ed09",
... ... @@ -1434,7 +1448,7 @@
1434 1448 "likes": 0,
1435 1449 "createdAt": 1788010062535,
1436 1450 "promptEn": "facing Thanos, held the goal but paid a price",
1437   - "lastPlayedAt": 1788235376337
  1451 + "lastPlayedAt": 1788247440076
1438 1452 },
1439 1453 {
1440 1454 "id": "324b84ebc607",
... ... @@ -1449,7 +1463,7 @@
1449 1463 "likes": 0,
1450 1464 "createdAt": 1788009825082,
1451 1465 "promptEn": "facing Thanos, went in head-on and got seen through",
1452   - "lastPlayedAt": 1788238058572
  1466 + "lastPlayedAt": 1788248991352
1453 1467 },
1454 1468 {
1455 1469 "id": "a6ead2cbe03f",
... ... @@ -1464,7 +1478,7 @@
1464 1478 "likes": 0,
1465 1479 "createdAt": 1788009586293,
1466 1480 "promptEn": "facing Thanos, stayed passive and got cornered",
1467   - "lastPlayedAt": 1788239503570
  1481 + "lastPlayedAt": 1788249207456
1468 1482 },
1469 1483 {
1470 1484 "id": "438c98cf4973",
... ... @@ -1479,7 +1493,7 @@
1479 1493 "likes": 0,
1480 1494 "createdAt": 1788009346020,
1481 1495 "promptEn": "battlefield on Titan, the last chance to stop Thanos",
1482   - "lastPlayedAt": 1788239381524
  1496 + "lastPlayedAt": 1788246895620
1483 1497 },
1484 1498 {
1485 1499 "id": "66a96c6bc7cb",
... ... @@ -1494,7 +1508,7 @@
1494 1508 "likes": 0,
1495 1509 "createdAt": 1788009108302,
1496 1510 "promptEn": "in the endless hotel, exploiting a flaw to counter the Eternity Devil",
1497   - "lastPlayedAt": 1788230393081
  1511 + "lastPlayedAt": 1788249037369
1498 1512 },
1499 1513 {
1500 1514 "id": "71c590b0ea8f",
... ... @@ -1509,7 +1523,7 @@
1509 1523 "likes": 0,
1510 1524 "createdAt": 1788008870118,
1511 1525 "promptEn": "facing the Eternity Devil, held the goal but paid a price",
1512   - "lastPlayedAt": 1788235496464
  1526 + "lastPlayedAt": 1788245856782
1513 1527 },
1514 1528 {
1515 1529 "id": "35833c2cabb9",
... ... @@ -1524,7 +1538,7 @@
1524 1538 "likes": 0,
1525 1539 "createdAt": 1788008632603,
1526 1540 "promptEn": "facing the Eternity Devil, went in head-on and got seen through",
1527   - "lastPlayedAt": 1788239149394
  1541 + "lastPlayedAt": 1788248382886
1528 1542 },
1529 1543 {
1530 1544 "id": "361c80537652",
... ... @@ -1539,7 +1553,7 @@
1539 1553 "likes": 0,
1540 1554 "createdAt": 1788008394344,
1541 1555 "promptEn": "facing the Eternity Devil, stayed passive and got cornered",
1542   - "lastPlayedAt": 1788236225074
  1556 + "lastPlayedAt": 1788247716320
1543 1557 },
1544 1558 {
1545 1559 "id": "1a57de01bad0",
... ... @@ -1554,7 +1568,7 @@
1554 1568 "likes": 0,
1555 1569 "createdAt": 1788008156307,
1556 1570 "promptEn": "hotel floor sealed by the Eternity Devil, an endless looping corridor",
1557   - "lastPlayedAt": 1788238969299
  1571 + "lastPlayedAt": 1788248987350
1558 1572 },
1559 1573 {
1560 1574 "id": "cd3b6dda90ad",
... ... @@ -1569,7 +1583,7 @@
1569 1583 "likes": 0,
1570 1584 "createdAt": 1788007915610,
1571 1585 "promptEn": "in the ruined city, exploiting a flaw to counter Tomura",
1572   - "lastPlayedAt": 1788236513335
  1586 + "lastPlayedAt": 1788244427575
1573 1587 },
1574 1588 {
1575 1589 "id": "f67685cd6862",
... ... @@ -1584,7 +1598,7 @@
1584 1598 "likes": 0,
1585 1599 "createdAt": 1788007678723,
1586 1600 "promptEn": "facing Tomura, held the goal but paid a price",
1587   - "lastPlayedAt": 1788229462219
  1601 + "lastPlayedAt": 1788248458956
1588 1602 },
1589 1603 {
1590 1604 "id": "ee5bd111d8bd",
... ... @@ -1599,7 +1613,7 @@
1599 1613 "likes": 0,
1600 1614 "createdAt": 1788007441156,
1601 1615 "promptEn": "battlefield in Jaku city, the city in ruins, heroes in crisis",
1602   - "lastPlayedAt": 1788237350069
  1616 + "lastPlayedAt": 1788243420700
1603 1617 },
1604 1618 {
1605 1619 "id": "68219d6b68c8",
... ... @@ -1614,7 +1628,7 @@
1614 1628 "likes": 0,
1615 1629 "createdAt": 1788007201908,
1616 1630 "promptEn": "breaking into the palace, Neferpitou stalling to protect the king",
1617   - "lastPlayedAt": 1788239281462
  1631 + "lastPlayedAt": 1788248014560
1618 1632 },
1619 1633 {
1620 1634 "id": "628026375795",
... ... @@ -1629,7 +1643,7 @@
1629 1643 "likes": 0,
1630 1644 "createdAt": 1788006964122,
1631 1645 "promptEn": "grabbing an evidence flaw to counter L",
1632   - "lastPlayedAt": 1788236128993
  1646 + "lastPlayedAt": 1788249155428
1633 1647 },
1634 1648 {
1635 1649 "id": "0c6306b07f79",
... ... @@ -1644,7 +1658,7 @@
1644 1658 "likes": 0,
1645 1659 "createdAt": 1788006725887,
1646 1660 "promptEn": "facing off with L, went in head-on and got seen through",
1647   - "lastPlayedAt": 1788238599043
  1661 + "lastPlayedAt": 1788244141322
1648 1662 },
1649 1663 {
1650 1664 "id": "ee82188227fa",
... ... @@ -1659,7 +1673,7 @@
1659 1673 "likes": 0,
1660 1674 "createdAt": 1788006252918,
1661 1675 "promptEn": "facing L, stayed passive and the evidence pressure maxed out",
1662   - "lastPlayedAt": 1788237536217
  1676 + "lastPlayedAt": 1788247598221
1663 1677 },
1664 1678 {
1665 1679 "id": "0e28a7fecf03",
... ... @@ -1674,7 +1688,7 @@
1674 1688 "likes": 0,
1675 1689 "createdAt": 1788006252824,
1676 1690 "promptEn": "facing L, stayed passive and the evidence pressure maxed out",
1677   - "lastPlayedAt": 1788238803216
  1691 + "lastPlayedAt": 1788248392895
1678 1692 },
1679 1693 {
1680 1694 "id": "fb0738ad3e3b",
... ... @@ -1689,7 +1703,7 @@
1689 1703 "likes": 0,
1690 1704 "createdAt": 1788006015175,
1691 1705 "promptEn": "on the ruined planet, exploiting a flaw to counter Frieza",
1692   - "lastPlayedAt": 1788239487574
  1706 + "lastPlayedAt": 1788249419549
1693 1707 },
1694 1708 {
1695 1709 "id": "e6fda5c2237d",
... ... @@ -1704,7 +1718,7 @@
1704 1718 "likes": 0,
1705 1719 "createdAt": 1788005778588,
1706 1720 "promptEn": "facing Frieza, held the goal but paid a price",
1707   - "lastPlayedAt": 1788239429548
  1721 + "lastPlayedAt": 1788247462098
1708 1722 },
1709 1723 {
1710 1724 "id": "b96cc9762cf6",
... ... @@ -1719,7 +1733,7 @@
1719 1733 "likes": 0,
1720 1734 "createdAt": 1788005541640,
1721 1735 "promptEn": "facing Frieza, went in head-on and got seen through",
1722   - "lastPlayedAt": 1788233775938
  1736 + "lastPlayedAt": 1788246977682
1723 1737 },
1724 1738 {
1725 1739 "id": "574b47b00316",
... ... @@ -1734,7 +1748,7 @@
1734 1748 "likes": 0,
1735 1749 "createdAt": 1788005305091,
1736 1750 "promptEn": "facing Frieza, stayed passive and got cornered",
1737   - "lastPlayedAt": 1788239513586
  1751 + "lastPlayedAt": 1788246715470
1738 1752 },
1739 1753 {
1740 1754 "id": "d680e111ade5",
... ... @@ -1749,7 +1763,7 @@
1749 1763 "likes": 0,
1750 1764 "createdAt": 1788005066484,
1751 1765 "promptEn": "Namek is about to be destroyed, the dragon ball wish still up for grabs",
1752   - "lastPlayedAt": 1788236841630
  1766 + "lastPlayedAt": 1788246173033
1753 1767 },
1754 1768 {
1755 1769 "id": "565059763888",
... ... @@ -1764,7 +1778,7 @@
1764 1778 "likes": 0,
1765 1779 "createdAt": 1788004828526,
1766 1780 "promptEn": "in the subway, exploiting a flaw to counter Mahito",
1767   - "lastPlayedAt": 1788237532215
  1781 + "lastPlayedAt": 1788249383535
1768 1782 },
1769 1783 {
1770 1784 "id": "323737948733",
... ... @@ -1779,7 +1793,7 @@
1779 1793 "likes": 0,
1780 1794 "createdAt": 1788004590937,
1781 1795 "promptEn": "facing Mahito, held the goal but paid a price",
1782   - "lastPlayedAt": 1788239395530
  1796 + "lastPlayedAt": 1788244441588
1783 1797 },
1784 1798 {
1785 1799 "id": "9996a8ac8326",
... ... @@ -1794,7 +1808,7 @@
1794 1808 "likes": 0,
1795 1809 "createdAt": 1788004353928,
1796 1810 "promptEn": "facing Mahito, went in head-on and got seen through",
1797   - "lastPlayedAt": 1788237410131
  1811 + "lastPlayedAt": 1788244924008
1798 1812 },
1799 1813 {
1800 1814 "id": "971d80ec087c",
... ... @@ -1809,7 +1823,7 @@
1809 1823 "likes": 0,
1810 1824 "createdAt": 1788004115725,
1811 1825 "promptEn": "facing Mahito, stayed passive and got cornered",
1812   - "lastPlayedAt": 1788239389526
  1826 + "lastPlayedAt": 1788249363526
1813 1827 },
1814 1828 {
1815 1829 "id": "5dd52c568f66",
... ... @@ -1824,7 +1838,7 @@
1824 1838 "likes": 0,
1825 1839 "createdAt": 1788004115612,
1826 1840 "promptEn": "facing Mahito, stayed passive and got cornered",
1827   - "lastPlayedAt": 1788239333489
  1841 + "lastPlayedAt": 1788248314826
1828 1842 },
1829 1843 {
1830 1844 "id": "f4a2870386c6",
... ... @@ -1839,7 +1853,7 @@
1839 1853 "likes": 0,
1840 1854 "createdAt": 1788003877425,
1841 1855 "promptEn": "in the dream, exploiting a flaw to counter Enmu",
1842   - "lastPlayedAt": 1788239399534
  1856 + "lastPlayedAt": 1788249187447
1843 1857 },
1844 1858 {
1845 1859 "id": "7c4f9460e6b7",
... ... @@ -1854,7 +1868,7 @@
1854 1868 "likes": 0,
1855 1869 "createdAt": 1788003639415,
1856 1870 "promptEn": "facing Enmu, held the goal but paid a price",
1857   - "lastPlayedAt": 1788238813220
  1871 + "lastPlayedAt": 1788248428932
1858 1872 },
1859 1873 {
1860 1874 "id": "6881dbe839a0",
... ... @@ -1869,7 +1883,7 @@
1869 1883 "likes": 0,
1870 1884 "createdAt": 1788003402559,
1871 1885 "promptEn": "facing Enmu, went in head-on and got seen through",
1872   - "lastPlayedAt": 1788239481564
  1886 + "lastPlayedAt": 1788246589381
1873 1887 },
1874 1888 {
1875 1889 "id": "5c0f1663f4ae",
... ... @@ -1884,7 +1898,7 @@
1884 1898 "likes": 0,
1885 1899 "createdAt": 1788003166117,
1886 1900 "promptEn": "facing Enmu, stayed passive and got cornered",
1887   - "lastPlayedAt": 1788238218715
  1901 + "lastPlayedAt": 1788246683440
1888 1902 },
1889 1903 {
1890 1904 "id": "a3f39da74c1f",
... ... @@ -1899,7 +1913,7 @@
1899 1913 "likes": 0,
1900 1914 "createdAt": 1788002929455,
1901 1915 "promptEn": "facing Reiner, exploiting a flaw to counter him",
1902   - "lastPlayedAt": 1788239265453
  1916 + "lastPlayedAt": 1788243602857
1903 1917 },
1904 1918 {
1905 1919 "id": "ea8b38014674",
... ... @@ -1914,7 +1928,7 @@
1914 1928 "likes": 0,
1915 1929 "createdAt": 1788002691822,
1916 1930 "promptEn": "facing Reiner, held the goal but paid a price",
1917   - "lastPlayedAt": 1788238975304
  1931 + "lastPlayedAt": 1788244299472
1918 1932 },
1919 1933 {
1920 1934 "id": "f65b15d67966",
... ... @@ -1929,7 +1943,7 @@
1929 1943 "likes": 0,
1930 1944 "createdAt": 1788002455066,
1931 1945 "promptEn": "facing Reiner, went in head-on and got seen through",
1932   - "lastPlayedAt": 1788237878416
  1946 + "lastPlayedAt": 1788249057379
1933 1947 },
1934 1948 {
1935 1949 "id": "5846d645e870",
... ... @@ -1944,7 +1958,7 @@
1944 1958 "likes": 0,
1945 1959 "createdAt": 1788002217928,
1946 1960 "promptEn": "facing Reiner, stayed passive and got cornered",
1947   - "lastPlayedAt": 1788237580239
  1961 + "lastPlayedAt": 1788247906463
1948 1962 },
1949 1963 {
1950 1964 "id": "3fedf5531999",
... ... @@ -1959,7 +1973,7 @@
1959 1973 "likes": 0,
1960 1974 "createdAt": 1788001981272,
1961 1975 "promptEn": "basement in Shiganshina, the titan secret weighing down on you",
1962   - "lastPlayedAt": 1788239223427
  1976 + "lastPlayedAt": 1788248186714
1963 1977 },
1964 1978 {
1965 1979 "id": "7c2351a27a96",
... ... @@ -1974,7 +1988,7 @@
1974 1988 "likes": 0,
1975 1989 "createdAt": 1788001508988,
1976 1990 "promptEn": "in the ruins of Konoha, exploiting a flaw to counter Pain",
1977   - "lastPlayedAt": 1788230082792
  1991 + "lastPlayedAt": 1788244357522
1978 1992 },
1979 1993 {
1980 1994 "id": "79304c061606",
... ... @@ -1989,7 +2003,7 @@
1989 2003 "likes": 0,
1990 2004 "createdAt": 1788001428705,
1991 2005 "promptEn": "in the ruins of Konoha, exploiting a flaw to counter Pain",
1992   - "lastPlayedAt": 1788238687110
  2006 + "lastPlayedAt": 1788249429557
1993 2007 },
1994 2008 {
1995 2009 "id": "e486fab4c24d",
... ... @@ -2004,7 +2018,7 @@
2004 2018 "likes": 0,
2005 2019 "createdAt": 1788001285796,
2006 2020 "promptEn": "in the ruins of Konoha, exploiting a flaw to counter Pain",
2007   - "lastPlayedAt": 1788236845633
  2021 + "lastPlayedAt": 1788248869294
2008 2022 },
2009 2023 {
2010 2024 "id": "808e89ca06a4",
... ... @@ -2019,7 +2033,7 @@
2019 2033 "likes": 0,
2020 2034 "createdAt": 1788001049233,
2021 2035 "promptEn": "facing Pain, held the goal but paid a price",
2022   - "lastPlayedAt": 1788238809210
  2036 + "lastPlayedAt": 1788249071386
2023 2037 },
2024 2038 {
2025 2039 "id": "7ecd480a3c31",
... ... @@ -2034,7 +2048,7 @@
2034 2048 "likes": 0,
2035 2049 "createdAt": 1788000812932,
2036 2050 "promptEn": "facing Pain, went in head-on and got seen through",
2037   - "lastPlayedAt": 1788237904442
  2051 + "lastPlayedAt": 1788249183444
2038 2052 },
2039 2053 {
2040 2054 "id": "f691ac021df0",
... ... @@ -2049,7 +2063,7 @@
2049 2063 "likes": 0,
2050 2064 "createdAt": 1788000577474,
2051 2065 "promptEn": "facing Pain, stayed passive and got cornered",
2052   - "lastPlayedAt": 1788239588520
  2066 + "lastPlayedAt": 1788246411240
2053 2067 },
2054 2068 {
2055 2069 "id": "5ef9489bdc5b",
... ... @@ -2064,7 +2078,7 @@
2064 2078 "likes": 0,
2065 2079 "createdAt": 1788000341927,
2066 2080 "promptEn": "Konoha destroyed by Shinra Tensei, Pain declaring order in the ruins",
2067   - "lastPlayedAt": 1788237584239
  2081 + "lastPlayedAt": 1788247898463
2068 2082 },
2069 2083 {
2070 2084 "id": "e245dbcc6d36",
... ... @@ -2079,7 +2093,7 @@
2079 2093 "likes": 0,
2080 2094 "createdAt": 1788000105889,
2081 2095 "promptEn": "facing Sakazuki, exploiting a flaw to counter him",
2082   - "lastPlayedAt": 1788235920823
  2096 + "lastPlayedAt": 1788249083398
2083 2097 },
2084 2098 {
2085 2099 "id": "c9be7c07b793",
... ... @@ -2094,7 +2108,7 @@
2094 2108 "likes": 0,
2095 2109 "createdAt": 1787999869694,
2096 2110 "promptEn": "facing Sakazuki, held the goal but paid a price",
2097   - "lastPlayedAt": 1788238915275
  2111 + "lastPlayedAt": 1788249637645
2098 2112 },
2099 2113 {
2100 2114 "id": "677941e683c4",
... ... @@ -2109,7 +2123,7 @@
2109 2123 "likes": 0,
2110 2124 "createdAt": 1787999633745,
2111 2125 "promptEn": "facing Sakazuki, went in head-on and got seen through",
2112   - "lastPlayedAt": 1788237468177
  2126 + "lastPlayedAt": 1788241280859
2113 2127 },
2114 2128 {
2115 2129 "id": "932d15f7f8bd",
... ... @@ -2124,7 +2138,7 @@
2124 2138 "likes": 0,
2125 2139 "createdAt": 1787999633670,
2126 2140 "promptEn": "facing Sakazuki, went in head-on and got seen through",
2127   - "lastPlayedAt": 1788238018530
  2141 + "lastPlayedAt": 1788248228749
2128 2142 },
2129 2143 {
2130 2144 "id": "a8b8b4430ee3",
... ... @@ -2139,7 +2153,7 @@
2139 2153 "likes": 0,
2140 2154 "createdAt": 1787999397097,
2141 2155 "promptEn": "facing Sakazuki, stayed passive and got cornered",
2142   - "lastPlayedAt": 1788234753781
  2156 + "lastPlayedAt": 1788245170174
2143 2157 },
2144 2158 {
2145 2159 "id": "88923aaf57f3",
... ... @@ -2154,7 +2168,7 @@
2154 2168 "likes": 0,
2155 2169 "createdAt": 1787999161013,
2156 2170 "promptEn": "execution platform at Marineford, Ace about to be executed, navy vs pirates",
2157   - "lastPlayedAt": 1788237021780
  2171 + "lastPlayedAt": 1788242772136
2158 2172 },
2159 2173 {
2160 2174 "id": "00476b62bf75",
... ... @@ -2169,7 +2183,7 @@
2169 2183 "likes": 0,
2170 2184 "createdAt": 1787903583872,
2171 2185 "promptEn": "constable asks if she's always been alone here, she doesn't answer",
2172   - "lastPlayedAt": 1788238082590
  2186 + "lastPlayedAt": 1788249399541
2173 2187 },
2174 2188 {
2175 2189 "id": "2ab2094e5679",
... ... @@ -2184,7 +2198,7 @@
2184 2198 "likes": 0,
2185 2199 "createdAt": 1787900324972,
2186 2200 "promptEn": "constable declines a drink, asks what this place is, she watches him through the screen",
2187   - "lastPlayedAt": 1788234247395
  2201 + "lastPlayedAt": 1788248246767
2188 2202 },
2189 2203 {
2190 2204 "id": "43ee5c728f1b",
... ... @@ -2199,7 +2213,7 @@
2199 2213 "likes": 0,
2200 2214 "createdAt": 1787850191899,
2201 2215 "promptEn": "constable reaches out to touch her hand through the screen gap, no response",
2202   - "lastPlayedAt": 1788236525342
  2216 + "lastPlayedAt": 1788246881603
2203 2217 },
2204 2218 {
2205 2219 "id": "9bd8c9fbf1f6",
... ... @@ -2214,7 +2228,7 @@
2214 2228 "likes": 0,
2215 2229 "createdAt": 1787847447661,
2216 2230 "promptEn": "constable tells the woman behind the screen he'll trust her tonight",
2217   - "lastPlayedAt": 1788239648569
  2231 + "lastPlayedAt": 1788247912475
2218 2232 },
2219 2233 {
2220 2234 "id": "8cb493338cb3",
... ... @@ -2229,7 +2243,7 @@
2229 2243 "likes": 0,
2230 2244 "createdAt": 1787831362083,
2231 2245 "promptEn": "constable promises to get her out safely if she trusts him",
2232   - "lastPlayedAt": 1788237063824
  2246 + "lastPlayedAt": 1788248697169
2233 2247 },
2234 2248 {
2235 2249 "id": "5ede61c01b22",
... ... @@ -2244,7 +2258,7 @@
2244 2258 "likes": 0,
2245 2259 "createdAt": 1787762342686,
2246 2260 "promptEn": "woman tells him from behind the screen to go check outside, he steps out warily",
2247   - "lastPlayedAt": 1788239339500
  2261 + "lastPlayedAt": 1788248000548
2248 2262 },
2249 2263 {
2250 2264 "id": "47a6de809c61",
... ... @@ -2259,7 +2273,7 @@
2259 2273 "likes": 0,
2260 2274 "createdAt": 1787762332289,
2261 2275 "promptEn": "woman behind the screen stirs and softly reassures him",
2262   - "lastPlayedAt": 1788237304019
  2276 + "lastPlayedAt": 1788248214738
2263 2277 },
2264 2278 {
2265 2279 "id": "0abf6e529c92",
... ... @@ -2274,7 +2288,7 @@
2274 2288 "likes": 0,
2275 2289 "createdAt": 1787762311804,
2276 2290 "promptEn": "constable sits with a cup of water, slowly looking up at the woman behind the screen",
2277   - "lastPlayedAt": 1788237147890
  2291 + "lastPlayedAt": 1788246833570
2278 2292 },
2279 2293 {
2280 2294 "id": "850f13881576",
... ... @@ -2289,7 +2303,7 @@
2289 2303 "likes": 0,
2290 2304 "createdAt": 1787762286261,
2291 2305 "promptEn": "constable stares at her through the screen, silent, saying nothing",
2292   - "lastPlayedAt": 1788237231957
  2306 + "lastPlayedAt": 1788248262778
2293 2307 },
2294 2308 {
2295 2309 "id": "59711a102e84",
... ... @@ -2304,7 +2318,7 @@
2304 2318 "likes": 0,
2305 2319 "createdAt": 1787762224218,
2306 2320 "promptEn": "constable stands under the lamp, holding her gaze through the screen, not backing away",
2307   - "lastPlayedAt": 1788239794026
  2321 + "lastPlayedAt": 1788249041367
2308 2322 },
2309 2323 {
2310 2324 "id": "f2e70205766b",
... ... @@ -2319,7 +2333,7 @@
2319 2333 "likes": 0,
2320 2334 "createdAt": 1787738044140,
2321 2335 "promptEn": "constable carefully checks the door and window latches, she watches from behind the screen",
2322   - "lastPlayedAt": 1788239592524
  2336 + "lastPlayedAt": 1788245190190
2323 2337 },
2324 2338 {
2325 2339 "id": "cfbef6e37ae4",
... ... @@ -2334,7 +2348,7 @@
2334 2348 "likes": 0,
2335 2349 "createdAt": 1787730413689,
2336 2350 "promptEn": "constable grabs the oil lamp and hurls it at the portrait, the scroll catches fire",
2337   - "lastPlayedAt": 1788236819612
  2351 + "lastPlayedAt": 1788249473574
2338 2352 },
2339 2353 {
2340 2354 "id": "e6c23c6adc42",
... ... @@ -2349,7 +2363,7 @@
2349 2363 "likes": 0,
2350 2364 "createdAt": 1787730331754,
2351 2365 "promptEn": "constable steps in from the rainy night, spots her, introduces himself with a cover story",
2352   - "lastPlayedAt": 1788239748660
  2366 + "lastPlayedAt": 1788247554188
2353 2367 },
2354 2368 {
2355 2369 "id": "d720d52c783f",
... ... @@ -2364,7 +2378,7 @@
2364 2378 "likes": 0,
2365 2379 "createdAt": 1787730331663,
2366 2380 "promptEn": "constable steps in from the rainy night, spots her, introduces himself with a cover story",
2367   - "lastPlayedAt": 1788237267984
  2381 + "lastPlayedAt": 1788249111414
2368 2382 },
2369 2383 {
2370 2384 "id": "84e8337de242",
... ... @@ -2379,7 +2393,7 @@
2379 2393 "likes": 0,
2380 2394 "createdAt": 1787724313620,
2381 2395 "promptEn": "first-person view bursting into the room, glancing back in fear, the woman startled",
2382   - "lastPlayedAt": 1788239682009
  2396 + "lastPlayedAt": 1788247658274
2383 2397 },
2384 2398 {
2385 2399 "id": "81b6c3789111",
... ... @@ -2394,7 +2408,7 @@
2394 2408 "likes": 0,
2395 2409 "createdAt": 1787708713767,
2396 2410 "promptEn": "constable stops looking around, turns to face the screen, speaks to her silhouette",
2397   - "lastPlayedAt": 1788231727441
  2411 + "lastPlayedAt": 1788245738674
2398 2412 },
2399 2413 {
2400 2414 "id": "5dc95a15cd5d",
... ... @@ -2409,7 +2423,7 @@
2409 2423 "likes": 0,
2410 2424 "createdAt": 1787708701547,
2411 2425 "promptEn": "constable gently tells her he'll stay and keep her company",
2412   - "lastPlayedAt": 1788237740325
  2426 + "lastPlayedAt": 1788245988880
2413 2427 },
2414 2428 {
2415 2429 "id": "8d9c1dad041f",
... ... @@ -2424,7 +2438,7 @@
2424 2438 "likes": 0,
2425 2439 "createdAt": 1787708686397,
2426 2440 "promptEn": "constable accepts the invitation, moves to sit on a stool closer to the screen",
2427   - "lastPlayedAt": 1788236026908
  2441 + "lastPlayedAt": 1788248577063
2428 2442 },
2429 2443 {
2430 2444 "id": "ad611bcbd06b",
... ... @@ -2439,7 +2453,7 @@
2439 2453 "likes": 0,
2440 2454 "createdAt": 1787708684658,
2441 2455 "promptEn": "constable sees her silent gesture, lets go of his sword hilt, steps closer and agrees",
2442   - "lastPlayedAt": 1788230423104
  2456 + "lastPlayedAt": 1788246805543
2443 2457 },
2444 2458 {
2445 2459 "id": "abdbe25f3121",
... ... @@ -2454,7 +2468,7 @@
2454 2468 "likes": 0,
2455 2469 "createdAt": 1787708674508,
2456 2470 "promptEn": "constable sees through her painted disguise and rips her face off, revealing a demonic visage underneath",
2457   - "lastPlayedAt": 1788234739771
  2471 + "lastPlayedAt": 1788248903320
2458 2472 },
2459 2473 {
2460 2474 "id": "6d433dcc104c",
... ... @@ -2469,7 +2483,7 @@
2469 2483 "likes": 0,
2470 2484 "createdAt": 1787708663418,
2471 2485 "promptEn": "constable catches his breath, thanks her, and rests on the couch while she watches",
2472   - "lastPlayedAt": 1788239175402
  2486 + "lastPlayedAt": 1788245906827
2473 2487 },
2474 2488 {
2475 2489 "id": "cd22c2b491fc",
... ... @@ -2484,7 +2498,7 @@
2484 2498 "likes": 0,
2485 2499 "createdAt": 1787708653181,
2486 2500 "promptEn": "constable holds her gaze, quietly says \"go on\", then waits in silence",
2487   - "lastPlayedAt": 1788235216202
  2501 + "lastPlayedAt": 1788244341508
2488 2502 },
2489 2503 {
2490 2504 "id": "55f98ceec9e4",
... ... @@ -2499,7 +2513,7 @@
2499 2513 "likes": 0,
2500 2514 "createdAt": 1787708648409,
2501 2515 "promptEn": "she reaches a hand through the screen gap beckoning him, he steps back and firmly refuses",
2502   - "lastPlayedAt": 1788239079356
  2516 + "lastPlayedAt": 1788248366872
2503 2517 },
2504 2518 {
2505 2519 "id": "3f0c28f5373a",
... ... @@ -2514,7 +2528,7 @@
2514 2528 "likes": 0,
2515 2529 "createdAt": 1787708646888,
2516 2530 "promptEn": "constable studies her through the screen growing suspicious, hand drifting to his sword",
2517   - "lastPlayedAt": 1788239409555
  2531 + "lastPlayedAt": 1788249453571
2518 2532 },
2519 2533 {
2520 2534 "id": "1c0c203cfb3b",
... ... @@ -2529,7 +2543,7 @@
2529 2543 "likes": 0,
2530 2544 "createdAt": 1787708641782,
2531 2545 "promptEn": "constable sits down at the table, studying her expression through the screen",
2532   - "lastPlayedAt": 1788238627059
  2546 + "lastPlayedAt": 1788249369530
2533 2547 },
2534 2548 {
2535 2549 "id": "89975be9def4",
... ... @@ -2544,7 +2558,7 @@
2544 2558 "likes": 0,
2545 2559 "createdAt": 1787708626228,
2546 2560 "promptEn": "constable drinks some water first, thanks her, watching the screen warily as he drinks",
2547   - "lastPlayedAt": 1788237762334
  2561 + "lastPlayedAt": 1788249247478
2548 2562 },
2549 2563 {
2550 2564 "id": "e08f7f7e54dd",
... ... @@ -2559,7 +2573,7 @@
2559 2573 "likes": 0,
2560 2574 "createdAt": 1787708622306,
2561 2575 "promptEn": "constable gives a clasped-hand salute and thanks her, she gives a subtle nod",
2562   - "lastPlayedAt": 1788236275114
  2576 + "lastPlayedAt": 1788242193644
2563 2577 },
2564 2578 {
2565 2579 "id": "538dc7e5746f",
... ... @@ -2574,7 +2588,7 @@
2574 2588 "likes": 0,
2575 2589 "createdAt": 1787708622178,
2576 2590 "promptEn": "constable gives a clasped-hand salute and thanks her, she gives a subtle nod",
2577   - "lastPlayedAt": 1788236299134
  2591 + "lastPlayedAt": 1788247151819
2578 2592 },
2579 2593 {
2580 2594 "id": "1721c75dbc3b",
... ... @@ -2589,7 +2603,7 @@
2589 2603 "likes": 0,
2590 2604 "createdAt": 1787708615415,
2591 2605 "promptEn": "she slides her hand through the screen gap asking him to warm it, he hesitates without touching",
2592   - "lastPlayedAt": 1788238224719
  2606 + "lastPlayedAt": 1788246669438
2593 2607 },
2594 2608 {
2595 2609 "id": "c2b145b111e2",
... ... @@ -2604,7 +2618,7 @@
2604 2618 "likes": 0,
2605 2619 "createdAt": 1787708613364,
2606 2620 "promptEn": "constable steps in, notices her behind the screen, greets her, she just watches silently",
2607   - "lastPlayedAt": 1788238833238
  2621 + "lastPlayedAt": 1788248681145
2608 2622 },
2609 2623 {
2610 2624 "id": "a5d5d353bbf8",
... ... @@ -2619,7 +2633,7 @@
2619 2633 "likes": 0,
2620 2634 "createdAt": 1787674768144,
2621 2635 "promptEn": "constable lifts a bronze mirror, reflecting candlelight onto the portrait on the wall",
2622   - "lastPlayedAt": 1788237542221
  2636 + "lastPlayedAt": 1788249403540
2623 2637 },
2624 2638 {
2625 2639 "id": "3be1f275fde2",
... ... @@ -2634,7 +2648,7 @@
2634 2648 "likes": 0,
2635 2649 "createdAt": 1787674743188,
2636 2650 "promptEn": "constable draws his sword and breaks the sealed talisman on the screen, revealing her behind it",
2637   - "lastPlayedAt": 1788238747163
  2651 + "lastPlayedAt": 1788249643649
2638 2652 },
2639 2653 {
2640 2654 "id": "693e0b9ca66a",
... ... @@ -2649,7 +2663,7 @@
2649 2663 "likes": 0,
2650 2664 "createdAt": 1787674737743,
2651 2665 "promptEn": "constable slowly looks around the room, discovers her watching him motionlessly through the screen",
2652   - "lastPlayedAt": 1788238877259
  2666 + "lastPlayedAt": 1788248444942
2653 2667 },
2654 2668 {
2655 2669 "id": "c74118d0413f",
... ... @@ -2664,7 +2678,7 @@
2664 2678 "likes": 0,
2665 2679 "createdAt": 1787674716075,
2666 2680 "promptEn": "constable watches the oil lamp flame flicker, her silhouette motionless behind the screen",
2667   - "lastPlayedAt": 1788239041338
  2681 + "lastPlayedAt": 1788246721475
2668 2682 },
2669 2683 {
2670 2684 "id": "23d1ae1982e6",
... ... @@ -2679,7 +2693,7 @@
2679 2693 "likes": 0,
2680 2694 "createdAt": 1787674713724,
2681 2695 "promptEn": "constable enters and cautiously looks around, his gaze settling on her silhouette behind the screen",
2682   - "lastPlayedAt": 1788239716626
  2696 + "lastPlayedAt": 1788249347518
2683 2697 },
2684 2698 {
2685 2699 "id": "b69389094416",
... ... @@ -2694,7 +2708,7 @@
2694 2708 "likes": 0,
2695 2709 "createdAt": 1787674695703,
2696 2710 "promptEn": "constable stops, faces the screen, quietly promises to keep his voice down",
2697   - "lastPlayedAt": 1788238863250
  2711 + "lastPlayedAt": 1788247540173
2698 2712 },
2699 2713 {
2700 2714 "id": "94dc455e26bf",
... ... @@ -2709,7 +2723,7 @@
2709 2723 "likes": 0,
2710 2724 "createdAt": 1787674688717,
2711 2725 "promptEn": "constable agrees to stay, lets his guard down, she gives a barely-there nod",
2712   - "lastPlayedAt": 1788238939281
  2726 + "lastPlayedAt": 1788248320834
2713 2727 },
2714 2728 {
2715 2729 "id": "4874fe3fdbc9",
... ... @@ -2724,7 +2738,7 @@
2724 2738 "likes": 0,
2725 2739 "createdAt": 1787674660698,
2726 2740 "promptEn": "constable smashes the bronze mirror on the table, it shatters, she watches from behind the screen",
2727   - "lastPlayedAt": 1788238705131
  2741 + "lastPlayedAt": 1788248649121
2728 2742 },
2729 2743 {
2730 2744 "id": "ed77b83851a2",
... ... @@ -2739,7 +2753,7 @@
2739 2753 "likes": 0,
2740 2754 "createdAt": 1787674642139,
2741 2755 "promptEn": "constable forms hand seals and summons a giant toad out of smoke",
2742   - "lastPlayedAt": 1788237684292
  2756 + "lastPlayedAt": 1788247129805
2743 2757 },
2744 2758 {
2745 2759 "id": "e9a6320e18a9",
... ... @@ -2754,7 +2768,7 @@
2754 2768 "likes": 0,
2755 2769 "createdAt": 1787674642026,
2756 2770 "promptEn": "constable enters from the side and sits down on a stool by the lamp to rest",
2757   - "lastPlayedAt": 1788236343178
  2771 + "lastPlayedAt": 1788247574201
2758 2772 },
2759 2773 {
2760 2774 "id": "fe7ffbe65653",
... ... @@ -2769,7 +2783,7 @@
2769 2783 "likes": 0,
2770 2784 "createdAt": 1787674639055,
2771 2785 "promptEn": "constable checks his reflection in the mirror, sees her behind his shoulder in it, turns around to find the screen empty",
2772   - "lastPlayedAt": 1788233761172
  2786 + "lastPlayedAt": 1788246273115
2773 2787 },
2774 2788 {
2775 2789 "id": "ebaf0dde3d9f",
... ... @@ -2784,7 +2798,7 @@
2784 2798 "likes": 0,
2785 2799 "createdAt": 1787674623678,
2786 2800 "promptEn": "constable bows to the screen, thanking her for sheltering him",
2787   - "lastPlayedAt": 1788239287469
  2801 + "lastPlayedAt": 1788248150683
2788 2802 },
2789 2803 {
2790 2804 "id": "d94991a1e21b",
... ... @@ -2799,7 +2813,7 @@
2799 2813 "likes": 0,
2800 2814 "createdAt": 1787674609636,
2801 2815 "promptEn": "constable silently watches her through the screen gaps, camera slowly zooming in on her face",
2802   - "lastPlayedAt": 1788239155387
  2816 + "lastPlayedAt": 1788249261479
2803 2817 },
2804 2818 {
2805 2819 "id": "5e53f7f5fe9b",
... ... @@ -2814,7 +2828,7 @@
2814 2828 "likes": 0,
2815 2829 "createdAt": 1787674446841,
2816 2830 "promptEn": "player panics into the room, glances back, out of breath, says something's chasing him outside",
2817   - "lastPlayedAt": 1788238603043
  2831 + "lastPlayedAt": 1788247932497
2818 2832 },
2819 2833 {
2820 2834 "id": "c25d53a5e086",
... ... @@ -2829,7 +2843,7 @@
2829 2843 "likes": 0,
2830 2844 "createdAt": 1787674395006,
2831 2845 "promptEn": "constable and the woman hold a tense silent stare through the screen",
2832   - "lastPlayedAt": 1788238004523
  2846 + "lastPlayedAt": 1788248761225
2833 2847 },
2834 2848 {
2835 2849 "id": "f264bce22903",
... ... @@ -2844,7 +2858,7 @@
2844 2858 "likes": 0,
2845 2859 "createdAt": 1787674361187,
2846 2860 "promptEn": "constable presses his hand to his chest, vowing his heart to her, she gives a knowing smile",
2847   - "lastPlayedAt": 1788238671098
  2861 + "lastPlayedAt": 1788247321970
2848 2862 },
2849 2863 {
2850 2864 "id": "8aba0a6bf05b",
... ... @@ -2859,7 +2873,7 @@
2859 2873 "likes": 0,
2860 2874 "createdAt": 1787674351536,
2861 2875 "promptEn": "constable searches an old house at night, candle flickering, woman hiding behind the screen",
2862   - "lastPlayedAt": 1788237512206
  2876 + "lastPlayedAt": 1788246491297
2863 2877 },
2864 2878 {
2865 2879 "id": "dc13e4f165dc",
... ... @@ -2874,7 +2888,7 @@
2874 2888 "likes": 0,
2875 2889 "createdAt": 1787672849330,
2876 2890 "promptEn": "constable cautiously follows her silent gesture, hand near his sword, tracking her movement",
2877   - "lastPlayedAt": 1788236149011
  2891 + "lastPlayedAt": 1788245314287
2878 2892 },
2879 2893 {
2880 2894 "id": "feb4df69e1a2",
... ... @@ -2889,7 +2903,7 @@
2889 2903 "likes": 0,
2890 2904 "createdAt": 1787665100787,
2891 2905 "promptEn": "constable politely asks the woman behind the screen for tea",
2892   - "lastPlayedAt": 1788237217948
  2906 + "lastPlayedAt": 1788246062936
2893 2907 },
2894 2908 {
2895 2909 "id": "d2c77b87b84b",
... ... @@ -2903,7 +2917,7 @@
2903 2917 "partition": "ref2va",
2904 2918 "likes": 0,
2905 2919 "createdAt": 1787652321725,
2906   - "lastPlayedAt": 1788239762009,
  2920 + "lastPlayedAt": 1788246485298,
2907 2921 "promptEn": "constable talking to the woman through the screen"
2908 2922 },
2909 2923 {
... ... @@ -2919,7 +2933,7 @@
2919 2933 "likes": 0,
2920 2934 "createdAt": 1787642579766,
2921 2935 "promptEn": "a summoner chants and calls a giant toad, which swallows the white-robed ghost whole",
2922   - "lastPlayedAt": 1788238761173
  2936 + "lastPlayedAt": 1788248777237
2923 2937 },
2924 2938 {
2925 2939 "id": "22a666455198",
... ... @@ -2934,7 +2948,7 @@
2934 2948 "likes": 0,
2935 2949 "createdAt": 1787640567001,
2936 2950 "promptEn": "summoned toad Wentai, beat the painted-skin female ghost",
2937   - "lastPlayedAt": 1788238370847
  2951 + "lastPlayedAt": 1788249437562
2938 2952 },
2939 2953 {
2940 2954 "id": "1cc42a8669a1",
... ... @@ -2948,7 +2962,7 @@
2948 2962 "partition": "ref2va",
2949 2963 "likes": 0,
2950 2964 "createdAt": 1787639957338,
2951   - "lastPlayedAt": 1788239301475,
  2965 + "lastPlayedAt": 1788248897311,
2952 2966 "promptEn": "constable talking to the woman through the screen"
2953 2967 },
2954 2968 {
... ... @@ -2964,7 +2978,7 @@
2964 2978 "likes": 0,
2965 2979 "createdAt": 1787637292741,
2966 2980 "promptEn": "constable bursts in panicked, spots the woman behind the screen",
2967   - "lastPlayedAt": 1788236779575
  2981 + "lastPlayedAt": 1788248346857
2968 2982 },
2969 2983 {
2970 2984 "id": "93c2b84a2a10",
... ... @@ -2979,7 +2993,7 @@
2979 2993 "likes": 0,
2980 2994 "createdAt": 1787635935502,
2981 2995 "promptEn": "constable bursts in panicked, spots the woman behind the screen",
2982   - "lastPlayedAt": 1788239035337
  2996 + "lastPlayedAt": 1788246137001
2983 2997 },
2984 2998 {
2985 2999 "id": "b32769bf80db",
... ... @@ -2994,7 +3008,7 @@
2994 3008 "likes": 0,
2995 3009 "createdAt": 1787632587351,
2996 3010 "promptEn": "constable bursts in panicked, spots the woman behind the screen",
2997   - "lastPlayedAt": 1788236799594
  3011 + "lastPlayedAt": 1788248791245
2998 3012 },
2999 3013 {
3000 3014 "id": "282281777d1b",
... ... @@ -3009,7 +3023,7 @@
3009 3023 "likes": 0,
3010 3024 "createdAt": 1787615243753,
3011 3025 "promptEn": "robot arm picks up a red block and puts it down",
3012   - "lastPlayedAt": 1788238791204
  3026 + "lastPlayedAt": 1788246909631
3013 3027 },
3014 3028 {
3015 3029 "id": "d040eec16a88",
... ... @@ -3024,7 +3038,7 @@
3024 3038 "likes": 0,
3025 3039 "createdAt": 1787615242602,
3026 3040 "promptEn": "otome game male lead showcase PV",
3027   - "lastPlayedAt": 1788239449554
  3041 + "lastPlayedAt": 1788247347993
3028 3042 },
3029 3043 {
3030 3044 "id": "423a20afba5a",
... ... @@ -3039,7 +3053,7 @@
3039 3053 "likes": 0,
3040 3054 "createdAt": 1787615241814,
3041 3055 "promptEn": "xianxia character turning, only back and side profile shown",
3042   - "lastPlayedAt": 1788239247441
  3056 + "lastPlayedAt": 1788247390027
3043 3057 },
3044 3058 {
3045 3059 "id": "1a398591663e",
... ... @@ -3054,7 +3068,7 @@
3054 3068 "likes": 0,
3055 3069 "createdAt": 1787615240988,
3056 3070 "promptEn": "clay fox sprints off a cliff, slow-mo leap over the canyon",
3057   - "lastPlayedAt": 1788239093359
  3071 + "lastPlayedAt": 1788247880445
3058 3072 },
3059 3073 {
3060 3074 "id": "db125dc6a831",
... ... @@ -3068,7 +3082,7 @@
3068 3082 "partition": "text",
3069 3083 "likes": 0,
3070 3084 "createdAt": 1787615240199,
3071   - "lastPlayedAt": 1788239558507,
  3085 + "lastPlayedAt": 1788244934012,
3072 3086 "promptEn": "website UI title slides in, car light fades to red"
3073 3087 },
3074 3088 {
... ... @@ -3084,7 +3098,7 @@
3084 3098 "likes": 0,
3085 3099 "createdAt": 1787588547172,
3086 3100 "promptEn": "product website scrolling down with flashy effects",
3087   - "lastPlayedAt": 1788236609419
  3101 + "lastPlayedAt": 1788248841279
3088 3102 },
3089 3103 {
3090 3104 "id": "2e18bf09b46a",
... ... @@ -3099,7 +3113,7 @@
3099 3113 "likes": 0,
3100 3114 "createdAt": 1787588545801,
3101 3115 "promptEn": "game menu UI, character swaps out a mechanical arm",
3102   - "lastPlayedAt": 1788236467285
  3116 + "lastPlayedAt": 1788249159434
3103 3117 },
3104 3118 {
3105 3119 "id": "fe749aa533a0",
... ... @@ -3114,7 +3128,7 @@
3114 3128 "likes": 0,
3115 3129 "createdAt": 1787588545243,
3116 3130 "promptEn": "ergonomic office chair 360 showcase ad",
3117   - "lastPlayedAt": 1788236183042
  3131 + "lastPlayedAt": 1788248711178
3118 3132 },
3119 3133 {
3120 3134 "id": "b0d258352c3c",
... ... @@ -3129,7 +3143,7 @@
3129 3143 "likes": 0,
3130 3144 "createdAt": 1787588544667,
3131 3145 "promptEn": "white studio shoot, two models wearing futuristic glasses",
3132   - "lastPlayedAt": 1788239826056
  3146 + "lastPlayedAt": 1788248729194
3133 3147 },
3134 3148 {
3135 3149 "id": "71a4d093aebc",
... ... @@ -3144,7 +3158,7 @@
3144 3158 "likes": 0,
3145 3159 "createdAt": 1787588544109,
3146 3160 "promptEn": "vampire romance drama trailer, girl wanders into the castle",
3147   - "lastPlayedAt": 1788234595640
  3161 + "lastPlayedAt": 1788248955338
3148 3162 },
3149 3163 {
3150 3164 "id": "7ded7db676d3",
... ... @@ -3159,7 +3173,7 @@
3159 3173 "likes": 0,
3160 3174 "createdAt": 1787588543551,
3161 3175 "promptEn": "MiniMax H3 tech brand film, blue waveform logo",
3162   - "lastPlayedAt": 1788237714306
  3176 + "lastPlayedAt": 1788246819557
3163 3177 },
3164 3178 {
3165 3179 "id": "81711242178d",
... ... @@ -3174,7 +3188,7 @@
3174 3188 "likes": 0,
3175 3189 "createdAt": 1787588542968,
3176 3190 "promptEn": "mystery crime title sequence, collage split-screen credits",
3177   - "lastPlayedAt": 1788239768008
  3191 + "lastPlayedAt": 1788247850421
3178 3192 },
3179 3193 {
3180 3194 "id": "67ababbea78f",
... ... @@ -3189,7 +3203,7 @@
3189 3203 "likes": 0,
3190 3204 "createdAt": 1787588542426,
3191 3205 "promptEn": "fashion guy in sunglasses and coat by a fire",
3192   - "lastPlayedAt": 1788239534502
  3206 + "lastPlayedAt": 1788245774711
3193 3207 },
3194 3208 {
3195 3209 "id": "c1237b599bf4",
... ... @@ -3204,7 +3218,7 @@
3204 3218 "likes": 0,
3205 3219 "createdAt": 1787588541726,
3206 3220 "promptEn": "woman opens the trunk on a desert road, takes out a bag",
3207   - "lastPlayedAt": 1788233067825
  3221 + "lastPlayedAt": 1788245330307
3208 3222 },
3209 3223 {
3210 3224 "id": "97846542ab09",
... ... @@ -3219,7 +3233,7 @@
3219 3233 "likes": 0,
3220 3234 "createdAt": 1787588541164,
3221 3235 "promptEn": "tiny silhouette before a huge cosmic gate, title fades in",
3222   - "lastPlayedAt": 1788233689134
  3236 + "lastPlayedAt": 1788248234756
3223 3237 },
3224 3238 {
3225 3239 "id": "5cc09dcdf470",
... ... @@ -3234,7 +3248,7 @@
3234 3248 "likes": 0,
3235 3249 "createdAt": 1787588540642,
3236 3250 "promptEn": "telescope view searching for a MiniMax device, fashionable passerby",
3237   - "lastPlayedAt": 1788238735151
  3251 + "lastPlayedAt": 1788248919321
3238 3252 },
3239 3253 {
3240 3254 "id": "a59cae01ec39",
... ... @@ -3249,7 +3263,7 @@
3249 3263 "likes": 0,
3250 3264 "createdAt": 1787588540567,
3251 3265 "promptEn": "telescope view searching for a MiniMax device",
3252   - "lastPlayedAt": 1788238332809
  3266 + "lastPlayedAt": 1788248302814
3253 3267 },
3254 3268 {
3255 3269 "id": "ba8c0758e5b4",
... ... @@ -3264,7 +3278,7 @@
3264 3278 "likes": 0,
3265 3279 "createdAt": 1787588114381,
3266 3280 "promptEn": "underground rap duo freestyling at the camera",
3267   - "lastPlayedAt": 1788238348824
  3281 + "lastPlayedAt": 1788248935327
3268 3282 },
3269 3283 {
3270 3284 "id": "58a439a93c02",
... ... @@ -3279,7 +3293,7 @@
3279 3293 "likes": 0,
3280 3294 "createdAt": 1787577878370,
3281 3295 "promptEn": "man barges into the old house apologizing, woman in white behind the screen",
3282   - "lastPlayedAt": 1788237932471
  3296 + "lastPlayedAt": 1788245984875
3283 3297 },
3284 3298 {
3285 3299 "id": "0e75ef71c3d0",
... ... @@ -3294,7 +3308,7 @@
3294 3308 "likes": 0,
3295 3309 "createdAt": 1787577088842,
3296 3310 "promptEn": "man thanks the woman for taking him in, behind the screen",
3297   - "lastPlayedAt": 1788235894800
  3311 + "lastPlayedAt": 1788247530161
3298 3312 },
3299 3313 {
3300 3314 "id": "e656777b6eef",
... ... @@ -3309,7 +3323,7 @@
3309 3323 "likes": 0,
3310 3324 "createdAt": 1787577088778,
3311 3325 "promptEn": "man thanks the woman for taking him in",
3312   - "lastPlayedAt": 1788239552505
  3326 + "lastPlayedAt": 1788246381212
3313 3327 },
3314 3328 {
3315 3329 "id": "8d0270466c35",
... ... @@ -3324,7 +3338,7 @@
3324 3338 "likes": 0,
3325 3339 "createdAt": 1787576943673,
3326 3340 "promptEn": "man lowers his voice like she said, checks the door, window and lamp",
3327   - "lastPlayedAt": 1788239307486
  3341 + "lastPlayedAt": 1788249077393
3328 3342 },
3329 3343 {
3330 3344 "id": "396de15c1439",
... ... @@ -3339,7 +3353,7 @@
3339 3353 "likes": 0,
3340 3354 "createdAt": 1787576943608,
3341 3355 "promptEn": "man lowers his voice like she said, checks the door, window and lamp",
3342   - "lastPlayedAt": 1788237526211
  3356 + "lastPlayedAt": 1788249343532
3343 3357 },
3344 3358 {
3345 3359 "id": "cde82791f726",
... ... @@ -3354,7 +3368,7 @@
3354 3368 "likes": 0,
3355 3369 "createdAt": 1787576798050,
3356 3370 "promptEn": "man says he's willing to give her his heart",
3357   - "lastPlayedAt": 1788238452913
  3371 + "lastPlayedAt": 1788245790726
3358 3372 },
3359 3373 {
3360 3374 "id": "57f2c6fa351d",
... ... @@ -3369,7 +3383,7 @@
3369 3383 "likes": 0,
3370 3384 "createdAt": 1787576651668,
3371 3385 "promptEn": "man silently looks at her, doesn't respond",
3372   - "lastPlayedAt": 1788238781189
  3386 + "lastPlayedAt": 1788248969344
3373 3387 },
3374 3388 {
3375 3389 "id": "5958b86ab8f4",
... ... @@ -3383,7 +3397,7 @@
3383 3397 "partition": "text",
3384 3398 "likes": 0,
3385 3399 "createdAt": 1787576506447,
3386   - "lastPlayedAt": 1788239732650,
  3400 + "lastPlayedAt": 1788247534166,
3387 3401 "promptEn": "man does as she says but stays on guard"
3388 3402 },
3389 3403 {
... ... @@ -3398,7 +3412,7 @@
3398 3412 "partition": "text",
3399 3413 "likes": 0,
3400 3414 "createdAt": 1787576358982,
3401   - "lastPlayedAt": 1788238965299,
  3415 + "lastPlayedAt": 1788246088963,
3402 3416 "promptEn": "man apologizes, says something outside was chasing him"
3403 3417 },
3404 3418 {
... ... @@ -3414,7 +3428,7 @@
3414 3428 "likes": 0,
3415 3429 "createdAt": 1787576013870,
3416 3430 "promptEn": "man apologizes, says something outside was chasing him",
3417   - "lastPlayedAt": 1788238583032
  3431 + "lastPlayedAt": 1788241611137
3418 3432 },
3419 3433 {
3420 3434 "id": "7d425d2d35fb",
... ... @@ -3429,7 +3443,7 @@
3429 3443 "likes": 0,
3430 3444 "createdAt": 1787575790848,
3431 3445 "promptEn": "man apologizes, says something outside was chasing him",
3432   - "lastPlayedAt": 1788238955291
  3446 + "lastPlayedAt": 1788247283936
3433 3447 },
3434 3448 {
3435 3449 "id": "5e6dcf2c8cfd",
... ... @@ -3444,7 +3458,7 @@
3444 3458 "likes": 0,
3445 3459 "createdAt": 1787575164928,
3446 3460 "promptEn": "man apologizes, says something outside was chasing him",
3447   - "lastPlayedAt": 1788237376095
  3461 + "lastPlayedAt": 1788249631916
3448 3462 },
3449 3463 {
3450 3464 "id": "250fad90393c",
... ... @@ -3459,7 +3473,7 @@
3459 3473 "likes": 0,
3460 3474 "createdAt": 1787575164766,
3461 3475 "promptEn": "man apologizes, says something outside was chasing him",
3462   - "lastPlayedAt": 1788239027329
  3476 + "lastPlayedAt": 1788248174703
3463 3477 },
3464 3478 {
3465 3479 "id": "fb3000701384",
... ... @@ -3474,7 +3488,7 @@
3474 3488 "likes": 0,
3475 3489 "createdAt": 1787573698485,
3476 3490 "promptEn": "underground rap duo freestyling at the camera",
3477   - "lastPlayedAt": 1788235852763
  3491 + "lastPlayedAt": 1788248190717
3478 3492 },
3479 3493 {
3480 3494 "id": "e5246eae814e",
... ... @@ -3489,7 +3503,7 @@
3489 3503 "likes": 0,
3490 3504 "createdAt": 1787569314178,
3491 3505 "promptEn": "man apologizes, says something outside was chasing him",
3492   - "lastPlayedAt": 1788238593040
  3506 + "lastPlayedAt": 1788247634250
3493 3507 },
3494 3508 {
3495 3509 "id": "a0d7a106b8d6",
... ... @@ -3503,7 +3517,7 @@
3503 3517 "partition": "text",
3504 3518 "likes": 0,
3505 3519 "createdAt": 1787568512602,
3506   - "lastPlayedAt": 1788238088593,
  3520 + "lastPlayedAt": 1788246313154,
3507 3521 "promptEn": "man apologizes, says something outside was chasing him"
3508 3522 },
3509 3523 {
... ... @@ -3518,7 +3532,7 @@
3518 3532 "partition": "ref2va",
3519 3533 "likes": 0,
3520 3534 "createdAt": 1787559156410,
3521   - "lastPlayedAt": 1788237187923,
  3535 + "lastPlayedAt": 1788248745205,
3522 3536 "promptEn": "two characters sitting, game menu UI swaps in a mechanical arm"
3523 3537 },
3524 3538 {
... ... @@ -3534,7 +3548,7 @@
3534 3548 "likes": 0,
3535 3549 "createdAt": 1787542770522,
3536 3550 "promptEn": "clip cut to match a reference video's editing rhythm",
3537   - "lastPlayedAt": 1788239790028
  3551 + "lastPlayedAt": 1788248438939
3538 3552 },
3539 3553 {
3540 3554 "id": "f9286d694bad",
... ... @@ -3549,7 +3563,7 @@
3549 3563 "likes": 0,
3550 3564 "createdAt": 1787497396594,
3551 3565 "promptEn": "otome game male lead showcase PV",
3552   - "lastPlayedAt": 1788237590243
  3566 + "lastPlayedAt": 1788249489586
3553 3567 },
3554 3568 {
3555 3569 "id": "36ac12f2f29e",
... ... @@ -3564,7 +3578,7 @@
3564 3578 "likes": 0,
3565 3579 "createdAt": 1787493339415,
3566 3580 "promptEn": "game menu UI, character swaps out a mechanical arm",
3567   - "lastPlayedAt": 1788239837605
  3581 + "lastPlayedAt": 1788247514144
3568 3582 },
3569 3583 {
3570 3584 "id": "656c897b04fc",
... ... @@ -3579,7 +3593,7 @@
3579 3593 "likes": 0,
3580 3594 "createdAt": 1787493303602,
3581 3595 "promptEn": "game menu UI, character swaps out a mechanical arm",
3582   - "lastPlayedAt": 1788238364841
  3596 + "lastPlayedAt": 1788246195051
3583 3597 },
3584 3598 {
3585 3599 "id": "e1fd99e4ab97",
... ... @@ -3594,7 +3608,7 @@
3594 3608 "likes": 0,
3595 3609 "createdAt": 1787470101960,
3596 3610 "promptEn": "cute hand-drawn beagle dog making faces, game screen",
3597   - "lastPlayedAt": 1788235590540
  3611 + "lastPlayedAt": 1788248134665
3598 3612 },
3599 3613 {
3600 3614 "id": "4067993ff824",
... ... @@ -3609,7 +3623,7 @@
3609 3623 "likes": 0,
3610 3624 "createdAt": 1787470101693,
3611 3625 "promptEn": "black-background product-launch style shot of a roast duck",
3612   - "lastPlayedAt": 1788239608539
  3626 + "lastPlayedAt": 1788243072394
3613 3627 },
3614 3628 {
3615 3629 "id": "99e771bbb50d",
... ... @@ -3623,7 +3637,8 @@
3623 3637 "partition": "text",
3624 3638 "likes": 0,
3625 3639 "createdAt": 1787470101411,
3626   - "promptEn": "vertical family-fight drama, arguing with an older woman"
  3640 + "promptEn": "vertical family-fight drama, arguing with an older woman",
  3641 + "lastPlayedAt": 1788247732323
3627 3642 },
3628 3643 {
3629 3644 "id": "57169e6751d0",
... ... @@ -3638,7 +3653,7 @@
3638 3653 "likes": 0,
3639 3654 "createdAt": 1787470101060,
3640 3655 "promptEn": "snowy bamboo forest at night, wuxia mystery standoff",
3641   - "lastPlayedAt": 1788238691117
  3656 + "lastPlayedAt": 1788248617097
3642 3657 },
3643 3658 {
3644 3659 "id": "125751cac1c8",
... ... @@ -3653,7 +3668,7 @@
3653 3668 "likes": 0,
3654 3669 "createdAt": 1787470100377,
3655 3670 "promptEn": "all-black background, experimental Chinese kinetic typography",
3656   - "lastPlayedAt": 1788239704619
  3671 + "lastPlayedAt": 1788247193855
3657 3672 },
3658 3673 {
3659 3674 "id": "c24c15736daa",
... ... @@ -3668,7 +3683,7 @@
3668 3683 "likes": 0,
3669 3684 "createdAt": 1787470100107,
3670 3685 "promptEn": "MiniMax H3 brand motion graphics, a dot growing into a network",
3671   - "lastPlayedAt": 1788235878787
  3686 + "lastPlayedAt": 1788248973345
3672 3687 },
3673 3688 {
3674 3689 "id": "194e9bd77da6",
... ... @@ -3683,7 +3698,7 @@
3683 3698 "likes": 0,
3684 3699 "createdAt": 1787470100022,
3685 3700 "promptEn": "MiniMax H3 brand motion graphics, a dot growing into a network",
3686   - "lastPlayedAt": 1788239517585
  3701 + "lastPlayedAt": 1788248873291
3687 3702 },
3688 3703 {
3689 3704 "id": "eaf2a1433c41",
... ... @@ -3698,7 +3713,7 @@
3698 3713 "likes": 0,
3699 3714 "createdAt": 1787470099635,
3700 3715 "promptEn": "pointing at things at a beach market, they turn into hand-drawn animation",
3701   - "lastPlayedAt": 1788239313488
  3716 + "lastPlayedAt": 1788249097406
3702 3717 },
3703 3718 {
3704 3719 "id": "0fe0f2101c44",
... ... @@ -3713,7 +3728,7 @@
3713 3728 "likes": 0,
3714 3729 "createdAt": 1787470099306,
3715 3730 "promptEn": "late-night laundromat footage mixed with glowing hand-drawn animation",
3716   - "lastPlayedAt": 1788237966499
  3731 + "lastPlayedAt": 1788249293496
3717 3732 },
3718 3733 {
3719 3734 "id": "c0e23beb4132",
... ... @@ -3728,7 +3743,7 @@
3728 3743 "likes": 0,
3729 3744 "createdAt": 1787470098914,
3730 3745 "promptEn": "evening kitchen footage mixed with a glowing hand-drawn creature",
3731   - "lastPlayedAt": 1788236951715
  3746 + "lastPlayedAt": 1788249331511
3732 3747 },
3733 3748 {
3734 3749 "id": "6639b07acc7b",
... ... @@ -3743,7 +3758,7 @@
3743 3758 "likes": 0,
3744 3759 "createdAt": 1787470098570,
3745 3760 "promptEn": "fast-cut spaceship trailer title sequence",
3746   - "lastPlayedAt": 1788233332981
  3761 + "lastPlayedAt": 1788247744340
3747 3762 },
3748 3763 {
3749 3764 "id": "1e55e540df11",
... ... @@ -3758,7 +3773,7 @@
3758 3773 "likes": 0,
3759 3774 "createdAt": 1787461994394,
3760 3775 "promptEn": "a quiet mountain village at dawn (second attempt)",
3761   - "lastPlayedAt": 1788238893265
  3776 + "lastPlayedAt": 1788248859286
3762 3777 },
3763 3778 {
3764 3779 "id": "8e16b6faafd9",
... ... @@ -3773,7 +3788,7 @@
3773 3788 "likes": 0,
3774 3789 "createdAt": 1787455895150,
3775 3790 "promptEn": "protagonist leaps across rooftops fleeing pursuers",
3776   - "lastPlayedAt": 1788238458919
  3791 + "lastPlayedAt": 1788249507592
3777 3792 },
3778 3793 {
3779 3794 "id": "2a4e45820135",
... ... @@ -3788,7 +3803,7 @@
3788 3803 "likes": 0,
3789 3804 "createdAt": 1787453697093,
3790 3805 "promptEn": "protagonist leaps across rooftops fleeing pursuers",
3791   - "lastPlayedAt": 1788238106611
  3806 + "lastPlayedAt": 1788248464962
3792 3807 },
3793 3808 {
3794 3809 "id": "bfe13d1cc4a2",
... ... @@ -3803,7 +3818,7 @@
3803 3818 "likes": 0,
3804 3819 "createdAt": 1787452521817,
3805 3820 "promptEn": "protagonist leaps across rooftops fleeing pursuers",
3806   - "lastPlayedAt": 1788238250741
  3821 + "lastPlayedAt": 1788249657655
3807 3822 },
3808 3823 {
3809 3824 "id": "f36cdd73ff1b",
... ... @@ -3818,7 +3833,7 @@
3818 3833 "likes": 0,
3819 3834 "createdAt": 1787450754171,
3820 3835 "promptEn": "protagonist leaps across rooftops fleeing pursuers",
3821   - "lastPlayedAt": 1788237818368
  3836 + "lastPlayedAt": 1788246511317
3822 3837 },
3823 3838 {
3824 3839 "id": "fd0183c54763",
... ... @@ -3833,7 +3848,7 @@
3833 3848 "likes": 0,
3834 3849 "createdAt": 1787447175021,
3835 3850 "promptEn": "protagonist leaps across rooftops fleeing pursuers",
3836   - "lastPlayedAt": 1788238641079
  3851 + "lastPlayedAt": 1788247824398
3837 3852 },
3838 3853 {
3839 3854 "id": "4580ca66725a",
... ... @@ -3848,7 +3863,7 @@
3848 3863 "likes": 0,
3849 3864 "createdAt": 1787444313690,
3850 3865 "promptEn": "protagonist leaps across rooftops fleeing pursuers",
3851   - "lastPlayedAt": 1788239810044
  3866 + "lastPlayedAt": 1788246104977
3852 3867 },
3853 3868 {
3854 3869 "id": "e56962bd770f",
... ... @@ -3863,7 +3878,7 @@
3863 3878 "likes": 0,
3864 3879 "createdAt": 1787442174982,
3865 3880 "promptEn": "protagonist leaps across rooftops fleeing pursuers",
3866   - "lastPlayedAt": 1788237380102
  3881 + "lastPlayedAt": 1788248334845
3867 3882 },
3868 3883 {
3869 3884 "id": "18105bc2900b",
... ... @@ -3878,7 +3893,7 @@
3878 3893 "likes": 0,
3879 3894 "createdAt": 1787437988124,
3880 3895 "promptEn": "protagonist leaps across rooftops fleeing pursuers",
3881   - "lastPlayedAt": 1788238979307
  3896 + "lastPlayedAt": 1788247948508
3882 3897 },
3883 3898 {
3884 3899 "id": "e497093c79ce",
... ... @@ -3893,7 +3908,7 @@
3893 3908 "likes": 0,
3894 3909 "createdAt": 1787436029475,
3895 3910 "promptEn": "protagonist leaps across rooftops fleeing pursuers",
3896   - "lastPlayedAt": 1788234989999
  3911 + "lastPlayedAt": 1788243140456
3897 3912 },
3898 3913 {
3899 3914 "id": "896859e59dae",
... ... @@ -3908,7 +3923,7 @@
3908 3923 "likes": 0,
3909 3924 "createdAt": 1787432295531,
3910 3925 "promptEn": "protagonist leaps across rooftops fleeing pursuers",
3911   - "lastPlayedAt": 1788236229080
  3926 + "lastPlayedAt": 1788248396902
3912 3927 },
3913 3928 {
3914 3929 "id": "79368c9cf499",
... ... @@ -3923,7 +3938,7 @@
3923 3938 "likes": 0,
3924 3939 "createdAt": 1787428860940,
3925 3940 "promptEn": "protagonist leaps across rooftops fleeing pursuers",
3926   - "lastPlayedAt": 1788236855644
  3941 + "lastPlayedAt": 1788249125420
3927 3942 },
3928 3943 {
3929 3944 "id": "dbc7c27b72ba",
... ... @@ -3938,7 +3953,7 @@
3938 3953 "likes": 0,
3939 3954 "createdAt": 1787426955312,
3940 3955 "promptEn": "protagonist leaps across rooftops fleeing pursuers",
3941   - "lastPlayedAt": 1788236901679
  3956 + "lastPlayedAt": 1788248098632
3942 3957 },
3943 3958 {
3944 3959 "id": "734d28c52670",
... ... @@ -3953,7 +3968,7 @@
3953 3968 "likes": 0,
3954 3969 "createdAt": 1787426484939,
3955 3970 "promptEn": "small boat sailing through a misty forest river",
3956   - "lastPlayedAt": 1788236929703
  3971 + "lastPlayedAt": 1788248206733
3957 3972 },
3958 3973 {
3959 3974 "id": "9fbcf0d87021",
... ... @@ -3968,7 +3983,7 @@
3968 3983 "likes": 0,
3969 3984 "createdAt": 1787425932119,
3970 3985 "promptEn": "lighthouse on a cliff at sunset, seagulls flying",
3971   - "lastPlayedAt": 1788239634566
  3986 + "lastPlayedAt": 1788247590216
3972 3987 },
3973 3988 {
3974 3989 "id": "cf2015093ec4",
... ... @@ -3983,7 +3998,7 @@
3983 3998 "likes": 0,
3984 3999 "createdAt": 1787415067615,
3985 4000 "promptEn": "protagonist leaps across rooftops fleeing pursuers",
3986   - "lastPlayedAt": 1788239461561
  4001 + "lastPlayedAt": 1788249017364
3987 4002 },
3988 4003 {
3989 4004 "id": "9bcff387cddf",
... ... @@ -3998,7 +4013,7 @@
3998 4013 "likes": 0,
3999 4014 "createdAt": 1787413999418,
4000 4015 "promptEn": "protagonist leaps across rooftops fleeing pursuers",
4001   - "lastPlayedAt": 1788239201420
  4016 + "lastPlayedAt": 1788247492126
4002 4017 },
4003 4018 {
4004 4019 "id": "ade0318a7a4a",
... ... @@ -4013,7 +4028,7 @@
4013 4028 "likes": 0,
4014 4029 "createdAt": 1787413511959,
4015 4030 "promptEn": "protagonist leaps across rooftops fleeing pursuers",
4016   - "lastPlayedAt": 1788237392113
  4031 + "lastPlayedAt": 1788241595119
4017 4032 },
4018 4033 {
4019 4034 "id": "5d4f40bf0889",
... ... @@ -4028,7 +4043,7 @@
4028 4043 "likes": 0,
4029 4044 "createdAt": 1787412952086,
4030 4045 "promptEn": "protagonist leaps across rooftops fleeing pursuers",
4031   - "lastPlayedAt": 1788238436902
  4046 + "lastPlayedAt": 1788245274259
4032 4047 },
4033 4048 {
4034 4049 "id": "59fd7a087f5b",
... ... @@ -4043,7 +4058,7 @@
4043 4058 "likes": 0,
4044 4059 "createdAt": 1787412606465,
4045 4060 "promptEn": "protagonist leaps across rooftops fleeing pursuers",
4046   - "lastPlayedAt": 1788238819228
  4061 + "lastPlayedAt": 1788246453270
4047 4062 },
4048 4063 {
4049 4064 "id": "29a99dc412b2",
... ... @@ -4058,7 +4073,7 @@
4058 4073 "likes": 0,
4059 4074 "createdAt": 1787412150062,
4060 4075 "promptEn": "protagonist leaps across rooftops fleeing pursuers",
4061   - "lastPlayedAt": 1788239387526
  4076 + "lastPlayedAt": 1788249081394
4062 4077 },
4063 4078 {
4064 4079 "id": "9d2486d6f969",
... ... @@ -4073,7 +4088,7 @@
4073 4088 "likes": 0,
4074 4089 "createdAt": 1787397450973,
4075 4090 "promptEn": "a cat sitting on a windowsill",
4076   - "lastPlayedAt": 1788235350315
  4091 + "lastPlayedAt": 1788249343516
4077 4092 },
4078 4093 {
4079 4094 "id": "580d1d722adc",
... ... @@ -4088,7 +4103,7 @@
4088 4103 "likes": 0,
4089 4104 "createdAt": 1787388090646,
4090 4105 "promptEn": "a cat sitting on a windowsill",
4091   - "lastPlayedAt": 1788235956854
  4106 + "lastPlayedAt": 1788245762695
4092 4107 },
4093 4108 {
4094 4109 "id": "c551457bc55e",
... ... @@ -4102,7 +4117,7 @@
4102 4117 "partition": "text",
4103 4118 "likes": 0,
4104 4119 "createdAt": 1787386316175,
4105   - "lastPlayedAt": 1788239634555,
  4120 + "lastPlayedAt": 1788245308283,
4106 4121 "promptEn": "a cat sitting on a windowsill"
4107 4122 },
4108 4123 {
... ... @@ -4118,7 +4133,7 @@
4118 4133 "likes": 0,
4119 4134 "createdAt": 1787384983124,
4120 4135 "promptEn": "protagonist leaps across rooftops fleeing pursuers",
4121   - "lastPlayedAt": 1788239576512
  4136 + "lastPlayedAt": 1788247864432
4122 4137 },
4123 4138 {
4124 4139 "id": "7753a046ba79",
... ... @@ -4133,7 +4148,7 @@
4133 4148 "likes": 0,
4134 4149 "createdAt": 1787384417941,
4135 4150 "promptEn": "protagonist leaps across rooftops fleeing pursuers",
4136   - "lastPlayedAt": 1788239696610
  4151 + "lastPlayedAt": 1788248669135
4137 4152 },
4138 4153 {
4139 4154 "id": "2cf5c8e67510",
... ... @@ -4148,7 +4163,7 @@
4148 4163 "likes": 0,
4149 4164 "createdAt": 1787383911831,
4150 4165 "promptEn": "protagonist leaps across rooftops fleeing pursuers",
4151   - "lastPlayedAt": 1788239227431
  4166 + "lastPlayedAt": 1788245394359
4152 4167 },
4153 4168 {
4154 4169 "id": "9cba879e263d",
... ... @@ -4163,7 +4178,7 @@
4163 4178 "likes": 0,
4164 4179 "createdAt": 1787375413935,
4165 4180 "promptEn": "protagonist leaps across rooftops fleeing pursuers",
4166   - "lastPlayedAt": 1788239578514
  4181 + "lastPlayedAt": 1788248671135
4167 4182 },
4168 4183 {
4169 4184 "id": "10112fb3c1fd",
... ... @@ -4178,7 +4193,7 @@
4178 4193 "likes": 0,
4179 4194 "createdAt": 1787375413623,
4180 4195 "promptEn": "golden portal opens, man in green jacket throws a glowing spear",
4181   - "lastPlayedAt": 1788238094600
  4196 + "lastPlayedAt": 1788248286801
4182 4197 },
4183 4198 {
4184 4199 "id": "78e698c924b1",
... ... @@ -4193,7 +4208,7 @@
4193 4208 "likes": 0,
4194 4209 "createdAt": 1787375413203,
4195 4210 "promptEn": "golden portal opens, man in green jacket throws a glowing spear",
4196   - "lastPlayedAt": 1788239359509
  4211 + "lastPlayedAt": 1788247438073
4197 4212 },
4198 4213 {
4199 4214 "id": "219ed88c3ea7",
... ... @@ -4208,7 +4223,7 @@
4208 4223 "likes": 0,
4209 4224 "createdAt": 1787375412946,
4210 4225 "promptEn": "golden portal opens, man in green jacket throws a glowing spear",
4211   - "lastPlayedAt": 1788238897263
  4226 + "lastPlayedAt": 1788245734672
4212 4227 },
4213 4228 {
4214 4229 "id": "a72236902363",
... ... @@ -4223,7 +4238,7 @@
4223 4238 "likes": 0,
4224 4239 "createdAt": 1787367454249,
4225 4240 "promptEn": "golden portal opens, man in green jacket throws a glowing spear",
4226   - "lastPlayedAt": 1788235826739
  4241 + "lastPlayedAt": 1788246703457
4227 4242 },
4228 4243 {
4229 4244 "id": "c48af2f34e62",
... ... @@ -4238,7 +4253,7 @@
4238 4253 "likes": 0,
4239 4254 "createdAt": 1787367454065,
4240 4255 "promptEn": "golden portal opens, man in green jacket throws a glowing spear",
4241   - "lastPlayedAt": 1788238623063
  4256 + "lastPlayedAt": 1788245668612
4242 4257 },
4243 4258 {
4244 4259 "id": "e6c241be377f",
... ... @@ -4253,7 +4268,7 @@
4253 4268 "likes": 0,
4254 4269 "createdAt": 1787367453839,
4255 4270 "promptEn": "golden portal opens, man in green jacket throws a glowing spear",
4256   - "lastPlayedAt": 1788239055341
  4271 + "lastPlayedAt": 1788244952031
4257 4272 },
4258 4273 {
4259 4274 "id": "8402adae59dc",
... ... @@ -4268,7 +4283,7 @@
4268 4283 "likes": 0,
4269 4284 "createdAt": 1787363956909,
4270 4285 "promptEn": "protagonist leaps across rooftops fleeing pursuers",
4271   - "lastPlayedAt": 1788238048564
  4286 + "lastPlayedAt": 1788247205863
4272 4287 },
4273 4288 {
4274 4289 "id": "5692965402f5",
... ... @@ -4283,7 +4298,7 @@
4283 4298 "likes": 0,
4284 4299 "createdAt": 1787332996051,
4285 4300 "promptEn": "golden portal opens, man in green jacket throws a glowing spear",
4286   - "lastPlayedAt": 1788238937288
  4301 + "lastPlayedAt": 1788247490125
4287 4302 },
4288 4303 {
4289 4304 "id": "bf7d973d02a3",
... ... @@ -4298,7 +4313,7 @@
4298 4313 "likes": 0,
4299 4314 "createdAt": 1787332047061,
4300 4315 "promptEn": "golden portal opens, man in green jacket throws a glowing spear",
4301   - "lastPlayedAt": 1788238663091
  4316 + "lastPlayedAt": 1788241785296
4302 4317 },
4303 4318 {
4304 4319 "id": "a5688d8f5db3",
... ... @@ -4313,7 +4328,7 @@
4313 4328 "likes": 0,
4314 4329 "createdAt": 1787330101793,
4315 4330 "promptEn": "a red apple on a wooden table, cinematic lighting",
4316   - "lastPlayedAt": 1788239409539
  4331 + "lastPlayedAt": 1788246901624
4317 4332 },
4318 4333 {
4319 4334 "id": "0024d3c2d4cb",
... ... @@ -4328,7 +4343,7 @@
4328 4343 "likes": 0,
4329 4344 "createdAt": 1787326019663,
4330 4345 "promptEn": "misty Jiangnan old town at dawn, woman walking with an oil-paper umbrella",
4331   - "lastPlayedAt": 1788232570541
  4346 + "lastPlayedAt": 1788248282796
4332 4347 },
4333 4348 {
4334 4349 "id": "ab42a6fba515",
... ... @@ -4343,7 +4358,7 @@
4343 4358 "likes": 0,
4344 4359 "createdAt": 1787326019290,
4345 4360 "promptEn": "misty Jiangnan old town at dawn, woman walking with an oil-paper umbrella",
4346   - "lastPlayedAt": 1788239121373
  4361 + "lastPlayedAt": 1788247508139
4347 4362 },
4348 4363 {
4349 4364 "id": "fd8534ce588c",
... ... @@ -4358,7 +4373,7 @@
4358 4373 "likes": 0,
4359 4374 "createdAt": 1787309864037,
4360 4375 "promptEn": "transparent gaming mouse product film, blue and orange lighting",
4361   - "lastPlayedAt": 1788237984509
  4376 + "lastPlayedAt": 1788248827266
4362 4377 },
4363 4378 {
4364 4379 "id": "073f5df6427a",
... ... @@ -4373,7 +4388,7 @@
4373 4388 "likes": 0,
4374 4389 "createdAt": 1787305544815,
4375 4390 "promptEn": "transparent gaming mouse product film, blue and orange lighting",
4376   - "lastPlayedAt": 1788239497567
  4391 + "lastPlayedAt": 1788247706310
4377 4392 },
4378 4393 {
4379 4394 "id": "e23b04ac2c78",
... ... @@ -4388,7 +4403,7 @@
4388 4403 "likes": 0,
4389 4404 "createdAt": 1787304875681,
4390 4405 "promptEn": "protagonist leaps across rooftops fleeing pursuers",
4391   - "lastPlayedAt": 1788239217427
  4406 + "lastPlayedAt": 1788249393534
4392 4407 },
4393 4408 {
4394 4409 "id": "c84bc1c7bfa0",
... ... @@ -4403,7 +4418,7 @@
4403 4418 "likes": 0,
4404 4419 "createdAt": 1787304031214,
4405 4420 "promptEn": "constable asks how she's sure it's not human, she says a person would make a sound",
4406   - "lastPlayedAt": 1788239229433
  4421 + "lastPlayedAt": 1788249309501
4407 4422 },
4408 4423 {
4409 4424 "id": "23d2fd81eb4d",
... ... @@ -4418,7 +4433,7 @@
4418 4433 "likes": 0,
4419 4434 "createdAt": 1787304031103,
4420 4435 "promptEn": "constable asks how she's sure it's not human, she says a person would make a sound",
4421   - "lastPlayedAt": 1788239666580
  4436 + "lastPlayedAt": 1788249193447
4422 4437 },
4423 4438 {
4424 4439 "id": "807e042dce0d",
... ... @@ -4433,7 +4448,7 @@
4433 4448 "likes": 0,
4434 4449 "createdAt": 1787290119529,
4435 4450 "promptEn": "misty Jiangnan old town at dawn, woman walking with an oil-paper umbrella",
4436   - "lastPlayedAt": 1788237290006
  4451 + "lastPlayedAt": 1788249287492
4437 4452 },
4438 4453 {
4439 4454 "id": "06bb43196c46",
... ... @@ -4448,7 +4463,7 @@
4448 4463 "likes": 0,
4449 4464 "createdAt": 1787290119114,
4450 4465 "promptEn": "misty Jiangnan old town at dawn, woman walking with an oil-paper umbrella",
4451   - "lastPlayedAt": 1788238827234
  4466 + "lastPlayedAt": 1788248170701
4452 4467 },
4453 4468 {
4454 4469 "id": "0f22388f7847",
... ... @@ -4463,7 +4478,7 @@
4463 4478 "likes": 0,
4464 4479 "createdAt": 1787290118806,
4465 4480 "promptEn": "misty Jiangnan old town at dawn, woman walking with an oil-paper umbrella",
4466   - "lastPlayedAt": 1788235388347
  4481 + "lastPlayedAt": 1788247756349
4467 4482 },
4468 4483 {
4469 4484 "id": "0c67d73b06d4",
... ... @@ -4478,7 +4493,7 @@
4478 4493 "likes": 0,
4479 4494 "createdAt": 1787231456079,
4480 4495 "promptEn": "constable burns the beauty portrait with the lamp, the door opens on its own",
4481   - "lastPlayedAt": 1788237107861
  4496 + "lastPlayedAt": 1788246433257
4482 4497 },
4483 4498 {
4484 4499 "id": "66158f543a20",
... ... @@ -4493,7 +4508,7 @@
4493 4508 "likes": 0,
4494 4509 "createdAt": 1787231440149,
4495 4510 "promptEn": "constable burns the beauty portrait with the lamp, the door opens on its own",
4496   - "lastPlayedAt": 1788239377519
  4511 + "lastPlayedAt": 1788246941650
4497 4512 },
4498 4513 {
4499 4514 "id": "63c91f4b6bc7",
... ... @@ -4508,7 +4523,7 @@
4508 4523 "likes": 0,
4509 4524 "createdAt": 1787225897650,
4510 4525 "promptEn": "constable burns the beauty portrait with the lamp, the door opens on its own",
4511   - "lastPlayedAt": 1788236947717
  4526 + "lastPlayedAt": 1788247380017
4512 4527 },
4513 4528 {
4514 4529 "id": "ed3663dcda7f",
... ... @@ -4522,7 +4537,7 @@
4522 4537 "partition": "fl2va",
4523 4538 "likes": 0,
4524 4539 "createdAt": 1787224701504,
4525   - "lastPlayedAt": 1788238719143,
  4540 + "lastPlayedAt": 1788247614231,
4526 4541 "promptEn": "constable burns the beauty portrait with the lamp, the door opens on its own"
4527 4542 },
4528 4543 {
... ... @@ -4538,7 +4553,7 @@
4538 4553 "likes": 0,
4539 4554 "createdAt": 1787224519456,
4540 4555 "promptEn": "constable burns the beauty portrait with the lamp, the door opens on its own",
4541   - "lastPlayedAt": 1788239742011
  4556 + "lastPlayedAt": 1788244245424
4542 4557 },
4543 4558 {
4544 4559 "id": "a1cc621cc6b2",
... ... @@ -4553,6 +4568,6 @@
4553 4568 "likes": 0,
4554 4569 "createdAt": 1787220579189,
4555 4570 "promptEn": "gothic castle at night, vampire noble carries a princess, rose petals falling",
4556   - "lastPlayedAt": 1788239073351
  4571 + "lastPlayedAt": 1788248725194
4557 4572 }
4558 4573 ]
4559 4574 \ No newline at end of file
... ...
live.css
... ... @@ -176,6 +176,21 @@ body {
176 176 color: var(--muted);
177 177 padding: 12px 14px 6px;
178 178 }
  179 +.chat-title-row { display: flex; align-items: center; justify-content: space-between; }
  180 +.nickname-edit-btn {
  181 + background: transparent;
  182 + border: 1px solid var(--border);
  183 + color: var(--muted);
  184 + font-size: 11px;
  185 + font-weight: 700;
  186 + text-transform: none;
  187 + letter-spacing: normal;
  188 + border-radius: 999px;
  189 + padding: 3px 10px;
  190 + cursor: pointer;
  191 +}
  192 +.nickname-edit-btn:hover { color: #fff; border-color: var(--muted); }
  193 +.nickname-edit-btn #currentNickname { color: var(--accent); }
179 194 .chat-list {
180 195 flex: 1;
181 196 overflow-y: auto;
... ...
live.html
... ... @@ -40,7 +40,10 @@
40 40 </div>
41 41  
42 42 <aside class="right-col" id="rightCol" hidden>
43   - <div class="section-title">聊天</div>
  43 + <div class="section-title chat-title-row">
  44 + <span>聊天</span>
  45 + <button class="nickname-edit-btn" id="nicknameEditBtn">昵称 <span id="currentNickname">未设置</span> ✎</button>
  46 + </div>
44 47 <div class="chat-list" id="chatList"></div>
45 48 <div class="chat-input-row">
46 49 <input type="text" id="chatInput" placeholder="说点什么,或者想看什么…" maxlength="300" />
... ... @@ -94,6 +97,8 @@ const muteBtn = document.getElementById(&quot;muteBtn&quot;);
94 97 const nicknameModal = document.getElementById("nicknameModal");
95 98 const nicknameInput = document.getElementById("nicknameInput");
96 99 const nicknameConfirmBtn = document.getElementById("nicknameConfirmBtn");
  100 +const nicknameEditBtn = document.getElementById("nicknameEditBtn");
  101 +const currentNickname = document.getElementById("currentNickname");
97 102 const clientId = Math.random().toString(36).slice(2);
98 103  
99 104 muteBtn.addEventListener("click", () => {
... ... @@ -123,27 +128,56 @@ function getIdentity() {
123 128 const nickname = getCookie("viewer_nickname");
124 129 return uid && nickname ? { uid, nickname } : null;
125 130 }
126   -function ensureIdentity() {
  131 +function updateNicknameLabel() {
127 132 const existing = getIdentity();
128   - if (existing) return Promise.resolve(existing);
  133 + currentNickname.textContent = existing ? existing.nickname : "未设置";
  134 +}
  135 +
  136 +// Shared by first-time setup and the always-visible "昵称 ✎" edit button.
  137 +function openNicknameModal(prefill) {
129 138 return new Promise((resolve) => {
130 139 nicknameModal.hidden = false;
131   - nicknameInput.value = "";
  140 + nicknameInput.value = prefill || "";
132 141 nicknameInput.focus();
133 142 const onConfirm = () => {
134 143 const nickname = nicknameInput.value.trim().slice(0, 20);
135 144 if (!nickname) return;
136   - const uid = (crypto.randomUUID ? crypto.randomUUID() : `${Date.now()}-${Math.random().toString(36).slice(2)}`);
137   - setCookie("viewer_uid", uid, 365);
138   - setCookie("viewer_nickname", nickname, 365);
139 145 nicknameModal.hidden = true;
140 146 nicknameConfirmBtn.removeEventListener("click", onConfirm);
141   - resolve({ uid, nickname });
  147 + nicknameInput.removeEventListener("keydown", onKeydown);
  148 + resolve(nickname);
  149 + };
  150 + const onKeydown = (e) => {
  151 + if (e.key === "Enter") onConfirm();
142 152 };
143 153 nicknameConfirmBtn.addEventListener("click", onConfirm);
  154 + nicknameInput.addEventListener("keydown", onKeydown);
  155 + });
  156 +}
  157 +
  158 +function ensureIdentity() {
  159 + const existing = getIdentity();
  160 + if (existing) return Promise.resolve(existing);
  161 + return openNicknameModal("").then((nickname) => {
  162 + const uid = crypto.randomUUID ? crypto.randomUUID() : `${Date.now()}-${Math.random().toString(36).slice(2)}`;
  163 + setCookie("viewer_uid", uid, 365);
  164 + setCookie("viewer_nickname", nickname, 365);
  165 + updateNicknameLabel();
  166 + return { uid, nickname };
144 167 });
145 168 }
146 169  
  170 +nicknameEditBtn.addEventListener("click", async () => {
  171 + const existing = getIdentity();
  172 + const nickname = await openNicknameModal(existing ? existing.nickname : "");
  173 + const uid = existing ? existing.uid : crypto.randomUUID ? crypto.randomUUID() : `${Date.now()}-${Math.random().toString(36).slice(2)}`;
  174 + setCookie("viewer_uid", uid, 365);
  175 + setCookie("viewer_nickname", nickname, 365);
  176 + updateNicknameLabel();
  177 +});
  178 +
  179 +updateNicknameLabel();
  180 +
147 181 function renderBrowseList() {
148 182 if (clips.length === 0) {
149 183 clipList.innerHTML = `<div class="empty-hint">片段库为空</div>`;
... ...