{"id":545,"date":"2026-04-09T22:04:23","date_gmt":"2026-04-09T13:04:23","guid":{"rendered":"https:\/\/usagi-jima.org\/?page_id=545"},"modified":"2026-04-09T22:04:23","modified_gmt":"2026-04-09T13:04:23","slug":"%e5%9b%b0%e3%81%a3%e3%81%a6%e3%81%84%e3%82%8b%e3%81%86%e3%81%95%e3%81%8e%e6%83%85%e5%a0%b1","status":"publish","type":"page","link":"https:\/\/usagi-jima.org\/?page_id=545","title":{"rendered":"\u56f0\u3063\u3066\u3044\u308b\u3046\u3055\u304e\u60c5\u5831"},"content":{"rendered":"<h2>\ud83d\udea8 \u602a\u6211\u30fb\u7dca\u6025\u30fb\u6ce8\u610f\u60c5\u5831<\/h2>\n<p>\u602a\u6211\u3092\u3057\u305f\u3046\u3055\u304e\u3084\u6ce8\u610f\u304c\u5fc5\u8981\u306a\u30a8\u30ea\u30a2\u306e\u6700\u65b0\u5831\u544a\u3067\u3059\u3002<\/p>\n    <style>\n      .usagi-timeline{display:flex;flex-direction:column;gap:6px;font-size:13px}\n      .usagi-tl-item{display:flex;align-items:center;gap:8px;padding:8px 10px;background:#fff;border:1px solid #e0e0e0;border-radius:6px;text-decoration:none;color:#222}\n      .usagi-tl-item:hover{background:#f5faff;border-color:#90caf9}\n      .usagi-tl-item .icon{font-size:18px;flex-shrink:0;width:28px;text-align:center}\n      .usagi-tl-item .body{flex:1;min-width:0}\n      .usagi-tl-item .title{font-weight:bold;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n      .usagi-tl-item .meta{font-size:11px;color:#666}\n      .usagi-tl-item .badge{font-size:10px;padding:2px 6px;border-radius:10px;background:#eef;color:#446;flex-shrink:0}\n      .usagi-tl-empty{padding:20px;text-align:center;color:#999}\n    <\/style>\n    <div id=\"usagi-tl-9ebf89b3-9e67-422d-a73c-9342c43fbcca\" class=\"usagi-timeline\"><\/div>\n    <script>\n    (function(){\n      var items = [];\n      var i18n = {\"ja\":{\"name\":\"\u65e5\u672c\u8a9e\",\"add_btn\":\"\ud83d\udccd \u60c5\u5831\u3092\u8ffd\u52a0\",\"end_add\":\"\u2715 \u8ffd\u52a0\u30e2\u30fc\u30c9\u3092\u7d42\u4e86\",\"instruction\":\"\ud83d\udccd \u5730\u56f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u65b0\u3057\u3044\u30ec\u30dd\u30fc\u30c8\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\",\"login_required\":\"\u60c5\u5831\u306e\u8ffd\u52a0\u30fb\u7de8\u96c6\u306b\u306f\u30ed\u30b0\u30a4\u30f3\u304c\u5fc5\u8981\u3067\u3059\",\"login\":\"\u30ed\u30b0\u30a4\u30f3\",\"register\":\"\u65b0\u898f\u767b\u9332\",\"logout\":\"\u30ed\u30b0\u30a2\u30a6\u30c8\",\"quota_admin\":\"\u7ba1\u7406\u8005(\u7121\u5236\u9650)\",\"quota\":\"\u672c\u65e5\u306e\u8ffd\u52a0\u30fb\u7de8\u96c6 {used} \/ {limit}\",\"edit\":\"\u7de8\u96c6\",\"delete\":\"\u524a\u9664\",\"delete_request\":\"\u524a\u9664\u3092\u7533\u8acb\",\"tap_water\":\"\ud83d\udca7 \u6c34\u3084\u308a\u5831\u544a\",\"tap_food\":\"\ud83e\udd55 \u990c\u3084\u308a\u5831\u544a\",\"last_water\":\"\ud83d\udca7 \u6700\u7d42\u6c34\u3084\u308a\",\"last_food\":\"\ud83e\udd55 \u6700\u7d42\u990c\u3084\u308a\",\"owner\":\"\u6240\u6709\u8005\",\"detail\":\"\u8a73\u7d30\u3092\u8aad\u3080 \u2192\",\"pending_delete\":\"\u26a0 \u524a\u9664\u7533\u8acb\u4e2d\",\"title_label\":\"\u30bf\u30a4\u30c8\u30eb\",\"type_label\":\"\u7a2e\u5225\",\"content_label\":\"\u5185\u5bb9\",\"image_label\":\"\u753b\u50cf(\u4efb\u610f\u30fb5MB\u4ee5\u4e0b)\",\"lat_label\":\"\u7def\u5ea6\",\"lng_label\":\"\u7d4c\u5ea6\",\"cancel\":\"\u30ad\u30e3\u30f3\u30bb\u30eb\",\"save\":\"\u4fdd\u5b58\",\"add_modal\":\"\u65b0\u3057\u3044\u30ec\u30dd\u30fc\u30c8\u3092\u8ffd\u52a0\",\"edit_modal\":\"\u30ec\u30dd\u30fc\u30c8\u3092\u7de8\u96c6\",\"legend\":\"\u51e1\u4f8b\",\"confirm_delete\":\"\u3053\u306e\u30de\u30fc\u30ab\u30fc\u3092\u524a\u9664\u3057\u307e\u3059\u304b?\",\"confirm_delreq\":\"\u3053\u306e\u30de\u30fc\u30ab\u30fc\u306f\u4ed6\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u7ba1\u7406\u3057\u3066\u3044\u307e\u3059\u3002\u524a\u9664\u7533\u8acb\u3092\u9001\u4fe1\u3057\u307e\u3059\u304b?\\\\n\u6240\u6709\u8005\u306b\u30e1\u30fc\u30eb\u901a\u77e5\u304c\u9001\u3089\u308c\u3001\u627f\u8a8d\u3055\u308c\u308b\u3068\u524a\u9664\u3055\u308c\u307e\u3059\u3002\",\"delreq_sent\":\"\u524a\u9664\u7533\u8acb\u3092\u9001\u4fe1\u3057\u307e\u3057\u305f\u3002\u6240\u6709\u8005\u306e\u627f\u8a8d\u3092\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u3002\",\"lang\":\"\u8a00\u8a9e\",\"types\":{\"water\":\"\ud83d\udca7 \u6c34\u3084\u308a\",\"food\":\"\ud83e\udd55 \u990c\u3084\u308a\",\"injury\":\"\ud83d\udea8 \u602a\u6211\u30fb\u7dca\u6025\",\"caution\":\"\u26a0 \u6ce8\u610f\",\"general\":\"\ud83d\udccd \u4e00\u822c\",\"water_shortage\":\"\ud83c\udd98 \u6c34\u4e0d\u8db3\u30dd\u30a4\u30f3\u30c8\",\"water_vessel\":\"\ud83e\udea3 \u6c34\u5165\u308c\u8a2d\u7f6e\u5834\u6240\"},\"errors\":{\"login_required\":\"\u30ed\u30b0\u30a4\u30f3\u304c\u5fc5\u8981\u3067\u3059\",\"nonce_failed\":\"\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u691c\u8a3c\u306b\u5931\u6557\u3057\u307e\u3057\u305f\",\"coords_invalid\":\"\u5ea7\u6a19\u304c\u5927\u4e45\u91ce\u5cf6\u306e\u7bc4\u56f2\u5916\u3067\u3059\",\"title_required\":\"\u30bf\u30a4\u30c8\u30eb\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\",\"daily_limit\":\"\u672c\u65e5\u306e\u8ffd\u52a0\u30fb\u7de8\u96c6\u306e\u4e0a\u9650(20\u4ef6)\u306b\u9054\u3057\u307e\u3057\u305f\u3002\u660e\u65e5\u4ee5\u964d\u306b\u518d\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002\",\"rate_limit\":\"\u64cd\u4f5c\u304c\u65e9\u3059\u304e\u307e\u3059\u3002\u5c11\u3057\u5f85\u3063\u3066\u304b\u3089\u518d\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002\",\"tap_rate\":\"\u9023\u7d9a\u30bf\u30c3\u30d7\u306f\u5c11\u3057\u9593\u9694\u3092\u3042\u3051\u3066\u304f\u3060\u3055\u3044\",\"no_permission\":\"\u6a29\u9650\u304c\u3042\u308a\u307e\u305b\u3093\",\"image_too_large\":\"\u753b\u50cf\u306f5MB\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\",\"image_invalid_format\":\"\u5bfe\u5fdc\u3057\u3066\u3044\u306a\u3044\u753b\u50cf\u5f62\u5f0f\u3067\u3059(JPEG\/PNG\/WebP\/GIF)\",\"upload_failed\":\"\u753b\u50cf\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306b\u5931\u6557\u3057\u307e\u3057\u305f\",\"save_failed\":\"\u4fdd\u5b58\u306b\u5931\u6557\u3057\u307e\u3057\u305f\",\"not_found\":\"\u5bfe\u8c61\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\",\"reason_required\":\"\u524a\u9664\u7406\u7531\u30925\u6587\u5b57\u4ee5\u4e0a\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\"},\"tl_action\":{\"add\":\"\u8ffd\u52a0\",\"edit\":\"\u7de8\u96c6\",\"water\":\"\u6c34\u3084\u308a\u5831\u544a\",\"food\":\"\u990c\u3084\u308a\u5831\u544a\",\"delete\":\"\u524a\u9664\"},\"delreq_modal_title\":\"\u524a\u9664\u3092\u7533\u8acb\",\"delreq_reason_label\":\"\u524a\u9664\u3059\u3079\u304d\u7406\u7531(\u5fc5\u9808\u30fb5\u6587\u5b57\u4ee5\u4e0a)\",\"delreq_reason_ph\":\"\u4f8b: \u65e2\u306b\u540c\u3058\u5834\u6240\u306b\u65b0\u3057\u3044\u30de\u30fc\u30ab\u30fc\u304c\u8ffd\u52a0\u3055\u308c\u305f\u305f\u3081\u91cd\u8907\u3057\u3066\u3044\u307e\u3059\",\"delreq_image_label\":\"\u8a3c\u62e0\u753b\u50cf(\u4efb\u610f\u30fb5MB\u4ee5\u4e0b)\",\"send\":\"\u9001\u4fe1\",\"pending_request\":\"\u26a0 \u3042\u306a\u305f\u306e\u30de\u30fc\u30ab\u30fc\u306b\u524a\u9664\u7533\u8acb\u304c\u5c4a\u3044\u3066\u3044\u307e\u3059\",\"request_from\":\"\u7533\u8acb\u8005\",\"request_reason\":\"\u7406\u7531\",\"request_image\":\"\u6dfb\u4ed8\u753b\u50cf\",\"approve_with_msg\":\"\u2713 \u627f\u8a8d\u3057\u3066\u524a\u9664\",\"reject_with_msg\":\"\u2717 \u62d2\u5426\u3057\u3066\u4fdd\u6301\",\"response_label\":\"\u7533\u8acb\u8005\u3078\u306e\u30e1\u30c3\u30bb\u30fc\u30b8(\u4efb\u610f)\",\"response_ph\":\"\u4f8b: \u78ba\u8a8d\u3057\u307e\u3057\u305f\u3002\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u3002\",\"reason_required_err\":\"\u524a\u9664\u7406\u7531\u30925\u6587\u5b57\u4ee5\u4e0a\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\",\"locate_me\":\"\ud83d\udccd \u73fe\u5728\u5730\",\"report_here\":\"\ud83d\udccd \u3053\u3053\u3067\u5831\u544a\",\"follow_on\":\"\ud83d\udef0 \u8ffd\u5f93ON\",\"follow_off\":\"\ud83d\udef0 \u8ffd\u5f93OFF\",\"locating\":\"\u4f4d\u7f6e\u60c5\u5831\u3092\u53d6\u5f97\u4e2d\u2026\",\"location_error\":\"\u4f4d\u7f6e\u60c5\u5831\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\",\"outside_island\":\"\u26a0 \u73fe\u5728\u5730\u304c\u5927\u4e45\u91ce\u5cf6\u306e\u7bc4\u56f2\u5916\u3067\u3059\",\"fullscreen\":\"\ud83d\udcf1 \u5168\u753b\u9762\",\"back\":\"\u2190 \u623b\u308b\",\"back_to_island\":\"\u5927\u4e45\u91ce\u5cf6\u306b\u623b\u308b\",\"gps_accuracy\":\"GPS\u7cbe\u5ea6\"},\"en\":{\"name\":\"English\",\"add_btn\":\"\ud83d\udccd Add Report\",\"end_add\":\"\u2715 Cancel Add\",\"instruction\":\"\ud83d\udccd Click on the map to add a new report\",\"login_required\":\"Login required to add or edit information\",\"login\":\"Log in\",\"register\":\"Register\",\"logout\":\"Log out\",\"quota_admin\":\"Admin (unlimited)\",\"quota\":\"Today: {used} \/ {limit}\",\"edit\":\"Edit\",\"delete\":\"Delete\",\"delete_request\":\"Request Delete\",\"tap_water\":\"\ud83d\udca7 Water Given\",\"tap_food\":\"\ud83e\udd55 Food Given\",\"last_water\":\"\ud83d\udca7 Last water\",\"last_food\":\"\ud83e\udd55 Last food\",\"owner\":\"Owner\",\"detail\":\"Read more \u2192\",\"pending_delete\":\"\u26a0 Delete request pending\",\"title_label\":\"Title\",\"type_label\":\"Category\",\"content_label\":\"Description\",\"image_label\":\"Image (optional, max 5MB)\",\"lat_label\":\"Lat\",\"lng_label\":\"Lng\",\"cancel\":\"Cancel\",\"save\":\"Save\",\"add_modal\":\"Add New Report\",\"edit_modal\":\"Edit Report\",\"legend\":\"Legend\",\"confirm_delete\":\"Delete this marker?\",\"confirm_delreq\":\"This marker belongs to another user. Send a delete request?\\\\nThe owner will be notified by email and can approve.\",\"delreq_sent\":\"Delete request sent. Waiting for owner approval.\",\"lang\":\"Language\",\"types\":{\"water\":\"\ud83d\udca7 Watering\",\"food\":\"\ud83e\udd55 Feeding\",\"injury\":\"\ud83d\udea8 Injury \/ Emergency\",\"caution\":\"\u26a0 Caution\",\"general\":\"\ud83d\udccd General\",\"water_shortage\":\"\ud83c\udd98 Water Shortage\",\"water_vessel\":\"\ud83e\udea3 Water Vessel\"},\"errors\":{\"login_required\":\"Login required\",\"nonce_failed\":\"Security verification failed\",\"coords_invalid\":\"Coordinates outside Okunoshima area\",\"title_required\":\"Title is required\",\"daily_limit\":\"Daily edit limit (20) reached. Please try again tomorrow.\",\"rate_limit\":\"Too fast. Please wait a moment.\",\"tap_rate\":\"Please wait between taps\",\"no_permission\":\"Permission denied\",\"image_too_large\":\"Image must be under 5MB\",\"image_invalid_format\":\"Unsupported image format (JPEG\/PNG\/WebP\/GIF only)\",\"upload_failed\":\"Image upload failed\",\"save_failed\":\"Save failed\",\"not_found\":\"Not found\",\"reason_required\":\"Please enter a reason of at least 5 characters\"},\"tl_action\":{\"add\":\"Added\",\"edit\":\"Edited\",\"water\":\"Watered\",\"food\":\"Fed\",\"delete\":\"Deleted\"},\"delreq_modal_title\":\"Request Deletion\",\"delreq_reason_label\":\"Reason for deletion (required, 5+ chars)\",\"delreq_reason_ph\":\"e.g., A new marker was added at the same location, this one is now a duplicate\",\"delreq_image_label\":\"Supporting image (optional, max 5MB)\",\"send\":\"Send\",\"pending_request\":\"\u26a0 A deletion request has been received for your marker\",\"request_from\":\"From\",\"request_reason\":\"Reason\",\"request_image\":\"Attached image\",\"approve_with_msg\":\"\u2713 Approve & delete\",\"reject_with_msg\":\"\u2717 Reject & keep\",\"response_label\":\"Message to the requester (optional)\",\"response_ph\":\"e.g., Confirmed, thank you.\",\"reason_required_err\":\"Please enter a reason of at least 5 characters\",\"locate_me\":\"\ud83d\udccd My Location\",\"report_here\":\"\ud83d\udccd Report Here\",\"follow_on\":\"\ud83d\udef0 Follow ON\",\"follow_off\":\"\ud83d\udef0 Follow OFF\",\"locating\":\"Getting location\u2026\",\"location_error\":\"Could not get your location\",\"outside_island\":\"\u26a0 Your location is outside Okunoshima\",\"fullscreen\":\"\ud83d\udcf1 Fullscreen\",\"back\":\"\u2190 Back\",\"back_to_island\":\"Back to Okunoshima\",\"gps_accuracy\":\"GPS accuracy\"},\"zh\":{\"name\":\"\u4e2d\u6587\",\"add_btn\":\"\ud83d\udccd \u6dfb\u52a0\u62a5\u544a\",\"end_add\":\"\u2715 \u53d6\u6d88\u6dfb\u52a0\",\"instruction\":\"\ud83d\udccd \u70b9\u51fb\u5730\u56fe\u6dfb\u52a0\u65b0\u7684\u62a5\u544a\",\"login_required\":\"\u6dfb\u52a0\u548c\u7f16\u8f91\u4fe1\u606f\u9700\u8981\u767b\u5f55\",\"login\":\"\u767b\u5f55\",\"register\":\"\u6ce8\u518c\",\"logout\":\"\u767b\u51fa\",\"quota_admin\":\"\u7ba1\u7406\u5458(\u65e0\u9650)\",\"quota\":\"\u4eca\u65e5: {used} \/ {limit}\",\"edit\":\"\u7f16\u8f91\",\"delete\":\"\u5220\u9664\",\"delete_request\":\"\u7533\u8bf7\u5220\u9664\",\"tap_water\":\"\ud83d\udca7 \u5df2\u5582\u6c34\",\"tap_food\":\"\ud83e\udd55 \u5df2\u5582\u98df\",\"last_water\":\"\ud83d\udca7 \u6700\u8fd1\u5582\u6c34\",\"last_food\":\"\ud83e\udd55 \u6700\u8fd1\u5582\u98df\",\"owner\":\"\u6240\u6709\u8005\",\"detail\":\"\u9605\u8bfb\u8be6\u60c5 \u2192\",\"pending_delete\":\"\u26a0 \u5220\u9664\u7533\u8bf7\u4e2d\",\"title_label\":\"\u6807\u9898\",\"type_label\":\"\u7c7b\u522b\",\"content_label\":\"\u5185\u5bb9\",\"image_label\":\"\u56fe\u7247(\u53ef\u9009,\u6700\u59275MB)\",\"lat_label\":\"\u7eac\u5ea6\",\"lng_label\":\"\u7ecf\u5ea6\",\"cancel\":\"\u53d6\u6d88\",\"save\":\"\u4fdd\u5b58\",\"add_modal\":\"\u6dfb\u52a0\u65b0\u62a5\u544a\",\"edit_modal\":\"\u7f16\u8f91\u62a5\u544a\",\"legend\":\"\u56fe\u4f8b\",\"confirm_delete\":\"\u786e\u5b9a\u5220\u9664\u6b64\u6807\u8bb0?\",\"confirm_delreq\":\"\u6b64\u6807\u8bb0\u5c5e\u4e8e\u5176\u4ed6\u7528\u6237\u3002\u662f\u5426\u53d1\u9001\u5220\u9664\u7533\u8bf7?\\\\n\u6240\u6709\u8005\u5c06\u6536\u5230\u90ae\u4ef6\u901a\u77e5,\u6279\u51c6\u540e\u624d\u4f1a\u5220\u9664\u3002\",\"delreq_sent\":\"\u5220\u9664\u7533\u8bf7\u5df2\u53d1\u9001,\u7b49\u5f85\u6240\u6709\u8005\u6279\u51c6\u3002\",\"lang\":\"\u8bed\u8a00\",\"types\":{\"water\":\"\ud83d\udca7 \u5582\u6c34\",\"food\":\"\ud83e\udd55 \u5582\u98df\",\"injury\":\"\ud83d\udea8 \u53d7\u4f24\/\u7d27\u6025\",\"caution\":\"\u26a0 \u6ce8\u610f\",\"general\":\"\ud83d\udccd \u4e00\u822c\",\"water_shortage\":\"\ud83c\udd98 \u7f3a\u6c34\u70b9\",\"water_vessel\":\"\ud83e\udea3 \u6c34\u5bb9\u5668\u4f4d\u7f6e\"},\"errors\":{\"login_required\":\"\u9700\u8981\u767b\u5f55\",\"nonce_failed\":\"\u5b89\u5168\u9a8c\u8bc1\u5931\u8d25\",\"coords_invalid\":\"\u5750\u6807\u4e0d\u5728\u5927\u4e45\u91ce\u5c9b\u8303\u56f4\u5185\",\"title_required\":\"\u8bf7\u8f93\u5165\u6807\u9898\",\"daily_limit\":\"\u4eca\u65e5\u6dfb\u52a0\u30fb\u7f16\u8f91\u6b21\u6570\u5df2\u8fbe\u4e0a\u9650(20\u6b21)\u3002\u8bf7\u660e\u5929\u518d\u8bd5\u3002\",\"rate_limit\":\"\u64cd\u4f5c\u8fc7\u5feb,\u8bf7\u7a0d\u5019\u518d\u8bd5\u3002\",\"tap_rate\":\"\u70b9\u51fb\u95f4\u9694\u8fc7\u77ed,\u8bf7\u7a0d\u5019\",\"no_permission\":\"\u6ca1\u6709\u6743\u9650\",\"image_too_large\":\"\u56fe\u7247\u5927\u5c0f\u4e0d\u5f97\u8d85\u8fc75MB\",\"image_invalid_format\":\"\u4e0d\u652f\u6301\u7684\u56fe\u7247\u683c\u5f0f(\u4ec5\u9650JPEG\/PNG\/WebP\/GIF)\",\"upload_failed\":\"\u56fe\u7247\u4e0a\u4f20\u5931\u8d25\",\"save_failed\":\"\u4fdd\u5b58\u5931\u8d25\",\"not_found\":\"\u672a\u627e\u5230\",\"reason_required\":\"\u8bf7\u8f93\u5165\u81f3\u5c115\u4e2a\u5b57\u7b26\u7684\u7406\u7531\"},\"tl_action\":{\"add\":\"\u6dfb\u52a0\",\"edit\":\"\u7f16\u8f91\",\"water\":\"\u5582\u6c34\",\"food\":\"\u5582\u98df\",\"delete\":\"\u5220\u9664\"},\"delreq_modal_title\":\"\u7533\u8bf7\u5220\u9664\",\"delreq_reason_label\":\"\u5220\u9664\u7406\u7531(\u5fc5\u586b,5\u5b57\u4ee5\u4e0a)\",\"delreq_reason_ph\":\"\u4f8b:\u540c\u4e00\u4f4d\u7f6e\u5df2\u6709\u65b0\u6807\u8bb0,\u6b64\u6807\u8bb0\u91cd\u590d\",\"delreq_image_label\":\"\u8bc1\u636e\u56fe\u7247(\u53ef\u9009,\u6700\u59275MB)\",\"send\":\"\u53d1\u9001\",\"pending_request\":\"\u26a0 \u60a8\u7684\u6807\u8bb0\u6536\u5230\u4e86\u5220\u9664\u7533\u8bf7\",\"request_from\":\"\u7533\u8bf7\u4eba\",\"request_reason\":\"\u7406\u7531\",\"request_image\":\"\u9644\u56fe\",\"approve_with_msg\":\"\u2713 \u6279\u51c6\u5e76\u5220\u9664\",\"reject_with_msg\":\"\u2717 \u62d2\u7edd\u5e76\u4fdd\u7559\",\"response_label\":\"\u7ed9\u7533\u8bf7\u4eba\u7684\u6d88\u606f(\u53ef\u9009)\",\"response_ph\":\"\u4f8b:\u5df2\u786e\u8ba4,\u8c22\u8c22\u3002\",\"reason_required_err\":\"\u8bf7\u8f93\u5165\u81f3\u5c115\u4e2a\u5b57\u7b26\u7684\u7406\u7531\",\"locate_me\":\"\ud83d\udccd \u6211\u7684\u4f4d\u7f6e\",\"report_here\":\"\ud83d\udccd \u5728\u6b64\u62a5\u544a\",\"follow_on\":\"\ud83d\udef0 \u8ddf\u8e2a\u5f00\u542f\",\"follow_off\":\"\ud83d\udef0 \u8ddf\u8e2a\u5173\u95ed\",\"locating\":\"\u6b63\u5728\u83b7\u53d6\u4f4d\u7f6e\u2026\",\"location_error\":\"\u65e0\u6cd5\u83b7\u53d6\u4f4d\u7f6e\",\"outside_island\":\"\u26a0 \u5f53\u524d\u4f4d\u7f6e\u5728\u5927\u4e45\u91ce\u5c9b\u8303\u56f4\u5916\",\"fullscreen\":\"\ud83d\udcf1 \u5168\u5c4f\",\"back\":\"\u2190 \u8fd4\u56de\",\"back_to_island\":\"\u8fd4\u56de\u5927\u4e45\u91ce\u5c9b\",\"gps_accuracy\":\"GPS\u7cbe\u5ea6\"},\"ko\":{\"name\":\"\ud55c\uad6d\uc5b4\",\"add_btn\":\"\ud83d\udccd \uc815\ubcf4 \ucd94\uac00\",\"end_add\":\"\u2715 \ucd94\uac00 \ucde8\uc18c\",\"instruction\":\"\ud83d\udccd \uc9c0\ub3c4\ub97c \ud074\ub9ad\ud558\uc5ec \uc0c8 \ubcf4\uace0\uc11c\ub97c \ucd94\uac00\ud558\uc138\uc694\",\"login_required\":\"\uc815\ubcf4 \ucd94\uac00\/\ud3b8\uc9d1\uc5d0\ub294 \ub85c\uadf8\uc778\uc774 \ud544\uc694\ud569\ub2c8\ub2e4\",\"login\":\"\ub85c\uadf8\uc778\",\"register\":\"\ud68c\uc6d0\uac00\uc785\",\"logout\":\"\ub85c\uadf8\uc544\uc6c3\",\"quota_admin\":\"\uad00\ub9ac\uc790(\ubb34\uc81c\ud55c)\",\"quota\":\"\uc624\ub298: {used} \/ {limit}\",\"edit\":\"\ud3b8\uc9d1\",\"delete\":\"\uc0ad\uc81c\",\"delete_request\":\"\uc0ad\uc81c \uc694\uccad\",\"tap_water\":\"\ud83d\udca7 \ubb3c \uc900 \uae30\ub85d\",\"tap_food\":\"\ud83e\udd55 \uba39\uc774 \uc900 \uae30\ub85d\",\"last_water\":\"\ud83d\udca7 \ucd5c\uadfc \ubb3c\uc8fc\uae30\",\"last_food\":\"\ud83e\udd55 \ucd5c\uadfc \uba39\uc774\uc8fc\uae30\",\"owner\":\"\uc18c\uc720\uc790\",\"detail\":\"\uc790\uc138\ud788 \ubcf4\uae30 \u2192\",\"pending_delete\":\"\u26a0 \uc0ad\uc81c \uc694\uccad \uc911\",\"title_label\":\"\uc81c\ubaa9\",\"type_label\":\"\uc885\ub958\",\"content_label\":\"\ub0b4\uc6a9\",\"image_label\":\"\uc774\ubbf8\uc9c0(\uc120\ud0dd, 5MB \uc774\ud558)\",\"lat_label\":\"\uc704\ub3c4\",\"lng_label\":\"\uacbd\ub3c4\",\"cancel\":\"\ucde8\uc18c\",\"save\":\"\uc800\uc7a5\",\"add_modal\":\"\uc0c8 \ubcf4\uace0\uc11c \ucd94\uac00\",\"edit_modal\":\"\ubcf4\uace0\uc11c \ud3b8\uc9d1\",\"legend\":\"\ubc94\ub840\",\"confirm_delete\":\"\uc774 \ub9c8\ucee4\ub97c \uc0ad\uc81c\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?\",\"confirm_delreq\":\"\uc774 \ub9c8\ucee4\ub294 \ub2e4\ub978 \uc0ac\uc6a9\uc790\uac00 \uad00\ub9ac\ud569\ub2c8\ub2e4. \uc0ad\uc81c \uc694\uccad\uc744 \ubcf4\ub0b4\uc2dc\uaca0\uc2b5\ub2c8\uae4c?\\\\n\uc18c\uc720\uc790\uc5d0\uac8c \uc774\uba54\uc77c\uc774 \uc804\uc1a1\ub418\uba70 \uc2b9\uc778 \ud6c4 \uc0ad\uc81c\ub429\ub2c8\ub2e4.\",\"delreq_sent\":\"\uc0ad\uc81c \uc694\uccad\uc774 \uc804\uc1a1\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc18c\uc720\uc790\uc758 \uc2b9\uc778\uc744 \uae30\ub2e4\ub824 \uc8fc\uc138\uc694.\",\"lang\":\"\uc5b8\uc5b4\",\"types\":{\"water\":\"\ud83d\udca7 \ubb3c\uc8fc\uae30\",\"food\":\"\ud83e\udd55 \uba39\uc774\uc8fc\uae30\",\"injury\":\"\ud83d\udea8 \ubd80\uc0c1\/\uae34\uae09\",\"caution\":\"\u26a0 \uc8fc\uc758\",\"general\":\"\ud83d\udccd \uc77c\ubc18\",\"water_shortage\":\"\ud83c\udd98 \ubb3c \ubd80\uc871 \uc9c0\uc810\",\"water_vessel\":\"\ud83e\udea3 \ubb3c\uadf8\ub987 \uc704\uce58\"},\"errors\":{\"login_required\":\"\ub85c\uadf8\uc778\uc774 \ud544\uc694\ud569\ub2c8\ub2e4\",\"nonce_failed\":\"\ubcf4\uc548 \uac80\uc99d \uc2e4\ud328\",\"coords_invalid\":\"\uc88c\ud45c\uac00 \uc624\ucfe0\ub178\uc2dc\ub9c8 \ubc94\uc704\ub97c \ubc97\uc5b4\ub0ac\uc2b5\ub2c8\ub2e4\",\"title_required\":\"\uc81c\ubaa9\uc744 \uc785\ub825\ud558\uc138\uc694\",\"daily_limit\":\"\uc624\ub298\uc758 \ucd94\uac00\u00b7\ud3b8\uc9d1 \ud55c\ub3c4(20\uac74)\uc5d0 \ub3c4\ub2ec\ud588\uc2b5\ub2c8\ub2e4. \ub0b4\uc77c \ub2e4\uc2dc \uc2dc\ub3c4\ud574 \uc8fc\uc138\uc694.\",\"rate_limit\":\"\ub108\ubb34 \ube60\ub985\ub2c8\ub2e4. \uc7a0\uc2dc \ud6c4 \ub2e4\uc2dc \uc2dc\ub3c4\ud558\uc138\uc694.\",\"tap_rate\":\"\uc5f0\uc18d \ud0ed \uac04\uaca9\uc744 \ub450\uc138\uc694\",\"no_permission\":\"\uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4\",\"image_too_large\":\"\uc774\ubbf8\uc9c0\ub294 5MB \uc774\ud558\uc5ec\uc57c \ud569\ub2c8\ub2e4\",\"image_invalid_format\":\"\uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294 \uc774\ubbf8\uc9c0 \ud615\uc2dd (JPEG\/PNG\/WebP\/GIF)\",\"upload_failed\":\"\uc774\ubbf8\uc9c0 \uc5c5\ub85c\ub4dc \uc2e4\ud328\",\"save_failed\":\"\uc800\uc7a5 \uc2e4\ud328\",\"not_found\":\"\ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4\",\"reason_required\":\"5\uc790 \uc774\uc0c1\uc758 \uc774\uc720\ub97c \uc785\ub825\ud574 \uc8fc\uc138\uc694\"},\"tl_action\":{\"add\":\"\ucd94\uac00\",\"edit\":\"\ud3b8\uc9d1\",\"water\":\"\ubb3c\uc8fc\uae30\",\"food\":\"\uba39\uc774\uc8fc\uae30\",\"delete\":\"\uc0ad\uc81c\"},\"delreq_modal_title\":\"\uc0ad\uc81c \uc694\uccad\",\"delreq_reason_label\":\"\uc0ad\uc81c\ud574\uc57c \ud560 \uc774\uc720 (\ud544\uc218, 5\uc790 \uc774\uc0c1)\",\"delreq_reason_ph\":\"\uc608: \uac19\uc740 \uc704\uce58\uc5d0 \uc0c8 \ub9c8\ucee4\uac00 \ucd94\uac00\ub418\uc5b4 \uc911\ubcf5\ub429\ub2c8\ub2e4\",\"delreq_image_label\":\"\uc99d\uac70 \uc774\ubbf8\uc9c0 (\uc120\ud0dd, 5MB \uc774\ud558)\",\"send\":\"\ubcf4\ub0b4\uae30\",\"pending_request\":\"\u26a0 \ub2f9\uc2e0\uc758 \ub9c8\ucee4\uc5d0 \uc0ad\uc81c \uc694\uccad\uc774 \ub3c4\ucc29\ud588\uc2b5\ub2c8\ub2e4\",\"request_from\":\"\uc2e0\uccad\uc790\",\"request_reason\":\"\uc774\uc720\",\"request_image\":\"\ucca8\ubd80 \uc774\ubbf8\uc9c0\",\"approve_with_msg\":\"\u2713 \uc2b9\uc778 \ud6c4 \uc0ad\uc81c\",\"reject_with_msg\":\"\u2717 \uac70\uc808 \ud6c4 \uc720\uc9c0\",\"response_label\":\"\uc2e0\uccad\uc790\uc5d0\uac8c \ubcf4\ub0bc \uba54\uc2dc\uc9c0 (\uc120\ud0dd)\",\"response_ph\":\"\uc608: \ud655\uc778\ud588\uc2b5\ub2c8\ub2e4. \uac10\uc0ac\ud569\ub2c8\ub2e4.\",\"reason_required_err\":\"5\uc790 \uc774\uc0c1\uc758 \uc774\uc720\ub97c \uc785\ub825\ud574 \uc8fc\uc138\uc694\",\"locate_me\":\"\ud83d\udccd \ub0b4 \uc704\uce58\",\"report_here\":\"\ud83d\udccd \uc5ec\uae30\uc11c \ubcf4\uace0\",\"follow_on\":\"\ud83d\udef0 \ucd94\uc801 ON\",\"follow_off\":\"\ud83d\udef0 \ucd94\uc801 OFF\",\"locating\":\"\uc704\uce58 \uc815\ubcf4\ub97c \uac00\uc838\uc624\ub294 \uc911\u2026\",\"location_error\":\"\uc704\uce58\ub97c \uac00\uc838\uc62c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4\",\"outside_island\":\"\u26a0 \ud604\uc7ac \uc704\uce58\uac00 \uc624\ucfe0\ub178\uc2dc\ub9c8 \ubc94\uc704 \ubc16\uc785\ub2c8\ub2e4\",\"fullscreen\":\"\ud83d\udcf1 \uc804\uccb4\ud654\uba74\",\"back\":\"\u2190 \ub4a4\ub85c\",\"back_to_island\":\"\uc624\ucfe0\ub178\uc2dc\ub9c8\ub85c \ub3cc\uc544\uac00\uae30\",\"gps_accuracy\":\"GPS \uc815\ud655\ub3c4\"}};\n      var base = \"https:\\\/\\\/usagi-jima.org\\\/\";\n      var savedLang = localStorage.getItem('usagi_lang');\n      var browserLang = (navigator.language || 'ja').toLowerCase();\n      var defaultLang = browserLang.indexOf('ja')===0?'ja':(browserLang.indexOf('zh')===0?'zh':(browserLang.indexOf('ko')===0?'ko':'en'));\n      var LANG = savedLang && i18n[savedLang] ? savedLang : defaultLang;\n      var T = i18n[LANG];\n      var icons = {add:'\u2795',edit:'\u270f\ufe0f',water:'\ud83d\udca7',food:'\ud83e\udd55',delete:'\ud83d\uddd1\ufe0f'};\n      var el = document.getElementById('usagi-tl-9ebf89b3-9e67-422d-a73c-9342c43fbcca');\n      if (!items.length) { el.innerHTML = '<div class=\"usagi-tl-empty\">\u2014<\/div>'; return; }\n      var html = '';\n      items.forEach(function(e){\n        var url = base + (base.indexOf('?')>=0?'&':'?') + 'marker=' + e.report_id;\n        var actLabel = T.tl_action[e.action] || e.action;\n        var typeLabel = T.types[e.report_type] || e.report_type;\n        var date = new Date(e.time*1000);\n        var dstr = date.getFullYear()+'-'+pad(date.getMonth()+1)+'-'+pad(date.getDate())+' '+pad(date.getHours())+':'+pad(date.getMinutes());\n        html += '<a class=\"usagi-tl-item\" href=\"'+url+'\">'\n          +'<span class=\"icon\">'+(icons[e.action]||'\u2022')+'<\/span>'\n          +'<span class=\"body\">'\n          +'<span class=\"title\">'+esc(e.title)+'<\/span>'\n          +'<span class=\"meta\">'+esc(actLabel)+' \u00b7 '+esc(typeLabel)+' \u00b7 '+esc(e.user_name)+' \u00b7 '+dstr+'<\/span>'\n          +'<\/span><\/a>';\n      });\n      el.innerHTML = html;\n      function pad(n){return n<10?'0'+n:''+n}\n      function esc(s){ return String(s||'').replace(\/[&<>\"']\/g, function(c){ return ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'})[c]; }); }\n    })();\n    <\/script>\n    \n<h3>\u602a\u6211\u30fb\u6ce8\u610f\u30de\u30c3\u30d7<\/h3>\n    <style>\n      .usagi-map-wrap{margin:0 0 1em 0;position:relative}\n      #usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf{height:50vh;width:100%;border-radius:6px;border:1px solid #ddd}\n      .usagi-popup h4{margin:0 0 4px;font-size:14px}\n      .usagi-popup .meta{font-size:11px;color:#666;margin-bottom:4px}\n      .usagi-popup .owner{font-size:11px;color:#444;background:#eef;padding:2px 6px;border-radius:3px;display:inline-block;margin-bottom:4px}\n      .usagi-popup img{max-width:220px;height:auto;display:block;margin:6px 0;border-radius:4px}\n      .usagi-popup a.detail{display:inline-block;margin-top:6px;font-weight:bold}\n      .usagi-popup .water-food{font-size:11px;background:#f5f9ff;border:1px solid #cfe;padding:4px 6px;border-radius:4px;margin-top:6px;line-height:1.5}\n      .usagi-popup .water-food .row{display:flex;justify-content:space-between;gap:4px}\n      .usagi-popup .actions{margin-top:8px;display:flex;gap:6px;flex-wrap:wrap}\n      .usagi-popup .actions button{padding:4px 8px;font-size:11px;border:1px solid #ccc;background:#f7f7f7;border-radius:4px;cursor:pointer}\n      .usagi-popup .actions .tap-water{background:#e3f2fd;border-color:#90caf9;color:#0277bd}\n      .usagi-popup .actions .tap-food{background:#fff3e0;border-color:#ffb74d;color:#e65100}\n      .usagi-popup .actions .del{color:#c62828;border-color:#e57373}\n      .usagi-popup .pending{background:#fff3e0;border:1px solid #ffb74d;color:#e65100;padding:4px 6px;border-radius:4px;font-size:11px;margin-top:6px}\n      .usagi-popup .req-detail{background:#fff8e1;border:1px solid #ffa726;padding:8px;border-radius:4px;margin-top:6px;font-size:11px;line-height:1.5}\n      .usagi-popup .req-detail strong{display:block;margin-bottom:4px;color:#bf360c}\n      .usagi-popup .req-detail .field{margin:3px 0}\n      .usagi-popup .req-detail .label{font-weight:bold;color:#666}\n      .usagi-popup .req-detail img{max-width:200px;border-radius:3px;margin-top:4px}\n      .usagi-popup .req-detail .decide-btns{display:flex;gap:6px;margin-top:6px}\n      .usagi-popup .req-detail .decide-btns button{flex:1;padding:5px;font-size:11px;border-radius:3px;cursor:pointer;border:1px solid #ccc}\n      .usagi-popup .req-detail .approve{background:#c8e6c9;border-color:#66bb6a;color:#1b5e20}\n      .usagi-popup .req-detail .reject{background:#ffcdd2;border-color:#e57373;color:#b71c1c}\n      .usagi-legend{background:#fff;padding:8px 10px;border-radius:6px;box-shadow:0 1px 4px rgba(0,0,0,.2);font-size:12px;line-height:1.6}\n      .usagi-legend .dot{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:4px;vertical-align:middle}\n      .usagi-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:8px 10px;background:#f5f5f5;border:1px solid #ddd;border-radius:6px;margin-bottom:8px;font-size:13px}\n      .usagi-toolbar .who{color:#444;margin-right:auto}\n      .usagi-toolbar .quota{font-size:12px;color:#666;background:#fff;padding:3px 8px;border-radius:12px;border:1px solid #ddd}\n      .usagi-toolbar .quota.warn{color:#c62828;border-color:#e57373;background:#ffebee}\n      .usagi-toolbar a, .usagi-toolbar button, .usagi-toolbar select{font-size:13px;text-decoration:none;padding:6px 10px;background:#fff;border:1px solid #bbb;border-radius:4px;cursor:pointer;color:#333}\n      .usagi-toolbar button.primary{background:#2e7d32;color:#fff;border-color:#2e7d32;font-weight:bold}\n      .usagi-toolbar button.primary.active{background:#c62828;border-color:#c62828}\n      .usagi-toolbar button.active{background:#1976d2;color:#fff;border-color:#1976d2}\n      .usagi-modal-bg{position:fixed;inset:0;background:rgba(0,0,0,.5);display:none;align-items:center;justify-content:center;z-index:9999}\n      .usagi-modal-bg.show{display:flex}\n      .usagi-modal{background:#fff;padding:20px;border-radius:8px;width:92%;max-width:480px;max-height:90vh;overflow:auto;box-shadow:0 4px 20px rgba(0,0,0,.3)}\n      .usagi-modal h3{margin:0 0 12px;font-size:16px}\n      .usagi-modal label{display:block;margin:8px 0;font-size:13px}\n      .usagi-modal input[type=text],.usagi-modal select,.usagi-modal textarea,.usagi-modal input[type=file]{width:100%;padding:6px 8px;border:1px solid #bbb;border-radius:4px;font-size:14px;box-sizing:border-box}\n      .usagi-modal textarea{min-height:80px;resize:vertical}\n      .usagi-modal .row{display:flex;gap:8px}\n      .usagi-modal .row label{flex:1}\n      .usagi-modal .btns{display:flex;gap:8px;justify-content:flex-end;margin-top:12px}\n      .usagi-modal .btns button{padding:8px 14px;border-radius:4px;border:1px solid #bbb;background:#f5f5f5;cursor:pointer;font-size:13px}\n      .usagi-modal .btns button.primary{background:#2e7d32;color:#fff;border-color:#2e7d32;font-weight:bold}\n      .usagi-modal .err{color:#c62828;font-size:12px;margin-top:8px;min-height:14px}\n      .usagi-modal .preview{margin-top:6px;max-width:100%;max-height:160px;display:none;border-radius:4px}\n      .usagi-instructions{background:#fffde7;border:1px solid #fbc02d;padding:6px 10px;border-radius:4px;font-size:12px;margin-bottom:6px;display:none}\n      .usagi-instructions.show{display:block}\n    <\/style>\n\n    <div class=\"usagi-map-wrap\">\n      <div class=\"usagi-toolbar\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-toolbar\"><\/div>\n      <div class=\"usagi-instructions\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-instr\"><\/div>\n      <div id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf\"><\/div>\n    <\/div>\n\n    <!-- \u524a\u9664\u7533\u8acb\u30e2\u30fc\u30c0\u30eb(\u7406\u7531+\u753b\u50cf) -->\n    <div class=\"usagi-modal-bg\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-delreq-modal\">\n      <div class=\"usagi-modal\">\n        <h3 data-i18n=\"delreq_modal_title\"><\/h3>\n        <input type=\"hidden\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-delreq-id\">\n        <label><span data-i18n=\"delreq_reason_label\"><\/span><textarea id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-delreq-reason\" maxlength=\"500\"><\/textarea><\/label>\n        <label><span data-i18n=\"delreq_image_label\"><\/span><input type=\"file\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-delreq-image\" accept=\"image\/jpeg,image\/png,image\/webp,image\/gif\"><\/label>\n        <div class=\"err\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-delreq-err\"><\/div>\n        <div class=\"btns\">\n          <button type=\"button\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-delreq-cancel\" data-i18n=\"cancel\"><\/button>\n          <button type=\"button\" class=\"primary\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-delreq-send\" data-i18n=\"send\"><\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- \u627f\u8a8d\/\u62d2\u5426\u30e2\u30fc\u30c0\u30eb(\u8fd4\u4fe1\u30e1\u30c3\u30bb\u30fc\u30b8) -->\n    <div class=\"usagi-modal-bg\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-decide-modal\">\n      <div class=\"usagi-modal\">\n        <h3 id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-decide-title\"><\/h3>\n        <input type=\"hidden\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-decide-id\">\n        <input type=\"hidden\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-decide-action\">\n        <label><span data-i18n=\"response_label\"><\/span><textarea id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-decide-message\" maxlength=\"500\"><\/textarea><\/label>\n        <div class=\"err\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-decide-err\"><\/div>\n        <div class=\"btns\">\n          <button type=\"button\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-decide-cancel\" data-i18n=\"cancel\"><\/button>\n          <button type=\"button\" class=\"primary\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-decide-send\" data-i18n=\"send\"><\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"usagi-modal-bg\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-modal\">\n      <div class=\"usagi-modal\">\n        <h3 id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-mtitle\"><\/h3>\n        <input type=\"hidden\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-rid\">\n        <input type=\"hidden\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-rlat\">\n        <input type=\"hidden\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-rlng\">\n        <label><span data-i18n=\"title_label\"><\/span><input type=\"text\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-rtitle\" maxlength=\"80\"><\/label>\n        <label><span data-i18n=\"type_label\"><\/span><select id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-rtype\"><\/select><\/label>\n        <label><span data-i18n=\"content_label\"><\/span><textarea id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-rcontent\" maxlength=\"1000\"><\/textarea><\/label>\n        <label><span data-i18n=\"image_label\"><\/span><input type=\"file\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-rimage\" accept=\"image\/jpeg,image\/png,image\/webp,image\/gif\"><img class=\"preview\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-rpreview\"><\/label>\n        <div class=\"row\">\n          <label><span data-i18n=\"lat_label\"><\/span><input type=\"text\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-rlat-show\" readonly><\/label>\n          <label><span data-i18n=\"lng_label\"><\/span><input type=\"text\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-rlng-show\" readonly><\/label>\n        <\/div>\n        <div class=\"err\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-merr\"><\/div>\n        <div class=\"btns\">\n          <button type=\"button\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-cancel\" data-i18n=\"cancel\"><\/button>\n          <button type=\"button\" class=\"primary\" id=\"usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf-save\" data-i18n=\"save\"><\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <script>\n    window.addEventListener('load', function(){\n      if (typeof L === 'undefined') { console.error('Leaflet not loaded'); return; }\n      var cfg = {\"reports\":[],\"type_slugs\":[\"water\",\"food\",\"injury\",\"caution\",\"general\",\"water_shortage\",\"water_vessel\"],\"colors\":{\"water\":\"#3aa0ff\",\"food\":\"#f5a623\",\"injury\":\"#e53935\",\"caution\":\"#fbc02d\",\"general\":\"#4caf50\",\"water_shortage\":\"#d81b60\",\"water_vessel\":\"#039be5\"},\"logged_in\":false,\"is_admin\":false,\"user_id\":0,\"user_name\":\"\",\"daily_used\":0,\"daily_limit\":20,\"ajax_url\":\"https:\/\/usagi-jima.org\/wp-admin\/admin-ajax.php\",\"nonce\":\"e7e761318e\",\"login_url\":\"https:\/\/usagi-jima.org\/wp-login.php?redirect_to=https%3A%2F%2Fusagi-jima.org%2F%3Fpage_id%3D545\",\"register_url\":\"https:\/\/usagi-jima.org\/wp-login.php?action=register\",\"logout_url\":\"https:\/\/usagi-jima.org\/wp-login.php?action=logout&amp;redirect_to=https%3A%2F%2Fusagi-jima.org%2F%3Fpage_id%3D545&amp;_wpnonce=42ac21bc65\",\"i18n\":{\"ja\":{\"name\":\"\u65e5\u672c\u8a9e\",\"add_btn\":\"\ud83d\udccd \u60c5\u5831\u3092\u8ffd\u52a0\",\"end_add\":\"\u2715 \u8ffd\u52a0\u30e2\u30fc\u30c9\u3092\u7d42\u4e86\",\"instruction\":\"\ud83d\udccd \u5730\u56f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u65b0\u3057\u3044\u30ec\u30dd\u30fc\u30c8\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\",\"login_required\":\"\u60c5\u5831\u306e\u8ffd\u52a0\u30fb\u7de8\u96c6\u306b\u306f\u30ed\u30b0\u30a4\u30f3\u304c\u5fc5\u8981\u3067\u3059\",\"login\":\"\u30ed\u30b0\u30a4\u30f3\",\"register\":\"\u65b0\u898f\u767b\u9332\",\"logout\":\"\u30ed\u30b0\u30a2\u30a6\u30c8\",\"quota_admin\":\"\u7ba1\u7406\u8005(\u7121\u5236\u9650)\",\"quota\":\"\u672c\u65e5\u306e\u8ffd\u52a0\u30fb\u7de8\u96c6 {used} \/ {limit}\",\"edit\":\"\u7de8\u96c6\",\"delete\":\"\u524a\u9664\",\"delete_request\":\"\u524a\u9664\u3092\u7533\u8acb\",\"tap_water\":\"\ud83d\udca7 \u6c34\u3084\u308a\u5831\u544a\",\"tap_food\":\"\ud83e\udd55 \u990c\u3084\u308a\u5831\u544a\",\"last_water\":\"\ud83d\udca7 \u6700\u7d42\u6c34\u3084\u308a\",\"last_food\":\"\ud83e\udd55 \u6700\u7d42\u990c\u3084\u308a\",\"owner\":\"\u6240\u6709\u8005\",\"detail\":\"\u8a73\u7d30\u3092\u8aad\u3080 \u2192\",\"pending_delete\":\"\u26a0 \u524a\u9664\u7533\u8acb\u4e2d\",\"title_label\":\"\u30bf\u30a4\u30c8\u30eb\",\"type_label\":\"\u7a2e\u5225\",\"content_label\":\"\u5185\u5bb9\",\"image_label\":\"\u753b\u50cf(\u4efb\u610f\u30fb5MB\u4ee5\u4e0b)\",\"lat_label\":\"\u7def\u5ea6\",\"lng_label\":\"\u7d4c\u5ea6\",\"cancel\":\"\u30ad\u30e3\u30f3\u30bb\u30eb\",\"save\":\"\u4fdd\u5b58\",\"add_modal\":\"\u65b0\u3057\u3044\u30ec\u30dd\u30fc\u30c8\u3092\u8ffd\u52a0\",\"edit_modal\":\"\u30ec\u30dd\u30fc\u30c8\u3092\u7de8\u96c6\",\"legend\":\"\u51e1\u4f8b\",\"confirm_delete\":\"\u3053\u306e\u30de\u30fc\u30ab\u30fc\u3092\u524a\u9664\u3057\u307e\u3059\u304b?\",\"confirm_delreq\":\"\u3053\u306e\u30de\u30fc\u30ab\u30fc\u306f\u4ed6\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u7ba1\u7406\u3057\u3066\u3044\u307e\u3059\u3002\u524a\u9664\u7533\u8acb\u3092\u9001\u4fe1\u3057\u307e\u3059\u304b?\\\\n\u6240\u6709\u8005\u306b\u30e1\u30fc\u30eb\u901a\u77e5\u304c\u9001\u3089\u308c\u3001\u627f\u8a8d\u3055\u308c\u308b\u3068\u524a\u9664\u3055\u308c\u307e\u3059\u3002\",\"delreq_sent\":\"\u524a\u9664\u7533\u8acb\u3092\u9001\u4fe1\u3057\u307e\u3057\u305f\u3002\u6240\u6709\u8005\u306e\u627f\u8a8d\u3092\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u3002\",\"lang\":\"\u8a00\u8a9e\",\"types\":{\"water\":\"\ud83d\udca7 \u6c34\u3084\u308a\",\"food\":\"\ud83e\udd55 \u990c\u3084\u308a\",\"injury\":\"\ud83d\udea8 \u602a\u6211\u30fb\u7dca\u6025\",\"caution\":\"\u26a0 \u6ce8\u610f\",\"general\":\"\ud83d\udccd \u4e00\u822c\",\"water_shortage\":\"\ud83c\udd98 \u6c34\u4e0d\u8db3\u30dd\u30a4\u30f3\u30c8\",\"water_vessel\":\"\ud83e\udea3 \u6c34\u5165\u308c\u8a2d\u7f6e\u5834\u6240\"},\"errors\":{\"login_required\":\"\u30ed\u30b0\u30a4\u30f3\u304c\u5fc5\u8981\u3067\u3059\",\"nonce_failed\":\"\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u691c\u8a3c\u306b\u5931\u6557\u3057\u307e\u3057\u305f\",\"coords_invalid\":\"\u5ea7\u6a19\u304c\u5927\u4e45\u91ce\u5cf6\u306e\u7bc4\u56f2\u5916\u3067\u3059\",\"title_required\":\"\u30bf\u30a4\u30c8\u30eb\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\",\"daily_limit\":\"\u672c\u65e5\u306e\u8ffd\u52a0\u30fb\u7de8\u96c6\u306e\u4e0a\u9650(20\u4ef6)\u306b\u9054\u3057\u307e\u3057\u305f\u3002\u660e\u65e5\u4ee5\u964d\u306b\u518d\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002\",\"rate_limit\":\"\u64cd\u4f5c\u304c\u65e9\u3059\u304e\u307e\u3059\u3002\u5c11\u3057\u5f85\u3063\u3066\u304b\u3089\u518d\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002\",\"tap_rate\":\"\u9023\u7d9a\u30bf\u30c3\u30d7\u306f\u5c11\u3057\u9593\u9694\u3092\u3042\u3051\u3066\u304f\u3060\u3055\u3044\",\"no_permission\":\"\u6a29\u9650\u304c\u3042\u308a\u307e\u305b\u3093\",\"image_too_large\":\"\u753b\u50cf\u306f5MB\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\",\"image_invalid_format\":\"\u5bfe\u5fdc\u3057\u3066\u3044\u306a\u3044\u753b\u50cf\u5f62\u5f0f\u3067\u3059(JPEG\/PNG\/WebP\/GIF)\",\"upload_failed\":\"\u753b\u50cf\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306b\u5931\u6557\u3057\u307e\u3057\u305f\",\"save_failed\":\"\u4fdd\u5b58\u306b\u5931\u6557\u3057\u307e\u3057\u305f\",\"not_found\":\"\u5bfe\u8c61\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\",\"reason_required\":\"\u524a\u9664\u7406\u7531\u30925\u6587\u5b57\u4ee5\u4e0a\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\"},\"tl_action\":{\"add\":\"\u8ffd\u52a0\",\"edit\":\"\u7de8\u96c6\",\"water\":\"\u6c34\u3084\u308a\u5831\u544a\",\"food\":\"\u990c\u3084\u308a\u5831\u544a\",\"delete\":\"\u524a\u9664\"},\"delreq_modal_title\":\"\u524a\u9664\u3092\u7533\u8acb\",\"delreq_reason_label\":\"\u524a\u9664\u3059\u3079\u304d\u7406\u7531(\u5fc5\u9808\u30fb5\u6587\u5b57\u4ee5\u4e0a)\",\"delreq_reason_ph\":\"\u4f8b: \u65e2\u306b\u540c\u3058\u5834\u6240\u306b\u65b0\u3057\u3044\u30de\u30fc\u30ab\u30fc\u304c\u8ffd\u52a0\u3055\u308c\u305f\u305f\u3081\u91cd\u8907\u3057\u3066\u3044\u307e\u3059\",\"delreq_image_label\":\"\u8a3c\u62e0\u753b\u50cf(\u4efb\u610f\u30fb5MB\u4ee5\u4e0b)\",\"send\":\"\u9001\u4fe1\",\"pending_request\":\"\u26a0 \u3042\u306a\u305f\u306e\u30de\u30fc\u30ab\u30fc\u306b\u524a\u9664\u7533\u8acb\u304c\u5c4a\u3044\u3066\u3044\u307e\u3059\",\"request_from\":\"\u7533\u8acb\u8005\",\"request_reason\":\"\u7406\u7531\",\"request_image\":\"\u6dfb\u4ed8\u753b\u50cf\",\"approve_with_msg\":\"\u2713 \u627f\u8a8d\u3057\u3066\u524a\u9664\",\"reject_with_msg\":\"\u2717 \u62d2\u5426\u3057\u3066\u4fdd\u6301\",\"response_label\":\"\u7533\u8acb\u8005\u3078\u306e\u30e1\u30c3\u30bb\u30fc\u30b8(\u4efb\u610f)\",\"response_ph\":\"\u4f8b: \u78ba\u8a8d\u3057\u307e\u3057\u305f\u3002\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u3002\",\"reason_required_err\":\"\u524a\u9664\u7406\u7531\u30925\u6587\u5b57\u4ee5\u4e0a\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\",\"locate_me\":\"\ud83d\udccd \u73fe\u5728\u5730\",\"report_here\":\"\ud83d\udccd \u3053\u3053\u3067\u5831\u544a\",\"follow_on\":\"\ud83d\udef0 \u8ffd\u5f93ON\",\"follow_off\":\"\ud83d\udef0 \u8ffd\u5f93OFF\",\"locating\":\"\u4f4d\u7f6e\u60c5\u5831\u3092\u53d6\u5f97\u4e2d\u2026\",\"location_error\":\"\u4f4d\u7f6e\u60c5\u5831\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\",\"outside_island\":\"\u26a0 \u73fe\u5728\u5730\u304c\u5927\u4e45\u91ce\u5cf6\u306e\u7bc4\u56f2\u5916\u3067\u3059\",\"fullscreen\":\"\ud83d\udcf1 \u5168\u753b\u9762\",\"back\":\"\u2190 \u623b\u308b\",\"back_to_island\":\"\u5927\u4e45\u91ce\u5cf6\u306b\u623b\u308b\",\"gps_accuracy\":\"GPS\u7cbe\u5ea6\"},\"en\":{\"name\":\"English\",\"add_btn\":\"\ud83d\udccd Add Report\",\"end_add\":\"\u2715 Cancel Add\",\"instruction\":\"\ud83d\udccd Click on the map to add a new report\",\"login_required\":\"Login required to add or edit information\",\"login\":\"Log in\",\"register\":\"Register\",\"logout\":\"Log out\",\"quota_admin\":\"Admin (unlimited)\",\"quota\":\"Today: {used} \/ {limit}\",\"edit\":\"Edit\",\"delete\":\"Delete\",\"delete_request\":\"Request Delete\",\"tap_water\":\"\ud83d\udca7 Water Given\",\"tap_food\":\"\ud83e\udd55 Food Given\",\"last_water\":\"\ud83d\udca7 Last water\",\"last_food\":\"\ud83e\udd55 Last food\",\"owner\":\"Owner\",\"detail\":\"Read more \u2192\",\"pending_delete\":\"\u26a0 Delete request pending\",\"title_label\":\"Title\",\"type_label\":\"Category\",\"content_label\":\"Description\",\"image_label\":\"Image (optional, max 5MB)\",\"lat_label\":\"Lat\",\"lng_label\":\"Lng\",\"cancel\":\"Cancel\",\"save\":\"Save\",\"add_modal\":\"Add New Report\",\"edit_modal\":\"Edit Report\",\"legend\":\"Legend\",\"confirm_delete\":\"Delete this marker?\",\"confirm_delreq\":\"This marker belongs to another user. Send a delete request?\\\\nThe owner will be notified by email and can approve.\",\"delreq_sent\":\"Delete request sent. Waiting for owner approval.\",\"lang\":\"Language\",\"types\":{\"water\":\"\ud83d\udca7 Watering\",\"food\":\"\ud83e\udd55 Feeding\",\"injury\":\"\ud83d\udea8 Injury \/ Emergency\",\"caution\":\"\u26a0 Caution\",\"general\":\"\ud83d\udccd General\",\"water_shortage\":\"\ud83c\udd98 Water Shortage\",\"water_vessel\":\"\ud83e\udea3 Water Vessel\"},\"errors\":{\"login_required\":\"Login required\",\"nonce_failed\":\"Security verification failed\",\"coords_invalid\":\"Coordinates outside Okunoshima area\",\"title_required\":\"Title is required\",\"daily_limit\":\"Daily edit limit (20) reached. Please try again tomorrow.\",\"rate_limit\":\"Too fast. Please wait a moment.\",\"tap_rate\":\"Please wait between taps\",\"no_permission\":\"Permission denied\",\"image_too_large\":\"Image must be under 5MB\",\"image_invalid_format\":\"Unsupported image format (JPEG\/PNG\/WebP\/GIF only)\",\"upload_failed\":\"Image upload failed\",\"save_failed\":\"Save failed\",\"not_found\":\"Not found\",\"reason_required\":\"Please enter a reason of at least 5 characters\"},\"tl_action\":{\"add\":\"Added\",\"edit\":\"Edited\",\"water\":\"Watered\",\"food\":\"Fed\",\"delete\":\"Deleted\"},\"delreq_modal_title\":\"Request Deletion\",\"delreq_reason_label\":\"Reason for deletion (required, 5+ chars)\",\"delreq_reason_ph\":\"e.g., A new marker was added at the same location, this one is now a duplicate\",\"delreq_image_label\":\"Supporting image (optional, max 5MB)\",\"send\":\"Send\",\"pending_request\":\"\u26a0 A deletion request has been received for your marker\",\"request_from\":\"From\",\"request_reason\":\"Reason\",\"request_image\":\"Attached image\",\"approve_with_msg\":\"\u2713 Approve & delete\",\"reject_with_msg\":\"\u2717 Reject & keep\",\"response_label\":\"Message to the requester (optional)\",\"response_ph\":\"e.g., Confirmed, thank you.\",\"reason_required_err\":\"Please enter a reason of at least 5 characters\",\"locate_me\":\"\ud83d\udccd My Location\",\"report_here\":\"\ud83d\udccd Report Here\",\"follow_on\":\"\ud83d\udef0 Follow ON\",\"follow_off\":\"\ud83d\udef0 Follow OFF\",\"locating\":\"Getting location\u2026\",\"location_error\":\"Could not get your location\",\"outside_island\":\"\u26a0 Your location is outside Okunoshima\",\"fullscreen\":\"\ud83d\udcf1 Fullscreen\",\"back\":\"\u2190 Back\",\"back_to_island\":\"Back to Okunoshima\",\"gps_accuracy\":\"GPS accuracy\"},\"zh\":{\"name\":\"\u4e2d\u6587\",\"add_btn\":\"\ud83d\udccd \u6dfb\u52a0\u62a5\u544a\",\"end_add\":\"\u2715 \u53d6\u6d88\u6dfb\u52a0\",\"instruction\":\"\ud83d\udccd \u70b9\u51fb\u5730\u56fe\u6dfb\u52a0\u65b0\u7684\u62a5\u544a\",\"login_required\":\"\u6dfb\u52a0\u548c\u7f16\u8f91\u4fe1\u606f\u9700\u8981\u767b\u5f55\",\"login\":\"\u767b\u5f55\",\"register\":\"\u6ce8\u518c\",\"logout\":\"\u767b\u51fa\",\"quota_admin\":\"\u7ba1\u7406\u5458(\u65e0\u9650)\",\"quota\":\"\u4eca\u65e5: {used} \/ {limit}\",\"edit\":\"\u7f16\u8f91\",\"delete\":\"\u5220\u9664\",\"delete_request\":\"\u7533\u8bf7\u5220\u9664\",\"tap_water\":\"\ud83d\udca7 \u5df2\u5582\u6c34\",\"tap_food\":\"\ud83e\udd55 \u5df2\u5582\u98df\",\"last_water\":\"\ud83d\udca7 \u6700\u8fd1\u5582\u6c34\",\"last_food\":\"\ud83e\udd55 \u6700\u8fd1\u5582\u98df\",\"owner\":\"\u6240\u6709\u8005\",\"detail\":\"\u9605\u8bfb\u8be6\u60c5 \u2192\",\"pending_delete\":\"\u26a0 \u5220\u9664\u7533\u8bf7\u4e2d\",\"title_label\":\"\u6807\u9898\",\"type_label\":\"\u7c7b\u522b\",\"content_label\":\"\u5185\u5bb9\",\"image_label\":\"\u56fe\u7247(\u53ef\u9009,\u6700\u59275MB)\",\"lat_label\":\"\u7eac\u5ea6\",\"lng_label\":\"\u7ecf\u5ea6\",\"cancel\":\"\u53d6\u6d88\",\"save\":\"\u4fdd\u5b58\",\"add_modal\":\"\u6dfb\u52a0\u65b0\u62a5\u544a\",\"edit_modal\":\"\u7f16\u8f91\u62a5\u544a\",\"legend\":\"\u56fe\u4f8b\",\"confirm_delete\":\"\u786e\u5b9a\u5220\u9664\u6b64\u6807\u8bb0?\",\"confirm_delreq\":\"\u6b64\u6807\u8bb0\u5c5e\u4e8e\u5176\u4ed6\u7528\u6237\u3002\u662f\u5426\u53d1\u9001\u5220\u9664\u7533\u8bf7?\\\\n\u6240\u6709\u8005\u5c06\u6536\u5230\u90ae\u4ef6\u901a\u77e5,\u6279\u51c6\u540e\u624d\u4f1a\u5220\u9664\u3002\",\"delreq_sent\":\"\u5220\u9664\u7533\u8bf7\u5df2\u53d1\u9001,\u7b49\u5f85\u6240\u6709\u8005\u6279\u51c6\u3002\",\"lang\":\"\u8bed\u8a00\",\"types\":{\"water\":\"\ud83d\udca7 \u5582\u6c34\",\"food\":\"\ud83e\udd55 \u5582\u98df\",\"injury\":\"\ud83d\udea8 \u53d7\u4f24\/\u7d27\u6025\",\"caution\":\"\u26a0 \u6ce8\u610f\",\"general\":\"\ud83d\udccd \u4e00\u822c\",\"water_shortage\":\"\ud83c\udd98 \u7f3a\u6c34\u70b9\",\"water_vessel\":\"\ud83e\udea3 \u6c34\u5bb9\u5668\u4f4d\u7f6e\"},\"errors\":{\"login_required\":\"\u9700\u8981\u767b\u5f55\",\"nonce_failed\":\"\u5b89\u5168\u9a8c\u8bc1\u5931\u8d25\",\"coords_invalid\":\"\u5750\u6807\u4e0d\u5728\u5927\u4e45\u91ce\u5c9b\u8303\u56f4\u5185\",\"title_required\":\"\u8bf7\u8f93\u5165\u6807\u9898\",\"daily_limit\":\"\u4eca\u65e5\u6dfb\u52a0\u30fb\u7f16\u8f91\u6b21\u6570\u5df2\u8fbe\u4e0a\u9650(20\u6b21)\u3002\u8bf7\u660e\u5929\u518d\u8bd5\u3002\",\"rate_limit\":\"\u64cd\u4f5c\u8fc7\u5feb,\u8bf7\u7a0d\u5019\u518d\u8bd5\u3002\",\"tap_rate\":\"\u70b9\u51fb\u95f4\u9694\u8fc7\u77ed,\u8bf7\u7a0d\u5019\",\"no_permission\":\"\u6ca1\u6709\u6743\u9650\",\"image_too_large\":\"\u56fe\u7247\u5927\u5c0f\u4e0d\u5f97\u8d85\u8fc75MB\",\"image_invalid_format\":\"\u4e0d\u652f\u6301\u7684\u56fe\u7247\u683c\u5f0f(\u4ec5\u9650JPEG\/PNG\/WebP\/GIF)\",\"upload_failed\":\"\u56fe\u7247\u4e0a\u4f20\u5931\u8d25\",\"save_failed\":\"\u4fdd\u5b58\u5931\u8d25\",\"not_found\":\"\u672a\u627e\u5230\",\"reason_required\":\"\u8bf7\u8f93\u5165\u81f3\u5c115\u4e2a\u5b57\u7b26\u7684\u7406\u7531\"},\"tl_action\":{\"add\":\"\u6dfb\u52a0\",\"edit\":\"\u7f16\u8f91\",\"water\":\"\u5582\u6c34\",\"food\":\"\u5582\u98df\",\"delete\":\"\u5220\u9664\"},\"delreq_modal_title\":\"\u7533\u8bf7\u5220\u9664\",\"delreq_reason_label\":\"\u5220\u9664\u7406\u7531(\u5fc5\u586b,5\u5b57\u4ee5\u4e0a)\",\"delreq_reason_ph\":\"\u4f8b:\u540c\u4e00\u4f4d\u7f6e\u5df2\u6709\u65b0\u6807\u8bb0,\u6b64\u6807\u8bb0\u91cd\u590d\",\"delreq_image_label\":\"\u8bc1\u636e\u56fe\u7247(\u53ef\u9009,\u6700\u59275MB)\",\"send\":\"\u53d1\u9001\",\"pending_request\":\"\u26a0 \u60a8\u7684\u6807\u8bb0\u6536\u5230\u4e86\u5220\u9664\u7533\u8bf7\",\"request_from\":\"\u7533\u8bf7\u4eba\",\"request_reason\":\"\u7406\u7531\",\"request_image\":\"\u9644\u56fe\",\"approve_with_msg\":\"\u2713 \u6279\u51c6\u5e76\u5220\u9664\",\"reject_with_msg\":\"\u2717 \u62d2\u7edd\u5e76\u4fdd\u7559\",\"response_label\":\"\u7ed9\u7533\u8bf7\u4eba\u7684\u6d88\u606f(\u53ef\u9009)\",\"response_ph\":\"\u4f8b:\u5df2\u786e\u8ba4,\u8c22\u8c22\u3002\",\"reason_required_err\":\"\u8bf7\u8f93\u5165\u81f3\u5c115\u4e2a\u5b57\u7b26\u7684\u7406\u7531\",\"locate_me\":\"\ud83d\udccd \u6211\u7684\u4f4d\u7f6e\",\"report_here\":\"\ud83d\udccd \u5728\u6b64\u62a5\u544a\",\"follow_on\":\"\ud83d\udef0 \u8ddf\u8e2a\u5f00\u542f\",\"follow_off\":\"\ud83d\udef0 \u8ddf\u8e2a\u5173\u95ed\",\"locating\":\"\u6b63\u5728\u83b7\u53d6\u4f4d\u7f6e\u2026\",\"location_error\":\"\u65e0\u6cd5\u83b7\u53d6\u4f4d\u7f6e\",\"outside_island\":\"\u26a0 \u5f53\u524d\u4f4d\u7f6e\u5728\u5927\u4e45\u91ce\u5c9b\u8303\u56f4\u5916\",\"fullscreen\":\"\ud83d\udcf1 \u5168\u5c4f\",\"back\":\"\u2190 \u8fd4\u56de\",\"back_to_island\":\"\u8fd4\u56de\u5927\u4e45\u91ce\u5c9b\",\"gps_accuracy\":\"GPS\u7cbe\u5ea6\"},\"ko\":{\"name\":\"\ud55c\uad6d\uc5b4\",\"add_btn\":\"\ud83d\udccd \uc815\ubcf4 \ucd94\uac00\",\"end_add\":\"\u2715 \ucd94\uac00 \ucde8\uc18c\",\"instruction\":\"\ud83d\udccd \uc9c0\ub3c4\ub97c \ud074\ub9ad\ud558\uc5ec \uc0c8 \ubcf4\uace0\uc11c\ub97c \ucd94\uac00\ud558\uc138\uc694\",\"login_required\":\"\uc815\ubcf4 \ucd94\uac00\/\ud3b8\uc9d1\uc5d0\ub294 \ub85c\uadf8\uc778\uc774 \ud544\uc694\ud569\ub2c8\ub2e4\",\"login\":\"\ub85c\uadf8\uc778\",\"register\":\"\ud68c\uc6d0\uac00\uc785\",\"logout\":\"\ub85c\uadf8\uc544\uc6c3\",\"quota_admin\":\"\uad00\ub9ac\uc790(\ubb34\uc81c\ud55c)\",\"quota\":\"\uc624\ub298: {used} \/ {limit}\",\"edit\":\"\ud3b8\uc9d1\",\"delete\":\"\uc0ad\uc81c\",\"delete_request\":\"\uc0ad\uc81c \uc694\uccad\",\"tap_water\":\"\ud83d\udca7 \ubb3c \uc900 \uae30\ub85d\",\"tap_food\":\"\ud83e\udd55 \uba39\uc774 \uc900 \uae30\ub85d\",\"last_water\":\"\ud83d\udca7 \ucd5c\uadfc \ubb3c\uc8fc\uae30\",\"last_food\":\"\ud83e\udd55 \ucd5c\uadfc \uba39\uc774\uc8fc\uae30\",\"owner\":\"\uc18c\uc720\uc790\",\"detail\":\"\uc790\uc138\ud788 \ubcf4\uae30 \u2192\",\"pending_delete\":\"\u26a0 \uc0ad\uc81c \uc694\uccad \uc911\",\"title_label\":\"\uc81c\ubaa9\",\"type_label\":\"\uc885\ub958\",\"content_label\":\"\ub0b4\uc6a9\",\"image_label\":\"\uc774\ubbf8\uc9c0(\uc120\ud0dd, 5MB \uc774\ud558)\",\"lat_label\":\"\uc704\ub3c4\",\"lng_label\":\"\uacbd\ub3c4\",\"cancel\":\"\ucde8\uc18c\",\"save\":\"\uc800\uc7a5\",\"add_modal\":\"\uc0c8 \ubcf4\uace0\uc11c \ucd94\uac00\",\"edit_modal\":\"\ubcf4\uace0\uc11c \ud3b8\uc9d1\",\"legend\":\"\ubc94\ub840\",\"confirm_delete\":\"\uc774 \ub9c8\ucee4\ub97c \uc0ad\uc81c\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?\",\"confirm_delreq\":\"\uc774 \ub9c8\ucee4\ub294 \ub2e4\ub978 \uc0ac\uc6a9\uc790\uac00 \uad00\ub9ac\ud569\ub2c8\ub2e4. \uc0ad\uc81c \uc694\uccad\uc744 \ubcf4\ub0b4\uc2dc\uaca0\uc2b5\ub2c8\uae4c?\\\\n\uc18c\uc720\uc790\uc5d0\uac8c \uc774\uba54\uc77c\uc774 \uc804\uc1a1\ub418\uba70 \uc2b9\uc778 \ud6c4 \uc0ad\uc81c\ub429\ub2c8\ub2e4.\",\"delreq_sent\":\"\uc0ad\uc81c \uc694\uccad\uc774 \uc804\uc1a1\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc18c\uc720\uc790\uc758 \uc2b9\uc778\uc744 \uae30\ub2e4\ub824 \uc8fc\uc138\uc694.\",\"lang\":\"\uc5b8\uc5b4\",\"types\":{\"water\":\"\ud83d\udca7 \ubb3c\uc8fc\uae30\",\"food\":\"\ud83e\udd55 \uba39\uc774\uc8fc\uae30\",\"injury\":\"\ud83d\udea8 \ubd80\uc0c1\/\uae34\uae09\",\"caution\":\"\u26a0 \uc8fc\uc758\",\"general\":\"\ud83d\udccd \uc77c\ubc18\",\"water_shortage\":\"\ud83c\udd98 \ubb3c \ubd80\uc871 \uc9c0\uc810\",\"water_vessel\":\"\ud83e\udea3 \ubb3c\uadf8\ub987 \uc704\uce58\"},\"errors\":{\"login_required\":\"\ub85c\uadf8\uc778\uc774 \ud544\uc694\ud569\ub2c8\ub2e4\",\"nonce_failed\":\"\ubcf4\uc548 \uac80\uc99d \uc2e4\ud328\",\"coords_invalid\":\"\uc88c\ud45c\uac00 \uc624\ucfe0\ub178\uc2dc\ub9c8 \ubc94\uc704\ub97c \ubc97\uc5b4\ub0ac\uc2b5\ub2c8\ub2e4\",\"title_required\":\"\uc81c\ubaa9\uc744 \uc785\ub825\ud558\uc138\uc694\",\"daily_limit\":\"\uc624\ub298\uc758 \ucd94\uac00\u00b7\ud3b8\uc9d1 \ud55c\ub3c4(20\uac74)\uc5d0 \ub3c4\ub2ec\ud588\uc2b5\ub2c8\ub2e4. \ub0b4\uc77c \ub2e4\uc2dc \uc2dc\ub3c4\ud574 \uc8fc\uc138\uc694.\",\"rate_limit\":\"\ub108\ubb34 \ube60\ub985\ub2c8\ub2e4. \uc7a0\uc2dc \ud6c4 \ub2e4\uc2dc \uc2dc\ub3c4\ud558\uc138\uc694.\",\"tap_rate\":\"\uc5f0\uc18d \ud0ed \uac04\uaca9\uc744 \ub450\uc138\uc694\",\"no_permission\":\"\uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4\",\"image_too_large\":\"\uc774\ubbf8\uc9c0\ub294 5MB \uc774\ud558\uc5ec\uc57c \ud569\ub2c8\ub2e4\",\"image_invalid_format\":\"\uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294 \uc774\ubbf8\uc9c0 \ud615\uc2dd (JPEG\/PNG\/WebP\/GIF)\",\"upload_failed\":\"\uc774\ubbf8\uc9c0 \uc5c5\ub85c\ub4dc \uc2e4\ud328\",\"save_failed\":\"\uc800\uc7a5 \uc2e4\ud328\",\"not_found\":\"\ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4\",\"reason_required\":\"5\uc790 \uc774\uc0c1\uc758 \uc774\uc720\ub97c \uc785\ub825\ud574 \uc8fc\uc138\uc694\"},\"tl_action\":{\"add\":\"\ucd94\uac00\",\"edit\":\"\ud3b8\uc9d1\",\"water\":\"\ubb3c\uc8fc\uae30\",\"food\":\"\uba39\uc774\uc8fc\uae30\",\"delete\":\"\uc0ad\uc81c\"},\"delreq_modal_title\":\"\uc0ad\uc81c \uc694\uccad\",\"delreq_reason_label\":\"\uc0ad\uc81c\ud574\uc57c \ud560 \uc774\uc720 (\ud544\uc218, 5\uc790 \uc774\uc0c1)\",\"delreq_reason_ph\":\"\uc608: \uac19\uc740 \uc704\uce58\uc5d0 \uc0c8 \ub9c8\ucee4\uac00 \ucd94\uac00\ub418\uc5b4 \uc911\ubcf5\ub429\ub2c8\ub2e4\",\"delreq_image_label\":\"\uc99d\uac70 \uc774\ubbf8\uc9c0 (\uc120\ud0dd, 5MB \uc774\ud558)\",\"send\":\"\ubcf4\ub0b4\uae30\",\"pending_request\":\"\u26a0 \ub2f9\uc2e0\uc758 \ub9c8\ucee4\uc5d0 \uc0ad\uc81c \uc694\uccad\uc774 \ub3c4\ucc29\ud588\uc2b5\ub2c8\ub2e4\",\"request_from\":\"\uc2e0\uccad\uc790\",\"request_reason\":\"\uc774\uc720\",\"request_image\":\"\ucca8\ubd80 \uc774\ubbf8\uc9c0\",\"approve_with_msg\":\"\u2713 \uc2b9\uc778 \ud6c4 \uc0ad\uc81c\",\"reject_with_msg\":\"\u2717 \uac70\uc808 \ud6c4 \uc720\uc9c0\",\"response_label\":\"\uc2e0\uccad\uc790\uc5d0\uac8c \ubcf4\ub0bc \uba54\uc2dc\uc9c0 (\uc120\ud0dd)\",\"response_ph\":\"\uc608: \ud655\uc778\ud588\uc2b5\ub2c8\ub2e4. \uac10\uc0ac\ud569\ub2c8\ub2e4.\",\"reason_required_err\":\"5\uc790 \uc774\uc0c1\uc758 \uc774\uc720\ub97c \uc785\ub825\ud574 \uc8fc\uc138\uc694\",\"locate_me\":\"\ud83d\udccd \ub0b4 \uc704\uce58\",\"report_here\":\"\ud83d\udccd \uc5ec\uae30\uc11c \ubcf4\uace0\",\"follow_on\":\"\ud83d\udef0 \ucd94\uc801 ON\",\"follow_off\":\"\ud83d\udef0 \ucd94\uc801 OFF\",\"locating\":\"\uc704\uce58 \uc815\ubcf4\ub97c \uac00\uc838\uc624\ub294 \uc911\u2026\",\"location_error\":\"\uc704\uce58\ub97c \uac00\uc838\uc62c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4\",\"outside_island\":\"\u26a0 \ud604\uc7ac \uc704\uce58\uac00 \uc624\ucfe0\ub178\uc2dc\ub9c8 \ubc94\uc704 \ubc16\uc785\ub2c8\ub2e4\",\"fullscreen\":\"\ud83d\udcf1 \uc804\uccb4\ud654\uba74\",\"back\":\"\u2190 \ub4a4\ub85c\",\"back_to_island\":\"\uc624\ucfe0\ub178\uc2dc\ub9c8\ub85c \ub3cc\uc544\uac00\uae30\",\"gps_accuracy\":\"GPS \uc815\ud655\ub3c4\"}},\"auto_locate\":false,\"is_fullscreen\":false,\"back_url\":\"https:\/\/usagi-jima.org\/\",\"island_bounds\":{\"lat_min\":34.28999999999999914734871708787977695465087890625,\"lat_max\":34.3299999999999982946974341757595539093017578125,\"lng_min\":132.979999999999989768184605054557323455810546875,\"lng_max\":133.009999999999990905052982270717620849609375}};\n      var ID = 'usagi-map-144bcdf3-f010-4394-bdfb-77442db2fdaf';\n      var $ = function(s){return document.getElementById(s)};\n\n      \/\/ \u8a00\u8a9e\u9078\u629e\n      var savedLang = localStorage.getItem('usagi_lang');\n      var browserLang = (navigator.language || 'ja').toLowerCase();\n      var defaultLang = 'en';\n      if (browserLang.indexOf('ja') === 0) defaultLang = 'ja';\n      else if (browserLang.indexOf('zh') === 0) defaultLang = 'zh';\n      else if (browserLang.indexOf('ko') === 0) defaultLang = 'ko';\n      var LANG = savedLang && cfg.i18n[savedLang] ? savedLang : defaultLang;\n      function T() { return cfg.i18n[LANG]; }\n      function tr(k) { return T()[k] || k; }\n      function trType(s) { return T().types[s] || s; }\n      function trErr(c) { return T().errors[c] || c; }\n\n      function applyI18n() {\n        document.querySelectorAll('[data-i18n]').forEach(function(el){\n          var k = el.getAttribute('data-i18n');\n          if (T()[k]) el.textContent = T()[k];\n        });\n        $(ID+'-instr').textContent = tr('instruction');\n        $(ID+'-mtitle').textContent = tr('add_modal');\n      }\n\n      var map = L.map(ID).setView([34.31060,132.99300], 15);\n      L.tileLayer('https:\/\/{s}.tile.openstreetmap.org\/{z}\/{x}\/{y}.png',{\n        maxZoom:19, attribution:'&copy; <a href=\"https:\/\/www.openstreetmap.org\/copyright\">OpenStreetMap<\/a>'\n      }).addTo(map);\n\n      var cluster = L.markerClusterGroup({maxClusterRadius:40});\n      map.addLayer(cluster);\n      var markersById = {};\n\n      \/\/ ===== Geolocation =====\n      var locationMarker = null, accuracyCircle = null;\n      var watching = false;\n      var lastLatLng = null;\n\n      function inIslandBounds(lat, lng) {\n        var b = cfg.island_bounds;\n        return lat >= b.lat_min && lat <= b.lat_max && lng >= b.lng_min && lng <= b.lng_max;\n      }\n\n      function showLocation(latlng, accuracy) {\n        if (!locationMarker) {\n          locationMarker = L.circleMarker(latlng, {\n            radius: 8, color: '#fff', weight: 3,\n            fillColor: '#4285f4', fillOpacity: 1\n          }).addTo(map);\n          accuracyCircle = L.circle(latlng, {\n            radius: accuracy, color: '#4285f4', weight: 1,\n            fillColor: '#4285f4', fillOpacity: 0.12\n          }).addTo(map);\n          locationMarker.bindTooltip(tr('locate_me'), {permanent:false, direction:'top'});\n        } else {\n          locationMarker.setLatLng(latlng);\n          accuracyCircle.setLatLng(latlng).setRadius(accuracy);\n        }\n      }\n\n      map.on('locationfound', function(e) {\n        lastLatLng = e.latlng;\n        showLocation(e.latlng, e.accuracy);\n        if (!inIslandBounds(e.latlng.lat, e.latlng.lng)) {\n          \/\/ \u7bc4\u56f2\u5916\u3067\u3082\u8868\u793a\u306f\u3059\u308b\u304c\u8b66\u544a\n          console.warn('Outside island bounds');\n        }\n      });\n      map.on('locationerror', function(e) {\n        alert(tr('location_error') + (e && e.message ? '\\n' + e.message : ''));\n      });\n\n      function goToMyLocation() {\n        map.locate({\n          setView: true, maxZoom: 17,\n          enableHighAccuracy: true, timeout: 10000, maximumAge: 5000\n        });\n      }\n\n      function reportHere() {\n        if (!cfg.logged_in) return;\n        if (cfg.daily_used >= cfg.daily_limit && !cfg.is_admin) {\n          alert(trErr('daily_limit')); return;\n        }\n        var btn = $(ID+'-here');\n        if (btn) { btn.disabled = true; btn.textContent = tr('locating'); }\n        var done = false;\n        var onFound = function(e) {\n          if (done) return; done = true;\n          map.off('locationfound', onFound);\n          map.off('locationerror', onErr);\n          if (btn) { btn.disabled = false; btn.textContent = tr('report_here'); }\n          if (!inIslandBounds(e.latlng.lat, e.latlng.lng)) {\n            alert(tr('outside_island'));\n            return;\n          }\n          openModal({lat: e.latlng.lat, lng: e.latlng.lng});\n        };\n        var onErr = function(e) {\n          if (done) return; done = true;\n          map.off('locationfound', onFound);\n          map.off('locationerror', onErr);\n          if (btn) { btn.disabled = false; btn.textContent = tr('report_here'); }\n          alert(tr('location_error'));\n        };\n        map.on('locationfound', onFound);\n        map.on('locationerror', onErr);\n        map.locate({enableHighAccuracy:true, timeout:10000, maximumAge:5000});\n      }\n\n      function toggleFollow() {\n        watching = !watching;\n        var btn = $(ID+'-follow');\n        if (watching) {\n          if (btn) { btn.textContent = tr('follow_off'); btn.classList.add('active'); }\n          map.locate({watch:true, setView:true, maxZoom:17, enableHighAccuracy:true});\n        } else {\n          if (btn) { btn.textContent = tr('follow_on'); btn.classList.remove('active'); }\n          map.stopLocate();\n        }\n      }\n      \/\/ ===== \/Geolocation =====\n\n\n      function buildPopup(r){\n        var canDelete = cfg.is_admin || (cfg.logged_in && cfg.user_id === r.owner_id);\n        var canEdit = cfg.logged_in;\n        var actions = '';\n        if (canEdit) {\n          actions += '<button data-act=\"edit\" data-id=\"'+r.id+'\">'+tr('edit')+'<\/button>';\n          actions += '<button class=\"tap-water\" data-act=\"tap-water\" data-id=\"'+r.id+'\">'+tr('tap_water')+'<\/button>';\n          actions += '<button class=\"tap-food\" data-act=\"tap-food\" data-id=\"'+r.id+'\">'+tr('tap_food')+'<\/button>';\n          actions += canDelete\n            ? '<button class=\"del\" data-act=\"del\" data-id=\"'+r.id+'\">'+tr('delete')+'<\/button>'\n            : '<button class=\"del\" data-act=\"delreq\" data-id=\"'+r.id+'\">'+tr('delete_request')+'<\/button>';\n        }\n        var wf = '';\n        if (r.water_last || r.food_last) {\n          wf = '<div class=\"water-food\">';\n          if (r.water_last) wf += '<div class=\"row\"><span>'+tr('last_water')+'<\/span><span>'+esc(r.water_last.user_name)+' \/ '+esc(r.water_last.date)+'<\/span><\/div>';\n          if (r.food_last)  wf += '<div class=\"row\"><span>'+tr('last_food')+'<\/span><span>'+esc(r.food_last.user_name)+' \/ '+esc(r.food_last.date)+'<\/span><\/div>';\n          wf += '<\/div>';\n        }\n        var pendingHtml = '';\n        \/\/ \u524a\u9664\u7533\u8acb\u306e\u8868\u793a\u5206\u5c90\n        if (r.delete_pending) {\n          if (canDelete && r.delete_request) {\n            \/\/ \u6240\u6709\u8005\u30fb\u7ba1\u7406\u8005\u5411\u3051: \u7533\u8acb\u8a73\u7d30 + \u627f\u8a8d\/\u62d2\u5426\u30dc\u30bf\u30f3\n            var rd = r.delete_request;\n            pendingHtml = '<div class=\"req-detail\">'\n              + '<strong>'+tr('pending_request')+'<\/strong>'\n              + '<div class=\"field\"><span class=\"label\">'+tr('request_from')+':<\/span> '+esc(rd.requester_name)+' \/ '+esc(rd.date)+'<\/div>'\n              + '<div class=\"field\"><span class=\"label\">'+tr('request_reason')+':<\/span><br>'+esc(rd.reason)+'<\/div>'\n              + (rd.image_url ? '<div class=\"field\"><span class=\"label\">'+tr('request_image')+':<\/span><br><img decoding=\"async\" src=\"'+rd.image_url+'\"><\/div>' : '')\n              + '<div class=\"decide-btns\">'\n                + '<button class=\"approve\" data-act=\"decide-approve\" data-id=\"'+r.id+'\">'+tr('approve_with_msg')+'<\/button>'\n                + '<button class=\"reject\" data-act=\"decide-reject\" data-id=\"'+r.id+'\">'+tr('reject_with_msg')+'<\/button>'\n              + '<\/div>'\n              + '<\/div>';\n          } else {\n            \/\/ \u7b2c\u4e09\u8005\u5411\u3051: \u30d0\u30c3\u30b8\u306e\u307f\n            pendingHtml = '<div class=\"pending\">'+tr('pending_delete')+'<\/div>';\n          }\n        }\n        return '<div class=\"usagi-popup\">'\n          +'<h4>'+esc(r.title)+'<\/h4>'\n          +'<div class=\"meta\">'+esc(trType(r.type))+' \/ '+esc(r.date)+'<\/div>'\n          +'<div class=\"owner\">'+tr('owner')+': '+esc(r.owner_name)+'<\/div>'\n          +(r.thumb ? '<img decoding=\"async\" src=\"'+r.thumb+'\" alt=\"\">' : '')\n          +'<div>'+esc(r.excerpt)+'<\/div>'\n          + wf + pendingHtml\n          +'<a class=\"detail\" href=\"'+r.url+'\">'+tr('detail')+'<\/a>'\n          + (actions ? '<div class=\"actions\">'+actions+'<\/div>' : '')\n          +'<\/div>';\n      }\n\n      function renderMarker(r){\n        var color = cfg.colors[r.type] || '#666';\n        var marker = L.circleMarker([r.lat, r.lng], {radius:9,color:'#fff',weight:2,fillColor:color,fillOpacity:0.95});\n        marker.bindPopup(buildPopup(r));\n        marker._reportData = r;\n        cluster.addLayer(marker);\n        markersById[r.id] = marker;\n      }\n      function refreshMarker(r){\n        var ex = markersById[r.id];\n        if (ex) { cluster.removeLayer(ex); delete markersById[r.id]; }\n        renderMarker(r);\n      }\n      function rebuildAllPopups(){\n        Object.keys(markersById).forEach(function(id){\n          var m = markersById[id];\n          m.setPopupContent(buildPopup(m._reportData));\n        });\n      }\n      cfg.reports.forEach(renderMarker);\n\n      \/\/ \u51e1\u4f8b\n      var legend = L.control({position:'bottomright'});\n      var legendDiv;\n      legend.onAdd = function(){ legendDiv = L.DomUtil.create('div','usagi-legend'); renderLegend(); return legendDiv; };\n      function renderLegend(){\n        if (!legendDiv) return;\n        var html = '<strong>'+tr('legend')+'<\/strong><br>';\n        cfg.type_slugs.forEach(function(s){\n          html += '<span class=\"dot\" style=\"background:'+cfg.colors[s]+'\"><\/span>'+esc(trType(s))+'<br>';\n        });\n        legendDiv.innerHTML = html;\n      }\n      legend.addTo(map);\n\n      \/\/ \u30c4\u30fc\u30eb\u30d0\u30fc\n      function renderToolbar(){\n        var tb = $(ID+'-toolbar');\n        var langSel = '<select id=\"'+ID+'-lang\" title=\"'+tr('lang')+'\">';\n        ['ja','en','zh','ko'].forEach(function(l){\n          langSel += '<option value=\"'+l+'\"'+(l===LANG?' selected':'')+'>'+cfg.i18n[l].name+'<\/option>';\n        });\n        langSel += '<\/select>';\n        var geoBtns =\n            '<button type=\"button\" id=\"'+ID+'-locate\">'+tr('locate_me')+'<\/button>'\n          + (cfg.logged_in ? '<button type=\"button\" id=\"'+ID+'-here\">'+tr('report_here')+'<\/button>' : '')\n          + '<button type=\"button\" id=\"'+ID+'-follow\">'+(watching ? tr('follow_off') : tr('follow_on'))+'<\/button>'\n          + '<button type=\"button\" id=\"'+ID+'-island\" style=\"display:none\">\ud83d\udc30 '+tr('back_to_island')+'<\/button>';\n        var fsLink = cfg.is_fullscreen\n          ? '<a href=\"'+cfg.back_url+'\">'+tr('back')+'<\/a>'\n          : '<a href=\"?usagi_full=1\">'+tr('fullscreen')+'<\/a>';\n\n        if (cfg.logged_in){\n          var quotaCls = (cfg.daily_used >= cfg.daily_limit && !cfg.is_admin) ? 'quota warn' : 'quota';\n          var quotaText = cfg.is_admin ? tr('quota_admin') : tr('quota').replace('{used}',cfg.daily_used).replace('{limit}',cfg.daily_limit);\n          tb.innerHTML = '<span class=\"who\">\ud83d\udc64 '+esc(cfg.user_name)+'<\/span>'\n            +'<span class=\"'+quotaCls+'\">'+quotaText+'<\/span>'\n            +'<button type=\"button\" class=\"primary\" id=\"'+ID+'-addbtn\">'+tr('add_btn')+'<\/button>'\n            + geoBtns\n            + fsLink\n            +'<a href=\"'+cfg.logout_url+'\">'+tr('logout')+'<\/a>'\n            + langSel;\n          $(ID+'-addbtn').addEventListener('click', toggleAddMode);\n        } else {\n          tb.innerHTML = '<span class=\"who\">'+tr('login_required')+'<\/span>'\n            + geoBtns\n            + fsLink\n            +'<a href=\"'+cfg.login_url+'\">'+tr('login')+'<\/a>'\n            +'<a href=\"'+cfg.register_url+'\">'+tr('register')+'<\/a>'\n            + langSel;\n        }\n        $(ID+'-lang').addEventListener('change', function(){\n          LANG = this.value;\n          localStorage.setItem('usagi_lang', LANG);\n          applyI18n(); renderToolbar(); rebuildTypeSelect(); renderLegend(); rebuildAllPopups();\n        });\n        if ($(ID+'-locate')) $(ID+'-locate').addEventListener('click', goToMyLocation);\n        if ($(ID+'-here')) $(ID+'-here').addEventListener('click', reportHere);\n        if ($(ID+'-follow')) $(ID+'-follow').addEventListener('click', toggleFollow);\n        if ($(ID+'-island')) $(ID+'-island').addEventListener('click', function(){ map.setView([34.31060,132.99300],15); });\n        \/\/ \u5cf6\u5916\u8868\u793a\u6642\u306e\u307f\u300c\u5927\u4e45\u91ce\u5cf6\u306b\u623b\u308b\u300d\u3092\u8868\u793a\n        var islandBtn = $(ID+'-island');\n        if (islandBtn) {\n          function updateIslandBtnSC(){\n            var c=map.getCenter(), b=cfg.island_bounds;\n            islandBtn.style.display = (c.lat>=b.lat_min&&c.lat<=b.lat_max&&c.lng>=b.lng_min&&c.lng<=b.lng_max) ? 'none' : 'inline-block';\n          }\n          map.on('moveend', updateIslandBtnSC);\n          updateIslandBtnSC();\n        }\n      }\n\n      function rebuildTypeSelect() {\n        var sel = $(ID+'-rtype');\n        sel.innerHTML = '';\n        cfg.type_slugs.forEach(function(s){\n          var o = document.createElement('option');\n          o.value = s; o.textContent = trType(s);\n          sel.appendChild(o);\n        });\n      }\n\n      applyI18n(); renderToolbar(); rebuildTypeSelect();\n\n      \/\/ \u8ffd\u52a0\u30e2\u30fc\u30c9\n      var addMode = false;\n      function toggleAddMode(){\n        if (!cfg.logged_in) return;\n        if (cfg.daily_used >= cfg.daily_limit && !cfg.is_admin) {\n          alert(trErr('daily_limit')); return;\n        }\n        addMode = !addMode;\n        var btn = $(ID+'-addbtn');\n        if (btn) {\n          btn.classList.toggle('active', addMode);\n          btn.textContent = addMode ? tr('end_add') : tr('add_btn');\n        }\n        $(ID+'-instr').classList.toggle('show', addMode);\n        map.getContainer().style.cursor = addMode ? 'crosshair' : '';\n      }\n\n      map.on('click', function(e){\n        if (!addMode) return;\n        openModal({lat:e.latlng.lat, lng:e.latlng.lng});\n        toggleAddMode();\n      });\n\n      \/\/ \u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u64cd\u4f5c\n      map.on('popupopen', function(e){\n        var el = e.popup.getElement();\n        if (!el) return;\n        el.querySelectorAll('button[data-act]').forEach(function(b){\n          b.addEventListener('click', function(){\n            var id = parseInt(b.getAttribute('data-id'),10);\n            var marker = markersById[id]; if (!marker) return;\n            var r = marker._reportData;\n            var act = b.getAttribute('data-act');\n            if (act === 'edit') openModal(r);\n            else if (act === 'del') {\n              if (!confirm(tr('confirm_delete'))) return;\n              ajax('usagi_delete',{id:id},null,function(res){\n                if (res.success){ cluster.removeLayer(marker); delete markersById[id]; map.closePopup(); }\n                else alert(trErr(res.data));\n              });\n            } else if (act === 'delreq') {\n              openDelreqModal(id);\n            } else if (act === 'decide-approve' || act === 'decide-reject') {\n              openDecideModal(id, act === 'decide-approve' ? 'approve' : 'reject');\n            } else if (act === 'tap-water' || act === 'tap-food') {\n              var kind = act==='tap-water' ? 'water' : 'food';\n              b.disabled = true;\n              ajax('usagi_tap',{id:id,kind:kind},null,function(res){\n                b.disabled = false;\n                if (res.success){\n                  refreshMarker(res.data);\n                  setTimeout(function(){ var m = markersById[res.data.id]; if (m) m.openPopup(); }, 100);\n                } else alert(trErr(res.data));\n              });\n            }\n          });\n        });\n      });\n\n      \/\/ \u30e2\u30fc\u30c0\u30eb\n      function openModal(r){\n        if (cfg.daily_used >= cfg.daily_limit && !cfg.is_admin) { alert(trErr('daily_limit')); return; }\n        $(ID+'-merr').textContent = '';\n        $(ID+'-rid').value = r.id || '';\n        $(ID+'-rlat').value = r.lat;\n        $(ID+'-rlng').value = r.lng;\n        $(ID+'-rlat-show').value = (+r.lat).toFixed(6);\n        $(ID+'-rlng-show').value = (+r.lng).toFixed(6);\n        $(ID+'-rtitle').value = r.title || '';\n        $(ID+'-rcontent').value = r.content || '';\n        $(ID+'-rtype').value = r.type || cfg.type_slugs[0];\n        $(ID+'-rimage').value = '';\n        var pv = $(ID+'-rpreview');\n        if (r.thumb) { pv.src = r.thumb; pv.style.display='block'; } else { pv.style.display='none'; }\n        $(ID+'-mtitle').textContent = r.id ? tr('edit_modal') : tr('add_modal');\n        $(ID+'-modal').classList.add('show');\n      }\n      function closeModal(){ $(ID+'-modal').classList.remove('show'); }\n      $(ID+'-cancel').addEventListener('click', closeModal);\n      $(ID+'-modal').addEventListener('click', function(e){ if(e.target===this) closeModal(); });\n\n      $(ID+'-rimage').addEventListener('change', function(){\n        var f = this.files[0]; var pv = $(ID+'-rpreview');\n        if (!f) { pv.style.display='none'; return; }\n        var rdr = new FileReader();\n        rdr.onload = function(e){ pv.src = e.target.result; pv.style.display='block'; };\n        rdr.readAsDataURL(f);\n      });\n\n      $(ID+'-save').addEventListener('click', function(){\n        var fields = {\n          id: $(ID+'-rid').value,\n          title: $(ID+'-rtitle').value.trim(),\n          type: $(ID+'-rtype').value,\n          content: $(ID+'-rcontent').value.trim(),\n          lat: $(ID+'-rlat').value,\n          lng: $(ID+'-rlng').value,\n        };\n        if (!fields.title){ $(ID+'-merr').textContent = trErr('title_required'); return; }\n        var action = fields.id ? 'usagi_update' : 'usagi_add';\n        var file = $(ID+'-rimage').files[0] || null;\n        ajax(action, fields, file, function(res){\n          if (res.success){\n            refreshMarker(res.data);\n            if (typeof res.daily_used === 'number') cfg.daily_used = res.daily_used;\n            renderToolbar(); closeModal(); map.closePopup();\n          } else $(ID+'-merr').textContent = trErr(res.data);\n        });\n      });\n\n      \/\/ \u524a\u9664\u7533\u8acb\u30e2\u30fc\u30c0\u30eb\n      function openDelreqModal(id) {\n        $(ID+'-delreq-id').value = id;\n        $(ID+'-delreq-reason').value = '';\n        $(ID+'-delreq-image').value = '';\n        $(ID+'-delreq-err').textContent = '';\n        $(ID+'-delreq-modal').classList.add('show');\n      }\n      function closeDelreqModal(){ $(ID+'-delreq-modal').classList.remove('show'); }\n      $(ID+'-delreq-cancel').addEventListener('click', closeDelreqModal);\n      $(ID+'-delreq-modal').addEventListener('click', function(e){ if(e.target===this) closeDelreqModal(); });\n      $(ID+'-delreq-send').addEventListener('click', function(){\n        var id = $(ID+'-delreq-id').value;\n        var reason = $(ID+'-delreq-reason').value.trim();\n        if (reason.length < 5) { $(ID+'-delreq-err').textContent = trErr('reason_required'); return; }\n        var file = $(ID+'-delreq-image').files[0] || null;\n        ajax('usagi_delete_request',{id:id, reason:reason}, file, function(res){\n          if (res.success){\n            alert(tr('delreq_sent'));\n            refreshMarker(res.data);\n            closeDelreqModal();\n            map.closePopup();\n          } else $(ID+'-delreq-err').textContent = trErr(res.data);\n        });\n      });\n\n      \/\/ \u627f\u8a8d\/\u62d2\u5426\u30e2\u30fc\u30c0\u30eb\n      function openDecideModal(id, action) {\n        $(ID+'-decide-id').value = id;\n        $(ID+'-decide-action').value = action;\n        $(ID+'-decide-message').value = '';\n        $(ID+'-decide-err').textContent = '';\n        $(ID+'-decide-title').textContent = action === 'approve' ? tr('approve_with_msg') : tr('reject_with_msg');\n        $(ID+'-decide-modal').classList.add('show');\n      }\n      function closeDecideModal(){ $(ID+'-decide-modal').classList.remove('show'); }\n      $(ID+'-decide-cancel').addEventListener('click', closeDecideModal);\n      $(ID+'-decide-modal').addEventListener('click', function(e){ if(e.target===this) closeDecideModal(); });\n      $(ID+'-decide-send').addEventListener('click', function(){\n        var id = $(ID+'-decide-id').value;\n        var action = $(ID+'-decide-action').value;\n        var message = $(ID+'-decide-message').value.trim();\n        ajax('usagi_delete_decide',{id:id, decision:action, message:message}, null, function(res){\n          if (res.success){\n            if (res.data && res.data.deleted) {\n              var marker = markersById[parseInt(id,10)];\n              if (marker) { cluster.removeLayer(marker); delete markersById[parseInt(id,10)]; }\n            } else if (res.data) {\n              refreshMarker(res.data);\n            }\n            closeDecideModal();\n            map.closePopup();\n          } else $(ID+'-decide-err').textContent = trErr(res.data);\n        });\n      });\n\n      function ajax(action, data, file, cb){\n        var fd = new FormData();\n        fd.append('action', action);\n        fd.append('_nonce', cfg.nonce);\n        Object.keys(data).forEach(function(k){ fd.append(k, data[k]); });\n        if (file) fd.append('image', file);\n        fetch(cfg.ajax_url, {method:'POST', credentials:'same-origin', body:fd})\n          .then(function(r){return r.json()}).then(cb)\n          .catch(function(){ cb({success:false, data:'save_failed'}); });\n      }\n      function esc(s){ return String(s||'').replace(\/[&<>\"']\/g, function(c){ return ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'})[c]; }); }\n\n      \/\/ ?marker=ID \u3067\u8a72\u5f53\u30de\u30fc\u30ab\u30fc\u3078\u81ea\u52d5\u30d5\u30a9\u30fc\u30ab\u30b9\n      var params = new URLSearchParams(location.search);\n      var focusId = parseInt(params.get('marker')||'0',10);\n      if (focusId && markersById[focusId]) {\n        setTimeout(function(){\n          cluster.zoomToShowLayer(markersById[focusId], function(){\n            markersById[focusId].openPopup();\n          });\n        }, 300);\n      }\n\n      \/\/ \u30d5\u30eb\u30b9\u30af\u30ea\u30fc\u30f3\u6642\u306f\u30b3\u30f3\u30c6\u30ca\u30b5\u30a4\u30ba\u78ba\u5b9a\u5f8c\u306b\u518d\u8a08\u7b97(\u30bf\u30a4\u30eb\u304c\u8868\u793a\u3055\u308c\u306a\u3044\u554f\u984c\u306e\u9632\u6b62)\n      if (cfg.is_fullscreen) {\n        [50, 200, 500, 1000, 2000].forEach(function(ms){\n          setTimeout(function(){ map.invalidateSize(true); }, ms);\n        });\n        window.addEventListener('resize', function(){ map.invalidateSize(true); });\n        \/\/ \u30bf\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u306e\u4fdd\u967a\n        map.setView([34.31060,132.99300], 15);\n      }\n\n      \/\/ \u81ea\u52d5\u8ffd\u5f93\u306f\u884c\u308f\u306a\u3044\uff08\u5927\u4e45\u91ce\u5cf6\u3092\u30c7\u30d5\u30a9\u30eb\u30c8\u8868\u793a\uff09\n    });\n    <\/script>\n    \n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udea8 \u602a\u6211\u30fb\u7dca\u6025\u30fb\u6ce8\u610f\u60c5\u5831 \u602a\u6211\u3092\u3057\u305f\u3046\u3055\u304e\u3084\u6ce8\u610f\u304c\u5fc5\u8981\u306a\u30a8\u30ea\u30a2\u306e\u6700\u65b0\u5831\u544a\u3067\u3059\u3002 \u602a\u6211\u30fb\u6ce8\u610f\u30de\u30c3\u30d7<\/p>\n","protected":false},"author":0,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-545","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/usagi-jima.org\/index.php?rest_route=\/wp\/v2\/pages\/545","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/usagi-jima.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/usagi-jima.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"replies":[{"embeddable":true,"href":"https:\/\/usagi-jima.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=545"}],"version-history":[{"count":0,"href":"https:\/\/usagi-jima.org\/index.php?rest_route=\/wp\/v2\/pages\/545\/revisions"}],"wp:attachment":[{"href":"https:\/\/usagi-jima.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=545"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}