albibong 1.0.7__py3-none-any.whl → 1.1.0__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.
Files changed (30) hide show
  1. albibong/__init__.py +58 -0
  2. albibong/classes/dungeon.py +39 -32
  3. albibong/classes/event_handler/__init__.py +10 -0
  4. albibong/classes/event_handler/handle_event_character_equipment_changed.py +2 -10
  5. albibong/classes/event_handler/handle_event_party.py +6 -13
  6. albibong/classes/event_handler/handle_operation_change_cluster.py +17 -22
  7. albibong/classes/event_handler/handle_operation_farmable_harvest.py +17 -0
  8. albibong/classes/event_handler/handle_operation_join.py +2 -25
  9. albibong/classes/event_handler/world_data_utils.py +68 -25
  10. albibong/classes/item.py +19 -4
  11. albibong/classes/location.py +136 -5
  12. albibong/gui_dist/assets/index-C4r00CBk.js +168 -0
  13. albibong/gui_dist/assets/index-DKbORdbN.css +1 -0
  14. albibong/gui_dist/index.html +2 -2
  15. albibong/models/__init__.py +0 -0
  16. albibong/models/models.py +12 -0
  17. albibong/requirements.txt +1 -0
  18. albibong/resources/items_by_unique_name.json +55282 -0
  19. albibong/resources/maps.json +259 -259
  20. albibong/threads/websocket_server.py +64 -41
  21. {albibong-1.0.7.dist-info → albibong-1.1.0.dist-info}/METADATA +2 -1
  22. {albibong-1.0.7.dist-info → albibong-1.1.0.dist-info}/RECORD +26 -24
  23. albibong/gui_dist/assets/index-DZvgNqlG.css +0 -1
  24. albibong/gui_dist/assets/index-Dt6hyZiS.css +0 -1
  25. albibong/gui_dist/assets/index-E7pha23k.js +0 -161
  26. albibong/gui_dist/assets/index-WIuC9Mnh.js +0 -161
  27. /albibong/resources/{items.json → items_by_id.json} +0 -0
  28. {albibong-1.0.7.dist-info → albibong-1.1.0.dist-info}/WHEEL +0 -0
  29. {albibong-1.0.7.dist-info → albibong-1.1.0.dist-info}/entry_points.txt +0 -0
  30. {albibong-1.0.7.dist-info → albibong-1.1.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,21 +1,19 @@
1
1
  import asyncio
2
- from datetime import timedelta
3
2
  import json
4
3
  import os
5
4
  import queue
6
5
  import threading
6
+ from datetime import datetime, timedelta
7
7
 
8
8
  import websockets
9
9
 
10
10
  from albibong.classes.dungeon import Dungeon
11
+ from albibong.classes.location import Island
11
12
  from albibong.classes.logger import Logger
12
13
 
13
14
  logger = Logger(__name__, stdout=True, log_to_file=False)
14
15
  logger_file = Logger(__name__)
15
16
 
16
- home_dir = os.path.expanduser("~")
17
- FILENAME = f"{home_dir}/Albibong/list_dungeon.json"
18
-
19
17
 
20
18
  class WebsocketServer(threading.Thread):
21
19
  def __init__(self, name, in_queue) -> None:
@@ -32,7 +30,6 @@ class WebsocketServer(threading.Thread):
32
30
  try:
33
31
  world_data = get_world_data()
34
32
  me = world_data.me
35
- # if me.id != None:
36
33
  event_init_world = {
37
34
  "type": "init_world",
38
35
  "payload": {
@@ -49,33 +46,32 @@ class WebsocketServer(threading.Thread):
49
46
  else "not initialized"
50
47
  ),
51
48
  "dungeon": (
52
- Dungeon.serialize(world_data.current_dungeon)
49
+ world_data.current_dungeon.name
53
50
  if world_data.current_dungeon
54
- else None
51
+ else "not initialized"
55
52
  ),
56
53
  "isDPSMeterRunning": world_data.is_dps_meter_running,
57
54
  },
58
55
  },
59
56
  }
60
- # logger.info(f"initializing character: {event}")
61
57
  await websocket.send(json.dumps(event_init_world))
62
- try:
63
- with open(FILENAME) as json_file:
64
- list_dungeon = json.load(json_file)
65
- event_init_dungeon_list = {
66
- "type": "update_dungeon",
67
- "payload": {"list_dungeon": list_dungeon},
68
- }
69
- except:
70
- event_init_dungeon_list = {
71
- "type": "update_dungeon",
72
- "payload": {"list_dungeon": []},
73
- }
58
+ event_init_dungeon_list = {
59
+ "type": "update_dungeon",
60
+ "payload": {"list_dungeon": Dungeon.get_all_dungeon()},
61
+ }
74
62
  await websocket.send(json.dumps(event_init_dungeon_list))
75
-
63
+ event_init_island_list = {
64
+ "type": "update_island",
65
+ "payload": {"list_island": Island.get_all_island()},
66
+ }
67
+ await websocket.send(json.dumps(event_init_island_list))
68
+ total_harvest_reply = {
69
+ "type": "update_total_harvest_by_date",
70
+ "payload": Island.get_total_harvest_by_date(),
71
+ }
72
+ await websocket.send(json.dumps(total_harvest_reply))
76
73
  async for message in websocket:
77
74
  event = json.loads(message)
78
- # print(event)
79
75
  if event["type"] == "update_is_dps_meter_running":
80
76
  world_data.is_dps_meter_running = event["payload"]["value"]
81
77
  reply = {
@@ -92,7 +88,7 @@ class WebsocketServer(threading.Thread):
92
88
  char.healing_dealt = 0
93
89
  char.total_combat_duration = timedelta(0, 0)
94
90
  reply = {
95
- "type": "update_dps",
91
+ "type": "update_damage_meter",
96
92
  "payload": {
97
93
  "party_members": world_data.serialize_party_members()
98
94
  },
@@ -127,29 +123,56 @@ class WebsocketServer(threading.Thread):
127
123
  await websocket.send(json.dumps(re_spec))
128
124
  await websocket.send(json.dumps(silver))
129
125
  elif event["type"] == "refresh_dungeon_list":
130
- try:
131
- with open(FILENAME) as json_file:
132
- list_dungeon = json.load(json_file)
133
- reply = {
134
- "type": "update_dungeon",
135
- "payload": {"list_dungeon": list_dungeon},
136
- }
137
- except:
138
- reply = {
139
- "type": "update_dungeon",
140
- "payload": {"list_dungeon": []},
141
- }
126
+ reply = {
127
+ "type": "update_dungeon",
128
+ "payload": {"list_dungeon": Dungeon.get_all_dungeon()},
129
+ }
142
130
  await websocket.send(json.dumps(reply))
143
- elif event["type"] == "update_dungeon_data":
144
- updated_tier = event["payload"]["list_dungeon"]
145
- with open(FILENAME, "w") as json_file:
146
- json.dump(updated_tier, json_file)
147
-
131
+ elif event["type"] == "update_dungeon_tier":
132
+ id = event["payload"]["id"]
133
+ value = event["payload"]["value"]
134
+ dungeon: Dungeon = Dungeon.update(tier=value).where(
135
+ Dungeon.id == id
136
+ )
137
+ dungeon.execute()
138
+ reply = {
139
+ "type": "update_dungeon",
140
+ "payload": {"list_dungeon": Dungeon.get_all_dungeon()},
141
+ }
142
+ await websocket.send(json.dumps(reply))
143
+ elif event["type"] == "update_dungeon_name":
144
+ id = event["payload"]["id"]
145
+ value = event["payload"]["value"]
146
+ dungeon: Dungeon = Dungeon.update(name=value).where(
147
+ Dungeon.id == id
148
+ )
149
+ dungeon.execute()
148
150
  reply = {
149
151
  "type": "update_dungeon",
150
- "payload": {"list_dungeon": updated_tier},
152
+ "payload": {"list_dungeon": Dungeon.get_all_dungeon()},
151
153
  }
152
154
  await websocket.send(json.dumps(reply))
155
+ elif event["type"] == "refresh_island_list":
156
+ refresh_island_reply = {
157
+ "type": "update_island",
158
+ "payload": {"list_island": Island.get_all_island()},
159
+ }
160
+ total_harvest_reply = {
161
+ "type": "update_total_harvest_by_date",
162
+ "payload": Island.get_total_harvest_by_date(),
163
+ }
164
+ await websocket.send(json.dumps(refresh_island_reply))
165
+ await websocket.send(json.dumps(total_harvest_reply))
166
+ elif event["type"] == "update_total_harvested_date_range":
167
+ date = event["payload"]["date"]
168
+ format = "%Y-%m-%d"
169
+ total_harvest_reply = {
170
+ "type": "update_total_harvest_by_date",
171
+ "payload": Island.get_total_harvest_by_date(
172
+ date=datetime.strptime(date, format)
173
+ ),
174
+ }
175
+ await websocket.send(json.dumps(total_harvest_reply))
153
176
 
154
177
  event = {}
155
178
  send_event(event)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: albibong
3
- Version: 1.0.7
3
+ Version: 1.1.0
4
4
  Summary: A cross-platform Albion Online damage, fame, and dungeon tracker
5
5
  Project-URL: Homepage, https://github.com/imjangkar/albibong
6
6
  Project-URL: Issues, https://github.com/imjangkar/albibong/issues
@@ -10,6 +10,7 @@ Classifier: License :: OSI Approved :: MIT License
10
10
  Classifier: Operating System :: OS Independent
11
11
  Classifier: Programming Language :: Python :: 3
12
12
  Requires-Python: >=3.10
13
+ Requires-Dist: peewee==3.17.6
13
14
  Requires-Dist: pywebview==5.1
14
15
  Requires-Dist: scapy==2.5.0
15
16
  Requires-Dist: websockets==12.0
@@ -1,41 +1,42 @@
1
- albibong/__init__.py,sha256=zNZ9EpEtHp036ajiULW7CrxdHffh4TrjdCCm_rXi1bE,2074
1
+ albibong/__init__.py,sha256=c72O9jkaUoT8THK0n5AesWiceNynfjy8_1DHgGeRdxk,4341
2
2
  albibong/__main__.py,sha256=c_p0e0PEZwwTNFl0f0-bzcNKwfrV94ZKpq4Od_1OfOQ,149
3
- albibong/requirements.txt,sha256=4pncSaL-zczX75QkIl3Dcl1GuwJ0JVqbiU-URFI7f-g,45
3
+ albibong/requirements.txt,sha256=APRaJ65RM4p9TciHYCpaXvFyKhOHubAuyif_p5fyTQg,59
4
4
  albibong/assets/boom_small.mp3,sha256=XEeYaifS3kBu7jxJo4j8cwGjher8Ml0CpMvu3YNk4y0,16722
5
5
  albibong/classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  albibong/classes/character.py,sha256=epYuMsu_zREPJkICDHyZEsqXhtON9qOufc89bXDoVvc,3486
7
7
  albibong/classes/coords.py,sha256=wjCO7YnKXzH9IsJ9YFObbpMYfVFT5o38RndWjQhjVEg,189
8
- albibong/classes/dungeon.py,sha256=DWvBWi-iy_94ZoeiOivvj2CtcQ23PJdt2sZARima6NI,1700
9
- albibong/classes/item.py,sha256=q5FJYEwS-xrhgE__WCQn8uRAcC8f-pQrNS8hM8cBWbs,1096
10
- albibong/classes/location.py,sha256=Ll9Hthm2M-liWy_f6YF-usPOOPJTjI2S6TGjLktjqO4,508
8
+ albibong/classes/dungeon.py,sha256=AT8sEqGCRoVcBNYvMVvfVFVW77OYtp1MahFFZvMmu3U,1900
9
+ albibong/classes/item.py,sha256=tjAqXAexrqjrFaRAMPQfccmsMnI0FGafoEurJq_iAdc,1612
10
+ albibong/classes/location.py,sha256=VrzHuDkWDDJgNrNyuHDOcb_sg3P44j-lQStegP8Rjqo,4321
11
11
  albibong/classes/logger.py,sha256=5DQoUqrvA2wf28XdRm2xwC4RBhIpP4d70PqRohRKNwM,4442
12
12
  albibong/classes/packet_handler.py,sha256=1DpAZf5sMWO06qnjP62zxn3e9mU50_c5o1y6EUnxW68,1792
13
13
  albibong/classes/utils.py,sha256=07fb06ZHNNtpjjTeGnCFOkGf7A4OWiithS1OEfjb9H0,146
14
14
  albibong/classes/world_data.py,sha256=mUhgXNzS0GjNGSxIDzhw55KDB8rKt661zeAotE4WBds,3466
15
- albibong/classes/event_handler/__init__.py,sha256=HI7NA_P3S_x9waI0I_kO3br7_JYLSd-jXWTa5eXzBrc,4474
16
- albibong/classes/event_handler/handle_event_character_equipment_changed.py,sha256=B31rBaLtWP0gzZtLJWlg7To5Qn3pZD9tx6V6biZxP9E,965
15
+ albibong/classes/event_handler/__init__.py,sha256=4EyPwvLeeua5lySV9WkYfH_iciOpnuq9_Bo_L11JRfI,4919
16
+ albibong/classes/event_handler/handle_event_character_equipment_changed.py,sha256=QT6SfYfRLUipWWgyd1uOYXPnrA4jR-T9mkLzKbqCdwE,783
17
17
  albibong/classes/event_handler/handle_event_health.py,sha256=0RPvv0C-nklmKsp3UflN9qhpAkcLtd5bmmoN3cf-WM4,1078
18
18
  albibong/classes/event_handler/handle_event_in_combat_state_update.py,sha256=sWDu5RdupNAT5ESCY1RJ7rMAKq1b4HwYM272UFHI9h8,517
19
19
  albibong/classes/event_handler/handle_event_new_character.py,sha256=t9bdwe1-k2TVWAQ_HuBEmx2HO4-lgPoZJR0qKGcS6Vw,1507
20
20
  albibong/classes/event_handler/handle_event_other_grabbed_loot.py,sha256=SQA9oHwxm4jxpDOIIN6R_KFK-U5kkQhNFSqmAO0hj50,529
21
- albibong/classes/event_handler/handle_event_party.py,sha256=7WIld9YgbLNYoQ4y7LR0rFqJ9CTgBgWwHkAGY4xn4jA,1216
21
+ albibong/classes/event_handler/handle_event_party.py,sha256=LNdgsi4hxzESD7gPut88RBTnV1JbEbLIT_amAy9BvXM,1094
22
22
  albibong/classes/event_handler/handle_event_update_fame.py,sha256=fnreRc3NWISKdHePeQfSDiNsNpd_TgdyQOCjdFbVaSg,253
23
23
  albibong/classes/event_handler/handle_event_update_re_spec_points.py,sha256=tUa8iMiOsRZX2FIZ5ySqEgO4gNZvtAqDBsqUo91BgWg,320
24
- albibong/classes/event_handler/handle_operation_change_cluster.py,sha256=9zIyKTHY_rmuDZ-NTV7P8YJ5-NOuaGEJu8kMEvZ5OxI,1600
25
- albibong/classes/event_handler/handle_operation_join.py,sha256=_0n9cLUZ3xXKd5yMnuq944T684BUDKo2JtOzwVLJiv8,2883
24
+ albibong/classes/event_handler/handle_operation_change_cluster.py,sha256=Pc9E27JL1oJwc3iKgTsFlGWUz6iRVHtySN59jV8gLo0,1644
25
+ albibong/classes/event_handler/handle_operation_farmable_harvest.py,sha256=PH0UONCmjdoTdlcYa70x2oKC5j7PXmrrsRS8pl9clZM,680
26
+ albibong/classes/event_handler/handle_operation_join.py,sha256=V37XhLyToHci6ZoBTudZgI_DgdWxJZahLaZ1ZgKgcDM,2312
26
27
  albibong/classes/event_handler/handle_operation_move.py,sha256=vg_wTPQ4nA4-xyw9axtFmKkVCUoCkUq3RV74wFLbc_4,200
27
- albibong/classes/event_handler/world_data_utils.py,sha256=FX-OUPtfY0mLPKF0iuCTofzZiBAjuuBgXAVitGpd9_4,3772
28
+ albibong/classes/event_handler/world_data_utils.py,sha256=qGfKH9YGe_xWN8cCjSkhJ3zGcw6O8BuYIilK-kR2qUw,5513
28
29
  albibong/gui_dist/Albibong.png,sha256=vFWgJSosXfnSCy_U7Uu9hCYDCHiYtcmR1lpPA0XQRhY,38093
29
30
  albibong/gui_dist/No Equipment.png,sha256=HdVR3WJ0ktF5v606QyURdHscjOgCqiXJnqI8k8IlSgE,131
30
31
  albibong/gui_dist/fame.png,sha256=X2tUCmgR5TkGLUVvFB2lInH_RrXkC1pSLqpw_ply-rE,6015
31
- albibong/gui_dist/index.html,sha256=QQOD8vIvhEJL4pOGy8H5M9VkhQpF1jtJxR2wsb4dYu4,477
32
+ albibong/gui_dist/index.html,sha256=5gLx1Sb9TUnCufEXdKAeq6xDkhdDT5_EiAKY_lzej-I,477
32
33
  albibong/gui_dist/re_spec.png,sha256=1KTzGT1u1wjmNk9svS5ZOV7zCDIEmiFy0USh6A_vhPA,6230
33
34
  albibong/gui_dist/silver.png,sha256=tqXvZdf9zr0YoOQZoR2vG8NRffl4xvz0LY5XgwIrYD8,11533
34
35
  albibong/gui_dist/vite.svg,sha256=SnSK_UQ5GLsWWRyDTEAdrjPoeGGrXbrQgRw6O0qSFPs,1497
35
- albibong/gui_dist/assets/index-DZvgNqlG.css,sha256=LHq3c3k3VjlgOWEVM-l0THNTG_C9HojSlmQRh35I-YU,2324
36
- albibong/gui_dist/assets/index-Dt6hyZiS.css,sha256=zWYKo3Bar5Ab2MQbGaC6QE7RuVV49pdCBLUmXXHLXsU,2379
37
- albibong/gui_dist/assets/index-E7pha23k.js,sha256=SzsQQYnYjJLZAGzgRmopPzIJ0XER2oCQ79CO5nk-wgo,438407
38
- albibong/gui_dist/assets/index-WIuC9Mnh.js,sha256=9p5kNfUrvtvwgp2nhpCbvbmVrC-vOmgz2Gisj1js6To,438767
36
+ albibong/gui_dist/assets/index-C4r00CBk.js,sha256=ZTo4BK2mM6Ho5VGX1nU9yl5gKKH22bJ8OMgMR1eyxvA,653266
37
+ albibong/gui_dist/assets/index-DKbORdbN.css,sha256=3mA_HToM0FzqFGXQD-KlMEskfkjWH3Aexah6w6slvMA,2741
38
+ albibong/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
+ albibong/models/models.py,sha256=CjQqahTEKx4MsCmD8CkQFhBA6n_rwFzkajIoYK2fCiQ,204
39
40
  albibong/photon_packet_parser/__init__.py,sha256=Y_XwBGLl0ufhLr7d6phhfA6qL1RrG6mJ3qAC5lNKM_c,301
40
41
  albibong/photon_packet_parser/command_type.py,sha256=-LSdpsQgViDygDJsjaoCUuLbBkK4-pmQuM8ESHG1BNk,137
41
42
  albibong/photon_packet_parser/crc_calculator.py,sha256=rnhmknjiZBaSXBwS2cJacwLlnXaT74u9yEmvLknIh2o,402
@@ -51,16 +52,17 @@ albibong/photon_packet_parser/segmented_packet.py,sha256=pftqyVO0D7ZX8m1ZL2w2Xt_
51
52
  albibong/resources/EventCode.py,sha256=WSKFXuaABz3FBugHmlTSHAvMaNfa4JaRQo5xqdcn3aI,19349
52
53
  albibong/resources/OperationCode.py,sha256=9l5xdNhVCs4i-zaAPYC9BXPDBavX1D7VdpESmFQtKyE,16509
53
54
  albibong/resources/event_code.json,sha256=vIHnrH1T0qaGM4t4qYyoknAYEjiSO543RNu4zhYWOGs,20483
54
- albibong/resources/items.json,sha256=UoU4OSbB09DyxOpia2Ye1Hm4HR_4QlYqvhL_DKn6eQ8,1400109
55
- albibong/resources/maps.json,sha256=gGTILKQjanARBRgDi4QTDqs6q0zUstVWEiujqYMJCws,130469
55
+ albibong/resources/items_by_id.json,sha256=UoU4OSbB09DyxOpia2Ye1Hm4HR_4QlYqvhL_DKn6eQ8,1400109
56
+ albibong/resources/items_by_unique_name.json,sha256=VLixfNoc6RbMjfdBna2IdtG2PAwBbaYzsHSC8b96qp8,1635865
57
+ albibong/resources/maps.json,sha256=jEXIhIlPYO8fXk9xHOVpFKxw4_KUb72TBICvJy4-gBE,129753
56
58
  albibong/resources/operation_code.json,sha256=zV9kgHtZ_fs1Pm7ntQxNbjfZbdiHRdUIhEkKAIJPLhU,17457
57
59
  albibong/threads/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
60
  albibong/threads/http_server.py,sha256=Tqy7P8pXvIQywmFdiFy4TNKxR4LadJP0t4OsQE3oHDI,1940
59
61
  albibong/threads/packet_handler_thread.py,sha256=bqgYQUeCaTtnWgx4bGoqw-cWQcXRJohIse2hwCbVLmo,949
60
62
  albibong/threads/sniffer_thread.py,sha256=mvz4YeEnZwNbbIUAKicue5QX0vt_KoJ6p81UuwkRQe0,767
61
- albibong/threads/websocket_server.py,sha256=MbcNuHy6IGuMqXhYztR7Q6pKYqv8fRl7K4nQUk90b3w,7574
62
- albibong-1.0.7.dist-info/METADATA,sha256=AjT7JbraMnnVrZjmaGxxxSRQIA60SZRsVvEkVmBB3ls,581
63
- albibong-1.0.7.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
64
- albibong-1.0.7.dist-info/entry_points.txt,sha256=pLvUeo6eUwvsDQXsxdP9mRdSPufUlrz_9mFxsov0nm0,43
65
- albibong-1.0.7.dist-info/licenses/LICENSE,sha256=7EI8xVBu6h_7_JlVw-yPhhOZlpY9hP8wal7kHtqKT_E,1074
66
- albibong-1.0.7.dist-info/RECORD,,
63
+ albibong/threads/websocket_server.py,sha256=23_DGv7PPVxhv0uWMLuykYdws9pgpVgo8dS8yrKSIes,9015
64
+ albibong-1.1.0.dist-info/METADATA,sha256=yj99hwDc-hmMrHE3pQnfyW_9v1aLLKefHmto8u7aAGk,611
65
+ albibong-1.1.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
66
+ albibong-1.1.0.dist-info/entry_points.txt,sha256=pLvUeo6eUwvsDQXsxdP9mRdSPufUlrz_9mFxsov0nm0,43
67
+ albibong-1.1.0.dist-info/licenses/LICENSE,sha256=7EI8xVBu6h_7_JlVw-yPhhOZlpY9hP8wal7kHtqKT_E,1074
68
+ albibong-1.1.0.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- *{box-sizing:border-box}:root{font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#ffffffde;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}p{margin:0}a{font-weight:500;color:#646cff;text-decoration:inherit}a:hover{color:#535bf2}#root,body{margin:auto;display:flex;flex-direction:column;justify-content:start;align-items:center;min-width:320px;min-height:100vh;color:#fff;width:100%}h1{font-size:2em;line-height:1}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}@media (prefers-color-scheme: light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}}._dmgBar_zdqdf_1{background:linear-gradient(135deg,#ff6486,#6486ff);height:6px;border-radius:8px;margin-bottom:2px}._healBar_zdqdf_8{background:linear-gradient(135deg,#64ffde,#64ff90);height:2px;border-radius:4px}._dpsContainer_zdqdf_14{display:flex;flex-direction:column;justify-content:flex-start;width:100%;gap:4px;box-sizing:content-box;padding:16px}._dpsRow_zdqdf_24{display:flex;flex-direction:row;justify-content:space-between;align-items:center}._dpsNumber_zdqdf_31{width:128px;text-align:right}._hidden_zdqdf_36{display:none}._player_zdqdf_40{flex-grow:1}._checkboxColor_zdqdf_44{accent-color:#64d3ff}._dungeonContainer_3nxyx_1{border-radius:1rem;width:100%;padding:2rem;display:flex;flex-direction:column;gap:1rem}._tag_3nxyx_12{background-color:#64d3ff;padding:0 1rem;border-radius:1rem;color:#0f3c4e;font-weight:700}._stickToTop_3nxyx_20{z-index:10;position:sticky;top:64px;left:0;width:100%;padding:24px 0}._container_pkz1i_1{display:flex;flex-direction:column;align-items:center;gap:8px;width:100%;gap:1.5rem}._snackbar_pkz1i_10{position:fixed;right:64px}._stats_pkz1i_15{display:flex;flex-direction:row;align-items:center;gap:.5rem}._options_pkz1i_22{display:flex;flex-direction:row;align-items:center;gap:2rem}._row_pkz1i_29{display:flex;width:100%;justify-content:space-between}._hidden_pkz1i_35{display:none}
@@ -1 +0,0 @@
1
- *{box-sizing:border-box}:root{font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#ffffffde;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}p{margin:0}a{font-weight:500;color:#646cff;text-decoration:inherit}a:hover{color:#535bf2}#root,body{margin:auto;display:flex;flex-direction:column;justify-content:start;align-items:center;min-width:320px;min-height:100vh;color:#fff;width:100%}h1{font-size:2em;line-height:1}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}@media (prefers-color-scheme: light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}}._dmgBar_uvx94_1{background:linear-gradient(135deg,#ff6486,#6486ff);height:6px;border-radius:8px;margin-bottom:2px}._healBar_uvx94_8{background:linear-gradient(135deg,#64ffde,#64ff90);height:2px;border-radius:4px}._dpsContainer_uvx94_14{display:flex;flex-direction:column;justify-content:flex-start;width:100%;gap:4px;box-sizing:content-box;padding:16px}._dpsRow_uvx94_24{display:flex;flex-direction:row;justify-content:space-between;align-items:center}._dpsNumber_uvx94_31{width:128px;text-align:right}._dpsButton_uvx94_36{display:flex;flex-grow:1;gap:1rem}._hidden_uvx94_42{display:none}._player_uvx94_46{flex-grow:1}._checkboxColor_uvx94_50{accent-color:#64d3ff}._dungeonContainer_3nxyx_1{border-radius:1rem;width:100%;padding:2rem;display:flex;flex-direction:column;gap:1rem}._tag_3nxyx_12{background-color:#64d3ff;padding:0 1rem;border-radius:1rem;color:#0f3c4e;font-weight:700}._stickToTop_3nxyx_20{z-index:10;position:sticky;top:64px;left:0;width:100%;padding:24px 0}._container_pkz1i_1{display:flex;flex-direction:column;align-items:center;gap:8px;width:100%;gap:1.5rem}._snackbar_pkz1i_10{position:fixed;right:64px}._stats_pkz1i_15{display:flex;flex-direction:row;align-items:center;gap:.5rem}._options_pkz1i_22{display:flex;flex-direction:row;align-items:center;gap:2rem}._row_pkz1i_29{display:flex;width:100%;justify-content:space-between}._hidden_pkz1i_35{display:none}