diff --git a/index.html b/index.html index bcfcd75..bc0087d 100644 --- a/index.html +++ b/index.html @@ -22,7 +22,7 @@ - +
diff --git a/public/favicon.svg b/public/favicon.svg index 6893eb1..17ee7d1 100644 --- a/public/favicon.svg +++ b/public/favicon.svg @@ -1 +1,16 @@ - \ No newline at end of file + + 119 Helper + + + + + + + + + + + + + + diff --git a/public/images/Gemini_Generated_Image_swyu86swyu86swyu.png b/public/images/Gemini_Generated_Image_swyu86swyu86swyu.png deleted file mode 100644 index 084c64d..0000000 Binary files a/public/images/Gemini_Generated_Image_swyu86swyu86swyu.png and /dev/null differ diff --git a/public/images/brand/apple-touch-icon.png b/public/images/brand/apple-touch-icon.png new file mode 100644 index 0000000..9eab98c Binary files /dev/null and b/public/images/brand/apple-touch-icon.png differ diff --git a/public/images/brand/icon-192.png b/public/images/brand/icon-192.png new file mode 100644 index 0000000..1e2bb17 Binary files /dev/null and b/public/images/brand/icon-192.png differ diff --git a/public/images/brand/icon-512.png b/public/images/brand/icon-512.png new file mode 100644 index 0000000..9f56147 Binary files /dev/null and b/public/images/brand/icon-512.png differ diff --git a/public/images/brand/icon-maskable-512.png b/public/images/brand/icon-maskable-512.png new file mode 100644 index 0000000..d5a2a72 Binary files /dev/null and b/public/images/brand/icon-maskable-512.png differ diff --git a/public/images/brand/icon-maskable.svg b/public/images/brand/icon-maskable.svg new file mode 100644 index 0000000..b904d93 --- /dev/null +++ b/public/images/brand/icon-maskable.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/public/images/dashboard/er-capacity.svg b/public/images/dashboard/er-capacity.svg new file mode 100644 index 0000000..89a81ef --- /dev/null +++ b/public/images/dashboard/er-capacity.svg @@ -0,0 +1,43 @@ + + 응급실 병상 현황 + 응급실 병상과 심전도 모니터를 표현한 일러스트 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/dashboard/ppe-check.svg b/public/images/dashboard/ppe-check.svg new file mode 100644 index 0000000..ceaccdf --- /dev/null +++ b/public/images/dashboard/ppe-check.svg @@ -0,0 +1,51 @@ + + 개인안전장비 점검 + 소방 헬멧, 공기호흡기와 점검표를 표현한 일러스트 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/regions/busan.png b/public/images/regions/busan.png deleted file mode 100644 index f6ba3e3..0000000 Binary files a/public/images/regions/busan.png and /dev/null differ diff --git a/public/images/regions/busan.webp b/public/images/regions/busan.webp new file mode 100644 index 0000000..941311b Binary files /dev/null and b/public/images/regions/busan.webp differ diff --git a/public/images/regions/daegu.png b/public/images/regions/daegu.png deleted file mode 100644 index 2b9aa0e..0000000 Binary files a/public/images/regions/daegu.png and /dev/null differ diff --git a/public/images/regions/daegu.webp b/public/images/regions/daegu.webp new file mode 100644 index 0000000..3a5eee2 Binary files /dev/null and b/public/images/regions/daegu.webp differ diff --git a/public/images/regions/daejeon.png b/public/images/regions/daejeon.png deleted file mode 100644 index b454d71..0000000 Binary files a/public/images/regions/daejeon.png and /dev/null differ diff --git a/public/images/regions/daejeon.webp b/public/images/regions/daejeon.webp new file mode 100644 index 0000000..0e7f4c5 Binary files /dev/null and b/public/images/regions/daejeon.webp differ diff --git a/public/images/regions/gwangju.png b/public/images/regions/gwangju.png deleted file mode 100644 index b493bb0..0000000 Binary files a/public/images/regions/gwangju.png and /dev/null differ diff --git a/public/images/regions/gwangju.webp b/public/images/regions/gwangju.webp new file mode 100644 index 0000000..caf4c77 Binary files /dev/null and b/public/images/regions/gwangju.webp differ diff --git a/public/images/regions/incheon.png b/public/images/regions/incheon.png deleted file mode 100644 index ee11ffd..0000000 Binary files a/public/images/regions/incheon.png and /dev/null differ diff --git a/public/images/regions/incheon.webp b/public/images/regions/incheon.webp new file mode 100644 index 0000000..52899f7 Binary files /dev/null and b/public/images/regions/incheon.webp differ diff --git a/public/images/regions/jeju.png b/public/images/regions/jeju.png deleted file mode 100644 index cb03742..0000000 Binary files a/public/images/regions/jeju.png and /dev/null differ diff --git a/public/images/regions/jeju.webp b/public/images/regions/jeju.webp new file mode 100644 index 0000000..8ead053 Binary files /dev/null and b/public/images/regions/jeju.webp differ diff --git a/public/images/regions/sejong.png b/public/images/regions/sejong.png deleted file mode 100644 index e9d825f..0000000 Binary files a/public/images/regions/sejong.png and /dev/null differ diff --git a/public/images/regions/sejong.webp b/public/images/regions/sejong.webp new file mode 100644 index 0000000..de7337a Binary files /dev/null and b/public/images/regions/sejong.webp differ diff --git a/public/images/regions/seoul.png b/public/images/regions/seoul.png deleted file mode 100644 index 6aa6d40..0000000 Binary files a/public/images/regions/seoul.png and /dev/null differ diff --git a/public/images/regions/seoul.webp b/public/images/regions/seoul.webp new file mode 100644 index 0000000..2ad2794 Binary files /dev/null and b/public/images/regions/seoul.webp differ diff --git a/public/images/regions/ulsan.png b/public/images/regions/ulsan.png deleted file mode 100644 index 13b9ba1..0000000 Binary files a/public/images/regions/ulsan.png and /dev/null differ diff --git a/public/images/regions/ulsan.webp b/public/images/regions/ulsan.webp new file mode 100644 index 0000000..8d84752 Binary files /dev/null and b/public/images/regions/ulsan.webp differ diff --git a/public/images/safety_equipment.png b/public/images/safety_equipment.png deleted file mode 100644 index d1728bf..0000000 Binary files a/public/images/safety_equipment.png and /dev/null differ diff --git a/public/images/tools/Gemini_Generated_Image_1eyesc1eyesc1eye.png b/public/images/tools/Gemini_Generated_Image_1eyesc1eyesc1eye.png deleted file mode 100644 index d08ad07..0000000 Binary files a/public/images/tools/Gemini_Generated_Image_1eyesc1eyesc1eye.png and /dev/null differ diff --git a/public/images/tools/Gemini_Generated_Image_5cq1b5cq1b5cq1b5.png b/public/images/tools/Gemini_Generated_Image_5cq1b5cq1b5cq1b5.png deleted file mode 100644 index 7a5280f..0000000 Binary files a/public/images/tools/Gemini_Generated_Image_5cq1b5cq1b5cq1b5.png and /dev/null differ diff --git a/public/images/tools/Gemini_Generated_Image_5n8rd95n8rd95n8r.png b/public/images/tools/Gemini_Generated_Image_5n8rd95n8rd95n8r.png deleted file mode 100644 index 3e4edce..0000000 Binary files a/public/images/tools/Gemini_Generated_Image_5n8rd95n8rd95n8r.png and /dev/null differ diff --git a/public/images/tools/bg_building.png b/public/images/tools/bg_building.png deleted file mode 100644 index e48391d..0000000 Binary files a/public/images/tools/bg_building.png and /dev/null differ diff --git a/public/images/tools/bg_building.webp b/public/images/tools/bg_building.webp new file mode 100644 index 0000000..34489f3 Binary files /dev/null and b/public/images/tools/bg_building.webp differ diff --git a/public/images/tools/bg_checklist.png b/public/images/tools/bg_checklist.png deleted file mode 100644 index 1994713..0000000 Binary files a/public/images/tools/bg_checklist.png and /dev/null differ diff --git a/public/images/tools/bg_er.png b/public/images/tools/bg_er.png deleted file mode 100644 index 249ee8e..0000000 Binary files a/public/images/tools/bg_er.png and /dev/null differ diff --git a/public/images/tools/bg_er.webp b/public/images/tools/bg_er.webp new file mode 100644 index 0000000..1617eb4 Binary files /dev/null and b/public/images/tools/bg_er.webp differ diff --git a/public/images/tools/bg_hazmat.png b/public/images/tools/bg_hazmat.png deleted file mode 100644 index 671653f..0000000 Binary files a/public/images/tools/bg_hazmat.png and /dev/null differ diff --git a/public/images/tools/bg_shelter.png b/public/images/tools/bg_shelter.png deleted file mode 100644 index c739e91..0000000 Binary files a/public/images/tools/bg_shelter.png and /dev/null differ diff --git a/public/images/tools/bg_shelter.webp b/public/images/tools/bg_shelter.webp new file mode 100644 index 0000000..3e62d0a Binary files /dev/null and b/public/images/tools/bg_shelter.webp differ diff --git a/public/images/tools/bg_timer.png b/public/images/tools/bg_timer.png deleted file mode 100644 index b3e100f..0000000 Binary files a/public/images/tools/bg_timer.png and /dev/null differ diff --git a/public/images/tools/bg_timer.webp b/public/images/tools/bg_timer.webp new file mode 100644 index 0000000..b6f7f47 Binary files /dev/null and b/public/images/tools/bg_timer.webp differ diff --git a/public/images/tools/bg_water.png b/public/images/tools/bg_water.png deleted file mode 100644 index 28b0781..0000000 Binary files a/public/images/tools/bg_water.png and /dev/null differ diff --git a/public/images/tools/bg_wildfire.png b/public/images/tools/bg_wildfire.png deleted file mode 100644 index 06334af..0000000 Binary files a/public/images/tools/bg_wildfire.png and /dev/null differ diff --git a/public/images/tools/bg_wildfire.webp b/public/images/tools/bg_wildfire.webp new file mode 100644 index 0000000..c0167cb Binary files /dev/null and b/public/images/tools/bg_wildfire.webp differ diff --git a/public/images/tools/diagram_air_tank.svg b/public/images/tools/diagram_air_tank.svg new file mode 100644 index 0000000..5a81ed2 --- /dev/null +++ b/public/images/tools/diagram_air_tank.svg @@ -0,0 +1,35 @@ + + 공기호흡기 압력 + 공기호흡기 용기와 압력계의 안전 구간을 표현한 도해 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 300 bar + + diff --git a/public/images/tools/diagram_aviation.svg b/public/images/tools/diagram_aviation.svg new file mode 100644 index 0000000..48508fa --- /dev/null +++ b/public/images/tools/diagram_aviation.svg @@ -0,0 +1,33 @@ + + 항공과 드론 운용 + 풍향 표시 위를 비행하는 현장 드론 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/tools/diagram_hazmat_wind.svg b/public/images/tools/diagram_hazmat_wind.svg new file mode 100644 index 0000000..2da95a6 --- /dev/null +++ b/public/images/tools/diagram_hazmat_wind.svg @@ -0,0 +1,30 @@ + + 유해물질 풍하향 방호구역 + 누출 지점에서 바람 방향을 따라 확장되는 방호구역 + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/tools/diagram_hose_deployment.svg b/public/images/tools/diagram_hose_deployment.svg new file mode 100644 index 0000000..d2e458b --- /dev/null +++ b/public/images/tools/diagram_hose_deployment.svg @@ -0,0 +1,35 @@ + + 호스 전개 경로 + 소방차에서 건물 진입구와 계단을 지나 상층으로 이어지는 호스 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/tools/diagram_incident.svg b/public/images/tools/diagram_incident.svg new file mode 100644 index 0000000..1e62b9b --- /dev/null +++ b/public/images/tools/diagram_incident.svg @@ -0,0 +1,28 @@ + + 출동 상황판 + 현장 지휘 상황판, 위치 핀과 활동 시간을 표현한 도해 + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/tools/diagram_law_defense.svg b/public/images/tools/diagram_law_defense.svg new file mode 100644 index 0000000..b1e75e0 --- /dev/null +++ b/public/images/tools/diagram_law_defense.svg @@ -0,0 +1,33 @@ + + 법률 방어 기록 + 방패, 기록 문서와 현장 카메라를 표현한 일러스트 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/tools/diagram_water_pressure.svg b/public/images/tools/diagram_water_pressure.svg new file mode 100644 index 0000000..cac0362 --- /dev/null +++ b/public/images/tools/diagram_water_pressure.svg @@ -0,0 +1,43 @@ + + 송수압력 구조 + 펌프에서 건물 상층 관창까지 물이 공급되는 경로 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/weather/cloudy.png b/public/images/weather/cloudy.png deleted file mode 100644 index 9b422cf..0000000 Binary files a/public/images/weather/cloudy.png and /dev/null differ diff --git a/public/images/weather/cloudy.webp b/public/images/weather/cloudy.webp new file mode 100644 index 0000000..f0a7dd8 Binary files /dev/null and b/public/images/weather/cloudy.webp differ diff --git a/public/images/weather/dust.png b/public/images/weather/dust.png deleted file mode 100644 index eedc02f..0000000 Binary files a/public/images/weather/dust.png and /dev/null differ diff --git a/public/images/weather/dust.webp b/public/images/weather/dust.webp new file mode 100644 index 0000000..061be27 Binary files /dev/null and b/public/images/weather/dust.webp differ diff --git a/public/images/weather/rain.png b/public/images/weather/rain.png deleted file mode 100644 index b83e38d..0000000 Binary files a/public/images/weather/rain.png and /dev/null differ diff --git a/public/images/weather/rain.webp b/public/images/weather/rain.webp new file mode 100644 index 0000000..0096b04 Binary files /dev/null and b/public/images/weather/rain.webp differ diff --git a/public/images/weather/shower.png b/public/images/weather/shower.png deleted file mode 100644 index cd387ff..0000000 Binary files a/public/images/weather/shower.png and /dev/null differ diff --git a/public/images/weather/shower.webp b/public/images/weather/shower.webp new file mode 100644 index 0000000..243e5fe Binary files /dev/null and b/public/images/weather/shower.webp differ diff --git a/public/images/weather/snow.png b/public/images/weather/snow.png deleted file mode 100644 index 6b173cb..0000000 Binary files a/public/images/weather/snow.png and /dev/null differ diff --git a/public/images/weather/snow.webp b/public/images/weather/snow.webp new file mode 100644 index 0000000..e88efba Binary files /dev/null and b/public/images/weather/snow.webp differ diff --git a/public/images/weather/sunny.png b/public/images/weather/sunny.png deleted file mode 100644 index 2a13274..0000000 Binary files a/public/images/weather/sunny.png and /dev/null differ diff --git a/public/images/weather/sunny.webp b/public/images/weather/sunny.webp new file mode 100644 index 0000000..f3f079a Binary files /dev/null and b/public/images/weather/sunny.webp differ diff --git a/public/images/weather/thunder.png b/public/images/weather/thunder.png deleted file mode 100644 index 3a46652..0000000 Binary files a/public/images/weather/thunder.png and /dev/null differ diff --git a/public/images/weather/thunder.webp b/public/images/weather/thunder.webp new file mode 100644 index 0000000..01bc8a0 Binary files /dev/null and b/public/images/weather/thunder.webp differ diff --git a/public/manifest.json b/public/manifest.json index 3f214b0..ac79d60 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -10,10 +10,22 @@ "lang": "ko", "icons": [ { - "src": "/favicon.svg", - "sizes": "any", - "type": "image/svg+xml", - "purpose": "any maskable" + "src": "/images/brand/icon-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any" + }, + { + "src": "/images/brand/icon-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "any" + }, + { + "src": "/images/brand/icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" } ], "categories": ["utilities", "productivity"], @@ -22,13 +34,13 @@ "name": "산불 현황", "short_name": "산불", "url": "/?tab=wildfire", - "icons": [{ "src": "/favicon.svg", "sizes": "any" }] + "icons": [{ "src": "/images/brand/icon-192.png", "sizes": "192x192" }] }, { "name": "응급실 현황", "short_name": "응급실", "url": "/?tab=er", - "icons": [{ "src": "/favicon.svg", "sizes": "any" }] + "icons": [{ "src": "/images/brand/icon-192.png", "sizes": "192x192" }] } ] } diff --git a/public/sw.js b/public/sw.js index a9fc0ff..2c30e9e 100644 --- a/public/sw.js +++ b/public/sw.js @@ -16,7 +16,7 @@ * 영영 갱신되지 않는다 (소화전 데이터는 매달 갱신됨). 반드시 SWR로. */ -const CACHE_VERSION = 'v4'; +const CACHE_VERSION = 'v5'; const SHELL_CACHE = `119-shell-${CACHE_VERSION}`; const ASSET_CACHE = `119-assets-${CACHE_VERSION}`; const DATA_CACHE = '119-data-v1'; // 버전 독립 — 받아둔 관할 데이터 보존 @@ -24,6 +24,25 @@ const KEEP_CACHES = [SHELL_CACHE, ASSET_CACHE, DATA_CACHE]; const DATA_CACHE_MAX_ENTRIES = 800; const DATA_CACHE_PRUNE_COUNT = 80; +function isLegacyImagePath(pathname) { + return pathname === '/images/safety_equipment.png' + || pathname === '/images/Gemini_Generated_Image_swyu86swyu86swyu.png' + || /^\/images\/regions\/[^/]+\.png$/i.test(pathname) + || /^\/images\/weather\/[^/]+\.png$/i.test(pathname) + || /^\/images\/tools\/Gemini_Generated_Image_[^/]+\.png$/i.test(pathname) + || /^\/images\/tools\/bg_(?:building|checklist|er|hazmat|shelter|timer|water|wildfire)\.png$/i.test(pathname); +} + +async function removeLegacyImagesFromDataCache() { + const cache = await caches.open(DATA_CACHE); + const requests = await cache.keys(); + await Promise.all( + requests + .filter((request) => isLegacyImagePath(new URL(request.url).pathname)) + .map((request) => cache.delete(request)) + ); +} + // 오프라인에서도 최소한 앱 셸이 뜨도록 미리 캐시할 항목 // 폰트 포함: 아이콘이 폰트 기반(Material Symbols)이라 없으면 오프라인 UI가 깨짐 const PRECACHE_URLS = [ @@ -70,6 +89,7 @@ self.addEventListener('activate', (event) => { await Promise.all( keys.filter((key) => !KEEP_CACHES.includes(key)).map((key) => caches.delete(key)) ); + await removeLegacyImagesFromDataCache(); await self.clients.claim(); })() ); diff --git a/src/assets/hero.png b/src/assets/hero.png deleted file mode 100644 index cc51a3d..0000000 Binary files a/src/assets/hero.png and /dev/null differ diff --git a/src/assets/hydrant_bg.jpg b/src/assets/hydrant_bg.jpg deleted file mode 100644 index 00d6b25..0000000 Binary files a/src/assets/hydrant_bg.jpg and /dev/null differ diff --git a/src/assets/hydrant_bg.webp b/src/assets/hydrant_bg.webp new file mode 100644 index 0000000..3490576 Binary files /dev/null and b/src/assets/hydrant_bg.webp differ diff --git a/src/assets/react.svg b/src/assets/react.svg deleted file mode 100644 index 6c87de9..0000000 --- a/src/assets/react.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/assets/vite.svg b/src/assets/vite.svg deleted file mode 100644 index 5101b67..0000000 --- a/src/assets/vite.svg +++ /dev/null @@ -1 +0,0 @@ -Vite diff --git a/src/assets/water_tower_bg.jpg b/src/assets/water_tower_bg.jpg deleted file mode 100644 index e87c6ba..0000000 Binary files a/src/assets/water_tower_bg.jpg and /dev/null differ diff --git a/src/assets/water_tower_bg.webp b/src/assets/water_tower_bg.webp new file mode 100644 index 0000000..769ec58 Binary files /dev/null and b/src/assets/water_tower_bg.webp differ diff --git a/src/components/Calculators.tsx b/src/components/Calculators.tsx index a6495a7..0723b55 100644 --- a/src/components/Calculators.tsx +++ b/src/components/Calculators.tsx @@ -35,7 +35,12 @@ function WaterPressureCalc() {

층수 입력 → 필요 송수압력 자동 계산

-
+ 펌프에서 건물 상층 관창까지 이어지는 송수압력 구조 +
거리·층수 입력 → 필요 호스 본수 계산

-
+ 소방차에서 건물 상층까지 이어지는 호스 전개 경로 +
-
@@ -178,9 +188,14 @@ function AirTankTimer() {

※ 간이 참고용 타이머입니다. 실제 철수 판단은 장비 경보, 잔압 기준, 현장 지휘 지침을 우선하세요.

+ 공기호흡기 용기와 압력계 안전 구간 {!isRunning && timeLeft === 0 ? ( -
+
= { seoul: '서울', busan: '부산', daegu: '대구', incheon: '인천', @@ -50,24 +50,24 @@ const ALL_QUICK_TOOLS: QuickToolDef[] = [ { id: 'facility_hydrants', tab: 'hydrants', icon: 'fire_hydrant', label: '소화전', color: 'text-blue-400', category: '소방시설', bgImage: hydrantBg }, { id: 'facility_towers', tab: 'waterTowers', icon: 'water_pump', label: '급수탑', color: 'text-emerald-400', category: '소방시설', bgImage: waterTowerBg }, // 소방 계산기 - { id: 'calc_hazmat', tab: 'calculator', subId: 'hazmat_calc', icon: 'science', label: '유해물질', color: 'text-orange-400', category: '계산기', bgImage: '/images/tools/Gemini_Generated_Image_5cq1b5cq1b5cq1b5.png' }, - { id: 'calc_water', tab: 'calculator', subId: 'water_pressure_calc', icon: 'water_drop', label: '수압 계산', color: 'text-blue-400', category: '계산기', bgImage: '/images/tools/Gemini_Generated_Image_1eyesc1eyesc1eye.png' }, - { id: 'calc_hose', tab: 'calculator', subId: 'hose_length_calc', icon: 'straighten', label: '호스 전개', color: 'text-green-400', category: '계산기', bgImage: '/images/tools/bg_water.png' }, - { id: 'calc_air', tab: 'calculator', subId: 'air_tank_timer', icon: 'timer', label: '공기호흡기', color: 'text-amber-400', category: '계산기', bgImage: '/images/tools/bg_checklist.png' }, + { id: 'calc_hazmat', tab: 'calculator', subId: 'hazmat_calc', icon: 'science', label: '유해물질', color: 'text-orange-400', category: '계산기', bgImage: '/images/tools/diagram_hazmat_wind.svg' }, + { id: 'calc_water', tab: 'calculator', subId: 'water_pressure_calc', icon: 'water_drop', label: '수압 계산', color: 'text-blue-400', category: '계산기', bgImage: '/images/tools/diagram_water_pressure.svg' }, + { id: 'calc_hose', tab: 'calculator', subId: 'hose_length_calc', icon: 'straighten', label: '호스 전개', color: 'text-green-400', category: '계산기', bgImage: '/images/tools/diagram_hose_deployment.svg' }, + { id: 'calc_air', tab: 'calculator', subId: 'air_tank_timer', icon: 'timer', label: '공기호흡기', color: 'text-amber-400', category: '계산기', bgImage: '/images/tools/diagram_air_tank.svg' }, { id: 'calc_unit', tab: 'calculator', subId: 'unit_converter', icon: 'swap_horiz', label: '단위 변환', color: 'text-indigo-400', category: '계산기' }, // 주요 탭 - { id: 'incident', tab: 'incident', icon: 'assignment', label: '출동 상황판', color: 'text-red-400', category: '현장 도구', bgImage: '/images/tools/bg_timer.png' }, - { id: 'aviation', tab: 'aviation', icon: 'flight_takeoff', label: '항공/드론', color: 'text-cyan-400', category: '현장 도구', bgImage: '/images/tools/bg_wildfire.png' }, - { id: 'law_defense', tab: 'law', subId: 'DEFENSE', icon: 'gavel', label: '법률 방어망', color: 'text-rose-500', category: '법률 보호', bgImage: '/images/tools/Gemini_Generated_Image_5n8rd95n8rd95n8r.png' }, - { id: 'checklist', tab: 'checklist', icon: 'check_circle', label: '장비점검', color: 'text-orange-400', category: '현장 도구', bgImage: '/images/tools/bg_checklist.png' }, - { id: 'field_timer', tab: 'field-timer', icon: 'timer', label: '현장 타이머', color: 'text-red-500', category: '현장 도구', bgImage: '/images/tools/bg_timer.png' }, - { id: 'building', tab: 'shelter', subId: 'building', icon: 'apartment', label: '건축물대장', color: 'text-purple-400', category: '조회', bgImage: '/images/tools/bg_building.png' }, - { id: 'shelter', tab: 'shelter', icon: 'location_city', label: '시설 조회', color: 'text-yellow-400', category: '조회', bgImage: '/images/tools/bg_shelter.png' }, - { id: 'er', tab: 'er', icon: 'local_hospital', label: '응급실 현황', color: 'text-pink-400', category: '현장 도구', bgImage: '/images/tools/bg_er.png' }, + { id: 'incident', tab: 'incident', icon: 'assignment', label: '출동 상황판', color: 'text-red-400', category: '현장 도구', bgImage: '/images/tools/diagram_incident.svg' }, + { id: 'aviation', tab: 'aviation', icon: 'flight_takeoff', label: '항공/드론', color: 'text-cyan-400', category: '현장 도구', bgImage: '/images/tools/diagram_aviation.svg' }, + { id: 'law_defense', tab: 'law', subId: 'DEFENSE', icon: 'gavel', label: '법률 방어망', color: 'text-rose-500', category: '법률 보호', bgImage: '/images/tools/diagram_law_defense.svg' }, + { id: 'checklist', tab: 'checklist', icon: 'check_circle', label: '장비점검', color: 'text-orange-400', category: '현장 도구', bgImage: '/images/dashboard/ppe-check.svg' }, + { id: 'field_timer', tab: 'field-timer', icon: 'timer', label: '현장 타이머', color: 'text-red-500', category: '현장 도구', bgImage: '/images/tools/bg_timer.webp' }, + { id: 'building', tab: 'shelter', subId: 'building', icon: 'apartment', label: '건축물대장', color: 'text-purple-400', category: '조회', bgImage: '/images/tools/bg_building.webp' }, + { id: 'shelter', tab: 'shelter', icon: 'location_city', label: '시설 조회', color: 'text-yellow-400', category: '조회', bgImage: '/images/tools/bg_shelter.webp' }, + { id: 'er', tab: 'er', icon: 'local_hospital', label: '응급실 현황', color: 'text-pink-400', category: '현장 도구', bgImage: '/images/tools/bg_er.webp' }, { id: 'weather', tab: 'weather', icon: 'cloud', label: '기상 정보', color: 'text-sky-400', category: '현장 도구' }, { id: 'statistics', tab: 'annual-fire', icon: 'bar_chart', label: '통계 분석', color: 'text-orange-500', category: '행정/기타' }, { id: 'news', tab: 'news', icon: 'newspaper', label: '소방 뉴스', color: 'text-teal-500', category: '행정/기타' }, - { id: 'wildfire', tab: 'wildfire', icon: 'local_fire_department', label: '산불 현황', color: 'text-red-500', category: '행정/기타', bgImage: '/images/tools/bg_wildfire.png' }, + { id: 'wildfire', tab: 'wildfire', icon: 'local_fire_department', label: '산불 현황', color: 'text-red-500', category: '행정/기타', bgImage: '/images/tools/bg_wildfire.webp' }, { id: 'manual', tab: 'manual', icon: 'menu_book', label: '대응 매뉴얼', color: 'text-blue-500', category: '행정/기타' }, { id: 'calendar', tab: 'calendar', icon: 'calendar_month', label: '달력/일정', color: 'text-red-400', category: '행정/기타' }, { id: 'policy', tab: 'policy', icon: 'gavel', label: '법안/지침', color: 'text-green-500', category: '행정/기타' }, @@ -266,7 +266,7 @@ export default function DashboardView({ onNavigate, city, fireFacilities, isLoad ? (cityIndex.waterTowers ?? 0) : fireFacilities.filter(f => f.type === '급수탑' || f.type === '저수조').length; - const regionImageUrl = `/images/regions/${city}.png`; + const regionImageUrl = `/images/regions/${city}.webp`; const aviation = weather ? classifyAviationSafety(weather.windSpeed) : null; const getBgOverlay = () => { @@ -336,9 +336,14 @@ export default function DashboardView({ onNavigate, city, fireFacilities, isLoad style={{ minHeight: '280px' }} > {/* Background Image Layer */} -