/* Flare[V] v3.5.0 / 2026-06-17 */
:root {
  --bg: #0a0a0f;
  --sidebar: #10101a;
  --panel: #14141f;
  --border: rgba(255, 255, 255, 0.07);
  --text: #f0f0f5;
  --muted: #6b6b80;
  --festival: #ff6b6b;
  --discount: #ffd93d;
  --live: #6bffb8;
  --festival-bg: rgba(255, 107, 107, 0.12);
  --discount-bg: rgba(255, 217, 61, 0.12);
  --live-bg: rgba(107, 255, 184, 0.12);
  
  --cctv: #5ab9ff;
  --cctv-bg: rgba(90, 185, 255, 0.12);
  --yt: #ff4e45;
  --yt-bg: rgba(255, 78, 69, 0.12);
  
  --perf: #f0c419;
  --perf-bg: rgba(240, 196, 25, 0.12);
}

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

body {
  font-family: 'Noto Sans KR', sans-serif;
  background: var(--bg);
  color: var(--text);
  height: 100vh;
  overflow: hidden;
  display: flex;
}

#sidebar {
  width: 280px;
  min-width: 280px;
  background: var(--sidebar);
  border-right: 1px solid var(--border);
  display: flex;
  flex-direction: column;
  z-index: 100;
  position: relative;
  overflow-y: auto;
  transition: transform 0.3s ease;
  scrollbar-width: thin;
  scrollbar-color: rgba(255, 255, 255, 0.18) transparent;
}
#sidebar::-webkit-scrollbar { width: 8px; }
#sidebar::-webkit-scrollbar-track { background: transparent; }
#sidebar::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.12); border-radius: 8px; }
#sidebar::-webkit-scrollbar-thumb:hover { background: rgba(255, 255, 255, 0.22); }
.logo-wrap, .section, .login-wrap { flex-shrink: 0; }

.logo-wrap {
  padding: 28px 24px 20px;
  border-bottom: 1px solid var(--border);
  position: relative;
  overflow: hidden;
}

.logo {
  font-family: 'Bebas Neue', sans-serif;
  font-size: 2rem;
  letter-spacing: 3px;
  line-height: 1;
  position: relative;
  display: inline-block;
  z-index: 2;
}

.logo span {
  color: var(--festival);
  animation: logo-breath 3.5s ease-in-out infinite;
}
@keyframes logo-breath {
  0%, 100% {
    text-shadow: 0 0 10px rgba(255, 107, 107, 0.55);
  }
  50% {
    text-shadow: 0 0 22px rgba(255, 107, 107, 1),
      0 0 38px rgba(255, 107, 107, 0.6);
  }
}

.logo-flare {
  position: absolute;
  left: 96px;
  top: 46px;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: #ffb3a0;
  box-shadow: 0 0 10px #ff6b6b, 0 0 18px #ff6b6b;
  opacity: 0;
  z-index: 1;
  animation: logo-launch 15s ease-out infinite;
}
@keyframes logo-launch {
  0% { transform: translateY(0) scale(1); opacity: 0; }
  2% { opacity: 1; }
  7% { transform: translateY(-32px) scale(0.7); opacity: 1; }
  9% { transform: translateY(-38px) scale(1.6); opacity: 0.5; }
  10% { transform: translateY(-40px) scale(0.2); opacity: 0; }
  100% { transform: translateY(-40px) scale(0.2); opacity: 0; }
}

.logo-light {
  position: absolute;
  left: 98px;
  top: 6px;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: #ffe88a;
  box-shadow: 0 0 14px #ffd93d, 0 0 26px rgba(255, 217, 61, 0.7);
  opacity: 0;
  z-index: 1;
  animation: logo-fall 15s ease-in infinite;
}
@keyframes logo-fall {
  0%, 9% { opacity: 0; transform: translateY(0) scale(0.4); }
  11% { opacity: 1; transform: translateY(0) scale(1.3); }
  14% { opacity: 1; transform: translateY(4px) scale(1); }
  30% { opacity: 0.85; transform: translateY(40px) scale(0.85); }
  34% { opacity: 0; transform: translateY(48px) scale(0.5); }
  100% { opacity: 0; transform: translateY(48px) scale(0.5); }
}

.logo-sub {
  font-size: 0.68rem;
  color: var(--muted);
  letter-spacing: 1.5px;
  margin-top: 4px;
  text-transform: uppercase;
  position: relative;
  z-index: 2;
}

.section {
  padding: 20px 24px;
  border-bottom: 1px solid var(--border);
}

.section-label {
  font-size: 0.65rem;
  letter-spacing: 2px;
  color: var(--muted);
  text-transform: uppercase;
  margin-bottom: 10px;
}

.date-row {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 5px;
}

.date-btn {
  padding: 8px 2px;
  border-radius: 8px;
  border: 1px solid var(--border);
  background: transparent;
  color: var(--muted);
  font-size: 0.66rem;
  font-family: 'Noto Sans KR', sans-serif;
  cursor: pointer;
  transition: all 0.2s;
  white-space: nowrap;
  word-break: keep-all;
}

.date-btn.active {
  background: var(--festival-bg);
  border-color: var(--festival);
  color: var(--festival);
}

.date-btn:hover:not(.active) {
  border-color: rgba(255, 255, 255, 0.2);
  color: var(--text);
}

.date-range {
  margin-top: 10px;
  display: none;
  gap: 8px;
}

.date-range.show {
  display: flex;
  animation: range-pop 0.35s cubic-bezier(0.34, 1.56, 0.64, 1);
}

.range-col {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 0;
}

@keyframes range-pop {
  0% {
    opacity: 0;
    transform: translateY(-8px) scale(0.97);
  }
  100% {
    opacity: 1;
    transform: translateY(0) scale(1);
  }
}

.date-range .range-label {
  font-size: 0.62rem;
  color: var(--muted);
}

.date-range input[type='date'] {
  width: 100%;
  padding: 7px 8px;
  border-radius: 8px;
  border: 1px solid var(--border);
  background: rgba(255, 255, 255, 0.03);
  color: var(--text);
  font-size: 0.66rem;
  font-family: 'Noto Sans KR', sans-serif;
  color-scheme: dark; 
  min-width: 0;
}

.date-range input[type='date']:focus {
  outline: none;
  border-color: var(--festival);
}

.filter-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.filter-item {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 14px;
  border-radius: 10px;
  border: 1px solid transparent;
  cursor: pointer;
  transition: all 0.2s;
  user-select: none;
}

.filter-item.active-festival {
  background: var(--festival-bg);
  border-color: rgba(255, 107, 107, 0.3);
}

.filter-item.active-spot {
  background: var(--live-bg);
  border-color: rgba(107, 255, 184, 0.3);
}

.filter-item.active-cctv {
  background: var(--cctv-bg);
  border-color: rgba(90, 185, 255, 0.3);
}

.filter-item.active-yt {
  background: var(--yt-bg);
  border-color: rgba(255, 78, 69, 0.3);
}

.filter-item:not(.active-festival):not(.active-spot):not(.active-cctv):not(.active-yt):not(.active-tag):not(.active-perf):hover {
  background: rgba(255, 255, 255, 0.04);
}

.filter-dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  flex-shrink: 0;
}

.dot-festival {
  background: var(--festival);
  box-shadow: 0 0 8px rgba(255, 107, 107, 0.8);
}
.dot-spot {
  background: var(--live);
  box-shadow: 0 0 8px rgba(107, 255, 184, 0.8);
}
.dot-cctv {
  background: var(--cctv);
  box-shadow: 0 0 8px rgba(90, 185, 255, 0.8);
}
.dot-yt {
  background: var(--yt);
  box-shadow: 0 0 8px rgba(255, 78, 69, 0.8);
}
.dot-perf {
  background: var(--perf);
  box-shadow: 0 0 8px rgba(255, 217, 61, 0.8);
}

.filter-item.active-tag {
  background: var(--live-bg);
  border-color: rgba(107, 255, 184, 0.3);
}
.filter-item.active-perf {
  background: var(--perf-bg);
  border-color: rgba(255, 217, 61, 0.3);
}

.filter-text {
  flex: 1;
  font-size: 0.82rem;
  font-weight: 500;
}
.filter-count {
  font-size: 0.7rem;
  color: var(--muted);
  background: rgba(255, 255, 255, 0.06);
  padding: 2px 8px;
  border-radius: 20px;
}

.seg3 {
  position: relative;
  display: flex;
  background: rgba(255, 255, 255, 0.05);
  border: 1px solid var(--border);
  border-radius: 12px;
  padding: 4px;
}
.seg3 .seg-thumb {
  position: absolute;
  top: 4px;
  left: 4px;
  width: calc(33.333% - 2.7px);
  height: calc(100% - 8px);
  border-radius: 9px;
  background: var(--festival-bg);
  border: 1px solid rgba(255, 107, 107, 0.4);
  transition: transform 0.28s cubic-bezier(0.4, 0, 0.2, 1), background 0.28s,
    border-color 0.28s;
}
.seg3[data-m='spot'] .seg-thumb {
  transform: translateX(0%);
  background: var(--live-bg);
  border-color: rgba(107, 255, 184, 0.4);
}
.seg3[data-m='festival'] .seg-thumb {
  transform: translateX(100%);
  background: var(--festival-bg);
  border-color: rgba(255, 107, 107, 0.4);
}
.seg3[data-m='live'] .seg-thumb {
  transform: translateX(200%);
  background: var(--cctv-bg);
  border-color: rgba(90, 185, 255, 0.4);
}
.seg3 button {
  position: relative;
  z-index: 2;
  flex: 1;
  padding: 9px 2px;
  background: transparent;
  border: none;
  color: var(--muted);
  font-family: inherit;
  font-size: 0.72rem;
  font-weight: 600;
  cursor: pointer;
  white-space: nowrap;
  transition: color 0.2s;
}
.seg3[data-m='spot'] button.b-spot {
  color: var(--live);
}
.seg3[data-m='festival'] button.b-fest {
  color: var(--festival);
}
.seg3[data-m='live'] button.b-live {
  color: var(--cctv);
}

.cat-group {
  display: none;
}
body[data-mode='spot'] #cat-spot {
  display: flex;
}
body[data-mode='festival'] #cat-festival {
  display: flex;
}
body[data-mode='live'] #cat-live {
  display: flex;
}

body[data-mode='live'] #date-section {
  display: none;
}

body:not([data-mode='spot']) #spot-search,
body:not([data-mode='spot']) #spot-ctx {
  display: none !important;
}

#live-notice {
  display: none;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  text-align: center;
  background: rgba(16, 16, 26, 0.92);
  border: 1px solid var(--border);
  border-radius: 16px;
  padding: 28px 32px;
  z-index: 50;
  max-width: 280px;
  pointer-events: none;
}
body[data-mode='live'] #live-notice {
  display: block;
}
#live-notice .ln-emoji {
  font-size: 2.4rem;
  margin-bottom: 8px;
}
#live-notice .ln-title {
  font-size: 1rem;
  font-weight: 700;
  color: var(--cctv);
  margin-bottom: 8px;
}
#live-notice .ln-sub {
  font-size: 0.82rem;
  color: var(--muted);
  line-height: 1.6;
}

.login-wrap {
  margin-top: auto;
  padding: 20px 24px;
  border-top: 1px solid var(--border);
}

.login-btn {
  width: 100%;
  padding: 12px;
  border-radius: 10px;
  border: 1px solid var(--border);
  background: transparent;
  color: var(--text);
  font-size: 0.82rem;
  font-family: 'Noto Sans KR', sans-serif;
  cursor: pointer;
  transition: all 0.25s;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
}

.login-btn:hover {
  background: rgba(255, 107, 107, 0.1);
  border-color: var(--festival);
  color: var(--festival);
}

#menu-toggle {
  position: absolute;
  top: 16px;
  left: 16px;
  width: 44px;
  height: 44px;
  border-radius: 12px;
  border: 1px solid var(--border);
  background: rgba(20, 20, 31, 0.85);
  backdrop-filter: blur(10px);
  color: var(--text);
  font-size: 1.2rem;
  cursor: pointer;
  z-index: 400;
  display: none; 
  align-items: center;
  justify-content: center;
  transition: transform 0.3s ease; 
}

#sidebar-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.5);
  z-index: 90;
  display: none;
}
#sidebar-overlay.show {
  display: block;
}

#map-container {
  flex: 1;
  position: relative;
}

#map {
  width: 100%;
  height: 100%;
  background: #0d1117;
}

.flare-pin {
  position: relative;
  cursor: pointer;
}

.flare-dot {
  width: 16px;
  height: 16px;
  position: relative;
  animation: dot-pulse 2.5s ease-in-out infinite;
}
.flare-dot::before {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: 50% 50% 50% 0;
  transform: rotate(-45deg);
  background: radial-gradient(circle at 35% 35%, #f3b8af, #e87f95);
  border: 2px solid rgba(255, 255, 255, 0.55);
  box-shadow: 0 0 10px rgba(232, 127, 149, 0.8),
    0 0 18px rgba(232, 127, 149, 0.4);
}

.flare-dot::after {
  content: '';
  position: absolute;
  inset: -5px;
  border-radius: 50%;
  border: 1px solid rgba(232, 127, 149, 0.45);
  animation: ring-pulse 2.5s ease-in-out infinite;
}

.flare-pin.past .flare-dot {
  animation: none; 
}
.flare-pin.past .flare-dot::before {
  background: radial-gradient(circle at 35% 35%, #6a5a7e, #3e3450);
  box-shadow: 0 0 6px rgba(90, 75, 110, 0.5);
}
.flare-pin.past .flare-dot::after {
  display: none; 
}
.flare-pin.past .flare-label {
  border-color: rgba(120, 105, 140, 0.5);
  color: #d8d0e0;
}

.flare-pin.ongoing .flare-dot {
  width: 18px;
  height: 18px;
  margin: -1px; 
}
.flare-pin.ongoing .flare-dot::before {
  background: radial-gradient(circle at 35% 35%, #ffd9cc, #ff5577);
  box-shadow: 0 0 16px rgba(255, 90, 120, 1),
    0 0 30px rgba(255, 90, 120, 0.7),
    0 0 44px rgba(255, 90, 120, 0.4);
}
.flare-pin.ongoing .flare-dot::after {
  inset: -7px;
  border-color: rgba(255, 90, 120, 0.7);
}
.flare-pin.ongoing .flare-label {
  border-color: rgba(255, 90, 120, 0.6);
}
.flare-pin.ongoing {
  z-index: 996;
}

.now-badge {
  position: absolute;
  bottom: 20px;
  left: 50%;
  transform: translateX(-50%);
  background: #fff;
  color: #ff5577;
  font-size: 0.56rem;
  font-weight: 700;
  letter-spacing: 0.5px;
  padding: 2px 7px;
  border-radius: 20px;
  white-space: nowrap;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.45);
  pointer-events: none;
}

.sangsi-badge {
  position: absolute;
  bottom: 20px;
  left: 50%;
  transform: translateX(-50%);
  background: #22c55e;
  color: #0a2a16;
  font-size: 0.56rem;
  font-weight: 700;
  letter-spacing: 0.5px;
  padding: 2px 7px;
  border-radius: 20px;
  white-space: nowrap;
  box-shadow: 0 2px 8px rgba(34, 197, 94, 0.5);
  pointer-events: none;
}

.flare-pin.label-left .flare-label {
  left: auto;
  right: 20px;
  transform: translateY(-50%) translateX(6px) scale(0.9);
}
.flare-pin.label-left.spider .flare-label,
.flare-pin.label-left.zoomed .flare-label,
.flare-pin.label-left:hover .flare-label {
  transform: translateY(-50%) translateX(0) scale(1);
}

.flare-pin.selected .flare-dot::before {
  background: radial-gradient(circle at 35% 35%, #ffffff, #e8e8f0);
  box-shadow: 0 0 14px rgba(255, 255, 255, 0.95),
    0 0 26px rgba(255, 255, 255, 0.55);
}
.flare-pin.selected .flare-dot::after {
  border-color: rgba(255, 255, 255, 0.7);
}
.flare-pin.selected .flare-label {
  border-color: rgba(255, 255, 255, 0.7);
}
.flare-pin.selected {
  z-index: 998 !important;
}

.flare-pin.spider {
  z-index: 997 !important;
}
.flare-pin.spider .flare-label {
  opacity: 1;
  transform: translateY(-50%) translateX(0) scale(1);
}

.flare-pin.spider .flare-dot {
  filter: brightness(1.35) saturate(1.15);
}

.flare-cluster {
  position: absolute;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: radial-gradient(circle at 35% 35%, #f3b8af, #e87f95);
  box-shadow: 0 0 12px rgba(232, 127, 149, 0.7),
    0 0 22px rgba(232, 127, 149, 0.38);
  border: 2px solid rgba(255, 255, 255, 0.28);
  color: #fff;
  font-weight: 700;
  font-size: 0.9rem;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  will-change: transform;
}

@keyframes dot-pulse {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.15); }
}

@keyframes ring-pulse {
  0% { transform: scale(0.8); opacity: 0.8; }
  70% { transform: scale(1.8); opacity: 0; }
  100% { opacity: 0; }
}

.flare-label {
  position: absolute;
  left: 20px;
  top: 50%;
  transform: translateY(-50%) translateX(-6px) scale(0.9);
  font-size: 0.74rem;
  font-weight: 700;
  color: #fff;
  white-space: nowrap;
  padding: 4px 11px;
  border-radius: 20px;
  background: rgba(20, 20, 31, 0.82);
  border: 1px solid rgba(232, 127, 149, 0.5);
  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.5),
    0 0 14px rgba(232, 127, 149, 0.22);
  backdrop-filter: blur(8px);
  letter-spacing: 0.3px;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.25s ease,
    transform 0.25s cubic-bezier(0.34, 1.56, 0.64, 1);
  max-width: 220px;
  overflow: hidden;
  text-overflow: ellipsis;
}

.flare-pin.zoomed .flare-label {
  opacity: 1;
  transform: translateY(-50%) translateX(0) scale(1);
}

.flare-pin:hover {
  z-index: 999 !important;
}
.flare-pin:hover .flare-dot {
  transform: scale(1.3);
}
.flare-pin:hover .flare-label {
  opacity: 1;
  transform: translateY(-50%) translateX(0) scale(1.05);
  border-color: var(--festival);
}

#info-panel {
  position: absolute;
  right: 24px;
  top: 24px;
  width: 320px;
  background: var(--panel);
  border: 1px solid var(--border);
  border-radius: 16px;
  overflow: hidden auto; 
  max-height: calc(100dvh - 48px);
  z-index: 200;
  display: none;
  backdrop-filter: blur(20px);
  transform-origin: top right;
}

#info-panel.show {
  display: block;
  animation: panel-pop 0.4s cubic-bezier(0.34, 1.8, 0.5, 1);
}

@keyframes panel-pop {
  0% {
    transform: scale(0.5) translate(40px, -30px);
    opacity: 0;
  }
  60% {
    transform: scale(1.04) translate(0, 0);
    opacity: 1;
  }
  100% {
    transform: scale(1) translate(0, 0);
  }
}

.panel-header {
  padding: 16px 18px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  border-bottom: 1px solid var(--border);
}

.panel-badge {
  font-size: 0.65rem;
  font-weight: 700;
  letter-spacing: 1.5px;
  padding: 4px 10px;
  border-radius: 20px;
  text-transform: uppercase;
}

.badge-festival {
  background: var(--festival-bg);
  color: var(--festival);
  border: 1px solid rgba(255, 107, 107, 0.3);
}

.panel-close {
  background: none;
  border: none;
  color: var(--muted);
  cursor: pointer;
  font-size: 1.2rem;
  line-height: 1;
  padding: 2px 6px;
  border-radius: 6px;
  transition: all 0.2s;
}

.panel-close:hover {
  background: rgba(255, 255, 255, 0.08);
  color: var(--text);
}

.panel-img {
  position: relative;
  width: 100%;
  height: 160px;
  background: linear-gradient(135deg, #1a1a2e, #16213e);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 3rem;
  overflow: hidden;
  transition: height 0.35s cubic-bezier(0.4, 0, 0.2, 1);
}
.panel-img img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  display: none; 
  cursor: zoom-in;
}

.panel-img.has-photo {
  cursor: zoom-in;
}
.panel-img.has-photo img {
  display: block;
}
.panel-img.has-photo .panel-img-emoji {
  display: none;
}

.panel-img.has-photo::after {
  content: '';
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: radial-gradient(
    ellipse at center,
    transparent 60%,
    rgba(0, 0, 0, 0.32) 100%
  );
}

.panel-img.pan-v img {
  animation: img-pan-v 9s ease-in-out infinite alternate;
}
.panel-img.pan-h img {
  animation: img-pan-h 9s ease-in-out infinite alternate;
}
@keyframes img-pan-v {
  from { object-position: 50% 0%; }
  to   { object-position: 50% 100%; }
}
@keyframes img-pan-h {
  from { object-position: 0% 50%; }
  to   { object-position: 100% 50%; }
}

.panel-body {
  padding: 16px 18px;
}

.panel-title-row {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 12px;
}

.panel-title {
  font-size: 1rem;
  font-weight: 700;
  line-height: 1.3;
  color: #fff;
  
  flex: 1;
  min-width: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.title-link-btn {
  flex-shrink: 0;
  background: rgba(255, 217, 61, 0.14);
  border: 1px solid rgba(255, 217, 61, 0.4);
  cursor: pointer;
  font-size: 0.8rem;
  padding: 3px 7px;
  border-radius: 8px;
  color: var(--discount);
  line-height: 1;
  font-weight: 600;
  font-family: 'Noto Sans KR', sans-serif;
  white-space: nowrap;
  transition: all 0.25s;
  
  box-shadow: 0 0 8px rgba(255, 217, 61, 0.35);
  animation: link-glow 2.8s ease-in-out infinite;
}
@keyframes link-glow {
  0%, 100% {
    box-shadow: 0 0 7px rgba(255, 217, 61, 0.3);
  }
  50% {
    box-shadow: 0 0 14px rgba(255, 217, 61, 0.6),
      0 0 22px rgba(255, 217, 61, 0.3);
  }
}
.title-link-btn:hover {
  background: rgba(255, 217, 61, 0.25);
  border-color: var(--discount);
  transform: scale(1.12);
  box-shadow: 0 0 16px rgba(255, 217, 61, 0.7);
}

.reaction-row {
  display: flex;
  gap: 8px;
  margin-bottom: 14px;
}

.reaction-btn {
  flex: 1;
  padding: 9px;
  border-radius: 10px;
  border: 1px solid var(--border);
  background: transparent;
  color: var(--muted);
  font-size: 0.78rem;
  font-family: 'Noto Sans KR', sans-serif;
  cursor: pointer;
  transition: all 0.2s;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
}

.reaction-btn:hover {
  background: rgba(255, 107, 107, 0.1);
  border-color: rgba(255, 107, 107, 0.4);
  color: var(--festival);
}

.rating-box {
  color: var(--discount);
  font-weight: 700;
  cursor: default;
}
.rating-box.none {
  color: var(--muted);
  font-weight: 500;
  font-size: 0.72rem;
}

.talk-btn {
  color: var(--festival);
  border-color: rgba(255, 107, 107, 0.35);
}
.talk-btn .ic {
  display: inline-block;
  animation: talk-wobble 2.4s ease-in-out infinite;
}
.talk-btn:not(.open) {
  animation: talk-glow 2.4s ease-in-out infinite;
}
@keyframes talk-wobble {
  0%, 92%, 100% { transform: rotate(0); }
  94% { transform: rotate(-12deg); }
  96% { transform: rotate(10deg); }
  98% { transform: rotate(-6deg); }
}
@keyframes talk-glow {
  0%, 100% { box-shadow: 0 0 4px rgba(255, 107, 107, 0.25); }
  50% { box-shadow: 0 0 14px rgba(255, 107, 107, 0.55); }
}

.talk-btn.open {
  color: var(--muted);
  border-color: var(--border);
  background: rgba(255, 255, 255, 0.04);
  animation: none;
}
.talk-btn.open .ic { animation: none; }

.panel-img.reviews-open { height: 320px; cursor: default; }
.panel-img.reviews-open img,
.panel-img.reviews-open .panel-img-emoji { display: none; }
.panel-img.reviews-open::after { display: none; }

.reviews,
.rv-form {
  position: absolute;
  inset: 0;
  display: none;
  flex-direction: column;
  background: #121220;
}
.panel-img.reviews-open .reviews { display: flex; }
.panel-img.reviews-open.form-open .reviews { display: none; }
.panel-img.reviews-open.form-open .rv-form { display: flex; }

.reviews-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 12px 14px 8px;
  flex-shrink: 0;
}
.reviews-head .rv-title { font-size: 0.8rem; font-weight: 700; }
.write-btn {
  background: var(--festival);
  color: #0a0a0f;
  border: none;
  border-radius: 8px;
  font-size: 0.72rem;
  font-weight: 700;
  padding: 6px 11px;
  cursor: pointer;
  font-family: 'Noto Sans KR', sans-serif;
}
.rv-list {
  flex: 1;
  overflow-y: auto;
  padding: 4px 14px 14px;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.rv-empty {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--muted);
  font-size: 0.84rem;
}
.review {
  background: rgba(255, 255, 255, 0.04);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 10px 11px;
}
.review .r-top { display: flex; align-items: center; gap: 7px; margin-bottom: 5px; }
.review .r-author { font-size: 0.74rem; font-weight: 700; }
.review .r-stars { font-size: 0.72rem; color: var(--discount); letter-spacing: 1px; }
.review .r-date { font-size: 0.62rem; color: var(--muted); margin-left: auto; }
.review .r-content {
  font-size: 0.76rem;
  line-height: 1.5;
  color: #dcdce6;
  margin-bottom: 8px;
  word-break: break-word;
}
.review .r-actions { display: flex; align-items: center; gap: 8px; }
.like-btn, .del-btn {
  background: rgba(255, 255, 255, 0.05);
  border: 1px solid var(--border);
  color: var(--muted);
  font-size: 0.68rem;
  border-radius: 7px;
  padding: 4px 9px;
  cursor: pointer;
  font-family: 'Noto Sans KR', sans-serif;
  display: flex;
  align-items: center;
  gap: 4px;
  transition: all 0.15s;
}
.like-btn:hover { border-color: var(--festival); color: var(--festival); }
.like-btn.liked {
  color: var(--festival);
  border-color: rgba(255, 107, 107, 0.4);
  background: rgba(255, 107, 107, 0.1);
}
.del-btn { margin-left: auto; }
.del-btn:hover { border-color: #ff5577; color: #ff5577; }
.del-confirm { display: none; align-items: center; gap: 6px; margin-top: 8px; }
.del-confirm.show { display: flex; }
.del-confirm input {
  width: 100px;
  padding: 5px 8px;
  border-radius: 7px;
  border: 1px solid var(--border);
  background: rgba(255, 255, 255, 0.05);
  color: var(--text);
  font-size: 0.7rem;
  font-family: 'Noto Sans KR', sans-serif;
}
.del-confirm button {
  font-size: 0.66rem;
  border-radius: 7px;
  padding: 5px 9px;
  cursor: pointer;
  border: none;
  font-family: 'Noto Sans KR', sans-serif;
}
.dc-ok { background: #ff5577; color: #fff; }
.dc-no { background: rgba(255, 255, 255, 0.08); color: var(--muted); }

.rv-form { padding: 14px; }
.rv-form h4 { font-size: 0.82rem; margin-bottom: 10px; flex-shrink: 0; }
.rv-form-scroll { flex: 1; overflow-y: auto; min-height: 0; }
.rv-field { margin-bottom: 9px; }
.rv-field label { display: block; font-size: 0.64rem; color: var(--muted); margin-bottom: 4px; }
.rv-field input, .rv-field textarea {
  width: 100%;
  padding: 8px 10px;
  border-radius: 8px;
  border: 1px solid var(--border);
  background: rgba(255, 255, 255, 0.05);
  color: var(--text);
  font-size: 0.76rem;
  font-family: 'Noto Sans KR', sans-serif;
  resize: none;
}
.rv-field input:focus, .rv-field textarea:focus {
  outline: none;
  border-color: var(--festival);
}
.rv-hint { font-size: 0.6rem; color: var(--muted); margin-top: 3px; }
.star-pick { display: flex; gap: 3px; font-size: 1.4rem; cursor: pointer; }
.star-pick span { color: #3a3a48; transition: color 0.1s; }
.star-pick span.on { color: var(--discount); }
.rv-form-msg { font-size: 0.68rem; color: #ff5577; min-height: 15px; margin: 2px 0 6px; flex-shrink: 0; }
.rv-form-btns { display: flex; gap: 8px; flex-shrink: 0; }
.rv-form-btns button {
  flex: 1;
  padding: 9px;
  border-radius: 8px;
  border: none;
  font-size: 0.78rem;
  font-weight: 700;
  cursor: pointer;
  font-family: 'Noto Sans KR', sans-serif;
}
.rv-ok { background: var(--festival); color: #0a0a0f; }
.rv-no { background: rgba(255, 255, 255, 0.07); color: var(--text); }

.panel-meta {
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin-bottom: 14px;
}

.meta-row {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  font-size: 0.75rem;
  color: #e8e8f0;
  line-height: 1.45;
}

.meta-icon {
  font-size: 0.85rem;
  flex-shrink: 0;
}

.panel-desc {
  font-size: 0.78rem;
  line-height: 1.65;
  color: #d2d2de;
  margin-bottom: 14px;
}
.panel-desc .desc-text {
  display: -webkit-box;
  -webkit-line-clamp: 2; 
  -webkit-box-orient: vertical;
  overflow: hidden;
  white-space: pre-line; 
}
.panel-desc.expanded .desc-text {
  display: block;
  -webkit-line-clamp: unset;
  overflow: visible;
}
.desc-more {
  display: none; 
  margin-top: 6px;
  font-size: 0.72rem;
  color: var(--festival);
  cursor: pointer;
  font-weight: 600;
}
.desc-more:hover {
  text-decoration: underline;
}

.panel-program {
  margin-bottom: 14px;
}
.program-head {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 0.75rem;
  color: #e8e8f0;
  font-weight: 600;
  margin-bottom: 6px;
}
.program-body {
  font-size: 0.74rem;
  line-height: 1.6;
  color: #c2c2d0;
  display: -webkit-box;
  -webkit-line-clamp: 2; 
  -webkit-box-orient: vertical;
  overflow: hidden;
  white-space: pre-line;
}
.panel-program.expanded .program-body {
  display: block;
  -webkit-line-clamp: unset;
  overflow: visible;
}
.program-more {
  display: none; 
  margin-top: 6px;
  font-size: 0.72rem;
  color: var(--festival);
  cursor: pointer;
  font-weight: 600;
}
.program-more:hover {
  text-decoration: underline;
}

.nav-btn {
  width: 100%;
  padding: 11px;
  border-radius: 10px;
  border: none;
  font-size: 0.82rem;
  font-family: 'Noto Sans KR', sans-serif;
  font-weight: 700;
  cursor: pointer;
  transition: all 0.2s;
  letter-spacing: 0.5px;
}

.nav-festival {
  background: var(--festival);
  color: #0a0a0f;
}

.nav-btn:hover {
  opacity: 0.85;
  transform: translateY(-1px);
}

#upload-btn {
  position: absolute;
  bottom: 32px;
  right: 32px;
  padding: 14px 24px;
  border-radius: 50px;
  border: none;
  background: var(--live);
  color: #06231a;
  font-size: 0.85rem;
  font-family: 'Noto Sans KR', sans-serif;
  font-weight: 700;
  cursor: pointer;
  z-index: 100;
  display: none;
  align-items: center;
  gap: 8px;
  box-shadow: 0 0 24px rgba(107, 255, 184, 0.45);
  transition: all 0.25s;
  letter-spacing: 0.5px;
}
#upload-btn:hover { filter: brightness(1.05); }
body[data-mode='spot'] #upload-btn { display: flex; }
body.spot-picking #upload-btn,
body.spot-picking #spot-search,
body.spot-picking #locate-btn,
body.spot-picking #menu-toggle { display: none !important; }

#loading {
  position: absolute;
  top: 24px;
  left: 50%;
  transform: translateX(-50%);
  background: var(--panel);
  border: 1px solid var(--border);
  border-radius: 20px;
  padding: 10px 20px;
  font-size: 0.8rem;
  color: var(--muted);
  z-index: 300;
  display: none;
}

#locate-btn {
  position: absolute;
  top: 24px;
  right: 24px;
  width: 44px;
  height: 44px;
  border-radius: 12px;
  border: 1px solid var(--border);
  background: rgba(20, 20, 31, 0.85);
  backdrop-filter: blur(10px);
  color: var(--text);
  font-size: 1.2rem;
  cursor: pointer;
  z-index: 150;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: all 0.2s;
}
#locate-btn:hover {
  background: rgba(255, 107, 107, 0.15);
  border-color: var(--festival);
  color: var(--festival);
}
#locate-btn.locating {
  animation: locate-spin 1s linear infinite;
}
@keyframes locate-spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

.my-location-dot {
  width: 16px;
  height: 16px;
  border-radius: 50%;
  background: #4285f4;
  border: 2px solid #fff;
  box-shadow: 0 0 0 6px rgba(66, 133, 244, 0.25),
    0 0 12px rgba(66, 133, 244, 0.6);
}

.map-picker {
  display: none;
  margin-top: 10px;
  padding: 14px;
  background: rgba(255, 255, 255, 0.04);
  border: 1px solid var(--border);
  border-radius: 12px;
  gap: 10px;
  justify-content: space-around;
}
.map-picker.show {
  display: flex;
}
.map-app-btn {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  background: none;
  border: none;
  cursor: pointer;
  color: var(--text);
  font-size: 0.7rem;
  font-family: 'Noto Sans KR', sans-serif;
  padding: 8px 12px;
  border-radius: 10px;
  transition: background 0.2s;
}
.map-app-btn:hover {
  background: rgba(255, 255, 255, 0.08);
}
.map-app-btn img {
  width: 36px;
  height: 36px;
  border-radius: 10px;
}
#modal-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.7);
  backdrop-filter: blur(4px);
  z-index: 999;
  display: none;
  align-items: center;
  justify-content: center;
}

#modal-overlay.show {
  display: flex;
}

.modal {
  background: var(--panel);
  border: 1px solid var(--border);
  border-radius: 20px;
  padding: 36px;
  width: 340px;
  text-align: center;
}

.modal-logo {
  font-family: 'Bebas Neue', sans-serif;
  font-size: 2.2rem;
  letter-spacing: 3px;
  margin-bottom: 6px;
}

.modal-logo span {
  color: var(--festival);
  text-shadow: 0 0 18px rgba(255, 107, 107, 0.7);
}

.modal h3 {
  font-size: 0.95rem;
  font-weight: 500;
  color: var(--muted);
  margin-bottom: 28px;
}

.modal-btn {
  width: 100%;
  padding: 13px;
  border-radius: 12px;
  border: 1px solid var(--border);
  background: rgba(255, 255, 255, 0.04);
  color: var(--text);
  font-size: 0.85rem;
  font-family: 'Noto Sans KR', sans-serif;
  cursor: pointer;
  margin-bottom: 10px;
  transition: all 0.2s;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
}

.modal-btn:hover {
  background: rgba(255, 255, 255, 0.08);
  border-color: rgba(255, 255, 255, 0.2);
}

.modal-cancel {
  background: none;
  border: none;
  color: var(--muted);
  font-size: 0.8rem;
  font-family: 'Noto Sans KR', sans-serif;
  cursor: pointer;
  margin-top: 8px;
  padding: 8px;
}

.modal-cancel:hover {
  color: var(--text);
}

.contact-btn {
  width: 100%;
  padding: 11px;
  border-radius: 10px;
  border: 1px solid var(--border);
  background: transparent;
  color: var(--muted);
  font-size: 0.8rem;
  font-family: 'Noto Sans KR', sans-serif;
  cursor: pointer;
  transition: all 0.2s;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
}
.contact-btn:hover {
  background: rgba(255, 107, 107, 0.1);
  border-color: var(--festival);
  color: var(--festival);
}

#contact-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.7);
  backdrop-filter: blur(4px);
  z-index: 999;
  display: none;
  align-items: center;
  justify-content: center;
}
#contact-overlay.show {
  display: flex;
}

.contact-field {
  text-align: left;
  margin-bottom: 14px;
}
.contact-field label {
  display: block;
  font-size: 0.7rem;
  color: var(--muted);
  margin-bottom: 6px;
  letter-spacing: 0.5px;
}
.contact-field input,
.contact-field textarea {
  width: 100%;
  padding: 10px 12px;
  border-radius: 10px;
  border: 1px solid var(--border);
  background: rgba(255, 255, 255, 0.04);
  color: var(--text);
  font-size: 0.82rem;
  font-family: 'Noto Sans KR', sans-serif;
  resize: vertical;
}
.contact-field input:focus,
.contact-field textarea:focus {
  outline: none;
  border-color: var(--festival);
}

.contact-send {
  background: var(--festival);
  color: #0a0a0f;
  font-weight: 700;
  border: none;
}
.contact-send:hover {
  opacity: 0.88;
}
.contact-send:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

.contact-status {
  font-size: 0.74rem;
  min-height: 18px;
  margin-bottom: 10px;
  text-align: center;
}
.contact-status.ok {
  color: var(--live);
}
.contact-status.err {
  color: var(--festival);
}

@media (max-width: 768px) {
  #menu-toggle {
    display: flex;
  }

  #sidebar {
    position: fixed;
    top: 0;
    left: 0;
    height: 100%;
    transform: translateX(-100%); 
    box-shadow: 4px 0 24px rgba(0, 0, 0, 0.5);
  }

  #sidebar.open {
    transform: translateX(0); 
  }

  #menu-toggle.menu-open {
    transform: translateX(280px);
  }

  #info-panel {
    right: 12px;
    left: 12px;
    width: auto;
    top: 70px;
    max-height: calc(100dvh - 88px);
  }

  #upload-btn {
    bottom: 20px;
    right: 20px;
    padding: 12px 18px;
    font-size: 0.78rem;
  }

  #spot-search, #fest-search {
    top: 16px;
    left: 68px;
    right: 76px;
    width: auto;
    transform: none;
  }
  #spot-search .ss-bar, #fest-search .ss-bar { padding: 5px; gap: 4px; flex-wrap: nowrap; }
  #spot-search .ss-bar input, #fest-search .ss-bar input { font-size: 0.8rem; padding: 6px 8px; min-width: 0; }
  #spot-search .ss-go, #fest-search .ss-go { padding: 0 11px; font-size: 0.78rem; white-space: nowrap; flex-shrink: 0; }
}

#spot-search {
  position: absolute;
  top: 14px;
  left: 50%;
  transform: translateX(-50%);
  width: min(440px, calc(100% - 150px));
  z-index: 240;
}
.ss-bar {
  display: flex;
  gap: 6px;
  background: rgba(20, 20, 31, 0.92);
  border: 1px solid var(--border);
  border-radius: 12px;
  padding: 6px;
  backdrop-filter: blur(10px);
  box-shadow: 0 6px 20px rgba(0, 0, 0, 0.35);
}
.ss-bar input {
  flex: 1;
  border: none;
  background: transparent;
  color: var(--text);
  font-size: 0.85rem;
  padding: 7px 10px;
  font-family: 'Noto Sans KR', sans-serif;
}
.ss-bar input:focus { outline: none; }
.ss-bar input::placeholder { color: var(--muted); }
.ss-go {
  border: none;
  background: var(--live);
  color: #07251a;
  font-weight: 700;
  font-size: 0.82rem;
  padding: 0 14px;
  border-radius: 8px;
  cursor: pointer;
  font-family: 'Noto Sans KR', sans-serif;
}
#spot-search-results {
  display: none;
  margin-top: 6px;
  background: rgba(20, 20, 31, 0.96);
  border: 1px solid var(--border);
  border-radius: 12px;
  overflow: hidden;
  backdrop-filter: blur(10px);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
}
#spot-search-results.show { display: block; }
.sr-item {
  padding: 10px 14px;
  cursor: pointer;
  border-bottom: 1px solid rgba(255, 255, 255, 0.05);
}
.sr-item:last-child { border-bottom: none; }
.sr-item:hover { background: rgba(107, 255, 184, 0.08); }
.sr-nm { font-size: 0.85rem; font-weight: 700; color: #fff; }
.sr-ad { font-size: 0.68rem; color: var(--muted); margin-top: 2px; }
.sr-empty { padding: 12px 14px; font-size: 0.76rem; color: var(--muted); }

.spot-place-label {
  font-size: 0.74rem;
  color: var(--live);
  background: rgba(107, 255, 184, 0.08);
  border: 1px solid rgba(107, 255, 184, 0.25);
  padding: 7px 10px;
  border-radius: 8px;
  margin-bottom: 14px;
  word-break: keep-all;
}

.spot-locrow {
  display: flex; align-items: center; gap: 10px;
  padding: 12px 13px; border-radius: 13px;
  background: var(--live-bg);
  border: 1px solid rgba(107, 255, 184, 0.5);
  box-shadow: 0 0 0 3px rgba(107, 255, 184, 0.1);
  margin-bottom: 14px; cursor: pointer; transition: filter 0.15s;
}
.spot-locrow:hover { filter: brightness(1.08); }
.spot-locrow .slr-ic { font-size: 1.15rem; }
.spot-locrow .slr-txt { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.spot-locrow .slr-txt b {
  font-size: 0.85rem; font-weight: 700; color: var(--live);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.spot-locrow .slr-txt span { font-size: 0.68rem; color: var(--muted); margin-top: 1px; }
.spot-locrow .slr-go {
  font-size: 0.7rem; font-weight: 700; color: #06231a;
  background: var(--live); padding: 6px 11px; border-radius: 9px; white-space: nowrap;
}
.spot-locrow.set { background: rgba(255, 255, 255, 0.04); border-color: var(--border); box-shadow: none; }
.spot-locrow.set .slr-txt b { color: #fff; }
.spot-locrow.set .slr-go { background: transparent; color: var(--live); border: 1px solid rgba(107, 255, 184, 0.5); }

#spot-pick { position: absolute; inset: 0; z-index: 260; display: none; pointer-events: none; }
#spot-pick.show { display: block; }
#spot-pick .sp-top, #spot-pick .sp-back, #spot-pick .sp-searchcol,
#spot-pick .sp-bottom, #spot-pick .ss-bar, #spot-pick .ss-go,
#spot-pick #spot-pick-results { pointer-events: auto; }
.sp-top { position: absolute; top: 14px; left: 12px; right: 12px; display: flex; gap: 8px; align-items: flex-start; }
.sp-back {
  width: 44px; height: 44px; flex: 0 0 44px; border-radius: 12px;
  border: 1px solid var(--border); background: rgba(20, 20, 31, 0.92);
  color: var(--text); font-size: 1.2rem; cursor: pointer; backdrop-filter: blur(10px);
}
.sp-searchcol { flex: 1; min-width: 0; }
#spot-pick-results {
  display: none; margin-top: 6px; background: rgba(20, 20, 31, 0.96);
  border: 1px solid var(--border); border-radius: 12px; overflow: hidden;
  backdrop-filter: blur(10px); box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
}
#spot-pick-results.show { display: block; }
.sp-cross { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -100%); z-index: 261; pointer-events: none; text-align: center; }
.sp-pin { font-size: 2.3rem; line-height: 1; filter: drop-shadow(0 6px 9px rgba(0, 0, 0, 0.55)); animation: sp-bob 1.6s ease-in-out infinite; }
.sp-pindot { width: 10px; height: 4px; background: rgba(0, 0, 0, 0.4); border-radius: 50%; margin: 2px auto 0; filter: blur(0.5px); }
@keyframes sp-bob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-4px); } }
.sp-hint {
  position: absolute; left: 50%; top: calc(50% - 64px); transform: translateX(-50%);
  z-index: 261; pointer-events: none; white-space: nowrap;
  background: rgba(10, 10, 16, 0.85); border: 1px solid var(--border); color: var(--text);
  font-size: 0.72rem; padding: 6px 12px; border-radius: 20px;
}
.sp-bottom { position: absolute; left: 12px; right: 12px; bottom: 16px; z-index: 261; }
.sp-where { font-size: 0.74rem; color: var(--muted); margin: 0 0 8px 4px; }
.sp-where b { color: #fff; font-weight: 600; }
.sp-confirm {
  width: 100%; padding: 14px; border: none; border-radius: 13px; cursor: pointer;
  background: var(--live); color: #06231a; font-weight: 800; font-size: 0.9rem;
  box-shadow: 0 6px 20px rgba(107, 255, 184, 0.3); font-family: 'Noto Sans KR', sans-serif;
}
.sp-confirm:active { transform: scale(0.98); }

@media (max-width: 768px) {
  #spot-search, #fest-search { transition: opacity 0.22s ease, transform 0.24s cubic-bezier(0.34, 1.56, 0.64, 1); }
  #sidebar.open ~ #map-container #spot-search,
  #sidebar.open ~ #map-container #fest-search {
    opacity: 0; transform: scale(0.6); pointer-events: none;
  }
}

#spot-ctx {
  position: absolute;
  background: #1a1a26;
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 5px;
  display: none;
  z-index: 250;
  box-shadow: 0 6px 20px rgba(0, 0, 0, 0.5);
}
#spot-ctx.show { display: block; }
#spot-ctx button {
  background: none;
  border: none;
  color: var(--text);
  font-family: 'Noto Sans KR', sans-serif;
  font-size: 0.82rem;
  padding: 9px 14px;
  cursor: pointer;
  border-radius: 7px;
  white-space: nowrap;
}
#spot-ctx button:hover { background: rgba(255, 255, 255, 0.08); }

.spot-pin { position: relative; cursor: pointer; }

.spot-pin .spot-ring {
  position: absolute;
  left: 8px;
  top: 8px;
  width: 26px;
  height: 26px;
  margin: -13px 0 0 -13px;
  border: 1px solid rgba(107, 255, 184, 0.5);
  border-radius: 50%;
  pointer-events: none;
  z-index: 1;
  animation: ring-pulse 2.5s ease-in-out infinite;
}
.spot-pin .spot-drop {
  position: relative;
  z-index: 2;
  width: 16px;
  height: 16px;
  animation: dot-pulse 2.5s ease-in-out infinite;
}
.spot-pin .spot-drop::before {
  content: '';
  position: absolute;
  inset: 0;
  background: radial-gradient(circle at 35% 35%, #b6ffe0, #6bffb8);
  border-radius: 50% 50% 50% 0;
  transform: rotate(-45deg);
  border: 2px solid rgba(255, 255, 255, 0.55);
  box-shadow: 0 0 10px rgba(107, 255, 184, 0.8),
    0 0 18px rgba(107, 255, 184, 0.4);
}

.spot-pin .spot-count {
  position: absolute;
  left: 14px;
  top: -7px;
  min-width: 16px;
  height: 16px;
  padding: 0 4px;
  background: #14141f;
  border: 1.5px solid #6bffb8;
  color: #6bffb8;
  border-radius: 9px;
  font-size: 0.62rem;
  font-weight: 800;
  line-height: 14px;
  text-align: center;
  z-index: 3;
  box-shadow: 0 0 6px rgba(0, 0, 0, 0.6);
}
.spot-pin:hover .spot-drop { filter: brightness(1.15); }
.spot-pin .spot-label {
  position: absolute;
  left: 20px;
  top: 0;
  transform: translateY(-2px);
  font-size: 0.72rem;
  font-weight: 700;
  color: #fff;
  white-space: nowrap;
  padding: 3px 9px;
  border-radius: 16px;
  background: rgba(20, 20, 31, 0.82);
  border: 1px solid rgba(107, 255, 184, 0.5);
  backdrop-filter: blur(8px);
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.2s;
  max-width: 160px;
  overflow: hidden;
  text-overflow: ellipsis;
}
.spot-pin:hover .spot-label { opacity: 1; }

#spot-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.65);
  backdrop-filter: blur(3px);
  z-index: 999;
  display: none;
  align-items: center;
  justify-content: center;
  padding: 16px;
}
#spot-overlay.show { display: flex; }
.spot-sheet {
  width: 360px;
  max-width: 100%;
  max-height: 90vh;
  overflow-y: auto;
  background: var(--panel);
  border: 1px solid var(--border);
  border-radius: 16px;
  padding: 18px;
}
.spot-sheet h3 { font-size: 0.95rem; margin-bottom: 4px; }
.spot-sheet .sheet-sub { font-size: 0.68rem; color: var(--muted); margin-bottom: 14px; }
.spot-field { margin-bottom: 12px; }
.spot-field label { display: block; font-size: 0.66rem; color: var(--muted); margin-bottom: 5px; }
.spot-field input, .spot-field textarea {
  width: 100%;
  padding: 9px 11px;
  border-radius: 9px;
  border: 1px solid var(--border);
  background: rgba(255, 255, 255, 0.05);
  color: var(--text);
  font-size: 0.8rem;
  font-family: 'Noto Sans KR', sans-serif;
  resize: none;
}
.spot-field input:focus, .spot-field textarea:focus { outline: none; border-color: var(--live); }
.spot-field .hint { font-size: 0.6rem; color: var(--muted); margin-top: 4px; }
.spot-thumbs {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
.spot-thumb {
  position: relative;
  width: 72px;
  height: 72px;
  border-radius: 10px;
  overflow: hidden;
  flex-shrink: 0;
}
.spot-thumb img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.spot-thumb .thumb-del {
  position: absolute;
  top: 3px;
  right: 3px;
  width: 20px;
  height: 20px;
  border: none;
  border-radius: 50%;
  background: rgba(0, 0, 0, 0.62);
  color: #fff;
  font-size: 0.72rem;
  line-height: 1;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
}
.spot-thumb .thumb-del:hover { background: #ff5577; }
.spot-photo-add {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 72px;
  height: 72px;
  border: 1.5px dashed var(--border);
  border-radius: 10px;
  color: var(--muted);
  font-size: 1.5rem;
  cursor: pointer;
  flex-shrink: 0;
}
.spot-photo-add:hover { border-color: var(--live); color: var(--live); }
.spot-tags { display: flex; flex-wrap: wrap; gap: 7px; }
.spot-tag {
  font-size: 0.74rem;
  padding: 6px 12px;
  border-radius: 20px;
  border: 1px solid var(--border);
  background: transparent;
  color: var(--muted);
  cursor: pointer;
  font-family: 'Noto Sans KR', sans-serif;
  transition: all 0.15s;
}
.spot-tag.on { background: var(--live-bg); border-color: var(--live); color: var(--live); }
.spot-tag.live-tag.on { background: var(--live-bg); border-color: var(--live); color: var(--live); }
.live-note {
  display: none;
  font-size: 0.68rem;
  color: var(--live);
  margin-top: 8px;
  background: rgba(107, 255, 184, 0.08);
  border: 1px solid rgba(107, 255, 184, 0.25);
  padding: 8px 10px;
  border-radius: 8px;
}
.live-note.show { display: block; }
.spot-msg { font-size: 0.68rem; color: #ff5577; min-height: 15px; margin: 2px 0 8px; }
.spot-btns { display: flex; gap: 8px; }
.spot-btns button {
  flex: 1;
  padding: 10px;
  border-radius: 9px;
  border: none;
  font-size: 0.82rem;
  font-weight: 700;
  cursor: pointer;
  font-family: 'Noto Sans KR', sans-serif;
}
.spot-ok { background: var(--live); color: #07251a; }
.spot-no { background: rgba(255, 255, 255, 0.07); color: var(--text); }

#spot-panel {
  position: absolute;
  right: 24px;
  top: 24px;
  width: 320px;
  background: var(--panel);
  border: 1px solid var(--border);
  border-radius: 16px;
  overflow: hidden auto;
  max-height: calc(100dvh - 48px);
  z-index: 200;
  display: none;
  backdrop-filter: blur(20px);
}
#spot-panel.show { display: block; animation: panel-pop 0.4s cubic-bezier(0.34, 1.8, 0.5, 1); }
.sp-imgbox {
  position: relative;
  width: 100%;
  height: 180px;
  overflow: hidden;
  background: #16213e;
  display: flex;
  align-items: center;
  justify-content: center;
}
.sp-imgbox img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  display: none;
  cursor: zoom-in;
}
.sp-imgbox.has-photo img { display: block; }
.sp-imgbox.has-photo::after {
  content: '';
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: radial-gradient(
    ellipse at center,
    transparent 60%,
    rgba(0, 0, 0, 0.32) 100%
  );
}
.sp-imgbox.pan-v img {
  animation: img-pan-v 9s ease-in-out infinite alternate;
}
.sp-imgbox.pan-h img {
  animation: img-pan-h 9s ease-in-out infinite alternate;
}
.sp-img-loading {
  position: absolute;
  inset: 0;
  display: none;
  align-items: center;
  justify-content: center;
  color: var(--muted);
  font-size: 0.78rem;
}
.sp-imgbox.loading .sp-img-loading { display: flex; }
.sp-imgbox.loading img { display: none; }
.sp-arrow {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 30px;
  height: 30px;
  border: none;
  border-radius: 50%;
  background: rgba(0, 0, 0, 0.5);
  color: #fff;
  font-size: 1.2rem;
  line-height: 1;
  cursor: pointer;
  display: none;
  align-items: center;
  justify-content: center;
  z-index: 4;
  backdrop-filter: blur(2px);
}
.sp-imgbox.multi .sp-arrow { display: flex; }
.sp-arrow:hover { background: rgba(0, 0, 0, 0.75); }
.sp-arrow-prev { left: 8px; }
.sp-arrow-next { right: 8px; }
.sp-counter {
  position: absolute;
  bottom: 8px;
  right: 10px;
  background: rgba(0, 0, 0, 0.55);
  color: #fff;
  font-size: 0.66rem;
  padding: 2px 8px;
  border-radius: 12px;
  display: none;
  z-index: 4;
}
.sp-imgbox.multi .sp-counter { display: block; }
.sp-body { padding: 16px 18px; }
.sp-title { font-size: 1rem; font-weight: 700; color: #fff; margin-bottom: 6px; }
.sp-author { font-size: 0.7rem; color: var(--muted); margin-bottom: 6px; }
.sp-date { font-size: 0.68rem; color: var(--live); margin-bottom: 10px; }
.sp-desc { font-size: 0.8rem; line-height: 1.6; color: #d2d2de; margin-bottom: 10px; white-space: pre-line; }

@media (max-width: 600px) {
  #spot-panel {
    top: 76px;
    left: 12px;
    right: 12px;
    width: auto;
    max-height: calc(100dvh - 96px);
  }
}
.sp-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 14px; }
.sp-tag { font-size: 0.66rem; padding: 3px 9px; border-radius: 14px; background: var(--live-bg); color: var(--live); border: 1px solid rgba(107, 255, 184, 0.3); }
.sp-report { background: none; border: none; color: var(--muted); font-size: 0.68rem; cursor: pointer; text-decoration: underline; padding: 4px; margin-top: 4px; font-family: 'Noto Sans KR', sans-serif; }
.sp-report:hover { color: #ff5577; }

.perf-pin { position: relative; cursor: pointer; }
.perf-pin .perf-ring {
  position: absolute;
  left: 8px;
  top: 8px;
  width: 26px;
  height: 26px;
  margin: -13px 0 0 -13px;
  border: 1px solid rgba(240, 196, 25, 0.5);
  border-radius: 50%;
  pointer-events: none;
  z-index: 1;
  animation: ring-pulse 2.5s ease-in-out infinite;
}
.perf-pin .perf-drop {
  position: relative;
  z-index: 2;
  width: 16px;
  height: 16px;
  animation: dot-pulse 2.5s ease-in-out infinite;
}
.perf-pin .perf-drop::before {
  content: '';
  position: absolute;
  inset: 0;
  background: radial-gradient(circle at 35% 35%, #ffe680, #f0c419);
  border-radius: 50% 50% 50% 0;
  transform: rotate(-45deg);
  border: 2px solid rgba(255, 255, 255, 0.55);
  box-shadow: 0 0 10px rgba(240, 196, 25, 0.85),
    0 0 18px rgba(240, 196, 25, 0.4);
}
.perf-pin:hover .perf-drop { filter: brightness(1.12); }

.perf-pin.ongoing .perf-drop { width: 18px; height: 18px; margin: -1px; }
.perf-pin.ongoing .perf-drop::before {
  box-shadow: 0 0 16px rgba(240, 196, 25, 1),
    0 0 30px rgba(240, 196, 25, 0.7),
    0 0 44px rgba(240, 196, 25, 0.4);
}
.perf-pin.ongoing { z-index: 996; }

.perf-pin.past .perf-drop { animation: none; }
.perf-pin.past .perf-drop::before {
  background: radial-gradient(circle at 35% 35%, #6a5a7e, #3e3450);
  box-shadow: 0 0 6px rgba(90, 75, 110, 0.5);
}
.perf-pin.past .perf-ring { display: none; }

.perf-pin.selected .perf-drop::before {
  background: radial-gradient(circle at 35% 35%, #ffffff, #e8e8f0);
  box-shadow: 0 0 14px rgba(255, 255, 255, 0.95),
    0 0 26px rgba(255, 255, 255, 0.55);
}
.perf-pin.selected .perf-ring { border-color: rgba(255, 255, 255, 0.7); }
.perf-pin.selected { z-index: 998 !important; }

.perf-pin .perf-label {
  position: absolute;
  left: 22px;
  top: 50%;
  transform: translateY(-50%);
  white-space: nowrap;
  font-size: 0.7rem;
  font-weight: 600;
  color: #fff;
  background: rgba(16, 16, 26, 0.82);
  padding: 2px 7px;
  border-radius: 8px;
  border: 1px solid rgba(240, 196, 25, 0.35);
  opacity: 0;
  transition: opacity 0.15s;
  pointer-events: none;
}
.perf-pin:hover .perf-label { opacity: 1; }

#perf-panel {
  position: absolute;
  right: 24px;
  top: 24px;
  width: 320px;
  background: var(--panel);
  border: 1px solid var(--border);
  border-radius: 16px;
  overflow: hidden auto;
  max-height: calc(100dvh - 48px);
  z-index: 200;
  display: none;
  backdrop-filter: blur(20px);
}
#perf-panel.show { display: block; animation: panel-pop 0.4s cubic-bezier(0.34, 1.8, 0.5, 1); }
.pf-imgbox {
  width: 100%;
  height: 260px;
  background: #16213e;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}
.pf-imgbox img { max-width: 100%; max-height: 100%; object-fit: contain; display: block; }
.pf-body { padding: 16px 18px; }
.pf-title { font-size: 1.05rem; font-weight: 700; color: #fff; margin-bottom: 12px; line-height: 1.35; }
.pf-meta { font-size: 0.82rem; color: var(--text); margin-bottom: 7px; line-height: 1.5; }
.pf-meta:empty { display: none; }
.pf-ticket {
  display: block;
  margin-top: 14px;
  text-align: center;
  padding: 11px 0;
  border-radius: 10px;
  background: var(--perf-bg);
  border: 1px solid rgba(255, 217, 61, 0.4);
  color: var(--perf);
  font-size: 0.85rem;
  font-weight: 700;
  text-decoration: none;
}
.pf-ticket:hover { background: rgba(255, 217, 61, 0.2); }
.pf-ticket.hidden { display: none; }

@media (max-width: 600px) {
  #perf-panel {
    top: 76px;
    left: 12px;
    right: 12px;
    width: auto;
    max-height: calc(100dvh - 96px);
  }
}

.cat-tools { display: flex; gap: 6px; margin-bottom: 8px; }
.cat-tools button {
  flex: 1;
  font-family: inherit;
  font-size: 0.66rem;
  color: var(--muted);
  background: rgba(255, 255, 255, 0.04);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 6px 0;
  cursor: pointer;
  transition: all 0.15s;
}
.cat-tools button:hover { color: var(--text); background: rgba(255, 255, 255, 0.08); }

#fest-search {
  position: absolute;
  top: 14px;
  left: 50%;
  transform: translateX(-50%);
  width: min(440px, calc(100% - 150px));
  z-index: 240;
  display: none;
}
body[data-mode='festival'] #fest-search { display: block; }

.sp-source {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 0.74rem;
  font-weight: 600;
  margin-bottom: 10px;
  padding: 6px 10px;
  border-radius: 8px;
  width: fit-content;
  max-width: 100%;
}
.sp-source.place {
  background: var(--live-bg);
  color: var(--live);
  border: 1px solid rgba(107, 255, 184, 0.3);
}
.sp-source.custom {
  background: rgba(255, 255, 255, 0.05);
  color: var(--muted);
  border: 1px solid var(--border);
}

#fest-search-clear {
  background: rgba(240, 196, 25, 0.15);
  color: var(--perf);
  border: 1px solid rgba(240, 196, 25, 0.6);
  padding: 7px 12px;
}
#fest-search-clear:hover { background: rgba(240, 196, 25, 0.28); }

.ss-go { transition: transform 0.08s ease, filter 0.12s ease; }
.ss-go:active { transform: scale(0.9); filter: brightness(0.85); }

.sp-source.clickable { cursor: pointer; transition: filter 0.15s, background 0.15s; }
.sp-source.clickable:hover { filter: brightness(1.18); }

.live-pin { position: relative; cursor: pointer; }
.live-pin .live-ring {
  position: absolute; left: 8px; top: 8px;
  width: 26px; height: 26px; margin: -13px 0 0 -13px;
  border: 1px solid rgba(255, 78, 69, 0.5); border-radius: 50%;
  pointer-events: none; z-index: 1;
  animation: ring-pulse 2.5s ease-in-out infinite;
}
.live-pin .live-drop {
  position: relative; z-index: 2; width: 16px; height: 16px;
}
.live-pin.on .live-drop { animation: dot-pulse 2.5s ease-in-out infinite; }
.live-pin .live-drop::before {
  content: ''; position: absolute; inset: 0;
  border-radius: 50% 50% 50% 0; transform: rotate(-45deg);
  border: 2px solid rgba(255, 255, 255, 0.55);
}
.live-pin.on .live-drop::before {
  background: radial-gradient(circle at 35% 35%, #ff9b94, #ff4e45);
  box-shadow: 0 0 10px rgba(255, 78, 69, 0.85), 0 0 18px rgba(255, 78, 69, 0.4);
}
.live-pin.off .live-drop::before {
  background: radial-gradient(circle at 35% 35%, #8a8a9a, #55556a);
  box-shadow: 0 0 6px rgba(120, 120, 140, 0.5);
}
.live-pin:hover .live-drop { filter: brightness(1.12); }
.live-pin .live-badge {
  position: absolute; bottom: 20px; left: 50%; transform: translateX(-50%);
  background: #ff4e45; color: #fff; font-size: 0.58rem; font-weight: 800;
  padding: 1px 5px; border-radius: 6px; white-space: nowrap; z-index: 3;
  letter-spacing: 0.04em;
}
.live-pin .live-label {
  position: absolute; left: 22px; top: 50%; transform: translateY(-50%);
  white-space: nowrap; font-size: 0.7rem; font-weight: 600; color: #fff;
  background: rgba(16, 16, 26, 0.82); padding: 2px 7px; border-radius: 8px;
  border: 1px solid rgba(255, 78, 69, 0.35); opacity: 0;
  transition: opacity 0.15s; pointer-events: none;
}
.live-pin:hover .live-label { opacity: 1; }
.live-pin.selected .live-drop::before {
  background: radial-gradient(circle at 35% 35%, #ffffff, #e8e8f0);
  box-shadow: 0 0 14px rgba(255, 255, 255, 0.95), 0 0 26px rgba(255, 255, 255, 0.55);
}
.live-pin.selected { z-index: 998 !important; }

.live-cluster {
  width: 28px; height: 28px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-size: 0.8rem; font-weight: 800; color: #fff; cursor: pointer;
  background: rgba(255, 78, 69, 0.9); border: 2px solid rgba(255, 255, 255, 0.7);
  box-shadow: 0 0 12px rgba(255, 78, 69, 0.7);
}
.live-cluster.off {
  background: rgba(90, 90, 110, 0.9);
  box-shadow: 0 0 8px rgba(90, 90, 110, 0.5);
}

#live-panel {
  position: absolute; right: 24px; top: 24px; width: 360px;
  background: var(--panel); border: 1px solid var(--border);
  border-radius: 16px; overflow: hidden auto; max-height: calc(100dvh - 48px);
  z-index: 200; display: none; backdrop-filter: blur(20px);
}
#live-panel.show { display: block; animation: panel-pop 0.4s cubic-bezier(0.34, 1.8, 0.5, 1); }
.lv-videobox {
  width: 100%; aspect-ratio: 16 / 9; background: #000; display: none;
}
.lv-videobox iframe, .lv-videobox img { width: 100%; height: 100%; border: 0; display: block; object-fit: cover; }
.lv-offline {
  display: none; align-items: center; justify-content: center;
  padding: 10px; font-size: 0.8rem; color: var(--muted);
  background: rgba(255, 255, 255, 0.04);
}
.lv-body { padding: 16px 18px; }
.lv-title { font-size: 1.02rem; font-weight: 700; color: #fff; margin-bottom: 10px; line-height: 1.35; }
.lv-title-link.has-page { cursor: pointer; text-decoration: underline; text-underline-offset: 3px; text-decoration-color: rgba(107, 255, 184, 0.5); }
.lv-title-link.has-page::before { content: "🔗 "; font-size: 0.9em; }
.lv-title-link.has-page:hover { color: var(--live); text-decoration-color: var(--live); }
.lv-meta { font-size: 0.82rem; color: var(--text); margin-bottom: 7px; }
.lv-meta:empty { display: none; }
.lv-place-link { cursor: pointer; transition: color 0.15s; }
.lv-place-link:hover { color: var(--live); }
.lv-link {
  display: block; margin-top: 12px; text-align: center; padding: 11px 0;
  border-radius: 10px; background: rgba(255, 78, 69, 0.15);
  border: 1px solid rgba(255, 78, 69, 0.45); color: #ff6b62;
  font-size: 0.85rem; font-weight: 700; text-decoration: none;
}
.lv-link:hover { background: rgba(255, 78, 69, 0.28); }

.lv-head-left { display: flex; align-items: center; gap: 8px; min-width: 0; }
.lv-yt-pill {
  font-size: 0.62rem; font-weight: 800; letter-spacing: 0.3px;
  padding: 4px 10px; border-radius: 20px;
  background: rgba(255, 78, 69, 0.18); color: #ff6b62;
  border: 1px solid rgba(255, 78, 69, 0.45);
  text-decoration: none; white-space: nowrap; transition: background 0.15s;
}
.lv-yt-pill:hover { background: rgba(255, 78, 69, 0.3); }

#live-notice.has-live { display: none !important; }

@media (max-width: 600px) {
  #live-panel { top: 76px; left: 12px; right: 12px; width: auto; max-height: calc(100dvh - 96px); }
  .lv-sizes { display: none; }
}

.lv-sizes { display: flex; gap: 4px; margin-left: auto; margin-right: 8px; }
.lv-sizes button {
  font-size: 0.66rem; padding: 3px 7px; border-radius: 7px; cursor: pointer;
  background: rgba(255, 255, 255, 0.06); color: var(--muted);
  border: 1px solid var(--border); white-space: nowrap;
}
.lv-sizes button.on {
  background: rgba(255, 78, 69, 0.18); color: #ff6b62;
  border-color: rgba(255, 78, 69, 0.5);
}

#live-panel.size-m { width: 360px; }
#live-panel.size-l { width: 480px; }
#live-panel.size-xl { width: 640px; }

.lv-videowrap { position: relative; }
.lv-resize {
  position: absolute; right: 0; bottom: 0; width: 22px; height: 22px;
  cursor: nwse-resize; touch-action: none; z-index: 5;
  background:
    linear-gradient(135deg, transparent 50%, rgba(255, 255, 255, 0.5) 50%, rgba(255, 255, 255, 0.5) 60%, transparent 60%, transparent 72%, rgba(255, 255, 255, 0.5) 72%, rgba(255, 255, 255, 0.5) 82%, transparent 82%);
}

.lv-reviews { margin-top: 14px; border-top: 1px solid var(--border); padding-top: 12px; }
.lv-rv-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 10px; }
.lv-rating { font-size: 0.82rem; color: #ffd93d; font-weight: 600; }
.lv-write-btn {
  font-size: 0.72rem; padding: 5px 10px; border-radius: 8px; cursor: pointer;
  background: rgba(255, 78, 69, 0.14); color: #ff6b62;
  border: 1px solid rgba(255, 78, 69, 0.4); white-space: nowrap;
}
.lv-write-btn:hover { background: rgba(255, 78, 69, 0.24); }

.lv-rv-form { display: none; margin-top: 10px; }
.lv-reviews.form-open .lv-rv-form { display: block; }
.lv-reviews.form-open .lv-rv-head { opacity: 0.5; }

@media (max-width: 600px) {
  
  #live-panel.size-m, #live-panel.size-l, #live-panel.size-xl { width: auto !important; }
  .lv-resize { display: none; }
}

.lv-desc { margin: 8px 0 4px; }
.lv-desc .desc-text { -webkit-line-clamp: 1; }
.lv-desc.expanded .desc-text { -webkit-line-clamp: unset; }

.filter-item.active-news {
  background: rgba(43, 209, 108, 0.12);
  border-color: rgba(43, 209, 108, 0.3);
}
.dot-news {
  background: #2bd16c;
  box-shadow: 0 0 8px rgba(43, 209, 108, 0.8);
}

.filter-item:not(.active-festival):not(.active-spot):not(.active-cctv):not(.active-yt):not(.active-news):not(.active-tag):not(.active-perf):hover {
  background: rgba(255, 255, 255, 0.04);
}

.live-pin.kind-news .live-ring { border-color: rgba(43, 209, 108, 0.55); }
.live-pin.kind-news.on .live-drop::before {
  background: radial-gradient(circle at 35% 35%, #8af0b4, #2bd16c);
  box-shadow: 0 0 10px rgba(43, 209, 108, 0.85), 0 0 18px rgba(43, 209, 108, 0.4);
}
.live-pin.kind-news .live-badge { background: #2bd16c; }
.live-pin.kind-news .live-label { border-color: rgba(43, 209, 108, 0.4); }

.live-cluster.kind-news {
  background: rgba(43, 209, 108, 0.9);
  box-shadow: 0 0 12px rgba(43, 209, 108, 0.7);
}
.live-cluster.kind-news.off {
  background: rgba(90, 90, 110, 0.9);
  box-shadow: 0 0 8px rgba(90, 90, 110, 0.5);
}

.seg2 {
  position: relative;
  display: flex;
  background: rgba(255, 255, 255, 0.05);
  border: 1px solid var(--border);
  border-radius: 12px;
  padding: 4px;
}
.seg2 .seg-thumb {
  position: absolute;
  top: 4px;
  left: 4px;
  width: calc(50% - 4px);
  height: calc(100% - 8px);
  border-radius: 9px;
  background: var(--live-bg);
  border: 1px solid rgba(107, 255, 184, 0.4);
  transition: transform 0.28s cubic-bezier(0.4, 0, 0.2, 1), background 0.28s,
    border-color 0.28s;
}
.seg2[data-m='spot'] .seg-thumb {
  transform: translateX(0%);
  background: var(--live-bg);
  border-color: rgba(107, 255, 184, 0.4);
}
.seg2[data-m='live'] .seg-thumb {
  transform: translateX(100%);
  background: rgba(255, 78, 69, 0.16);
  border-color: rgba(255, 78, 69, 0.4);
}
.seg2 button {
  position: relative;
  z-index: 2;
  flex: 1;
  padding: 9px 2px;
  background: transparent;
  border: none;
  color: var(--muted);
  font-family: inherit;
  font-size: 0.74rem;
  font-weight: 600;
  cursor: pointer;
  white-space: nowrap;
  transition: color 0.2s;
}
.seg2[data-m='spot'] button.b-spot { color: var(--live); }
.seg2[data-m='live'] button.b-live { color: #ff6b62; }

.filter-item.active-resort {
  background: rgba(240, 196, 25, 0.12);
  border-color: rgba(240, 196, 25, 0.3);
}
.filter-item.active-hotel {
  background: rgba(90, 185, 255, 0.12);
  border-color: rgba(90, 185, 255, 0.3);
}
.dot-resort { background: #f0c419; box-shadow: 0 0 8px rgba(240, 196, 25, 0.8); }
.dot-hotel { background: #5ab9ff; box-shadow: 0 0 8px rgba(90, 185, 255, 0.8); }
.filter-item:not(.active-festival):not(.active-spot):not(.active-cctv):not(.active-yt):not(.active-news):not(.active-resort):not(.active-hotel):not(.active-tag):not(.active-perf):hover {
  background: rgba(255, 255, 255, 0.04);
}

.live-pin.kind-resort .live-ring { border-color: rgba(240, 196, 25, 0.55); }
.live-pin.kind-resort.on .live-drop::before {
  background: radial-gradient(circle at 35% 35%, #ffe680, #f0c419);
  box-shadow: 0 0 10px rgba(240, 196, 25, 0.85), 0 0 18px rgba(240, 196, 25, 0.4);
}
.live-pin.kind-resort .live-badge { background: #f0c419; color: #3a2e00; }
.live-pin.kind-resort .live-label { border-color: rgba(240, 196, 25, 0.4); }
.live-cluster.kind-resort {
  background: rgba(240, 196, 25, 0.92);
  box-shadow: 0 0 12px rgba(240, 196, 25, 0.7);
}

.live-pin.kind-hotel .live-ring { border-color: rgba(90, 185, 255, 0.55); }
.live-pin.kind-hotel.on .live-drop::before {
  background: radial-gradient(circle at 35% 35%, #b3e0ff, #5ab9ff);
  box-shadow: 0 0 10px rgba(90, 185, 255, 0.85), 0 0 18px rgba(90, 185, 255, 0.4);
}
.live-pin.kind-hotel .live-badge { background: #5ab9ff; color: #04263a; }
.live-pin.kind-hotel .live-label { border-color: rgba(90, 185, 255, 0.4); }
.live-cluster.kind-hotel {
  background: rgba(90, 185, 255, 0.92);
  box-shadow: 0 0 12px rgba(90, 185, 255, 0.7);
}

/* ===== v3.5 상단바 통일 ===== */
body { flex-direction: column; }
#sidebar {
  width: auto; min-width: 0; height: 58px; flex-direction: row; align-items: center;
  gap: 16px; padding: 0 18px; border-right: none; border-bottom: 1px solid var(--border);
  overflow: visible; transform: none !important; box-shadow: none; flex-shrink: 0; z-index: 300;
}
#sidebar::-webkit-scrollbar { display: none; }
.logo-wrap { padding: 0; border-bottom: none; overflow: visible; flex-shrink: 0; position: relative; }
.logo { font-size: 1.5rem; }
.logo-sub { display: none; }
.logo-flare { left: 82px; right: auto; top: 14px; }
.logo-light { left: 84px; right: auto; top: -8px; }

.bar-mode { position: relative; display: flex; align-items: center; height: 100%; flex-shrink: 0; }
.bar-mode .seg2 { width: 210px; margin: 0; }
.mode-pop {
  position: absolute; top: calc(100% + 6px); left: 0; width: 300px; max-height: 72vh; overflow: auto;
  background: var(--sidebar, #10101a); border: 1px solid var(--border); border-radius: 14px; padding: 14px;
  box-shadow: 0 20px 50px rgba(0,0,0,0.55); opacity: 0; visibility: hidden; transform: translateY(8px);
  transition: opacity .18s ease, transform .18s ease; z-index: 320;
}
.bar-mode:hover .mode-pop, .bar-mode.open .mode-pop { opacity: 1; visibility: visible; transform: none; }
.mode-pop::before { content: ""; position: absolute; top: -6px; left: 0; right: 0; height: 6px; }
.mode-pop .section { padding: 0 0 12px; border-bottom: 1px solid var(--border); margin-bottom: 12px; }
.mode-pop .section:last-child { border-bottom: none; margin-bottom: 0; padding-bottom: 0; }
.mode-pop .section-label { margin-bottom: 8px; }

.bar-spacer { flex: 1; }
.contact-btn { width: auto; margin: 0; white-space: nowrap; padding: 9px 14px; font-size: 0.8rem; flex-shrink: 0; }
.login-wrap { display: none !important; }
#menu-toggle { display: none !important; }
#sidebar-overlay { display: none !important; }

body[data-mode='live'] #date-section { display: none; }

/* 팝업 제목 밑줄 제거 + View Page 버튼 */
.lv-title-link.has-page { text-decoration: none; }
.lv-title-link.has-page:hover { text-decoration: none; color: var(--live); }
.lv-viewpage {
  display: inline-flex; align-items: center; gap: 6px; margin: 4px 0 2px; padding: 9px 15px;
  border-radius: 11px; border: 1px solid rgba(107,255,184,0.45); background: var(--mint-bg);
  color: var(--mint); font-weight: 800; font-size: 0.82rem; cursor: pointer; font-family: 'Noto Sans KR', sans-serif;
}
.lv-viewpage:hover { filter: brightness(1.12); }

@media (max-width: 768px) {
  #sidebar { position: relative; height: 54px; gap: 10px; padding: 0 12px; left: auto; top: auto; }
  .bar-mode .seg2 { width: 180px; }
  .contact-btn { padding: 8px 11px; font-size: 0.74rem; }
  .mode-pop { position: fixed; left: 8px; right: 8px; top: 58px; width: auto; }
}
