#map-container {position: relative;height: calc(100vh - 110px);height: calc(100dvh - 110px);width: 100%;overflow: hidden;overscroll-behavior: none}
@media (max-width: 768px) {#map-container {height: calc(100vh - 60px - env(safe-area-inset-bottom, 0));height: calc(100dvh - 60px - env(safe-area-inset-bottom, 0))}}
#map-container #map {height: 100%;width: 100%;touch-action: none;overscroll-behavior: none;visibility: hidden}
#map-container #map.map-initialized {visibility: visible}
.home-pending-notice,
.home-timeline-link,
.map-control-buttons {user-select: none;-webkit-user-select: none}
.home-timeline-link {position: absolute;top: 10px;left: 10px;z-index: var(--z-index-base);display: flex;align-items: center;gap: 6px;padding: 8px 14px;background: #fff;border-radius: 20px;box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12);text-decoration: none;color: #1c1e21;font-size: 0.8125rem;font-weight: 600;transition: box-shadow 0.2s}
.home-timeline-link:hover {box-shadow: 0 4px 16px rgba(0, 0, 0, 0.18)}
.home-timeline-link svg {color: #1877f2;flex-shrink: 0}
.map-control-buttons {position: absolute;top: 50%;right: 10px;transform: translateY(-50%);display: flex;flex-direction: column;gap: 10px;z-index: var(--z-index-base)}
.map-control-btn {width: 44px;height: 44px;background: #fff;border: none;border-radius: 50%;box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);cursor: pointer;display: flex;align-items: center;justify-content: center;color: #666;transition: all 0.2s ease}
@media (hover: hover) {.map-control-btn:hover {background: #f5f5f5;color: #1877f2;transform: scale(1.05)}}
.map-control-btn:active {transform: scale(0.95)}
.map-control-btn:focus:not(:focus-visible) {outline: none}
.map-control-btn:focus-visible {outline: 2px solid #1877f2;outline-offset: 2px}
.map-location-btn.loading {pointer-events: none;color: #1877f2}
.map-location-btn.loading svg {animation: pulse 1s ease-in-out infinite}
@keyframes pulse {0%, 100% { opacity: 1; }
50% { opacity: 0.4; }}
.map-forecast-btn {color: #0ea5e9}
@media (hover: hover) {.map-forecast-btn:hover:not(.disabled) {color: #0284c7;background: #e0f2fe}}
.map-forecast-btn.disabled {color: #9ca3af;background: #f3f4f6;cursor: not-allowed;opacity: 0.7}
@media (hover: hover) {.map-forecast-btn.disabled:hover {transform: none}}
.map-forecast-btn.has-favorites {color: var(--color-warning);cursor: pointer}
@media (hover: hover) {.map-forecast-btn.has-favorites:hover {color: #d97706;background: #fef3c7}}
.favorite-location-popup {position: absolute;right: 54px;top: 50%;transform: translateY(-50%);background: #fff;border-radius: 14px;box-shadow: 0 4px 24px rgba(0, 0, 0, 0.14);width: 240px;z-index: 10;overflow: hidden}
.favorite-location-popup-header {display: flex;align-items: center;justify-content: space-between;padding: 10px 14px 8px;background: linear-gradient(90deg, #eff6ff, #f0f9ff);border-bottom: 1px solid #dbeafe}
.favorite-location-popup-title {font-size: 13px;font-weight: 600;color: #1e40af;display: flex;align-items: center;gap: 5px}
.favorite-location-popup-close {display: flex;align-items: center;justify-content: center;width: 24px;height: 24px;border: none;background: none;color: #93c5fd;cursor: pointer;border-radius: 4px;padding: 0}
@media (hover: hover) {.favorite-location-popup-close:hover {background: rgba(59, 130, 246, 0.1);color: var(--color-primary)}}
.favorite-location-popup-list {padding: 6px;display: flex;flex-direction: column;gap: 4px;max-height: 220px;overflow-y: auto}
.favorite-location-popup-card {display: flex;align-items: center;gap: 10px;width: 100%;padding: 8px 10px;border-radius: 10px;border: none;background: var(--color-bg-muted);text-align: left;cursor: pointer;transition: all 0.15s;font: inherit}
@media (hover: hover) {.favorite-location-popup-card:hover {background: #eff6ff;box-shadow: 0 1px 4px rgba(59, 130, 246, 0.1)}}
.favorite-location-popup-card-icon {width: 32px;height: 32px;border-radius: 8px;background: linear-gradient(135deg, #0ea5e9, #38bdf8);display: flex;align-items: center;justify-content: center;flex-shrink: 0;color: #fff}
.favorite-location-popup-card-name {flex: 1;min-width: 0;font-size: 13px;font-weight: 600;color: var(--color-text-primary);overflow: hidden;text-overflow: ellipsis;white-space: nowrap}
@media (max-width: 768px) {.favorite-location-popup {right: 50px;width: min(240px, calc(100vw - 74px))}}
.map-weekly-btn {color: var(--color-primary)}
.map-weekly-btn:hover {color: var(--color-primary-dark);background: #dbeafe}
body.article-mode .map-forecast-btn,
body.article-mode .map-weekly-btn {visibility: hidden;pointer-events: none}
.map-chat-btn {position: relative;color: #10b981}
.map-chat-btn:hover {color: #059669;background: #d1fae5}
.map-chat-badge {position: absolute;top: 6px;right: 6px;width: 8px;height: 8px;background: #10b981;border-radius: 50%;border: 2px solid #fff;animation: chat-badge-pulse 2s ease-in-out infinite}
@keyframes chat-badge-pulse {0%, 100% {transform: scale(1);opacity: 1}
50% {transform: scale(1.2);opacity: 0.7}}
.map-ship-btn {color: #1877f2}
.map-ship-btn:hover {color: #1565c0;background: #e3f2fd}
.map-ship-btn.active {color: #fff;background: #1877f2;box-shadow: 0 2px 8px rgba(24, 119, 242, 0.4)}
.map-ship-btn.active:hover {background: #1565c0}
.map-mode-expandable {position: relative;display: flex;align-items: center}
.map-mode-expand-options {position: absolute;right: 100%;top: 50%;transform: translateY(-50%) translateX(10px);display: flex;align-items: center;gap: 3px;background: rgba(255, 255, 255, 0.95);backdrop-filter: blur(10px);-webkit-backdrop-filter: blur(10px);border-radius: 22px;padding: 3px;box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);margin-right: 8px;opacity: 0;pointer-events: none;transition: opacity 0.2s ease, transform 0.2s ease}
.map-mode-expand-options.is-open {opacity: 1;pointer-events: auto;transform: translateY(-50%) translateX(0)}
.map-mode-expand-btn {display: flex;align-items: center;gap: 4px;padding: 7px 12px;border: none;border-radius: 20px;font-size: 0.78em;font-weight: 600;cursor: pointer;background: transparent;color: #999;transition: all 0.2s ease;white-space: nowrap}
.map-mode-expand-btn svg {flex-shrink: 0}
.map-mode-expand-btn:hover {background: rgba(0, 0, 0, 0.06);color: #555}
.map-mode-expand-btn--active-fish {background: #1877f2;color: #fff;box-shadow: 0 2px 6px rgba(24, 119, 242, 0.3)}
.map-mode-expand-btn--active-fish:hover {background: #1565c0}
.map-mode-expand-btn--active-ship {background: #0f4c81;color: #fff;box-shadow: 0 2px 6px rgba(15, 76, 129, 0.3)}
.map-mode-expand-btn--active-ship:hover {background: #0a3660}
.map-mode-expand-btn--active-article {background: #e8590c;color: #fff;box-shadow: 0 2px 6px rgba(232, 89, 12, 0.3)}
.map-mode-expand-btn--active-article:hover {background: #c74b0a}
.map-mode-trigger--fish {color: #1877f2;border-color: #1877f2}
.map-mode-trigger--ship {color: #0f4c81;border-color: #0f4c81}
.map-mode-trigger--article {color: #e8590c;border-color: #e8590c}
@media (max-width: 768px) {.map-control-buttons {right: 8px;gap: 8px}
.map-control-btn {width: 40px;height: 40px}}
.hidden {display: none}
turbo-frame#welcome-modal-frame {display: contents}
.modal {position: fixed;z-index: var(--z-index-modal);left: 0;top: 0;width: 100%;height: 100%;overflow: auto;background-color: rgba(0,0,0,0.4);display: flex;align-items: center;justify-content: center}
.modal.modal-fade-out {animation: modalFadeOut 0.35s ease-out forwards}
@keyframes modalFadeOut {0%   { opacity: 1; }
100% { opacity: 0; }}
.modal-content {background-color: #fefefe;margin: auto;padding: 20px;border: 1px solid #888;width: 80%;max-width: 500px;box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2), 0 6px 20px 0 rgba(0,0,0,0.19);animation-name: animatetop;animation-duration: 0.4s;border-radius: 8px;text-align: center}
@keyframes animatetop {from {top: -300px; opacity: 0}
to {top: 0; opacity: 1}}
.close-button {color: #aaa;float: right;font-size: 28px;font-weight: bold;cursor: pointer}
.close-button:hover,
.close-button:focus {color: black;text-decoration: none;cursor: pointer}
.modal h2 {color: #333;margin-bottom: 15px}
.modal p {color: #666;line-height: 1.5;margin-bottom: 10px}
.welcome-modal-content {position: relative;background: #ffffff;border: none;border-top: 4px solid var(--color-primary);max-height: 80vh;overflow-x: hidden;overflow-y: auto;padding: 0}
.welcome-modal-content .close-button {position: absolute;top: 4px;right: 8px;color: var(--color-primary);font-size: 28px;font-weight: bold;cursor: pointer;z-index: 10;line-height: 1;background: none;border: none;min-width: 44px;min-height: 44px;display: flex;align-items: center;justify-content: center;padding: 0}
.welcome-modal-content .close-button:hover {color: var(--color-primary-dark)}
.welcome-modal-content .close-button:focus-visible {color: var(--color-primary-dark);outline: 2px solid var(--color-primary);outline-offset: 2px;border-radius: 4px}
.welcome-single-page {position: relative}
.hero-image-grid {position: absolute;inset: 0;overflow: hidden;background: var(--color-bg-secondary)}
.hero-image-lane {position: absolute;top: 0;bottom: 0;display: flex;flex-direction: column;gap: 5px;width: calc(33.333% - 3.33px);overflow: hidden}
.hero-image-lane:nth-child(1) { left: 0; }
.hero-image-lane:nth-child(2) { left: calc(33.333% + 2.5px); }
.hero-image-lane:nth-child(3) { left: calc(66.666% + 5px); }
.hero-image-lane .lane-inner {display: flex;flex-direction: column;gap: 5px;animation: welcomeScrollUp 50s linear infinite;will-change: transform;backface-visibility: hidden}
.hero-image-lane:nth-child(2) .lane-inner {animation-delay: -16s;animation-duration: 60s}
.hero-image-lane:nth-child(3) .lane-inner {animation-delay: -8s;animation-duration: 45s}
@keyframes welcomeScrollUp {0%   { transform: translateY(0); }
100% { transform: translateY(-50%); }}
.hero-image-lane img {width: 100%;aspect-ratio: 3 / 4;object-fit: cover;border-radius: 6px;display: block;opacity: 0;transition: opacity 0.6s ease;background-color: var(--color-bg-secondary)}
.hero-image-lane img.loaded {opacity: 1}
.hero-image-grid::after {content: '';position: absolute;inset: 0;background: linear-gradient(180deg,
rgba(255,255,255,0) 0%,
rgba(255,255,255,0) 30%,
rgba(255,255,255,0.45) 50%,
rgba(255,255,255,0.88) 58%,
rgba(255,255,255,0.96) 72%,
rgba(255,255,255,1) 100%
);pointer-events: none}
.welcome-panel {z-index: 2;display: flex;flex-direction: column;align-items: center;opacity: 0;transition: opacity 0.5s ease;pointer-events: none}
.welcome-panel.active {opacity: 1;pointer-events: auto}
.panel-intro {position: relative;padding: 280px 20px 16px}
.panel-intro:not(.active) {visibility: hidden}
.panel-usage {position: absolute;top: 0;left: 0;right: 0;bottom: 0;padding: 320px 20px 12px;justify-content: flex-start}
.hero-logo-icon {width: 60px;height: 60px;border-radius: var(--radius-md);overflow: hidden;margin-bottom: 10px;box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15)}
.hero-logo-icon img {width: 100%;height: 100%;object-fit: cover;display: block}
.hero-app-name {font-size: 1.75rem;font-weight: 800;color: var(--color-text-primary);margin-bottom: 6px}
.hero-tagline {font-size: 0.85rem;color: var(--color-text-secondary);line-height: 1.6;margin-bottom: 20px}
.hero-stats-row {display: flex;gap: 10px;width: 100%;margin-bottom: 16px}
.hero-stat-card {flex: 1;text-align: center;background-color: #ffffff;padding: 12px 10px;border-radius: var(--radius-sm);box-shadow: 0 2px 4px rgba(59, 130, 246, 0.1);border: 1px solid #e8f4fd;animation: welcomeStatSlideIn 0.6s ease-out both}
.hero-stat-card:nth-child(2) { animation-delay: 0.12s; }
@keyframes welcomeStatSlideIn {0% { opacity: 0; transform: translateY(12px); }
100% { opacity: 1; transform: translateY(0); }}
.hero-stat-icon {font-size: 1.3em;color: var(--color-primary);margin-bottom: 4px;display: block}
.hero-stat-label {font-size: 0.8125rem;color: var(--color-text-muted);margin-bottom: 2px}
.hero-stat-number {font-size: 1.3em;font-weight: bold;color: var(--color-primary);line-height: 1.2}
.hero-stat-number small {font-size: 0.6em;font-weight: 600;color: var(--color-text-muted);margin-left: 1px}
.panel-usage-header {display: flex;align-items: center;gap: 10px;margin-bottom: 6px}
.panel-usage-icon {width: 36px;height: 36px;border-radius: var(--radius-sm);background: linear-gradient(135deg, var(--color-primary), #60a5fa);display: flex;align-items: center;justify-content: center;color: #ffffff;font-size: 0.95rem;flex-shrink: 0}
.panel-usage-title {font-size: 1.1rem;font-weight: 800;color: var(--color-text-primary)}
.welcome-access-chart {width: 100%;padding: 8px 10px;background-color: rgba(255,255,255,0.9);border-radius: var(--radius-sm);border: 1px solid var(--color-border);margin-bottom: 6px}
.access-chart-container {display: flex;justify-content: space-between;align-items: flex-end;height: 110px;padding: 4px 4px 0;gap: 6px}
.access-bar-container {flex: 1;display: flex;flex-direction: column;align-items: center;height: 100%}
.access-bar {width: 100%;max-width: 40px;background: linear-gradient(180deg, var(--color-primary) 0%, #60a5fa 100%);border-radius: 4px 4px 0 0;min-height: 4px;display: flex;justify-content: center;align-items: flex-start;padding-top: 6px;margin-top: auto;transition: height 0.5s ease}
.access-bar.today {background: linear-gradient(180deg, var(--color-success) 0%, #4ade80 100%);box-shadow: 0 0 8px rgba(34,197,94,0.25)}
.access-bar-count {font-size: 0.6em;color: white;font-weight: 600;text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2)}
.access-bar-label {font-size: 0.7em;color: var(--color-text-muted);margin-top: 6px;white-space: nowrap}
.access-bar-label.today-label {color: var(--color-success);font-weight: 700}
.access-chart-legend {display: flex;justify-content: center;margin-top: 8px;padding-top: 8px;border-top: 1px solid var(--color-border)}
.access-chart-legend-item {font-size: 0.75em;color: var(--color-text-muted);display: flex;align-items: center;gap: 4px}
.access-chart-legend-item i {color: var(--color-primary)}
.chart-no-data {text-align: center;color: var(--color-text-light);padding: 40px 0;font-size: 0.9em}
.hero-skip-btn {display: block;margin: 10px auto 0;background: none;border: none;font-size: 0.8em;color: var(--color-text-muted);cursor: pointer;transition: color 0.2s;text-decoration: underline;text-underline-offset: 3px;min-height: 44px;padding: 10px 16px}
.hero-skip-btn:hover { color: var(--color-primary); }
.panel-usage .hero-skip-btn { margin-top: 2px; }
.welcome-progress-area {position: relative;z-index: 3;padding: 40px 20px 5px;display: flex;flex-direction: column;align-items: center;gap: 8px;background: #ffffff}
.welcome-indicators {display: flex;gap: 4px;align-items: center}
.welcome-indicator {width: 44px;height: 44px;border-radius: 50%;border: none;background-color: transparent;cursor: pointer;transition: all 0.3s ease;padding: 0;display: flex;align-items: center;justify-content: center;outline: none}
.welcome-indicator::after {content: '';display: block;width: 10px;height: 10px;border-radius: 50%;background-color: #cbd5e1;transition: background-color 0.3s ease, transform 0.3s ease}
.welcome-indicator:hover::after { background-color: var(--color-text-light); }
.welcome-indicator:focus-visible {outline: 2px solid var(--color-primary);outline-offset: 2px;border-radius: 4px}
.welcome-indicator.active::after {background-color: var(--color-primary);transform: scale(1.2)}
.welcome-progress-bar {width: 100%;height: 3px;background: var(--color-border);border-radius: 2px;overflow: visible;position: relative}
.welcome-progress-fill {height: 100%;width: 0%;background: linear-gradient(90deg, var(--color-primary), var(--color-primary-dark));border-radius: 2px;transition: width 0.1s linear;position: relative;overflow: visible}
.progress-fish {position: absolute;bottom: 100%;left: 20%;pointer-events: none;opacity: 0;filter: drop-shadow(0 1px 3px rgba(59, 130, 246, 0.4))}
.progress-boat {position: absolute;bottom: 100%;left: 0;pointer-events: none;display: none;filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.2));transition: left 0.05s linear;animation: boatBob 1.2s ease-in-out infinite}
@keyframes boatBob {0%, 100% { transform: translateY(0); }
50% { transform: translateY(-2px); }}
@keyframes fishJumpRight {0% {opacity: 0;transform: translateY(5px) translateX(0) rotate(-40deg) scaleX(1)}
8% {opacity: 0.8;transform: translateY(2px) translateX(2px) rotate(-50deg) scaleX(1)}
20% {opacity: 1;transform: translateY(-12px) translateX(6px) rotate(-35deg) scaleX(1)}
40% {opacity: 1;transform: translateY(-22px) translateX(12px) rotate(-10deg) scaleX(1)}
60% {opacity: 1;transform: translateY(-16px) translateX(18px) rotate(15deg) scaleX(1)}
80% {opacity: 0.8;transform: translateY(-1px) translateX(24px) rotate(40deg) scaleX(1)}
92% {opacity: 0.4;transform: translateY(3px) translateX(27px) rotate(55deg) scaleX(1)}
100% {opacity: 0;transform: translateY(5px) translateX(28px) rotate(65deg) scaleX(1)}}
@keyframes fishJumpLeft {0% {opacity: 0;transform: translateY(5px) translateX(0) rotate(40deg) scaleX(-1)}
8% {opacity: 0.8;transform: translateY(2px) translateX(-2px) rotate(50deg) scaleX(-1)}
20% {opacity: 1;transform: translateY(-12px) translateX(-6px) rotate(35deg) scaleX(-1)}
40% {opacity: 1;transform: translateY(-22px) translateX(-12px) rotate(10deg) scaleX(-1)}
60% {opacity: 1;transform: translateY(-16px) translateX(-18px) rotate(-15deg) scaleX(-1)}
80% {opacity: 0.8;transform: translateY(-1px) translateX(-24px) rotate(-40deg) scaleX(-1)}
92% {opacity: 0.4;transform: translateY(3px) translateX(-27px) rotate(-55deg) scaleX(-1)}
100% {opacity: 0;transform: translateY(5px) translateX(-28px) rotate(-65deg) scaleX(-1)}}
.whale-shake {animation: whaleShake 0.6s ease-in-out}
@keyframes whaleShake {0%, 100% { transform: translate(0, 0); }
10% { transform: translate(-4px, 3px); }
20% { transform: translate(5px, -4px); }
30% { transform: translate(-5px, 2px); }
40% { transform: translate(4px, -3px); }
50% { transform: translate(-3px, 4px); }
60% { transform: translate(3px, -2px); }
70% { transform: translate(-2px, 3px); }
80% { transform: translate(2px, -1px); }
90% { transform: translate(-1px, 1px); }}
@media (max-width: 480px) {.welcome-modal-content {width: 90%;max-height: 85vh}
.panel-intro { padding: 200px 16px 16px; }
.panel-usage { padding: 230px 16px 10px; }
.hero-stat-number { font-size: 1.15em; }
.access-chart-container { height: 110px; }
.access-bar-count { font-size: 0.5em; }
.access-bar-label { font-size: 0.6em; }}
@media (max-width: 375px) {.welcome-modal-content {width: 95%}
.panel-intro { padding: 180px 12px 12px; }
.panel-usage { padding: 210px 12px 8px; }}
.fishing-ship-sample-badge {display: flex;align-items: center;gap: 6px;padding: 8px 12px;background: #fef3c7;color: #92400e;font-size: 11px;font-weight: 600;border-bottom: 1px solid #fbbf24}
.fishing-ship-sample-badge svg {flex-shrink: 0;color: #f59e0b}
.fishing-ship-info .marker-info-fish-name {background: linear-gradient(135deg, rgba(24, 119, 242, 0.95) 0%, rgba(13, 71, 161, 0.95) 100%);box-shadow: 0 4px 12px rgba(24, 119, 242, 0.3)}
.fishing-ship-placeholder svg {width: 64px;height: 64px;color: #1877f2;opacity: 0.6}
.fishing-ship-actions {margin-top: 14px;padding-top: 12px;border-top: 1px solid var(--color-border-light)}
.fishing-ship-detail-link {display: flex;align-items: center;justify-content: center;gap: 8px;padding: 10px 16px;background: linear-gradient(135deg, #1877f2 0%, #0d47a1 100%);color: #fff;text-decoration: none;border-radius: 10px;font-size: 0.9em;font-weight: 600;transition: all 0.2s ease;box-shadow: 0 2px 8px rgba(24, 119, 242, 0.3)}
.fishing-ship-detail-link:hover {background: linear-gradient(135deg, #1565c0 0%, #0a3068 100%);transform: translateY(-1px);box-shadow: 0 4px 12px rgba(24, 119, 242, 0.4)}
.fishing-ship-detail-link svg {width: 16px;height: 16px}
.fishing-ship-schedule {margin-top: 12px;padding: 12px;background: linear-gradient(135deg, var(--color-bg-muted) 0%, var(--color-bg-secondary) 100%);border-radius: 10px;border: 1px solid var(--color-border)}
.fishing-ship-schedule.no-schedule {background: var(--color-bg-muted)}
.fishing-ship-schedule-header {display: flex;align-items: center;gap: 6px;font-size: 0.8em;font-weight: 600;color: #1877f2;margin-bottom: 8px}
.fishing-ship-schedule-header svg {flex-shrink: 0}
.fishing-ship-schedule-content {display: flex;flex-direction: column;gap: 6px}
.fishing-ship-schedule-date {font-size: 1.05em;font-weight: 700;color: #0f172a}
.fishing-ship-target-fish {display: flex;align-items: center;gap: 4px;font-size: 0.95em;font-weight: 600;color: #334155}
.target-fish-icon {font-size: 1em}
.fishing-ship-schedule-details {display: flex;align-items: center;justify-content: space-between;margin-top: 4px}
.fishing-ship-price {font-size: 1em;font-weight: 700;color: #0f172a}
.fishing-ship-slots {font-size: 0.85em;font-weight: 600;padding: 3px 10px;border-radius: 12px}
.fishing-ship-slots.available {background: #dcfce7;color: #166534}
.fishing-ship-slots.full {background: #fee2e2;color: #991b1b}
.fishing-ship-schedule-message {font-size: 0.9em;color: var(--color-text-muted)}
.weekly-fish-modal {position: fixed;top: 0;left: 0;right: 0;bottom: 0;background-color: rgba(0, 0, 0, 0.5);display: flex;align-items: center;justify-content: center;z-index: var(--z-index-modal, 1000);padding: 20px}
.weekly-fish-modal.hidden {display: none}
.weekly-fish-modal-content {position: relative;background: white;border-radius: 16px;max-width: 400px;width: 100%;max-height: 80vh;overflow: hidden;box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2);animation: modalSlideUp 0.3s ease-out}
@keyframes modalSlideUp {from {transform: translateY(20px);opacity: 0}
to {transform: translateY(0);opacity: 1}}
.weekly-fish-modal-body {padding: 20px;max-height: 60vh;overflow-y: auto;overflow-x: hidden}
.weekly-fish-empty {text-align: center;color: #9ca3af;padding: 40px 20px;display: flex;flex-direction: column;align-items: center;gap: 12px}
.weekly-fish-empty-icon {width: 64px;height: 64px;opacity: 0.6}
.weekly-fish-empty p {margin: 0;font-size: 0.95em;color: #6b7280}
@media (max-width: 480px) {.weekly-fish-modal {padding: 10px}
.weekly-fish-modal-content {max-height: 70vh}
.weekly-fish-modal-body {padding: 12px}}
.weekly-fish-info {display: flex;align-items: center;gap: 8px;padding: 10px 12px;background: #fef3c7;border: 1px solid #fcd34d;border-radius: 8px;margin-bottom: 12px;font-size: 0.8em;color: #92400e;animation: infoFadeOut 0.5s ease-out 3s forwards}
.weekly-fish-info i {color: var(--color-warning);flex-shrink: 0}
@keyframes infoFadeOut {0% {opacity: 1;max-height: 50px;padding: 10px 12px;margin-bottom: 12px}
50% {opacity: 0;max-height: 50px;padding: 10px 12px;margin-bottom: 12px}
100% {opacity: 0;max-height: 0;padding: 0 12px;margin-bottom: 0;border-width: 0;overflow: hidden}}
.weekly-fish-summary {display: flex;justify-content: space-around;gap: 8px;padding: 16px;background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%);border-radius: 12px;margin-bottom: 12px;border: 1px solid #bae6fd}
.weekly-fish-tabs {display: flex;gap: 4px;margin-bottom: 12px;background: var(--color-bg-secondary);padding: 4px;border-radius: 10px}
.weekly-fish-tab {flex: 1;display: flex;align-items: center;justify-content: center;gap: 6px;padding: 10px 12px;font-size: 0.85em;font-weight: 600;color: var(--color-text-muted);background: transparent;border: none;border-radius: 8px;cursor: pointer;transition: all 0.2s ease}
.weekly-fish-tab:hover {color: #334155;background: rgba(255, 255, 255, 0.5)}
.weekly-fish-tab.active {color: #0284c7;background: white;box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1)}
.weekly-fish-tab i {font-size: 0.95em}
.weekly-fish-tab-content {display: none;opacity: 0}
.weekly-fish-tab-content.active {display: block;opacity: 1}
.weekly-fish-compact-name-link {color: var(--color-text-primary);text-decoration: none;transition: color 0.2s}
.weekly-fish-compact-name-link:hover {color: #0284c7;text-decoration: underline}
.weekly-fish-summary-item {display: flex;flex-direction: column;align-items: center;gap: 4px}
.weekly-fish-summary-item i {font-size: 1.2em;color: #0284c7}
.weekly-fish-summary-value {font-size: 1.5em;font-weight: 700;color: #0369a1;line-height: 1}
.weekly-fish-summary-label {font-size: 0.75em;color: var(--color-text-muted);font-weight: 500}
.weekly-fish-sort-header {display: flex;justify-content: space-between;align-items: center;padding: 8px 0;margin-bottom: 12px;border-bottom: 1px solid var(--color-border)}
.weekly-fish-sort-title {font-size: 0.9em;font-weight: 600;color: #334155}
.weekly-fish-sort-buttons {display: flex;gap: 4px}
.weekly-fish-sort-btn {display: flex;align-items: center;gap: 4px;padding: 6px 10px;font-size: 0.75em;font-weight: 500;color: var(--color-text-muted);background: var(--color-bg-secondary);border: 1px solid var(--color-border);border-radius: 6px;cursor: pointer;transition: all 0.2s ease}
.weekly-fish-sort-btn:hover {background: var(--color-border);color: #334155}
.weekly-fish-sort-btn.active {background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary-dark) 100%);color: white;border-color: transparent}
.weekly-fish-sort-btn i {font-size: 0.9em}
.weekly-fish-compact-list {display: flex;flex-direction: column;gap: 8px}
.weekly-fish-compact-item {display: grid;grid-template-columns: 48px 1fr auto;grid-template-rows: auto auto;gap: 0 12px;padding: 10px 12px;background: var(--color-bg-muted);border-radius: 10px;border: 1px solid var(--color-border);transition: background 0.2s ease, border-color 0.2s ease;align-items: center}
.weekly-fish-compact-item:hover {background: var(--color-bg-secondary);border-color: #cbd5e1}
.weekly-fish-compact-image-link,
.weekly-fish-compact-image-placeholder {grid-row: 1 / 3;width: 48px;height: 48px;border-radius: 8px;overflow: hidden;flex-shrink: 0}
.weekly-fish-compact-image {width: 100%;height: 100%;object-fit: cover;transition: transform 0.2s}
.weekly-fish-compact-image-link:hover .weekly-fish-compact-image {transform: scale(1.1)}
.weekly-fish-compact-image-placeholder {background: linear-gradient(135deg, #e0f2fe 0%, #bae6fd 100%);display: flex;align-items: center;justify-content: center}
.weekly-fish-compact-image-placeholder i {color: #0284c7;font-size: 1.2em}
.weekly-fish-compact-info {display: flex;flex-direction: column;gap: 2px;min-width: 0}
.weekly-fish-compact-name {font-size: 0.95em;font-weight: 600;color: var(--color-text-primary);white-space: nowrap;overflow: hidden;text-overflow: ellipsis}
.weekly-fish-compact-details {display: flex;gap: 8px;font-size: 0.75em;color: var(--color-text-muted)}
.weekly-fish-compact-size::before {content: "";display: inline-block;width: 8px;height: 8px;background: #0ea5e9;border-radius: 2px;margin-right: 4px;vertical-align: middle}
.weekly-fish-compact-region::before {content: "";display: inline-block;width: 8px;height: 8px;background: var(--color-warning);border-radius: 50%;margin-right: 4px;vertical-align: middle}
.weekly-fish-compact-count {display: flex;align-items: baseline;gap: 2px;justify-self: end}
.weekly-fish-compact-count-number {font-size: 1.3em;font-weight: 700;color: #0284c7;line-height: 1}
.weekly-fish-compact-count-label {font-size: 0.7em;color: var(--color-text-muted);font-weight: 500}
.weekly-fish-compact-bar-container {grid-column: 2 / 4;height: 4px;background: var(--color-border);border-radius: 2px;overflow: hidden;margin-top: 4px}
.weekly-fish-compact-bar {height: 100%;background: linear-gradient(90deg, #0ea5e9 0%, #0284c7 100%);border-radius: 2px;transition: width 0.3s ease}
@media (max-width: 480px) {.weekly-fish-summary {padding: 12px 8px;gap: 4px}
.weekly-fish-summary-value {font-size: 1.3em}
.weekly-fish-summary-label {font-size: 0.7em}
.weekly-fish-sort-header {padding: 6px 0;margin-bottom: 10px}
.weekly-fish-sort-btn {padding: 5px 8px;font-size: 0.7em}
.weekly-fish-compact-item {grid-template-columns: 40px 1fr auto;gap: 0 10px;padding: 8px 10px}
.weekly-fish-compact-image-link,
.weekly-fish-compact-image-placeholder {width: 40px;height: 40px}
.weekly-fish-compact-name {font-size: 0.9em}
.weekly-fish-compact-details {font-size: 0.7em}
.weekly-fish-compact-count-number {font-size: 1.1em}}
.weekly-modal-slides-wrapper {overflow: hidden;position: relative;width: 100%}
.weekly-modal-slides {display: flex;transition: transform 0.3s ease-out}
.weekly-modal-slide {flex: 0 0 100%;min-width: 100%;overflow: hidden}
.weekly-modal-nav {position: absolute;top: 50%;transform: translateY(-50%);width: 44px;height: 44px;border-radius: 50%;border: none;background: rgba(255, 255, 255, 0.9);box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);cursor: pointer;display: flex;align-items: center;justify-content: center;color: var(--color-text-muted);transition: opacity 0.3s ease, background 0.2s ease, color 0.2s ease, box-shadow 0.2s ease;z-index: 10}
.weekly-modal-nav.faded {opacity: 0.2}
.weekly-modal-nav:hover {opacity: 1;background: #ffffff;color: var(--color-primary);box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2)}
.weekly-modal-nav:disabled {opacity: 0.3;cursor: not-allowed}
.weekly-modal-nav:disabled:hover {background: rgba(255, 255, 255, 0.9);color: var(--color-text-muted);box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15)}
.weekly-modal-nav svg {width: 24px;height: 24px}
.weekly-modal-nav-prev {left: 8px}
.weekly-modal-nav-next {right: 8px}
@media (max-width: 480px) {.weekly-modal-nav {width: 40px;height: 40px}
.weekly-modal-nav svg {width: 20px;height: 20px}
.weekly-modal-nav-prev {left: 4px}
.weekly-modal-nav-next {right: 4px}}
.weekly-modal-pagination {display: flex;justify-content: center;gap: 8px;padding: 12px 0 16px;background: white;border-top: 1px solid var(--color-border)}
.weekly-modal-dot {width: 10px;height: 10px;border-radius: 50%;border: none;background-color: #cbd5e1;cursor: pointer;padding: 0;transition: all 0.2s ease}
.weekly-modal-dot:hover {background-color: var(--color-text-light)}
.weekly-modal-dot.active {background-color: var(--color-primary);transform: scale(1.2)}
.supporter-slide-body {max-height: 60vh;overflow-y: auto;overflow-x: hidden;position: relative}
.scroll-indicator {position: sticky;bottom: 0;left: 0;right: 0;display: flex;justify-content: center;padding: 8px 0;background: linear-gradient(to top, rgba(255, 255, 255, 0.95) 0%, rgba(255, 255, 255, 0) 100%);opacity: 0;visibility: hidden;transition: opacity 0.3s ease, visibility 0.3s ease;pointer-events: none}
.scroll-indicator.visible {opacity: 1;visibility: visible}
.scroll-indicator svg {width: 24px;height: 24px;color: #9ca3af;animation: bounceDown 1.5s ease-in-out infinite}
@keyframes bounceDown {0%, 100% { transform: translateY(0); }
50% { transform: translateY(4px); }}
.supporter-slide-content {text-align: center;padding: 10px;width: 100%;max-width: 100%;overflow: hidden;box-sizing: border-box}
.supporter-slide-icon {margin-bottom: 16px}
.supporter-slide-icon i {font-size: 2.5em;color: var(--color-danger);animation: heartbeat 1.5s ease-in-out infinite}
@keyframes heartbeat {0%, 100% { transform: scale(1); }
50% { transform: scale(1.1); }}
.supporter-slide-title {color: #f97316;font-size: 1.3em;margin: 0 0 16px 0;font-weight: 600}
.supporter-slide-message {padding: 12px 16px;background: linear-gradient(135deg, #fff7ed 0%, #ffffff 100%);border-radius: 8px;margin-bottom: 16px;border: 1px solid #fed7aa}
.supporter-slide-message p {margin: 0 0 8px 0;color: #4a5568;font-size: 0.9em;line-height: 1.6;text-align: left}
.supporter-slide-message p:last-child {margin-bottom: 0}
.supporter-slide-thanks {font-weight: 600;color: var(--color-text-primary)}
.supporter-slide-feedback {margin-bottom: 12px;padding: 10px 12px;background: #f0f9ff;border-radius: 8px;border: 1px solid #bae6fd}
.supporter-slide-feedback p {margin: 0 0 10px 0;color: #0369a1;font-size: 0.85em;line-height: 1.5}
.supporter-slide-twitter-link {display: inline-flex;align-items: center;gap: 10px;padding: 8px 14px;background: #000000;color: #ffffff;border-radius: 20px;text-decoration: none;transition: all 0.2s ease}
.supporter-slide-twitter-link:hover {background: #333333;transform: translateY(-1px);color: #ffffff}
.supporter-slide-twitter-icon {display: flex;align-items: center;justify-content: center}
.supporter-slide-twitter-info {display: flex;flex-direction: column;line-height: 1.2}
.supporter-slide-twitter-label {font-size: 0.7em;opacity: 0.8}
.supporter-slide-twitter-handle {font-size: 0.85em;font-weight: 600}
.supporter-slide-support-section {margin-bottom: 12px;padding: 10px 12px;background: linear-gradient(135deg, #fff7ed 0%, #ffffff 100%);border-radius: 8px;border: 1px solid #fed7aa}
.supporter-slide-support-section p {margin: 0 0 6px 0;color: #4a5568;font-size: 0.85em;line-height: 1.5;text-align: left}
.supporter-slide-support-section p:last-child {margin-bottom: 0}
.supporter-slide-support-cta {color: #ea580c !important;font-weight: 500}
.supporter-slide-marquee-wrapper {overflow: hidden;position: relative;width: 100%;mask-image: linear-gradient(to right, transparent 0%, black 15%, black 85%, transparent 100%);-webkit-mask-image: linear-gradient(to right, transparent 0%, black 15%, black 85%, transparent 100%);mask-size: 100% 100%;-webkit-mask-size: 100% 100%;mask-repeat: no-repeat;-webkit-mask-repeat: no-repeat}
.supporter-slide-marquee {display: flex;width: max-content;animation: marquee 20s linear infinite}
.supporter-slide-marquee:hover {animation-play-state: paused}
.supporter-slide-marquee-content {display: flex;gap: 8px;padding-right: 8px}
@keyframes marquee {0% {transform: translateX(0)}
100% {transform: translateX(-50%)}}
.supporter-slide-list {margin-bottom: 16px;padding: 12px;background-color: var(--color-bg-muted);border-radius: 8px;border: 1px solid var(--color-border);overflow: hidden}
.supporter-slide-list h5 {color: #1877f2;margin: 0 0 10px 0;font-size: 0.85em;display: flex;align-items: center;justify-content: center;gap: 6px}
.supporter-slide-name {background: linear-gradient(135deg, #1877f2 0%, #0d5bbd 100%);color: #ffffff;padding: 3px 10px;border-radius: 12px;font-size: 0.8em;font-weight: 500;text-decoration: none;transition: all 0.2s ease}
.supporter-slide-name:hover {background: linear-gradient(135deg, #0d5bbd 0%, #0a4a9e 100%);transform: translateY(-1px);color: #ffffff}
.supporter-slide-cta {margin-top: 16px}
.supporter-slide-button {display: inline-flex;align-items: center;justify-content: center;gap: 8px;background: linear-gradient(135deg, #f97316 0%, #ea580c 100%);color: #ffffff;padding: 12px 24px;border-radius: 8px;font-size: 0.95em;font-weight: 600;text-decoration: none;box-shadow: 0 4px 12px rgba(249, 115, 22, 0.3);transition: all 0.3s ease}
.supporter-slide-button:hover {background: linear-gradient(135deg, #ea580c 0%, #c2410c 100%);transform: translateY(-2px);box-shadow: 0 6px 16px rgba(249, 115, 22, 0.4);color: #ffffff}
@media (max-width: 480px) {.supporter-slide-body {max-height: 55vh}
.supporter-slide-icon i {font-size: 2em}
.supporter-slide-title {font-size: 1.1em}
.supporter-slide-message p {font-size: 0.85em}
.supporter-slide-button {padding: 10px 20px;font-size: 0.9em}}
.nice-ranking-body {padding: 12px}
.nice-ranking-list {display: flex;flex-direction: column;gap: 8px}
.nice-ranking-item {display: flex;align-items: center;gap: 12px;padding: 10px 12px;background: var(--color-bg-muted);border-radius: 10px;text-decoration: none;color: inherit;border: 1px solid var(--color-border);transition: all 0.2s ease}
.nice-ranking-item:hover {background: var(--color-bg-secondary);border-color: #cbd5e1;transform: translateX(4px)}
.nice-ranking-item.rank-1-item {background: linear-gradient(135deg, #fffef5 0%, #fef9e7 100%);border: 1.5px solid #fcd34d;box-shadow: 0 2px 6px rgba(252, 211, 77, 0.15)}
.nice-ranking-item.rank-1-item:hover {background: linear-gradient(135deg, #fef9e7 0%, #fef3c7 100%);border-color: #fbbf24;box-shadow: 0 3px 10px rgba(251, 191, 36, 0.2)}
.nice-ranking-item.rank-2-item {background: linear-gradient(135deg, #fafafa 0%, #f5f5f5 100%);border: 1.5px solid #d1d5db;box-shadow: 0 2px 6px rgba(209, 213, 219, 0.15)}
.nice-ranking-item.rank-2-item:hover {background: linear-gradient(135deg, #f5f5f5 0%, #e5e7eb 100%);border-color: #9ca3af}
.nice-ranking-item.rank-3-item {background: linear-gradient(135deg, #fffcf5 0%, #fef7ed 100%);border: 1.5px solid #fdba74;box-shadow: 0 2px 6px rgba(253, 186, 116, 0.15)}
.nice-ranking-item.rank-3-item:hover {background: linear-gradient(135deg, #fef7ed 0%, #fed7aa 100%);border-color: #fb923c}
.nice-ranking-rank-wrapper {display: flex;flex-direction: column;align-items: center;min-width: 32px}
.nice-ranking-crown {width: 22px;height: 22px;margin-bottom: -4px;filter: drop-shadow(0 1px 2px rgba(251, 191, 36, 0.4))}
.nice-ranking-rank {font-size: 1.2em;font-weight: 700;text-align: center;color: var(--color-text-muted)}
.nice-ranking-rank.rank-1 {font-size: 1.3em;color: #d97706}
.nice-ranking-rank.rank-2 {font-size: 1.2em;color: #6b7280}
.nice-ranking-rank.rank-3 {font-size: 1.2em;color: #b45309}
.nice-ranking-image {width: 48px;height: 48px;border-radius: 8px;overflow: hidden;flex-shrink: 0;background: var(--color-border)}
.nice-ranking-thumb {width: 100%;height: 100%;object-fit: cover}
.nice-ranking-no-image {width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;background: linear-gradient(135deg, #e0f2fe 0%, #bae6fd 100%)}
.nice-ranking-no-image i {color: #0284c7;font-size: 1.2em}
.nice-ranking-info {flex: 1;display: flex;flex-direction: column;gap: 2px;min-width: 0}
.nice-ranking-fish-name {font-weight: 600;color: var(--color-text-primary);font-size: 0.95em;white-space: nowrap;overflow: hidden;text-overflow: ellipsis}
.nice-ranking-user {font-size: 0.8em;color: var(--color-text-muted);white-space: nowrap;overflow: hidden;text-overflow: ellipsis}
.nice-ranking-count {display: flex;align-items: center;gap: 4px;color: var(--color-primary);font-weight: 600;font-size: 0.95em;flex-shrink: 0}
.nice-ranking-count i {color: var(--color-primary)}
.nice-ranking-empty {text-align: center;color: #9ca3af;padding: 40px 20px;display: flex;flex-direction: column;align-items: center;gap: 12px}
.nice-ranking-empty i {font-size: 2.5em;color: #fbbf24;opacity: 0.6}
.nice-ranking-empty p {margin: 0;font-size: 0.95em;color: #6b7280}
@media (max-width: 480px) {.nice-ranking-body {padding: 10px}
.nice-ranking-item {gap: 10px;padding: 8px 10px}
.nice-ranking-rank {font-size: 1.1em;min-width: 24px}
.nice-ranking-image {width: 40px;height: 40px}
.nice-ranking-fish-name {font-size: 0.9em}
.nice-ranking-user {font-size: 0.75em}
.nice-ranking-count {font-size: 0.85em}}
.map-filter-btn.active {background: #1877f2;color: #fff}
.map-filter-btn.active:hover {background: #166fe5;color: #fff}
.filter-drawer {position: absolute;top: 0;left: 0;bottom: 28px;width: 320px;background: #fff;z-index: calc(var(--z-index-base) + 10);display: flex;flex-direction: column;box-shadow: 2px 0 16px rgba(0, 0, 0, 0.10);animation: filterDrawerSlideIn 0.22s cubic-bezier(0.4, 0, 0.2, 1);backface-visibility: hidden}
@keyframes filterDrawerSlideIn {from {opacity: 0;transform: translate3d(-16px, 0, 0)}
to {opacity: 1;transform: translate3d(0, 0, 0)}}
.filter-drawer.hidden {display: none}
.filter-drawer-header {display: flex;align-items: center;justify-content: space-between;padding: 14px 16px;border-bottom: 1px solid var(--color-border);flex-shrink: 0}
.filter-drawer-header-left {display: flex;align-items: center;gap: 8px}
.filter-drawer-header h4 {margin: 0;font-size: 0.9375rem;font-weight: 700;color: var(--color-text-primary)}
.filter-drawer-count {font-size: 0.6875rem;font-weight: 600;color: #fff;background: var(--color-primary);border-radius: 10px;padding: 2px 8px;white-space: nowrap;text-align: center;display: none}
.filter-drawer-count.visible {display: inline-block}
.filter-drawer-close {width: 32px;height: 32px;padding: 0;background: none;border: none;color: var(--color-text-muted);cursor: pointer;display: flex;align-items: center;justify-content: center;border-radius: var(--radius-sm);transition: background 0.15s, color 0.15s}
.filter-drawer-close:hover {background: var(--color-bg-secondary);color: var(--color-text-primary)}
.filter-drawer-tags {display: flex;flex-wrap: wrap;gap: 6px;padding: 0 16px;max-height: 0;overflow: hidden;transition: max-height 0.2s ease, padding 0.2s ease}
.filter-drawer-tags.has-tags {padding: 10px 16px;max-height: 120px;overflow-y: auto;border-bottom: 1px solid var(--color-border)}
.filter-tag {display: flex;align-items: center;gap: 4px;padding: 3px 8px 3px 10px;background: var(--color-bg-secondary);border: 1px solid var(--color-border);border-radius: 14px;font-size: 0.75rem;color: var(--color-text-secondary)}
.filter-tag-remove {width: 16px;height: 16px;border: none;background: none;color: var(--color-text-muted);cursor: pointer;display: flex;align-items: center;justify-content: center;border-radius: 50%;font-size: 11px;line-height: 1;transition: background 0.15s}
.filter-tag-remove:hover {background: var(--color-border);color: var(--color-text-primary)}
.filter-drawer-body {flex: 1;overflow-y: auto;padding: 12px 0;overscroll-behavior: contain}
.filter-drawer-search {display: flex;align-items: center;gap: 8px;margin: 0 16px 12px;padding: 10px 12px;border: 1.5px solid var(--color-border);border-radius: var(--radius-sm);background: var(--color-bg-muted);transition: border-color 0.15s, background 0.15s}
.filter-drawer-search:focus-within {border-color: var(--color-primary);background: #fff;box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.08)}
.filter-drawer-search svg {flex-shrink: 0;color: var(--color-text-muted)}
.filter-drawer-search input {flex: 1;border: none;outline: none;font-size: 0.875rem;background: transparent;color: var(--color-text-primary);min-width: 0;max-width: 100%}
.filter-drawer-search input::placeholder {color: var(--color-text-light)}
.filter-accordion {border-bottom: 1px solid var(--color-border-light)}
.filter-accordion:last-child {border-bottom: none}
.filter-accordion-trigger {display: flex;align-items: center;gap: 10px;width: 100%;padding: 10px 16px;background: none;border: none;cursor: pointer;color: var(--color-text-primary);transition: background 0.15s;text-align: left}
.filter-accordion-trigger:hover {background: var(--color-bg-muted)}
.filter-accordion-trigger-icon {width: 28px;height: 28px;border-radius: 6px;background: var(--color-bg-muted);display: flex;align-items: center;justify-content: center;flex-shrink: 0;transition: background 0.15s}
.filter-accordion-trigger-icon svg {width: 14px;height: 14px;stroke: var(--color-text-secondary);fill: none;stroke-width: 2}
.filter-accordion[data-expanded="true"] .filter-accordion-trigger-icon {background: #eff6ff}
.filter-accordion[data-expanded="true"] .filter-accordion-trigger-icon svg {stroke: var(--color-primary)}
.filter-accordion-trigger-text {flex: 1;display: flex;flex-direction: column;gap: 1px;min-width: 0}
.filter-accordion-trigger-title {font-size: 0.8125rem;font-weight: 600;color: var(--color-text-primary);white-space: nowrap;overflow: hidden;text-overflow: ellipsis}
.filter-accordion-trigger-summary {font-size: 0.6875rem;color: var(--color-text-muted);white-space: nowrap;overflow: hidden;text-overflow: ellipsis}
.filter-accordion-arrow {transition: transform 0.2s ease;color: var(--color-text-muted);flex-shrink: 0}
.filter-accordion[data-expanded="true"] .filter-accordion-arrow {transform: rotate(180deg)}
.filter-accordion-content {padding: 0 16px 14px;overflow: hidden;transition: max-height 0.25s cubic-bezier(0.4, 0, 0.2, 1),
padding 0.25s cubic-bezier(0.4, 0, 0.2, 1),
opacity 0.2s ease}
.filter-accordion[data-expanded="false"] .filter-accordion-content {max-height: 0;padding-top: 0;padding-bottom: 0;opacity: 0;visibility: hidden}
.filter-accordion[data-expanded="true"] .filter-accordion-content {max-height: 500px;opacity: 1;visibility: visible}
.filter-category-grid {display: grid;grid-template-columns: repeat(3, 1fr);gap: 8px}
.filter-category-chip {display: flex;flex-direction: column;align-items: center;gap: 5px;padding: 10px 4px;border-radius: var(--radius-sm);cursor: pointer;transition: all 0.15s;border: 1.5px solid transparent;background: var(--color-bg-secondary)}
.filter-category-chip:hover {background: var(--color-bg-muted);border-color: var(--color-border)}
.filter-category-chip:has(input:checked) {background: #eff6ff;border-color: var(--color-primary)}
.filter-category-chip input[type="checkbox"] {position: absolute;opacity: 0;width: 0;height: 0}
.filter-chip-icon {width: 28px;height: 28px;object-fit: contain}
.filter-chip-label {font-size: 0.75rem;color: var(--color-text-secondary);font-weight: 500;text-align: center}
.filter-category-chip:has(input:checked) .filter-chip-label {color: var(--color-primary);font-weight: 600}
.filter-chip-row {display: flex;gap: 8px;flex-wrap: wrap}
.filter-detail-chip {display: inline-flex;align-items: center;gap: 6px;padding: 6px 12px 6px 10px;border-radius: 8px;cursor: pointer;transition: all 0.18s ease;border: 1.5px solid var(--color-border);background: var(--color-bg-muted);font-size: 0.8125rem;color: var(--color-text-secondary)}
.filter-detail-chip:hover {border-color: var(--color-primary);color: var(--color-primary);background: rgba(59, 130, 246, 0.04)}
.filter-detail-chip:has(input:checked) {background: var(--color-primary);border-color: var(--color-primary);color: #fff;box-shadow: 0 2px 6px rgba(59, 130, 246, 0.25)}
.filter-detail-chip input[type="checkbox"] {position: absolute;opacity: 0;width: 0;height: 0}
.filter-detail-chip span {white-space: nowrap}
.filter-detail-chip-icon {display: flex;align-items: center;justify-content: center;width: 16px;height: 16px;flex-shrink: 0}
.filter-detail-chip-icon svg {width: 16px;height: 16px}
.filter-range-group {margin-bottom: 14px}
.filter-range-group:last-child {margin-bottom: 0}
.filter-range-label {display: block;font-size: 0.75rem;font-weight: 500;color: var(--color-text-muted);margin-bottom: 6px}
.filter-range-inputs {display: flex;align-items: center;gap: 8px}
.filter-range-inputs input {flex: 1;min-width: 0;max-width: 100%;padding: 8px 10px;border: 1.5px solid var(--color-border);border-radius: var(--radius-sm);font-size: 0.8125rem;background: #fff;box-sizing: border-box;transition: border-color 0.15s}
.filter-range-inputs input:focus {outline: none;border-color: var(--color-primary);box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.08)}
.filter-range-inputs input::placeholder {color: var(--color-text-light)}
.filter-range-sep {color: var(--color-text-muted);font-size: 0.8125rem;flex-shrink: 0}
.filter-range-unit {color: var(--color-text-muted);font-size: 0.75rem;flex-shrink: 0;white-space: nowrap}
.filter-date-quick {display: flex;gap: 6px;flex-wrap: wrap;margin-bottom: 12px}
.filter-date-quick-chip {padding: 6px 12px;border: 1.5px solid var(--color-border);border-radius: 8px;background: #fff;font-size: 0.8125rem;color: var(--color-text-secondary);cursor: pointer;transition: all 0.15s}
.filter-date-quick-chip:hover {border-color: var(--color-primary);color: var(--color-primary)}
.filter-date-quick-chip.active {background: var(--color-primary);border-color: var(--color-primary);color: #fff;box-shadow: 0 2px 6px rgba(59, 130, 246, 0.25)}
.filter-date-custom-group {margin-top: 12px}
.filter-date-row {display: flex;align-items: center;gap: 8px;margin-bottom: 8px}
.filter-date-row:last-child {margin-bottom: 0}
.filter-date-label {font-size: 0.75rem;font-weight: 500;color: var(--color-text-muted);flex-shrink: 0;width: 3.5em}
.filter-date-input {flex: 1;min-width: 0;max-width: 100%;padding: 8px 10px;border: 1.5px solid var(--color-border);border-radius: var(--radius-sm);font-size: 0.8125rem;background: #fff;box-sizing: border-box}
.filter-date-input:focus {outline: none;border-color: var(--color-primary);box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.08)}
.filter-toggle-group {display: flex;flex-direction: column;gap: 2px}
.filter-toggle-row {display: flex;align-items: center;justify-content: space-between;padding: 10px 12px;border-radius: var(--radius-md);transition: background 0.15s;cursor: pointer}
.filter-toggle-row:hover {background: var(--color-bg-muted)}
.filter-toggle-row-text {display: flex;flex-direction: column;gap: 2px;flex: 1;min-width: 0}
.filter-toggle-row-label {font-size: 0.8125rem;font-weight: 500;color: var(--color-text-primary)}
.filter-toggle-row-desc {font-size: 0.6875rem;color: var(--color-text-muted)}
.filter-toggle-disabled {opacity: 0.45;pointer-events: none}
.filter-toggle-subrow {margin-left: 16px;border-left: 2px solid var(--color-border);border-radius: 0 var(--radius-md) var(--radius-md) 0}
.filter-toggle-switch {flex-shrink: 0;position: relative;width: 36px;height: 20px;margin-left: 12px}
.filter-toggle-switch input {opacity: 0;width: 0;height: 0;position: absolute}
.filter-toggle-track {position: absolute;inset: 0;border-radius: 10px;background: var(--color-border);transition: background 0.2s;cursor: pointer}
.filter-toggle-track::after {content: "";position: absolute;top: 3px;left: 3px;width: 14px;height: 14px;border-radius: 50%;background: #fff;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);transition: transform 0.2s}
.filter-toggle-switch input:checked + .filter-toggle-track {background: var(--color-primary)}
.filter-toggle-switch input:checked + .filter-toggle-track::after {transform: translateX(16px)}
.filter-toggle-switch input:focus-visible + .filter-toggle-track {outline: 3px solid rgba(59, 130, 246, 0.4);outline-offset: 1px}
.filter-range-inputs input[type="number"]::-webkit-outer-spin-button,
.filter-range-inputs input[type="number"]::-webkit-inner-spin-button {-webkit-appearance: none;margin: 0}
.filter-range-inputs input[type="number"] {-moz-appearance: textfield}
.filter-prefecture-select {position: relative}
.filter-prefecture-select select {width: 100%;padding: 8px 28px 8px 10px;font-size: 0.85em;border: 1px solid #e0e0e0;border-radius: 6px;background: #fff;color: #333;appearance: none;cursor: pointer;transition: border-color 0.2s}
.filter-prefecture-select select:focus {outline: none;border-color: #1877f2}
.filter-prefecture-select::after {content: '';position: absolute;right: 10px;top: 50%;transform: translateY(-50%);width: 0;height: 0;border-left: 5px solid transparent;border-right: 5px solid transparent;border-top: 5px solid #666;pointer-events: none}
.ship-price-chips {flex-wrap: wrap}
.ship-price-chips .filter-detail-chip {flex: 0 0 auto;white-space: nowrap}
.ship-date-filter__input-wrapper {position: relative;display: flex;align-items: center}
.ship-date-filter__icon {position: absolute;left: 10px;color: #1877f2;pointer-events: none;z-index: 1}
.ship-date-filter input[type="date"] {width: 100%;padding: 10px 10px 10px 34px;border: 1px solid #e0e0e0;border-radius: 8px;font-size: 0.85em;background: var(--color-bg-muted);color: #333;cursor: pointer;transition: all 0.2s}
.ship-date-filter input[type="date"]:hover {background: #fff;border-color: #1877f2}
.ship-date-filter input[type="date"]:focus {outline: none;border-color: #1877f2;background: #fff;box-shadow: 0 0 0 3px rgba(24, 119, 242, 0.1)}
.ship-date-filter input[type="date"]:not(:placeholder-shown),
.ship-date-filter input[type="date"]:valid {background: #fff}
.ship-date-filter input[type="date"]::-webkit-calendar-picker-indicator {cursor: pointer;opacity: 0.6;transition: opacity 0.2s}
.ship-date-filter input[type="date"]::-webkit-calendar-picker-indicator:hover {opacity: 1}
.filter-drawer-footer {display: flex;gap: 10px;padding: 12px 16px;border-top: 1px solid var(--color-border);flex-shrink: 0;background: #fff}
.filter-drawer-clear-btn {flex: 1;padding: 10px;background: var(--color-bg-secondary);border: 1px solid var(--color-border);border-radius: var(--radius-sm);color: var(--color-text-secondary);font-size: 0.8125rem;font-weight: 500;cursor: pointer;transition: background 0.15s}
.filter-drawer-clear-btn:hover {background: var(--color-border)}
.filter-drawer-apply-btn {display: none}
@media (max-width: 768px) {.filter-drawer {width: 100%;max-width: none;bottom: 0;border-radius: 0;box-shadow: none;animation: filterDrawerFadeIn 0.2s ease-out}
@keyframes filterDrawerFadeIn {from { opacity: 0; }
to { opacity: 1; }}
.filter-chip-icon {width: 24px;height: 24px}
.filter-detail-chip {padding: 6px 12px 6px 8px;font-size: 0.75rem}
.filter-detail-chip-icon {width: 14px;height: 14px}
.filter-detail-chip-icon svg {width: 14px;height: 14px}
.filter-drawer-search input,
.filter-range-inputs input,
.filter-date-input,
.filter-fish-name-search input {font-size: 1rem}
.filter-drawer-apply-btn {display: block;flex: 1;padding: 10px;background: var(--color-primary);border: none;border-radius: var(--radius-sm);color: #fff;font-size: 0.8125rem;font-weight: 600;cursor: pointer;transition: background 0.15s}
.filter-drawer-apply-btn:hover {background: var(--color-primary-dark)}}
.home-pending-notice {position: absolute;top: 10px;left: 10px;right: 60px;z-index: 100;display: flex;align-items: center;gap: 12px;padding: 12px 16px;background: linear-gradient(135deg, #fef9e7 0%, #fef3c7 100%);border: 1px solid #fcd34d;border-radius: 12px;box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);text-decoration: none;color: inherit;transition: all 0.2s ease}
.home-pending-notice:hover {background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);border-color: #fbbf24;box-shadow: 0 6px 16px rgba(0, 0, 0, 0.15);transform: translateY(-1px)}
.home-pending-notice > i:first-child {font-size: 1.2em;color: var(--color-warning);flex-shrink: 0}
.home-pending-notice > span {flex: 1;min-width: 0;overflow: hidden}
.home-pending-notice > span strong {display: block;font-size: 0.9em;color: #92400e;margin-bottom: 2px}
.home-pending-notice > span:not(strong) {font-size: 0.8em;color: #a16207;white-space: nowrap;overflow: hidden;text-overflow: ellipsis}
.home-pending-notice > i:last-child {font-size: 0.8em;color: #d97706;flex-shrink: 0}
@media (max-width: 768px) {.home-pending-notice {top: 8px;left: 8px;right: 54px;padding: 10px 12px;gap: 10px;border-radius: 10px}
.home-pending-notice > i:first-child {font-size: 1em}
.home-pending-notice > span strong {font-size: 0.85em}
.home-pending-notice > span:not(strong) {font-size: 0.75em}}
.area-catches-carousel {position: absolute;bottom: 16px;left: 0;right: 0;z-index: 10;pointer-events: none;transform: translateY(30px);opacity: 0;transition: transform 0.45s cubic-bezier(0.16, 1, 0.3, 1),
opacity 0.35s ease;visibility: hidden}
.area-catches-carousel.is-visible {transform: translateY(0);opacity: 1;visibility: visible}
.area-catches-carousel.is-hiding {transform: translateY(20px);opacity: 0;visibility: visible;transition: transform 0.3s cubic-bezier(0.4, 0, 1, 1),
opacity 0.25s ease}
.area-catches-carousel-header {display: flex;align-items: center;gap: 8px;padding: 0 16px 8px;pointer-events: auto}
.area-catches-carousel-title {display: inline-flex;align-items: center;gap: 5px;font-size: 13px;font-weight: 700;color: #fff;background: rgba(0, 0, 0, 0.6);padding: 5px 12px;border-radius: 16px;backdrop-filter: blur(6px);-webkit-backdrop-filter: blur(6px)}
.area-catches-carousel-count {font-weight: 400;opacity: 0.8;margin-left: 2px}
.area-catches-carousel-notice {display: inline-flex;align-items: center;gap: 4px;font-size: 10px;color: rgba(255, 255, 255, 0.8);background: rgba(0, 0, 0, 0.4);padding: 4px 10px;border-radius: 12px;backdrop-filter: blur(6px);-webkit-backdrop-filter: blur(6px)}
.area-catches-carousel-scroll {display: flex;gap: 10px;overflow-x: auto;padding: 0 0 8px;scroll-snap-type: x mandatory;-webkit-overflow-scrolling: touch;scrollbar-width: none;pointer-events: auto}
.area-catches-carousel-scroll .area-catch-card:first-child {margin-left: 16px}
.area-catches-carousel-scroll .area-catch-card:last-child {margin-right: 16px}
.area-catches-carousel-scroll::-webkit-scrollbar {display: none}
.area-catches-nav {display: none;position: absolute;top: 50%;transform: translateY(-50%);width: 36px;height: 36px;border: none;border-radius: 50%;background: rgba(0, 0, 0, 0.55);color: #fff;cursor: pointer;pointer-events: auto;z-index: 12;align-items: center;justify-content: center;backdrop-filter: blur(6px);-webkit-backdrop-filter: blur(6px);transition: background 0.2s ease}
.area-catches-nav:hover {background: rgba(0, 0, 0, 0.75)}
.area-catches-nav.is-hidden {display: none !important}
.area-catches-prev {left: 4px}
.area-catches-next {right: 4px}
@media (min-width: 769px) {.area-catches-nav {display: flex}}
.area-catch-card {flex-shrink: 0;width: 240px;border-radius: 16px;overflow: hidden;background: #fff;box-shadow: 0 8px 32px rgba(0, 0, 0, 0.18), 0 2px 8px rgba(0, 0, 0, 0.1);scroll-snap-align: start;color: #333;display: block;transition: transform 0.2s ease, box-shadow 0.2s ease}
.area-catch-card:hover {transform: translateY(-3px);box-shadow: 0 12px 40px rgba(0, 0, 0, 0.22), 0 4px 12px rgba(0, 0, 0, 0.12)}
.area-catch-card:active {transform: scale(0.97)}
.area-catch-card--mine {box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.7), 0 0 12px rgba(59, 130, 246, 0.25), 0 8px 32px rgba(0, 0, 0, 0.18)}
.area-catch-card--mine:hover {box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.8), 0 0 16px rgba(59, 130, 246, 0.3), 0 12px 40px rgba(0, 0, 0, 0.22)}
.area-catch-card--guild {box-shadow: 0 0 0 3px rgba(34, 197, 94, 0.7), 0 0 12px rgba(34, 197, 94, 0.25), 0 8px 32px rgba(0, 0, 0, 0.18)}
.area-catch-card--guild:hover {box-shadow: 0 0 0 3px rgba(34, 197, 94, 0.8), 0 0 16px rgba(34, 197, 94, 0.3), 0 12px 40px rgba(0, 0, 0, 0.22)}
.area-catch-card--following {box-shadow: 0 0 0 3px rgba(251, 146, 60, 0.7), 0 0 12px rgba(251, 146, 60, 0.25), 0 8px 32px rgba(0, 0, 0, 0.18)}
.area-catch-card--following:hover {box-shadow: 0 0 0 3px rgba(251, 146, 60, 0.8), 0 0 16px rgba(251, 146, 60, 0.3), 0 12px 40px rgba(0, 0, 0, 0.22)}
.area-catch-card-image {width: 100%;height: 150px;position: relative;overflow: hidden;background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%)}
.area-catch-card-image img {width: 100%;height: 100%;object-fit: cover;transition: transform 0.3s ease}
.area-catch-card:hover .area-catch-card-image img {transform: scale(1.05)}
.area-catch-card-image-placeholder {width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%)}
.area-catch-card-image-placeholder svg {width: 48px;height: 48px;fill: none;stroke: #0ea5e9;stroke-width: 1.5;stroke-linecap: round;stroke-linejoin: round;opacity: 0.6}
.area-catch-card-fish-badge {position: absolute;bottom: 10px;left: 10px;right: 10px}
.area-catch-card-fish {display: inline-block;background: linear-gradient(135deg, rgba(59, 130, 246, 0.95) 0%, rgba(37, 99, 235, 0.95) 100%);backdrop-filter: blur(8px);-webkit-backdrop-filter: blur(8px);color: #fff;padding: 6px 12px;border-radius: 20px;font-size: 13px;font-weight: 700;letter-spacing: 0.3px;box-shadow: 0 4px 12px rgba(37, 99, 235, 0.3);max-width: calc(100% - 8px);white-space: nowrap;overflow: hidden;text-overflow: ellipsis;text-decoration: none;cursor: pointer}
.area-catch-card-image > a {display: block;width: 100%;height: 100%}
.area-catch-card-body {padding: 12px}
.area-catch-card-stats {display: grid;grid-template-columns: 1fr 1fr;gap: 6px;margin-bottom: 8px}
.area-catch-card-stat {background: var(--color-bg-muted, #f8fafc);border-radius: 8px;padding: 6px 8px;text-align: center;border: 1px solid var(--color-border, #e2e8f0)}
.area-catch-card-stat-label {font-size: 9px;color: var(--color-text-light, #94a3b8);text-transform: uppercase;letter-spacing: 0.4px}
.area-catch-card-stat-value {font-size: 14px;font-weight: 700;color: var(--color-text-primary, #1e293b)}
.area-catch-card-stat-value.has-value {color: #0284c7}
.area-catch-card-footer {display: flex;justify-content: space-between;align-items: center;padding-top: 8px;border-top: 1px solid var(--color-border-light, #f1f5f9)}
.area-catch-card-user {display: flex;align-items: center;gap: 6px;min-width: 0;flex: 1}
.area-catch-card-avatar {width: 22px;height: 22px;border-radius: 50%;overflow: hidden;flex-shrink: 0;background: #fff;border: 1.5px solid var(--color-border, #e2e8f0);box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08)}
.area-catch-card-avatar img,
.area-catch-card-avatar svg {width: 100%;height: 100%;object-fit: cover}
.area-catch-card-username {font-size: 12px;font-weight: 600;color: var(--color-text-primary, #1e293b);white-space: nowrap;overflow: hidden;text-overflow: ellipsis;text-decoration: none;cursor: pointer}
.area-catch-card-time {font-size: 11px;color: var(--color-text-light, #94a3b8);flex-shrink: 0}
.area-catches-empty {padding: 12px 16px;font-size: 13px;color: rgba(255, 255, 255, 0.8);background: rgba(0, 0, 0, 0.5);border-radius: 12px;margin: 0 16px;text-align: center;backdrop-filter: blur(6px);-webkit-backdrop-filter: blur(6px);pointer-events: auto}