GameSentenceMiner 2.17.7__py3-none-any.whl → 2.18.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of GameSentenceMiner might be problematic. Click here for more details.

Files changed (76) hide show
  1. GameSentenceMiner/ai/ai_prompting.py +6 -6
  2. GameSentenceMiner/anki.py +236 -152
  3. GameSentenceMiner/gametext.py +7 -4
  4. GameSentenceMiner/gsm.py +49 -10
  5. GameSentenceMiner/locales/en_us.json +7 -3
  6. GameSentenceMiner/locales/ja_jp.json +8 -4
  7. GameSentenceMiner/locales/zh_cn.json +8 -4
  8. GameSentenceMiner/obs.py +238 -59
  9. GameSentenceMiner/ocr/owocr_helper.py +1 -1
  10. GameSentenceMiner/tools/ss_selector.py +7 -8
  11. GameSentenceMiner/ui/__init__.py +0 -0
  12. GameSentenceMiner/ui/anki_confirmation.py +187 -0
  13. GameSentenceMiner/{config_gui.py → ui/config_gui.py} +100 -35
  14. GameSentenceMiner/ui/screenshot_selector.py +215 -0
  15. GameSentenceMiner/util/configuration.py +124 -22
  16. GameSentenceMiner/util/db.py +22 -13
  17. GameSentenceMiner/util/downloader/download_tools.py +2 -2
  18. GameSentenceMiner/util/ffmpeg.py +24 -30
  19. GameSentenceMiner/util/get_overlay_coords.py +34 -34
  20. GameSentenceMiner/util/gsm_utils.py +31 -1
  21. GameSentenceMiner/util/text_log.py +11 -9
  22. GameSentenceMiner/vad.py +31 -12
  23. GameSentenceMiner/web/database_api.py +742 -123
  24. GameSentenceMiner/web/static/css/dashboard-shared.css +241 -0
  25. GameSentenceMiner/web/static/css/kanji-grid.css +94 -2
  26. GameSentenceMiner/web/static/css/overview.css +850 -0
  27. GameSentenceMiner/web/static/css/popups-shared.css +126 -0
  28. GameSentenceMiner/web/static/css/shared.css +97 -0
  29. GameSentenceMiner/web/static/css/stats.css +192 -597
  30. GameSentenceMiner/web/static/js/anki_stats.js +6 -4
  31. GameSentenceMiner/web/static/js/database.js +209 -5
  32. GameSentenceMiner/web/static/js/goals.js +610 -0
  33. GameSentenceMiner/web/static/js/kanji-grid.js +267 -4
  34. GameSentenceMiner/web/static/js/overview.js +1176 -0
  35. GameSentenceMiner/web/static/js/shared.js +25 -0
  36. GameSentenceMiner/web/static/js/stats.js +154 -1459
  37. GameSentenceMiner/web/stats.py +2 -2
  38. GameSentenceMiner/web/templates/anki_stats.html +5 -0
  39. GameSentenceMiner/web/templates/components/kanji_grid/basic_kanji_book_bkb_v1_v2.json +17 -0
  40. GameSentenceMiner/web/templates/components/kanji_grid/duolingo_kanji.json +29 -0
  41. GameSentenceMiner/web/templates/components/kanji_grid/grade.json +17 -0
  42. GameSentenceMiner/web/templates/components/kanji_grid/hk_primary_learning.json +17 -0
  43. GameSentenceMiner/web/templates/components/kanji_grid/hkscs2016.json +13 -0
  44. GameSentenceMiner/web/templates/components/kanji_grid/hsk_levels.json +33 -0
  45. GameSentenceMiner/web/templates/components/kanji_grid/humanum_frequency_list.json +41 -0
  46. GameSentenceMiner/web/templates/components/kanji_grid/jis_levels.json +25 -0
  47. GameSentenceMiner/web/templates/components/kanji_grid/jlpt_level.json +29 -0
  48. GameSentenceMiner/web/templates/components/kanji_grid/jpdb_kanji_frequency_list.json +37 -0
  49. GameSentenceMiner/web/templates/components/kanji_grid/jpdbv2_kanji_frequency_list.json +161 -0
  50. GameSentenceMiner/web/templates/components/kanji_grid/jun_das_modern_chinese_character_frequency_list.json +13 -0
  51. GameSentenceMiner/web/templates/components/kanji_grid/kanji_in_context_revised_edition.json +37 -0
  52. GameSentenceMiner/web/templates/components/kanji_grid/kanji_kentei_level.json +61 -0
  53. GameSentenceMiner/web/templates/components/kanji_grid/mainland_china_elementary_textbook_characters.json +33 -0
  54. GameSentenceMiner/web/templates/components/kanji_grid/moe_way_quiz.json +47 -0
  55. GameSentenceMiner/web/templates/components/kanji_grid/official_kanji.json +25 -0
  56. GameSentenceMiner/web/templates/components/kanji_grid/remembering_the_kanji.json +25 -0
  57. GameSentenceMiner/web/templates/components/kanji_grid/standard_form_of_national_characters.json +25 -0
  58. GameSentenceMiner/web/templates/components/kanji_grid/table_of_general_standard_chinese_characters.json +21 -0
  59. GameSentenceMiner/web/templates/components/kanji_grid/the_kodansha_kanji_learners_course_klc.json +45 -0
  60. GameSentenceMiner/web/templates/components/kanji_grid/thousand_character_classic.json +13 -0
  61. GameSentenceMiner/web/templates/components/kanji_grid/wanikani_levels.json +249 -0
  62. GameSentenceMiner/web/templates/components/kanji_grid/words_hk_frequency_list.json +33 -0
  63. GameSentenceMiner/web/templates/components/navigation.html +3 -1
  64. GameSentenceMiner/web/templates/database.html +73 -1
  65. GameSentenceMiner/web/templates/goals.html +376 -0
  66. GameSentenceMiner/web/templates/index.html +13 -11
  67. GameSentenceMiner/web/templates/overview.html +416 -0
  68. GameSentenceMiner/web/templates/stats.html +46 -251
  69. GameSentenceMiner/web/texthooking_page.py +18 -0
  70. {gamesentenceminer-2.17.7.dist-info → gamesentenceminer-2.18.1.dist-info}/METADATA +5 -1
  71. gamesentenceminer-2.18.1.dist-info/RECORD +132 -0
  72. gamesentenceminer-2.17.7.dist-info/RECORD +0 -98
  73. {gamesentenceminer-2.17.7.dist-info → gamesentenceminer-2.18.1.dist-info}/WHEEL +0 -0
  74. {gamesentenceminer-2.17.7.dist-info → gamesentenceminer-2.18.1.dist-info}/entry_points.txt +0 -0
  75. {gamesentenceminer-2.17.7.dist-info → gamesentenceminer-2.18.1.dist-info}/licenses/LICENSE +0 -0
  76. {gamesentenceminer-2.17.7.dist-info → gamesentenceminer-2.18.1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,249 @@
1
+ {
2
+ "version": 1,
3
+ "name": "WaniKani Levels",
4
+ "lang": "ja",
5
+ "source": "https://community.wanikani.com/t/list-of-all-wanikani-kanji-with-their-level/61644/12",
6
+ "leftover_group": "Not in WaniKani Levels",
7
+ "groups": [
8
+ {
9
+ "name": "Level 1",
10
+ "characters": "一二九七人入八力十三上下口大女山川工"
11
+ },
12
+ {
13
+ "name": "Level 2",
14
+ "characters": "刀土千夕子小丁了丸才中五六円天手文日月木水火犬王出右四左本正玉田白目立"
15
+ },
16
+ {
17
+ "name": "Level 3",
18
+ "characters": "万今元内分切午友太少引心戸方牛父毛止冬北半古台外市広母用矢生"
19
+ },
20
+ {
21
+ "name": "Level 4",
22
+ "characters": "石世主他代写去号央平打氷申皿礼休先名字年早気百竹糸耳虫村男町花見貝赤足車不仕宝"
23
+ },
24
+ {
25
+ "name": "Level 5",
26
+ "characters": "兄皮交会光同回多当毎米羽考肉自色行西何体作図声弟形来社角言谷走近里麦学林空金雨青草音斤"
27
+ },
28
+ {
29
+ "name": "Level 6",
30
+ "characters": "化地両全向安州曲有次死羊血京国夜妹姉店明東歩画直知長前南室後思星活海点科茶食首亡私"
31
+ },
32
+ {
33
+ "name": "Level 7",
34
+ "characters": "欠氏由札民辺付以失必未末校夏家弱時紙記通高強教理組船週雪魚鳥黄黒風"
35
+ },
36
+ {
37
+ "name": "Level 8",
38
+ "characters": "池支住助医君対局役投決究身者研馬森場朝番答絵買道間雲数楽話電所反"
39
+ },
40
+ {
41
+ "name": "Level 9",
42
+ "characters": "売事使具受和定実服泳物苦表部乗客屋度持界発相県美負送重談要勝仮予新返保試験"
43
+ },
44
+ {
45
+ "name": "Level 10",
46
+ "characters": "公始起速配酒院終習転進落葉軽運開集飲業漢路農鉄歌算聞語読鳴線横調親頭顔病最求頁"
47
+ },
48
+ {
49
+ "name": "Level 11",
50
+ "characters": "争仲伝共好成老位低初別利努労命岸放昔波注育拾指洋神秒級追戦競良功特便働令意味"
51
+ },
52
+ {
53
+ "name": "Level 12",
54
+ "characters": "待勉庭息旅根流消倍員島祭章第都動商悪族深球童陽階寒暑期植歯温港湯登着短野泉合僕"
55
+ },
56
+ {
57
+ "name": "Level 13",
58
+ "characters": "問宿想感整暗様橋緑練詩銀題館駅億器士料標殺然熱課賞輪選鏡願養像情謝映疑皆"
59
+ },
60
+ {
61
+ "name": "Level 14",
62
+ "characters": "例卒協参周囲固季完希念折望材束松残的約芸基性格能骨妥雰頑苺狼"
63
+ },
64
+ {
65
+ "name": "Level 15",
66
+ "characters": "福技術寺岩帰春昼晴秋計列区坂式信勇単司変夫建昨毒法泣浅紀英軍飯仏築晩猫払匹丈"
67
+ },
68
+ {
69
+ "name": "Level 16",
70
+ "characters": "園曜書遠門係取品守幸急真箱荷面典府治浴笑辞関弁政留証険危存専冒冗阪"
71
+ },
72
+ {
73
+ "name": "Level 17",
74
+ "characters": "悲喜原細薬鼻側兵堂塩席敗果栄梅無結因常識非干是渉虚官察底愛署警恋覚説幻詳劇"
75
+ },
76
+ {
77
+ "name": "Level 18",
78
+ "characters": "訓弓告種達類報祈等汽借焼座忘洗胸脳僧禅可許枚静句禁喫煙喉叩飴苛"
79
+ },
80
+ {
81
+ "name": "Level 19",
82
+ "characters": "加節減順容布易財若詞昆閥歴舌冊宇宙忙履団暴混乱徒得改続連善絡比笛史"
83
+ },
84
+ {
85
+ "name": "Level 20",
86
+ "characters": "困災機率飛害余難妨被裕震尻尾械確嫌個圧在夢産倒臭厚妻議犯罪防穴論経"
87
+ },
88
+ {
89
+ "name": "Level 21",
90
+ "characters": "敵済委挙判制務査総設資権件派岡素断評批任検審条責省増税解際認企義羨"
91
+ },
92
+ {
93
+ "name": "Level 22",
94
+ "characters": "罰誕脱過坊寝宮各案置費価勢営示統領策藤副観値吸域姿応提援状態賀諦袖"
95
+ },
96
+ {
97
+ "name": "Level 23",
98
+ "characters": "収停革職鬼規護割裁崎演律師看準則備導幹張優宅沢贅施現乳呼城俳秀棚痒"
99
+ },
100
+ {
101
+ "name": "Level 24",
102
+ "characters": "担額製違輸燃祝届狭肩腕腰触載層型庁視差管象量境環武質述供展販株"
103
+ },
104
+ {
105
+ "name": "Level 25",
106
+ "characters": "限与含影況渡響票景抜訴訟逮補候構模捕鮮効属慣豊満肥巻捜絞輩隠掛替居捉莫"
107
+ },
108
+ {
109
+ "name": "Level 26",
110
+ "characters": "造授印創復往較筆鉛貯故障従我激刺励討郵針徴怪獣突菓河振汗豚再接独占"
111
+ },
112
+ {
113
+ "name": "Level 27",
114
+ "characters": "招段胃腹痛退屈悩暇織貸迷惑誘就訪怒昇眠睡症締迫靴濃端極途健康郎給"
115
+ },
116
+ {
117
+ "name": "Level 28",
118
+ "characters": "逆巨庫児冷凍幼稚処博清潔録隊修券婦奇妙麗微益移程精絶並憲衆傘浜撃攻綺沼"
119
+ },
120
+ {
121
+ "name": "Level 29",
122
+ "characters": "監杯乾催促欧江請雄韓壊診閣僚積督臣略航寄板街宗緊娘宴怖恐添猛烈索詰"
123
+ },
124
+ {
125
+ "name": "Level 30",
126
+ "characters": "魅渇系婚遊旗照快版貧乏適預延翌覧懐押更枕浮漏符購越飾騒背撮盗匂濡柵"
127
+ },
128
+ {
129
+ "name": "Level 31",
130
+ "characters": "離融編華既普豪鑑除尋幾廊掃泥棒驚嘆倉孫巣帯径救散粉脈菜貨陸似均墓富徳探偵"
131
+ },
132
+ {
133
+ "name": "Level 32",
134
+ "characters": "久序迎志恩採桜永液眼祖績興衛複雑賛酸銭飼傷党卵厳捨込密汚欲暖机秘訳染"
135
+ },
136
+ {
137
+ "name": "Level 33",
138
+ "characters": "簡閉誌窓否筋垂宣尊忠拡操敬暮灰熟異皇盛砂漠糖納肺著蒸蔵装裏諸賃噂股屁"
139
+ },
140
+ {
141
+ "name": "Level 34",
142
+ "characters": "誤臓貴降丼吐奴隷芋縮純縦粋聖磁紅射幕拝薦推揮沿源勤歓承損枝爪豆刻腐痩咳"
143
+ },
144
+ {
145
+ "name": "Level 35",
146
+ "characters": "遅彫測破舎講滞紹介己厄亀互剣寿彼恥杉汁噌炎為熊獄酔酢鍋湖銅油醤喋戚"
147
+ },
148
+ {
149
+ "name": "Level 36",
150
+ "characters": "旧姓貿将盟遺伸債及奈幅廃甘換摘核沖縄津献療継維舞伎踏般頼依鹿諾牙超鮭"
151
+ },
152
+ {
153
+ "name": "Level 37",
154
+ "characters": "跳昭漁償刑募執塁崩患戻抗抵旬湾爆弾聴跡遣闘陣香兆臨削契恵抱掲狙葬串眉"
155
+ },
156
+ {
157
+ "name": "Level 38",
158
+ "characters": "需齢宜繰避妊娠致刊奏伴併傾却奥慮懸房扱抑択描盤称緒緩託賄賂贈逃還膝噛璧"
159
+ },
160
+ {
161
+ "name": "Level 39",
162
+ "characters": "邦鈴阜岐隆雇控壁棋渋片群仙充免勧圏埋埼奪御慎拒枠甲斐祉稲譲謙躍銃項鋼囚宛"
163
+ },
164
+ {
165
+ "name": "Level 40",
166
+ "characters": "顧駐駆柱唱孝俊兼剤吹堀巡戒排携敏鋭敷殿犠獲茂繁頻殖薄衝誉褒透隣雅嬉妖麺拉"
167
+ },
168
+ {
169
+ "name": "Level 41",
170
+ "characters": "遜伺徹瀬撤措拠儀樹棄虎蛍蜂酎蜜墟艦潜拳炭畑包衣仁鉱至誠郷侵偽嘘凄喧嘩"
171
+ },
172
+ {
173
+ "name": "Level 42",
174
+ "characters": "克到双哲喪堅床括弧挑掘揚握揺斎暫析枢軸柄泊滑潟焦範紛糾綱網肝芝荒袋餅"
175
+ },
176
+ {
177
+ "name": "Level 43",
178
+ "characters": "誰珍裂襲貢趣距籍露牧刷朗潮即垣威封筒慰懇懲摩擦撲斉旨柔沈泰滅滋炉琴"
179
+ },
180
+ {
181
+ "name": "Level 44",
182
+ "characters": "寸竜縁翼吉刃忍桃辛謎侍俺叱娯斗朱丘梨叫釣髪嵐笠涙缶姫粒砲雷芽塔挨拶"
183
+ },
184
+ {
185
+ "name": "Level 45",
186
+ "characters": "岳澄矛肌舟鐘凶塊狩頃魂脚也井呪嬢暦曇眺裸賭疲塾卓磨菌陰霊湿硬稼嫁溝滝狂翔"
187
+ },
188
+ {
189
+ "name": "Level 46",
190
+ "characters": "墨鳩穏鈍魔寮盆棟吾斬寧椅歳涼猿瞳鍵零碁租幽泡癖鍛錬穂帝瞬菊誇庄阻黙俵綿架孔"
191
+ },
192
+ {
193
+ "name": "Level 47",
194
+ "characters": "砕粘粧欺詐霧柳伊佐尺哀唇塀墜如婆崖帽幣恨憎憩扇扉挿掌滴炊爽畳瞭箸胴芯虹巾煎"
195
+ },
196
+ {
197
+ "name": "Level 48",
198
+ "characters": "帳蚊蛇貼辱鉢闇隙霜飢餓畜迅騎蓄尽彩憶溶耐踊賢輝脅麻灯咲培悔脇遂班塗斜殴盾穫"
199
+ },
200
+ {
201
+ "name": "Level 49",
202
+ "characters": "駒紫抽誓悟拓拘礎鶴刈剛唯壇尼概浸淡煮覆謀陶隔征陛俗桑潤珠衰奨劣勘妃慌蹴"
203
+ },
204
+ {
205
+ "name": "Level 50",
206
+ "characters": "峰巧邪駄唐廷鬱鰐蟹簿彰漫訂諮銘堰堤漂翻軌后奮亭仰伯偶淀墳壮把搬晶洞涯疫"
207
+ },
208
+ {
209
+ "name": "Level 51",
210
+ "characters": "又偉頂召挟枯沸濯燥瓶耕肯脂膚軒軟郊隅隻邸郡釈肪喚媛貞玄苗渦慈襟蓮亮聡浦塚"
211
+ },
212
+ {
213
+ "name": "Level 52",
214
+ "characters": "陥貫覇呂茨擁孤賠鎖噴祥牲秩唆膨芳恒倫陳須偏遇糧殊慢没怠遭惰猟乃綾颯隼輔"
215
+ },
216
+ {
217
+ "name": "Level 53",
218
+ "characters": "寛胞浄随稿丹壌舗騰緯艇披錦准剰繊諭惨虐据徐搭蒙鯉戴緋曙胡瓜帥啓葵駿諒莉"
219
+ },
220
+ {
221
+ "name": "Level 54",
222
+ "characters": "鯨荘栽拐冠勲酬紋卸欄逸尚顕粛愚庶践呈疎疾謡鎌酷叙且痴呆哺傲茎阿悠杏茜栞"
223
+ },
224
+ {
225
+ "name": "Level 55",
226
+ "characters": "伏鎮奉憂朴栃惜佳悼該赴髄傍累癒郭尿賓虜憾弥粗循凝脊昌旦愉抹栓之龍遼瑛那勿"
227
+ },
228
+ {
229
+ "name": "Level 56",
230
+ "characters": "拍猶宰寂縫呉凡恭錯穀陵弊舶窮悦縛轄弦窒洪摂飽紳庸靖嘉搾蝶碑尉凛匠遥智柴"
231
+ },
232
+ {
233
+ "name": "Level 57",
234
+ "characters": "賊鼓旋腸槽伐漬坪紺羅峡俸醸弔乙遍衡閲喝敢膜盲胎酵堕遮烏凸凹楓哉蒼萌"
235
+ },
236
+ {
237
+ "name": "Level 58",
238
+ "characters": "瑠硫赦窃慨扶戯濁奔肖朽殻享藩媒鶏嘱迭椎絹陪剖譜淑帆憤酌暁傑錠凌瑞菅璃"
239
+ },
240
+ {
241
+ "name": "Level 59",
242
+ "characters": "忌遷拙峠篤叔雌堪吟甚崇漆岬紡礁屯姻擬睦閑曹詠卑侮鋳蔑胆浪禍酪憧慶亜汰梓沙"
243
+ },
244
+ {
245
+ "name": "Level 60",
246
+ "characters": "款漣逝匿寡痢坑藍畔唄拷渓廉謹湧醜升殉煩劾桟婿慕罷矯某泌漸藻妄蛮倹狐冥"
247
+ }
248
+ ]
249
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "version": 1,
3
+ "name": "Words.hk Frequency List",
4
+ "lang": "zh-Hant",
5
+ "source": "https://words.hk/faiman/analysis/charcount/",
6
+ "leftover_group": "Not in Words.hk Frequency List",
7
+ "groups": [
8
+ {
9
+ "name": "Top 1k Kanji",
10
+ "characters": "係我一唔嘅個有人都好你佢到就既咁會同大呢以得無要不可然去講過地但話多為出後自時下家上咗點又真之果知做生而啦日經住啲左中如面的咩心幾其成事想開對所樣己喺實呀睇文年用先只學已仲最度意當女於入再定嚟頭見問本是發港間能來行手因哋老邊仔解黎似分覺次返打冇嘢少香道前法完明身食者起理聲方埋全情亦正兩即依語野小應國俾落力叫阿三十至諗現死口相世望咪作公在聽識友算架今機水嗰字未天動走重加種笑條變緊通子將等高哈電外寫或工題更直主他晒原二氣陣太神路該第由書感句快始竟關反記部結新刻眼搵比了長放男位甚細信教數乜番平白班表場名言代夠界單常民性難愛登色終說林連令向回件清期企接隻認續受搞西錯四物低論何音車份畀化玩每候朋錢屋繼街失門近月政幫合轉慢體東著乎風任影收喇金離張雖拎美思安究線岩早流利根試提從齊士五使司例特留喎另活計此讀囉花英半求鐘萬深師角處非差買山突選且光指目驚交樂海品星內帶極視被決容傳這式義別殺步立答除粵廣詞晚總飯故市遠命持類飲八也報強業足進斷必鍾圖社坐絕程千百仍改請保黑媽觀首估考謂員啱簡支精底跟耐及易歌整馬形㗎格遊普雞戰母怪火王需空況包駛牙區六哥切麼基愈畫台腦嘛撚史確亂黃味婆樓與初功各紅噉並制推建滿科飛奇排量隨辦七價城響追把佬九輕盡資還拍客運網校假篇術拉鬼酒興權節舊婚爆治肯段那頂照們達醫警苦值止環熱產禮片共青和沒議某急調戲誠示往歷超眾古念石則房腳獨希展吓夜層唱尾爭源球態圍標仆投靚毒越堂象靜親送零執換景灣紙號痛醒證消傾啫概聞較堆顯準洲紀雙升引府看啊背牛冷套質習系餐波喂血斯統華演異勢病土院存像料怕維賣拖牌曾隊停楚舉集巴取忍藝短費袋約叔專劇碼麻忽服屌歲洗裝律局據疑票周爸級圓官派鐵便沙稱趣訓才嘩呼龍息島肉列傷破旅擇遲護境她練謝釋順倒裡管亞卡聯熟燈責散跳聖免案淨評梗喜右搭告救職兒務南德承技擊彩若廢組惡察些姐吹補痴唯願煙造皮商規印揀嫁設餘暗典居彈參溫良北永般室衝衫筆復介敢站耳隔靈魔掂預撞索速領吸濟避渣堅導李陸哦擔詩團型妹夢敗族遇畢歡偏嘴狗威屬退掛秒待微銀浪顧棄靠輪致雨驗備查激米輸際朝恐否鬧魚羅負廿擺鳩錄壓塔拜煩陳版臉充限木討貨炒歸迫修塊杯跌屎惜貴喊章雜置狂硬福元懷座戀粗罪慘股跑很燒抽茶弟添衰店兄密欣適壞沉純配鬥模伯妙控毫豬偷扮研咧漢犯群軍努捉爛爾閒創狀效吧善郁養尤歐勝嘗談貼誤智震尼曲膠幸炸富洋阻招插園陽透髮融拿守慣穿素夾武訊嬲享粒育材蛋刀封鋪雲具絲寶村略傻布蚊休判勁草嚴射抗注露橋秘許害里瞓途供暴父編翻"
11
+ },
12
+ {
13
+ "name": "Top 2k Kanji",
14
+ "characters": "揮骨借險覆夫陰互尋私劃乾批鏡弱搖付春移迷嚇祖澳減麵君闆肥優志盤禁降廁副按逐呆垃率偉嗎赤館圾忙課贏油兵唐探肚淚虛仁床臨廳碗郭衣製構賞附庭久漫閉敬烈黨戴益鬆默給吖蘭傅淡舞述辛霸助器施溝防潮帝陪毛播哲嘿申藍懶濕皇裏樹趕柱雄剩豆梁褲雪旁船亡脫財迎悲悶摸觸琛哂碌複括攻唉森宣幻抱危款缺閃忘範咬秀宗粉莫監滅佔圈尖徒灰咖佛尊巧祝憶扒漸勇獸曬廟藥賽須搶窗呃嘞攞嘈慮掌橫端讓涼絡枝吃板析沖貌博咋宜殘淺童坦田軟魂飾握幕菜乘俗逢槍卻牆嫲聚鼓距暫遺怒鑊鮮醉叻柒找游穩築鄉忠奶膽貓伸伊胸抵階河鞋譯敵側增慶核窮席測紹嘆讚厚混盒奈勞拳皆填營操汗秦遮織賭嘻兼宮楊甜幅涉緣固尚挑捨符悔葉逃鼻鳥啡甘健序梯訴辭隱凍瘋抹午嘉奮欲綠豪諸孩刺困寧岸灘積訪佈兜匯拒衛洞碟含丁夕束罩舟郎屍康拆佳嗚徑疊盛薄呵粹竇煮掃策虎泛凡州幣折朗踢鎖啤娘揚跡針韓串劍江蛇委緒莊輯怖托珠誰麥喝噴擁拋憎夏徵浮省染珍媒韻剛恨末嗯怎眉載雷猶咯甩癲麗賤伴倫怨碎蠢賺劉伏恩扭抬屈縮逼哼搬着掉摩簽錫污稍潛藏裙塞榮臭狠餅艇儲審歉疫祈革塘憑秋胡豐鎮糖儀授揸映轟悉柴爲舒枱爽額孤滯辯描獻納踏吞偶克爺獲孫檔磨詳慰嗱滑績咦厭后寒延滾頸泥潭輩啖漏翼頓督掩醜戶暖陷均恥泰檯仙宇攬廈罰鼠戒扯抄撥晨膊牽潔斬罷喪聰琴冰劈嗌捱昏趁農哭億徹滴吉嫌巨忌檢池甲誌倍啟振猛痕襲闊扶吐慳傑註拼淫嘔租聊貢幼頁雅奧惑盲賴遍勸柔矛偽邪雀玉踩鹹牲截攤沿癮衡撐犧玲敏毀貪迴霧項顏駁掟廚兇塵幹替飽哀姑攝蓋誕憐坊湯炮累庸廂瓜抑啪唶凌旗烏蝕襯卷鍵篤逆妻膚墨悟櫃渡署腿干迅輔暑盾砌鴨橙亮勉咳壇曼肺懂扣泡諒箱冠拗腸譬乃獄獎糊誇障騎繁徐咀谷玻契奉婦季宿尿擾緩腰蘇違勵姿杜損謀乏曆乖仇吊喉寄嶼爐荒割協旨伙僅姓懼浸竹齋璃雕瘦賓劣叉旺菲裂症侶吾貫哩恭脈遞蝦焦哎抖糧糕个孔崩廉援箭舖鄭蟲閂扑偈京壯廠扎掣擦訂飄騰戚蘋憂戇採陶跪嬌丹寺巾晝窿餓勾匪仗崇唇敲濃邏頻煲彼捕糟輝匆塑壁湖郊酸擠冬梓臂粥穆殖鋼帽紛競綁斥熄域廊慌擴獅譜掙梳娛妖奔寂循欠湧漁災縱繞銅鳴曉植耶氛鬚憤哪旋籌閘鹽搜閱蹤辜恆睡稿曰嫂嬅氏洪撳奸屆剪勤奪拾搏遭鳳喻謙俊惠慧茫藉盧釘爬誘框央詠云歎叮坑奴拱歧津纏獵鑽訝欄淋診療鋒侵冧剎撲暢涌辣冒劫坎宙尺斜棍熊窄紫繩蒲姻患腐鬱睛倉徙衷齒袖檸攪螺押薪宅擰禍荷澤孝灑炎躍臘魯催促礙罵胃餵湊筒揭脾恤鄺井愁晏祭賢頹斤捲仰匙噏朱泳迪諾諷刑奏憾尐亭冚晰笨蕩陌隆棟啞眨壽峰幽掘疏矮紋舍芒鍊妝柏臣皺庫欺洩趨黐窒辱郵彙棋宵碰譽殊毋液堪愚蓮籍蜜乞售擋歪稅葡裁覽礎悅"
15
+ },
16
+ {
17
+ "name": "Top 3k Kanji",
18
+ "characters": "役脹桶磁吳罐龜撈俱孖浩旦猜貧慾弄准堡攰暈疾屙丟喃彷址捐梅矣賊購銷髀汁稚敦喘彎拔摺矩舂豈遙姊棵妥誓妄脆仄礦芝諧廷趙予措艱匿穌呂宋嶺渠渴狼羊驅遷寵寬舌凝彌擬泉盈籠脷鶴冊乳姦卑瞪盃丸慕歇籤軌週騷薩齡薯販咭董傲妨淪漠肆蒙鄙咒沈賠漆盟娜閪卜坳埔寸脊撻垂紮籃巫挖氹翁脅跨侍誼余厲鬍召滔丈燭潰呈眠埃疲厘刊吟斗淘煎碑蕉裕邀葬頌捧秩慨培尷悠笠謹隧濫娶債桃殿腹航褸辨滋吻踐竊軀肩凳抓瞬晴浴盞窩耗貿裸冤乙嬉尬傘償凸囊坡瑪筋萄俠繫逝伐勒啩姨宴崎弊恰愉愧懸挺繪芳貝鄰罕潤羞噹邦耀芬袍鷹泣衍肢虐它揾榜稀蒼鈴丫勿慈懲棺涯撒聳朵牧邁溶梨侯呻墮揼殼泊腔詢貶巷彿哇酷駕屠賦螢嘖劏奢樽盔鏈挽儒剷贊燃逗惱嘯漂豫券响墳昂焉焗肌艾塌軸洛嘲懇磚嬸嘟屁鑼棒拯刪崗慎撇犀紗采仿陀劑械帖撕奕捽儘嘥惹茅顛呎蓄拘煞糾佩焚昧魄囡瞇夷鄧鯉綜蒸祥謎晶嫩倦禾虧喚牡扁漿佐丑騙晃鯊捷汽沫碧藤謬蹟馳驟託撼詭叛刷骰噓蕭剝埗憲披挨盼籬豎蔡寡杖縣僱擲爪撫錶胎炭噢卒帳摧渺漲酬釣鑿筷銳潘椅卸宏征昔暇椒綱苗馨鹿倪匡勻蘿竅銘茄屢寞簿凱鉛妓羽甴鈕佑恢松櫈滲煥羨蹈錦匠涵澀贈醬悼屑懵曱詐豁咸凰屯斑枉毅窺胞袁鵝緻奄瀆履枚餸刮櫻魅隸琪噬弦唸嚨湘孟燕苑蹺岳哉孕瀨恒翅蝗樸欖狹盜躬頗抒脂喱吼彭墓弓惶斧犁癡蠟闖衞鼎戈畏癌苟擅韋疚粟賀譚旣嚿巡枯淆竭箇縫膝蟹颱昨倡龐蔥蛙挫昇吱𨋢馮怔舔韃撤燥砂磅稽簾跣鴻肅蠻榨睜裔潑沾霉撩琦涕瓊瓦睹綿荃腥爵侮勃愕霜豔鞭檬媚莉乸扇棉腫腩僵岌堤斟灌狡綫纖蔭蘊蟻匹摘瑰鞏国墜嚕篩陋贖齣揹荊唏圳伍僻叢崖惟玄羹茂蠱𡁵繹俄駐屏柄瀉薦囚菌噃菇哄臟耍㖭簫傍坪川朽澄瀾珊瓶紥缸腕躁逸撮疇倚掀寓削膏賜輿牢碩耕軒搓曹遣淒嘶燦膜睬兔塗怠桑綑臺莎鍛廓膩謠僕嬰吋樑赴渾墊煉眶伶犬嚮覓婉昭恃襪蕾懦俯哽岔巢罅耷鞠骸吵鑑殉曠赦玫禱柳膨鴿鍋拙擘姆沮汰什唞攔攜溜禪蟬邨紐煽瑞萌赫剔襟刁唧占拐兆樺壟妮敷咕糭囂蜂蝶鈔悖捏逕凹併葛亢滄兮卦恍悄恕鈞慄堀曝桂棚淇滘熨狐穢葵霞寢豉瞭薛遵傭砰貞倖凜薰瞞繃曖盂瘡誅睄阱泄邋偵珈訕笛卿怡戥暮熔祠肝顫僑宰荀熙柯蓬御秤鴉咽啼焰殷孽癱黏痾晦兌惺僭嗲侃彤喼瑤唻擒甫眷綻蛛霑擎釀遜輾頑夭晾蔔籲庖蒂穴遁袱昌惰叱銜哮瀟雯呯嫖兢哨棠苛蹄閣頒啜拓肋羣矢餒捍凶娃爹杰帥聾駒晉巔訣穎矇妒癢遢摑菊淑忿靡羈搔虱喲墩攀爍瞄禽纜翠褪陵鯨芽壘橄撰搗冥盆駝彰慚搽炫倆扼耿瑣妳廖蒞崔舀枕檻瀑猖耽艦轍隙頰鋤啓弗啃砸閩酋兀嘰燶聘嘍惘懈狙廝斃昆飢斂刨掹喔証頡丙幢捌檳徘淵熬睫肇蔓逾敘挪㩒岡曽瞳茲濺瘀憫聆欽賬摔函喧暪"
19
+ },
20
+ {
21
+ "name": "Top 4k Kanji",
22
+ "characters": "獰伺帆徊抆掠沸溯烤眸碉祇綽蘆虹閻鞍顆髓噸允竄駭濁拮躉翌肖噁紳夥搣姬寥攏鑄噪怯嗡琳濾咐霆嗜俏嚼逞浦莞嗄僧卅擱栩梭楓瀝猴瑕瓣畸笏筍荔衹辰沽躲驕霍祀屹跛毆攘踎迂虔傢駱朕洶縛萎琉癩薑餃癖汪畜睥杆菩蔑懺溺謊鈺于螞寨豹禎姣桿鮑咆拚晌躇躊墟壺孭摷溢狸獗蠔靴龕埠瓷炬詮曳婿馴醋温汝瘟遂奀霾箍霎綴亨氧沐憧吽嗤翩嗽嗒吩伽盪岑几盅彥盯噗莓賂匸昷栓剃峽庇杉汲淹炳絮翔肘葫蝴醇鑣闢靶幟碳諺鋸辟媲駿魁吏瀕呱萊娟鐧烚匣揣疤汶蠅歹憬侈惕敍棘瓏痰抨蜻漓鴛吠喳帛拂蕃冗糉豊圭咿羮祢嘎僥刃剖噚嚎塱壩峒峻濱灶盎砲蟧蠄豚闌禧咎崛贅菠牟蔽衙矯奠鏟鋁冕遑楷迦蹊瘓潺芥蓆朦稻虞卓尹炙猝緬蹋毁膿唓揪擂琼猥鴦翹噩勳猩胭燾燼炯𠒇腆藹躺窘捺毓堵桌溪瀰狽瘴磡逛醮閑霄頃穀摯菱芻峯誦肴裹饒煌捅殆槽慷叭摟瀧厄哣悵襄釐祿嚏譴闡蜓庶朧栽扳叶灼嘭揖剋鵬弧瑩鎚囝蜢鴇壤寮徽榷槳汀沛濤眺賈鑲飆饋𡃁孰戎誨宛蒜諫輒渦鏽俑囑僚籟沌酌倭諮絞簇翳絨萃唥臆鑾饅濡諱靖薇閏摒栢吔歛埼尸佣嗟仕瑜腑瀏煤喬吭嗨涎霹靂靦偕悚惴鏘咨詹咔鍚鏢謄弘梧榴橡甕甸畔瞻穫罟趟踭飼篷訶壹氈悍澈楹貸賄乩臥翰澱糙蜘烹蜑棧熾吶喋訛倔卵蔗謳逮垣誡梘蔣繡尉娥諭矜姥啐呸囍詫杏囈褻痺芭賒呷棗腮坤实敝樁硤撓蕙腍驃抺䃟划噤奬寅湮濛疵瞰祕禦稔荼螂詬蹂躪轆雌馭骼鶩緝嶄烘楣骷髏孺蜒掬丘艘倘杭砒槌旱砍艷鼾鉅曙顰羔詡腎腺恿慫絳棕嗇轎冶窖疆麟拈惋憚滌蓉褒蹶逍錐髒鱷淥佇罔胖姪孚楝藩踵燙禿瘤愣咤虜釁秉拭会槓佻墅璧嬴緋范嚓娓揉唪劌姚熒叨唾娼抉株瑟絶羌趴騮驀芹枷穹輻縟糯俐囪踞廬戌札歟殯轄塚搪竿軚酵瀡餡梵凋恙皿募拷婪篡緯嫉潦鱗稟詣徨漩疼磊嚥囤朔殞膾韜饑傀儕儡撿癥汾慤啄悸鉗臻脯浚鑒杼砵暱舜俚膳寰榕諜隋吁氮𠺢舅为嫵您攫蕪鏗嫣惻涂悴憔鬈庾沓勺乍垢峙嶇戙燊稜笙箏紓縷繽訟踱錘髻黯噱嚐淮棲醃陲蜿弒繳卉謔梟贓戊紆逅榻俬揩嗣芸莘仃捩嘸戮巉殲轅遼琢脚阪奚箕癒儼冀痍莠蝙蝠諉咇曦啷撬釜辧殃抌倩黛渲趾剿殭俘犢内詁挾濠滸魏銬嫦両惆浙籮吆瞌蛀儉婷綺嚷嫻巍愀戾掏时柚泱澰睽袒詆长汨膀騾蔚恁忡咏澎葆咄躂佼攣粼氯囿妞弩桐笈篙紜莽萍蛤衆陡駅鯽擸枳敞櫳誣驥矽締哺祟馱錮甥茹旭詔雛牀耆遏酗趷埞拌孱蜃韌呔嵌桔煨鈍㨴媳涅燴徬嘜泌炆驛骯髯堯糞𠝹龔諦嶽殻黄暨儂彬鐡漣漪瞥迢縈么焊佮儈詛翦俎咚蠍澧蕊筵諳邂乒乓丞夌鎗埲銖㷫蛾鼆簷邑蠶闔匍匐幌獪簸螻賅軑圜栗体彊憩抿淤璞给话軋进驢鬢唆氓噥憊汕痱皂譟酥嗦郡貳侏羚噠鉤喙奐巒巿帑强撑檐漕澗瀚瘁礡纓芋苔薈蜆跚蹣輋雁鱲鵰𢃇橢狄饗樞麪輟鱉恪沃鹼芯涓鑰"
23
+ },
24
+ {
25
+ "name": "Top 5k Kanji",
26
+ "characters": "狩腌户褥笪忖烙艙𠵼胯鳶躋挈籽冽匱拇閹纂霓邃氾拃諄窪恫炷喀茵璀璨関嘮幡攋藕瞎揦蹴耘儆拑攸沼点譎銹沬絀两垮岁菁鹵嗔駢万忟翊礫跎怵肪餚隕弛疋膺磋蜀掕妤辮仝唚燉倌妍戳烽瀛鈎鬨恵厥飴曇匾扔聡卧鞘臍釵劊縹黝睿窟忪鉸叼啕噫摵擻瞼誹謗孜誒輛吝猿枴卍对帚悽愴摶无泓漉箸糴耑謾评语貅貔还冢帕彪慵搐椰潢膛蚓蚯賁鎊鶯奎嬤应楨祂翟酣敎縐躝𢲡𣲷煇臀岐湃熹籐絆舐轔閨秃肓揈莖猙卽藺哧蹦嚶侷咫孵巖弔徠扽暉滂牯璽砭綢繆舢茜蒐蛟螳髹鷄竽猷穗鎅稷踊遽峭夙焫僮劾庚扈杳殮灤絹迄竣掗鍍銃矗懾絢込陛閥柺綵胳矚蔬漱麾甬芫溉牴湄啾噌筲蝨鱔鷂祉譏迥吒夯擢炕硯綸芙覷闕驊旬虫踰凈煒譁翎丨侗硫蹉錕衊叠欸鸚緹鍥鰲箝喵懊櫥霏魷遐㨢跋魘洽暄泵阮髦広辞紂宝慟錙咓嗶写鬯滓熏踪咱湛坷媧睦遡緲隘鵪鶉噯畿眩眯様竪颯憨众匈叙圏寇忐忑搁摹泪睨稠紕终脖膶藻褐见记难东丽嗓宦揄揶氰洒涸簧酲阡们偎华发喏愿戛煬现紧该俳呤唷徂癐裇藐邯鄲喫翡罄胴伕麓没崳捻泯苞鳯韶怦蚩讖醺尻囁捶咃哆騸剥徛眞尴岀囖莅矓駄燄啵溻翕嚱膞仞僊剌勘堰岬嶂巗怱抛朶沱澇瀅炊瑚纍罾袤説踴錨騖鷗𢯎橘葺鐮迭涇渭驍謁豢伇埶邇閡壅氤氳獠瞑禺胥褫蹲鸞耄耋妃漬痹㧬罌皙娑繚粕婕薊荳韮眈斐缽唂昕愫桎梏黹佚啅焼櫚冑犄盦埈壑俺凪摏燬姜驪侲橛毽舵蘸麒𡁻臃鵲騅鯁祐舛倀区恋戟揑磐絃继续裨伎裱号图怜懃縴鸡叩佘旻隍庵葩嚡扤恬愎紊隅騐醞扚驄鵡嗬冼儍弈縝啝睞菀来渙嫰醍醐愜硝髪漾酊酩桀蛻綾姍餬孮沆砥騁潚覇椎檎韁㦸亥鰍皈礼虯軾酪滬齌掐緘扉槃俸餉𡁬跤夸浹忤恣捋禠渝窈窕丕妾愾摀嗆嗝瘠皚繭臠顎珞瓔詰皓茁椿韭颼嘀嘚禀习书乱从价势叵叹员啻带张揺搥敕晢晩极樫残氫热牘牠独獷癟瞧祺笔箴簌荣蔻裘裴覲觉认论踮鈿随靄鴕偌决匕啥懍掰擄杀杞檜气漒瞅緞纷罹虽观赛赞遴錚银齏齙业偃况办囌坂声妁护捜机毕洙灯窓经让蹓这鐳餾丐哘扱揞搦擳珮碇礬筱篱菓赢躹鏖飊𠾴𢳂𠻹亍彳焯樖頽叁昩弭甄軻𠽌溏琵琶熜焙尢媾孻氖溥蟆攙魑蹩紡喁甌㕭嗅瘍胱羡槐邱涿蝸撘鯇傞摭杷屄涔燠愨㗳欶懕捃槪滕澌砐谂閙蹭厠摞燻薜崽寐忱淳糹肨芩飩嚹孥噖譭瞟墈撂狏珏緅骹悻嚅挒濂肛戅旮旯繑洱逄鯪骴捹粘餩朴滷孢侖円劬匝圃埕屐崢嶸撟柢毬汐汚淼秊窰纒舨莆菍豺酙鋰雍頤寜稈筳饌輓鎬爓狎羸鲁澹蹞駑喐嵐旃檀爇琤癰砉禳縊訖詈誶讞邸闥帮厓粿罉拝蜍蟾紈絝㝝嬋衩鄂搲荽刋澡祚腓赭亶斡畋褶訥鏤悪曜気秏茨辺芈塡螃餼𠽤垓禤茴謭汞猾稳胜设鏐阶项蚺䕺聶卫坨妊娠学庆褂掦𤈂毘纈竉髺鯰筠酉鋈詼佗㤇唨緙虢迆磺甦掖緃踨䅲瑛皃盍辵贍蹝俹簁紉芡鎂𢭃亲冲吡弼袞嗻懿徇歃𢱑"
27
+ },
28
+ {
29
+ "name": "Top 6k Kanji",
30
+ "characters": "嫗暏葭蒹珀琥壬恴燘鸛淩痢笆颶顥黌囹圄瀸燎礪艺鵠熵杠氟銼鰭灸効硃侄碴誔蔃减戯湾綏脗㾻咑瀲灩睺蟠𢴇訏唁邵卯佃鋌倨酚痊諎蕞参聴喞窯羿誑墻濯鷺棱軼韙罊𠺝挲鴆篸鄒鄹臾剮嘷媛峋嶙犲猢猻糅縻峴毗蟄掔盹蹙霽玟兀隷摻觴棹櫫佞曚癇洳澪飪黷蒿踝呑娉婀嬈瓠螓仨儿关吮埸墾壴妣将届属岂岫岱帐录忒忧忳怀总悌惊戍戕捫掄显晓梆楞殂殤毌沏瀣状瑄疴眢碍聒腋腴节荡蘑蚣蜈装襠襤諂諛诛说请谐豕貽质踁踘蹹车远连邓醴鉴錡鑠针钞问闹阁险霪预题风齜击奥妲廸枪样檄潸环称约翥获菅覤訐貂资踉蹌軏运选错间雹韲顱义亿兴冏吂听场坚复奋寻岗广开异弃归惦懨拥旌暁枹梢梦济灭爱縶线细结络绝联胁苯茱萸蜚裳諢证课贵轨适逊醛释鎧鏹霖顺馈騭鱂鲘麋黍㨂䓤丼乭偲幔涙産穞窂肶艮萱蔴蠓陞𡲢𥄫𨈇𨤳晉栞囗㗰磯刎啋婊驘糠褚廛曩毎茉町亟玖餞迹擤価値変幪観畨惝榭滇簪绮鞦韆顔鵑洎洵茍讒彚樵擗狪駙鐸麝耒𠴱瞽葯㰖嚢婢徧懞虻蹀躞掤孛獃闗粽贛蟑蹇伝澆蔦魍魎憟删痘剽宄槎灞畝睢粱粲罡諍賸逋郢鄕鋏韉䟓勛堊彗楔槤瀘鏞麈蚤欧頼脇蚍蜉鏑跆煜崑刧埇鮫嗩痙褊睩雒㨃䜙獳矖袂謷逳净浓粤级讲阵鈣癆蠆貯絰摙焮哟呮嘑妗罸佯俞璣謏鎩麽齟齬嗮巹祁膈鯹挅柸幀拄蜷塢啉胚僆嗉昅卌趺躑礴噝壆孑怙悛捂旎旖猄笫篋躀隼顴黠幃枇炖疙瘩笳靨傣嫡睼𤝛暝柿嗥烟鎢驁鰂砧鎯鐺刄峇濘孌朣沢癦簣鈾埴禹糜蕎滙亱凖嚫并徼悞箋纔视縄掁𡙁淅攢糍綳窝鰥燜哐揜撠舳艫踼煁簋譖圑嬏柑礁緑縁罨録瘌嘓噣樟閤餿呌屝涶癊魴鰻挷枭渗傚孿磿昺毯蛆寛檷柬"
31
+ }
32
+ ]
33
+ }
@@ -2,10 +2,12 @@
2
2
  <div class="navigation" style="display: flex; justify-content: center; align-items: center; margin-bottom: 30px; padding: 15px; background: var(--bg-secondary); border-radius: 8px; box-shadow: 0 2px 8px var(--shadow-color); border: 1px solid var(--border-color);">
3
3
  <div style="display: flex; gap: 15px;">
4
4
  <!-- <a href="/" class="nav-link">Home</a> -->
5
+ <a href="/overview" class="nav-link">Overview</a>
5
6
  <a href="/stats" class="nav-link">Statistics</a>
7
+ <a href="/goals" class="nav-link">Goals</a>
8
+ <a href="/anki_stats" class="nav-link">Anki Stats</a>
6
9
  <a href="/search" class="nav-link">Search</a>
7
10
  <a href="/database" class="nav-link">Database Management</a>
8
- <a href="/anki_stats" class="nav-link">Anki Stats</a>
9
11
  </div>
10
12
  <button class="theme-toggle" id="settingsToggle" title="Settings">
11
13
  <span id="settingsIcon">⚙️</span>
@@ -95,11 +95,19 @@
95
95
  <div id="gamesDeletionModal" class="modal">
96
96
  <div class="modal-content" style="max-width: 800px;">
97
97
  <div class="modal-header">
98
- <h3>Delete Games</h3>
98
+ <h3>Manage Games</h3>
99
99
  <span class="close-btn" data-action="closeModal" data-modal="gamesDeletionModal">&times;</span>
100
100
  </div>
101
101
  <div class="modal-body">
102
102
  <p class="warning-text">Select games to delete. This will permanently remove all associated sentences and data.</p>
103
+
104
+ <p class="warning-text">When Merging, the first selected game will be the target for all merged data.</p>
105
+
106
+ <div style="margin-bottom: 15px; padding: 10px; background: var(--bg-tertiary); border-radius: 5px; border-left: 4px solid var(--accent-color);">
107
+ <small style="color: var(--text-secondary); font-size: 13px;">
108
+ <strong>Note:</strong> Game names come from the OBS Scene, to change the name for future stats, change the scene name in OBS.
109
+ </small>
110
+ </div>
103
111
 
104
112
  <div id="gamesLoadingIndicator" class="loading-indicator">
105
113
  <div class="spinner"></div>
@@ -118,6 +126,7 @@
118
126
  </div>
119
127
  <div class="modal-footer">
120
128
  <button class="action-btn" data-action="closeModal" data-modal="gamesDeletionModal">Cancel</button>
129
+ <button class="action-btn warning" id="mergeSelectedGamesBtn" data-action="mergeSelectedGames" disabled>Merge Selected Games</button>
121
130
  <button class="action-btn danger" id="deleteSelectedGamesBtn" data-action="deleteSelectedGames" disabled>Delete Selected</button>
122
131
  </div>
123
132
  </div>
@@ -272,6 +281,69 @@
272
281
  </div>
273
282
  </div>
274
283
 
284
+ <!-- Game Merge Confirmation Modal -->
285
+ <div id="gameMergeModal" class="modal">
286
+ <div class="modal-content" style="max-width: 700px;">
287
+ <div class="modal-header">
288
+ <h3>Confirm Game Merge</h3>
289
+ <span class="close-btn" data-action="closeModal" data-modal="gameMergeModal">&times;</span>
290
+ </div>
291
+ <div class="modal-body">
292
+ <p class="warning-text">
293
+ ⚠️ This action is irreversible! You are about to merge multiple games into a single game entry.
294
+ </p>
295
+
296
+ <div class="merge-summary">
297
+ <h4 style="margin-bottom: 15px; color: var(--text-primary);">Merge Details:</h4>
298
+
299
+ <div class="primary-game-info" style="background: var(--bg-tertiary); padding: 15px; border-radius: 8px; margin-bottom: 20px; border-left: 4px solid var(--success-color);">
300
+ <h5 style="margin: 0 0 10px 0; color: var(--success-color);">
301
+ 📁 Primary Game (will keep this name):
302
+ </h5>
303
+ <div id="primaryGameName" style="font-weight: 600; font-size: 16px; color: var(--text-primary);"></div>
304
+ <div id="primaryGameStats" style="color: var(--text-secondary); font-size: 14px; margin-top: 5px;"></div>
305
+ </div>
306
+
307
+ <div class="secondary-games-info" style="background: var(--bg-tertiary); padding: 15px; border-radius: 8px; margin-bottom: 20px; border-left: 4px solid var(--warning-color);">
308
+ <h5 style="margin: 0 0 10px 0; color: var(--warning-color);">
309
+ 🔄 Games to be merged (will be removed):
310
+ </h5>
311
+ <div id="secondaryGamesList" style="max-height: 150px; overflow-y: auto;"></div>
312
+ </div>
313
+
314
+ <div class="merge-stats" style="background: var(--bg-secondary); padding: 15px; border-radius: 8px; border: 1px solid var(--border-color);">
315
+ <div class="stats-row">
316
+ <span class="stats-label">Total sentences after merge:</span>
317
+ <span class="stats-value" id="totalSentencesAfterMerge">0</span>
318
+ </div>
319
+ <div class="stats-row">
320
+ <span class="stats-label">Total characters after merge:</span>
321
+ <span class="stats-value" id="totalCharactersAfterMerge">0</span>
322
+ </div>
323
+ <div class="stats-row">
324
+ <span class="stats-label">Games being consolidated:</span>
325
+ <span class="stats-value" id="gamesBeingMerged">0</span>
326
+ </div>
327
+ </div>
328
+ </div>
329
+
330
+ <div id="mergeError" class="error-text" style="display: none;"></div>
331
+ <div id="mergeSuccess" class="success-text" style="display: none;"></div>
332
+
333
+ <div id="mergeLoadingIndicator" class="loading-indicator" style="display: none;">
334
+ <div class="spinner"></div>
335
+ <span>Merging games...</span>
336
+ </div>
337
+ </div>
338
+ <div class="modal-footer">
339
+ <button class="action-btn" data-action="closeModal" data-modal="gameMergeModal">Cancel</button>
340
+ <button class="action-btn warning" id="confirmMergeBtn" data-action="confirmGameMerge">
341
+ 🔀 Confirm Merge
342
+ </button>
343
+ </div>
344
+ </div>
345
+ </div>
346
+
275
347
  <!-- Include shared JavaScript first (required dependency for database.js) -->
276
348
  <script src="/static/js/shared.js"></script>
277
349
  <script src="/static/js/database.js"></script>