/* 轻量级对局动画与氛围效果 */
.board{overflow:hidden}.board::after{content:"☁　⛵　☁";position:absolute;top:75px;left:35px;color:#fff9;font-size:25px;letter-spacing:65px;pointer-events:none;animation:drift 18s linear infinite}.cell{transition:transform .2s,filter .2s,background .35s,box-shadow .35s}.cell.pass{animation:passCell .25s ease-out}.cell.landing{animation:landingCell .45s ease-out}.token{transition:left .2s ease-out,top .2s ease-out,transform .2s}.token.happy{animation:happy .65s ease-in-out}.token.sad{animation:sad .5s ease-in-out}.dice.rolling{animation:diceRoll .65s linear infinite}.dice.done{animation:diceDone .35s ease-out}.building{animation:buildUp .5s cubic-bezier(.2,1.35,.35,1)}.coin-fx,.money-fx{position:absolute;z-index:8;font-weight:bold;font-size:17px;pointer-events:none}.coin-fx{color:#f7c94b;animation:coinFly .8s ease-out forwards}.money-fx{animation:moneyFloat .9s ease-out forwards}.money-fx.plus{color:#277b48}.money-fx.minus{color:#d7534d}.notice{transition:background .35s,transform .25s}.notice.ai{background:#6a68a5;animation:noticeIn .35s ease-out}.notice.player{background:#376d89}.weather-rain .board{background:linear-gradient(135deg,#8db7c2,#789ea4)}.weather-night .board{background:linear-gradient(135deg,#35577f,#223b5a)}.help-tip{position:absolute;z-index:10;right:20px;bottom:14px;max-width:225px;padding:9px 12px;border-radius:10px;background:#fff9d4;color:#69572d;font-size:12px;box-shadow:0 4px 12px #0003;animation:noticeIn .5s ease-out}
@keyframes drift{from{transform:translateX(-45px)}to{transform:translateX(210px)}}@keyframes passCell{50%{filter:brightness(1.25);transform:scale(1.06)}}@keyframes landingCell{50%{transform:scale(1.1);box-shadow:0 0 0 5px #fff8,0 0 18px #f8d56a}}@keyframes happy{50%{transform:translateY(-12px) scale(1.12)}}@keyframes sad{25%,75%{transform:translateX(-7px)}}@keyframes diceRoll{to{transform:rotate(360deg)}}@keyframes diceDone{50%{transform:scale(1.35)}}@keyframes buildUp{from{transform:translateY(23px) scale(.2);opacity:0}to{transform:translateY(0) scale(1);opacity:1}}@keyframes coinFly{to{transform:translate(80px,-70px) rotate(180deg);opacity:0}}@keyframes moneyFloat{to{transform:translateY(-45px);opacity:0}}@keyframes noticeIn{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}
