/* Keep animation local to the tile and cheap: CSS transforms, no JS loop. */
.camp-life-walk{animation:camp-worker-route var(--walk-duration,14s) var(--walk-delay,0s) linear infinite}
.camp-life-person{animation:camp-worker-step .8s var(--walk-delay,0s) ease-in-out infinite alternate}
.camp-life-lamp{animation:camp-work-lamp 2.4s ease-in-out infinite alternate}
@keyframes camp-worker-route{0%,10%,100%{transform:translate(0,0)}40%,60%{transform:translate(19px,-9px)}}
@keyframes camp-worker-step{from{transform:translateY(0)}to{transform:translateY(-.6px)}}
@keyframes camp-work-lamp{from{opacity:.55}to{opacity:1}}
.camp-life-paused .camp-life *,.camp-life-distant .camp-life *{animation-play-state:paused!important}
.camp-life-distant .camp-life{visibility:hidden}
.camp-now{margin:14px 0;padding:14px;border:1px solid #b8cab32b;border-radius:18px;background:#122219}
.camp-now>header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px}
.camp-now>header div{display:grid;gap:3px;min-width:0}
.camp-now>header small{font-size:11px;color:#a7bca6;letter-spacing:1px}
.camp-now>header b{font-size:18px;color:#e8ecda}
.camp-now>header button{min-height:44px;min-width:62px;padding:8px 10px;border-radius:12px;font-size:13px;background:#24382a;color:#e1e9d9}
.camp-now-list{display:grid;gap:8px}
.camp-now-list>button{display:flex;align-items:center;gap:10px;min-height:60px;width:100%;padding:12px;text-align:left;border:1px solid #d5dfb923;border-radius:13px;background:#243328;color:#edf0df;margin:0}
.camp-now-list>button>span{font-size:22px;flex:0 0 28px;text-align:center}
.camp-now-list>button>div{display:grid;gap:4px;min-width:0;flex:1}
.camp-now-list>button b{font-size:15px;line-height:1.3;overflow-wrap:anywhere}
.camp-now-list>button small{font-size:12px;line-height:1.45;color:#c0cdb8;overflow-wrap:anywhere}
.camp-now-list>button>i{font-style:normal;font-size:22px}
.camp-now-list>button.camp-now-reward{border-color:#dfc48355;background:#3b3827}
.camp-now-empty{margin:0;padding:10px 0;font-size:13px;line-height:1.5;color:#b8c8af}
.camp-life-note{margin:8px 0 0;font-size:12px;line-height:1.45;color:#aebda8}
.event-options button{min-height:48px}
@media(prefers-reduced-motion:reduce){.camp-life *{animation:none!important}}

.event-decisions .event-options{display:grid;grid-template-columns:1fr;gap:12px}
.event-decisions .event-options button{display:grid;gap:8px;width:100%;text-align:left;padding:16px;border:1px solid #b6c69c55;border-radius:16px;background:#1c3025;color:#eff1e3}
.event-decisions .event-options button b{font-size:17px;line-height:1.35}
.event-decisions .event-options button span{display:block;font-size:13px;line-height:1.5;overflow-wrap:anywhere}
.event-decisions .event-choice-cost{color:#f0d596}
.event-decisions .event-choice-effect{color:#d8e5d0}
.event-decisions .event-choice-missing{color:#ffbf9e}
.event-decisions .event-choice-ready{color:#a5d5a5}
.event-decisions .event-options button:disabled{opacity:.8;cursor:default;background:#252b27}
.event-decisions .event-options button:disabled b{color:#c2c8b8}
.event-decisions .event-preview-note{font-size:12px;line-height:1.5;color:#adc0ab}
.event-decisions .event-choice-pending:after{content:'Решение отправляется…';font-size:12px;color:#dfcb92}
