/* camp18: event badge countdown plaques + the hover / tap info card (town sidebar, Lobby "What's on") */
.event-medals { gap: 26px; }
.event-medals .medal { overflow: visible; }
.event-medals .medal img { border-radius: 50%; }
.evt-cd { position: absolute; left: 50%; top: calc(100% + 2px); transform: translateX(-50%); z-index: 2; min-width: 44px; padding: 1px 4px 2px; border-radius: 6px;
  font: 700 10px/1.05 "Source Sans 3", Georgia, sans-serif; white-space: nowrap; text-align: center; color: #fff4d6; pointer-events: none;
  background: linear-gradient(180deg, #6b4226, #3d2412); border: 1.5px solid #d9b25c; box-shadow: 0 2px 5px rgba(0,0,0,.45); }
.evt-cd small { display: block; font-size: 8.5px; font-weight: 600; letter-spacing: .02em; opacity: .9; }
.evt-cd.live { background: linear-gradient(180deg, #2f6b3f, #1b4226); }
.evt-cd.soon { background: linear-gradient(180deg, #7a5a1c, #4a3310); }
.medal.evt-soon img, .medal.evt-soon .fb { filter: saturate(.55) brightness(.85); }
.evt-card { position: fixed; z-index: 200; box-sizing: border-box; padding: 12px 14px 12px; border-radius: 14px; color: #2a1a0c; font-family: Georgia, serif;
  background: linear-gradient(180deg, #f7e8c8, #e8d0a0); border: 4px solid #6b4226; outline: 2px solid #3d2412; box-shadow: inset 0 0 0 2px #b8893a, 0 12px 28px rgba(0,0,0,.55); }
.evt-card .ec-head { display: flex; align-items: center; gap: 8px; padding-right: 26px; }
.evt-card .ec-ic { font-size: 1.6rem; } .evt-card .ec-head b { font-size: 1.08rem; color: #5a1a10; }
.evt-card p { margin: 6px 0; font-size: .92rem; line-height: 1.3; }
.evt-card .ec-rew span { display: inline-block; padding: 0 6px; border-radius: 6px; background: #6b4226; color: #fbe7bf; font-size: .78rem; font-weight: 700; margin-right: 4px; }
.evt-card .ec-cd { font-weight: 700; font-size: 1rem; } .evt-card .ec-cd.live { color: #2f6b3f; } .evt-card .ec-cd.soon { color: #7a4a10; }
.evt-card .ec-go { display: block; width: 100%; margin-top: 6px; padding: 10px; border-radius: 10px; border: 2px solid #e9c27a; cursor: pointer; font: 700 1rem Georgia, serif; color: #fbe7bf;
  background: radial-gradient(circle at 35% 30%, #d0413a, #9c1e1e 60%, #5a0e0e); }
.evt-card .ec-x { position: absolute; top: 6px; right: 6px; width: 30px; height: 30px; border-radius: 50%; border: 2px solid #b8893a; background: #6b4226; color: #fbe7bf; font-size: 1.1rem; cursor: pointer; line-height: 1; }
/* champ_soon1: in-world "Coming soon" card (events with no page yet) */
.evt-soon-wrap { position: fixed; inset: 0; z-index: 210; display: flex; align-items: center; justify-content: center; padding: 16px; background: rgba(20,12,4,.45); }
.evt-soon-wrap[hidden] { display: none !important; }
.evt-soon-wrap .evt-card { position: relative; width: min(320px, 100%); }
.evt-card .ec-soon-tag { display: inline-block; margin: 8px 0 2px; padding: 2px 10px; border-radius: 999px; background: #7a4a10; color: #fbe7bf; font: 700 .85rem Georgia, serif; letter-spacing: .03em; }
@media (max-width: 520px) {
  .event-medals { gap: 6px; bottom: 30px !important; }
  .event-medals .medal { width: 40px; height: 40px; }
  .evt-cd { min-width: 40px; font-size: 9px; padding: 1px 2px; } .evt-cd small { font-size: 8px; }
}

/* ---------- camp18: big in-world "Play Campaign" button (town home + Lobby) ---------- */
.play-camp { display: flex; align-items: center; gap: 12px; box-sizing: border-box; text-decoration: none; color: #fff4d6; cursor: pointer;
  padding: 10px 16px 10px 10px; border-radius: 18px; border: 3px solid #e9c27a; outline: 3px solid #3d2412;
  background: radial-gradient(circle at 30% 25%, #d64a3e, #9c1e1e 55%, #5a0e0e); box-shadow: inset 0 0 0 2px rgba(255,230,170,.35), 0 8px 0 #3d0a0a, 0 14px 26px rgba(0,0,0,.55);
  font-family: Georgia, "Cormorant Garamond", serif; animation: pcGlow 2.4s ease-in-out infinite; }
.play-camp:active { transform: translateY(4px); box-shadow: inset 0 0 0 2px rgba(255,230,170,.35), 0 3px 0 #3d0a0a, 0 6px 14px rgba(0,0,0,.5); }
.play-camp .pc-seal { flex: none; display: grid; place-items: center; width: 58px; height: 58px; border-radius: 50%; font-size: 1.9rem;
  background: radial-gradient(circle at 35% 30%, #f3d77a, #b8872a 65%, #6b4a14); border: 2px solid #fff0c0; box-shadow: 0 3px 6px rgba(0,0,0,.45); }
.play-camp .pc-txt { display: flex; flex-direction: column; min-width: 0; flex: 1; line-height: 1.12; }
.play-camp .pc-txt b { font: 700 1.55rem "Cormorant Garamond", Georgia, serif; letter-spacing: .02em; text-shadow: 0 2px 0 rgba(0,0,0,.45); }
.play-camp .pc-txt em { font-style: normal; font-weight: 700; font-size: 1rem; color: #ffe39a; }
.play-camp .pc-txt small { font-size: .82rem; opacity: .9; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.play-camp .pc-go { flex: none; font-size: 1.5rem; color: #ffe39a; text-shadow: 0 2px 0 rgba(0,0,0,.5); }
@keyframes pcGlow { 50% { box-shadow: inset 0 0 0 2px rgba(255,230,170,.35), 0 8px 0 #3d0a0a, 0 14px 26px rgba(0,0,0,.55), 0 0 26px rgba(255,190,80,.75); } }
/* town home: bottom-left corner over the river bank (no hotspots there); phones: above the event badge row */
.town-play { position: absolute; left: 16px; bottom: 18px; z-index: 19; width: 330px; }
/* phones (portrait): a wooden dock under the painted town holds the Play button + the event badges, and the scene
   ends above it, so no town hotspot is ever under the dock */
@media (orientation: portrait) and (max-width: 699px) {
  .town-home .scene { bottom: 118px; }
  .town-home .home::before { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 118px; z-index: 17; pointer-events: none;
    background: linear-gradient(180deg, #7a4e2c, #4a2c16 60%, #2e1a0c); border-top: 3px solid #d9b25c; box-shadow: 0 -6px 14px rgba(0,0,0,.45), inset 0 2px 0 rgba(255,230,170,.25); }
  .town-play { left: 8px; right: 8px; width: auto; bottom: 64px; padding: 4px 12px 4px 4px; gap: 10px; border-width: 2px; outline-width: 2px; border-radius: 14px; }
  .town-play:active { transform: translateY(3px); }
  .town-play .pc-seal { width: 38px; height: 38px; font-size: 1.2rem; }
  .town-play .pc-txt { flex-direction: row; align-items: baseline; gap: 8px; flex-wrap: wrap; }
  .town-play .pc-txt b { font-size: 1.28rem; } .town-play .pc-txt em { font-size: .88rem; } .town-play .pc-txt small { display: none; }
  .town-play .pc-go { font-size: 1.2rem; }
  .town-home .event-medals { top: auto !important; bottom: 22px !important; right: 50% !important; transform: translateX(50%) !important; flex-direction: row; gap: 5px; }
  .town-home .event-medals .medal { width: 36px; height: 36px; }
  .town-home .evt-cd { min-width: 38px; font-size: 8.5px; padding: 0 2px 1px; } .town-home .evt-cd small { font-size: 7.5px; }
}
/* Lobby: full-width hero button at the top */
.lobby-play { width: min(560px, calc(100% - 20px)); margin: 12px auto 4px; }

/* ---------- camp18: Lobby Challenges / What's on ---------- */
.chal-section .chal-daily, .chal-section .chal-list, .chal-section .won-list { margin: 8px auto; max-width: 560px; }
.chal-card { box-sizing: border-box; padding: 12px 14px; border-radius: 14px; color: #2a1a0c; font-family: Georgia, serif;
  background: linear-gradient(180deg, #f7e8c8, #e8d0a0); border: 4px solid #6b4226; outline: 2px solid #3d2412; box-shadow: inset 0 0 0 2px #b8893a, 0 8px 18px rgba(0,0,0,.45); }
.chal-card h3 { margin: 0 0 4px; font: 700 1.2rem Georgia, serif; color: #5a1a10; display: flex; justify-content: space-between; gap: 8px; align-items: baseline; flex-wrap: wrap; }
.chal-card h3 .cd { font-size: .85rem; color: #2f6b3f; }
.chal-card .sub { margin: 0 0 8px; font-size: .9rem; color: #5a4028; }
.dl-row { display: grid; grid-template-columns: 1fr auto; gap: 4px 10px; align-items: center; padding: 8px 0; border-top: 1px dashed rgba(90,58,20,.35); }
.dl-row b { font-size: 1.02rem; } .dl-row span { grid-column: 1; font-size: .85rem; color: #5a4028; }
.dl-row .go, .ch-row .go { grid-row: 1 / span 2; grid-column: 2; }
.chal-card .go { display: inline-block; min-width: 92px; padding: 11px 14px; border-radius: 10px; border: 2px solid #e9c27a; text-align: center; text-decoration: none; cursor: pointer;
  font: 700 1rem Georgia, serif; color: #fbe7bf; background: radial-gradient(circle at 35% 30%, #d0413a, #9c1e1e 60%, #5a0e0e); }
.chal-card .go.off { background: #8a7a60; border-color: #b9ab8c; pointer-events: none; }
.chal-card .go.done { background: radial-gradient(circle at 35% 30%, #4a9a5a, #2f6b3f 60%, #1b4226); pointer-events: none; }
.chal-card .go.todo { background: #6f6450; border-color: #9c8f73; color: #efe3c6; pointer-events: none; font-size: .85em; }
.dl-you { display: flex; align-items: center; gap: 10px; margin: 6px 0; padding: 8px 10px; border-radius: 12px; background: rgba(255,211,90,.3); border: 2px solid #c9a052; }
.dl-you b:first-child { font: 700 1.6rem Georgia, serif; color: #7a1a14; }
.dl-mini { list-style: none; margin: 4px 0; padding: 0; font-size: .92rem; }
.dl-mini li { display: flex; gap: 6px; padding: 3px 4px; border-bottom: 1px dashed rgba(90,58,20,.3); } .dl-mini li b { flex: 1; } .dl-mini li.you { font-weight: 700; background: rgba(47,107,63,.15); }
.dl-mini .si, .chal-card .si { font-size: .72em; opacity: .7; font-weight: 400; }
.chal-card .tiers { font-size: .85rem; margin: 6px 0 0; } .chal-card .board-link { display: block; text-align: center; margin-top: 6px; color: #7a1a14; font-weight: 700; }
.ch-row { display: grid; grid-template-columns: 40px 1fr auto; gap: 2px 10px; align-items: center; padding: 9px 0; border-top: 1px dashed rgba(90,58,20,.35); }
.ch-row:first-of-type { border-top: 0; }
.ch-row .ic { grid-row: 1 / span 2; font-size: 1.7rem; text-align: center; } .ch-row b { font-size: 1rem; }
.ch-row .meta { grid-column: 2; font-size: .85rem; color: #5a4028; display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.ch-row .go { grid-column: 3; }
.bar { display: inline-block; width: 90px; height: 9px; border-radius: 5px; background: rgba(90,58,20,.25); overflow: hidden; vertical-align: middle; } .bar i { display: block; height: 100%; background: linear-gradient(90deg, #d9a520, #f3d77a); }
.won-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); gap: 30px 10px; padding: 6px 4px 22px; }
.won-item { position: relative; display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 10px 6px 8px; border-radius: 14px; border: 2px solid #8a6230; background: rgba(255,244,214,.75);
  color: #2a1a0c; font: 700 .9rem Georgia, serif; text-align: center; cursor: pointer; }
.won-item .wi-ic { font-size: 1.8rem; }
.won-item .evt-cd { top: calc(100% - 6px); }
.chal-note { text-align: center; font-size: .8rem; color: #f3e3bd; text-shadow: 0 1px 2px #000; margin: 6px 0 0; }

/* ---------- camp19: goals pay out (Claim / Claimed) ---------- */
.goal-group { margin-bottom: 8px; }
.ch-row .go.claim { background: radial-gradient(circle at 35% 30%, #f3d77a, #d9a520 55%, #8a5a10); color: #3a2206; border-color: #fff1c2; box-shadow: 0 0 0 3px rgba(255,211,90,.45), 0 4px 10px rgba(0,0,0,.35); animation: claimPulse 1.4s ease-in-out infinite; }
@keyframes claimPulse { 50% { box-shadow: 0 0 0 7px rgba(255,211,90,.18), 0 4px 10px rgba(0,0,0,.35); } }
.ch-row .go.claimed { background: radial-gradient(circle at 35% 30%, #4a9a5a, #2f6b3f 60%, #1b4226); border-color: #bfe0b0; cursor: default; }
.ch-row.is-ready { background: rgba(255,211,90,.22); border-radius: 10px; padding-left: 4px; padding-right: 4px; }
.ch-row.is-claimed b, .ch-row.is-claimed .meta { opacity: .6; }
.ch-row.is-claimed .rw { text-decoration: line-through; }
.goal-toast { position: fixed; left: 50%; bottom: 24px; transform: translateX(-50%); z-index: 9999; max-width: min(92vw, 520px); padding: 12px 18px; border-radius: 12px;
  background: #2f6b3f; color: #fff6dc; border: 2px solid #e9c27a; font: 700 1rem Georgia, serif; box-shadow: 0 8px 20px rgba(0,0,0,.5); text-align: center; }
.goal-toast.bad { background: #6b2a1a; }
.goal-toast[hidden] { display: none; }
@media (prefers-reduced-motion: reduce) { .ch-row .go.claim { animation: none; } }
